@prosopo/procaptcha-frictionless 2.13.7 → 2.13.9

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,5 +1,5 @@
1
1
 
2
- > @prosopo/procaptcha-frictionless@2.13.7 build:cjs
2
+ > @prosopo/procaptcha-frictionless@2.13.9 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -26,6 +26,7 @@ ViteCommonJSConfig: .
26
26
  '/home/runner/work/captcha/captcha/packages/datasets/tsconfig.json'
27
27
  ]
28
28
  }
29
+ The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
29
30
  {
30
31
  externals: [
31
32
  '@prosopo/locale',
@@ -49,18 +50,18 @@ ViteCommonJSConfig: .
49
50
  '@prosopo/datasets'
50
51
  ]
51
52
  }
52
- The plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the resolve.tsconfigPaths option. You can remove the plugin and set resolve.tsconfigPaths: true in your Vite config instead.
53
53
  vite v8.1.5 building ssr environment for production...
54
54
  Bundle build started
55
55
  
56
- 7 modules transformed.
56
+ 8 modules transformed.
57
57
  rendering chunks...
58
58
  computing gzip size...
59
59
  dist/cjs/index.cjs 0.54 kB │ gzip: 0.21 kB
60
60
  dist/cjs/detectorLoader.cjs 0.62 kB │ gzip: 0.40 kB
61
+ dist/cjs/frictionlessResultGuard.cjs 1.55 kB │ gzip: 0.80 kB
61
62
  dist/cjs/sessionInvalidatedRecovery.cjs 2.07 kB │ gzip: 0.99 kB
62
63
  dist/cjs/detectorPrefetch.cjs 2.98 kB │ gzip: 1.35 kB
63
64
  dist/cjs/customDetectBot.cjs 5.55 kB │ gzip: 1.70 kB
64
- dist/cjs/ProcaptchaFrictionless.cjs 7.00 kB │ gzip: 2.02 kB
65
+ dist/cjs/ProcaptchaFrictionless.cjs 7.14 kB │ gzip: 2.06 kB
65
66
 
66
- ✓ built in 42ms
67
+ ✓ built in 62ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/procaptcha-frictionless@2.13.7 build:tsc
2
+ > @prosopo/procaptcha-frictionless@2.13.9 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 8:08:22 AM - Projects in this build:
5
+ 3:55:59 PM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../locale/tsconfig.json
8
8
  * ../util/tsconfig.json
@@ -25,47 +25,47 @@
25
25
  * ../procaptcha-react/tsconfig.json
26
26
  * tsconfig.json
27
27
 
28
- 8:08:22 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
28
+ 3:55:59 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
29
29
 
30
- 8:08:22 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
30
+ 3:55:59 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
31
31
 
32
- 8:08:22 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
32
+ 3:55:59 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
33
33
 
34
- 8:08:22 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
34
+ 3:55:59 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
35
35
 
36
- 8:08:22 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
36
+ 3:55:59 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
37
37
 
38
- 8:08:22 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
38
+ 3:55:59 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
39
39
 
40
- 8:08:22 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
40
+ 3:55:59 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
41
41
 
42
- 8:08:22 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
42
+ 3:55:59 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/objectUtils.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
43
43
 
44
- 8:08:22 AM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
44
+ 3:55:59 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
45
45
 
46
- 8:08:22 AM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
46
+ 3:55:59 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
47
47
 
48
- 8:08:22 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
48
+ 3:55:59 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/balancer.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
49
49
 
50
- 8:08:22 AM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/webComponent/createWidget.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
50
+ 3:55:59 PM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/index.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
51
51
 
52
- 8:08:22 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.test.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
52
+ 3:55:59 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
53
53
 
54
- 8:08:22 AM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/tests/cryptoWorker.unit.test.ts' is older than output '../account/tsconfig.tsbuildinfo'
54
+ 3:55:59 PM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/workers/cryptoWorker.ts' is older than output '../account/tsconfig.tsbuildinfo'
55
55
 
