@prosopo/procaptcha-frictionless 2.15.0 → 2.16.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.
Files changed (52) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +11 -10
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +13 -12
  4. package/CHANGELOG.md +73 -0
  5. package/dist/AuthenticatedBadge.d.ts +12 -0
  6. package/dist/AuthenticatedBadge.d.ts.map +1 -0
  7. package/dist/AuthenticatedBadge.js +75 -0
  8. package/dist/AuthenticatedBadge.js.map +1 -0
  9. package/dist/ProcaptchaFrictionless.d.ts.map +1 -1
  10. package/dist/ProcaptchaFrictionless.js +35 -9
  11. package/dist/ProcaptchaFrictionless.js.map +1 -1
  12. package/dist/cjs/AuthenticatedBadge.cjs +75 -0
  13. package/dist/cjs/ProcaptchaFrictionless.cjs +35 -9
  14. package/dist/cjs/customDetectBot.cjs +3 -1
  15. package/dist/cjs/detectorLoader.cjs +42 -13
  16. package/dist/cjs/sessionInvalidatedRecovery.cjs +16 -9
  17. package/dist/customDetectBot.d.ts.map +1 -1
  18. package/dist/customDetectBot.js +3 -1
  19. package/dist/customDetectBot.js.map +1 -1
  20. package/dist/detectorLoader.d.ts +2 -1
  21. package/dist/detectorLoader.d.ts.map +1 -1
  22. package/dist/detectorLoader.js +42 -13
  23. package/dist/detectorLoader.js.map +1 -1
  24. package/dist/sessionInvalidatedRecovery.d.ts +3 -1
  25. package/dist/sessionInvalidatedRecovery.d.ts.map +1 -1
  26. package/dist/sessionInvalidatedRecovery.js +16 -9
  27. package/dist/sessionInvalidatedRecovery.js.map +1 -1
  28. package/dist/tests/detectorLoader.test.d.ts +2 -0
  29. package/dist/tests/detectorLoader.test.d.ts.map +1 -0
  30. package/dist/tests/detectorLoader.test.js +67 -0
  31. package/dist/tests/detectorLoader.test.js.map +1 -0
  32. package/dist/tests/escalationHandoff.integration.test.d.ts +5 -0
  33. package/dist/tests/escalationHandoff.integration.test.d.ts.map +1 -0
  34. package/dist/tests/escalationHandoff.integration.test.js +216 -0
  35. package/dist/tests/escalationHandoff.integration.test.js.map +1 -0
  36. package/dist/tests/sessionInvalidatedRecovery.test.js +41 -21
  37. package/dist/tests/sessionInvalidatedRecovery.test.js.map +1 -1
  38. package/dist/tests/sessionInvalidatedRemint.test.d.ts +5 -0
  39. package/dist/tests/sessionInvalidatedRemint.test.d.ts.map +1 -0
  40. package/dist/tests/sessionInvalidatedRemint.test.js +150 -0
  41. package/dist/tests/sessionInvalidatedRemint.test.js.map +1 -0
  42. package/package.json +8 -8
  43. package/src/AuthenticatedBadge.tsx +141 -0
  44. package/src/ProcaptchaFrictionless.tsx +85 -16
  45. package/src/customDetectBot.ts +2 -0
  46. package/src/detectorLoader.ts +52 -12
  47. package/src/sessionInvalidatedRecovery.ts +30 -10
  48. package/src/tests/detectorLoader.test.ts +108 -0
  49. package/src/tests/escalationHandoff.integration.test.tsx +354 -0
  50. package/src/tests/sessionInvalidatedRecovery.test.ts +49 -21
  51. package/src/tests/sessionInvalidatedRemint.test.tsx +245 -0
  52. package/tsconfig.tsbuildinfo +1 -1
@@ -1,3 +1,4 @@
1
+ const require_AuthenticatedBadge = require("./AuthenticatedBadge.cjs");
1
2
  const require_customDetectBot = require("./customDetectBot.cjs");
2
3
  const require_frictionlessResultGuard = require("./frictionlessResultGuard.cjs");
3
4
  const require_sessionInvalidatedRecovery = require("./sessionInvalidatedRecovery.cjs");
