@prosopo/provider 5.6.1 → 5.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +10 -10
  2. package/.turbo/turbo-build$colon$tsc.log +25 -25
  3. package/.turbo/turbo-build.log +11 -11
  4. package/CHANGELOG.md +27 -0
  5. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
  6. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +7 -3
  7. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
  8. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  9. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +4 -4
  10. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  11. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  12. package/dist/api/captcha/submitPoWCaptchaSolution.js +4 -2
  13. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  14. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +7 -3
  15. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +4 -4
  16. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +4 -2
  17. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +10 -3
  18. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +3 -1
  19. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +3 -1
  20. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +3 -1
  21. package/dist/cjs/utils/devicePlatform.cjs +34 -0
  22. package/dist/tasks/captchaManager.d.ts +2 -2
  23. package/dist/tasks/captchaManager.d.ts.map +1 -1
  24. package/dist/tasks/captchaManager.js.map +1 -1
  25. package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
  26. package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
  27. package/dist/tasks/frictionless/frictionlessTasks.d.ts +1 -1
  28. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  29. package/dist/tasks/frictionless/frictionlessTasks.js +10 -3
  30. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  31. package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
  32. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +3 -1
  33. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
  34. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  35. package/dist/tasks/powCaptcha/powTasks.js +3 -1
  36. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  37. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  38. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +3 -1
  39. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  40. package/dist/tests/integration/routingDecisionMachines.integration.test.js +280 -3
  41. package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
  42. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.d.ts +2 -0
  43. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.d.ts.map +1 -0
  44. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js +119 -0
  45. package/dist/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.js.map +1 -0
  46. package/dist/tests/unit/utils/devicePlatform.unit.test.js +61 -1
  47. package/dist/tests/unit/utils/devicePlatform.unit.test.js.map +1 -1
  48. package/dist/utils/devicePlatform.d.ts +2 -1
  49. package/dist/utils/devicePlatform.d.ts.map +1 -1
  50. package/dist/utils/devicePlatform.js +34 -1
  51. package/dist/utils/devicePlatform.js.map +1 -1
  52. package/package.json +13 -13
@@ -113,7 +113,7 @@ describe("Routing Decision Machines (live local Mongo + Redis)", () => {
113
113
  },
114
114
  body: JSON.stringify({}),
115
115
  });