56
- 8:08:22 AM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/tests/defaultEvents.test.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
56
+ 3:55:59 PM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/extensionLoader.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
57
57
 
58
- 8:08:22 AM - Project '../procaptcha-pow/tsconfig.json' is up to date because newest input '../procaptcha-pow/src/tests/managerHarness.ts' is older than output '../procaptcha-pow/tsconfig.tsbuildinfo'
58
+ 3:55:59 PM - Project '../procaptcha-pow/tsconfig.json' is up to date because newest input '../procaptcha-pow/src/index.ts' is older than output '../procaptcha-pow/tsconfig.tsbuildinfo'
59
59
 
60
- 8:08:22 AM - Project '../procaptcha-puzzle/tsconfig.json' is up to date because newest input '../procaptcha-puzzle/src/index.ts' is older than output '../procaptcha-puzzle/tsconfig.tsbuildinfo'
60
+ 3:55:59 PM - Project '../procaptcha-puzzle/tsconfig.json' is up to date because newest input '../procaptcha-puzzle/src/index.ts' is older than output '../procaptcha-puzzle/tsconfig.tsbuildinfo'
61
61
 
62
- 8:08:22 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
62
+ 3:55:59 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/dataset.unit.test.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
63
63
 
64
- 8:08:23 AM - Project '../procaptcha/tsconfig.json' is up to date because newest input '../procaptcha/src/tests/manager.unit.test.ts' is older than output '../procaptcha/tsconfig.tsbuildinfo'
64
+ 3:55:59 PM - Project '../procaptcha/tsconfig.json' is up to date because newest input '../procaptcha/src/index.ts' is older than output '../procaptcha/tsconfig.tsbuildinfo'
65
65
 
66
- 8:08:23 AM - Project '../procaptcha-react/tsconfig.json' is up to date because newest input '../procaptcha-react/src/tests/captchaComponent.unit.test.tsx' is older than output '../procaptcha-react/tsconfig.tsbuildinfo'
66
+ 3:55:59 PM - Project '../procaptcha-react/tsconfig.json' is up to date because newest input '../procaptcha-react/src/tests/captchaComponent.unit.test.tsx' is older than output '../procaptcha-react/tsconfig.tsbuildinfo'
67
67
 
68
- 8:08:23 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
68
+ 3:55:59 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
69
69
 
70
- 8:08:23 AM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-frictionless/tsconfig.json'...
70
+ 3:55:59 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-frictionless/tsconfig.json'...
71
71
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/procaptcha-frictionless@2.13.7 build
2
+ > @prosopo/procaptcha-frictionless@2.13.9 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/procaptcha-frictionless@2.13.7 build:cross-env
6
+ > @prosopo/procaptcha-frictionless@2.13.9 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -57,15 +57,16 @@ ViteEsmConfig: .
57
57
  vite v8.1.5 building ssr environment for production...
58
58
  Bundle build started
59
59
  
60
- 7 modules transformed.
60
+ 8 modules transformed.
61
61
  rendering chunks...
62
62
  computing gzip size...
63
63
  dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
64
64
  dist/index.js 0.32 kB │ gzip: 0.15 kB
65
65
  dist/detectorLoader.js 0.60 kB │ gzip: 0.39 kB
66
+ dist/frictionlessResultGuard.js 1.48 kB │ gzip: 0.80 kB
66
67
  dist/sessionInvalidatedRecovery.js 2.01 kB │ gzip: 0.98 kB
67
68
  dist/detectorPrefetch.js 2.86 kB │ gzip: 1.32 kB
68
69
  dist/customDetectBot.js 5.37 kB │ gzip: 1.67 kB
69
- dist/ProcaptchaFrictionless.js 6.49 kB │ gzip: 1.97 kB
70
+ dist/ProcaptchaFrictionless.js 6.59 kB │ gzip: 2.02 kB
70
71
 