@@ -8,6 +9,7 @@ let _prosopo_widget_skeleton = require("@prosopo/widget-skeleton");
8
9
  let react = require("react");
9
10
  let react_jsx_runtime = require("react/jsx-runtime");
10
11
  //#region src/ProcaptchaFrictionless.tsx
12
+ var NO_SESSION_FOUND_KEY = "CAPTCHA.NO_SESSION_FOUND";
11
13
  var ProcaptchaLoader = async () => (await import("@prosopo/procaptcha-react")).Procaptcha;
12
14
  var ProcaptchaPuzzleLoader = async () => (await import("@prosopo/procaptcha-puzzle")).ProcaptchaPuzzle;
13
15
  var ProcaptchaPowLoader = async () => (await import("@prosopo/procaptcha-pow")).ProcaptchaPow;
@@ -28,13 +30,14 @@ var renderPlaceholder = (theme, mode, errorMessage, isTranslationLoaded, transla
28
30
  };
29
31
  var defaultLoadingState = (attemptCount) => ({
30
32
  loading: false,
31
- attemptCount: attemptCount || 0
33
+ attemptCount
32
34
  });
33
35
  var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = require_customDetectBot.default, container }) => {
34
36
  const stateRef = (0, react.useRef)(defaultLoadingState(0));
35
37
  const events = (0, _prosopo_procaptcha_common.getDefaultEvents)(callbacks);
36
38
  const pendingRetryCoordsRef = (0, react.useRef)(null);
37
- const sessionInvalidatedFiredRef = (0, react.useRef)(false);
39
+ const sessionInvalidatedAttemptsRef = (0, react.useRef)(0);
40
+ const escalatedSessionIdsRef = (0, react.useRef)(/* @__PURE__ */ new Set());
38
41
  const mountCountRef = (0, react.useRef)(0);
39
42
  const nextMountAutoStartRef = (0, react.useRef)(false);
40
43
  const manualStart = config.startMode === _prosopo_types.StartModeEnum.manual;
@@ -50,7 +53,7 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = re
50
53
  }, [i18n, config.language]);
51
54
  const [componentToRender, setComponentToRender] = (0, react.useState)(renderPlaceholder(config.theme, config.mode, stateRef.current.errorMessage, i18n.isInitialized, i18n.t, !manualStart, manualStart ? (event) => manualCheckboxHandlerRef.current(event) : void 0));
52
55
  const resetState = (attemptCount) => {
53
- stateRef.current = defaultLoadingState(attemptCount || stateRef.current.attemptCount);
56
+ stateRef.current = defaultLoadingState(attemptCount ?? stateRef.current.attemptCount);
54
57
  };