116
- const sendCaptchaViaRouter = async (baselineType) => {
116
+ const sendCaptchaViaRouter = async (baselineType, extraRaw = {}, userAgent = SAMPLE_USER_AGENT) => {
117
117
  tasks.frictionlessManager.setSessionParams({
118
118
  token: `tok-${Date.now()}`,
119
119
  score: 0.4,
@@ -145,8 +145,13 @@ describe("Routing Decision Machines (live local Mongo + Redis)", () => {
145
145
  ip: "1.2.3.4",
146
146
  countryCode: "GB",
147
147
  score: 0.4,
148
- platform: { isApple: false, isWebView: false, isMobile: false },
149
- raw: { headers: {}, userAgent: SAMPLE_USER_AGENT },
148
+ imageMaxRounds: 5,
149
+ platform: { isApple: true, isWebView: false, isMobile: false },
150
+ raw: {
151
+ headers: {},
152
+ userAgent,
153
+ ...extraRaw,
154
+ },
150
155
  });
151
156
  switch (baselineType) {
152
157
  case CaptchaType.image:
@@ -271,5 +276,277 @@ describe("Routing Decision Machines (live local Mongo + Redis)", () => {
271
276
  expect(v).toBeGreaterThanOrEqual(1);
272
277
  }
273
278
  });
279
+ const latestSession = async (sessionId) => {
280
+ expect(sessionId).toBeDefined();
281
+ return env.getDb().getSessionRecordBySessionId(sessionId);
282
+ };
283
+ it("persists router-supplied puzzleTolerance and puzzle settings on the session", async () => {
284
+ await removeAll();
285
+ const source = `module.exports.route = function() {
286
+ return {
287
+ captchaType: 'puzzle',
288
+ puzzleTolerance: 7,
289
+ puzzle: { decoyCount: 14, pieceScale: { min: 0.2, max: 0.35 } }
290
+ };
291
+ };`;
292
+ expect((await putMachine(source, "puzzle-overrides")).status).toBe(200);
293
+ const response = await sendCaptchaViaRouter(CaptchaType.pow);
294
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.puzzle);
295
+ const session = await latestSession(response[ApiParams.sessionId]);
296
+ expect(session?.puzzleTolerance).toBe(7);
297
+ expect(session?.puzzle).toEqual({
298
+ decoyCount: 14,
299
+ pieceScale: { min: 0.2, max: 0.35 },
300
+ });
301
+ });
302
+ it("accepts a partial puzzle override without filling in the rest", async () => {
303
+ await removeAll();
304
+ const source = `module.exports.route = function() {
305
+ return { captchaType: 'puzzle', puzzle: { decoyCount: 30 } };
306
+ };`;
307
+ expect((await putMachine(source, "puzzle-partial")).status).toBe(200);
308
+ const response = await sendCaptchaViaRouter(CaptchaType.pow);
309
+ const session = await latestSession(response[ApiParams.sessionId]);
310
+ expect(session?.puzzle).toEqual({ decoyCount: 30 });
311
+ expect(session?.puzzleTolerance).toBeUndefined();
312
+ });
313
+ it("does not persist puzzle overrides on a non-puzzle session", async () => {
314
+ await removeAll();
315
+ const source = `module.exports.route = function() {
316
+ return {
317
+ captchaType: 'image',
318
+ solvedImagesCount: 2,
319
+ puzzleTolerance: 7,
320
+ puzzle: { decoyCount: 14 }
321
+ };
322
+ };`;
323
+ expect((await putMachine(source, "puzzle-on-image")).status).toBe(200);
324
+ const response = await sendCaptchaViaRouter(CaptchaType.pow);
325
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.image);
326
+ const session = await latestSession(response[ApiParams.sessionId]);
327
+ expect(session?.puzzleTolerance).toBeUndefined();
328
+ expect(session?.puzzle).toBeUndefined();
329
+ });
330
+ it("rejects an out-of-bounds puzzleTolerance and falls back to baseline", async () => {
331
+ await removeAll();
332
+ const source = `module.exports.route = function() {
333
+ return { captchaType: 'puzzle', puzzleTolerance: 100000 };
334
+ };`;
335
+ expect((await putMachine(source, "puzzle-bad-tolerance")).status).toBe(200);
336
+ const response = await sendCaptchaViaRouter(CaptchaType.pow);
337
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
338
+ });
339
+ it("rejects an out-of-bounds decoyCount and falls back to baseline", async () => {
340
+ await removeAll();
341
+ const source = `module.exports.route = function() {
342
+ return { captchaType: 'puzzle', puzzle: { decoyCount: 9999 } };
343
+ };`;
344
+ expect((await putMachine(source, "puzzle-bad-decoy")).status).toBe(200);
345
+ const response = await sendCaptchaViaRouter(CaptchaType.pow);
346
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
347
+ });
348
+ const IPHONE_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1";
349
+ const CLEAN_IPINFO = {
350
+ ip: "1.2.3.4",
351
+ isValid: true,
352
+ isVPN: false,
353
+ isTor: false,
354
+ isProxy: false,
355
+ isDatacenter: false,
356
+ isAbuser: false,
357
+ isMobile: false,
358
+ isSatellite: false,
359
+ isCrawler: false,
360
+ countryCode: "GB",
361
+ };
362
+ const SENTINEL_MATCH_STACK = { tcpOptsOrder: 111111, tcpWscale: 99 };
363
+ const SENTINEL_MISS_STACK = { tcpOptsOrder: 222222, tcpWscale: 98 };
364
+ const POLICY_INHERITING_MACHINE = `
365
+ module.exports.route = function(input) {
366
+ var raw = input.raw || {};
367
+ var ip = raw.ipInfo || {};
368
+ if (!ip.isValid) return undefined;
369
+ if (ip.isVPN || ip.isProxy || ip.isDatacenter) return undefined;
370
+ if (raw.tcpOptsOrder !== ${SENTINEL_MATCH_STACK.tcpOptsOrder}) return undefined;
371
+ if (raw.tcpWscale !== ${SENTINEL_MATCH_STACK.tcpWscale}) return undefined;
372
+ var p = raw.trafficPolicies || {};
373
+ var candidates = [p.vpn, p.datacenter].filter(Boolean);
374
+ var blocking = candidates.filter(function (c) { return c.action === 'block'; });
375
+ if (blocking.length) return undefined;
376
+ var challenge = candidates.filter(function (c) { return c.action === 'challenge'; })[0];
377
+ if (!challenge || !challenge.captchaType) return undefined;
378
+ var out = { captchaType: challenge.captchaType, reason: 'TEST_POLICY_INHERITED' };
379
+ if (challenge.puzzleTolerance !== undefined) out.puzzleTolerance = challenge.puzzleTolerance;
380
+ if (challenge.puzzle) out.puzzle = challenge.puzzle;
381
+ if (challenge.solvedImagesCount !== undefined) out.solvedImagesCount = challenge.solvedImagesCount;
382
+ return out;
383
+ };
384
+ `;
385
+ it("forwards trafficPolicies to the machine and inherits the challenge policy end to end", async () => {
386
+ await removeAll();
387
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-middlebox"))
388
+ .status).toBe(200);
389
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
390
+ ...SENTINEL_MATCH_STACK,
391
+ ipInfo: CLEAN_IPINFO,
392
+ trafficPolicies: {
393
+ vpn: {
394
+ action: "challenge",
395
+ captchaType: "puzzle",
396
+ puzzleTolerance: 6,
397
+ puzzle: { decoyCount: 20 },
398
+ },
399
+ },
400
+ }, IPHONE_UA);
401
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.puzzle);
402
+ const session = await latestSession(response[ApiParams.sessionId]);
403
+ expect(session?.reason).toBe("TEST_POLICY_INHERITED");
404
+ expect(session?.puzzleTolerance).toBe(6);
405
+ expect(session?.puzzle).toEqual({ decoyCount: 20 });
406
+ });
407
+ it("leaves the baseline alone when the site configured no VPN or datacenter policy", async () => {
408
+ await removeAll();
409
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-no-policy"))
410
+ .status).toBe(200);
411
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, { ...SENTINEL_MATCH_STACK, ipInfo: CLEAN_IPINFO }, IPHONE_UA);
412
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
413
+ });
414
+ it("leaves the baseline alone when the TCP signal does not match", async () => {
415
+ await removeAll();
416
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-native")).status).toBe(200);
417
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
418
+ ...SENTINEL_MISS_STACK,
419
+ ipInfo: CLEAN_IPINFO,
420
+ trafficPolicies: {
421
+ vpn: { action: "challenge", captchaType: "puzzle" },
422
+ },
423
+ }, IPHONE_UA);
424
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
425
+ });
426
+ it("defers to the verify-time deny rule when the policy is block", async () => {
427
+ await removeAll();
428
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-block")).status).toBe(200);
429
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
430
+ ...SENTINEL_MATCH_STACK,
431
+ ipInfo: CLEAN_IPINFO,
432
+ trafficPolicies: { vpn: { action: "block" } },
433
+ }, IPHONE_UA);
434
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
435
+ });
436
+ it("inherits the datacenter policy when only datacenter is configured", async () => {
437
+ await removeAll();
438
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-dc")).status).toBe(200);
439
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
440
+ ...SENTINEL_MATCH_STACK,
441
+ ipInfo: CLEAN_IPINFO,
442
+ trafficPolicies: {
443
+ datacenter: {
444
+ action: "challenge",
445
+ captchaType: "image",
446
+ solvedImagesCount: 3,
447
+ },
448
+ },
449
+ }, IPHONE_UA);
450
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.image);
451
+ const session = await latestSession(response[ApiParams.sessionId]);
452
+ expect(session?.solvedImagesCount).toBe(3);
453
+ });
454
+ it("ignores a proxy-only policy for the middlebox signature", async () => {
455
+ await removeAll();
456
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-proxy-only"))
457
+ .status).toBe(200);
458
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
459
+ ...SENTINEL_MATCH_STACK,
460
+ ipInfo: CLEAN_IPINFO,
461
+ trafficPolicies: {
462
+ proxy: { action: "challenge", captchaType: "puzzle" },
463
+ },
464
+ }, IPHONE_UA);
465
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
466
+ });
467
+ it("does not fire when the intel feed already tagged the IP", async () => {
468
+ await removeAll();
469
+ expect((await putMachine(POLICY_INHERITING_MACHINE, "undeclared-tagged")).status).toBe(200);
470
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, {
471
+ ...SENTINEL_MATCH_STACK,
472
+ ipInfo: { ...CLEAN_IPINFO, isVPN: true },
473
+ trafficPolicies: {
474
+ vpn: { action: "challenge", captchaType: "puzzle" },
475
+ },
476
+ }, IPHONE_UA);
477
+ expect(response[ApiParams.captchaType]).toBe(CaptchaType.pow);
478
+ });
479
+ it("round-trips every field a caller reads off a session record", async () => {
480
+ await removeAll();
481
+ const source = `module.exports.route = function() {
482
+ return { captchaType: 'puzzle', puzzleTolerance: 9, puzzle: { decoyCount: 11 } };
483
+ };`;
484
+ expect((await putMachine(source, "projection-roundtrip")).status).toBe(200);
485
+ const response = await sendCaptchaViaRouter(CaptchaType.pow, { ...SENTINEL_MATCH_STACK, tcpMss: 1460, ipInfo: CLEAN_IPINFO }, IPHONE_UA);
486
+ const sessionId = response[ApiParams.sessionId];
487
+ await env.getDb().updateSessionRecord(sessionId, {
488
+ ...SENTINEL_MATCH_STACK,
489
+ tcpMss: 1460,
490
+ });
491
+ const session = await latestSession(sessionId);
492
+ expect(session).toBeDefined();
493
+ expect(session?.puzzleTolerance).toBe(9);
494
+ expect(session?.puzzle).toEqual({ decoyCount: 11 });
495
+ expect(session?.tcpOptsOrder).toBe(111111);
496
+ expect(session?.tcpWscale).toBe(99);
497
+ expect(session?.tcpMss).toBe(1460);
498
+ expect(session?.sessionId).toBe(response[ApiParams.sessionId]);
499
+ expect(session?.siteKey).toBe(dappAccount);
500
+ expect(session?.score).toBe(0.4);
501
+ expect(session?.ipInfo?.isValid).toBe(true);
502
+ });
503
+ it("projects the entropy fingerprints and capability flags", async () => {
504
+ await removeAll();
505
+ tasks.frictionlessManager.setSessionParams({
506
+ token: `tok-entropy-${Date.now()}`,
507
+ score: 0.4,
508
+ threshold: 0.5,
509
+ scoreComponents: { baseScore: 0.4 },
510
+ ipAddress: { lower: 16909060n, type: IpAddressType.v4 },
511
+ webView: false,
512
+ iFrame: false,
513
+ decryptedHeadHash: "",
514
+ siteKey: dappAccount,
515
+ headers: {},
516
+ entropyMathRandomFingerprint: "mathfp",
517
+ entropyCryptoFingerprint: "cryptofp",
518
+ entropyWallClockOffsetMs: 42,
519
+ entropyMathRandomFirst: 0.5,
520
+ g: "gval",
521
+ i: true,
522
+ sw: true,
523
+ md: true,
524
+ bn: true,
525
+ fs: true,
526
+ isProtect: true,
527
+ });
528
+ const response = await tasks.frictionlessManager.sendPowCaptcha({
529
+ powDifficulty: 7,
530
+ });
531
+ await env
532
+ .getDb()
533
+ .updateSessionRecord(response[ApiParams.sessionId], {
534
+ ruleType: ["some-rule"],
535
+ });
536
+ const session = await latestSession(response[ApiParams.sessionId]);
537
+ expect(session?.entropyMathRandomFingerprint).toBe("mathfp");
538
+ expect(session?.entropyCryptoFingerprint).toBe("cryptofp");
539
+ expect(session?.entropyWallClockOffsetMs).toBe(42);
540
+ expect(session?.entropyMathRandomFirst).toBe(0.5);
541
+ expect(session?.g).toBe("gval");
542
+ expect(session?.i).toBe(true);
543
+ expect(session?.sw).toBe(true);
544
+ expect(session?.md).toBe(true);
545
+ expect(session?.bn).toBe(true);
546
+ expect(session?.fs).toBe(true);
547
+ expect(session?.isProtect).toBe(true);
548
+ expect(session?.ruleType).toEqual(["some-rule"]);
549
+ expect(session?.powDifficulty).toBe(7);
550
+ });
274
551
  });