71
- ✓ built in 52ms
72
+ ✓ built in 61ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,74 @@
1
1
  # @prosopo/procaptcha-frictionless
2
2
 
3
+ ## 2.13.9
4
+ ### Patch Changes
5
+
6
+ - 1214dd3: Two related fixes for the residual `INCORRECT_CAPTCHA_TYPE` class of
7
+ 400s on frictionless-configured sitekeys.
8
+
9
+ **Server — request-time trafficFilter no longer blocks.** Move `block`
10
+ enforcement back to submit / verify time (via
11
+ `resolveTrafficFilterCheck` in the PoW / image / puzzle task classes).
12
+ `applyTrafficFilterAtRequestTime` now returns only `pass` or
13
+ `challenge` — a `challenge` match still overrides captchaType /
14
+ powDifficulty / solvedImagesCount / puzzleTolerance at request time,
15
+ but a `block` match never short-circuits with 401. This restores the
16
+ pre-#3045 behaviour that blocked interactions still complete a solve
17
+ so they bill. Without this the operator's own trafficFilter policies
18
+ became widget-mount failures that cascaded into
19
+ `INCORRECT_CAPTCHA_TYPE` (~865/hr fleet-wide, concentrated on a
20
+ handful of sitekeys whose trafficFilter blocks datacenter / proxy).
21
+
22
+ **Widget — defensive guard for malformed `/frictionless` responses.**
23
+ Extract `evaluateFrictionlessResult` in `procaptcha-frictionless` and
24
+ halt when the response carries no `captchaType`. The previous flow
25
+ fell through into a default `ProcaptchaPow` mount with an undefined
26
+ `sessionId` on any bare-string 401 body (`{ "error": "Unauthorized" }`)
27
+ — the shape emitted by access-policy hard-block, decision-machine
28
+ autoBan, and domain / header middleware. `HttpClientBase` does not
29
+ throw on 4xx JSON so the widget receives these as valid-looking
30
+ `GetFrictionlessCaptchaResponse` and its `error.message` check misses.
31
+ The provider then rejects the fall-through `/captcha/pow` call as
32
+ `INCORRECT_CAPTCHA_TYPE` because the sitekey is
33
+ frictionless-configured.
34
+
35
+ **Rate-limits config fix.** Adds the missing `AdminApiPaths.GetSession`
36
+ entry to `getRateLimitConfig()` in `@prosopo/cli` — introduced
37
+ alongside the `/admin/session/get` diagnostic endpoint but never wired
38
+ into the CLI's rate-limit table, which broke `npm run setup` under
39
+ `ProsopoConfigSchema.parse`.
40
+
41
+ Unit and integration coverage: request-time `block` matches now
42
+ assert `pass` in `trafficFilterHierarchy.integration.test.ts` and
43
+ `trafficFilterRequestTime.unit.test.ts`; new unit coverage on
44
+ `captchaManager.resolveTrafficFilterCheck` locks in that datacenter
45
+ `block` still fires at verify (billing intact), datacenter `challenge`
46
+ doesn't (it's a request-time concern only), and the abuser default
47
+ still applies at verify for unconfigured sites. New
48
+ `evaluateFrictionlessResult` unit tests exercise the widget guard, and
49
+ a `frictionlessNoCaptchaTypeCascade.cy.ts` cypress spec forces the
50
+ bare-string 401 via `cy.intercept` and asserts no `/captcha/pow`
51
+ follows.
52
+ - Updated dependencies [ee5d250]
53
+ - @prosopo/types@5.1.2
54
+ - @prosopo/api@4.0.7
55
+ - @prosopo/procaptcha-common@2.11.27
56
+ - @prosopo/procaptcha-pow@2.10.34
57
+ - @prosopo/procaptcha-puzzle@2.10.50
58
+ - @prosopo/procaptcha-react@2.9.107
59
+
60
+ ## 2.13.8
61
+ ### Patch Changes
62
+
63
+ - Updated dependencies [2a07421]
64
+ - Updated dependencies [cec44bb]
65
+ - @prosopo/procaptcha-puzzle@2.10.49
66
+ - @prosopo/types@5.1.1
67
+ - @prosopo/api@4.0.6
68
+ - @prosopo/procaptcha-common@2.11.26
69
+ - @prosopo/procaptcha-pow@2.10.33
70
+ - @prosopo/procaptcha-react@2.9.106
71
+
3
72
  ## 2.13.7
