@prosopo/provider 4.15.14 → 4.15.16

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 (232) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +106 -106
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +107 -104
  4. package/CHANGELOG.md +63 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/api/admin/apiAdminRoutesProvider.js +27 -46
  7. package/dist/api/admin/apiClearAllCountersEndpoint.js +62 -57
  8. package/dist/api/admin/apiDnsEventEndpoint.js +79 -92
  9. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js +43 -45
  10. package/dist/api/admin/apiGetDecisionMachineEndpoint.js +40 -40
  11. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +23 -22
  12. package/dist/api/admin/apiRegisterSiteKeysEndpoint.js +26 -30
  13. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js +35 -37
  14. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js +40 -40
  15. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  16. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +29 -31
  17. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js +33 -29
  18. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js +32 -31
  19. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +43 -35
  20. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js +43 -63
  21. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +36 -35
  22. package/dist/api/admin/createApiAdminRoutesProvider.js +6 -8
  23. package/dist/api/blacklistRequestInspector.js +285 -377
  24. package/dist/api/block.js +17 -30
  25. package/dist/api/captcha/checkSpamEmail.js +88 -98
  26. package/dist/api/captcha/contextAwareValidation.js +21 -15
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +126 -140
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +11 -12
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +236 -299
  30. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js +10 -13
  31. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +336 -462
  32. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js +17 -14
  33. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js +27 -27
  34. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +42 -63
  35. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +2 -4
  36. package/dist/api/captcha/getImageCaptchaChallenge.js +136 -207
  37. package/dist/api/captcha/getPoWCaptchaChallenge.js +128 -198
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +132 -201
  39. package/dist/api/captcha/maintenanceModeResponses.js +38 -47
  40. package/dist/api/captcha/submitImageCaptchaSolution.js +75 -101
  41. package/dist/api/captcha/submitPoWCaptchaSolution.js +137 -207
  42. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +73 -105
  43. package/dist/api/captcha.js +76 -58
  44. package/dist/api/dnsEventUrl.js +20 -22
  45. package/dist/api/domainMiddleware.js +104 -115
  46. package/dist/api/forwardVerify.js +62 -48
  47. package/dist/api/handshakeTimingMiddleware.js +43 -62
  48. package/dist/api/hardBlockVerdictCache.js +114 -117
  49. package/dist/api/headerCheckMiddleware.js +34 -34
  50. package/dist/api/ignoreMiddleware.js +13 -15
  51. package/dist/api/ipInfoMiddleware.js +17 -19
  52. package/dist/api/ja4.js +149 -188
  53. package/dist/api/ja4Middleware.js +39 -54
  54. package/dist/api/metrics.js +245 -257
  55. package/dist/api/public.js +52 -54
  56. package/dist/api/robotsMiddleware.js +10 -10
  57. package/dist/api/startProviderApi.js +205 -232
  58. package/dist/api/testSiteKey.js +16 -16
  59. package/dist/api/validateAddress.js +23 -21
  60. package/dist/api/verify.js +334 -377
  61. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  62. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +40 -59
  63. package/dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs +63 -58
  64. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +82 -93
  65. package/dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs +46 -48
  66. package/dist/cjs/api/admin/apiGetDecisionMachineEndpoint.cjs +41 -41
  67. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +25 -24
  68. package/dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs +28 -32
  69. package/dist/cjs/api/admin/apiRemoveAllDecisionMachinesEndpoint.cjs +38 -40
  70. package/dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs +41 -41
  71. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +31 -33
  72. package/dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs +35 -31
  73. package/dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs +34 -33
  74. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +45 -35
  75. package/dist/cjs/api/admin/apiUpdateDecisionMachineEndpoint.cjs +45 -65
  76. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +38 -37
  77. package/dist/cjs/api/admin/createApiAdminRoutesProvider.cjs +7 -8
  78. package/dist/cjs/api/blacklistRequestInspector.cjs +288 -376
  79. package/dist/cjs/api/block.cjs +18 -30
  80. package/dist/cjs/api/captcha/checkSpamEmail.cjs +90 -100
  81. package/dist/cjs/api/captcha/contextAwareValidation.cjs +21 -14
  82. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +125 -140
  83. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +10 -10
  84. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +238 -301
  85. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.cjs +9 -12
  86. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +349 -473
  87. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.cjs +18 -14
  88. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.cjs +26 -26
  89. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +42 -63
  90. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +2 -3
  91. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +138 -208
  92. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +131 -200
  93. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +135 -203
  94. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +38 -44
  95. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +77 -102
  96. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +140 -209
  97. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +76 -107
  98. package/dist/cjs/api/captcha.cjs +79 -58
  99. package/dist/cjs/api/dnsEventUrl.cjs +20 -21
  100. package/dist/cjs/api/domainMiddleware.cjs +106 -117
  101. package/dist/cjs/api/forwardVerify.cjs +63 -49
  102. package/dist/cjs/api/handshakeTimingMiddleware.cjs +43 -61
  103. package/dist/cjs/api/hardBlockVerdictCache.cjs +114 -114
  104. package/dist/cjs/api/headerCheckMiddleware.cjs +34 -34
  105. package/dist/cjs/api/ignoreMiddleware.cjs +12 -14
  106. package/dist/cjs/api/ipInfoMiddleware.cjs +16 -18
  107. package/dist/cjs/api/ja4.cjs +149 -187
  108. package/dist/cjs/api/ja4Middleware.cjs +40 -53
  109. package/dist/cjs/api/metrics.cjs +229 -228
  110. package/dist/cjs/api/public.cjs +57 -57
  111. package/dist/cjs/api/robotsMiddleware.cjs +9 -9
  112. package/dist/cjs/api/startProviderApi.cjs +219 -237
  113. package/dist/cjs/api/testSiteKey.cjs +15 -14
  114. package/dist/cjs/api/validateAddress.cjs +24 -21
  115. package/dist/cjs/api/verify.cjs +338 -379
  116. package/dist/cjs/compositeIpAddress.cjs +40 -47
  117. package/dist/cjs/index.cjs +65 -71
  118. package/dist/cjs/pairs.cjs +31 -35
  119. package/dist/cjs/rules/lang.cjs +10 -14
  120. package/dist/cjs/schedulers/captchaScheduler.cjs +26 -32
  121. package/dist/cjs/schedulers/getClientList.cjs +35 -33
  122. package/dist/cjs/schedulers/setClientEntropy.cjs +35 -33
  123. package/dist/cjs/schedulers/updateSpamEmailDomains.cjs +39 -43
  124. package/dist/cjs/services/ipComparison.cjs +122 -119
  125. package/dist/cjs/tasks/captchaManager.cjs +407 -486
  126. package/dist/cjs/tasks/client/clientTasks.cjs +347 -470
  127. package/dist/cjs/tasks/dataset/datasetTasks.cjs +25 -29
  128. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +16 -32
  129. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +220 -307
  130. package/dist/cjs/tasks/detection/decodeBehavior.cjs +408 -317
  131. package/dist/cjs/tasks/detection/decodePayload.cjs +686 -468
  132. package/dist/cjs/tasks/detection/decodeSimd.cjs +462 -304
  133. package/dist/cjs/tasks/detection/getBotScore.cjs +37 -43
  134. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +88 -71
  135. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +348 -486
  136. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +13 -30
  137. package/dist/cjs/tasks/frictionless/routingMachine.cjs +71 -55
  138. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +555 -806
  139. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +22 -23
  140. package/dist/cjs/tasks/index.cjs +2 -4
  141. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +491 -687
  142. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +17 -29
  143. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +422 -591
  144. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasksUtils.cjs +8 -5
  145. package/dist/cjs/tasks/spam/checkSpamEmail.cjs +133 -141
  146. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +118 -76
  147. package/dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs +75 -84
  148. package/dist/cjs/tasks/spam/updateSpamEmailDomains.cjs +40 -56
  149. package/dist/cjs/tasks/tasks.cjs +107 -158
  150. package/dist/cjs/util/usageCounters.cjs +220 -211
  151. package/dist/cjs/util.cjs +329 -359
  152. package/dist/cjs/utils/devicePlatform.cjs +14 -8
  153. package/dist/cjs/utils/dns.cjs +68 -93
  154. package/dist/cjs/utils/hashUserAgent.cjs +14 -7
  155. package/dist/cjs/utils/hashUserIp.cjs +14 -6
  156. package/dist/cjs/utils/honeypot/encoders.cjs +74 -80
  157. package/dist/cjs/utils/honeypot/phraseBank.cjs +51 -44
  158. package/dist/cjs/utils/normalizeRequestIp.cjs +33 -25
  159. package/dist/compositeIpAddress.js +38 -46
  160. package/dist/index.js +12 -56
  161. package/dist/pairs.js +31 -37
  162. package/dist/rules/lang.js +11 -15
  163. package/dist/schedulers/captchaScheduler.js +25 -31
  164. package/dist/schedulers/getClientList.js +34 -32
  165. package/dist/schedulers/setClientEntropy.js +34 -32
  166. package/dist/schedulers/updateSpamEmailDomains.js +38 -42
  167. package/dist/services/ipComparison.js +122 -119
  168. package/dist/tasks/captchaManager.js +403 -483
  169. package/dist/tasks/client/clientTasks.js +343 -467
  170. package/dist/tasks/dataset/datasetTasks.js +24 -28
  171. package/dist/tasks/dataset/datasetTasksUtils.js +15 -31
  172. package/dist/tasks/decisionMachine/decisionMachineRunner.js +217 -306
  173. package/dist/tasks/detection/getBotScore.js +37 -43
  174. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -1
  175. package/dist/tasks/dnsEvent/enrichDnsEvent.js +88 -74
  176. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -1
  177. package/dist/tasks/frictionless/frictionlessTasks.js +342 -479
  178. package/dist/tasks/frictionless/frictionlessTasksUtils.js +14 -32
  179. package/dist/tasks/frictionless/routingMachine.js +72 -56
  180. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +550 -801
  181. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +21 -22
  182. package/dist/tasks/index.js +1 -3
  183. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  184. package/dist/tasks/powCaptcha/powTasks.js +486 -682
  185. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  186. package/dist/tasks/powCaptcha/powTasksUtils.js +15 -28
  187. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  188. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +417 -586
  189. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  190. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.js +9 -6
  191. package/dist/tasks/spam/checkSpamEmail.js +133 -141
  192. package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -0
  193. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  194. package/dist/tasks/spam/checkTrafficFilter.js +117 -77
  195. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  196. package/dist/tasks/spam/evaluateEmailSpamRules.js +75 -86
  197. package/dist/tasks/spam/updateSpamEmailDomains.js +36 -54
  198. package/dist/tasks/tasks.js +98 -150
  199. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +4 -1
  200. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -1
  201. package/dist/tests/unit/api/block.unit.test.js +8 -4
  202. package/dist/tests/unit/api/block.unit.test.js.map +1 -1
  203. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +8 -6
  204. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  205. package/dist/tests/unit/api/forwardVerify.unit.test.js +3 -1
  206. package/dist/tests/unit/api/forwardVerify.unit.test.js.map +1 -1
  207. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +15 -7
  208. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  209. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +24 -18
  210. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  211. package/dist/tests/unit/schedulers/getClientList.unit.test.js +19 -13
  212. package/dist/tests/unit/schedulers/getClientList.unit.test.js.map +1 -1
  213. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js +19 -13
  214. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js.map +1 -1
  215. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  216. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +22 -16
  217. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  218. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +140 -0
  219. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  220. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +7 -7
  221. package/dist/util/usageCounters.js +220 -212
  222. package/dist/util.d.ts.map +1 -1
  223. package/dist/util.js +327 -364
  224. package/dist/util.js.map +1 -1
  225. package/dist/utils/devicePlatform.js +15 -9
  226. package/dist/utils/dns.js +64 -77
  227. package/dist/utils/hashUserAgent.js +14 -7
  228. package/dist/utils/hashUserIp.js +14 -6
  229. package/dist/utils/honeypot/encoders.js +74 -80
  230. package/dist/utils/honeypot/phraseBank.js +49 -44
  231. package/dist/utils/normalizeRequestIp.js +34 -26
  232. package/package.json +24 -24