275
552
  //# sourceMappingURL=routingDecisionMachines.integration.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routingDecisionMachines.integration.test.js","sourceRoot":"","sources":["../../../src/tests/integration/routingDecisionMachines.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routingDecisionMachines.integration.test.js","sourceRoot":"","sources":["../../../src/tests/integration/routingDecisionMachines.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=routerPuzzleOverrides.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerPuzzleOverrides.unit.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ import { CaptchaType, FrictionlessPenalties, } from "@prosopo/types";
2
+ import { beforeEach, describe, expect, it, vi } from "vitest";
3
+ const { applyRouterMock } = vi.hoisted(() => ({
4
+ applyRouterMock: vi.fn(),
5
+ }));
6
+ vi.mock("../../../../tasks/frictionless/routingMachine.js", () => ({
7
+ applyRouter: applyRouterMock,
8
+ }));
9
+ import { getCompositeIpAddress } from "../../../../compositeIpAddress.js";
10
+ import { FrictionlessManager } from "../../../../tasks/frictionless/frictionlessTasks.js";
11
+ const SITE_KEY = "5EjTA28bKSbFPPyMbUjNtArxyqjwq38r1BapVmLZShaqEedV";
12
+ describe("router-supplied puzzle overrides reach the session record", () => {
13
+ let db;
14
+ let storeSessionRecord;
15
+ let manager;
16
+ const context = {
17
+ dappAccount: SITE_KEY,
18
+ userAccount: "user",
19
+ ip: "1.2.3.4",
20
+ score: 0.9,
21
+ platform: { isMobile: false, isApple: true, isWebView: false },
22
+ raw: { headers: {}, userAgent: "ua" },
23
+ imageMaxRounds: 8,
24
+ };
25
+ const storedSession = () => {
26
+ const call = storeSessionRecord.mock.calls[0];
27
+ if (!call)
28
+ throw new Error("no session was stored");
29
+ return call[0];
30
+ };
31
+ const routerReturns = (output) => {
32
+ applyRouterMock.mockResolvedValue(output);
33
+ };
34
+ beforeEach(() => {
35
+ vi.clearAllMocks();
36
+ storeSessionRecord = vi.fn();
37
+ db = { storeSessionRecord };
38
+ const pair = {
39
+ sign: vi.fn(),
40
+ address: "testAddress",
41
+ };
42
+ const config = {
43
+ penalties: FrictionlessPenalties.parse({}),
44
+ captchas: { solved: { count: 2 }, unsolved: { count: 0 } },
45
+ lRules: { en: 1 },
46
+ };
47
+ manager = new FrictionlessManager(db, pair, config);
48
+ manager.setSessionParams({
49
+ token: "tok",
50
+ score: 0.9,
51
+ threshold: 0.5,
52
+ scoreComponents: { baseScore: 0.9 },
53
+ ipAddress: getCompositeIpAddress("1.2.3.4"),
54
+ siteKey: SITE_KEY,
55
+ webView: false,
56
+ iFrame: false,
57
+ decryptedHeadHash: "",
58
+ });
59
+ manager.setRoutingContext(context);
60
+ });
61
+ it("persists puzzleTolerance and puzzle settings on a puzzle session", async () => {
62
+ routerReturns({
63
+ captchaType: CaptchaType.puzzle,
64
+ puzzleTolerance: 5,
65
+ puzzle: { decoyCount: 12, pieceScale: { min: 0.2, max: 0.4 } },
66
+ });
67
+ await manager.sendPuzzleCaptcha();
68
+ expect(storedSession().puzzleTolerance).toBe(5);
69
+ expect(storedSession().puzzle).toEqual({
70
+ decoyCount: 12,
71
+ pieceScale: { min: 0.2, max: 0.4 },
72
+ });
73
+ });
74
+ it("persists a partial override without inventing the other fields", async () => {
75
+ routerReturns({
76
+ captchaType: CaptchaType.puzzle,
77
+ puzzle: { decoyCount: 30 },
78
+ });
79
+ await manager.sendPuzzleCaptcha();
80
+ expect(storedSession().puzzle).toEqual({ decoyCount: 30 });
81
+ expect(storedSession().puzzleTolerance).toBeUndefined();
82
+ });
83
+ it("persists tolerance alone when no render settings were named", async () => {
84
+ routerReturns({ captchaType: CaptchaType.puzzle, puzzleTolerance: 8 });
85
+ await manager.sendPuzzleCaptcha();
86
+ expect(storedSession().puzzleTolerance).toBe(8);
87
+ expect(storedSession().puzzle).toBeUndefined();
88
+ });
89
+ it("leaves both undefined when the router named neither", async () => {
90
+ routerReturns({ captchaType: CaptchaType.puzzle });
91
+ await manager.sendPuzzleCaptcha();
92
+ expect(storedSession().puzzleTolerance).toBeUndefined();
93
+ expect(storedSession().puzzle).toBeUndefined();
94
+ });
95
+ it("drops the overrides when the router chose an image", async () => {
96
+ routerReturns({
97
+ captchaType: CaptchaType.image,
98
+ solvedImagesCount: 2,
99
+ puzzleTolerance: 5,
100
+ puzzle: { decoyCount: 12 },
101
+ });
102
+ await manager.sendPuzzleCaptcha();
103
+ expect(storedSession().captchaType).toBe(CaptchaType.image);
104
+ expect(storedSession().puzzleTolerance).toBeUndefined();
105
+ expect(storedSession().puzzle).toBeUndefined();
106
+ });
107
+ it("drops the overrides when the router chose pow", async () => {
108
+ routerReturns({
109
+ captchaType: CaptchaType.pow,
110
+ puzzleTolerance: 5,
111
+ puzzle: { decoyCount: 12 },
112
+ });
113
+ await manager.sendPuzzleCaptcha();
114
+ expect(storedSession().captchaType).toBe(CaptchaType.pow);
115
+ expect(storedSession().puzzleTolerance).toBeUndefined();
116
+ expect(storedSession().puzzle).toBeUndefined();
117
+ });
118
+ });
119
+ //# sourceMappingURL=routerPuzzleOverrides.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerPuzzleOverrides.unit.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/tasks/frictionless/routerPuzzleOverrides.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import { CaptchaType, TrafficFilterAction, } from "@prosopo/types";
1
2
  import { describe, expect, it } from "vitest";
