@prosopo/provider 4.15.14 → 4.15.15

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 +49 -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,96 +1,83 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
1
+ import { computeDnsAsymmetry, enrichDnsEvent } from "../../tasks/dnsEvent/enrichDnsEvent.js";
2
2
  import { getLogger } from "@prosopo/logger";
3
3
  import { DnsEventBatchSchema } from "@prosopo/types";
4
- import { enrichDnsEvent, computeDnsAsymmetry } from "../../tasks/dnsEvent/enrichDnsEvent.js";
5
- const dnsEventToFields = (event) => {
6
- if (event.kind === "dns") {
7
- return { resolverIp: event.src_ip };
8
- }
9
- const out = {
10
- peerIp: event.src_ip
11
- };
12
- if (typeof event.path_valid === "boolean") {
13
- out.pathValid = event.path_valid;
14
- }
15
- return out;
4
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
5
+ //#region src/api/admin/apiDnsEventEndpoint.ts
6
+ var dnsEventToFields = (event) => {
7
+ if (event.kind === "dns") return { resolverIp: event.src_ip };
8
+ const out = { peerIp: event.src_ip };
9
+ if (typeof event.path_valid === "boolean") out.pathValid = event.path_valid;
10
+ return out;
16
11
  };
17
- class ApiDnsEventEndpoint {
18
- constructor(db, ipInfoService) {
19
- this.db = db;
20
- this.ipInfoService = ipInfoService;
21
- }
22
- async processRequest(args, logger) {
23
- logger = logger ? logger.with({}, "admin:dns-event:ingest") : getLogger("info", "provider:admin:dns-event:ingest");
24
- const { events } = args;
25
- let stored = 0;
26
- let errors = 0;
27
- const now = /* @__PURE__ */ new Date();
28
- for (const event of events) {
29
- const sessionId = event.jti;
30
- if (!sessionId) {
31
- continue;
32
- }
33
- try {
34
- const fields = dnsEventToFields(event);
35
- const matched = await this.db.mergeSessionDnsEvent(
36
- sessionId,
37
- fields,
38
- now
39
- );
40
- if (matched) {
41
- stored += 1;
42
- await this.recomputeDnsAsymmetry(sessionId, logger);
43
- }
44
- } catch (err) {
45
- errors += 1;
46
- logger.warn(() => ({
47
- err,
48
- data: { sessionId, kind: event.kind },
49
- msg: "Failed to merge DNS event into session"
50
- }));
51
- }
52
- }
53
- logger.info(() => ({
54
- data: { received: events.length, stored, errors },
55
- msg: "Processed DNS event batch"
56
- }));
57
- return {
58
- status: ApiEndpointResponseStatus.SUCCESS,
59
- data: { stored, errors }
60
- };
61
- }
62
- getRequestArgsSchema() {
63
- return DnsEventBatchSchema;
64
- }
65
- async recomputeDnsAsymmetry(sessionId, logger) {
66
- if (!this.ipInfoService) return;
67
- try {
68
- const session = await this.db.getSessionRecordBySessionId(sessionId);
69
- if (!session?.dnsEvent) return;
70
- const enriched = await enrichDnsEvent(
71
- session.dnsEvent,
72
- this.ipInfoService,
73
- session.ipInfo?.ip
74
- );
75
- const dnsAsymmetry = computeDnsAsymmetry(enriched, session.ipInfo);
76
- if (dnsAsymmetry > 0) {
77
- await this.db.updateSessionRecord(sessionId, {
78
- scoreComponents: {
79
- ...session.scoreComponents,
80
- dnsAsymmetry
81
- }
82
- });
83
- }
84
- } catch (err) {
85
- logger.warn(() => ({
86
- err,
87
- data: { sessionId },
88
- msg: "Failed to recompute dnsAsymmetry after DNS event merge"
89
- }));
90
- }
91
- }
92
- }
93
- export {
94
- ApiDnsEventEndpoint,
95
- dnsEventToFields
12
+ var ApiDnsEventEndpoint = class {
13
+ constructor(db, ipInfoService) {
14
+ this.db = db;
15
+ this.ipInfoService = ipInfoService;
16
+ }
17
+ async processRequest(args, logger) {
18
+ logger = logger ? logger.with({}, "admin:dns-event:ingest") : getLogger("info", "provider:admin:dns-event:ingest");
19
+ const { events } = args;
20
+ let stored = 0;
21
+ let errors = 0;
22
+ const now = /* @__PURE__ */ new Date();
23
+ for (const event of events) {
24
+ const sessionId = event.jti;
25
+ if (!sessionId) continue;
26
+ try {
27
+ const fields = dnsEventToFields(event);
28
+ if (await this.db.mergeSessionDnsEvent(sessionId, fields, now)) {
29
+ stored += 1;
30
+ await this.recomputeDnsAsymmetry(sessionId, logger);
31
+ }
32
+ } catch (err) {
33
+ errors += 1;
34
+ logger.warn(() => ({
35
+ err,
36
+ data: {
37
+ sessionId,
38
+ kind: event.kind
39
+ },
40
+ msg: "Failed to merge DNS event into session"
41
+ }));
42
+ }
43
+ }
44
+ logger.info(() => ({
45
+ data: {
46
+ received: events.length,
47
+ stored,
48
+ errors
49
+ },
50
+ msg: "Processed DNS event batch"
51
+ }));
52
+ return {
53
+ status: ApiEndpointResponseStatus.SUCCESS,
54
+ data: {
55
+ stored,
56
+ errors
57
+ }
58
+ };
59
+ }
60
+ getRequestArgsSchema() {
61
+ return DnsEventBatchSchema;
62
+ }
63
+ async recomputeDnsAsymmetry(sessionId, logger) {
64
+ if (!this.ipInfoService) return;
65
+ try {
66
+ const session = await this.db.getSessionRecordBySessionId(sessionId);
67
+ if (!session?.dnsEvent) return;
68
+ const dnsAsymmetry = computeDnsAsymmetry(await enrichDnsEvent(session.dnsEvent, this.ipInfoService, session.ipInfo?.ip), session.ipInfo);
69
+ if (dnsAsymmetry > 0) await this.db.updateSessionRecord(sessionId, { scoreComponents: {
70
+ ...session.scoreComponents,
71
+ dnsAsymmetry
72
+ } });
73
+ } catch (err) {
74
+ logger.warn(() => ({
75
+ err,
76
+ data: { sessionId },
77
+ msg: "Failed to recompute dnsAsymmetry after DNS event merge"
78
+ }));
79
+ }
80
+ }
96
81
  };
82
+ //#endregion
83
+ export { ApiDnsEventEndpoint, dnsEventToFields };
@@ -1,49 +1,47 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
2
  import { GetAllDecisionMachinesResponse } from "@prosopo/types";
4
3
  import { object } from "zod";
5
- class ApiGetAllDecisionMachinesEndpoint {
6
- constructor(clientTaskManager) {
7
- this.clientTaskManager = clientTaskManager;
8
- }
9
- async processRequest(args, logger) {
10
- logger = logger ? logger.with({}, "admin:decision-machines:get-all") : getLogger("info", "provider:admin:decision-machines:get-all");
11
- try {
12
- logger.info(() => ({
13
- msg: "Getting all decision machines"
14
- }));
15
- const result = await this.clientTaskManager.getAllDecisionMachines();
16
- logger.info(() => ({
17
- msg: "Retrieved all decision machines",
18
- data: { count: result.length }
19
- }));
20
- logger.info(() => ({
21
- msg: "Result before parsing",
22
- data: { result }
23
- }));
24
- logger.info(() => ({
25
- msg: "Schema definition",
26
- data: { schema: GetAllDecisionMachinesResponse.toString() }
27
- }));
28
- return {
29
- status: ApiEndpointResponseStatus.SUCCESS,
30
- data: GetAllDecisionMachinesResponse.parse(result)
31
- };
32
- } catch (error) {
33
- logger.error(() => ({
34
- msg: "Error getting all decision machines",
35
- err: error
36
- }));
37
- return {
38
- status: ApiEndpointResponseStatus.FAIL,
39
- error: error.message
40
- };
41
- }
42
- }
43
- getRequestArgsSchema() {
44
- return object({});
45
- }
46
- }
47
- export {
48
- ApiGetAllDecisionMachinesEndpoint
4
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
5
+ //#region src/api/admin/apiGetAllDecisionMachinesEndpoint.ts
6
+ var ApiGetAllDecisionMachinesEndpoint = class {
7
+ constructor(clientTaskManager) {
8
+ this.clientTaskManager = clientTaskManager;
9
+ }
10
+ async processRequest(args, logger) {
11
+ logger = logger ? logger.with({}, "admin:decision-machines:get-all") : getLogger("info", "provider:admin:decision-machines:get-all");
12
+ try {
13
+ logger.info(() => ({ msg: "Getting all decision machines" }));
14
+ const result = await this.clientTaskManager.getAllDecisionMachines();
15
+ logger.info(() => ({
16
+ msg: "Retrieved all decision machines",
17
+ data: { count: result.length }
18
+ }));
19
+ logger.info(() => ({
20
+ msg: "Result before parsing",
21
+ data: { result }
22
+ }));
23
+ logger.info(() => ({
24
+ msg: "Schema definition",
25
+ data: { schema: GetAllDecisionMachinesResponse.toString() }
26
+ }));
27
+ return {
28
+ status: ApiEndpointResponseStatus.SUCCESS,
29
+ data: GetAllDecisionMachinesResponse.parse(result)
30
+ };
31
+ } catch (error) {
32
+ logger.error(() => ({
33
+ msg: "Error getting all decision machines",
34
+ err: error
35
+ }));
36
+ return {
37
+ status: ApiEndpointResponseStatus.FAIL,
38
+ error: error.message
39
+ };
40
+ }
41
+ }
42
+ getRequestArgsSchema() {
43
+ return object({});
44
+ }
49
45
  };
46
+ //#endregion
47
+ export { ApiGetAllDecisionMachinesEndpoint };
@@ -1,42 +1,42 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
- import { GetDecisionMachineResponse, GetDecisionMachineBody } from "@prosopo/types";
4
- class ApiGetDecisionMachineEndpoint {
5
- constructor(clientTaskManager) {
6
- this.clientTaskManager = clientTaskManager;
7
- }
8
- async processRequest(args, logger) {
9
- logger = logger ? logger.with({}, "admin:decision-machine:get") : getLogger("info", "provider:admin:decision-machine:get");
10
- try {
11
- const { id } = args;
12
- logger.info(() => ({
13
- msg: "Getting decision machine",
14
- data: { id }
15
- }));
16
- const result = await this.clientTaskManager.getDecisionMachine(id);
17
- logger.info(() => ({
18
- msg: "Retrieved decision machine",
19
- data: { id }
20
- }));
21
- return {
22
- status: ApiEndpointResponseStatus.SUCCESS,
23
- data: GetDecisionMachineResponse.parse(result)
24
- };
25
- } catch (error) {
26
- logger.error(() => ({
27
- msg: "Error getting decision machine",
28
- err: error
29
- }));
30
- return {
31
- status: ApiEndpointResponseStatus.FAIL,
32
- error: error.message
33
- };
34
- }
35
- }
36
- getRequestArgsSchema() {
37
- return GetDecisionMachineBody;
38
- }
39
- }
40
- export {
41
- ApiGetDecisionMachineEndpoint
2
+ import { GetDecisionMachineBody, GetDecisionMachineResponse } from "@prosopo/types";
3
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
4
+ //#region src/api/admin/apiGetDecisionMachineEndpoint.ts
5
+ var ApiGetDecisionMachineEndpoint = class {
6
+ constructor(clientTaskManager) {
7
+ this.clientTaskManager = clientTaskManager;
8
+ }
9
+ async processRequest(args, logger) {
10
+ logger = logger ? logger.with({}, "admin:decision-machine:get") : getLogger("info", "provider:admin:decision-machine:get");
11
+ try {
12
+ const { id } = args;
13
+ logger.info(() => ({
14
+ msg: "Getting decision machine",
15
+ data: { id }
16
+ }));
17
+ const result = await this.clientTaskManager.getDecisionMachine(id);
18
+ logger.info(() => ({
19
+ msg: "Retrieved decision machine",
20
+ data: { id }
21
+ }));
22
+ return {
23
+ status: ApiEndpointResponseStatus.SUCCESS,
24
+ data: GetDecisionMachineResponse.parse(result)
25
+ };
26
+ } catch (error) {
27
+ logger.error(() => ({
28
+ msg: "Error getting decision machine",
29
+ err: error
30
+ }));
31
+ return {
32
+ status: ApiEndpointResponseStatus.FAIL,
33
+ error: error.message
34
+ };
35
+ }
36
+ }
37
+ getRequestArgsSchema() {
38
+ return GetDecisionMachineBody;
39
+ }
42
40
  };
41
+ //#endregion
42
+ export { ApiGetDecisionMachineEndpoint };
@@ -1,25 +1,26 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
2
  import { ClientSettingsSchema, RegisterSitekeyBody } from "@prosopo/types";
4
- class ApiRegisterSiteKeyEndpoint {
5
- constructor(clientTaskManager) {
6
- this.clientTaskManager = clientTaskManager;
7
- }
8
- async processRequest(args, logger) {
9
- const { siteKey, tier, settings } = args;
10
- logger = logger ? logger.with({}, "admin:site-key:register") : getLogger("info", "provider:admin:site-key:register");
11
- const temp = settings || ClientSettingsSchema.parse({});
12
- logger.info(() => ({ data: { siteKey }, msg: "`Registering site key" }));
13
- await this.clientTaskManager.registerSiteKey(siteKey, tier, temp);
14
- logger.info(() => ({ msg: "Site key registered" }));
15
- return {
16
- status: ApiEndpointResponseStatus.SUCCESS
17
- };
18
- }
19
- getRequestArgsSchema() {
20
- return RegisterSitekeyBody;
21
- }
22
- }
23
- export {
24
- ApiRegisterSiteKeyEndpoint
3
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
4
+ //#region src/api/admin/apiRegisterSiteKeyEndpoint.ts
5
+ var ApiRegisterSiteKeyEndpoint = class {
6
+ constructor(clientTaskManager) {
7
+ this.clientTaskManager = clientTaskManager;
8
+ }
9
+ async processRequest(args, logger) {
10
+ const { siteKey, tier, settings } = args;
11
+ logger = logger ? logger.with({}, "admin:site-key:register") : getLogger("info", "provider:admin:site-key:register");
12
+ const temp = settings || ClientSettingsSchema.parse({});
13
+ logger.info(() => ({
14
+ data: { siteKey },
15
+ msg: "`Registering site key"
16
+ }));
17
+ await this.clientTaskManager.registerSiteKey(siteKey, tier, temp);
18
+ logger.info(() => ({ msg: "Site key registered" }));
19
+ return { status: ApiEndpointResponseStatus.SUCCESS };
20
+ }
21
+ getRequestArgsSchema() {
22
+ return RegisterSitekeyBody;
23
+ }
25
24
  };
25
+ //#endregion
26
+ export { ApiRegisterSiteKeyEndpoint };
@@ -1,33 +1,29 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
2
  import { ClientSettingsSchema, RegisterSitekeysBody } from "@prosopo/types";
4
- class ApiRegisterSiteKeysEndpoint {
5
- constructor(clientTaskManager) {
6
- this.clientTaskManager = clientTaskManager;
7
- }
8
- async processRequest(args, logger) {
9
- logger = logger ? logger.with({}, "admin:site-keys:register") : getLogger("info", "provider:admin:site-keys:register");
10
- logger.info(() => ({
11
- data: { count: args.length },
12
- msg: "Registering site keys"
13
- }));
14
- const siteKeys = args.map(({ siteKey, tier, settings }) => ({
15
- siteKey,
16
- tier,
17
- settings: settings || ClientSettingsSchema.parse({
18
- domains: ["localhost"]
19
- })
20
- }));
21
- await this.clientTaskManager.registerSiteKeys(siteKeys);
22
- logger.info(() => ({ msg: "Site keys registered" }));
23
- return {
24
- status: ApiEndpointResponseStatus.SUCCESS
25
- };
26
- }
27
- getRequestArgsSchema() {
28
- return RegisterSitekeysBody;
29
- }
30
- }
31
- export {
32
- ApiRegisterSiteKeysEndpoint
3
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
4
+ //#region src/api/admin/apiRegisterSiteKeysEndpoint.ts
5
+ var ApiRegisterSiteKeysEndpoint = class {
6
+ constructor(clientTaskManager) {
7
+ this.clientTaskManager = clientTaskManager;
8
+ }
9
+ async processRequest(args, logger) {
10
+ logger = logger ? logger.with({}, "admin:site-keys:register") : getLogger("info", "provider:admin:site-keys:register");
11
+ logger.info(() => ({
12
+ data: { count: args.length },
13
+ msg: "Registering site keys"
14
+ }));
15
+ const siteKeys = args.map(({ siteKey, tier, settings }) => ({
16
+ siteKey,
17
+ tier,
18
+ settings: settings || ClientSettingsSchema.parse({ domains: ["localhost"] })
19
+ }));
20
+ await this.clientTaskManager.registerSiteKeys(siteKeys);
21
+ logger.info(() => ({ msg: "Site keys registered" }));
22
+ return { status: ApiEndpointResponseStatus.SUCCESS };
23
+ }
24
+ getRequestArgsSchema() {
25
+ return RegisterSitekeysBody;
26
+ }
33
27
  };
28
+ //#endregion
29
+ export { ApiRegisterSiteKeysEndpoint };
@@ -1,41 +1,39 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
2
  import { RemoveAllDecisionMachinesResponse } from "@prosopo/types";
4
3
  import { object } from "zod";
5
- class ApiRemoveAllDecisionMachinesEndpoint {
6
- constructor(clientTaskManager) {
7
- this.clientTaskManager = clientTaskManager;
8
- }
9
- async processRequest(args, logger) {
10
- logger = logger ? logger.with({}, "admin:decision-machines:remove-all") : getLogger("info", "provider:admin:decision-machines:remove-all");
11
- try {
12
- logger.info(() => ({
13
- msg: "Removing all decision machines"
14
- }));
15
- const result = await this.clientTaskManager.removeAllDecisionMachines();
16
- logger.info(() => ({
17
- msg: "All decision machines removed",
18
- data: result
19
- }));
20
- return {
21
- status: ApiEndpointResponseStatus.SUCCESS,
22
- data: RemoveAllDecisionMachinesResponse.parse(result)
23
- };
24
- } catch (error) {
25
- logger.error(() => ({
26
- msg: "Error removing all decision machines",
27
- err: error
28
- }));
29
- return {
30
- status: ApiEndpointResponseStatus.FAIL,
31
- error: error.message
32
- };
33
- }
34
- }
35
- getRequestArgsSchema() {
36
- return object({});
37
- }
38
- }
39
- export {
40
- ApiRemoveAllDecisionMachinesEndpoint
4
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
5
+ //#region src/api/admin/apiRemoveAllDecisionMachinesEndpoint.ts
6
+ var ApiRemoveAllDecisionMachinesEndpoint = class {
7
+ constructor(clientTaskManager) {
8
+ this.clientTaskManager = clientTaskManager;
9
+ }
10
+ async processRequest(args, logger) {
11
+ logger = logger ? logger.with({}, "admin:decision-machines:remove-all") : getLogger("info", "provider:admin:decision-machines:remove-all");
12
+ try {
13
+ logger.info(() => ({ msg: "Removing all decision machines" }));
14
+ const result = await this.clientTaskManager.removeAllDecisionMachines();
15
+ logger.info(() => ({
16
+ msg: "All decision machines removed",
17
+ data: result
18
+ }));
19
+ return {
20
+ status: ApiEndpointResponseStatus.SUCCESS,
21
+ data: RemoveAllDecisionMachinesResponse.parse(result)
22
+ };
23
+ } catch (error) {
24
+ logger.error(() => ({
25
+ msg: "Error removing all decision machines",
26
+ err: error
27
+ }));
28
+ return {
29
+ status: ApiEndpointResponseStatus.FAIL,
30
+ error: error.message
31
+ };
32
+ }
33
+ }
34
+ getRequestArgsSchema() {
35
+ return object({});
36
+ }
41
37
  };
38
+ //#endregion
39
+ export { ApiRemoveAllDecisionMachinesEndpoint };
@@ -1,42 +1,42 @@
1
- import { ApiEndpointResponseStatus } from "@prosopo/api-route";
2
1
  import { getLogger } from "@prosopo/logger";
3
- import { RemoveDecisionMachineResponse, RemoveDecisionMachineBody } from "@prosopo/types";
4
- class ApiRemoveDecisionMachineEndpoint {
5
- constructor(clientTaskManager) {
6
- this.clientTaskManager = clientTaskManager;
7
- }
8
- async processRequest(args, logger) {
9
- logger = logger ? logger.with({}, "admin:decision-machine:remove") : getLogger("info", "provider:admin:decision-machine:remove");
10
- try {
11
- const { id } = args;
12
- logger.info(() => ({
13
- msg: "Removing decision machine",
14
- data: { id }
15
- }));
16
- const result = await this.clientTaskManager.removeDecisionMachine(id);
17
- logger.info(() => ({
18
- msg: "Decision machine removed",
19
- data: result
20
- }));
21
- return {
22
- status: ApiEndpointResponseStatus.SUCCESS,
23
- data: RemoveDecisionMachineResponse.parse(result)
24
- };
25
- } catch (error) {
26
- logger.error(() => ({
27
- msg: "Error removing decision machine",
28
- err: error
29
- }));
30
- return {
31
- status: ApiEndpointResponseStatus.FAIL,
32
- error: error.message
33
- };
34
- }
35
- }
36
- getRequestArgsSchema() {
37
- return RemoveDecisionMachineBody;
38
- }
39
- }
40
- export {
41
- ApiRemoveDecisionMachineEndpoint
2
+ import { RemoveDecisionMachineBody, RemoveDecisionMachineResponse } from "@prosopo/types";
3
+ import { ApiEndpointResponseStatus } from "@prosopo/api-route";
4
+ //#region src/api/admin/apiRemoveDecisionMachineEndpoint.ts
5
+ var ApiRemoveDecisionMachineEndpoint = class {
6
+ constructor(clientTaskManager) {
7
+ this.clientTaskManager = clientTaskManager;
8
+ }
9
+ async processRequest(args, logger) {
10
+ logger = logger ? logger.with({}, "admin:decision-machine:remove") : getLogger("info", "provider:admin:decision-machine:remove");
11
+ try {
12
+ const { id } = args;
13
+ logger.info(() => ({
14
+ msg: "Removing decision machine",
15
+ data: { id }
16
+ }));
17
+ const result = await this.clientTaskManager.removeDecisionMachine(id);
18
+ logger.info(() => ({
19
+ msg: "Decision machine removed",
20
+ data: result
21
+ }));
22
+ return {
23
+ status: ApiEndpointResponseStatus.SUCCESS,
24
+ data: RemoveDecisionMachineResponse.parse(result)
25
+ };
26
+ } catch (error) {
27
+ logger.error(() => ({
28
+ msg: "Error removing decision machine",
29
+ err: error
30
+ }));
31
+ return {
32
+ status: ApiEndpointResponseStatus.FAIL,
33
+ error: error.message
34
+ };
35
+ }
36
+ }
37
+ getRequestArgsSchema() {
38
+ return RemoveDecisionMachineBody;
39
+ }
42
40
  };
41
+ //#endregion
42
+ export { ApiRemoveDecisionMachineEndpoint };
@@ -1 +1 @@
1
- {"version":3,"file":"apiRemoveDetectorKeyEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiRemoveDetectorKeyEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,KAAK,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAElE,cAAM,4BACL,YAAW,WAAW,CAAC,yBAAyB,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAElE,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACxC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA0BxB,oBAAoB;qBAM4orG,EAAG,SAAS;;;;;;;;;CAHnrrG;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
1
+ {"version":3,"file":"apiRemoveDetectorKeyEndpoint.d.ts","sourceRoot":"","sources":["../../../src/api/admin/apiRemoveDetectorKeyEndpoint.ts"],"names":[],"mappings":"AAcA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAExB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,KAAK,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AAElE,cAAM,4BACL,YAAW,WAAW,CAAC,yBAAyB,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAElE,cAAc,CACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACxC,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IA0BxB,oBAAoB;qBAMo/sG,EAAG,SAAS;;;;;;;;;CAH3htG;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}