@prosopo/provider 5.2.1 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +16 -12
  2. package/.turbo/turbo-build$colon$tsc.log +27 -24
  3. package/.turbo/turbo-build.log +17 -13
  4. package/CHANGELOG.md +48 -0
  5. package/dist/api/captcha/getPuzzleCaptchaChallenge.d.ts.map +1 -1
  6. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +11 -4
  7. package/dist/api/captcha/getPuzzleCaptchaChallenge.js.map +1 -1
  8. package/dist/api/captcha/maintenanceModeResponses.d.ts +1 -1
  9. package/dist/api/captcha/maintenanceModeResponses.d.ts.map +1 -1
  10. package/dist/api/captcha/maintenanceModeResponses.js +11 -6
  11. package/dist/api/captcha/maintenanceModeResponses.js.map +1 -1
  12. package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
  13. package/dist/api/captcha/submitPoWCaptchaSolution.js +4 -2
  14. package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
  15. package/dist/api/captcha/trafficFilterRequestTime.d.ts +2 -1
  16. package/dist/api/captcha/trafficFilterRequestTime.d.ts.map +1 -1
  17. package/dist/api/captcha/trafficFilterRequestTime.js +1 -0
  18. package/dist/api/captcha/trafficFilterRequestTime.js.map +1 -1
  19. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +11 -4
  20. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +11 -6
  21. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +4 -2
  22. package/dist/cjs/api/captcha/trafficFilterRequestTime.cjs +1 -0
  23. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +17 -11
  24. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +2 -1
  25. package/dist/cjs/tasks/puzzle/backgroundBuffer.cjs +39 -0
  26. package/dist/cjs/tasks/puzzle/puzzleRenderer.cjs +78 -0
  27. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +62 -31
  28. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -1
  29. package/dist/tasks/dnsEvent/enrichDnsEvent.js +17 -11
  30. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -1
  31. package/dist/tasks/frictionless/frictionlessTasks.d.ts.map +1 -1
  32. package/dist/tasks/frictionless/frictionlessTasks.js +2 -1
  33. package/dist/tasks/frictionless/frictionlessTasks.js.map +1 -1
  34. package/dist/tasks/puzzle/backgroundBuffer.d.ts +21 -0
  35. package/dist/tasks/puzzle/backgroundBuffer.d.ts.map +1 -0
  36. package/dist/tasks/puzzle/backgroundBuffer.js +37 -0
  37. package/dist/tasks/puzzle/backgroundBuffer.js.map +1 -0
  38. package/dist/tasks/puzzle/puzzleRenderer.d.ts +13 -0
  39. package/dist/tasks/puzzle/puzzleRenderer.d.ts.map +1 -0
  40. package/dist/tasks/puzzle/puzzleRenderer.js +75 -0
  41. package/dist/tasks/puzzle/puzzleRenderer.js.map +1 -0
  42. package/dist/tasks/spam/checkTrafficFilter.d.ts +3 -1
  43. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  44. package/dist/tasks/spam/checkTrafficFilter.js +62 -32
  45. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  46. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js +8 -7
  47. package/dist/tests/unit/api/captcha/maintenanceModeResponses.unit.test.js.map +1 -1
  48. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +1 -1
  49. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  50. package/dist/tests/unit/api/captcha/trafficFilterRequestTime.unit.test.js +2 -1
  51. package/dist/tests/unit/api/captcha/trafficFilterRequestTime.unit.test.js.map +1 -1
  52. package/dist/tests/unit/tasks/dnsEvent/enrichDnsEvent.unit.test.js.map +1 -1
  53. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.d.ts +2 -0
  54. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.d.ts.map +1 -0
  55. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js +84 -0
  56. package/dist/tests/unit/tasks/puzzle/backgroundBuffer.unit.test.js.map +1 -0
  57. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +66 -4
  58. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  59. package/package.json +14 -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,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
+ {"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,eAAe,EACpB,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;IAKzB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,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,yBAiCF,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"}
@@ -34,6 +34,7 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
34
34
  powDifficulty: resolved.powDifficulty,
35
35
  solvedImagesCount: resolved.solvedImagesCount,
36
36
  puzzleTolerance: resolved.puzzleTolerance,
37
+ puzzleSettings: resolved.puzzleSettings,
37
38
  sourceCategories: resolved.sourceCategories
38
39
  };
39
40
  };
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"trafficFilterRequestTime.js","sourceRoot":"","sources":["../../../src/api/captcha/trafficFilterRequestTime.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ const require_validateAddress = require("../validateAddress.cjs");
2
2
  const require_compositeIpAddress = require("../../compositeIpAddress.cjs");
3
3
  const require_metrics = require("../metrics.cjs");
4
4
  const require_blacklistRequestInspector = require("../blacklistRequestInspector.cjs");
5
+ const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
5
6
  const require_tasks = require("../../tasks/tasks.cjs");
6
7
  const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
7
8
  const require_normalizeRequestIp = require("../../utils/normalizeRequestIp.cjs");
@@ -37,7 +38,7 @@ var getPuzzleCaptchaChallenge_default = (env, userAccessRulesStorage) => async (
37
38
  sessionId
38
39
  }
39
40
  }));
40
- return res.json(require_maintenanceModeResponses.buildPuzzleMaintenanceResponse(user, dapp));
41
+ return res.json(await require_maintenanceModeResponses.buildPuzzleMaintenanceResponse(user, dapp));
41
42
  }
42
43
  const tasks = new require_tasks.Tasks(env, req.logger);
43
44
  try {
@@ -80,6 +81,8 @@ var getPuzzleCaptchaChallenge_default = (env, userAccessRulesStorage) => async (
80
81
  }));