2
- import { derivePlatform } from "../../../utils/devicePlatform.js";
3
+ import { derivePlatform, deriveTrafficPolicies, } from "../../../utils/devicePlatform.js";
3
4
  const IPHONE_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
4
5
  const IPAD_UA = "Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1";
5
6
  const MAC_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15";
@@ -55,4 +56,63 @@ describe("derivePlatform", () => {
55
56
  });
56
57
  });
57
58
  });
59
+ describe("deriveTrafficPolicies", () => {
60
+ const block = { action: TrafficFilterAction.Block };
61
+ const challenge = { action: TrafficFilterAction.Challenge };
62
+ it("returns undefined when there is no trafficFilter", () => {
63
+ expect(deriveTrafficPolicies(undefined)).toBeUndefined();
64
+ });
65
+ it("returns undefined when no category is configured", () => {
66
+ const tf = {
67
+ abuserScoreThreshold: 0.9,
68
+ skipExtrasOnValidDnsPath: true,
69
+ datacenterNameAllowlist: ["Cloudflare"],
70
+ };
71
+ expect(deriveTrafficPolicies(tf)).toBeUndefined();
72
+ });
73
+ it("carries challenge policies through, not just blocks", () => {
74
+ const tf = { vpn: challenge, datacenter: block };
75
+ expect(deriveTrafficPolicies(tf)).toEqual({
76
+ vpn: challenge,
77
+ datacenter: block,
78
+ });
79
+ });
80
+ it("preserves the challenge policy's captcha overrides", () => {
81
+ const vpn = {
82
+ action: TrafficFilterAction.Challenge,
83
+ captchaType: CaptchaType.image,
84
+ solvedImagesCount: 4,
85
+ };
86
+ const tf = { vpn };
87
+ expect(deriveTrafficPolicies(tf)?.vpn).toEqual(vpn);
88
+ });
89
+ it("omits a category that is absent from the filter", () => {
90
+ const tf = { datacenter: block };
91
+ const policies = deriveTrafficPolicies(tf);
92
+ expect(policies).toEqual({ datacenter: block });
93
+ expect(policies?.vpn).toBeUndefined();
94
+ });
95
+ it("covers every policy-carrying category", () => {
96
+ const tf = {
97
+ vpn: block,
98
+ proxy: block,
99
+ tor: block,
100
+ datacenter: block,
101
+ abuser: block,
102
+ mobile: block,
103
+ satellite: block,
104
+ crawler: block,
105
+ };
106
+ expect(Object.keys(deriveTrafficPolicies(tf) ?? {}).sort()).toEqual([
107
+ "abuser",
108
+ "crawler",
109
+ "datacenter",
110
+ "mobile",
111
+ "proxy",
112
+ "satellite",
113
+ "tor",
114
+ "vpn",
115
+ ]);
116
+ });
117
+ });
58
118
  //# sourceMappingURL=devicePlatform.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devicePlatform.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/utils/devicePlatform.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devicePlatform.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/utils/devicePlatform.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { RoutingMachinePlatform } from "@prosopo/types";
