@prosopo/provider 5.1.2 → 5.1.3
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.
- package/.turbo/turbo-build$colon$cjs.log +9 -8
- package/.turbo/turbo-build$colon$tsc.log +24 -24
- package/.turbo/turbo-build.log +10 -9
- package/CHANGELOG.md +78 -0
- package/dist/api/admin/apiAdminRoutesProvider.d.ts.map +1 -1
- package/dist/api/admin/apiAdminRoutesProvider.js +3 -1
- package/dist/api/admin/apiAdminRoutesProvider.js.map +1 -1
- package/dist/api/admin/apiGetSessionEndpoint.d.ts +14 -0
- package/dist/api/admin/apiGetSessionEndpoint.d.ts.map +1 -0
- package/dist/api/admin/apiGetSessionEndpoint.js +52 -0
- package/dist/api/admin/apiGetSessionEndpoint.js.map +1 -0
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +0 -9
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +0 -9
- package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js +0 -9
- package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.d.ts +1 -4
- package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
- package/dist/api/captcha/trafficFilterRequestTime.js +18 -35
- package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
- package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +3 -1
- package/dist/cjs/api/admin/apiGetSessionEndpoint.cjs +52 -0
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +0 -9
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +0 -9
- package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +0 -9
- package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +17 -34
- package/dist/tests/integration/trafficFilterHierarchy.integration.test.js +4 -4
- package/dist/tests/integration/trafficFilterHierarchy.integration.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js +154 -0
- package/dist/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/trafficFilterRequestTime.unit.test.js +14 -24
- package/dist/tests/unit/api/captcha/trafficFilterRequestTime.unit.test.js.map +1 -1
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +38 -0
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +182 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +45 -0
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trafficFilterRequestTime.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,WAAW,EAEX,KAAK,cAAc,EACnB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"trafficFilterRequestTime.d.ts","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACN,WAAW,EAEX,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EACN,KAAK,uBAAuB,EAG5B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACA,IAAI,EAAE,WAAW,CAAC;IAGlB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CAC7D,CAAC;AAeL,eAAO,MAAM,+BAA+B,WACnC,cAAc,GAAG,SAAS,iBACnB,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,WACzC,MAAM,KACb,yBAgCF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GACzC;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEzC,MAAM,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,yBAAyB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,eAAO,MAAM,+BAA+B,UACpC,8BAA8B,OAChC,QAAQ,KACX,OAAO,CAAC,gCAAgC,CAyD1C,CAAC"}
|
|
@@ -1,36 +1,22 @@
|
|
|
1
1
|
import { checkTrafficFilter, resolveChallengePolicy } from "../../tasks/spam/checkTrafficFilter.js";
|
|
2
|
-
import { CaptchaType
|
|
2
|
+
import { CaptchaType } from "@prosopo/types";
|
|
3
3
|
//#region src/api/captcha/trafficFilterRequestTime.ts
|
|
4
4
|
/**
|
|
5
5
|
* Evaluate the site's `trafficFilter` against the current request's IP info
|
|
6
|
-
* at challenge-request time.
|
|
7
|
-
* `
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
6
|
+
* at challenge-request time. Only `challenge` matches contribute at this
|
|
7
|
+
* point — a matched `challenge` policy hands back an override bundle for
|
|
8
|
+
* the caller to fold into its captcha-type + parameter selection. `block`
|
|
9
|
+
* matches are deliberately ignored here; the enforcement of block policies
|
|
10
|
+
* is deferred to submit / verify time (via `resolveTrafficFilterCheck` in
|
|
11
|
+
* PoW / image / puzzle task classes) so that blocked users still receive a
|
|
12
|
+
* captcha and produce a billable interaction. Removing this deferral
|
|
13
|
+
* previously turned every blocked request into a request-time 401, which
|
|
14
|
+
* the widget mis-handled into an INCORRECT_CAPTCHA_TYPE cascade — see
|
|
15
|
+
* `evaluateFrictionlessResult` in `@prosopo/procaptcha-frictionless`.
|
|
16
16
|
*/
|
|
17
17
|
var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
|
|
18
18
|
if (!trafficFilter) return { kind: "pass" };
|
|
19
|
-
const
|
|
20
|
-
abuser: { action: TrafficFilterAction.Block },
|
|
21
|
-
...trafficFilter
|
|
22
|
-
});
|
|
23
|
-
if (result.isBlocked) {
|
|
24
|
-
logger?.info(() => ({
|
|
25
|
-
msg: "Traffic filter rejected challenge request",
|
|
26
|
-
data: { reason: result.reason }
|
|
27
|
-
}));
|
|
28
|
-
return {
|
|
29
|
-
kind: "block",
|
|
30
|
-
reason: result.reason
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const resolved = resolveChallengePolicy(result.matches);
|
|
19
|
+
const resolved = resolveChallengePolicy(checkTrafficFilter(ipInfo, trafficFilter).matches);
|
|
34
20
|
if (!resolved) return { kind: "pass" };
|
|
35
21
|
logger?.info(() => ({
|
|
36
22
|
msg: "Traffic filter applied challenge overrides",
|
|
@@ -53,19 +39,16 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
|
|
|
53
39
|
};
|
|
54
40
|
/**
|
|
55
41
|
* Frictionless-flow companion to `applyTrafficFilterAtRequestTime`. When the
|
|
56
|
-
* verdict is `
|
|
57
|
-
* `
|
|
58
|
-
* `
|
|
59
|
-
*
|
|
60
|
-
*
|
|
42
|
+
* verdict is `challenge` and names a concrete captchaType, dispatch to the
|
|
43
|
+
* matching `send{Image,Pow,Puzzle}Captcha` helper with the resolved
|
|
44
|
+
* parameter overrides. Otherwise returns `{ handled: false }` so the
|
|
45
|
+
* caller falls through to the normal decision machine. Block matches are
|
|
46
|
+
* not represented in the verdict at all — they're enforced at submit /
|
|
47
|
+
* verify time (see the comment on `applyTrafficFilterAtRequestTime`).
|
|
61
48
|
*/
|
|
62
49
|
var handleFrictionlessTrafficFilter = async (input, res) => {
|
|
63
50
|
const { verdict } = input;
|
|
64
51
|
if (verdict.kind === "pass") return { handled: false };
|
|
65
|
-
if (verdict.kind === "block") return {
|
|
66
|
-
handled: true,
|
|
67
|
-
response: res.status(401).json({ error: "Unauthorized" })
|
|
68
|
-
};
|
|
69
52
|
const baseParams = {
|
|
70
53
|
userSitekeyIpHash: input.userSitekeyIpHash,
|
|
71
54
|
siteKey: input.dapp,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trafficFilterRequestTime.js","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,WAAW,
|
|
1
|
+
{"version":3,"file":"trafficFilterRequestTime.js","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"AAeA,OAAO,EACN,WAAW,GAIX,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAEN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,wCAAwC,CAAC;AA4BhD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC9C,MAAkC,EAClC,aAAkD,EAClD,MAAe,EACa,EAAE;IAC9B,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAO5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEvC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnB,GAAG,EAAE,4CAA4C;QACjD,IAAI,EAAE;YACL,UAAU,EAAE,QAAQ,CAAC,gBAAgB;YACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;YAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe;SACzC;KACD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;KAC3C,CAAC;AACH,CAAC,CAAC;AA0BF,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,EACnD,KAAqC,EACrC,GAAa,EAC+B,EAAE;IAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEvD,MAAM,UAAU,GAAG;QAClB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,WAAW;KAC1B,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,WAAwB,EAAQ,EAAE;QACtD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACxB,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,WAAW;gBACX,UAAU,EAAE,OAAO,CAAC,gBAAgB;aACpC;SACD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,QAAoD,CAAC;IACzD,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QAC/C,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;YAC3D,GAAG,UAAU;YACb,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CACR,OAAO,CAAC,iBAAiB,EACzB,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAC1C;gBACF,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc;SAC7C,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;QACpD,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC;YACzD,GAAG,UAAU;YACb,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI;gBAC1C,aAAa,EAAE,OAAO,CAAC,aAAa;aACpC,CAAC;SACF,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QACvD,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChC,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxD,CAAC;IAOD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -3,6 +3,7 @@ const require_apiClearAllCountersEndpoint = require("./apiClearAllCountersEndpoi
|
|
|
3
3
|
const require_apiDnsEventEndpoint = require("./apiDnsEventEndpoint.cjs");
|
|
4
4
|
const require_apiGetAllDecisionMachinesEndpoint = require("./apiGetAllDecisionMachinesEndpoint.cjs");
|
|
5
5
|
const require_apiGetDecisionMachineEndpoint = require("./apiGetDecisionMachineEndpoint.cjs");
|
|
6
|
+
const require_apiGetSessionEndpoint = require("./apiGetSessionEndpoint.cjs");
|
|
6
7
|
const require_apiRegisterSiteKeyEndpoint = require("./apiRegisterSiteKeyEndpoint.cjs");
|
|
7
8
|
const require_apiRegisterSiteKeysEndpoint = require("./apiRegisterSiteKeysEndpoint.cjs");
|
|
8
9
|
const require_apiRemoveAllDecisionMachinesEndpoint = require("./apiRemoveAllDecisionMachinesEndpoint.cjs");
|
|
@@ -31,7 +32,8 @@ var ApiAdminRoutesProvider = class {
|
|
|
31
32
|
[_prosopo_types.AdminApiPaths.SiteKeysRemove]: new require_apiRemoveSiteKeysEndpoint.ApiRemoveSiteKeysEndpoint(this.tasks.clientTaskManager),
|
|
32
33
|
[_prosopo_types.AdminApiPaths.ToggleMaintenanceMode]: new require_apiToggleMaintenanceModeEndpoint.ApiToggleMaintenanceModeEndpoint(),
|
|
33
34
|
[_prosopo_types.AdminApiPaths.DnsEvent]: new require_apiDnsEventEndpoint.ApiDnsEventEndpoint(this.tasks.db, this.tasks.env.ipInfoService),
|
|
34
|
-
[_prosopo_types.AdminApiPaths.ReplaceDetectorPool]: new require_apiReplaceDetectorPoolEndpoint.ApiReplaceDetectorPoolEndpoint()
|
|
35
|
+
[_prosopo_types.AdminApiPaths.ReplaceDetectorPool]: new require_apiReplaceDetectorPoolEndpoint.ApiReplaceDetectorPoolEndpoint(),
|
|
36
|
+
[_prosopo_types.AdminApiPaths.GetSession]: new require_apiGetSessionEndpoint.ApiGetSessionEndpoint(this.tasks)
|
|
35
37
|
};
|
|
36
38
|
}
|
|
37
39
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
let _prosopo_logger = require("@prosopo/logger");
|
|
2
|
+
let _prosopo_types = require("@prosopo/types");
|
|
3
|
+
let _prosopo_api_route = require("@prosopo/api-route");
|
|
4
|
+
//#region src/api/admin/apiGetSessionEndpoint.ts
|
|
5
|
+
/**
|
|
6
|
+
* Diagnostic-only. Reads a session record from both Mongo (authoritative)
|
|
7
|
+
* and Redis (fast-path cache) and returns both views verbatim so tests
|
|
8
|
+
* can assert `captchaType`, `bundleId`, `deleted`, `originSessionId` etc.
|
|
9
|
+
* agree between the two stores at each stage of a captcha flow.
|
|
10
|
+
*
|
|
11
|
+
* Deliberately does not touch either store. Not called from any client-
|
|
12
|
+
* facing widget path; the cypress consistency suite is the only current
|
|
13
|
+
* consumer.
|
|
14
|
+
*/
|
|
15
|
+
var ApiGetSessionEndpoint = class {
|
|
16
|
+
constructor(tasks) {
|
|
17
|
+
this.tasks = tasks;
|
|
18
|
+
}
|
|
19
|
+
async processRequest(args, logger) {
|
|
20
|
+
logger = logger ? logger.with({}, "admin:session:get") : (0, _prosopo_logger.getLogger)("info", "provider:admin:session:get");
|
|
21
|
+
try {
|
|
22
|
+
const { sessionId } = args;
|
|
23
|
+
logger.info(() => ({
|
|
24
|
+
msg: "Getting session state from Mongo and Redis",
|
|
25
|
+
data: { sessionId }
|
|
26
|
+
}));
|
|
27
|
+
const mongo = await this.tasks.db.getSessionRecordBySessionId(sessionId);
|
|
28
|
+
const cached = this.tasks.writeQueue ? await this.tasks.writeQueue.getCachedSession(sessionId) : void 0;
|
|
29
|
+
return {
|
|
30
|
+
status: _prosopo_api_route.ApiEndpointResponseStatus.SUCCESS,
|
|
31
|
+
data: {
|
|
32
|
+
mongo: mongo ?? null,
|
|
33
|
+
redis: cached ?? null
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
} catch (error) {
|
|
37
|
+
logger.error(() => ({
|
|
38
|
+
msg: "Error reading session state",
|
|
39
|
+
err: error
|
|
40
|
+
}));
|
|
41
|
+
return {
|
|
42
|
+
status: _prosopo_api_route.ApiEndpointResponseStatus.FAIL,
|
|
43
|
+
error: error.message
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getRequestArgsSchema() {
|
|
48
|
+
return _prosopo_types.GetSessionBody;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
exports.ApiGetSessionEndpoint = ApiGetSessionEndpoint;
|
|
@@ -85,15 +85,6 @@ var getImageCaptchaChallenge_default = (env, userAccessRulesStorage) => async (r
|
|
|
85
85
|
logger: req.logger
|
|
86
86
|
}));
|
|
87
87
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientRecord.settings?.trafficFilter, req.logger);
|
|
88
|
-
if (trafficVerdict.kind === "block") return next(new _prosopo_common.ProsopoApiError(trafficVerdict.reason, {
|
|
89
|
-
context: {
|
|
90
|
-
code: 401,
|
|
91
|
-
siteKey: dapp,
|
|
92
|
-
user
|
|
93
|
-
},
|
|
94
|
-
i18n: req.i18n,
|
|
95
|
-
logger: req.logger
|
|
96
|
-
}));
|
|
97
88
|
const trafficSolvedImagesCount = trafficVerdict.kind === "challenge" ? trafficVerdict.solvedImagesCount : void 0;
|
|
98
89
|
const captchaConfig = {
|
|
99
90
|
solved: { count: Math.min(trafficSolvedImagesCount || solvedImagesCount || userAccessPolicy?.solvedImagesCount || env.config.captchas.solved.count, clientRecord.settings.imageMaxRounds ?? _prosopo_types.imageMaxRoundsDefault) },
|
|
@@ -79,15 +79,6 @@ var getPoWCaptchaChallenge_default = (env, userAccessRulesStorage) => async (req
|
|
|
79
79
|
logger: req.logger
|
|
80
80
|
}));
|
|
81
81
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
|
|
82
|
-
if (trafficVerdict.kind === "block") return next(new _prosopo_common.ProsopoApiError(trafficVerdict.reason, {
|
|
83
|
-
context: {
|
|
84
|
-
code: 401,
|
|
85
|
-
siteKey: dapp,
|
|
86
|
-
user
|
|
87
|
-
},
|
|
88
|
-
i18n: req.i18n,
|
|
89
|
-
logger: req.logger
|
|
90
|
-
}));
|
|
91
82
|
const difficulty = (trafficVerdict.kind === "challenge" ? trafficVerdict.powDifficulty : void 0) || powDifficulty || userAccessPolicy?.powDifficulty || clientSettings?.settings?.powDifficulty;
|
|
92
83
|
const challenge = await tasks.powCaptchaManager.getPowCaptchaChallenge(user, dapp, origin, difficulty);
|
|
93
84
|
if (validSessionId && simdReadings) await tasks.frictionlessManager.decryptAndAttachSimdReadingsIfAbsent(validSessionId, simdReadings, _prosopo_types.SimdReadingsStage.challenge).catch((updateErr) => {
|
|
@@ -79,15 +79,6 @@ var getPuzzleCaptchaChallenge_default = (env, userAccessRulesStorage) => async (
|
|
|
79
79
|
logger: req.logger
|
|
80
80
|
}));
|
|
81
81
|
const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
|
|
82
|
-
if (trafficVerdict.kind === "block") return next(new _prosopo_common.ProsopoApiError(trafficVerdict.reason, {
|
|
83
|
-
context: {
|
|
84
|
-
code: 401,
|
|
85
|
-
siteKey: dapp,
|
|
86
|
-
user
|
|
87
|
-
},
|
|
88
|
-
i18n: req.i18n,
|
|
89
|
-
logger: req.logger
|
|
90
|
-
}));
|
|
91
82
|
const tolerance = (trafficVerdict.kind === "challenge" ? trafficVerdict.puzzleTolerance : void 0) ?? clientSettings?.settings?.puzzleTolerance;
|
|
92
83
|
const challenge = await tasks.puzzleCaptchaManager.getPuzzleCaptchaChallenge(user, dapp, origin, tolerance);
|
|
93
84
|
if (validSessionId && simdReadings) await tasks.frictionlessManager.decryptAndAttachSimdReadingsIfAbsent(validSessionId, simdReadings, _prosopo_types.SimdReadingsStage.challenge).catch((updateErr) => {
|
|
@@ -3,34 +3,20 @@ let _prosopo_types = require("@prosopo/types");
|
|
|
3
3
|
//#region src/api/captcha/trafficFilterRequestTime.ts
|
|
4
4
|
/**
|
|
5
5
|
* Evaluate the site's `trafficFilter` against the current request's IP info
|
|
6
|
-
* at challenge-request time.
|
|
7
|
-
* `
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
6
|
+
* at challenge-request time. Only `challenge` matches contribute at this
|
|
7
|
+
* point — a matched `challenge` policy hands back an override bundle for
|
|
8
|
+
* the caller to fold into its captcha-type + parameter selection. `block`
|
|
9
|
+
* matches are deliberately ignored here; the enforcement of block policies
|
|
10
|
+
* is deferred to submit / verify time (via `resolveTrafficFilterCheck` in
|
|
11
|
+
* PoW / image / puzzle task classes) so that blocked users still receive a
|
|
12
|
+
* captcha and produce a billable interaction. Removing this deferral
|
|
13
|
+
* previously turned every blocked request into a request-time 401, which
|
|
14
|
+
* the widget mis-handled into an INCORRECT_CAPTCHA_TYPE cascade — see
|
|
15
|
+
* `evaluateFrictionlessResult` in `@prosopo/procaptcha-frictionless`.
|
|
16
16
|
*/
|
|
17
17
|
var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
|
|
18
18
|
if (!trafficFilter) return { kind: "pass" };
|
|
19
|
-
const
|
|
20
|
-
abuser: { action: _prosopo_types.TrafficFilterAction.Block },
|
|
21
|
-
...trafficFilter
|
|
22
|
-
};
|
|
23
|
-
const result = require_checkTrafficFilter.checkTrafficFilter(ipInfo, effective);
|
|
24
|
-
if (result.isBlocked) {
|
|
25
|
-
logger?.info(() => ({
|
|
26
|
-
msg: "Traffic filter rejected challenge request",
|
|
27
|
-
data: { reason: result.reason }
|
|
28
|
-
}));
|
|
29
|
-
return {
|
|
30
|
-
kind: "block",
|
|
31
|
-
reason: result.reason
|
|
32
|
-
};
|
|
33
|
-
}
|
|
19
|
+
const result = require_checkTrafficFilter.checkTrafficFilter(ipInfo, trafficFilter);
|
|
34
20
|
const resolved = require_checkTrafficFilter.resolveChallengePolicy(result.matches);
|
|
35
21
|
if (!resolved) return { kind: "pass" };
|
|
36
22
|
logger?.info(() => ({
|
|
@@ -54,19 +40,16 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
|
|
|
54
40
|
};
|
|
55
41
|
/**
|
|
56
42
|
* Frictionless-flow companion to `applyTrafficFilterAtRequestTime`. When the
|
|
57
|
-
* verdict is `
|
|
58
|
-
* `
|
|
59
|
-
* `
|
|
60
|
-
*
|
|
61
|
-
*
|
|
43
|
+
* verdict is `challenge` and names a concrete captchaType, dispatch to the
|
|
44
|
+
* matching `send{Image,Pow,Puzzle}Captcha` helper with the resolved
|
|
45
|
+
* parameter overrides. Otherwise returns `{ handled: false }` so the
|
|
46
|
+
* caller falls through to the normal decision machine. Block matches are
|
|
47
|
+
* not represented in the verdict at all — they're enforced at submit /
|
|
48
|
+
* verify time (see the comment on `applyTrafficFilterAtRequestTime`).
|
|
62
49
|
*/
|
|
63
50
|
var handleFrictionlessTrafficFilter = async (input, res) => {
|
|
64
51
|
const { verdict } = input;
|
|
65
52
|
if (verdict.kind === "pass") return { handled: false };
|
|
66
|
-
if (verdict.kind === "block") return {
|
|
67
|
-
handled: true,
|
|
68
|
-
response: res.status(401).json({ error: "Unauthorized" })
|
|
69
|
-
};
|
|
70
53
|
const baseParams = {
|
|
71
54
|
userSitekeyIpHash: input.userSitekeyIpHash,
|
|
72
55
|
siteKey: input.dapp,
|
|
@@ -177,13 +177,13 @@ describe("Captcha type + params selection hierarchy (integration)", () => {
|
|
|
177
177
|
expect(status).toBe(200);
|
|
178
178
|
expect(body.difficulty).toBe(8);
|
|
179
179
|
});
|
|
180
|
-
it("
|
|
180
|
+
it("passes at request time when the IP matches a block category (block deferred to verify for billing)", async () => {
|
|
181
181
|
currentIpInfo = vpn();
|
|
182
182
|
const siteKey = await registerSite({
|
|
183
183
|
vpn: { action: TrafficFilterAction.Block },
|
|
184
184
|
});
|
|
185
185
|
const { status } = await getPow(siteKey);
|
|
186
|
-
expect(status).toBe(
|
|
186
|
+
expect(status).toBe(200);
|
|
187
187
|
});
|
|
188
188
|
it("falls through to site default when the request IP does not match the trafficFilter category", async () => {
|
|
189
189
|
currentIpInfo = clean();
|
|
@@ -198,7 +198,7 @@ describe("Captcha type + params selection hierarchy (integration)", () => {
|
|
|
198
198
|
expect(status).toBe(200);
|
|
199
199
|
expect(body.difficulty).toBe(3);
|
|
200
200
|
});
|
|
201
|
-
it("
|
|
201
|
+
it("does NOT apply the abuser default at request time (abuser default only fires at submit time)", async () => {
|
|
202
202
|
const abuser = {
|
|
203
203
|
...clean(),
|
|
204
204
|
isAbuser: true,
|
|
@@ -208,7 +208,7 @@ describe("Captcha type + params selection hierarchy (integration)", () => {
|
|
|
208
208
|
currentIpInfo = abuser;
|
|
209
209
|
const siteKey = await registerSite({});
|
|
210
210
|
const { status } = await getPow(siteKey);
|
|
211
|
-
expect(status).toBe(
|
|
211
|
+
expect(status).toBe(200);
|
|
212
212
|
});
|
|
213
213
|
});
|
|
214
214
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trafficFilterHierarchy.integration.test.js","sourceRoot":"","sources":["../../../src/tests/integration/trafficFilterHierarchy.integration.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"trafficFilterHierarchy.integration.test.js","sourceRoot":"","sources":["../../../src/tests/integration/trafficFilterHierarchy.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -126,5 +126,159 @@ describe("submitPoWCaptchaSolution.buildEscalation", () => {
|
|
|
126
126
|
expect(env.spies.cacheSessionEscalation).not.toHaveBeenCalled();
|
|
127
127
|
expect(env.spies.createSession).not.toHaveBeenCalled();
|
|
128
128
|
});
|
|
129
|
+
const CAPTCHA_TYPE_IDX = 5;
|
|
130
|
+
const SITE_KEY_IDX = 6;
|
|
131
|
+
const SIMD_READINGS_IDX = 19;
|
|
132
|
+
const BUNDLE_ID_IDX = 24;
|
|
133
|
+
const ORIGIN_SESSION_ID_IDX = 31;
|
|
134
|
+
it("passes captchaType=image and the origin sessionId when escalating to image", async () => {
|
|
135
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
136
|
+
sessionId: "origin-id",
|
|
137
|
+
dappAccount: "dapp",
|
|
138
|
+
});
|
|
139
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(makeOriginSession());
|
|
140
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.image } }, "challenge");
|
|
141
|
+
expect(env.spies.createSession).toHaveBeenCalledTimes(1);
|
|
142
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
143
|
+
if (!args)
|
|
144
|
+
throw new Error("expected createSession to be called");
|
|
145
|
+
expect(args[CAPTCHA_TYPE_IDX]).toBe(CaptchaType.image);
|
|
146
|
+
expect(args[ORIGIN_SESSION_ID_IDX]).toBe("origin-id");
|
|
147
|
+
expect(args[SITE_KEY_IDX]).toBe("site");
|
|
148
|
+
});
|
|
149
|
+
it("passes captchaType=puzzle and the origin sessionId when escalating to puzzle", async () => {
|
|
150
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
151
|
+
sessionId: "origin-id",
|
|
152
|
+
dappAccount: "dapp",
|
|
153
|
+
});
|
|
154
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(makeOriginSession());
|
|
155
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.puzzle } }, "challenge");
|
|
156
|
+
expect(env.spies.createSession).toHaveBeenCalledTimes(1);
|
|
157
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
158
|
+
if (!args)
|
|
159
|
+
throw new Error("expected createSession to be called");
|
|
160
|
+
expect(args[CAPTCHA_TYPE_IDX]).toBe(CaptchaType.puzzle);
|
|
161
|
+
expect(args[ORIGIN_SESSION_ID_IDX]).toBe("origin-id");
|
|
162
|
+
});
|
|
163
|
+
it("carries the origin's simdReadings onto the image escalation at creation time (so the DM verify path doesn't have to lean on chain fallback for the common case)", async () => {
|
|
164
|
+
const originSimd = {
|
|
165
|
+
supported: true,
|
|
166
|
+
schema: 1,
|
|
167
|
+
timerResolutionMs: 0.005,
|
|
168
|
+
runsPerOp: 500,
|
|
169
|
+
durationMs: 42,
|
|
170
|
+
ops: [
|
|
171
|
+
{
|
|
172
|
+
name: "f32x4_add",
|
|
173
|
+
category: "arith",
|
|
174
|
+
bestNs: 1.1,
|
|
175
|
+
medianNs: 1.2,
|
|
176
|
+
iters: 100,
|
|
177
|
+
resultLane: 0,
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
};
|
|
181
|
+
const origin = {
|
|
182
|
+
...makeOriginSession(),
|
|
183
|
+
simdReadings: originSimd,
|
|
184
|
+
};
|
|
185
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
186
|
+
sessionId: "origin-id",
|
|
187
|
+
dappAccount: "dapp",
|
|
188
|
+
});
|
|
189
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(origin);
|
|
190
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.image } }, "challenge");
|
|
191
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
192
|
+
if (!args)
|
|
193
|
+
throw new Error("expected createSession to be called");
|
|
194
|
+
expect(args[SIMD_READINGS_IDX]).toBe(originSimd);
|
|
195
|
+
});
|
|
196
|
+
it("carries the origin's simdReadings onto the puzzle escalation at creation time", async () => {
|
|
197
|
+
const originSimd = {
|
|
198
|
+
supported: true,
|
|
199
|
+
schema: 1,
|
|
200
|
+
timerResolutionMs: 0.005,
|
|
201
|
+
runsPerOp: 500,
|
|
202
|
+
durationMs: 42,
|
|
203
|
+
ops: [
|
|
204
|
+
{
|
|
205
|
+
name: "i32x4_add",
|
|
206
|
+
category: "arith",
|
|
207
|
+
bestNs: 0.9,
|
|
208
|
+
medianNs: 1.0,
|
|
209
|
+
iters: 100,
|
|
210
|
+
resultLane: 0,
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
};
|
|
214
|
+
const origin = {
|
|
215
|
+
...makeOriginSession(),
|
|
216
|
+
simdReadings: originSimd,
|
|
217
|
+
};
|
|
218
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
219
|
+
sessionId: "origin-id",
|
|
220
|
+
dappAccount: "dapp",
|
|
221
|
+
});
|
|
222
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(origin);
|
|
223
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.puzzle } }, "challenge");
|
|
224
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
225
|
+
if (!args)
|
|
226
|
+
throw new Error("expected createSession to be called");
|
|
227
|
+
expect(args[SIMD_READINGS_IDX]).toBe(originSimd);
|
|
228
|
+
});
|
|
229
|
+
it("carries the origin's bundleId onto the image escalation so the (same-origin) behavioural payload can be decrypted at solve time", async () => {
|
|
230
|
+
const origin = {
|
|
231
|
+
...makeOriginSession(),
|
|
232
|
+
bundleId: "bundle-42",
|
|
233
|
+
};
|
|
234
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
235
|
+
sessionId: "origin-id",
|
|
236
|
+
dappAccount: "dapp",
|
|
237
|
+
});
|
|
238
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(origin);
|
|
239
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.image } }, "challenge");
|
|
240
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
241
|
+
if (!args)
|
|
242
|
+
throw new Error("expected createSession to be called");
|
|
243
|
+
expect(args[BUNDLE_ID_IDX]).toBe("bundle-42");
|
|
244
|
+
});
|
|
245
|
+
it("carries the origin's bundleId onto the puzzle escalation for the same reason", async () => {
|
|
246
|
+
const origin = {
|
|
247
|
+
...makeOriginSession(),
|
|
248
|
+
bundleId: "bundle-17",
|
|
249
|
+
};
|
|
250
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
251
|
+
sessionId: "origin-id",
|
|
252
|
+
dappAccount: "dapp",
|
|
253
|
+
});
|
|
254
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(origin);
|
|
255
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.puzzle } }, "challenge");
|
|
256
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
257
|
+
if (!args)
|
|
258
|
+
throw new Error("expected createSession to be called");
|
|
259
|
+
expect(args[BUNDLE_ID_IDX]).toBe("bundle-17");
|
|
260
|
+
});
|
|
261
|
+
it("does NOT carry behavioural data (BDP) onto the escalation session — BDP lives only in the pow-solve request payload", async () => {
|
|
262
|
+
const origin = {
|
|
263
|
+
...makeOriginSession(),
|
|
264
|
+
behavioralDataPacked: {
|
|
265
|
+
c1: [{ t: 1, x: 2, y: 3 }],
|
|
266
|
+
c2: [],
|
|
267
|
+
c3: [],
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
env.spies.getPowCaptchaRecordByChallenge.mockResolvedValue({
|
|
271
|
+
sessionId: "origin-id",
|
|
272
|
+
dappAccount: "dapp",
|
|
273
|
+
});
|
|
274
|
+
env.spies.getSessionRecordBySessionId.mockResolvedValue(origin);
|
|
275
|
+
await buildEscalation(env.tasks, { verified: true, routingOutput: { captchaType: CaptchaType.image } }, "challenge");
|
|
276
|
+
const args = env.spies.createSession.mock.calls[0];
|
|
277
|
+
if (!args)
|
|
278
|
+
throw new Error("expected createSession to be called");
|
|
279
|
+
expect(args.some((a) => a ===
|
|
280
|
+
origin
|
|
281
|
+
.behavioralDataPacked)).toBe(false);
|
|
282
|
+
});
|
|
129
283
|
});
|
|
130
284
|
//# sourceMappingURL=submitPoWCaptchaSolution.escalation.unit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submitPoWCaptchaSolution.escalation.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"submitPoWCaptchaSolution.escalation.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/captcha/submitPoWCaptchaSolution.escalation.unit.test.ts"],"names":[],"mappings":"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"}
|