@prosopo/procaptcha-frictionless 2.8.31 → 2.11.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.
@@ -1,12 +1,13 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { loadI18next } from "@prosopo/locale";
3
- import { Checkbox, getDefaultEvents, providerRetry } from "@prosopo/procaptcha-common";
4
- import { ProcaptchaPow } from "@prosopo/procaptcha-pow";
5
- import { Procaptcha } from "@prosopo/procaptcha-react";
6
- import { ProcaptchaConfigSchema } from "@prosopo/types";
3
+ import { Checkbox, getDefaultEvents, isSecureBrowserContext, providerRetry, TestModeBanner } from "@prosopo/procaptcha-common";
4
+ import { CaptchaType, ProcaptchaConfigSchema } from "@prosopo/types";
7
5
  import { lightTheme, darkTheme } from "@prosopo/widget-skeleton";
8
6
  import { useRef, useEffect, useState } from "react";
9
7
  import customDetectBot from "./customDetectBot.js";
8
+ const ProcaptchaLoader = async () => (await import("@prosopo/procaptcha-react")).Procaptcha;
9
+ const ProcaptchaPuzzleLoader = async () => (await import("@prosopo/procaptcha-puzzle")).ProcaptchaPuzzle;
10
+ const ProcaptchaPowLoader = async () => (await import("@prosopo/procaptcha-pow")).ProcaptchaPow;
10
11
  const renderPlaceholder = (theme, mode, errorMessage, isTranslationLoaded, translationFn, loading) => {
11
12
  const checkboxTheme = "light" === theme ? lightTheme : darkTheme;
12
13
  if (mode === "invisible") {
@@ -93,7 +94,62 @@ const ProcaptchaFrictionless = ({
93
94
  restart();
94
95
  }, 1e4);
95
96
  };
97
+ const renderForCaptchaType = async (captchaType, frictionlessState) => {
98
+ const onEscalate = (next, newSessionId) => {
99
+ void renderForCaptchaType(next, {
100
+ ...frictionlessState,
101
+ sessionId: newSessionId
102
+ });
103
+ };
104
+ if (captchaType === CaptchaType.image) {
105
+ const Procaptcha = await ProcaptchaLoader();
106
+ setComponentToRender(
107
+ /* @__PURE__ */ jsx(
108
+ Procaptcha,
109
+ {
110
+ config,
111
+ callbacks,
112
+ frictionlessState,
113
+ i18n
114
+ }
115
+ )
116
+ );
117
+ } else if (captchaType === CaptchaType.puzzle) {
118
+ const ProcaptchaPuzzle = await ProcaptchaPuzzleLoader();
119
+ setComponentToRender(
120
+ /* @__PURE__ */ jsx(
121
+ ProcaptchaPuzzle,
122
+ {
123
+ config,
124
+ callbacks,
125
+ frictionlessState,
126
+ i18n
127
+ }
128
+ )
129
+ );
130
+ } else {
131
+ const ProcaptchaPow = await ProcaptchaPowLoader();
132
+ setComponentToRender(
133
+ /* @__PURE__ */ jsx(
134
+ ProcaptchaPow,
135
+ {
136
+ config,
137
+ callbacks,
138
+ frictionlessState,
139
+ i18n,
140
+ onEscalate
141
+ }
142
+ )
143
+ );
144
+ }
145
+ };
96
146
  const start = async () => {
147
+ if (!isSecureBrowserContext()) {
148
+ const errorMessage = i18n.isInitialized ? i18n.t("WIDGET.INSECURE_CONTEXT") : "Procaptcha requires a secure (HTTPS) connection";
149
+ events.onError(new Error(errorMessage));
150
+ fallOverWithStyle(errorMessage, "WIDGET.INSECURE_CONTEXT");
151
+ return;
152
+ }
97
153
  await providerRetry(
98
154
  async () => {
99
155
  stateRef.current.attemptCount += 1;
@@ -119,37 +175,15 @@ const ProcaptchaFrictionless = ({
119
175
  behaviorCollector2: result.behaviorCollector2,
120
176
  behaviorCollector3: result.behaviorCollector3,
121
177
  deviceCapability: result.deviceCapability,
122
- encryptBehavioralData: result.encryptBehavioralData
178
+ encryptBehavioralData: result.encryptBehavioralData,
179
+ getSimdReadings: result.getSimdReadings,
180
+ hp: result.hp
181
+ };
182
+ await renderForCaptchaType(result.captchaType, frictionlessState);
183
+ stateRef.current = {
184
+ ...stateRef.current,
185
+ loading: false
123
186
  };
124
- if (result.captchaType === "image") {
125
- setComponentToRender(
126
- /* @__PURE__ */ jsx(
127
- Procaptcha,
128
- {
129
- config,
130
- callbacks,
131
- frictionlessState,
132
- i18n
133
- }
134
- )
135
- );
136
- } else {
137
- setComponentToRender(
138
- /* @__PURE__ */ jsx(
139
- ProcaptchaPow,
140
- {
141
- config,
142
- callbacks,
143
- frictionlessState,
144
- i18n
145
- }
146
- )
147
- );
148
- stateRef.current = {
149
- ...stateRef.current,
150
- loading: false
151
- };
152
- }
153
187
  },
154
188
  start,
155
189
  resetState,
@@ -168,7 +202,10 @@ const ProcaptchaFrictionless = ({
168
202
  };
169
203
  detectAndSetComponent();
170
204
  }, [config, callbacks, detectBot, config.language]);
171
- return componentToRender;
205
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
206
+ /* @__PURE__ */ jsx(TestModeBanner, { siteKey: config.account?.address ?? "" }),
207
+ componentToRender
208
+ ] });
172
209
  };