81
82
  const trafficVerdict = require_trafficFilterRequestTime.applyTrafficFilterAtRequestTime(req.ipInfo, clientSettings.settings?.trafficFilter, req.logger);
82
83
  const tolerance = (trafficVerdict.kind === "challenge" ? trafficVerdict.puzzleTolerance : void 0) ?? clientSettings?.settings?.puzzleTolerance;
84
+ const trafficPuzzleSettings = trafficVerdict.kind === "challenge" ? trafficVerdict.puzzleSettings : void 0;
85
+ const effectivePuzzleSettings = require_puzzleRenderer.resolvePuzzleRenderSettings(clientSettings?.settings?.puzzle, trafficPuzzleSettings);
83
86
  const challenge = await tasks.puzzleCaptchaManager.getPuzzleCaptchaChallenge(user, dapp, origin, tolerance);
84
87
  if (validSessionId && simdReadings) await tasks.frictionlessManager.decryptAndAttachSimdReadingsIfAbsent(validSessionId, simdReadings, _prosopo_types.SimdReadingsStage.challenge).catch((updateErr) => {
85
88
  req.logger.warn(() => ({
@@ -92,14 +95,18 @@ var getPuzzleCaptchaChallenge_default = (env, userAccessRulesStorage) => async (
92
95
  userAccount: user,
93
96
  dappAccount: dapp
94
97
  }, challenge.targetX, challenge.targetY, challenge.originX, challenge.originY, challenge.tolerance, challenge.providerSignature, require_compositeIpAddress.getCompositeIpAddress(normalizedIp), (0, _prosopo_util.flatten)(req.headers), req.ja4, validSessionId, req.ipInfo);
98
+ const images = await require_puzzleRenderer.renderPuzzleImages({
99
+ targetX: challenge.targetX,
100
+ targetY: challenge.targetY
101
+ }, effectivePuzzleSettings);
95
102
  const getPuzzleCaptchaResponse = {
96
103
  [_prosopo_types.ApiParams.status]: "ok",
97
104
  [_prosopo_types.ApiParams.challenge]: challenge.challenge,
98
- [_prosopo_types.ApiParams.targetX]: challenge.targetX,
99
- [_prosopo_types.ApiParams.targetY]: challenge.targetY,
105
+ [_prosopo_types.ApiParams.background]: images.background,
106
+ [_prosopo_types.ApiParams.piece]: images.piece,
107
+ [_prosopo_types.ApiParams.pieceSize]: images.pieceSize,
100
108
  [_prosopo_types.ApiParams.originX]: challenge.originX,
101
109
  [_prosopo_types.ApiParams.originY]: challenge.originY,
102
- [_prosopo_types.ApiParams.tolerance]: challenge.tolerance,
103
110
  [_prosopo_types.ApiParams.timestamp]: challenge.requestedAtTimestamp.toString(),
104
111
  [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: challenge.providerSignature } }
105
112
  };
@@ -1,3 +1,4 @@
1
+ const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
1
2
  let _prosopo_types = require("@prosopo/types");
2
3
  let node_crypto = require("node:crypto");
3
4
  //#region src/api/captcha/maintenanceModeResponses.ts
@@ -30,16 +31,20 @@ var buildImageMaintenanceResponse = () => ({
30
31
  [_prosopo_types.ApiParams.timestamp]: Date.now().toString(),
31
32
  [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.requestHash]: "" } }
32
33
  });
33
- var buildPuzzleMaintenanceResponse = (user, dapp) => {
34
+ var buildPuzzleMaintenanceResponse = async (user, dapp) => {
34
35
  const timestamp = Date.now();
36
+ const images = await require_puzzleRenderer.renderPuzzleImages({
37
+ targetX: 200,
38
+ targetY: 100
39
+ });
35
40
  return {
36
41
  [_prosopo_types.ApiParams.status]: "ok",
37
42
  [_prosopo_types.ApiParams.challenge]: buildChallenge(user, dapp),
38
- [_prosopo_types.ApiParams.targetX]: 100,
39
- [_prosopo_types.ApiParams.targetY]: 100,
40
- [_prosopo_types.ApiParams.originX]: 0,
41
- [_prosopo_types.ApiParams.originY]: 0,
42
- [_prosopo_types.ApiParams.tolerance]: 1e3,
43
+ [_prosopo_types.ApiParams.background]: images.background,
44
+ [_prosopo_types.ApiParams.piece]: images.piece,
45
+ [_prosopo_types.ApiParams.pieceSize]: images.pieceSize,
46
+ [_prosopo_types.ApiParams.originX]: 60,
47
+ [_prosopo_types.ApiParams.originY]: 100,
43
48
  [_prosopo_types.ApiParams.timestamp]: timestamp.toString(),
44
49
  [_prosopo_types.ApiParams.signature]: { [_prosopo_types.ApiParams.provider]: { [_prosopo_types.ApiParams.challenge]: "" } }
45
50
  };
@@ -1,4 +1,5 @@
1
1
  const require_validateAddress = require("../validateAddress.cjs");
2
+ const require_puzzleRenderer = require("../../tasks/puzzle/puzzleRenderer.cjs");
2
3
  const require_tasks = require("../../tasks/tasks.cjs");
3
4
  const require_apiToggleMaintenanceModeEndpoint = require("../admin/apiToggleMaintenanceModeEndpoint.cjs");
4
5
  const require_devicePlatform = require("../../utils/devicePlatform.cjs");
@@ -130,11 +131,12 @@ var buildEscalation = async (tasks, result, challenge, handshakeTiming) => {
130
131
  const originSession = await tasks.db.getSessionRecordBySessionId(powRecord.sessionId);
131
132
  if (!originSession) return void 0;
132
133
  const routed = result.routingOutput;
134
+ const escalatedType = require_puzzleRenderer.downgradePuzzleIfUnavailable(routed.captchaType);
133
135
  const selectionReason = routed.reason ?? originSession.reason;
134
- const newSession = await tasks.frictionlessManager.createSession(originSession.token, originSession.score, originSession.threshold, originSession.scoreComponents, originSession.ipAddress, routed.captchaType, originSession.siteKey ?? powRecord.dappAccount, routed.captchaType === _prosopo_types.CaptchaType.image ? routed.solvedImagesCount ?? originSession.solvedImagesCount : void 0, void 0, originSession.userSitekeyIpHash, originSession.webView, originSession.iFrame, originSession.decryptedHeadHash, selectionReason, void 0, void 0, originSession.ipInfo, originSession.headers, originSession.mode, originSession.simdReadings, originSession.entropyMathRandomFingerprint, originSession.entropyCryptoFingerprint, originSession.entropyWallClockOffsetMs, originSession.entropyMathRandomFirst, originSession.bundleId, originSession.currentUrl, handshakeTiming?.tcpToChelloUs, handshakeTiming?.chelloToHandshakeUs, true, originSession.iframeUrl, originSession.isProtect, originSession.sessionId, originSession.g, void 0, originSession.i, originSession.sw, originSession.md, originSession.bn, originSession.fs);
136
+ const newSession = await tasks.frictionlessManager.createSession(originSession.token, originSession.score, originSession.threshold, originSession.scoreComponents, originSession.ipAddress, escalatedType, originSession.siteKey ?? powRecord.dappAccount, escalatedType === _prosopo_types.CaptchaType.image ? routed.solvedImagesCount ?? originSession.solvedImagesCount : void 0, void 0, originSession.userSitekeyIpHash, originSession.webView, originSession.iFrame, originSession.decryptedHeadHash, selectionReason, void 0, void 0, originSession.ipInfo, originSession.headers, originSession.mode, originSession.simdReadings, originSession.entropyMathRandomFingerprint, originSession.entropyCryptoFingerprint, originSession.entropyWallClockOffsetMs, originSession.entropyMathRandomFirst, originSession.bundleId, originSession.currentUrl, handshakeTiming?.tcpToChelloUs, handshakeTiming?.chelloToHandshakeUs, true, originSession.iframeUrl, originSession.isProtect, originSession.sessionId, originSession.g, void 0, originSession.i, originSession.sw, originSession.md, originSession.bn, originSession.fs);
135
137
  if (tasks.writeQueue) await tasks.writeQueue.cacheSessionEscalation(powRecord.sessionId, newSession.sessionId);
136
138
  return {
137
- captchaType: routed.captchaType,
139
+ captchaType: escalatedType,
138
140
  sessionId: newSession.sessionId
139
141
  };
140
142
  };
@@ -35,6 +35,7 @@ var applyTrafficFilterAtRequestTime = (ipInfo, trafficFilter, logger) => {
35
35
  powDifficulty: resolved.powDifficulty,
36
36
  solvedImagesCount: resolved.solvedImagesCount,
37
37
  puzzleTolerance: resolved.puzzleTolerance,
38
+ puzzleSettings: resolved.puzzleSettings,
38
39
  sourceCategories: resolved.sourceCategories
39
40
  };
40
41
  };
@@ -45,18 +45,24 @@ var extraIpInfosFromEnrichedDnsEvent = (enriched) => {
45
45
  * - resolver / peer classified `isAbuser`
46
46
  * - client IP is a consumer ISP but resolver is datacenter (compound)
47
47
  *
48
- * When `trafficFilter` is supplied, the datacenter and abuser contributions
49
- * are gated on the same rules `checkTrafficFilter` uses for the client IP.
50
- * A category counts here whenever the operator has configured any policy
51
- * for it (block or challenge) — either intent signals suspicion.
48
+ * When `trafficFilter` is supplied, the datacenter contribution is gated
49
+ * on operator-policy-aware shielding, *not* on the strict per-IP precedence
50
+ * chain the client-IP path uses. DNS resolvers are legitimately often on
51
+ * datacenter ranges (Google/Cloudflare/consumer-VPN DNS), so signal
52
+ * counting has to consider the operator's stance:
52
53
  *
53
- * - datacenter category must be configured; IPs whose
54
- * `providerType === "isp"` short-circuit; named allowlist skips
55
- * - abuser category defaults to configured, with the score threshold
56
- * - cross-category suppression: VPN / proxy / Tor / crawler IPs that also
57
- * carry `isDatacenter=true` are NOT counted as datacenter when the
58
- * operator hasn't configured that more specific category — mirrors
59
- * the `datacenterSuppressedByCategory` rule in evaluateIpInfo.
54
+ * - datacenter category must be configured; `providerType === "isp"`
55
+ * short-circuits; `datacenterNameAllowlist` skips; `datacenterNameDenylist`
56
+ * forces the signal through (denylist wins over all other exemptions)
57
+ * - a higher-precedence flag the operator has left **unconfigured** (VPN,
58
+ * proxy, Tor, crawler) on the same resolver IP shields the datacenter
59
+ * signal — the flag "explains" the DC status and the operator has said
60
+ * they don't care about that category. Flags that are configured (block
61
+ * or challenge) do *not* shield, because the operator is treating that
62
+ * category as suspicious in its own right.
63
+ * - abuser is not shielded by any other category: its signal counts
64
+ * whenever the abuser category is configured and the score meets the
65
+ * threshold.
60
66
  *
61
67
  * `pathValid` is a protocol signal, not a category — it always contributes
62
68
  * regardless of trafficFilter. When `trafficFilter` is omitted, all
@@ -4,6 +4,7 @@ const require_dnsEventUrl = require("../../api/dnsEventUrl.cjs");
4
4
  const require_lang = require("../../rules/lang.cjs");
5
5
  const require_captchaManager = require("../captchaManager.cjs");
6
6
  const require_getBotScore = require("../detection/getBotScore.cjs");
7
+ const require_puzzleRenderer = require("../puzzle/puzzleRenderer.cjs");
7
8
  const require_routingMachine = require("./routingMachine.cjs");
8
9
  let _prosopo_types = require("@prosopo/types");
9
10
  let uuid = require("uuid");
@@ -177,7 +178,7 @@ var FrictionlessManager = class extends require_captchaManager.CaptchaManager {
177
178
  powDifficulty: captchaType === _prosopo_types.CaptchaType.pow ? effectiveParams.powDifficulty : void 0
178
179
  };
179
180
  const routed = this.routingContext ? await require_routingMachine.applyRouter(this.decisionMachineRunner, this.usageCounters, baseline, this.routingContext, this.logger) : baseline;
180
- const finalCaptchaType = routed.captchaType;
181
+ const finalCaptchaType = require_puzzleRenderer.downgradePuzzleIfUnavailable(routed.captchaType, this.logger);
181
182
  const finalSolvedImagesCount = finalCaptchaType === _prosopo_types.CaptchaType.image ? routed.solvedImagesCount ?? effectiveParams.solvedImagesCount : void 0;
182
183
  const finalPowDifficulty = finalCaptchaType === _prosopo_types.CaptchaType.pow ? routed.powDifficulty ?? effectiveParams.powDifficulty : void 0;
183
184
  const blocked = finalCaptchaType === _prosopo_types.CaptchaType.image ? effectiveParams.blocked : void 0;
@@ -0,0 +1,39 @@
1
+ let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
2
+ var createPuzzleBackgroundBuffer = (options = {}) => {
3
+ const capacity = options.capacity ?? 16;
4
+ const refillIntervalMs = options.refillIntervalMs ?? 250;
5
+ const refillBatch = options.refillBatch ?? 4;
6
+ const geometry = options.geometry ?? _prosopo_puzzle_assets.DEFAULT_GEOMETRY;
7
+ const ready = [];
8
+ let starved = 0;
9
+ const topUp = (limit) => {
10
+ for (let i = 0; i < limit && ready.length < capacity; i++) ready.push((0, _prosopo_puzzle_assets.createBackground)(geometry));
11
+ };
12
+ topUp(capacity);
13
+ const timer = setInterval(() => topUp(refillBatch), refillIntervalMs);
14
+ timer.unref?.();
15
+ return {
16
+ take() {
17
+ const image = ready.pop();
18
+ if (!image) {
19
+ starved++;
20
+ return (0, _prosopo_puzzle_assets.createBackground)(geometry);
21
+ }
22
+ return image;
23
+ },
24
+ depth: () => ready.length,
25
+ starvations: () => starved,
26
+ stop: () => clearInterval(timer)
27
+ };
28
+ };
29
+ var globalBuffer = null;
30
+ var initPuzzleBackgroundBuffer = (options = {}) => {
31
+ globalBuffer?.stop();
32
+ globalBuffer = createPuzzleBackgroundBuffer(options);
33
+ return globalBuffer;
34
+ };
35
+ var getPuzzleBackgroundBuffer = () => globalBuffer;
36
+ //#endregion
37
+ exports.createPuzzleBackgroundBuffer = createPuzzleBackgroundBuffer;
38
+ exports.getPuzzleBackgroundBuffer = getPuzzleBackgroundBuffer;
39
+ exports.initPuzzleBackgroundBuffer = initPuzzleBackgroundBuffer;
@@ -0,0 +1,78 @@
1
+ const require_backgroundBuffer = require("./backgroundBuffer.cjs");
2
+ let _prosopo_types = require("@prosopo/types");
3
+ let _prosopo_puzzle_assets = require("@prosopo/puzzle-assets");
4
+ //#region src/tasks/puzzle/puzzleRenderer.ts
5
+ /**
6
+ * Merge zero or more partial-override sources on top of the asset package
7
+ * defaults. Later sources win, matching the tolerance-resolution order in
8
+ * `getPuzzleCaptchaChallenge`: traffic-filter policy overrides the
9
+ * client-record setting, which in turn overrides the built-in default.
10
+ */
11
+ var resolvePuzzleRenderSettings = (...overrides) => {
12
+ let resolved = { ..._prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS };
13
+ for (const override of overrides) {
14
+ if (!override) continue;
15
+ if (override.decoyCount !== void 0) resolved = {
16
+ ...resolved,
17
+ decoyCount: override.decoyCount
18
+ };
19
+ if (override.decoyEdgeDarkness !== void 0) resolved = {
20
+ ...resolved,
21
+ decoyEdgeDarkness: override.decoyEdgeDarkness
22
+ };
23
+ if (override.decoyBodyBrightness !== void 0) resolved = {
24
+ ...resolved,
25
+ decoyBodyBrightness: override.decoyBodyBrightness
26
+ };
27
+ if (override.holeDarken !== void 0) resolved = {
28
+ ...resolved,
29
+ holeDarken: override.holeDarken
30
+ };
31
+ }
32
+ return resolved;
33
+ };
34
+ /**
35
+ * Whether this provider can render puzzle imagery right now.
36
+ *
37
+ * Checked where a captchaType is *chosen*, not where the challenge is served:
38
+ * `/captcha/puzzle` cannot answer with an image captcha, because the response
39
+ * shapes are unrelated and the puzzle widget cannot render one. Minting a
40
+ * puzzle session this provider cannot fulfil would strand the user on
41
+ * INCORRECT_CAPTCHA_TYPE, so the decision has to happen before the session is
42
+ * written. See the two mint sites in frictionlessTasks and buildEscalation.
43
+ */
44
+ var isPuzzleRenderAvailable = () => {
45
+ return true;
46
+ };
47
+ /**
48
+ * Substitute `image` for `puzzle` when this provider cannot render imagery.
49
+ *
50
+ * Call this at every point a session's captchaType is decided, never at the
51
+ * point one is served. Returns other types untouched.
52
+ */
53
+ var downgradePuzzleIfUnavailable = (captchaType, logger) => {
54
+ if (captchaType !== _prosopo_types.CaptchaType.puzzle || isPuzzleRenderAvailable()) return captchaType;
55
+ logger?.warn(() => ({
56
+ msg: "Puzzle rendering unavailable - downgrading session to image",
57
+ data: {
58
+ requested: captchaType,
59
+ served: _prosopo_types.CaptchaType.image
60
+ }
61
+ }));
62
+ return _prosopo_types.CaptchaType.image;
63
+ };
64
+ var renderPuzzleImages = async (placement, settings = _prosopo_puzzle_assets.DEFAULT_RENDER_SETTINGS) => {
65
+ const background = (require_backgroundBuffer.getPuzzleBackgroundBuffer() ?? require_backgroundBuffer.initPuzzleBackgroundBuffer()).take();
66
+ if (!background) throw new Error("puzzle renderer: no background available");
67
+ const rendered = await (0, _prosopo_puzzle_assets.renderPuzzle)(background, placement, _prosopo_puzzle_assets.DEFAULT_GEOMETRY, settings);
68
+ return {
69
+ background: (0, _prosopo_puzzle_assets.toDataUri)(rendered.background),
70
+ piece: (0, _prosopo_puzzle_assets.toDataUri)(rendered.piece),
71
+ pieceSize: rendered.pieceSize
72
+ };
73
+ };
74
+ //#endregion
75
+ exports.downgradePuzzleIfUnavailable = downgradePuzzleIfUnavailable;
76
+ exports.isPuzzleRenderAvailable = isPuzzleRenderAvailable;
77
+ exports.renderPuzzleImages = renderPuzzleImages;
78
+ exports.resolvePuzzleRenderSettings = resolvePuzzleRenderSettings;
@@ -10,7 +10,6 @@ var CATEGORY_TO_REASON = {
10
10
  crawler: _prosopo_types.ResultReason.CRAWLER_BLOCKED
11
11
  };
12
12
  var categoryToReason = (category) => CATEGORY_TO_REASON[category];
13
- var isActive = (policy) => policy !== void 0;
14
13
  var matchesDatacenterNameList = (ipInfo, list) => {
15
14
  if (!list || list.length === 0) return false;
16
15
  const candidates = [];
@@ -29,6 +28,11 @@ var matchesDatacenterNameList = (ipInfo, list) => {
29
28
  };
30
29
  var isDatacenterAllowlisted = (ipInfo, allowlist) => matchesDatacenterNameList(ipInfo, allowlist);
31
30
  var isDatacenterDenylisted = (ipInfo, denylist) => matchesDatacenterNameList(ipInfo, denylist);
31
+ var isEffectivelyDatacenter = (ipInfo, trafficFilter) => {
32
+ if (!ipInfo.isDatacenter) return false;
33
+ if (isDatacenterDenylisted(ipInfo, trafficFilter.datacenterNameDenylist)) return true;
34
+ return ipInfo.providerType !== "isp" && !isDatacenterAllowlisted(ipInfo, trafficFilter.datacenterNameAllowlist);
35
+ };
32
36
  var push = (matches, category, policy) => {
33
37
  if (policy) matches.push({
34
38
  category,
@@ -38,21 +42,41 @@ var push = (matches, category, policy) => {
38
42
  var evaluateIpInfo = (ipInfo, trafficFilter, isDnsExtra = false) => {
39
43
  const matches = [];
40
44
  if (!ipInfo || !ipInfo.isValid) return matches;
41
- if (isActive(trafficFilter.vpn) && ipInfo.isVPN) push(matches, "vpn", trafficFilter.vpn);
42
- if (isActive(trafficFilter.proxy) && ipInfo.isProxy) push(matches, "proxy", trafficFilter.proxy);
43
- if (isActive(trafficFilter.tor) && ipInfo.isTor) push(matches, "tor", trafficFilter.tor);
44
- if (isActive(trafficFilter.abuser) && ipInfo.isAbuser) {
45
+ if (ipInfo.isTor) {
46
+ push(matches, "tor", trafficFilter.tor);
47
+ return matches;
48
+ }
49
+ if (ipInfo.isVPN) {
50
+ push(matches, "vpn", trafficFilter.vpn);
51
+ return matches;
52
+ }
53
+ if (ipInfo.isProxy) {
54
+ push(matches, "proxy", trafficFilter.proxy);
55
+ return matches;
56
+ }
57
+ if (isEffectivelyDatacenter(ipInfo, trafficFilter)) {
58
+ push(matches, "datacenter", trafficFilter.datacenter);
59
+ return matches;
60
+ }
61
+ if (ipInfo.isAbuser) {
45
62
  const threshold = trafficFilter.abuserScoreThreshold ?? _prosopo_types.trafficFilterAbuserScoreThresholdDefault;
46
- if (Math.max(ipInfo.abuserScore ?? 0, ipInfo.companyAbuserScore ?? 0) >= threshold) push(matches, "abuser", trafficFilter.abuser);
63
+ if (Math.max(ipInfo.abuserScore ?? 0, ipInfo.companyAbuserScore ?? 0) >= threshold) {
64
+ push(matches, "abuser", trafficFilter.abuser);
65
+ return matches;
66
+ }
47
67
  }
48
- const datacenterSuppressedByCategory = ipInfo.isVPN && !isActive(trafficFilter.vpn) || ipInfo.isProxy && !isActive(trafficFilter.proxy) || ipInfo.isTor && !isActive(trafficFilter.tor) || ipInfo.isCrawler && !isActive(trafficFilter.crawler);
49
- if (isActive(trafficFilter.datacenter) && ipInfo.isDatacenter) {
50
- if (isDatacenterDenylisted(ipInfo, trafficFilter.datacenterNameDenylist)) push(matches, "datacenter", trafficFilter.datacenter);
51
- else if (ipInfo.providerType !== "isp" && !datacenterSuppressedByCategory && !isDatacenterAllowlisted(ipInfo, trafficFilter.datacenterNameAllowlist)) push(matches, "datacenter", trafficFilter.datacenter);
68
+ if (ipInfo.isCrawler && !isDnsExtra) {
69
+ push(matches, "crawler", trafficFilter.crawler);
70
+ return matches;
71
+ }
72
+ if (ipInfo.isSatellite) {
73
+ push(matches, "satellite", trafficFilter.satellite);
74
+ return matches;
75
+ }
76
+ if (ipInfo.isMobile) {
77
+ push(matches, "mobile", trafficFilter.mobile);
78
+ return matches;
52
79
  }
53
- if (isActive(trafficFilter.mobile) && ipInfo.isMobile) push(matches, "mobile", trafficFilter.mobile);
54
- if (isActive(trafficFilter.satellite) && ipInfo.isSatellite) push(matches, "satellite", trafficFilter.satellite);
55
- if (!isDnsExtra && isActive(trafficFilter.crawler) && ipInfo.isCrawler) push(matches, "crawler", trafficFilter.crawler);
56
80
  return matches;
57
81
  };
58
82
  /**
@@ -61,26 +85,26 @@ var evaluateIpInfo = (ipInfo, trafficFilter, isDnsExtra = false) => {
61
85
  * carries the policy `action` — `block` fires at submit time; `challenge`
62
86
  * fires at request time to override captcha type + params.
63
87
  *
64
- * Cross-category rule: the datacenter category is suppressed when the IP
65
- * carries a more specific category the operator has not configured — VPN,
66
- * proxy, Tor, or crawler. All four legitimately sit on datacenter
67
- * infrastructure, so "datacenter" (a scraping rule) shouldn't catch them
68
- * out the back door.
69
- *
70
- * Extras-only rule: the crawler check is skipped on DNS extras. Public
71
- * DNS resolvers share IP space with search crawlers.
72
- *
73
- * The datacenter rule also honours `datacenterNameAllowlist`: consumer
74
- * relays route through datacenter ranges and are reported as
75
- * `is_datacenter=true` by upstream but the exiting users are real humans.
88
+ * Per-IP precedence: within a single IP, the highest-precedence flag set on
89
+ * that IP wins and is the only category that emits a match. Order (highest
90
+ * first): Tor, VPN, proxy, datacenter, abuser, crawler, satellite, mobile.
91
+ * If the operator hasn't configured a policy for that top flag, the IP
92
+ * passes cleanly — lower flags are not consulted. So an IP that's flagged
93
+ * as both VPN and proxy is only acted on if the operator has a VPN policy.
76
94
  *
77
- * The datacenter rule also short-circuits when upstream classifies the
78
- * provider as an ISP (`providerType === "isp"`). Consumer ISPs are
79
- * sometimes flagged `is_datacenter=true` upstream, but the ranges behind
80
- * those ASNs carry ordinary end-users.
95
+ * Qualifying conditions: a flag that fails its qualifier does not "own"
96
+ * the IP and evaluation falls through to the next flag. The abuser flag
97
+ * needs `abuserScore` (or `companyAbuserScore`) at or above
98
+ * `abuserScoreThreshold`; the datacenter flag needs the IP to not be an
99
+ * ISP (`providerType !== "isp"`) or to be on `datacenterNameDenylist`,
100
+ * and to not be on `datacenterNameAllowlist`; the crawler flag is skipped
101
+ * on DNS extras because public DNS resolvers share IP space with search
102
+ * crawlers.
81
103
  *
82
- * The ISP short-circuit and the allowlist are both overridden by
83
- * `datacenterNameDenylist`.
104
+ * Datacenter name lists: `datacenterNameAllowlist` lets operators opt named
105
+ * consumer relays (e.g. iCloud Private Relay) out of the datacenter rule;
106
+ * `datacenterNameDenylist` opts named providers back in even when the ISP
107
+ * heuristic would exempt them.
84
108
  *
85
109
  * When `trafficFilter.skipExtrasOnValidDnsPath` is on and the catcher
86
110
  * confirmed the DNS path matched the connection path (`pathValid: true`),
@@ -128,16 +152,22 @@ var resolveChallengePolicy = (matches) => {
128
152
  let powDifficulty;
129
153
  let solvedImagesCount;
130
154
  let puzzleTolerance;
155
+ let puzzleSettings;
131
156
  for (const m of challenges) {
132
157
  if (m.policy.powDifficulty !== void 0) powDifficulty = powDifficulty === void 0 ? m.policy.powDifficulty : Math.max(powDifficulty, m.policy.powDifficulty);
133
158
  if (m.policy.solvedImagesCount !== void 0) solvedImagesCount = solvedImagesCount === void 0 ? m.policy.solvedImagesCount : Math.max(solvedImagesCount, m.policy.solvedImagesCount);
134
159
  if (m.policy.puzzleTolerance !== void 0) puzzleTolerance = puzzleTolerance === void 0 ? m.policy.puzzleTolerance : Math.min(puzzleTolerance, m.policy.puzzleTolerance);
160
+ if (m.policy.puzzle) puzzleSettings = {
161
+ ...puzzleSettings ?? {},
162
+ ...m.policy.puzzle
163
+ };
135
164
  }
136
165
  return {
137
166
  captchaType: winningCaptchaType,
138
167
  powDifficulty,
139
168
  solvedImagesCount,
140
169
  puzzleTolerance,
170
+ puzzleSettings,
141
171
  sourceCategories: challenges.map((m) => m.category)
142
172
  };
143
173
  };
@@ -146,4 +176,5 @@ exports.categoryToReason = categoryToReason;
146
176
  exports.checkTrafficFilter = checkTrafficFilter;
147
177
  exports.isDatacenterAllowlisted = isDatacenterAllowlisted;
148
178
  exports.isDatacenterDenylisted = isDatacenterDenylisted;
179
+ exports.isEffectivelyDatacenter = isEffectivelyDatacenter;
149
180
  exports.resolveChallengePolicy = resolveChallengePolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"enrichDnsEvent.d.ts","sourceRoot":"","sources":["../../../src/tasks/dnsEvent/enrichDnsEvent.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACX,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,OAAO,EACP,MAAM,gBAAgB,CAAC;AAOxB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,eAAO,MAAM,cAAc,aAChB,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,iBAC1B,cAAc,cACjB,MAAM,KAChB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CA8BtC,CAAC;AAEF,eAAO,MAAM,YAAY,SAClB,cAAc,GAAG,SAAS,KAC9B,MAAM,GAAG,SAAyD,CAAC;AAEtE,eAAO,MAAM,gCAAgC,aAClC,gBAAgB,GAAG,SAAS,KACpC,cAAc,EAMhB,CAAC;AA6BF,eAAO,MAAM,mBAAmB,aACrB,gBAAgB,GAAG,SAAS,gBACxB,cAAc,GAAG,SAAS,kBACxB,OAAO,CAAC,cAAc,CAAC,KACrC,MAqDF,CAAC"}
1
+ {"version":3,"file":"enrichDnsEvent.d.ts","sourceRoot":"","sources":["../../../src/tasks/dnsEvent/enrichDnsEvent.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACX,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,OAAO,EACP,MAAM,gBAAgB,CAAC;AAOxB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,eAAO,MAAM,cAAc,aAChB,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,iBAC1B,cAAc,cACjB,MAAM,KAChB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CA8BtC,CAAC;AAEF,eAAO,MAAM,YAAY,SAClB,cAAc,GAAG,SAAS,KAC9B,MAAM,GAAG,SAAyD,CAAC;AAEtE,eAAO,MAAM,gCAAgC,aAClC,gBAAgB,GAAG,SAAS,KACpC,cAAc,EAMhB,CAAC;AAmCF,eAAO,MAAM,mBAAmB,aACrB,gBAAgB,GAAG,SAAS,gBACxB,cAAc,GAAG,SAAS,kBACxB,OAAO,CAAC,cAAc,CAAC,KACrC,MAwDF,CAAC"}
@@ -45,18 +45,24 @@ var extraIpInfosFromEnrichedDnsEvent = (enriched) => {
45
45
  * - resolver / peer classified `isAbuser`
46
46
  * - client IP is a consumer ISP but resolver is datacenter (compound)
47
47
  *
48
- * When `trafficFilter` is supplied, the datacenter and abuser contributions
49
- * are gated on the same rules `checkTrafficFilter` uses for the client IP.
50
- * A category counts here whenever the operator has configured any policy
51
- * for it (block or challenge) — either intent signals suspicion.
48
+ * When `trafficFilter` is supplied, the datacenter contribution is gated
49
+ * on operator-policy-aware shielding, *not* on the strict per-IP precedence
50
+ * chain the client-IP path uses. DNS resolvers are legitimately often on
51
+ * datacenter ranges (Google/Cloudflare/consumer-VPN DNS), so signal
52
+ * counting has to consider the operator's stance:
52
53
  *
53
- * - datacenter category must be configured; IPs whose
54
- * `providerType === "isp"` short-circuit; named allowlist skips
55
- * - abuser category defaults to configured, with the score threshold
56
- * - cross-category suppression: VPN / proxy / Tor / crawler IPs that also
57
- * carry `isDatacenter=true` are NOT counted as datacenter when the
58
- * operator hasn't configured that more specific category — mirrors
59
- * the `datacenterSuppressedByCategory` rule in evaluateIpInfo.
54
+ * - datacenter category must be configured; `providerType === "isp"`
55
+ * short-circuits; `datacenterNameAllowlist` skips; `datacenterNameDenylist`
56
+ * forces the signal through (denylist wins over all other exemptions)
57
+ * - a higher-precedence flag the operator has left **unconfigured** (VPN,
58
+ * proxy, Tor, crawler) on the same resolver IP shields the datacenter
59
+ * signal — the flag "explains" the DC status and the operator has said
60
+ * they don't care about that category. Flags that are configured (block
61
+ * or challenge) do *not* shield, because the operator is treating that
62
+ * category as suspicious in its own right.
63
+ * - abuser is not shielded by any other category: its signal counts
64
+ * whenever the abuser category is configured and the score meets the
65
+ * threshold.
60
66
  *
61
67
  * `pathValid` is a protocol signal, not a category — it always contributes
62
68
  * regardless of trafficFilter. When `trafficFilter` is omitted, all
@@ -1 +1 @@
1
- {"version":3,"file":"enrichDnsEvent.js","sourceRoot":"","sources":["../../../src/tasks/dnsEvent/enrichDnsEvent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enrichDnsEvent.js","sourceRoot":"","sources":["../../../src/tasks/dnsEvent/enrichDnsEvent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"frictionlessTasks.d.ts","sourceRoot":"","sources":["../../../src/tasks/frictionless/frictionlessTasks.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAEN,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,kBAAkB,EAClB,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,OAAO,EAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EACN,KAAK,aAAa,EAElB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAEpF,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAUvE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,MAAM,WAAW,yBAA0B,SAAQ,OAAO;CAAG;AAE7D,MAAM,WAAW,uBAAwB,SAAQ,OAAO;CAAG;AAE3D,MAAM,WAAW,0BAA2B,SAAQ,OAAO;CAAG;AAE9D,qBAAa,mBAAoB,SAAQ,cAAc;IACtD,OAAO,CAAC,aAAa,CAAC,CAGpB;IACF,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;gBAGpD,EAAE,EAAE,iBAAiB,EACrB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,OAAO,mBAAmB,EAAE,eAAe,GAAG,IAAI,EAC/D,qBAAqB,CAAC,EAAE,qBAAqB,EAC7C,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI;IAkBrC,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAgBtC,mBAAmB,CACxB,QAAQ,EAAE,sBAAsB,EAChC,GAAG,EAAE,cAAc,GACjB,OAAO,CAAC,oBAAoB,CAAC;IAUhC,gBAAgB,CACf,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC,GAC9D,IAAI;IA6CP,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAMzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI;IAOlE,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAIxC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,kBAAkB,EAC7B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,MAAM,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,UAAQ,EACf,MAAM,UAAQ,EACd,iBAAiB,SAAK,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,QAAQ,EACf,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EACtC,4BAA4B,CAAC,EAAE,OAAO,CAAC,8BAA8B,CAAC,EACtE,wBAAwB,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,EAC9D,wBAAwB,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,EAC9D,sBAAsB,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,EAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAC9B,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAClC,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACpD,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EACtC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAChC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAChC,eAAe,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAC5C,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAChB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EACpC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAChB,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAClB,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAClB,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAClB,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAChB,OAAO,CAAC,OAAO,CAAC;IA8Fb,gBAAgB,CACrB,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GACzC,OAAO,CAAC,8BAA8B,CAAC;IAIpC,cAAc,CACnB,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACvC,OAAO,CAAC,8BAA8B,CAAC;IAIpC,iBAAiB,CACtB,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC1C,OAAO,CAAC,8BAA8B,CAAC;YAO5B,WAAW;IA2HnB,sBAAsB,CAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC;IA0DhB,yBAAyB,CACxB,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,eAAe,GAC9B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE;IActD,oBAAoB,CACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,eAAe,GAC9B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE;IActD,sBAAsB,CACrB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,eAAe,GAC9B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE;IAetD,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWlD,OAAO,CAAC,mBAAmB;IAsBrB,sBAAsB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACjE,QAAQ,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAWI,cAAc,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;IA4LrB,uBAAuB,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAG9B"}
1
+ {"version":3,"file":"frictionlessTasks.d.ts","sourceRoot":"","sources":["../../../src/tasks/frictionless/frictionlessTasks.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { buildDnsEventUrl } from "../../api/dnsEventUrl.js";
4
4
  import { checkLangRules } from "../../rules/lang.js";
5
5
  import { CaptchaManager } from "../captchaManager.js";
6
6
  import { getBotScore } from "../detection/getBotScore.js";
7
+ import { downgradePuzzleIfUnavailable } from "../puzzle/puzzleRenderer.js";
7
8
  import { applyRouter } from "./routingMachine.js";
8
9
  import { ApiParams, CaptchaType, FrictionlessReason as FrictionlessReason$1, SimdReadingsStage } from "@prosopo/types";
9
10
  import { v4 } from "uuid";
@@ -177,7 +178,7 @@ var FrictionlessManager = class extends CaptchaManager {
177
178
  powDifficulty: captchaType === CaptchaType.pow ? effectiveParams.powDifficulty : void 0
178
179
  };
179
180
  const routed = this.routingContext ? await applyRouter(this.decisionMachineRunner, this.usageCounters, baseline, this.routingContext, this.logger) : baseline;
180
- const finalCaptchaType = routed.captchaType;
181
+ const finalCaptchaType = downgradePuzzleIfUnavailable(routed.captchaType, this.logger);
181
182
  const finalSolvedImagesCount = finalCaptchaType === CaptchaType.image ? routed.solvedImagesCount ?? effectiveParams.solvedImagesCount : void 0;
182
183
  const finalPowDifficulty = finalCaptchaType === CaptchaType.pow ? routed.powDifficulty ?? effectiveParams.powDifficulty : void 0;
183
184
  const blocked = finalCaptchaType === CaptchaType.image ? effectiveParams.blocked : void 0;