diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 942515c2..d4f6f299 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
 {
-  ".": "2.13.4"
+  ".": "3.0.0"
 }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 900c17c3..5e0d30f1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,28 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [3.0.0](https://github.com/puppeteer/replay/compare/v2.13.4...v3.0.0) (2024-02-05)
+
+
+### ⚠ BREAKING CHANGES
+
+* make replay compatible with Puppeteer v22 ([#758](https://github.com/puppeteer/replay/issues/758))
+* update min version to Node 18 ([#755](https://github.com/puppeteer/replay/issues/755))
+
+### Features
+
+* update min version to Node 18 ([#755](https://github.com/puppeteer/replay/issues/755)) ([41c3d10](https://github.com/puppeteer/replay/commit/41c3d1060ed35a47f790c6c35dd7251fb763fe37))
+
+
+### Bug Fixes
+
+* remove deprecated waitForTimeout ([#747](https://github.com/puppeteer/replay/issues/747)) ([23613b8](https://github.com/puppeteer/replay/commit/23613b87b171087ee9efbf8bbcd6e178e0dd1cac))
+
+
+### Code Refactoring
+
+* make replay compatible with Puppeteer v22 ([#758](https://github.com/puppeteer/replay/issues/758)) ([e594f50](https://github.com/puppeteer/replay/commit/e594f50174507c03dfd2e04fe70b2bc04f69773d))
+
 ## [2.13.4](https://github.com/puppeteer/replay/compare/v2.13.3...v2.13.4) (2023-09-19)
 
 
diff --git a/docs/api/README.md b/docs/api/README.md
index 43e7becf..2449bacb 100644
--- a/docs/api/README.md
+++ b/docs/api/README.md
@@ -359,7 +359,7 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 ### mouseButtonMap
 
-• `Const` **mouseButtonMap**: `ReadonlyMap`<`string`, `"left"` \| `"middle"` \| `"right"` \| `"back"` \| `"forward"`\>
+• `Const` **mouseButtonMap**: `ReadonlyMap`\<`string`, `"left"` \| `"middle"` \| `"right"` \| `"back"` \| `"forward"`\>
 
 #### Defined in
 
@@ -369,7 +369,7 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 ### pointerDeviceTypes
 
-• `Const` **pointerDeviceTypes**: `ReadonlySet`<`string`\>
+• `Const` **pointerDeviceTypes**: `ReadonlySet`\<`string`\>
 
 #### Defined in
 
@@ -379,7 +379,7 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 ### typeableInputTypes
 
-• `Const` **typeableInputTypes**: `ReadonlySet`<`string`\>
+• `Const` **typeableInputTypes**: `ReadonlySet`\<`string`\>
 
 #### Defined in
 
@@ -409,17 +409,17 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 ### createRunner
 
-▸ **createRunner**(): `Promise`<[`Runner`](classes/Runner.md)\>
+▸ **createRunner**(): `Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Returns
 
-`Promise`<[`Runner`](classes/Runner.md)\>
+`Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Defined in
 
 [Runner.ts:102](https://github.com/puppeteer/replay/blob/main/src/Runner.ts#L102)
 
-▸ **createRunner**(`flow`): `Promise`<[`Runner`](classes/Runner.md)\>
+▸ **createRunner**(`flow`): `Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Parameters
 
@@ -429,13 +429,13 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 #### Returns
 
-`Promise`<[`Runner`](classes/Runner.md)\>
+`Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Defined in
 
 [Runner.ts:103](https://github.com/puppeteer/replay/blob/main/src/Runner.ts#L103)
 
-▸ **createRunner**(`extension`): `Promise`<[`Runner`](classes/Runner.md)\>
+▸ **createRunner**(`extension`): `Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Parameters
 
@@ -445,13 +445,13 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 #### Returns
 
-`Promise`<[`Runner`](classes/Runner.md)\>
+`Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Defined in
 
 [Runner.ts:104](https://github.com/puppeteer/replay/blob/main/src/Runner.ts#L104)
 
-▸ **createRunner**(`flow`, `extension`): `Promise`<[`Runner`](classes/Runner.md)\>
+▸ **createRunner**(`flow`, `extension`): `Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Parameters
 
@@ -462,7 +462,7 @@ The format is [version, [lineNo, length], [lineNo, length] ... [lineNo, length]]
 
 #### Returns
 
-`Promise`<[`Runner`](classes/Runner.md)\>
+`Promise`\<[`Runner`](classes/Runner.md)\>
 
 #### Defined in
 
@@ -632,7 +632,7 @@ https://pptr.dev/guides/query-selectors#p-elements
 
 ### stringify
 
-▸ **stringify**(`flow`, `opts?`): `Promise`<`string`\>
+▸ **stringify**(`flow`, `opts?`): `Promise`\<`string`\>
 
 Stringifes an entire recording. The following hooks are invoked with the `flow` parameter containing the entire flow:
 
@@ -651,7 +651,7 @@ Stringifes an entire recording. The following hooks are invoked with the `flow`
 
 #### Returns
 
-`Promise`<`string`\>
+`Promise`\<`string`\>
 
 #### Defined in
 
@@ -661,7 +661,7 @@ Stringifes an entire recording. The following hooks are invoked with the `flow`
 
 ### stringifyStep
 
-▸ **stringifyStep**(`step`, `opts?`): `Promise`<`string`\>
+▸ **stringifyStep**(`step`, `opts?`): `Promise`\<`string`\>
 
 Stringifes a single step. Only the following hooks are invoked with the `flow` parameter as undefined:
 
@@ -678,7 +678,7 @@ Stringifes a single step. Only the following hooks are invoked with the `flow` p
 
 #### Returns
 
-`Promise`<`string`\>
+`Promise`\<`string`\>
 
 #### Defined in
 
diff --git a/docs/api/classes/JSONStringifyExtension.md b/docs/api/classes/JSONStringifyExtension.md
index f09736c8..6c433ef2 100644
--- a/docs/api/classes/JSONStringifyExtension.md
+++ b/docs/api/classes/JSONStringifyExtension.md
@@ -31,7 +31,11 @@ parsers support comments in JSON.
 
 ### constructor
 
-• **new JSONStringifyExtension**()
+• **new JSONStringifyExtension**(): [`JSONStringifyExtension`](JSONStringifyExtension.md)
+
+#### Returns
+
+[`JSONStringifyExtension`](JSONStringifyExtension.md)
 
 #### Inherited from
 
@@ -41,7 +45,7 @@ parsers support comments in JSON.
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(`out`): `Promise`<`void`\>
+▸ **afterAllSteps**(`out`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -51,7 +55,7 @@ parsers support comments in JSON.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -65,7 +69,7 @@ parsers support comments in JSON.
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -77,7 +81,7 @@ parsers support comments in JSON.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -91,7 +95,7 @@ parsers support comments in JSON.
 
 ### beforeAllSteps
 
-▸ **beforeAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -102,7 +106,7 @@ parsers support comments in JSON.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -116,7 +120,7 @@ parsers support comments in JSON.
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -128,7 +132,7 @@ parsers support comments in JSON.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -142,7 +146,7 @@ parsers support comments in JSON.
 
 ### stringifyStep
 
-▸ **stringifyStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **stringifyStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -154,7 +158,7 @@ parsers support comments in JSON.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
diff --git a/docs/api/classes/LighthouseRunnerExtension.md b/docs/api/classes/LighthouseRunnerExtension.md
index 5c75d7ad..617d3a3d 100644
--- a/docs/api/classes/LighthouseRunnerExtension.md
+++ b/docs/api/classes/LighthouseRunnerExtension.md
@@ -27,7 +27,7 @@
 
 ### constructor
 
-• **new LighthouseRunnerExtension**(`browser`, `page`, `opts?`)
+• **new LighthouseRunnerExtension**(`browser`, `page`, `opts?`): [`LighthouseRunnerExtension`](LighthouseRunnerExtension.md)
 
 #### Parameters
 
@@ -38,19 +38,23 @@
 | `opts?`         | `Object`  |
 | `opts.timeout?` | `number`  |
 
+#### Returns
+
+[`LighthouseRunnerExtension`](LighthouseRunnerExtension.md)
+
 #### Inherited from
 
 [PuppeteerRunnerExtension](PuppeteerRunnerExtension.md).[constructor](PuppeteerRunnerExtension.md#constructor)
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:45](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L45)
+[PuppeteerRunnerExtension.ts:51](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L51)
 
 ## Methods
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(`flow`): `Promise`<`void`\>
+▸ **afterAllSteps**(`flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -60,7 +64,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -74,7 +78,7 @@
 
 ### afterEachStep
 
-▸ **afterEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -85,7 +89,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -99,7 +103,7 @@
 
 ### beforeAllSteps
 
-▸ **beforeAllSteps**(`flow`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -109,7 +113,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -123,7 +127,7 @@
 
 ### beforeEachStep
 
-▸ **beforeEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -134,7 +138,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -148,11 +152,11 @@
 
 ### createFlowResult
 
-▸ **createFlowResult**(): `Promise`<`FlowResult`\>
+▸ **createFlowResult**(): `Promise`\<`FlowResult`\>
 
 #### Returns
 
-`Promise`<`FlowResult`\>
+`Promise`\<`FlowResult`\>
 
 #### Defined in
 
@@ -162,7 +166,7 @@
 
 ### runStep
 
-▸ **runStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **runStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -173,7 +177,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -181,4 +185,4 @@
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:66](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L66)
+[PuppeteerRunnerExtension.ts:72](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L72)
diff --git a/docs/api/classes/LighthouseStringifyExtension.md b/docs/api/classes/LighthouseStringifyExtension.md
index 2b2e83e4..a300d4db 100644
--- a/docs/api/classes/LighthouseStringifyExtension.md
+++ b/docs/api/classes/LighthouseStringifyExtension.md
@@ -26,7 +26,11 @@
 
 ### constructor
 
-• **new LighthouseStringifyExtension**()
+• **new LighthouseStringifyExtension**(): [`LighthouseStringifyExtension`](LighthouseStringifyExtension.md)
+
+#### Returns
+
+[`LighthouseStringifyExtension`](LighthouseStringifyExtension.md)
 
 #### Inherited from
 
@@ -36,7 +40,7 @@
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **afterAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -47,7 +51,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -61,7 +65,7 @@
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -73,7 +77,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -87,7 +91,7 @@
 
 ### beforeAllSteps
 
-▸ **beforeAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -98,7 +102,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -112,7 +116,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -124,7 +128,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -138,7 +142,7 @@
 
 ### stringifyStep
 
-▸ **stringifyStep**(`out`, `step`, `flow`): `Promise`<`void`\>
+▸ **stringifyStep**(`out`, `step`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -150,7 +154,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
diff --git a/docs/api/classes/PuppeteerReplayStringifyExtension.md b/docs/api/classes/PuppeteerReplayStringifyExtension.md
index d21a121e..f612d287 100644
--- a/docs/api/classes/PuppeteerReplayStringifyExtension.md
+++ b/docs/api/classes/PuppeteerReplayStringifyExtension.md
@@ -28,7 +28,11 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### constructor
 
-• **new PuppeteerReplayStringifyExtension**()
+• **new PuppeteerReplayStringifyExtension**(): [`PuppeteerReplayStringifyExtension`](PuppeteerReplayStringifyExtension.md)
+
+#### Returns
+
+[`PuppeteerReplayStringifyExtension`](PuppeteerReplayStringifyExtension.md)
 
 #### Inherited from
 
@@ -38,7 +42,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(`out`): `Promise`<`void`\>
+▸ **afterAllSteps**(`out`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -48,7 +52,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -62,7 +66,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -74,7 +78,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -88,7 +92,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### beforeAllSteps
 
-▸ **beforeAllSteps**(`out`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`out`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -98,7 +102,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -112,7 +116,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -124,7 +128,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -138,7 +142,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 ### stringifyStep
 
-▸ **stringifyStep**(`out`, `step`): `Promise`<`void`\>
+▸ **stringifyStep**(`out`, `step`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -149,7 +153,7 @@ Stringifies a user flow to a script that uses @puppeteer/replay's own API.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
diff --git a/docs/api/classes/PuppeteerRunnerExtension.md b/docs/api/classes/PuppeteerRunnerExtension.md
index 41f59c57..39014a49 100644
--- a/docs/api/classes/PuppeteerRunnerExtension.md
+++ b/docs/api/classes/PuppeteerRunnerExtension.md
@@ -30,7 +30,7 @@
 
 ### constructor
 
-• **new PuppeteerRunnerExtension**(`browser`, `page`, `opts?`)
+• **new PuppeteerRunnerExtension**(`browser`, `page`, `opts?`): [`PuppeteerRunnerExtension`](PuppeteerRunnerExtension.md)
 
 #### Parameters
 
@@ -41,19 +41,23 @@
 | `opts?`         | `Object`  |
 | `opts.timeout?` | `number`  |
 
+#### Returns
+
+[`PuppeteerRunnerExtension`](PuppeteerRunnerExtension.md)
+
 #### Overrides
 
 [RunnerExtension](RunnerExtension.md).[constructor](RunnerExtension.md#constructor)
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:45](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L45)
+[PuppeteerRunnerExtension.ts:51](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L51)
 
 ## Methods
 
 ### afterAllSteps
 
-▸ `Optional` **afterAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **afterAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -63,7 +67,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -77,7 +81,7 @@
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -88,7 +92,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -102,7 +106,7 @@
 
 ### beforeAllSteps
 
-▸ `Optional` **beforeAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -112,7 +116,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -126,7 +130,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -137,7 +141,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -151,7 +155,7 @@
 
 ### runStep
 
-▸ **runStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **runStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -162,7 +166,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -170,4 +174,4 @@
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:66](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L66)
+[PuppeteerRunnerExtension.ts:72](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L72)
diff --git a/docs/api/classes/PuppeteerRunnerOwningBrowserExtension.md b/docs/api/classes/PuppeteerRunnerOwningBrowserExtension.md
index 6aa6324e..53deeffe 100644
--- a/docs/api/classes/PuppeteerRunnerOwningBrowserExtension.md
+++ b/docs/api/classes/PuppeteerRunnerOwningBrowserExtension.md
@@ -26,7 +26,7 @@
 
 ### constructor
 
-• **new PuppeteerRunnerOwningBrowserExtension**(`browser`, `page`, `opts?`)
+• **new PuppeteerRunnerOwningBrowserExtension**(`browser`, `page`, `opts?`): [`PuppeteerRunnerOwningBrowserExtension`](PuppeteerRunnerOwningBrowserExtension.md)
 
 #### Parameters
 
@@ -37,23 +37,27 @@
 | `opts?`         | `Object`  |
 | `opts.timeout?` | `number`  |
 
+#### Returns
+
+[`PuppeteerRunnerOwningBrowserExtension`](PuppeteerRunnerOwningBrowserExtension.md)
+
 #### Inherited from
 
 [PuppeteerRunnerExtension](PuppeteerRunnerExtension.md).[constructor](PuppeteerRunnerExtension.md#constructor)
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:45](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L45)
+[PuppeteerRunnerExtension.ts:51](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L51)
 
 ## Methods
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(): `Promise`<`void`\>
+▸ **afterAllSteps**(): `Promise`\<`void`\>
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -61,13 +65,13 @@
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:285](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L285)
+[PuppeteerRunnerExtension.ts:291](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L291)
 
 ---
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -78,7 +82,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -92,7 +96,7 @@
 
 ### beforeAllSteps
 
-▸ `Optional` **beforeAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -102,7 +106,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -116,7 +120,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -127,7 +131,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -141,7 +145,7 @@
 
 ### runStep
 
-▸ **runStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **runStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -152,7 +156,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -160,4 +164,4 @@
 
 #### Defined in
 
-[PuppeteerRunnerExtension.ts:66](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L66)
+[PuppeteerRunnerExtension.ts:72](https://github.com/puppeteer/replay/blob/main/src/PuppeteerRunnerExtension.ts#L72)
diff --git a/docs/api/classes/PuppeteerStringifyExtension.md b/docs/api/classes/PuppeteerStringifyExtension.md
index f6cfab13..d4b6ca62 100644
--- a/docs/api/classes/PuppeteerStringifyExtension.md
+++ b/docs/api/classes/PuppeteerStringifyExtension.md
@@ -28,7 +28,11 @@
 
 ### constructor
 
-• **new PuppeteerStringifyExtension**()
+• **new PuppeteerStringifyExtension**(): [`PuppeteerStringifyExtension`](PuppeteerStringifyExtension.md)
+
+#### Returns
+
+[`PuppeteerStringifyExtension`](PuppeteerStringifyExtension.md)
 
 #### Inherited from
 
@@ -38,7 +42,7 @@
 
 ### afterAllSteps
 
-▸ **afterAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **afterAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -49,7 +53,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -57,13 +61,13 @@
 
 #### Defined in
 
-[PuppeteerStringifyExtension.ts:66](https://github.com/puppeteer/replay/blob/main/src/PuppeteerStringifyExtension.ts#L66)
+[PuppeteerStringifyExtension.ts:64](https://github.com/puppeteer/replay/blob/main/src/PuppeteerStringifyExtension.ts#L64)
 
 ---
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -75,7 +79,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -89,7 +93,7 @@
 
 ### beforeAllSteps
 
-▸ **beforeAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -100,7 +104,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -114,7 +118,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -126,7 +130,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Inherited from
 
@@ -140,7 +144,7 @@
 
 ### stringifyStep
 
-▸ **stringifyStep**(`out`, `step`, `flow`): `Promise`<`void`\>
+▸ **stringifyStep**(`out`, `step`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -152,7 +156,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Overrides
 
@@ -160,4 +164,4 @@
 
 #### Defined in
 
-[PuppeteerStringifyExtension.ts:81](https://github.com/puppeteer/replay/blob/main/src/PuppeteerStringifyExtension.ts#L81)
+[PuppeteerStringifyExtension.ts:79](https://github.com/puppeteer/replay/blob/main/src/PuppeteerStringifyExtension.ts#L79)
diff --git a/docs/api/classes/Runner.md b/docs/api/classes/Runner.md
index f59c1f6f..73aedffd 100644
--- a/docs/api/classes/Runner.md
+++ b/docs/api/classes/Runner.md
@@ -54,13 +54,13 @@
 
 ### run
 
-▸ **run**(): `Promise`<`boolean`\>
+▸ **run**(): `Promise`\<`boolean`\>
 
 Run all the steps in the flow
 
 #### Returns
 
-`Promise`<`boolean`\>
+`Promise`\<`boolean`\>
 
 whether all the steps are run or the execution is aborted
 
@@ -72,7 +72,7 @@ whether all the steps are run or the execution is aborted
 
 ### runAfterAllSteps
 
-▸ **runAfterAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **runAfterAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -82,7 +82,7 @@ whether all the steps are run or the execution is aborted
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -92,7 +92,7 @@ whether all the steps are run or the execution is aborted
 
 ### runBeforeAllSteps
 
-▸ **runBeforeAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **runBeforeAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -102,7 +102,7 @@ whether all the steps are run or the execution is aborted
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -112,7 +112,7 @@ whether all the steps are run or the execution is aborted
 
 ### runStep
 
-▸ **runStep**(`step`): `Promise`<`void`\>
+▸ **runStep**(`step`): `Promise`\<`void`\>
 
 Runs the provided `step` with `beforeEachStep` and `afterEachStep` hooks.
 Parameters from the `flow` apply if the `flow` is set.
@@ -125,7 +125,7 @@ Parameters from the `flow` apply if the `flow` is set.
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
diff --git a/docs/api/classes/RunnerExtension.md b/docs/api/classes/RunnerExtension.md
index bc6f9350..2005b289 100644
--- a/docs/api/classes/RunnerExtension.md
+++ b/docs/api/classes/RunnerExtension.md
@@ -26,13 +26,17 @@
 
 ### constructor
 
-• **new RunnerExtension**()
+• **new RunnerExtension**(): [`RunnerExtension`](RunnerExtension.md)
+
+#### Returns
+
+[`RunnerExtension`](RunnerExtension.md)
 
 ## Methods
 
 ### afterAllSteps
 
-▸ `Optional` **afterAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **afterAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -42,7 +46,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -52,7 +56,7 @@
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -63,7 +67,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -73,7 +77,7 @@
 
 ### beforeAllSteps
 
-▸ `Optional` **beforeAllSteps**(`flow?`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -83,7 +87,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -93,7 +97,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -104,7 +108,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -114,7 +118,7 @@
 
 ### runStep
 
-▸ **runStep**(`step`, `flow?`): `Promise`<`void`\>
+▸ **runStep**(`step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -125,7 +129,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
diff --git a/docs/api/classes/StringifyExtension.md b/docs/api/classes/StringifyExtension.md
index 4d9ad97a..b0e6ff81 100644
--- a/docs/api/classes/StringifyExtension.md
+++ b/docs/api/classes/StringifyExtension.md
@@ -30,13 +30,17 @@
 
 ### constructor
 
-• **new StringifyExtension**()
+• **new StringifyExtension**(): [`StringifyExtension`](StringifyExtension.md)
+
+#### Returns
+
+[`StringifyExtension`](StringifyExtension.md)
 
 ## Methods
 
 ### afterAllSteps
 
-▸ `Optional` **afterAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **afterAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -47,7 +51,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -57,7 +61,7 @@
 
 ### afterEachStep
 
-▸ `Optional` **afterEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **afterEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -69,7 +73,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -79,7 +83,7 @@
 
 ### beforeAllSteps
 
-▸ `Optional` **beforeAllSteps**(`out`, `flow`): `Promise`<`void`\>
+▸ **beforeAllSteps**(`out`, `flow`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -90,7 +94,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -100,7 +104,7 @@
 
 ### beforeEachStep
 
-▸ `Optional` **beforeEachStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **beforeEachStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -112,7 +116,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
@@ -122,7 +126,7 @@
 
 ### stringifyStep
 
-▸ **stringifyStep**(`out`, `step`, `flow?`): `Promise`<`void`\>
+▸ **stringifyStep**(`out`, `step`, `flow?`): `Promise`\<`void`\>
 
 #### Parameters
 
@@ -134,7 +138,7 @@
 
 #### Returns
 
-`Promise`<`void`\>
+`Promise`\<`void`\>
 
 #### Defined in
 
diff --git a/docs/api/interfaces/Schema.WaitForElementStep.md b/docs/api/interfaces/Schema.WaitForElementStep.md
index 871d9aca..85f06bb8 100644
--- a/docs/api/interfaces/Schema.WaitForElementStep.md
+++ b/docs/api/interfaces/Schema.WaitForElementStep.md
@@ -119,7 +119,7 @@ Defaults to main frame
 
 ### properties
 
-• `Optional` **properties**: `Partial`<`JSONSerializable`<`HTMLElement`\>\> & { `[key: string]`: `JSONValue`; }
+• `Optional` **properties**: `Partial`\<`JSONSerializable`\<`HTMLElement`\>\> & \{ `[key: string]`: `JSONValue`; }
 
 Whether to also check the element(s) for the given properties.
 
diff --git a/package-lock.json b/package-lock.json
index 920e1989..bbc6c2ff 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "@puppeteer/replay",
-  "version": "2.13.4",
+  "version": "3.0.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "@puppeteer/replay",
-      "version": "2.13.4",
+      "version": "3.0.0",
       "license": "Apache-2.0",
       "dependencies": {
         "cli-table3": "0.6.3",
diff --git a/package.json b/package.json
index d5a93fbd..954c55be 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@puppeteer/replay",
-  "version": "2.13.4",
+  "version": "3.0.0",
   "description": "Replay is a library which provides an API to replay and stringify recordings created using Chrome DevTools Recorder](https://developer.chrome.com/docs/devtools/recorder/)",
   "main": "lib/cjs/main.cjs",
   "types": "lib/main.d.ts",