@@ -1,53 +1,45 @@
1
1
  import { IpAddressType } from "@prosopo/types";
2
2
  import { getIPAddress } from "@prosopo/util";
3
3
  import { Address4, Address6 } from "ip-address";
4
- const V6_SHIFT = 64n;
5
- const v6_LOWER_MASK = (1n << V6_SHIFT) - 1n;
6
- const getCompositeIpAddress = (ip) => {
7
- let ipAddress;
8
- try {
9
- ipAddress = "string" === typeof ip ? getIPAddress(ip) : ip;
10
- } catch (e) {
11
- return {
12
- lower: 0n,
13
- type: IpAddressType.v4
14
- };
15
- }
16
- return getCompositeFromIpAddress(ipAddress);
4
+ //#region src/compositeIpAddress.ts
5
+ var V6_SHIFT = 64n;
6
+ var v6_LOWER_MASK = (1n << V6_SHIFT) - 1n;
7
+ var getCompositeIpAddress = (ip) => {
8
+ let ipAddress;
9
+ try {
10
+ ipAddress = "string" === typeof ip ? getIPAddress(ip) : ip;
11
+ } catch (e) {
12
+ return {
13
+ lower: 0n,
14
+ type: IpAddressType.v4
15
+ };
16
+ }
17
+ return getCompositeFromIpAddress(ipAddress);
17
18
  };
18
- const getCompositeFromIpAddress = (ipAddress) => {
19
- const numericIp = ipAddress.bigInt();
20
- if (ipAddress instanceof Address4) {
21
- return {
22
- lower: numericIp,
23
- type: IpAddressType.v4
24
- };
25
- }
26
- ipAddress;
27
- return {
28
- lower: numericIp & v6_LOWER_MASK,
29
- upper: numericIp >> V6_SHIFT,
30
- type: IpAddressType.v6
31
- };
19
+ var getCompositeFromIpAddress = (ipAddress) => {
20
+ const numericIp = ipAddress.bigInt();
21
+ if (ipAddress instanceof Address4) return {
22
+ lower: numericIp,
23
+ type: IpAddressType.v4
24
+ };
25
+ return {
26
+ lower: numericIp & v6_LOWER_MASK,
27
+ upper: numericIp >> V6_SHIFT,
28
+ type: IpAddressType.v6
29
+ };
32
30
  };
33
- const getIpAddressFromComposite = (compositeIpAddress) => {
34
- switch (compositeIpAddress.type) {
35
- case IpAddressType.v4:
36
- return Address4.fromBigInt(getBigInt(compositeIpAddress.lower));
37
- case IpAddressType.v6:
38
- return Address6.fromBigInt(
39
- getBigInt(compositeIpAddress.upper) << V6_SHIFT | getBigInt(compositeIpAddress.lower) & v6_LOWER_MASK
40
- );
41
- default:
42
- never();
43
- return Address4.fromBigInt(0n);
44
- }
31
+ var getIpAddressFromComposite = (compositeIpAddress) => {
32
+ switch (compositeIpAddress.type) {
33
+ case IpAddressType.v4: return Address4.fromBigInt(getBigInt(compositeIpAddress.lower));
34
+ case IpAddressType.v6: return Address6.fromBigInt(getBigInt(compositeIpAddress.upper) << V6_SHIFT | getBigInt(compositeIpAddress.lower) & v6_LOWER_MASK);
35
+ default:
36
+ never();
37
+ return Address4.fromBigInt(0n);
38
+ }
45
39
  };
46
- const getBigInt = (number) => BigInt(number || 0n);
47
- const never = () => {
48
- throw new Error("Unhandled type");
49
- };
50
- export {
51
- getCompositeIpAddress,
52
- getIpAddressFromComposite
40
+ var getBigInt = (number) => BigInt(number || 0n);
41
+ var never = () => {
42
+ throw new Error("Unhandled type");
53
43
  };
44
+ //#endregion
45
+ export { getCompositeIpAddress, getIpAddressFromComposite };
package/dist/index.js CHANGED
@@ -1,6 +1,11 @@
1
- import "./tasks/index.js";
2
- import { updateSpamEmailDomains } from "./tasks/spam/updateSpamEmailDomains.js";
1
+ import "./_virtual/_rolldown/runtime.js";
2
+ import { getCompositeIpAddress, getIpAddressFromComposite } from "./compositeIpAddress.js";
3
+ import { BlacklistRequestInspector, getPrioritisedAccessRule, getRequestUserScope, getVerdictCache, rankCandidateRules } from "./api/blacklistRequestInspector.js";
4
+ import { FrictionlessReason } from "./tasks/frictionless/frictionlessTasks.js";
5
+ import { compareIPs } from "./services/ipComparison.js";
3
6
  import { checkIfTaskIsRunning, deepValidateIpAddress, encodeStringAddress, evaluateIpValidationRules, getIPAddress, getIPAddressFromBigInt, shuffleArray, validateIpAddress } from "./util.js";
7
+ import { Tasks } from "./tasks/tasks.js";
8
+ import { updateSpamEmailDomains } from "./tasks/spam/updateSpamEmailDomains.js";
4
9
  import { blockMiddleware } from "./api/block.js";
5
10
  import { asyncHandler, prosopoRouter } from "./api/captcha.js";
6
11
  import { prosopoVerifyRouter } from "./api/verify.js";
@@ -8,62 +13,13 @@ import { DEFAULT_JA4, getJA4, ja4Middleware } from "./api/ja4Middleware.js";
8
13
  import { getHandshakeTiming, handshakeTimingMiddleware } from "./api/handshakeTimingMiddleware.js";
9
14
  import { publicRouter } from "./api/public.js";
10
15
  import { domainMiddleware } from "./api/domainMiddleware.js";
16
+ import { createApiAdminRoutesProvider } from "./api/admin/createApiAdminRoutesProvider.js";
17
+ import { headerCheckMiddleware } from "./api/headerCheckMiddleware.js";
18
+ import { ignoreMiddleware } from "./api/ignoreMiddleware.js";
19
+ import { robotsMiddleware } from "./api/robotsMiddleware.js";
11
20
  import { getClientApiPathsExpectingProsopoHeaders, getUserFromJWT, isTlsAvailable, startProviderApi } from "./api/startProviderApi.js";
12
21
  import { storeCaptchasExternally } from "./schedulers/captchaScheduler.js";
13
22
  import { getClientList } from "./schedulers/getClientList.js";
14
23
  import { setClientEntropy } from "./schedulers/setClientEntropy.js";
15
24
  import { updateSpamEmailDomainsScheduler } from "./schedulers/updateSpamEmailDomains.js";
16
- import { headerCheckMiddleware } from "./api/headerCheckMiddleware.js";
17
- import { createApiAdminRoutesProvider } from "./api/admin/createApiAdminRoutesProvider.js";
18
- import { ignoreMiddleware } from "./api/ignoreMiddleware.js";
19
- import { robotsMiddleware } from "./api/robotsMiddleware.js";
20
- import { getCompositeIpAddress, getIpAddressFromComposite } from "./compositeIpAddress.js";
21
- import { compareIPs } from "./services/ipComparison.js";
22
- import { BlacklistRequestInspector, getPrioritisedAccessRule, getRequestUserScope, getVerdictCache, rankCandidateRules } from "./api/blacklistRequestInspector.js";
23
- import "./tasks/frictionless/frictionlessTasks.js";
24
- import { FrictionlessReason } from "@prosopo/types";
25
- import { Tasks } from "./tasks/tasks.js";
26
- export {
27
- BlacklistRequestInspector,
28
- DEFAULT_JA4,
29
- FrictionlessReason,
30
- Tasks,
31
- asyncHandler,
32
- blockMiddleware,
33
- checkIfTaskIsRunning,
34
- compareIPs,
35
- createApiAdminRoutesProvider,
36
- deepValidateIpAddress,
37
- domainMiddleware,
38
- encodeStringAddress,
39
- evaluateIpValidationRules,
40
- getClientApiPathsExpectingProsopoHeaders,
41
- getClientList,
42
- getCompositeIpAddress,
43
- getHandshakeTiming,
44
- getIPAddress,
45
- getIPAddressFromBigInt,
46
- getIpAddressFromComposite,
47
- getJA4,
48
- getPrioritisedAccessRule,
49
- getRequestUserScope,
50
- getUserFromJWT,
51
- getVerdictCache,
52
- handshakeTimingMiddleware,
53
- headerCheckMiddleware,
54
- ignoreMiddleware,
55
- isTlsAvailable,
56
- ja4Middleware,
57
- prosopoRouter,
58
- prosopoVerifyRouter,
59
- publicRouter,
60
- rankCandidateRules,
61
- robotsMiddleware,
62
- setClientEntropy,
63
- shuffleArray,
64
- startProviderApi,
65
- storeCaptchasExternally,
66
- updateSpamEmailDomains,
67
- updateSpamEmailDomainsScheduler,
68
- validateIpAddress
69
- };
25
+ export { BlacklistRequestInspector, DEFAULT_JA4, FrictionlessReason, Tasks, asyncHandler, blockMiddleware, checkIfTaskIsRunning, compareIPs, createApiAdminRoutesProvider, deepValidateIpAddress, domainMiddleware, encodeStringAddress, evaluateIpValidationRules, getClientApiPathsExpectingProsopoHeaders, getClientList, getCompositeIpAddress, getHandshakeTiming, getIPAddress, getIPAddressFromBigInt, getIpAddressFromComposite, getJA4, getPrioritisedAccessRule, getRequestUserScope, getUserFromJWT, getVerdictCache, handshakeTimingMiddleware, headerCheckMiddleware, ignoreMiddleware, isTlsAvailable, ja4Middleware, prosopoRouter, prosopoVerifyRouter, publicRouter, rankCandidateRules, robotsMiddleware, setClientEntropy, shuffleArray, startProviderApi, storeCaptchasExternally, updateSpamEmailDomains, updateSpamEmailDomainsScheduler, validateIpAddress };
package/dist/pairs.js CHANGED
@@ -1,41 +1,35 @@
1
1
  import { at } from "@prosopo/util";
2
- const constructPairList = (list) => {
3
- if (list.length % 2 !== 0) {
4
- throw new Error("Invalid pairs length");
5
- }
6
- const pairList = [];
7
- for (let i = 0; i < list.length; i += 2) {
8
- pairList.push([at(list, i), at(list, i + 1)]);
9
- }
10
- return pairList;
2
+ //#region src/pairs.ts
3
+ /** Construct list of pairs from flat list
4
+ * @param list
5
+ */
6
+ var constructPairList = (list) => {
7
+ if (list.length % 2 !== 0) throw new Error("Invalid pairs length");
8
+ const pairList = [];
9
+ for (let i = 0; i < list.length; i += 2) pairList.push([at(list, i), at(list, i + 1)]);
10
+ return pairList;
11
11
  };
12
- const peelCheckboxPrefix = (flat, solutionLengths) => {
13
- const firstFlat = flat[0];
14
- const firstLen = solutionLengths[0];
15
- if (firstFlat === void 0 || firstLen === void 0) {
16
- return { flat };
17
- }
18
- if (firstFlat.length === 2 * firstLen + 2) {
19
- const checkbox = [at(firstFlat, 0), at(firstFlat, 1)];
20
- const stripped = [firstFlat.slice(2), ...flat.slice(1)];
21
- return { checkbox, flat: stripped };
22
- }
23
- return { flat };
12
+ var peelCheckboxPrefix = (flat, solutionLengths) => {
13
+ const firstFlat = flat[0];
14
+ const firstLen = solutionLengths[0];
15
+ if (firstFlat === void 0 || firstLen === void 0) return { flat };
16
+ if (firstFlat.length === 2 * firstLen + 2) return {
17
+ checkbox: [at(firstFlat, 0), at(firstFlat, 1)],
18
+ flat: [firstFlat.slice(2), ...flat.slice(1)]
19
+ };
20
+ return { flat };
24
21
  };
25
- const containsIdenticalPairs = (pairsLists) => {
26
- const set = /* @__PURE__ */ new Set();
27
- for (const pairList of pairsLists) {
28
- for (const pair of pairList) {
29
- const x = at(pair, 0);
30
- const y = at(pair, 1);
31
- const coordString = `${x},${y}`;
32
- set.add(coordString);
33
- }
34
- }
35
- return set.size !== pairsLists.flat().flat().length / 2;
36
- };
37
- export {
38
- constructPairList,
39
- containsIdenticalPairs,
40
- peelCheckboxPrefix
22
+ /**
23
+ * Check if there are identical pairs in flattened lists of pairs
24
+ * @param pairsLists
25
+ */
26
+ var containsIdenticalPairs = (pairsLists) => {
27
+ const set = /* @__PURE__ */ new Set();
28
+ for (const pairList of pairsLists) for (const pair of pairList) {
29
+ const coordString = `${at(pair, 0)},${at(pair, 1)}`;
30
+ set.add(coordString);
31
+ }
32
+ return set.size !== pairsLists.flat().flat().length / 2;
41
33
  };
34
+ //#endregion
35
+ export { constructPairList, containsIdenticalPairs, peelCheckboxPrefix };
@@ -1,16 +1,12 @@
1
- const checkLangRules = (config, acceptLanguage) => {
2
- const lConfig = config.lRules;
3
- let lScore = 0;
4
- if (lConfig && acceptLanguage) {
5
- const languages = acceptLanguage.split(",").map((lang) => lang.trim().split(";")[0]);
6
- for (const lang of languages) {
7
- if (lang && lConfig[lang]) {
8
- lScore += lConfig[lang];
9
- }
10
- }
11
- }
12
- return lScore;
13
- };
14
- export {
15
- checkLangRules
1
+ //#region src/rules/lang.ts
2
+ var checkLangRules = (config, acceptLanguage) => {
3
+ const lConfig = config.lRules;
4
+ let lScore = 0;
5
+ if (lConfig && acceptLanguage) {
6
+ const languages = acceptLanguage.split(",").map((lang) => lang.trim().split(";")[0]);
7
+ for (const lang of languages) if (lang && lConfig[lang]) lScore += lConfig[lang];
8
+ }
9
+ return lScore;
16
10
  };
11
+ //#endregion
12
+ export { checkLangRules };
@@ -1,35 +1,29 @@
1
- import { ProviderEnvironment } from "@prosopo/env";
1
+ import { checkIfTaskIsRunning } from "../util.js";
2
+ import { Tasks } from "../tasks/tasks.js";
2
3
  import { ScheduledTaskNames } from "@prosopo/types";
4
+ import { ProviderEnvironment } from "@prosopo/env";
3
5
  import { CronJob } from "cron";
4
- import { Tasks } from "../tasks/tasks.js";
5
- import { checkIfTaskIsRunning } from "../util.js";
6
+ //#region src/schedulers/captchaScheduler.ts
6
7
  async function storeCaptchasExternally(pair, cronSchedule, config) {
7
- const env = new ProviderEnvironment(config, pair);
8
- await env.isReady();
9
- const tasks = new Tasks(env);
10
- const job = new CronJob(cronSchedule, async () => {
11
- const taskRunning = await checkIfTaskIsRunning(
12
- ScheduledTaskNames.StoreCommitmentsExternal,
13
- env.getDb()
14
- );
15
- env.logger.info(() => ({
16
- data: { taskRunning },
17
- msg: `${ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`
18
- }));
19
- if (!taskRunning) {
20
- env.logger.info(() => ({
21
- msg: `${ScheduledTaskNames.StoreCommitmentsExternal} task....`
22
- }));
23
- await tasks.clientTaskManager.storeCommitmentsExternal().catch((err) => {
24
- env.logger.error(() => ({
25
- err,
26
- msg: "Error storing commitments externally"
27
- }));
28
- });
29
- }
30
- });
31
- job.start();
8
+ const env = new ProviderEnvironment(config, pair);
9
+ await env.isReady();
10
+ const tasks = new Tasks(env);
11
+ new CronJob(cronSchedule, async () => {
12
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.StoreCommitmentsExternal, env.getDb());
13
+ env.logger.info(() => ({
14
+ data: { taskRunning },
15
+ msg: `${ScheduledTaskNames.StoreCommitmentsExternal} task running: ${taskRunning}`
16
+ }));
17
+ if (!taskRunning) {
18
+ env.logger.info(() => ({ msg: `${ScheduledTaskNames.StoreCommitmentsExternal} task....` }));
19
+ await tasks.clientTaskManager.storeCommitmentsExternal().catch((err) => {
20
+ env.logger.error(() => ({
21
+ err,
22
+ msg: "Error storing commitments externally"
23
+ }));
24
+ });
25
+ }
26
+ }).start();
32
27
  }
33
- export {
34
- storeCaptchasExternally
35
- };
28
+ //#endregion
29
+ export { storeCaptchasExternally };
@@ -1,36 +1,38 @@
1
- import { ProviderEnvironment } from "@prosopo/env";
1
+ import { checkIfTaskIsRunning } from "../util.js";
2
+ import { Tasks } from "../tasks/tasks.js";
2
3
  import { ScheduledTaskNames } from "@prosopo/types";
4
+ import { ProviderEnvironment } from "@prosopo/env";
3
5
  import { CronJob } from "cron";
4
- import { Tasks } from "../tasks/tasks.js";
5
- import { checkIfTaskIsRunning } from "../util.js";
6
+ //#region src/schedulers/getClientList.ts
7
+ /**
8
+ * Get the list of registered clients that have access to the product on a schedule.
9
+ * @param pair
10
+ * @param cronSchedule
11
+ * @param config
12
+ */
6
13
  async function getClientList(pair, cronSchedule, config) {
7
- const env = new ProviderEnvironment(config, pair);
8
- await env.isReady();
9
- const tasks = new Tasks(env);
10
- const job = new CronJob(cronSchedule, async () => {
11
- const taskRunning = await checkIfTaskIsRunning(
12
- ScheduledTaskNames.GetClientList,
13
- env.getDb()
14
- );
15
- env.logger.info(() => ({
16
- msg: `${ScheduledTaskNames.GetClientList} task running: ${taskRunning}`,
17
- data: { taskRunning }
18
- }));
19
- if (!taskRunning) {
20
- env.logger.info(() => ({
21
- msg: `${ScheduledTaskNames.GetClientList} task....`,
22
- data: {}
23
- }));
24
- await tasks.clientTaskManager.getClientList().catch((err) => {
25
- env.logger.error(() => ({
26
- err,
27
- msg: "Error getting client list"
28
- }));
29
- });
30
- }
31
- });
32
- job.start();
14
+ const env = new ProviderEnvironment(config, pair);
15
+ await env.isReady();
16
+ const tasks = new Tasks(env);
17
+ new CronJob(cronSchedule, async () => {
18
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.GetClientList, env.getDb());
19
+ env.logger.info(() => ({
20
+ msg: `${ScheduledTaskNames.GetClientList} task running: ${taskRunning}`,
21
+ data: { taskRunning }
22
+ }));
23
+ if (!taskRunning) {
24
+ env.logger.info(() => ({
25
+ msg: `${ScheduledTaskNames.GetClientList} task....`,
26
+ data: {}
27
+ }));
28
+ await tasks.clientTaskManager.getClientList().catch((err) => {
29
+ env.logger.error(() => ({
30
+ err,
31
+ msg: "Error getting client list"
32
+ }));
33
+ });
34
+ }
35
+ }).start();
33
36
  }
34
- export {
35
- getClientList
36
- };
37
+ //#endregion
38
+ export { getClientList };
@@ -1,36 +1,38 @@
1
- import { ProviderEnvironment } from "@prosopo/env";
1
+ import { checkIfTaskIsRunning } from "../util.js";
2
+ import { Tasks } from "../tasks/tasks.js";
2
3
  import { ScheduledTaskNames } from "@prosopo/types";
4
+ import { ProviderEnvironment } from "@prosopo/env";
3
5
  import { CronJob } from "cron";
4
- import { Tasks } from "../tasks/tasks.js";
5
- import { checkIfTaskIsRunning } from "../util.js";
6
+ //#region src/schedulers/setClientEntropy.ts
7
+ /**
8
+ * Sets up a cron job to periodically set client entropy
9
+ * @param pair
10
+ * @param cronSchedule
11
+ * @param config
12
+ */
6
13
  async function setClientEntropy(pair, cronSchedule, config) {
7
- const env = new ProviderEnvironment(config, pair);
8
- await env.isReady();
9
- const tasks = new Tasks(env);
10
- const job = new CronJob(cronSchedule, async () => {
11
- const taskRunning = await checkIfTaskIsRunning(
12
- ScheduledTaskNames.SetClientEntropy,
13
- env.getDb()
14
- );
15
- env.logger.info(() => ({
16
- msg: `${ScheduledTaskNames.SetClientEntropy} task running: ${taskRunning}`,
17
- data: { taskRunning }
18
- }));
19
- if (!taskRunning) {
20
- env.logger.info(() => ({
21
- msg: `${ScheduledTaskNames.SetClientEntropy} task....`,
22
- data: {}
23
- }));
24
- await tasks.clientTaskManager.calculateClientEntropy().catch((err) => {
25
- env.logger.error(() => ({
26
- err,
27
- msg: "Error setting client entropy"
28
- }));
29
- });
30
- }
31
- });
32
- job.start();
14
+ const env = new ProviderEnvironment(config, pair);
15
+ await env.isReady();
16
+ const tasks = new Tasks(env);
17
+ new CronJob(cronSchedule, async () => {
18
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.SetClientEntropy, env.getDb());
19
+ env.logger.info(() => ({
20
+ msg: `${ScheduledTaskNames.SetClientEntropy} task running: ${taskRunning}`,
21
+ data: { taskRunning }
22
+ }));
23
+ if (!taskRunning) {
24
+ env.logger.info(() => ({
25
+ msg: `${ScheduledTaskNames.SetClientEntropy} task....`,
26
+ data: {}
27
+ }));
28
+ await tasks.clientTaskManager.calculateClientEntropy().catch((err) => {
29
+ env.logger.error(() => ({
30
+ err,
31
+ msg: "Error setting client entropy"
32
+ }));
33
+ });
34
+ }
35
+ }).start();
33
36
  }
34
- export {
35
- setClientEntropy
36
- };
37
+ //#endregion
38
+ export { setClientEntropy };
@@ -1,46 +1,42 @@
1
- import { ProviderEnvironment } from "@prosopo/env";
1
+ import { checkIfTaskIsRunning } from "../util.js";
2
+ import { updateSpamEmailDomains } from "../tasks/spam/updateSpamEmailDomains.js";
2
3
  import { ScheduledTaskNames } from "@prosopo/types";
4
+ import { ProviderEnvironment } from "@prosopo/env";
3
5
  import { CronJob } from "cron";
4
- import { updateSpamEmailDomains } from "../tasks/spam/updateSpamEmailDomains.js";
5
- import { checkIfTaskIsRunning } from "../util.js";
6
+ //#region src/schedulers/updateSpamEmailDomains.ts
7
+ /**
8
+ * Update spam email domains from configured URLs on a schedule.
9
+ * @param pair
10
+ * @param cronSchedule
11
+ * @param config
12
+ */
6
13
  async function updateSpamEmailDomainsScheduler(pair, cronSchedule, config) {
7
- const env = new ProviderEnvironment(config, pair);
8
- await env.isReady();
9
- const job = new CronJob(cronSchedule, async () => {
10
- const taskRunning = await checkIfTaskIsRunning(
11
- ScheduledTaskNames.UpdateSpamEmailDomains,
12
- env.getDb()
13
- );
14
- env.logger.info(() => ({
15
- msg: `${ScheduledTaskNames.UpdateSpamEmailDomains} task running: ${taskRunning}`,
16
- data: { taskRunning }
17
- }));
18
- if (!taskRunning) {
19
- env.logger.info(() => ({
20
- msg: `${ScheduledTaskNames.UpdateSpamEmailDomains} task....`,
21
- data: {}
22
- }));
23
- const spamEmailDomainsUrls = config.spamEmailDomainsUrls || [];
24
- if (spamEmailDomainsUrls.length === 0) {
25
- env.logger.warn(() => ({
26
- msg: "No spam email domains URLs configured, skipping update"
27
- }));
28
- return;
29
- }
30
- await updateSpamEmailDomains(
31
- env.getDb(),
32
- env.logger,
33
- spamEmailDomainsUrls
34
- ).catch((err) => {
35
- env.logger.error(() => ({
36
- err,
37
- msg: "Error updating spam email domains"
38
- }));
39
- });
40
- }
41
- });
42
- job.start();
14
+ const env = new ProviderEnvironment(config, pair);
15
+ await env.isReady();
16
+ new CronJob(cronSchedule, async () => {
17
+ const taskRunning = await checkIfTaskIsRunning(ScheduledTaskNames.UpdateSpamEmailDomains, env.getDb());
18
+ env.logger.info(() => ({
19
+ msg: `${ScheduledTaskNames.UpdateSpamEmailDomains} task running: ${taskRunning}`,
20
+ data: { taskRunning }
21
+ }));
22
+ if (!taskRunning) {
23
+ env.logger.info(() => ({
24
+ msg: `${ScheduledTaskNames.UpdateSpamEmailDomains} task....`,
25
+ data: {}
26
+ }));
27
+ const spamEmailDomainsUrls = config.spamEmailDomainsUrls || [];
28
+ if (spamEmailDomainsUrls.length === 0) {
29
+ env.logger.warn(() => ({ msg: "No spam email domains URLs configured, skipping update" }));
30
+ return;
31
+ }
32
+ await updateSpamEmailDomains(env.getDb(), env.logger, spamEmailDomainsUrls).catch((err) => {
33
+ env.logger.error(() => ({
34
+ err,
35
+ msg: "Error updating spam email domains"
36
+ }));
37
+ });
38
+ }
39
+ }).start();
43
40
  }
44
- export {
45
- updateSpamEmailDomainsScheduler
46
- };
41
+ //#endregion
42
+ export { updateSpamEmailDomainsScheduler };