55
58
  const fallOverWithStyle = (errorMessage, errorKey) => {
56
59
  if (errorKey === "CAPTCHA.NO_SESSION_FOUND") setTimeout(() => {
@@ -67,20 +70,28 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = re
67
70
  };
68
71
  const renderForCaptchaType = async (captchaType, frictionlessState, autoStart = false, escalationCoords) => {
69
72
  const onEscalate = (next, newSessionId, coords) => {
73
+ if (escalatedSessionIdsRef.current.has(newSessionId)) return;
74
+ escalatedSessionIdsRef.current.add(newSessionId);
70
75
  renderForCaptchaType(next, {
71
76
  ...frictionlessState,
72
77
  sessionId: newSessionId
73
78
  }, true, coords);
74
79
  };
75
80
  const onSessionInvalidated = (x, y) => {
76
- const { shouldRestart } = require_sessionInvalidatedRecovery.handleSessionInvalidated(x, y, sessionInvalidatedFiredRef, pendingRetryCoordsRef);
77
- if (!shouldRestart) return;
78
- resetState(0);
79
- start();
81
+ const { shouldRestart } = require_sessionInvalidatedRecovery.handleSessionInvalidated(x, y, sessionInvalidatedAttemptsRef, pendingRetryCoordsRef);
82
+ if (shouldRestart) {
83
+ resetState(0);
84
+ start();
85
+ return;
86
+ }
87
+ const message = i18n.isInitialized ? i18n.t(NO_SESSION_FOUND_KEY) : "No session found";
88
+ events.onError(new Error(message));
89
+ fallOverWithStyle(message, NO_SESSION_FOUND_KEY);
80
90
  };
81
91
  const onReload = (x, y) => {
82
92
  pendingRetryCoordsRef.current = require_sessionInvalidatedRecovery.normaliseRetryCoords(x, y);
83
93
  nextMountAutoStartRef.current = true;
94
+ sessionInvalidatedAttemptsRef.current = 0;
84
95
  resetState(0);
85
96
  start();
86
97
  };
@@ -90,7 +101,21 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = re
90
101
  const startCoords = escalationCoords ?? retryStartCoords;
91
102
  mountCountRef.current += 1;
92
103
  const mountKey = mountCountRef.current;
93
- if (captchaType === _prosopo_types.CaptchaType.image) {
104
+ if (captchaType === _prosopo_types.CaptchaType.authenticated) {
105
+ if (!frictionlessState.sessionId) {
106
+ events.onError(/* @__PURE__ */ new Error("authenticated captcha response missing sessionId — provider is misbehaving"));
107
+ fallOverWithStyle();
108
+ return;
109
+ }
110
+ setComponentToRender(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_AuthenticatedBadge.AuthenticatedBadge, {
111
+ sessionId: frictionlessState.sessionId,
112
+ agent: frictionlessState.agent,
113
+ dapp: config.account.address ?? "",
114
+ userAccount: frictionlessState.userAccount,
115
+ provider: frictionlessState.provider,
116
+ callbacks
117
+ }));
118
+ } else if (captchaType === _prosopo_types.CaptchaType.image) {
94
119
  const Procaptcha = await ProcaptchaLoader();
95
120
  setComponentToRender(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Procaptcha, {
96
121
  config,
@@ -162,7 +187,8 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = re
162
187
  deviceCapability: result.deviceCapability,
163
188
  encryptBehavioralData: result.encryptBehavioralData,
164
189
  getSimdReadings: result.getSimdReadings,
165
- hp: result.hp
190
+ hp: result.hp,
191
+ agent: result.agent
166
192
  };
167
193
  await renderForCaptchaType(result.captchaType, frictionlessState);
168
194
  stateRef.current = {
@@ -109,7 +109,8 @@ var customDetectBot = async (config, container, restartFn, retryContext) => {
109
109
  status: captcha.status,
110
110
  userAccount,
111
111
  error: captcha.error,
112
- hp: captcha.hp
112
+ hp: captcha.hp,
113
+ agent: captcha.agent
113
114
  };
114
115
  }
115
116
  const detectionResult = await providerDetect(container, restartFn, () => ext.getAccount(config));
@@ -135,6 +136,7 @@ var customDetectBot = async (config, container, restartFn, retryContext) => {
135
136
  userAccount,
136
137
  error: captcha.error,
137
138
  hp: captcha.hp,
139
+ agent: captcha.agent,
138
140
  behaviorCollector1: detectionResult.mouseTracker,
139
141
  behaviorCollector2: detectionResult.touchTracker,
140
142
  behaviorCollector3: detectionResult.clickTracker,
@@ -1,20 +1,49 @@
1
1
  //#region src/detectorLoader.ts
2
+ var blobAttempt = (script) => {
3
+ const url = URL.createObjectURL(new Blob([script], { type: "text/javascript" }));
4
+ return {
5
+ url,
6
+ release: () => URL.revokeObjectURL(url)
7
+ };
8
+ };
9
+ var dataAttempt = (script) => ({
10
+ url: `data:text/javascript;charset=utf-8,${encodeURIComponent(script)}`,
11
+ release: () => void 0
12
+ });
13
+ var defaultImporter = (url) => import(
14
+ /* @vite-ignore */
15
+ /* webpackIgnore: true */
16
+ url
17
+ );
2
18
  /**
3
- * Loads a detector from a provider-served obfuscated ESM string (the per-session
4
- * pool bundle). Evaluated via a blob URL — the served module is self-contained
5
- * (no imports), so dynamic `import()` of the blob yields its default export.
19
+ * Loads a detector from a provider-served obfuscated ESM string (the
20
+ * per-session pool bundle). The module is self-contained, so a dynamic
21
+ * `import()` yields its default export.
22
+ *
23
+ * A blob URL is tried first, then a `data:` URL. The two are gated by
24
+ * different CSP directives and sites commonly allow one without the other — a
25
+ * `script-src` of `*` matches neither, and a policy listing `data:` for
26
+ * scripts and `blob:` only for workers blocks the blob path outright. Without
27
+ * the fallback every session on such a site loses the detector, sends an empty
28
+ * token, and can never pass frictionlessly.
29
+ *
30
+ * A blocked attempt logs a CSP violation before the import rejects. That noise
31
+ * is the cost of recovering the session.
6
32
  */
7
- var DetectorLoaderFromScript = async (script) => {
8
- const blob = new Blob([script], { type: "text/javascript" });
9
- const url = URL.createObjectURL(blob);
10
- try {
11
- return (await import(
12
- /* @vite-ignore */
13
- url
14
- )).default;
15
- } finally {
16
- URL.revokeObjectURL(url);
33
+ var DetectorLoaderFromScript = async (script, importModule = defaultImporter) => {
34
+ let lastError = /* @__PURE__ */ new Error("no loader attempt ran");
35
+ for (const build of [blobAttempt, dataAttempt]) {
36
+ let attempt;
37
+ try {
38
+ attempt = build(script);
39
+ return (await importModule(attempt.url)).default;
40
+ } catch (err) {
41
+ lastError = err;
42
+ } finally {
43
+ attempt?.release();
44
+ }
17
45
  }
46
+ throw lastError;
18
47
  };
19
48
  //#endregion
20
49
  exports.DetectorLoaderFromScript = DetectorLoaderFromScript;
@@ -22,18 +22,25 @@ var normaliseRetryCoords = (x, y) => {
22
22
  };
23
23
  };
24
24
  /**
25
- * Semantics of the outer recovery handler. Returns whether the caller
26
- * should proceed to re-run the frictionless flow (`start()`), and mutates
27
- * the passed refs to record the one-shot fire + pending coords.
25
+ * Semantics of the outer recovery handler. Returns whether the caller should
26
+ * proceed to re-run the frictionless flow (`start()`), and mutates the passed
27
+ * refs to record the attempt + pending coords.
28
28
  *
29
- * Second calls are ignored (one-shot per outer widget lifetime) so a
30
- * persistently broken session doesn't loop.
29
+ * Bounded rather than one-shot: a persistently broken session still stops
30
+ * looping, but the caller is told (`exhausted`) so it can fall back visibly
31
+ * instead of silently doing nothing.
31
32
  */
32
- var handleSessionInvalidated = (x, y, firedRef, pendingCoordsRef) => {
33
- if (firedRef.current) return { shouldRestart: false };
34
- firedRef.current = true;
33
+ var handleSessionInvalidated = (x, y, attemptsRef, pendingCoordsRef, maxAttempts = 3) => {
34
+ if (attemptsRef.current >= maxAttempts) return {
35
+ shouldRestart: false,
36
+ exhausted: true
37
+ };
38
+ attemptsRef.current += 1;
35
39
  pendingCoordsRef.current = normaliseRetryCoords(x, y);
36
- return { shouldRestart: true };
40
+ return {
41
+ shouldRestart: true,
42
+ exhausted: false
43
+ };
37
44
  };
38
45
  /**
39
46
  * Compute the props a resumed inner widget mounts with. Consumes the
@@ -1 +1 @@
1
- {"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACX,oBAAoB,EAGpB,MAAM,gBAAgB,CAAC;AAyFxB,eAAO,MAAM,WAAW,GAAU,CAAC,WACzB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,KACR,OAAO,CAAC,CAAC,CAoBX,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,oBAqOtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACX,oBAAoB,EAGpB,MAAM,gBAAgB,CAAC;AAyFxB,eAAO,MAAM,WAAW,GAAU,CAAC,WACzB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,KACR,OAAO,CAAC,CAAC,CAoBX,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,oBAuOtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -109,7 +109,8 @@ var customDetectBot = async (config, container, restartFn, retryContext) => {
109
109
  status: captcha.status,
110
110
  userAccount,
111
111
  error: captcha.error,
112
- hp: captcha.hp
112
+ hp: captcha.hp,
113
+ agent: captcha.agent
113
114
  };
114
115
  }
115
116
  const detectionResult = await providerDetect(container, restartFn, () => ext.getAccount(config));
@@ -135,6 +136,7 @@ var customDetectBot = async (config, container, restartFn, retryContext) => {
135
136
  userAccount,
136
137
  error: captcha.error,
137
138
  hp: captcha.hp,
139
+ agent: captcha.agent,
138
140
  behaviorCollector1: detectionResult.mouseTracker,
139
141
  behaviorCollector2: detectionResult.touchTracker,
140
142
  behaviorCollector3: detectionResult.clickTracker,
@@ -1 +1 @@
1
- {"version":3,"file":"customDetectBot.js","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customDetectBot.js","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"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"}
@@ -27,5 +27,6 @@ export type DetectorType = (container: HTMLElement | undefined, restart: () => v
27
27
  getSimdReadings?: (timeoutMs?: number) => Promise<string | undefined>;
28
28
  userAccount: Account;
29
29
  }>;
30
- export declare const DetectorLoaderFromScript: (script: string) => Promise<DetectorType>;
30
+ export type ModuleImporter = (url: string) => Promise<unknown>;
31
+ export declare const DetectorLoaderFromScript: (script: string, importModule?: ModuleImporter) => Promise<DetectorType>;
31
32
  //# sourceMappingURL=detectorLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectorLoader.d.ts","sourceRoot":"","sources":["../src/detectorLoader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,MAAM,gBAAgB,CAAC;AAOxB,MAAM,MAAM,YAAY,GAAG,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,IAAI,EACnB,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KACpC,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,kBAAkB,EAAE,CAAC;QACpC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,oBAAoB,CAAC;IAC9E,eAAe,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtE,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAOH,eAAO,MAAM,wBAAwB,WAC5B,MAAM,KACZ,OAAO,CAAC,YAAY,CAWtB,CAAC"}
1
+ {"version":3,"file":"detectorLoader.d.ts","sourceRoot":"","sources":["../src/detectorLoader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,MAAM,gBAAgB,CAAC;AAOxB,MAAM,MAAM,YAAY,GAAG,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,IAAI,EACnB,gBAAgB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KACpC,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,kBAAkB,EAAE,CAAC;QACpC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,OAAO,EAAE,MAAM,eAAe,EAAE,CAAC;QACjC,KAAK,EAAE,MAAM,IAAI,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,kBAAkB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,oBAAoB,CAAC;IAC9E,eAAe,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtE,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAoBH,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAoB/D,eAAO,MAAM,wBAAwB,WAC5B,MAAM,iBACA,cAAc,KAC1B,OAAO,CAAC,YAAY,CAiBtB,CAAC"}
@@ -1,20 +1,49 @@
1
1
  //#region src/detectorLoader.ts
2
+ var blobAttempt = (script) => {
3
+ const url = URL.createObjectURL(new Blob([script], { type: "text/javascript" }));
4
+ return {
5
+ url,
6
+ release: () => URL.revokeObjectURL(url)
7
+ };
8
+ };
9
+ var dataAttempt = (script) => ({
10
+ url: `data:text/javascript;charset=utf-8,${encodeURIComponent(script)}`,
11
+ release: () => void 0
12
+ });
13
+ var defaultImporter = (url) => import(
14
+ /* @vite-ignore */
15
+ /* webpackIgnore: true */
16
+ url
17
+ );
2
18
  /**
3
- * Loads a detector from a provider-served obfuscated ESM string (the per-session
4
- * pool bundle). Evaluated via a blob URL — the served module is self-contained
5
- * (no imports), so dynamic `import()` of the blob yields its default export.
19
+ * Loads a detector from a provider-served obfuscated ESM string (the
20
+ * per-session pool bundle). The module is self-contained, so a dynamic
21
+ * `import()` yields its default export.
22
+ *
23
+ * A blob URL is tried first, then a `data:` URL. The two are gated by
24
+ * different CSP directives and sites commonly allow one without the other — a
25
+ * `script-src` of `*` matches neither, and a policy listing `data:` for
26
+ * scripts and `blob:` only for workers blocks the blob path outright. Without
27
+ * the fallback every session on such a site loses the detector, sends an empty
28
+ * token, and can never pass frictionlessly.
29
+ *
30
+ * A blocked attempt logs a CSP violation before the import rejects. That noise
31
+ * is the cost of recovering the session.
6
32
  */
7
- var DetectorLoaderFromScript = async (script) => {
8
- const blob = new Blob([script], { type: "text/javascript" });
9
- const url = URL.createObjectURL(blob);
10
- try {
11
- return (await import(
12
- /* @vite-ignore */
13
- url
14
- )).default;
15
- } finally {
16
- URL.revokeObjectURL(url);
33
+ var DetectorLoaderFromScript = async (script, importModule = defaultImporter) => {
34
+ let lastError = /* @__PURE__ */ new Error("no loader attempt ran");
35
+ for (const build of [blobAttempt, dataAttempt]) {
36
+ let attempt;
37
+ try {
38
+ attempt = build(script);
39
+ return (await importModule(attempt.url)).default;
40
+ } catch (err) {
41
+ lastError = err;
42
+ } finally {
43
+ attempt?.release();
44
+ }
17
45
  }
46
+ throw lastError;
18
47
  };
19
48
  //#endregion
20
49
  export { DetectorLoaderFromScript };
@@ -1 +1 @@
1
- {"version":3,"file":"detectorLoader.js","sourceRoot":"","sources":["../src/detectorLoader.ts"],"names":[],"mappings":"AAkEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC5C,MAAc,EACU,EAAE;IAC1B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAoB,GAAG,CAAC,CAEhD,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC;YAAS,CAAC;QACV,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"detectorLoader.js","sourceRoot":"","sources":["../src/detectorLoader.ts"],"names":[],"mappings":"AAkEA,MAAM,WAAW,GAAG,CAAC,MAAc,EAAiB,EAAE;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAC9B,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAC/C,CAAC;IACF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAS,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAc,EAAiB,EAAE,CAAC,CAAC;IACvD,GAAG,EAAE,sCAAsC,kBAAkB,CAAC,MAAM,CAAC,EAAE;IACvE,OAAO,EAAE,GAAS,EAAE,CAAC,SAAS;CAC9B,CAAC,CAAC;AAKH,MAAM,eAAe,GAAmB,CAAC,GAAG,EAAE,EAAE,CAC/C,MAAM,CAA8C,GAAG,CAAC,CAAC;AAiB1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC5C,MAAc,EACd,eAA+B,eAAe,EACtB,EAAE;IAC1B,IAAI,SAAS,GAAY,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QAChD,IAAI,OAAkC,CAAC;QACvC,IAAI,CAAC;YACJ,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,GAAG,GAAG,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAE3C,CAAC;YACF,OAAO,GAAG,CAAC,OAAO,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,SAAS,GAAG,GAAG,CAAC;QACjB,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACF,CAAC;IACD,MAAM,SAAS,CAAC;AACjB,CAAC,CAAC"}
@@ -6,8 +6,10 @@ export type MutableRef<T> = {
6
6
  current: T;
7
7
  };
8
8
  export declare const normaliseRetryCoords: (x: number | undefined, y: number | undefined) => RetryCoords | null;
9
- export declare const handleSessionInvalidated: (x: number | undefined, y: number | undefined, firedRef: MutableRef<boolean>, pendingCoordsRef: MutableRef<RetryCoords | null>) => {
9
+ export declare const MAX_SESSION_INVALIDATED_RETRIES = 3;
10
+ export declare const handleSessionInvalidated: (x: number | undefined, y: number | undefined, attemptsRef: MutableRef<number>, pendingCoordsRef: MutableRef<RetryCoords | null>, maxAttempts?: number) => {
10
11
  shouldRestart: boolean;
12
+ exhausted: boolean;
11
13
  };
12
14
  export declare const consumeRetryMountProps: (pendingCoordsRef: MutableRef<RetryCoords | null>, escalationAutoStart: boolean) => {
13
15
  autoStart: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"sessionInvalidatedRecovery.d.ts","sourceRoot":"","sources":["../src/sessionInvalidatedRecovery.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAMnD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAgB3C,eAAO,MAAM,oBAAoB,MAC7B,MAAM,GAAG,SAAS,KAClB,MAAM,GAAG,SAAS,KACnB,WAAW,GAAG,IAIhB,CAAC;AAUF,eAAO,MAAM,wBAAwB,MACjC,MAAM,GAAG,SAAS,KAClB,MAAM,GAAG,SAAS,YACX,UAAU,CAAC,OAAO,CAAC,oBACX,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,KAC9C;IAAE,aAAa,EAAE,OAAO,CAAA;CAK1B,CAAC;AAWF,eAAO,MAAM,sBAAsB,qBAChB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,uBAC3B,OAAO,KAC1B;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;CAO5D,CAAC"}
1
+ {"version":3,"file":"sessionInvalidatedRecovery.d.ts","sourceRoot":"","sources":["../src/sessionInvalidatedRecovery.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAMnD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAgB3C,eAAO,MAAM,oBAAoB,MAC7B,MAAM,GAAG,SAAS,KAClB,MAAM,GAAG,SAAS,KACnB,WAAW,GAAG,IAIhB,CAAC;AAgBF,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAWjD,eAAO,MAAM,wBAAwB,MACjC,MAAM,GAAG,SAAS,KAClB,MAAM,GAAG,SAAS,eACR,UAAU,CAAC,MAAM,CAAC,oBACb,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,gBACnC,MAAM,KACjB;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAO9C,CAAC;AAWF,eAAO,MAAM,sBAAsB,qBAChB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,uBAC3B,OAAO,KAC1B;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;CAO5D,CAAC"}
@@ -22,18 +22,25 @@ var normaliseRetryCoords = (x, y) => {
22
22
  };
23
23
  };
24
24
  /**
25
- * Semantics of the outer recovery handler. Returns whether the caller
26
- * should proceed to re-run the frictionless flow (`start()`), and mutates
27
- * the passed refs to record the one-shot fire + pending coords.
25
+ * Semantics of the outer recovery handler. Returns whether the caller should
26
+ * proceed to re-run the frictionless flow (`start()`), and mutates the passed
27
+ * refs to record the attempt + pending coords.
28
28
  *
29
- * Second calls are ignored (one-shot per outer widget lifetime) so a
30
- * persistently broken session doesn't loop.
29
+ * Bounded rather than one-shot: a persistently broken session still stops
30
+ * looping, but the caller is told (`exhausted`) so it can fall back visibly
31
+ * instead of silently doing nothing.
31
32
  */
32
- var handleSessionInvalidated = (x, y, firedRef, pendingCoordsRef) => {
33
- if (firedRef.current) return { shouldRestart: false };
34
- firedRef.current = true;
33
+ var handleSessionInvalidated = (x, y, attemptsRef, pendingCoordsRef, maxAttempts = 3) => {
34
+ if (attemptsRef.current >= maxAttempts) return {
35
+ shouldRestart: false,
36
+ exhausted: true
37
+ };
38
+ attemptsRef.current += 1;
35
39
  pendingCoordsRef.current = normaliseRetryCoords(x, y);
36
- return { shouldRestart: true };
40
+ return {
41
+ shouldRestart: true,
42
+ exhausted: false
43
+ };
37
44
  };
38
45
  /**
39
46
  * Compute the props a resumed inner widget mounts with. Consumes the
@@ -1 +1 @@
1
- {"version":3,"file":"sessionInvalidatedRecovery.js","sourceRoot":"","sources":["../src/sessionInvalidatedRecovery.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,CAAqB,EACrB,CAAqB,EACA,EAAE;IACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjB,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,CAAqB,EACrB,CAAqB,EACrB,QAA6B,EAC7B,gBAAgD,EACnB,EAAE;IAC/B,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACtD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,OAAO,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,gBAAgD,EAChD,mBAA4B,EACmC,EAAE;IACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1D,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,OAAO;QACN,SAAS,EAAE,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;QACtD,WAAW;KACX,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"sessionInvalidatedRecovery.js","sourceRoot":"","sources":["../src/sessionInvalidatedRecovery.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,CAAqB,EACrB,CAAqB,EACA,EAAE;IACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjB,CAAC,CAAC;AAgBF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAWjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,CAAqB,EACrB,CAAqB,EACrB,WAA+B,EAC/B,gBAAgD,EAChD,cAAsB,+BAA+B,EACJ,EAAE;IACnD,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;QACxC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;IACzB,gBAAgB,CAAC,OAAO,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,gBAAgD,EAChD,mBAA4B,EACmC,EAAE;IACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1D,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;IAChC,OAAO;QACN,SAAS,EAAE,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;QACtD,WAAW;KACX,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=detectorLoader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectorLoader.test.d.ts","sourceRoot":"","sources":["../../src/tests/detectorLoader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { DetectorLoaderFromScript, } from "../detectorLoader.js";
3
+ const SCRIPT = "export default () => ({ token: 'x' });";
4
+ const detector = (() => undefined);
5
+ describe("DetectorLoaderFromScript", () => {
6
+ const created = [];
7
+ const revoked = [];
8
+ beforeEach(() => {
9
+ created.length = 0;
10
+ revoked.length = 0;
11
+ let counter = 0;
12
+ URL.createObjectURL = vi.fn(() => {
13
+ const url = `blob:https://example.test/${counter++}`;
14
+ created.push(url);
15
+ return url;
16
+ });
17
+ URL.revokeObjectURL = vi.fn((url) => {
18
+ revoked.push(url);
19
+ });
20
+ });
21
+ afterEach(() => {
22
+ vi.restoreAllMocks();
23
+ });
24
+ it("uses a blob URL when the import succeeds", async () => {
25
+ const seen = [];
26
+ const importer = async (url) => {
27
+ seen.push(url);
28
+ return { default: detector };
29
+ };
30
+ await expect(DetectorLoaderFromScript(SCRIPT, importer)).resolves.toBe(detector);
31
+ expect(seen).toHaveLength(1);
32
+ expect(seen[0]).toMatch(/^blob:/);
33
+ expect(revoked).toEqual(created);
34
+ });
35
+ it("falls back to a data URL when the blob import is blocked by CSP", async () => {
36
+ const seen = [];
37
+ const importer = async (url) => {
38
+ seen.push(url);
39
+ if (url.startsWith("blob:")) {
40
+ throw new TypeError("Failed to fetch dynamically imported module");
41
+ }
42
+ return { default: detector };
43
+ };
44
+ await expect(DetectorLoaderFromScript(SCRIPT, importer)).resolves.toBe(detector);
45
+ expect(seen).toHaveLength(2);
46
+ expect(seen[0]).toMatch(/^blob:/);
47
+ expect(seen[1]).toMatch(/^data:text\/javascript;charset=utf-8,/);
48
+ expect(decodeURIComponent(seen[1]?.split(",")[1] ?? "")).toBe(SCRIPT);
49
+ });
50
+ it("revokes the blob URL even when its import fails", async () => {
51
+ const importer = async (url) => {
52
+ if (url.startsWith("blob:"))
53
+ throw new Error("blocked");
54
+ return { default: detector };
55
+ };
56
+ await DetectorLoaderFromScript(SCRIPT, importer);
57
+ expect(revoked).toEqual(created);
58
+ });
59
+ it("rethrows the last error when both schemes are blocked", async () => {
60
+ const importer = async (url) => {
61
+ throw new Error(`blocked: ${url.slice(0, 5)}`);
62
+ };
63
+ await expect(DetectorLoaderFromScript(SCRIPT, importer)).rejects.toThrow("blocked: data:");
64
+ expect(revoked).toEqual(created);
65
+ });
66
+ });
67
+ //# sourceMappingURL=detectorLoader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectorLoader.test.js","sourceRoot":"","sources":["../../src/tests/detectorLoader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare global {
2
+ var IS_REACT_ACT_ENVIRONMENT: boolean;
3
+ }
4
+ export {};
5
+ //# sourceMappingURL=escalationHandoff.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalationHandoff.integration.test.d.ts","sourceRoot":"","sources":["../../src/tests/escalationHandoff.integration.test.tsx"],"names":[],"mappings":"AAyDA,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,wBAAwB,EAAE,OAAO,CAAC;CACtC"}