173
210
  export {
174
211
  ProcaptchaFrictionless
@@ -1 +1 @@
1
- {"version":3,"file":"ProcaptchaFrictionless.js","sourceRoot":"","sources":["../src/ProcaptchaFrictionless.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProcaptchaFrictionless.js","sourceRoot":"","sources":["../src/ProcaptchaFrictionless.tsx"],"names":[],"mappings":"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"}
@@ -1,14 +1,37 @@
1
1
  "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
2
24
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
25
  const jsxRuntime = require("react/jsx-runtime");
4
26
  const locale = require("@prosopo/locale");
5
27
  const procaptchaCommon = require("@prosopo/procaptcha-common");
6
- const procaptchaPow = require("@prosopo/procaptcha-pow");
7
- const procaptchaReact = require("@prosopo/procaptcha-react");
8
28
  const types = require("@prosopo/types");
9
29
  const widgetSkeleton = require("@prosopo/widget-skeleton");
10
30
  const react = require("react");
11
31
  const customDetectBot = require("./customDetectBot.cjs");
32
+ const ProcaptchaLoader = async () => (await import("@prosopo/procaptcha-react")).Procaptcha;
33
+ const ProcaptchaPuzzleLoader = async () => (await import("@prosopo/procaptcha-puzzle")).ProcaptchaPuzzle;
34
+ const ProcaptchaPowLoader = async () => (await import("@prosopo/procaptcha-pow")).ProcaptchaPow;
12
35
  const renderPlaceholder = (theme, mode, errorMessage, isTranslationLoaded, translationFn, loading) => {
13
36
  const checkboxTheme = "light" === theme ? widgetSkeleton.lightTheme : widgetSkeleton.darkTheme;
14
37
  if (mode === "invisible") {
@@ -95,7 +118,62 @@ const ProcaptchaFrictionless = ({
95
118
  restart();
96
119
  }, 1e4);
97
120
  };
121
+ const renderForCaptchaType = async (captchaType, frictionlessState) => {
122
+ const onEscalate = (next, newSessionId) => {
123
+ void renderForCaptchaType(next, {
124
+ ...frictionlessState,
125
+ sessionId: newSessionId
126
+ });
127
+ };
128
+ if (captchaType === types.CaptchaType.image) {
129
+ const Procaptcha = await ProcaptchaLoader();
130
+ setComponentToRender(
131
+ /* @__PURE__ */ jsxRuntime.jsx(
132
+ Procaptcha,
133
+ {
134
+ config,
135
+ callbacks,
136
+ frictionlessState,
137
+ i18n
138
+ }
139
+ )
140
+ );
141
+ } else if (captchaType === types.CaptchaType.puzzle) {
142
+ const ProcaptchaPuzzle = await ProcaptchaPuzzleLoader();
143
+ setComponentToRender(
144
+ /* @__PURE__ */ jsxRuntime.jsx(
145
+ ProcaptchaPuzzle,
146
+ {
147
+ config,
148
+ callbacks,
149
+ frictionlessState,
150
+ i18n
151
+ }
152
+ )
153
+ );
154
+ } else {
155
+ const ProcaptchaPow = await ProcaptchaPowLoader();
156
+ setComponentToRender(
157
+ /* @__PURE__ */ jsxRuntime.jsx(
158
+ ProcaptchaPow,
159
+ {
160
+ config,
161
+ callbacks,
162
+ frictionlessState,
163
+ i18n,
164
+ onEscalate
165
+ }
166
+ )
167
+ );
168
+ }
169
+ };
98
170
  const start = async () => {
171
+ if (!procaptchaCommon.isSecureBrowserContext()) {
172
+ const errorMessage = i18n.isInitialized ? i18n.t("WIDGET.INSECURE_CONTEXT") : "Procaptcha requires a secure (HTTPS) connection";
173
+ events.onError(new Error(errorMessage));
174
+ fallOverWithStyle(errorMessage, "WIDGET.INSECURE_CONTEXT");
175
+ return;
176
+ }
99
177
  await procaptchaCommon.providerRetry(
100
178
  async () => {
101
179
  stateRef.current.attemptCount += 1;
@@ -121,37 +199,15 @@ const ProcaptchaFrictionless = ({
121
199
  behaviorCollector2: result.behaviorCollector2,
122
200
  behaviorCollector3: result.behaviorCollector3,
123
201
  deviceCapability: result.deviceCapability,
124
- encryptBehavioralData: result.encryptBehavioralData
202
+ encryptBehavioralData: result.encryptBehavioralData,
203
+ getSimdReadings: result.getSimdReadings,
204
+ hp: result.hp
205
+ };
206
+ await renderForCaptchaType(result.captchaType, frictionlessState);
207
+ stateRef.current = {
208
+ ...stateRef.current,
209
+ loading: false
125
210
  };
126
- if (result.captchaType === "image") {
127
- setComponentToRender(
128
- /* @__PURE__ */ jsxRuntime.jsx(
129
- procaptchaReact.Procaptcha,
130
- {
131
- config,
132
- callbacks,
133
- frictionlessState,
134
- i18n
135
- }
136
- )
137
- );
138
- } else {
139
- setComponentToRender(
140
- /* @__PURE__ */ jsxRuntime.jsx(
141
- procaptchaPow.ProcaptchaPow,
142
- {
143
- config,
144
- callbacks,
145
- frictionlessState,
146
- i18n
147
- }
148
- )
149
- );
150
- stateRef.current = {
151
- ...stateRef.current,
152
- loading: false
153
- };
154
- }
155
211
  },
156
212
  start,
157
213
  resetState,
@@ -170,6 +226,9 @@ const ProcaptchaFrictionless = ({
170
226
  };
171
227
  detectAndSetComponent();
172
228
  }, [config, callbacks, detectBot, config.language]);
173
- return componentToRender;
229
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
230
+ /* @__PURE__ */ jsxRuntime.jsx(procaptchaCommon.TestModeBanner, { siteKey: config.account?.address ?? "" }),
231
+ componentToRender
232
+ ] });
174
233
  };
175
234
  exports.ProcaptchaFrictionless = ProcaptchaFrictionless;
@@ -4,7 +4,15 @@ const api = require("@prosopo/api");
4
4
  const common = require("@prosopo/common");
5
5
  const loadBalancer = require("@prosopo/load-balancer");
6
6
  const procaptchaCommon = require("@prosopo/procaptcha-common");
7
+ const types = require("@prosopo/types");
7
8
  const detectorLoader = require("./detectorLoader.cjs");
9
+ if (typeof window !== "undefined") {
10
+ const envHint = typeof process !== "undefined" ? process.env?.PROSOPO_DEFAULT_ENVIRONMENT : void 0;
11
+ const parsedEnv = types.EnvironmentTypesSchema.safeParse(envHint);
12
+ if (parsedEnv.success) {
13
+ loadBalancer.prefetchProviders(parsedEnv.data).catch(() => void 0);
14
+ }
15
+ }
8
16
  const withTimeout = async (promise, ms) => {
9
17
  let timeoutId;
10
18
  const timeoutPromise = new Promise((_, reject) => {
@@ -26,8 +34,12 @@ const withTimeout = async (promise, ms) => {
26
34
  }
27
35
  };
28
36
  const customDetectBot = async (config, container, restartFn) => {
29
- const ext = new (await procaptchaCommon.ExtensionLoader(config.web2))();
30
- const detect = await detectorLoader.DetectorLoader();
37
+ const [ExtClass, detect] = await Promise.all([
38
+ procaptchaCommon.ExtensionLoader(config.web2),
39
+ detectorLoader.DetectorLoader(),
40
+ loadBalancer.prefetchProviders(config.defaultEnvironment)
41
+ ]);
42
+ const ext = new ExtClass();
31
43
  const detectionResult = await detect(
32
44
  config.defaultEnvironment,
33
45
  loadBalancer.getRandomActiveProvider,
@@ -47,16 +59,30 @@ const customDetectBot = async (config, container, restartFn) => {
47
59
  provider.provider.url,
48
60
  config.account.address
49
61
  );
50
- const captcha = await withTimeout(
51
- providerApi.getFrictionlessCaptcha(
52
- detectionResult.token,
53
- detectionResult.encryptHeadHash,
54
- config.account.address,
55
- userAccount.account.address
56
- ),
57
- 1e4
58
- // 10 second timeout
62
+ const captchaPromise = providerApi.getFrictionlessCaptcha(
63
+ detectionResult.token,
64
+ detectionResult.encryptHeadHash,
65
+ config.account.address,
66
+ userAccount.account.address,
67
+ config.mode,
68
+ void 0
59
69
  );
70
+ if (detectionResult.getSimdReadings) {
71
+ void detectionResult.getSimdReadings(6e4).catch(() => void 0);
72
+ }
73
+ const captcha = await withTimeout(captchaPromise, 1e4);
74
+ if (captcha.dns_url) {
75
+ try {
76
+ void fetch(captcha.dns_url, {
77
+ method: "GET",
78
+ mode: "no-cors",
79
+ credentials: "omit",
80
+ keepalive: true,
81
+ cache: "no-store"
82
+ }).catch(() => void 0);
83
+ } catch {
84
+ }
85
+ }
60
86
  return {
61
87
  captchaType: captcha.captchaType,
62
88
  sessionId: captcha.sessionId,
@@ -64,13 +90,15 @@ const customDetectBot = async (config, container, restartFn) => {
64
90
  status: captcha.status,
65
91
  userAccount,
66
92
  error: captcha.error,
93
+ hp: captcha.hp,
67
94
  // Map specific trackers to generic behavioral collectors
68
95
  behaviorCollector1: detectionResult.mouseTracker,
69
96
  behaviorCollector2: detectionResult.touchTracker,
70
97
  behaviorCollector3: detectionResult.clickTracker,
71
98
  deviceCapability: detectionResult.hasTouchSupport,
72
99
  encryptBehavioralData: detectionResult.encryptBehavioralData,
73
- packBehavioralData: detectionResult.packBehavioralData
100
+ packBehavioralData: detectionResult.packBehavioralData,
101
+ getSimdReadings: detectionResult.getSimdReadings
74
102
  };
75
103
  };
76
104
  exports.default = customDetectBot;
@@ -1 +1 @@
1
- {"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACX,oBAAoB,EAEpB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,WAAW,GAAU,CAAC,WACzB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,KACR,OAAO,CAAC,CAAC,CAoBX,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,oBA4DtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACX,oBAAoB,EAEpB,MAAM,gBAAgB,CAAC;AAexB,eAAO,MAAM,WAAW,GAAU,CAAC,WACzB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,KACR,OAAO,CAAC,CAAC,CAoBX,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,oBA4FtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,8 +1,16 @@
1
1
  import { ProviderApi } from "@prosopo/api";
2
2
  import { ProsopoEnvError } from "@prosopo/common";
3
- import { getRandomActiveProvider } from "@prosopo/load-balancer";
3
+ import { prefetchProviders, getRandomActiveProvider } from "@prosopo/load-balancer";
4
4
  import { ExtensionLoader } from "@prosopo/procaptcha-common";
5
+ import { EnvironmentTypesSchema } from "@prosopo/types";
5
6
  import { DetectorLoader } from "./detectorLoader.js";
7
+ if (typeof window !== "undefined") {
8
+ const envHint = typeof process !== "undefined" ? process.env?.PROSOPO_DEFAULT_ENVIRONMENT : void 0;
9
+ const parsedEnv = EnvironmentTypesSchema.safeParse(envHint);
10
+ if (parsedEnv.success) {
11
+ prefetchProviders(parsedEnv.data).catch(() => void 0);
12
+ }
13
+ }
6
14
  const withTimeout = async (promise, ms) => {
7
15
  let timeoutId;
8
16
  const timeoutPromise = new Promise((_, reject) => {
@@ -24,8 +32,12 @@ const withTimeout = async (promise, ms) => {
24
32
  }
25
33
  };
26
34
  const customDetectBot = async (config, container, restartFn) => {
27
- const ext = new (await ExtensionLoader(config.web2))();
28
- const detect = await DetectorLoader();
35
+ const [ExtClass, detect] = await Promise.all([
36
+ ExtensionLoader(config.web2),
37
+ DetectorLoader(),
38
+ prefetchProviders(config.defaultEnvironment)
39
+ ]);
40
+ const ext = new ExtClass();
29
41
  const detectionResult = await detect(
30
42
  config.defaultEnvironment,
31
43
  getRandomActiveProvider,
@@ -45,16 +57,30 @@ const customDetectBot = async (config, container, restartFn) => {
45
57
  provider.provider.url,
46
58
  config.account.address
47
59
  );
48
- const captcha = await withTimeout(
49
- providerApi.getFrictionlessCaptcha(
50
- detectionResult.token,
51
- detectionResult.encryptHeadHash,
52
- config.account.address,
53
- userAccount.account.address
54
- ),
55
- 1e4
56
- // 10 second timeout
60
+ const captchaPromise = providerApi.getFrictionlessCaptcha(
61
+ detectionResult.token,
62
+ detectionResult.encryptHeadHash,
63
+ config.account.address,
64
+ userAccount.account.address,
65
+ config.mode,
66
+ void 0
57
67
  );
68
+ if (detectionResult.getSimdReadings) {
69
+ void detectionResult.getSimdReadings(6e4).catch(() => void 0);
70
+ }
71
+ const captcha = await withTimeout(captchaPromise, 1e4);
72
+ if (captcha.dns_url) {
73
+ try {
74
+ void fetch(captcha.dns_url, {
75
+ method: "GET",
76
+ mode: "no-cors",
77
+ credentials: "omit",
78
+ keepalive: true,
79
+ cache: "no-store"
80
+ }).catch(() => void 0);
81
+ } catch {
82
+ }
83
+ }
58
84
  return {
59
85
  captchaType: captcha.captchaType,
60
86
  sessionId: captcha.sessionId,
@@ -62,13 +88,15 @@ const customDetectBot = async (config, container, restartFn) => {
62
88
  status: captcha.status,
63
89
  userAccount,
64
90
  error: captcha.error,
91
+ hp: captcha.hp,
65
92
  // Map specific trackers to generic behavioral collectors
66
93
  behaviorCollector1: detectionResult.mouseTracker,
67
94
  behaviorCollector2: detectionResult.touchTracker,
68
95
  behaviorCollector3: detectionResult.clickTracker,
69
96
  deviceCapability: detectionResult.hasTouchSupport,
70
97
  encryptBehavioralData: detectionResult.encryptBehavioralData,
71
- packBehavioralData: detectionResult.packBehavioralData
98
+ packBehavioralData: detectionResult.packBehavioralData,
99
+ getSimdReadings: detectionResult.getSimdReadings
72
100
  };
73
101
  };
74
102
  export {
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=customDetectBotSimd.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customDetectBotSimd.test.d.ts","sourceRoot":"","sources":["../../src/tests/customDetectBotSimd.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ const mocks = vi.hoisted(() => ({
3
+ getFrictionlessCaptcha: vi.fn(),
4
+ getRandomActiveProvider: vi.fn(),
5
+ prefetchProviders: vi.fn(async () => undefined),
6
+ detect: vi.fn(),
7
+ }));
8
+ vi.mock("@prosopo/api", () => ({
9
+ ProviderApi: vi.fn(() => ({
10
+ getFrictionlessCaptcha: mocks.getFrictionlessCaptcha,
11
+ })),
12
+ }));
13
+ vi.mock("@prosopo/load-balancer", () => ({
14
+ getRandomActiveProvider: mocks.getRandomActiveProvider,
15
+ prefetchProviders: mocks.prefetchProviders,
16
+ }));
17
+ vi.mock("@prosopo/procaptcha-common", () => ({
18
+ ExtensionLoader: vi.fn(async () => {
19
+ return class FakeExtension {
20
+ getAccount() {
21
+ return Promise.resolve({
22
+ account: { address: "5FakeUserAccountAddress" },
23
+ });
24
+ }
25
+ };
26
+ }),
27
+ }));
28
+ vi.mock("../detectorLoader.js", () => ({
29
+ DetectorLoader: vi.fn(async () => mocks.detect),
30
+ }));
31
+ import customDetectBot from "../customDetectBot.js";
32
+ const baseConfig = {
33
+ account: { address: "5FakeSiteKey" },
34
+ defaultEnvironment: "production",
35
+ web2: true,
36
+ mode: "frictionless",
37
+ };
38
+ const makeDetectionResult = (getSimdReadings) => ({
39
+ token: "TOKEN",
40
+ encryptHeadHash: "HASH",
41
+ userAccount: { account: { address: "5FakeUserAccountAddress" } },
42
+ provider: {
43
+ provider: { url: "https://provider.test" },
44
+ providerAccount: "5Provider",
45
+ },
46
+ getSimdReadings,
47
+ mouseTracker: undefined,
48
+ touchTracker: undefined,
49
+ clickTracker: undefined,
50
+ });
51
+ const captchaResponse = {
52
+ captchaType: "pow",
53
+ sessionId: "SID",
54
+ status: "ok",
55
+ };
56
+ beforeEach(() => {
57
+ mocks.getFrictionlessCaptcha.mockReset();
58
+ mocks.getRandomActiveProvider.mockReset();
59
+ mocks.prefetchProviders.mockReset();
60
+ mocks.detect.mockReset();
61
+ mocks.prefetchProviders.mockResolvedValue(undefined);
62
+ mocks.getFrictionlessCaptcha.mockResolvedValue(captchaResponse);
63
+ });
64
+ describe("customDetectBot SIMD deferral", () => {
65
+ it("passes simdReadings as undefined to the frictionless POST even when getSimdReadings would return a value", async () => {
66
+ const getSimdReadings = vi.fn().mockResolvedValue("ENCODED_SIMD");
67
+ mocks.detect.mockResolvedValue(makeDetectionResult(getSimdReadings));
68
+ await customDetectBot(baseConfig, undefined, () => undefined);
69
+ expect(mocks.getFrictionlessCaptcha).toHaveBeenCalledTimes(1);
70
+ const args = mocks.getFrictionlessCaptcha.mock.calls[0];
71
+ expect(args?.[5]).toBeUndefined();
72
+ });
73
+ it("fires getSimdReadings after the frictionless POST is initiated (fire-and-forget)", async () => {
74
+ const callOrder = [];
75
+ mocks.getFrictionlessCaptcha.mockImplementation(() => {
76
+ callOrder.push("captcha-call");
77
+ return Promise.resolve(captchaResponse);
78
+ });
79
+ const getSimdReadings = vi.fn().mockImplementation(() => {
80
+ callOrder.push("simd-call");
81
+ return Promise.resolve("ENCODED_SIMD");
82
+ });
83
+ mocks.detect.mockResolvedValue(makeDetectionResult(getSimdReadings));
84
+ await customDetectBot(baseConfig, undefined, () => undefined);
85
+ expect(getSimdReadings).toHaveBeenCalledTimes(1);
86
+ expect(callOrder.indexOf("captcha-call")).toBeLessThan(callOrder.indexOf("simd-call"));
87
+ });
88
+ it("does not block the frictionless POST on a slow getSimdReadings", async () => {
89
+ let simdResolve;
90
+ const simdPromise = new Promise((resolve) => {
91
+ simdResolve = resolve;
92
+ });
93
+ const getSimdReadings = vi.fn().mockReturnValue(simdPromise);
94
+ mocks.detect.mockResolvedValue(makeDetectionResult(getSimdReadings));
95
+ const result = await customDetectBot(baseConfig, undefined, () => undefined);
96
+ expect(result.sessionId).toBe("SID");
97
+ simdResolve("ENCODED_SIMD");
98
+ });
99
+ it("skips the SIMD trigger when the detector doesn't expose getSimdReadings", async () => {
100
+ mocks.detect.mockResolvedValue(makeDetectionResult(undefined));
101
+ const result = await customDetectBot(baseConfig, undefined, () => undefined);
102
+ expect(result.sessionId).toBe("SID");
103
+ expect(mocks.getFrictionlessCaptcha).toHaveBeenCalledTimes(1);
104
+ });
105
+ });
106
+ //# sourceMappingURL=customDetectBotSimd.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customDetectBotSimd.test.js","sourceRoot":"","sources":["../../src/tests/customDetectBotSimd.test.ts"],"names":[],"mappings":"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"}