@prosopo/procaptcha-frictionless 2.13.8 → 2.13.10

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.8 build:cjs
2
+ > @prosopo/procaptcha-frictionless@2.13.10 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -53,14 +53,15 @@ ViteCommonJSConfig: .
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 48ms
67
+ ✓ built in 32ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/procaptcha-frictionless@2.13.8 build:tsc
2
+ > @prosopo/procaptcha-frictionless@2.13.10 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 8:02:13 PM - Projects in this build:
5
+ 11:34:15 AM - 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:02:13 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'
28
+ 11:34:15 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
29
29
 
30
- 8:02:13 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
30
+ 11:34:15 AM - 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:02:13 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
32
+ 11:34:15 AM - 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:02:13 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'
34
+ 11:34:15 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'
35
35
 
36
- 8:02:13 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'
36
+ 11:34:15 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'
37
37
 
38
- 8:02:13 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/tsconfig.tsbuildinfo'
38
+ 11:34:15 AM - 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:02:13 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
40
+ 11:34:15 AM - 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:02:13 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
42
+ 11:34:15 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
43
43
 
44
- 8:02:13 PM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
44
+ 11:34:15 AM - 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:02:13 PM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
46
+ 11:34:15 AM - 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:02:13 PM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/tests/providers.unit.test.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
48
+ 11:34:15 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'
49
49
 
50
- 8:02:13 PM - 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
+ 11:34:15 AM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/theme.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
51
51
 
52
- 8:02:13 PM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/index.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
52
+ 11:34:15 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/pair/decode.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
53
53
 
54
- 8:02:13 PM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/custom.d.ts' is older than output '../account/tsconfig.tsbuildinfo'
54
+ 11:34:15 AM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/custom.d.ts' is older than output '../account/tsconfig.tsbuildinfo'
55
55
 
56
- 8:02:13 PM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/simdReadings.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
56
+ 11:34:15 AM - 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:02:14 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'
58
+ 11:34:15 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'
59
59
 
60
- 8:02:14 PM - Project '../procaptcha-puzzle/tsconfig.json' is up to date because newest input '../procaptcha-puzzle/src/tests/managerHarness.ts' is older than output '../procaptcha-puzzle/tsconfig.tsbuildinfo'
60
+ 11:34:15 AM - Project '../procaptcha-puzzle/tsconfig.json' is up to date because newest input '../procaptcha-puzzle/src/tests/managerHarness.ts' is older than output '../procaptcha-puzzle/tsconfig.tsbuildinfo'
61
61
 
62
- 8:02:14 PM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
62
+ 11:34:15 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/index.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
63
63
 
64
- 8:02:14 PM - Project '../procaptcha/tsconfig.json' is up to date because newest input '../procaptcha/src/modules/ProsopoCaptchaApi.ts' is older than output '../procaptcha/tsconfig.tsbuildinfo'
64
+ 11:34:15 AM - Project '../procaptcha/tsconfig.json' is up to date because newest input '../procaptcha/src/modules/Manager.ts' is older than output '../procaptcha/tsconfig.tsbuildinfo'
65
65
 
66
- 8:02:14 PM - Project '../procaptcha-react/tsconfig.json' is up to date because newest input '../procaptcha-react/src/index.ts' is older than output '../procaptcha-react/tsconfig.tsbuildinfo'
66
+ 11:34:15 AM - Project '../procaptcha-react/tsconfig.json' is up to date because newest input '../procaptcha-react/src/index.ts' is older than output '../procaptcha-react/tsconfig.tsbuildinfo'
67
67
 
68
- 8:02:14 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
68
+ 11:34:15 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
69
69
 
70
- 8:02:14 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-frictionless/tsconfig.json'...
70
+ 11:34:15 AM - 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.8 build
2
+ > @prosopo/procaptcha-frictionless@2.13.10 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/procaptcha-frictionless@2.13.8 build:cross-env
6
+ > @prosopo/procaptcha-frictionless@2.13.10 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -41,6 +41,7 @@ ViteEsmConfig: .
41
41
  '@prosopo/common',
42
42
  '@prosopo/logger',
43
43
  '@prosopo/fingerprint',
44
+ 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.
44
45
  '@prosopo/fingerprintjs',
45
46
  '@prosopo/procaptcha-common',
46
47
  '@prosopo/load-balancer',
@@ -53,19 +54,19 @@ ViteEsmConfig: .
53
54
  '@prosopo/datasets'
54
55
  ]
55
56
  }
56
- 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.
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 48ms
72
+ ✓ built in 45ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,73 @@
1
1
  # @prosopo/procaptcha-frictionless
2
2
 