1
+ import type { ITrafficFilter, RoutingMachinePlatform, TrafficCategoryPolicies } from "@prosopo/types";
2
2
  export declare const derivePlatform: (userAgent: string, webView: boolean, ipInfo?: {
3
3
  isMobile?: boolean;
4
4
  }) => RoutingMachinePlatform;
5
+ export declare const deriveTrafficPolicies: (trafficFilter: Partial<ITrafficFilter> | undefined) => TrafficCategoryPolicies | undefined;
5
6
  //# sourceMappingURL=devicePlatform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devicePlatform.d.ts","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAW7D,eAAO,MAAM,cAAc,cACf,MAAM,WACR,OAAO,WACP;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7B,sBAOD,CAAC"}
1
+ {"version":3,"file":"devicePlatform.d.ts","sourceRoot":"","sources":["../../src/utils/devicePlatform.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,gBAAgB,CAAC;AAcxB,eAAO,MAAM,cAAc,cACf,MAAM,WACR,OAAO,WACP;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7B,sBAOD,CAAC;AA0BH,eAAO,MAAM,qBAAqB,kBAClB,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,KAChD,uBAAuB,GAAG,SAY5B,CAAC"}
@@ -12,5 +12,38 @@ var derivePlatform = (userAgent, webView, ipInfo) => ({
12
12
  isWebView: webView,
13
13
  isMobile: typeof ipInfo?.isMobile === "boolean" ? ipInfo.isMobile : MOBILE_UA_REGEX.test(userAgent)
14
14
  });
15
+ var TRAFFIC_FILTER_CATEGORIES = [
16
+ "vpn",
17
+ "proxy",
18
+ "tor",
19
+ "datacenter",
20
+ "abuser",
21
+ "mobile",
22
+ "satellite",
23
+ "crawler"
24
+ ];
25
+ /**
26
+ * Project a site's `trafficFilter` down to just its per-category policies, for
27
+ * consumption by routing / decision machines. Machines use these both to tell
28
+ * whether the operator rejects an egress class at all, and to inherit the
29
+ * operator's configured action when they classify one themselves — see
30
+ * `TrafficCategoryPolicies`.
31
+ *
32
+ * Returns `undefined` when no category is configured, so the field can be
33
+ * omitted from the machine input entirely.
34
+ */
35
+ var deriveTrafficPolicies = (trafficFilter) => {
36
+ if (!trafficFilter) return void 0;
37
+ const policies = {};
38
+ let any = false;
39
+ for (const category of TRAFFIC_FILTER_CATEGORIES) {
40
+ const policy = trafficFilter[category];
41
+ if (policy) {
42
+ policies[category] = policy;
43
+ any = true;
44
+ }
45
+ }
46
+ return any ? policies : void 0;
47
+ };
15
48
  //#endregion
16
- export { derivePlatform };
49
+ export { derivePlatform, deriveTrafficPolicies };