@alwaysmeticulous/record 2.255.0 → 2.256.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ const wrap_in_should_record_condition_1 = require("../wrap-in-should-record-cond
9
9
  "//# sourceMappingURL=main.bundle.js.map",
10
10
  "",
11
11
  ].join("\n"))).toMatchInlineSnapshot(`
12
- "if (window === window.parent && !["https://app.meticulous.ai/docs/recording-a-test","https://app.meticulous.ai/docs/recording-a-login-flow","https://app.meticulous.ai/docs/recording-a-login-flow-saving"].includes(window.document.location.toString()) && !["chrome://","chrome-error://"].some((protocol) => window.document.location.toString().startsWith(protocol))) {
12
+ "if (window.origin !== 'null' && !["https://app.meticulous.ai/docs/recording-a-test","https://app.meticulous.ai/docs/recording-a-login-flow","https://app.meticulous.ai/docs/recording-a-login-flow-saving"].includes(window.document.location.toString()) && !["chrome://","chrome-error://","about:"].some((protocol) => window.document.location.toString().startsWith(protocol))) {
13
13
  console.log('Hello World')
14
14
  }
15
15
  //# sourceMappingURL=main.bundle.js.map
@@ -1,11 +1,16 @@
1
1
  /**
2
- * PollyJS seems to have some logic that is outside of a function body, and so executed
3
- * as soon as the script is loaded. This causes Aw Snap errors in Chrome when the script
4
- * is injected too early inside certain iFrames. To avoid this we wrap the script in a condition to
5
- * prevent it executing at all in certain contexts.
2
+ * The recorder must not run in every frame. In particular:
6
3
  *
7
- * This isn't ideal, but unfortunately there's not a way to run page.evaluateOnNewDocument conditionally
8
- * (we could listen for frames being attached, and then inject the script, though this has
9
- * some complexities)
4
+ * - PollyJS has top-level (outside-function) code that executes as soon as the script is
5
+ * loaded. Running it in `about:blank`, `chrome-error://`, or other non-web frames causes
6
+ * Chrome to hang or show an "Aw Snap" crash. These are blocked via FORBIDDEN_PROTOCOLS.
7
+ * - Sentry and PollyJS each create hidden iframes as part of their initialization. If the
8
+ * recorder runs inside a sandboxed iframe (`sandbox` attribute without `allow-same-origin`,
9
+ * giving `window.origin === "null"`), those nested iframes appear blank and the recorder
10
+ * cannot function correctly anyway. These are blocked via the `window.origin !== 'null'` check.
11
+ *
12
+ * This isn't ideal, but unfortunately there's not a way to run page.evaluateOnNewDocument
13
+ * conditionally (we could listen for frames being attached, and then inject the script,
14
+ * though this has some complexities).
10
15
  */
11
16
  export declare const wrapInShouldRecordCondition: (recorderCode: string) => string;
@@ -3,14 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.wrapInShouldRecordCondition = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  /**
6
- * PollyJS seems to have some logic that is outside of a function body, and so executed
7
- * as soon as the script is loaded. This causes Aw Snap errors in Chrome when the script
8
- * is injected too early inside certain iFrames. To avoid this we wrap the script in a condition to
9
- * prevent it executing at all in certain contexts.
6
+ * The recorder must not run in every frame. In particular:
10
7
  *
11
- * This isn't ideal, but unfortunately there's not a way to run page.evaluateOnNewDocument conditionally
12
- * (we could listen for frames being attached, and then inject the script, though this has
13
- * some complexities)
8
+ * - PollyJS has top-level (outside-function) code that executes as soon as the script is
9
+ * loaded. Running it in `about:blank`, `chrome-error://`, or other non-web frames causes
10
+ * Chrome to hang or show an "Aw Snap" crash. These are blocked via FORBIDDEN_PROTOCOLS.
11
+ * - Sentry and PollyJS each create hidden iframes as part of their initialization. If the
12
+ * recorder runs inside a sandboxed iframe (`sandbox` attribute without `allow-same-origin`,
13
+ * giving `window.origin === "null"`), those nested iframes appear blank and the recorder
14
+ * cannot function correctly anyway. These are blocked via the `window.origin !== 'null'` check.
15
+ *
16
+ * This isn't ideal, but unfortunately there's not a way to run page.evaluateOnNewDocument
17
+ * conditionally (we could listen for frames being attached, and then inject the script,
18
+ * though this has some complexities).
14
19
  */
15
20
  const wrapInShouldRecordCondition = (recorderCode) => wrapScriptInCondition(recorderCode, constructShouldRecordCondition());
16
21
  exports.wrapInShouldRecordCondition = wrapInShouldRecordCondition;
@@ -24,14 +29,16 @@ const constructShouldRecordCondition = () => {
24
29
  /**
25
30
  * The recorder crashes if it tries to initialize on a chrome-error page
26
31
  * (Chrome e.g. uses this page for HTTP basic auth popups before the user has authenticated)
32
+ * because the recorder tries inserting an iframe into the head, which crashes Chrome on that page.
27
33
  *
28
- * This is because the recorder tries inserting an iframe into the head, and this crashes Chrome
29
- * if done on a chrome-error page.
34
+ * `about:` covers `about:blank` frames, which browsers use as the initial state of iframes before
35
+ * their real URL loads running PollyJS there causes the page to hang.
30
36
  */
31
- const FORBIDDEN_PROTOCOLS = ["chrome://", "chrome-error://"];
37
+ const FORBIDDEN_PROTOCOLS = ["chrome://", "chrome-error://", "about:"];
32
38
  const shouldRecordFrame =
33
- // We only record in the root frame (not in sub-iframes)
34
- `window === window.parent` +
39
+ // Skip sandboxed iframes without allow-same-origin: their origin is "null" and the
40
+ // recorder's Sentry/PollyJS iframes would appear blank and non-functional inside them.
41
+ `window.origin !== 'null'` +
35
42
  ` && !${JSON.stringify(FORBIDDEN_URLS)}.includes(window.document.location.toString())` +
36
43
  ` && !${JSON.stringify(FORBIDDEN_PROTOCOLS)}.some((protocol) => window.document.location.toString().startsWith(protocol))`;
37
44
  return shouldRecordFrame;
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-in-should-record-condition.js","sourceRoot":"","sources":["../../../src/record/utils/wrap-in-should-record-condition.ts"],"names":[],"mappings":";;;AAAA,4CAIsB;AAEtB;;;;;;;;;GASG;AACI,MAAM,2BAA2B,GAAG,CAAC,YAAoB,EAAE,EAAE,CAClE,qBAAqB,CAAC,YAAY,EAAE,8BAA8B,EAAE,CAAC,CAAC;AAD3D,QAAA,2BAA2B,+BACgC;AAExE,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAC1C,8CAA8C;IAC9C,MAAM,cAAc,GAAG;QACrB,8CAAkC;QAClC,yDAA6C;QAC7C,wDAA4C;KAC7C,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAE7D,MAAM,iBAAiB;IACrB,wDAAwD;IACxD,0BAA0B;QAC1B,QAAQ,IAAI,CAAC,SAAS,CACpB,cAAc,CACf,gDAAgD;QACjD,QAAQ,IAAI,CAAC,SAAS,CACpB,mBAAmB,CACpB,+EAA+E,CAAC;IAEnF,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAAC,cAAsB,EAAE,SAAiB,EAAE,EAAE;IAC1E,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GACzC,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjE,IAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,UAAU,CAAC,KAAK,CAAC,EAAE;QACvC,gEAAgE;QAChE,OAAO;YACL,OAAO,SAAS,KAAK;YACrB,GAAG,YAAY;YACf,GAAG;YACH,gBAAgB;YAChB,GAAG,kBAAkB;SACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;SAAM;QACL,OAAO;YACL,OAAO,SAAS,KAAK;YACrB,GAAG,YAAY;YACf,gBAAgB;YAChB,GAAG;YACH,GAAG,kBAAkB;SACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;AACH,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,KAAe,EAAE,EAAE;IACrD,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YACpD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;aAAM;YACL,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE;QACtC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,EAAE;KACjD,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"wrap-in-should-record-condition.js","sourceRoot":"","sources":["../../../src/record/utils/wrap-in-should-record-condition.ts"],"names":[],"mappings":";;;AAAA,4CAIsB;AAEtB;;;;;;;;;;;;;;GAcG;AACI,MAAM,2BAA2B,GAAG,CAAC,YAAoB,EAAE,EAAE,CAClE,qBAAqB,CAAC,YAAY,EAAE,8BAA8B,EAAE,CAAC,CAAC;AAD3D,QAAA,2BAA2B,+BACgC;AAExE,MAAM,8BAA8B,GAAG,GAAG,EAAE;IAC1C,8CAA8C;IAC9C,MAAM,cAAc,GAAG;QACrB,8CAAkC;QAClC,yDAA6C;QAC7C,wDAA4C;KAC7C,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAEvE,MAAM,iBAAiB;IACrB,mFAAmF;IACnF,uFAAuF;IACvF,0BAA0B;QAC1B,QAAQ,IAAI,CAAC,SAAS,CACpB,cAAc,CACf,gDAAgD;QACjD,QAAQ,IAAI,CAAC,SAAS,CACpB,mBAAmB,CACpB,+EAA+E,CAAC;IAEnF,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAAC,cAAsB,EAAE,SAAiB,EAAE,EAAE;IAC1E,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GACzC,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjE,IAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,UAAU,CAAC,KAAK,CAAC,EAAE;QACvC,gEAAgE;QAChE,OAAO;YACL,OAAO,SAAS,KAAK;YACrB,GAAG,YAAY;YACf,GAAG;YACH,gBAAgB;YAChB,GAAG,kBAAkB;SACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;SAAM;QACL,OAAO;YACL,OAAO,SAAS,KAAK;YACrB,GAAG,YAAY;YACf,gBAAgB;YAChB,GAAG;YACH,GAAG,kBAAkB;SACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;AACH,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,KAAe,EAAE,EAAE;IACrD,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YACpD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;aAAM;YACL,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE;QACtC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,EAAE;KACjD,CAAC;AACJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/record",
3
- "version": "2.255.0",
3
+ "version": "2.256.0",
4
4
  "description": "The Meticulous toolkit to record user sessions",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -20,8 +20,8 @@
20
20
  "test": "vitest run --passWithNoTests"
21
21
  },
22
22
  "dependencies": {
23
- "@alwaysmeticulous/api": "2.255.0",
24
- "@alwaysmeticulous/common": "2.255.0",
23
+ "@alwaysmeticulous/api": "2.256.0",
24
+ "@alwaysmeticulous/common": "2.256.0",
25
25
  "chalk": "^4.1.2",
26
26
  "loglevel": "^1.8.0",
27
27
  "puppeteer-core": "24.14.0"
@@ -46,5 +46,5 @@
46
46
  "bugs": {
47
47
  "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
48
48
  },
49
- "gitHead": "8dab55364c5bdcfa9874f497d37f51bbe3ce7786"
49
+ "gitHead": "3da89148a69dda31d41c95abc561eaa346e3e78f"
50
50
  }