3
+ ## 2.13.10
4
+ ### Patch Changes
5
+
6
+ - Updated dependencies [234c737]
7
+ - @prosopo/types@5.2.0
8
+ - @prosopo/api@4.0.8
9
+ - @prosopo/procaptcha-common@2.11.28
10
+ - @prosopo/procaptcha-pow@2.10.35
11
+ - @prosopo/procaptcha-puzzle@2.10.51
12
+ - @prosopo/procaptcha-react@2.9.108
13
+
14
+ ## 2.13.9
15
+ ### Patch Changes
16
+
17
+ - 1214dd3: Two related fixes for the residual `INCORRECT_CAPTCHA_TYPE` class of
18
+ 400s on frictionless-configured sitekeys.
19
+
20
+ **Server — request-time trafficFilter no longer blocks.** Move `block`
21
+ enforcement back to submit / verify time (via
22
+ `resolveTrafficFilterCheck` in the PoW / image / puzzle task classes).
23
+ `applyTrafficFilterAtRequestTime` now returns only `pass` or
24
+ `challenge` — a `challenge` match still overrides captchaType /
25
+ powDifficulty / solvedImagesCount / puzzleTolerance at request time,
26
+ but a `block` match never short-circuits with 401. This restores the
27
+ pre-#3045 behaviour that blocked interactions still complete a solve
28
+ so they bill. Without this the operator's own trafficFilter policies
29
+ became widget-mount failures that cascaded into
30
+ `INCORRECT_CAPTCHA_TYPE` (~865/hr fleet-wide, concentrated on a
31
+ handful of sitekeys whose trafficFilter blocks datacenter / proxy).
32
+
33
+ **Widget — defensive guard for malformed `/frictionless` responses.**
34
+ Extract `evaluateFrictionlessResult` in `procaptcha-frictionless` and
35
+ halt when the response carries no `captchaType`. The previous flow
36
+ fell through into a default `ProcaptchaPow` mount with an undefined
37
+ `sessionId` on any bare-string 401 body (`{ "error": "Unauthorized" }`)
38
+ — the shape emitted by access-policy hard-block, decision-machine
39
+ autoBan, and domain / header middleware. `HttpClientBase` does not
40
+ throw on 4xx JSON so the widget receives these as valid-looking
41
+ `GetFrictionlessCaptchaResponse` and its `error.message` check misses.
42
+ The provider then rejects the fall-through `/captcha/pow` call as
43
+ `INCORRECT_CAPTCHA_TYPE` because the sitekey is
44
+ frictionless-configured.
45
+
46
+ **Rate-limits config fix.** Adds the missing `AdminApiPaths.GetSession`
47
+ entry to `getRateLimitConfig()` in `@prosopo/cli` — introduced
48
+ alongside the `/admin/session/get` diagnostic endpoint but never wired
49
+ into the CLI's rate-limit table, which broke `npm run setup` under
50
+ `ProsopoConfigSchema.parse`.
51
+
52
+ Unit and integration coverage: request-time `block` matches now
53
+ assert `pass` in `trafficFilterHierarchy.integration.test.ts` and
54
+ `trafficFilterRequestTime.unit.test.ts`; new unit coverage on
55
+ `captchaManager.resolveTrafficFilterCheck` locks in that datacenter
56
+ `block` still fires at verify (billing intact), datacenter `challenge`
57
+ doesn't (it's a request-time concern only), and the abuser default
58
+ still applies at verify for unconfigured sites. New
59
+ `evaluateFrictionlessResult` unit tests exercise the widget guard, and
60
+ a `frictionlessNoCaptchaTypeCascade.cy.ts` cypress spec forces the
61
+ bare-string 401 via `cy.intercept` and asserts no `/captcha/pow`
62
+ follows.
63
+ - Updated dependencies [ee5d250]
64
+ - @prosopo/types@5.1.2
65
+ - @prosopo/api@4.0.7
66
+ - @prosopo/procaptcha-common@2.11.27
67
+ - @prosopo/procaptcha-pow@2.10.34
68
+ - @prosopo/procaptcha-puzzle@2.10.50
69
+ - @prosopo/procaptcha-react@2.9.107
70
+
3
71
  ## 2.13.8
4
72
  ### Patch Changes
5
73
 
@@ -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.8",
3
+ "version": "2.13.10",
4
4
  "author": "PROSOPO LIMITED <info@prosopo.io>",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -30,14 +30,14 @@
30
30
  },
31
31
  "browserslist": ["> 0.5%, last 2 versions, not dead"],
32
32
  "dependencies": {
33
- "@prosopo/api": "4.0.6",
33
+ "@prosopo/api": "4.0.8",
34
34
  "@prosopo/common": "3.1.50",
35
35
  "@prosopo/locale": "3.3.0",
36
- "@prosopo/procaptcha-common": "2.11.26",
37
- "@prosopo/procaptcha-pow": "2.10.33",
38
- "@prosopo/procaptcha-puzzle": "2.10.49",
39
- "@prosopo/procaptcha-react": "2.9.106",
40
- "@prosopo/types": "5.1.1",
36
+ "@prosopo/procaptcha-common": "2.11.28",
37
+ "@prosopo/procaptcha-pow": "2.10.35",
38
+ "@prosopo/procaptcha-puzzle": "2.10.51",
39
+ "@prosopo/procaptcha-react": "2.9.108",
40
+ "@prosopo/types": "5.2.0",
41
41
  "@prosopo/widget-skeleton": "2.8.6",
42
42
  "dotenv": "16.4.5",
43
43
  "react": "18.3.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 };