4
73
  ### Patch Changes
5
74
 
@@ -1 +1 @@
1
- {"version":3,"file":"ProcaptchaFrictionless.d.ts","sourceRoot":"","sources":["../src/ProcaptchaFrictionless.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAKN,KAAK,2BAA2B,EAChC,MAAM,gBAAgB,CAAC;AA0DxB,eAAO,MAAM,sBAAsB,gEAOhC,2BAA2B,4CAwR7B,CAAC"}
1
+ {"version":3,"file":"ProcaptchaFrictionless.d.ts","sourceRoot":"","sources":["../src/ProcaptchaFrictionless.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAKN,KAAK,2BAA2B,EAChC,MAAM,gBAAgB,CAAC;AA2DxB,eAAO,MAAM,sBAAsB,gEAOhC,2BAA2B,4CAyR7B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import customDetectBot from "./customDetectBot.js";
2
+ import { evaluateFrictionlessResult } from "./frictionlessResultGuard.js";
2
3
  import { consumeRetryMountProps, handleSessionInvalidated } from "./sessionInvalidatedRecovery.js";
3
4
  import { loadI18next } from "@prosopo/locale";
4
5
  import { Checkbox, TestModeBanner, getDefaultEvents, isSecureBrowserContext, providerRetry } from "@prosopo/procaptcha-common";
@@ -118,14 +119,15 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = cu
118
119
  await providerRetry(async () => {
119
120
  stateRef.current.attemptCount += 1;
120
121
  const result = await detectBot(ProcaptchaConfigSchema.parse(config), container, restart, { attempt: stateRef.current.attemptCount });
121
- if (result.error?.message) {
122
+ const guard = evaluateFrictionlessResult(result);
123
+ if (guard.kind === "error") {
122
124
  stateRef.current = {
123
125
  ...stateRef.current,
124
126
  loading: false,
125
- errorMessage: result.error?.message
127
+ errorMessage: guard.message
126
128
  };
127
- events.onError(new Error(result.error?.message));
128
- fallOverWithStyle(result.error?.message, result.error?.key);
129
+ events.onError(new Error(guard.message));
130
+ fallOverWithStyle(guard.message, guard.key);
129
131
  return;
130
132
  }
131
133
  const frictionlessState = {
@@ -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,4 +1,5 @@
1
1
  const require_customDetectBot = require("./customDetectBot.cjs");
2
+ const require_frictionlessResultGuard = require("./frictionlessResultGuard.cjs");
2
3
  const require_sessionInvalidatedRecovery = require("./sessionInvalidatedRecovery.cjs");
3
4
  let _prosopo_locale = require("@prosopo/locale");
4
5
  let _prosopo_procaptcha_common = require("@prosopo/procaptcha-common");
@@ -118,14 +119,15 @@ var ProcaptchaFrictionless = ({ config, callbacks, restart, i18n, detectBot = re
118
119
  await (0, _prosopo_procaptcha_common.providerRetry)(async () => {
119
120
  stateRef.current.attemptCount += 1;
120
121
  const result = await detectBot(_prosopo_types.ProcaptchaConfigSchema.parse(config), container, restart, { attempt: stateRef.current.attemptCount });
121
- if (result.error?.message) {
122
+ const guard = require_frictionlessResultGuard.evaluateFrictionlessResult(result);
123
+ if (guard.kind === "error") {
122
124
  stateRef.current = {
123
125
  ...stateRef.current,
124
126
  loading: false,
125
- errorMessage: result.error?.message
127
+ errorMessage: guard.message
126
128
  };
127
- events.onError(new Error(result.error?.message));
128
- fallOverWithStyle(result.error?.message, result.error?.key);
129
+ events.onError(new Error(guard.message));
130
+ fallOverWithStyle(guard.message, guard.key);
129
131
  return;
130
132
  }
131
133
  const frictionlessState = {
@@ -0,0 +1,35 @@
1
+ //#region src/frictionlessResultGuard.ts
2
+ var MISSING_CAPTCHA_TYPE_MESSAGE = "Frictionless response missing captchaType; halting captcha mount";
3
+ /**
4
+ * Decide whether a `/frictionless` response is safe to mount an inner widget
5
+ * against.
6
+ *
7
+ * `result.error?.message` catches the well-formed error shape emitted when
8
+ * the provider surfaces a normal captcha error. A response with no
9
+ * `captchaType` is the other failure mode: request-time short-circuits
10
+ * (access-policy hard-block, decision-machine autoBan, domain / header
11
+ * middleware rejections) emit a bare-string `{ error: "..." }` that does
12
+ * not conform to `GetFrictionlessCaptchaResponse` but that
13
+ * `HttpClientBase` returns verbatim because it does not throw on 4xx JSON.
14
+ *
15
+ * Without the missing-captchaType branch the caller falls through to
16
+ * `renderForCaptchaType(undefined, ...)` — the default arm mounts
17
+ * ProcaptchaPow, which then calls `/captcha/pow` with an undefined
18
+ * sessionId and gets rejected as API.INCORRECT_CAPTCHA_TYPE (the sitekey
19
+ * is frictionless-configured, so a direct pow call isn't allowed).
20
+ */
21
+ var evaluateFrictionlessResult = (result) => {
22
+ if (result.error?.message) return {
23
+ kind: "error",
24
+ message: result.error.message,
25
+ ...result.error.key !== void 0 && { key: result.error.key }
26
+ };
27
+ if (!result.captchaType) return {
28
+ kind: "error",
29
+ message: MISSING_CAPTCHA_TYPE_MESSAGE
30
+ };
31
+ return { kind: "pass" };
32
+ };
33
+ //#endregion
34
+ exports.MISSING_CAPTCHA_TYPE_MESSAGE = MISSING_CAPTCHA_TYPE_MESSAGE;
35
+ exports.evaluateFrictionlessResult = evaluateFrictionlessResult;
@@ -0,0 +1,18 @@
1
+ export type FrictionlessGuardOutcome = {
2
+ kind: "pass";
3
+ } | {
4
+ kind: "error";
5
+ message: string;
6
+ key?: string;
7
+ };
8
+ export type FrictionlessGuardInput = {
9
+ captchaType?: string;
10
+ error?: {
11
+ message?: string;
12
+ key?: string;
13
+ };
14
+ };
15
+ declare const MISSING_CAPTCHA_TYPE_MESSAGE = "Frictionless response missing captchaType; halting captcha mount";
16
+ export declare const evaluateFrictionlessResult: (result: FrictionlessGuardInput) => FrictionlessGuardOutcome;
17
+ export { MISSING_CAPTCHA_TYPE_MESSAGE };
18
+ //# sourceMappingURL=frictionlessResultGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frictionlessResultGuard.d.ts","sourceRoot":"","sources":["../src/frictionlessResultGuard.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,wBAAwB,GACjC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAKpD,MAAM,MAAM,sBAAsB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEF,QAAA,MAAM,4BAA4B,qEACiC,CAAC;AAoBpE,eAAO,MAAM,0BAA0B,WAC9B,sBAAsB,KAC5B,wBAYF,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ //#region src/frictionlessResultGuard.ts
2
+ var MISSING_CAPTCHA_TYPE_MESSAGE = "Frictionless response missing captchaType; halting captcha mount";
3
+ /**
4
+ * Decide whether a `/frictionless` response is safe to mount an inner widget
5
+ * against.
6
+ *
7
+ * `result.error?.message` catches the well-formed error shape emitted when
8
+ * the provider surfaces a normal captcha error. A response with no
9
+ * `captchaType` is the other failure mode: request-time short-circuits
10
+ * (access-policy hard-block, decision-machine autoBan, domain / header
11
+ * middleware rejections) emit a bare-string `{ error: "..." }` that does
12
+ * not conform to `GetFrictionlessCaptchaResponse` but that
13
+ * `HttpClientBase` returns verbatim because it does not throw on 4xx JSON.
14
+ *
15
+ * Without the missing-captchaType branch the caller falls through to
16
+ * `renderForCaptchaType(undefined, ...)` — the default arm mounts
17
+ * ProcaptchaPow, which then calls `/captcha/pow` with an undefined
18
+ * sessionId and gets rejected as API.INCORRECT_CAPTCHA_TYPE (the sitekey
19
+ * is frictionless-configured, so a direct pow call isn't allowed).
20
+ */
21
+ var evaluateFrictionlessResult = (result) => {
22
+ if (result.error?.message) return {
23
+ kind: "error",
24
+ message: result.error.message,
25
+ ...result.error.key !== void 0 && { key: result.error.key }
26
+ };
27
+ if (!result.captchaType) return {
28
+ kind: "error",
29
+ message: MISSING_CAPTCHA_TYPE_MESSAGE
30
+ };
31
+ return { kind: "pass" };
32
+ };
33
+ //#endregion
34
+ export { MISSING_CAPTCHA_TYPE_MESSAGE, evaluateFrictionlessResult };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frictionlessResultGuard.js","sourceRoot":"","sources":["../src/frictionlessResultGuard.ts"],"names":[],"mappings":"AA0BA,MAAM,4BAA4B,GACjC,kEAAkE,CAAC;AAoBpE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACzC,MAA8B,EACH,EAAE;IAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3B,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;YAC7B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;SAChE,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frictionlessResultGuard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frictionlessResultGuard.test.d.ts","sourceRoot":"","sources":["../../src/tests/frictionlessResultGuard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { MISSING_CAPTCHA_TYPE_MESSAGE, evaluateFrictionlessResult, } from "../frictionlessResultGuard.js";
3
+ describe("evaluateFrictionlessResult", () => {
4
+ it("passes a well-formed response with a captchaType", () => {
5
+ expect(evaluateFrictionlessResult({
6
+ captchaType: "pow",
7
+ })).toEqual({ kind: "pass" });
8
+ });
9
+ it("passes when a captchaType is present even if error is a bare undefined", () => {
10
+ expect(evaluateFrictionlessResult({
11
+ captchaType: "image",
12
+ error: undefined,
13
+ })).toEqual({ kind: "pass" });
14
+ });
15
+ it("returns a structured error when the server emits `{ error: { message } }`", () => {
16
+ expect(evaluateFrictionlessResult({
17
+ captchaType: "pow",
18
+ error: { message: "Boom", key: "API.SOMETHING" },
19
+ })).toEqual({ kind: "error", message: "Boom", key: "API.SOMETHING" });
20
+ });
21
+ it("omits key from the outcome when the server error carries no key", () => {
22
+ const outcome = evaluateFrictionlessResult({
23
+ captchaType: "pow",
24
+ error: { message: "Boom" },
25
+ });
26
+ expect(outcome.kind).toBe("error");
27
+ if (outcome.kind !== "error")
28
+ throw new Error("expected error outcome");
29
+ expect(outcome.message).toBe("Boom");
30
+ expect("key" in outcome).toBe(false);
31
+ });
32
+ it("halts when captchaType is missing (bare-string 401 body shape from access-policy / autoBan / middleware)", () => {
33
+ expect(evaluateFrictionlessResult({
34
+ error: undefined,
35
+ })).toEqual({ kind: "error", message: MISSING_CAPTCHA_TYPE_MESSAGE });
36
+ });
37
+ it("halts when both captchaType and error are absent (opaque parse failure)", () => {
38
+ expect(evaluateFrictionlessResult({})).toEqual({
39
+ kind: "error",
40
+ message: MISSING_CAPTCHA_TYPE_MESSAGE,
41
+ });
42
+ });
43
+ it("prefers the structured error over the missing-captchaType message when both apply", () => {
44
+ expect(evaluateFrictionlessResult({
45
+ error: { message: "Server error", key: "API.SERVER_ERROR" },
46
+ })).toEqual({
47
+ kind: "error",
48
+ message: "Server error",
49
+ key: "API.SERVER_ERROR",
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=frictionlessResultGuard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frictionlessResultGuard.test.js","sourceRoot":"","sources":["../../src/tests/frictionlessResultGuard.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACN,4BAA4B,EAC5B,0BAA0B,GAC1B,MAAM,+BAA+B,CAAC;AAWvC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC3D,MAAM,CACL,0BAA0B,CAAC;YAC1B,WAAW,EAAE,KAAK;SAClB,CAAC,CACF,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QACjF,MAAM,CACL,0BAA0B,CAAC;YAC1B,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,SAAS;SAChB,CAAC,CACF,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACpF,MAAM,CACL,0BAA0B,CAAC;YAC1B,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE;SAChD,CAAC,CACF,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC1E,MAAM,OAAO,GAAG,0BAA0B,CAAC;YAC1C,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0GAA0G,EAAE,GAAG,EAAE;QAOnH,MAAM,CACL,0BAA0B,CAAC;YAG1B,KAAK,EAAE,SAAS;SAChB,CAAC,CACF,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4BAA4B;SACrC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAG5F,MAAM,CACL,0BAA0B,CAAC;YAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,kBAAkB,EAAE;SAC3D,CAAC,CACF,CAAC,OAAO,CAAC;YACT,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,cAAc;YACvB,GAAG,EAAE,kBAAkB;SACvB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/procaptcha-frictionless",
3
- "version": "2.13.7",
3
+ "version": "2.13.9",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -30,20 +30,20 @@
30
30
  },
31
31
  "browserslist": ["> 0.5%, last 2 versions, not dead"],
32
32
  "dependencies": {
33
- "@prosopo/api": "4.0.5",
33
+ "@prosopo/api": "4.0.7",
34
34
  "@prosopo/common": "3.1.50",
35
35
  "@prosopo/locale": "3.3.0",
36
- "@prosopo/procaptcha-common": "2.11.25",
37
- "@prosopo/procaptcha-pow": "2.10.32",
38
- "@prosopo/procaptcha-puzzle": "2.10.48",
39
- "@prosopo/procaptcha-react": "2.9.105",
40
- "@prosopo/types": "5.1.0",
36
+ "@prosopo/procaptcha-common": "2.11.27",
37
+ "@prosopo/procaptcha-pow": "2.10.34",
38
+ "@prosopo/procaptcha-puzzle": "2.10.50",
39
+ "@prosopo/procaptcha-react": "2.9.107",
40
+ "@prosopo/types": "5.1.2",
41
41
  "@prosopo/widget-skeleton": "2.8.6",
42
42
  "dotenv": "16.4.5",
43
43
  "react": "18.3.1"
44
44
  },
45
45
  "devDependencies": {
46
- "@prosopo/config": "3.3.8",
46
+ "@prosopo/config": "3.3.9",
47
47
  "@types/node": "22.10.2",
48
48
  "@vitest/coverage-v8": "4.1.10",
49
49
  "concurrently": "9.0.1",
@@ -30,6 +30,7 @@ import {
30
30
  import { darkTheme, lightTheme } from "@prosopo/widget-skeleton";
31
31
  import { useEffect, useRef, useState } from "react";
32
32
  import customDetectBot from "./customDetectBot.js";
33
+ import { evaluateFrictionlessResult } from "./frictionlessResultGuard.js";
33
34
  import {
34
35
  type RetryCoords,
35
36
  consumeRetryMountProps,
@@ -293,14 +294,15 @@ export const ProcaptchaFrictionless = ({
293
294
  attempt: stateRef.current.attemptCount,
294
295
  });
295
296
 
296
- if (result.error?.message) {
297
+ const guard = evaluateFrictionlessResult(result);
298
+ if (guard.kind === "error") {
297
299
  stateRef.current = {
298
300
  ...stateRef.current,
299
301
  loading: false,
300
- errorMessage: result.error?.message,
302
+ errorMessage: guard.message,
301
303
  };
302
- events.onError(new Error(result.error?.message));
303
- fallOverWithStyle(result.error?.message, result.error?.key);
304
+ events.onError(new Error(guard.message));
305
+ fallOverWithStyle(guard.message, guard.key);
304
306
  return;
305
307
  }
306
308
 
@@ -0,0 +1,64 @@
1
+ // Copyright 2021-2026 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ export type FrictionlessGuardOutcome =
16
+ | { kind: "pass" }
17
+ | { kind: "error"; message: string; key?: string };
18
+
19
+ // Fields the guard reads off the `/frictionless` result. Kept minimal
20
+ // (subset of BotDetectionFunctionResult) so the helper can be exercised
21
+ // without pulling in the full widget config surface.
22
+ export type FrictionlessGuardInput = {
23
+ captchaType?: string;
24
+ error?: { message?: string; key?: string };
25
+ };
26
+
27
+ const MISSING_CAPTCHA_TYPE_MESSAGE =
28
+ "Frictionless response missing captchaType; halting captcha mount";
29
+
30
+ /**
31
+ * Decide whether a `/frictionless` response is safe to mount an inner widget
32
+ * against.
33
+ *
34
+ * `result.error?.message` catches the well-formed error shape emitted when
35
+ * the provider surfaces a normal captcha error. A response with no
36
+ * `captchaType` is the other failure mode: request-time short-circuits
37
+ * (access-policy hard-block, decision-machine autoBan, domain / header
38
+ * middleware rejections) emit a bare-string `{ error: "..." }` that does
39
+ * not conform to `GetFrictionlessCaptchaResponse` but that
40
+ * `HttpClientBase` returns verbatim because it does not throw on 4xx JSON.
41
+ *
42
+ * Without the missing-captchaType branch the caller falls through to
43
+ * `renderForCaptchaType(undefined, ...)` — the default arm mounts
44
+ * ProcaptchaPow, which then calls `/captcha/pow` with an undefined
45
+ * sessionId and gets rejected as API.INCORRECT_CAPTCHA_TYPE (the sitekey
46
+ * is frictionless-configured, so a direct pow call isn't allowed).
47
+ */
48
+ export const evaluateFrictionlessResult = (
49
+ result: FrictionlessGuardInput,
50
+ ): FrictionlessGuardOutcome => {
51
+ if (result.error?.message) {
52
+ return {
53
+ kind: "error",
54
+ message: result.error.message,
55
+ ...(result.error.key !== undefined && { key: result.error.key }),
56
+ };
57
+ }
58
+ if (!result.captchaType) {
59
+ return { kind: "error", message: MISSING_CAPTCHA_TYPE_MESSAGE };
60
+ }
61
+ return { kind: "pass" };
62
+ };
63
+
64
+ export { MISSING_CAPTCHA_TYPE_MESSAGE };