@prosopo/database 4.2.10 → 4.4.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 (316) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +3 -3
  2. package/.turbo/{turbo-build.log → turbo-build$colon$esm.log} +15 -16
  3. package/.turbo/turbo-build$colon$tsc.log +15 -15
  4. package/.turbo/turbo-build$colon$types.log +1 -0
  5. package/CHANGELOG.md +54 -0
  6. package/dist/cjs/databases/client.cjs +3 -1
  7. package/dist/cjs/databases/provider.cjs +6 -4
  8. package/dist/{databases → esm/databases}/client.js +3 -1
  9. package/dist/{databases → esm/databases}/provider.js +6 -4
  10. package/dist/tsc/base/index.d.ts.map +1 -0
  11. package/dist/tsc/base/index.js +3 -0
  12. package/dist/tsc/base/index.js.map +1 -0
  13. package/dist/tsc/base/mongo.d.ts.map +1 -0
  14. package/dist/tsc/base/mongo.js +142 -0
  15. package/dist/tsc/base/mongo.js.map +1 -0
  16. package/dist/tsc/base/mongoMemory.d.ts.map +1 -0
  17. package/dist/tsc/base/mongoMemory.js +21 -0
  18. package/dist/tsc/base/mongoMemory.js.map +1 -0
  19. package/dist/tsc/databases/captcha.d.ts.map +1 -0
  20. package/dist/tsc/databases/captcha.js +276 -0
  21. package/dist/tsc/databases/captcha.js.map +1 -0
  22. package/dist/tsc/databases/centralDbStreamer.d.ts.map +1 -0
  23. package/dist/tsc/databases/centralDbStreamer.js +163 -0
  24. package/dist/tsc/databases/centralDbStreamer.js.map +1 -0
  25. package/dist/{databases → tsc/databases}/client.d.ts +1 -1
  26. package/dist/tsc/databases/client.d.ts.map +1 -0
  27. package/dist/tsc/databases/client.js +72 -0
  28. package/dist/tsc/databases/client.js.map +1 -0
  29. package/dist/tsc/databases/clientRecordCache.d.ts.map +1 -0
  30. package/dist/tsc/databases/clientRecordCache.js +31 -0
  31. package/dist/tsc/databases/clientRecordCache.js.map +1 -0
  32. package/dist/tsc/databases/index.d.ts.map +1 -0
  33. package/dist/tsc/databases/index.js +18 -0
  34. package/dist/tsc/databases/index.js.map +1 -0
  35. package/dist/{databases → tsc/databases}/provider.d.ts +3 -3
  36. package/dist/tsc/databases/provider.d.ts.map +1 -0
  37. package/dist/tsc/databases/provider.js +2054 -0
  38. package/dist/tsc/databases/provider.js.map +1 -0
  39. package/dist/tsc/errorSites.d.ts.map +1 -0
  40. package/dist/{errorSites.js.map → tsc/errorSites.js.map} +1 -1
  41. package/dist/tsc/index.d.ts.map +1 -0
  42. package/dist/tsc/index.js +7 -0
  43. package/dist/tsc/index.js.map +1 -0
  44. package/dist/tsc/mongooseOptions.d.ts.map +1 -0
  45. package/dist/tsc/mongooseOptions.js +56 -0
  46. package/dist/tsc/mongooseOptions.js.map +1 -0
  47. package/dist/tsc/redisCache.d.ts.map +1 -0
  48. package/dist/tsc/redisCache.js +340 -0
  49. package/dist/tsc/redisCache.js.map +1 -0
  50. package/dist/tsc/tests/integration/centralStreamingEnrichment.integration.test.d.ts.map +1 -0
  51. package/dist/tsc/tests/integration/centralStreamingEnrichment.integration.test.js.map +1 -0
  52. package/dist/tsc/tests/integration/clientRecordCache.integration.test.d.ts.map +1 -0
  53. package/dist/tsc/tests/integration/clientRecordCache.integration.test.js.map +1 -0
  54. package/dist/tsc/tests/integration/commitmentRecordProjection.integration.test.d.ts.map +1 -0
  55. package/dist/tsc/tests/integration/commitmentRecordProjection.integration.test.js.map +1 -0
  56. package/dist/tsc/tests/integration/commitmentUpdateTimestamp.integration.test.d.ts.map +1 -0
  57. package/dist/tsc/tests/integration/commitmentUpdateTimestamp.integration.test.js.map +1 -0
  58. package/dist/tsc/tests/integration/commitmentUpsertNoMutation.integration.test.d.ts.map +1 -0
  59. package/dist/tsc/tests/integration/commitmentUpsertNoMutation.integration.test.js.map +1 -0
  60. package/dist/tsc/tests/integration/countCommitmentsByNormalisedEmail.integration.test.d.ts.map +1 -0
  61. package/dist/tsc/tests/integration/countCommitmentsByNormalisedEmail.integration.test.js.map +1 -0
  62. package/dist/tsc/tests/integration/getUpdatedClients.integration.test.d.ts.map +1 -0
  63. package/dist/{tests → tsc/tests}/integration/getUpdatedClients.integration.test.js +39 -1
  64. package/dist/tsc/tests/integration/getUpdatedClients.integration.test.js.map +1 -0
  65. package/dist/tsc/tests/integration/ipInfoPersistence.integration.test.d.ts.map +1 -0
  66. package/dist/tsc/tests/integration/ipInfoPersistence.integration.test.js.map +1 -0
  67. package/dist/tsc/tests/integration/projectionContract.d.ts.map +1 -0
  68. package/dist/tsc/tests/integration/projectionContract.js.map +1 -0
  69. package/dist/tsc/tests/integration/projectionContracts.integration.test.d.ts.map +1 -0
  70. package/dist/tsc/tests/integration/projectionContracts.integration.test.js.map +1 -0
  71. package/dist/tsc/tests/integration/providedIpPipelineCast.integration.test.d.ts.map +1 -0
  72. package/dist/tsc/tests/integration/providedIpPipelineCast.integration.test.js.map +1 -0
  73. package/dist/tsc/tests/integration/puzzleCentralStreaming.integration.test.d.ts.map +1 -0
  74. package/dist/tsc/tests/integration/puzzleCentralStreaming.integration.test.js.map +1 -0
  75. package/dist/tsc/tests/integration/redisCacheSessionPatch.integration.test.d.ts.map +1 -0
  76. package/dist/tsc/tests/integration/redisCacheSessionPatch.integration.test.js.map +1 -0
  77. package/dist/tsc/tests/integration/saveCaptchasSessionUpsert.integration.test.d.ts.map +1 -0
  78. package/dist/tsc/tests/integration/saveCaptchasSessionUpsert.integration.test.js.map +1 -0
  79. package/dist/tsc/tests/integration/serverCheckClaim.integration.test.d.ts.map +1 -0
  80. package/dist/tsc/tests/integration/serverCheckClaim.integration.test.js.map +1 -0
  81. package/dist/tsc/tests/integration/sessionRecordProjection.integration.test.d.ts.map +1 -0
  82. package/dist/tsc/tests/integration/sessionRecordProjection.integration.test.js.map +1 -0
  83. package/dist/tsc/tests/mongoGlobalSetup.d.ts.map +1 -0
  84. package/dist/tsc/tests/mongoGlobalSetup.js.map +1 -0
  85. package/dist/tsc/tests/mongooseOptions.unit.test.d.ts.map +1 -0
  86. package/dist/tsc/tests/mongooseOptions.unit.test.js.map +1 -0
  87. package/dist/tsc/tests/unit/base/mongo.unit.test.d.ts.map +1 -0
  88. package/dist/tsc/tests/unit/base/mongo.unit.test.js.map +1 -0
  89. package/dist/tsc/tests/unit/captchaLabel.unit.test.d.ts.map +1 -0
  90. package/dist/tsc/tests/unit/captchaLabel.unit.test.js.map +1 -0
  91. package/dist/tsc/tests/unit/databases/centralDbStreamer.unit.test.d.ts.map +1 -0
  92. package/dist/tsc/tests/unit/databases/centralDbStreamer.unit.test.js.map +1 -0
  93. package/dist/tsc/tests/unit/detectorBundleTtl.unit.test.d.ts.map +1 -0
  94. package/dist/tsc/tests/unit/detectorBundleTtl.unit.test.js.map +1 -0
  95. package/dist/tsc/tests/unit/inputMethods.unit.test.d.ts.map +1 -0
  96. package/dist/tsc/tests/unit/inputMethods.unit.test.js.map +1 -0
  97. package/dist/tsc/tests/unit/redisCacheEscalation.unit.test.d.ts.map +1 -0
  98. package/dist/tsc/tests/unit/redisCacheEscalation.unit.test.js.map +1 -0
  99. package/dist/types/base/index.d.ts +3 -0
  100. package/dist/types/base/index.d.ts.map +1 -0
  101. package/dist/types/base/mongo.d.ts +24 -0
  102. package/dist/types/base/mongo.d.ts.map +1 -0
  103. package/dist/types/base/mongoMemory.d.ts +10 -0
  104. package/dist/types/base/mongoMemory.d.ts.map +1 -0
  105. package/dist/types/databases/captcha.d.ts +34 -0
  106. package/dist/types/databases/captcha.d.ts.map +1 -0
  107. package/dist/types/databases/centralDbStreamer.d.ts +29 -0
  108. package/dist/types/databases/centralDbStreamer.d.ts.map +1 -0
  109. package/dist/types/databases/client.d.ts +12 -0
  110. package/dist/types/databases/client.d.ts.map +1 -0
  111. package/dist/types/databases/clientRecordCache.d.ts +11 -0
  112. package/dist/types/databases/clientRecordCache.d.ts.map +1 -0
  113. package/dist/types/databases/index.d.ts +17 -0
  114. package/dist/types/databases/index.d.ts.map +1 -0
  115. package/dist/types/databases/provider.d.ts +171 -0
  116. package/dist/types/databases/provider.d.ts.map +1 -0
  117. package/dist/types/errorSites.d.ts +57 -0
  118. package/dist/types/errorSites.d.ts.map +1 -0
  119. package/dist/types/index.d.ts +5 -0
  120. package/dist/types/index.d.ts.map +1 -0
  121. package/dist/types/mongooseOptions.d.ts +15 -0
  122. package/dist/types/mongooseOptions.d.ts.map +1 -0
  123. package/dist/types/redisCache.d.ts +26 -0
  124. package/dist/types/redisCache.d.ts.map +1 -0
  125. package/dist/types/tests/integration/centralStreamingEnrichment.integration.test.d.ts +2 -0
  126. package/dist/types/tests/integration/centralStreamingEnrichment.integration.test.d.ts.map +1 -0
  127. package/dist/types/tests/integration/clientRecordCache.integration.test.d.ts +2 -0
  128. package/dist/types/tests/integration/clientRecordCache.integration.test.d.ts.map +1 -0
  129. package/dist/types/tests/integration/commitmentRecordProjection.integration.test.d.ts +2 -0
  130. package/dist/types/tests/integration/commitmentRecordProjection.integration.test.d.ts.map +1 -0
  131. package/dist/types/tests/integration/commitmentUpdateTimestamp.integration.test.d.ts +2 -0
  132. package/dist/types/tests/integration/commitmentUpdateTimestamp.integration.test.d.ts.map +1 -0
  133. package/dist/types/tests/integration/commitmentUpsertNoMutation.integration.test.d.ts +2 -0
  134. package/dist/types/tests/integration/commitmentUpsertNoMutation.integration.test.d.ts.map +1 -0
  135. package/dist/types/tests/integration/countCommitmentsByNormalisedEmail.integration.test.d.ts +2 -0
  136. package/dist/types/tests/integration/countCommitmentsByNormalisedEmail.integration.test.d.ts.map +1 -0
  137. package/dist/types/tests/integration/getUpdatedClients.integration.test.d.ts +2 -0
  138. package/dist/types/tests/integration/getUpdatedClients.integration.test.d.ts.map +1 -0
  139. package/dist/types/tests/integration/ipInfoPersistence.integration.test.d.ts +2 -0
  140. package/dist/types/tests/integration/ipInfoPersistence.integration.test.d.ts.map +1 -0
  141. package/dist/types/tests/integration/projectionContract.d.ts +9 -0
  142. package/dist/types/tests/integration/projectionContract.d.ts.map +1 -0
  143. package/dist/types/tests/integration/projectionContracts.integration.test.d.ts +2 -0
  144. package/dist/types/tests/integration/projectionContracts.integration.test.d.ts.map +1 -0
  145. package/dist/types/tests/integration/providedIpPipelineCast.integration.test.d.ts +2 -0
  146. package/dist/types/tests/integration/providedIpPipelineCast.integration.test.d.ts.map +1 -0
  147. package/dist/types/tests/integration/puzzleCentralStreaming.integration.test.d.ts +2 -0
  148. package/dist/types/tests/integration/puzzleCentralStreaming.integration.test.d.ts.map +1 -0
  149. package/dist/types/tests/integration/redisCacheSessionPatch.integration.test.d.ts +2 -0
  150. package/dist/types/tests/integration/redisCacheSessionPatch.integration.test.d.ts.map +1 -0
  151. package/dist/types/tests/integration/saveCaptchasSessionUpsert.integration.test.d.ts +2 -0
  152. package/dist/types/tests/integration/saveCaptchasSessionUpsert.integration.test.d.ts.map +1 -0
  153. package/dist/types/tests/integration/serverCheckClaim.integration.test.d.ts +2 -0
  154. package/dist/types/tests/integration/serverCheckClaim.integration.test.d.ts.map +1 -0
  155. package/dist/types/tests/integration/sessionRecordProjection.integration.test.d.ts +2 -0
  156. package/dist/types/tests/integration/sessionRecordProjection.integration.test.d.ts.map +1 -0
  157. package/dist/types/tests/mongoGlobalSetup.d.ts +2 -0
  158. package/dist/types/tests/mongoGlobalSetup.d.ts.map +1 -0
  159. package/dist/types/tests/mongooseOptions.unit.test.d.ts +2 -0
  160. package/dist/types/tests/mongooseOptions.unit.test.d.ts.map +1 -0
  161. package/dist/types/tests/unit/base/mongo.unit.test.d.ts +2 -0
  162. package/dist/types/tests/unit/base/mongo.unit.test.d.ts.map +1 -0
  163. package/dist/types/tests/unit/captchaLabel.unit.test.d.ts +2 -0
  164. package/dist/types/tests/unit/captchaLabel.unit.test.d.ts.map +1 -0
  165. package/dist/types/tests/unit/databases/centralDbStreamer.unit.test.d.ts +2 -0
  166. package/dist/types/tests/unit/databases/centralDbStreamer.unit.test.d.ts.map +1 -0
  167. package/dist/types/tests/unit/detectorBundleTtl.unit.test.d.ts +2 -0
  168. package/dist/types/tests/unit/detectorBundleTtl.unit.test.d.ts.map +1 -0
  169. package/dist/types/tests/unit/inputMethods.unit.test.d.ts +2 -0
  170. package/dist/types/tests/unit/inputMethods.unit.test.d.ts.map +1 -0
  171. package/dist/types/tests/unit/redisCacheEscalation.unit.test.d.ts +2 -0
  172. package/dist/types/tests/unit/redisCacheEscalation.unit.test.d.ts.map +1 -0
  173. package/package.json +16 -17
  174. package/dist/base/index.d.ts.map +0 -1
  175. package/dist/base/index.js.map +0 -1
  176. package/dist/base/mongo.d.ts.map +0 -1
  177. package/dist/base/mongo.js.map +0 -1
  178. package/dist/base/mongoMemory.d.ts.map +0 -1
  179. package/dist/base/mongoMemory.js.map +0 -1
  180. package/dist/databases/captcha.d.ts.map +0 -1
  181. package/dist/databases/captcha.js.map +0 -1
  182. package/dist/databases/centralDbStreamer.d.ts.map +0 -1
  183. package/dist/databases/centralDbStreamer.js.map +0 -1
  184. package/dist/databases/client.d.ts.map +0 -1
  185. package/dist/databases/client.js.map +0 -1
  186. package/dist/databases/clientRecordCache.d.ts.map +0 -1
  187. package/dist/databases/clientRecordCache.js.map +0 -1
  188. package/dist/databases/index.d.ts.map +0 -1
  189. package/dist/databases/index.js.map +0 -1
  190. package/dist/databases/provider.d.ts.map +0 -1
  191. package/dist/databases/provider.js.map +0 -1
  192. package/dist/errorSites.d.ts.map +0 -1
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js.map +0 -1
  195. package/dist/mongooseOptions.d.ts.map +0 -1
  196. package/dist/mongooseOptions.js.map +0 -1
  197. package/dist/redisCache.d.ts.map +0 -1
  198. package/dist/redisCache.js.map +0 -1
  199. package/dist/tests/integration/centralStreamingEnrichment.integration.test.d.ts.map +0 -1
  200. package/dist/tests/integration/centralStreamingEnrichment.integration.test.js.map +0 -1
  201. package/dist/tests/integration/clientRecordCache.integration.test.d.ts.map +0 -1
  202. package/dist/tests/integration/clientRecordCache.integration.test.js.map +0 -1
  203. package/dist/tests/integration/commitmentRecordProjection.integration.test.d.ts.map +0 -1
  204. package/dist/tests/integration/commitmentRecordProjection.integration.test.js.map +0 -1
  205. package/dist/tests/integration/commitmentUpdateTimestamp.integration.test.d.ts.map +0 -1
  206. package/dist/tests/integration/commitmentUpdateTimestamp.integration.test.js.map +0 -1
  207. package/dist/tests/integration/commitmentUpsertNoMutation.integration.test.d.ts.map +0 -1
  208. package/dist/tests/integration/commitmentUpsertNoMutation.integration.test.js.map +0 -1
  209. package/dist/tests/integration/countCommitmentsByNormalisedEmail.integration.test.d.ts.map +0 -1
  210. package/dist/tests/integration/countCommitmentsByNormalisedEmail.integration.test.js.map +0 -1
  211. package/dist/tests/integration/getUpdatedClients.integration.test.d.ts.map +0 -1
  212. package/dist/tests/integration/getUpdatedClients.integration.test.js.map +0 -1
  213. package/dist/tests/integration/ipInfoPersistence.integration.test.d.ts.map +0 -1
  214. package/dist/tests/integration/ipInfoPersistence.integration.test.js.map +0 -1
  215. package/dist/tests/integration/projectionContract.d.ts.map +0 -1
  216. package/dist/tests/integration/projectionContract.js.map +0 -1
  217. package/dist/tests/integration/projectionContracts.integration.test.d.ts.map +0 -1
  218. package/dist/tests/integration/projectionContracts.integration.test.js.map +0 -1
  219. package/dist/tests/integration/providedIpPipelineCast.integration.test.d.ts.map +0 -1
  220. package/dist/tests/integration/providedIpPipelineCast.integration.test.js.map +0 -1
  221. package/dist/tests/integration/puzzleCentralStreaming.integration.test.d.ts.map +0 -1
  222. package/dist/tests/integration/puzzleCentralStreaming.integration.test.js.map +0 -1
  223. package/dist/tests/integration/redisCacheSessionPatch.integration.test.d.ts.map +0 -1
  224. package/dist/tests/integration/redisCacheSessionPatch.integration.test.js.map +0 -1
  225. package/dist/tests/integration/saveCaptchasSessionUpsert.integration.test.d.ts.map +0 -1
  226. package/dist/tests/integration/saveCaptchasSessionUpsert.integration.test.js.map +0 -1
  227. package/dist/tests/integration/serverCheckClaim.integration.test.d.ts.map +0 -1
  228. package/dist/tests/integration/serverCheckClaim.integration.test.js.map +0 -1
  229. package/dist/tests/integration/sessionRecordProjection.integration.test.d.ts.map +0 -1
  230. package/dist/tests/integration/sessionRecordProjection.integration.test.js.map +0 -1
  231. package/dist/tests/mongoGlobalSetup.d.ts.map +0 -1
  232. package/dist/tests/mongoGlobalSetup.js.map +0 -1
  233. package/dist/tests/mongooseOptions.unit.test.d.ts.map +0 -1
  234. package/dist/tests/mongooseOptions.unit.test.js.map +0 -1
  235. package/dist/tests/unit/base/mongo.unit.test.d.ts.map +0 -1
  236. package/dist/tests/unit/base/mongo.unit.test.js.map +0 -1
  237. package/dist/tests/unit/captchaLabel.unit.test.d.ts.map +0 -1
  238. package/dist/tests/unit/captchaLabel.unit.test.js.map +0 -1
  239. package/dist/tests/unit/databases/centralDbStreamer.unit.test.d.ts.map +0 -1
  240. package/dist/tests/unit/databases/centralDbStreamer.unit.test.js.map +0 -1
  241. package/dist/tests/unit/detectorBundleTtl.unit.test.d.ts.map +0 -1
  242. package/dist/tests/unit/detectorBundleTtl.unit.test.js.map +0 -1
  243. package/dist/tests/unit/inputMethods.unit.test.d.ts.map +0 -1
  244. package/dist/tests/unit/inputMethods.unit.test.js.map +0 -1
  245. package/dist/tests/unit/redisCacheEscalation.unit.test.d.ts.map +0 -1
  246. package/dist/tests/unit/redisCacheEscalation.unit.test.js.map +0 -1
  247. /package/dist/{_virtual → esm/_virtual}/_rolldown/runtime.js +0 -0
  248. /package/dist/{base → esm/base}/index.js +0 -0
  249. /package/dist/{base → esm/base}/mongo.js +0 -0
  250. /package/dist/{base → esm/base}/mongoMemory.js +0 -0
  251. /package/dist/{databases → esm/databases}/captcha.js +0 -0
  252. /package/dist/{databases → esm/databases}/centralDbStreamer.js +0 -0
  253. /package/dist/{databases → esm/databases}/clientRecordCache.js +0 -0
  254. /package/dist/{databases → esm/databases}/index.js +0 -0
  255. /package/dist/{index.js → esm/index.js} +0 -0
  256. /package/dist/{mongooseOptions.js → esm/mongooseOptions.js} +0 -0
  257. /package/dist/{redisCache.js → esm/redisCache.js} +0 -0
  258. /package/dist/{base → tsc/base}/index.d.ts +0 -0
  259. /package/dist/{base → tsc/base}/mongo.d.ts +0 -0
  260. /package/dist/{base → tsc/base}/mongoMemory.d.ts +0 -0
  261. /package/dist/{databases → tsc/databases}/captcha.d.ts +0 -0
  262. /package/dist/{databases → tsc/databases}/centralDbStreamer.d.ts +0 -0
  263. /package/dist/{databases → tsc/databases}/clientRecordCache.d.ts +0 -0
  264. /package/dist/{databases → tsc/databases}/index.d.ts +0 -0
  265. /package/dist/{errorSites.d.ts → tsc/errorSites.d.ts} +0 -0
  266. /package/dist/{errorSites.js → tsc/errorSites.js} +0 -0
  267. /package/dist/{index.d.ts → tsc/index.d.ts} +0 -0
  268. /package/dist/{mongooseOptions.d.ts → tsc/mongooseOptions.d.ts} +0 -0
  269. /package/dist/{redisCache.d.ts → tsc/redisCache.d.ts} +0 -0
  270. /package/dist/{tests → tsc/tests}/integration/centralStreamingEnrichment.integration.test.d.ts +0 -0
  271. /package/dist/{tests → tsc/tests}/integration/centralStreamingEnrichment.integration.test.js +0 -0
  272. /package/dist/{tests → tsc/tests}/integration/clientRecordCache.integration.test.d.ts +0 -0
  273. /package/dist/{tests → tsc/tests}/integration/clientRecordCache.integration.test.js +0 -0
  274. /package/dist/{tests → tsc/tests}/integration/commitmentRecordProjection.integration.test.d.ts +0 -0
  275. /package/dist/{tests → tsc/tests}/integration/commitmentRecordProjection.integration.test.js +0 -0
  276. /package/dist/{tests → tsc/tests}/integration/commitmentUpdateTimestamp.integration.test.d.ts +0 -0
  277. /package/dist/{tests → tsc/tests}/integration/commitmentUpdateTimestamp.integration.test.js +0 -0
  278. /package/dist/{tests → tsc/tests}/integration/commitmentUpsertNoMutation.integration.test.d.ts +0 -0
  279. /package/dist/{tests → tsc/tests}/integration/commitmentUpsertNoMutation.integration.test.js +0 -0
  280. /package/dist/{tests → tsc/tests}/integration/countCommitmentsByNormalisedEmail.integration.test.d.ts +0 -0
  281. /package/dist/{tests → tsc/tests}/integration/countCommitmentsByNormalisedEmail.integration.test.js +0 -0
  282. /package/dist/{tests → tsc/tests}/integration/getUpdatedClients.integration.test.d.ts +0 -0
  283. /package/dist/{tests → tsc/tests}/integration/ipInfoPersistence.integration.test.d.ts +0 -0
  284. /package/dist/{tests → tsc/tests}/integration/ipInfoPersistence.integration.test.js +0 -0
  285. /package/dist/{tests → tsc/tests}/integration/projectionContract.d.ts +0 -0
  286. /package/dist/{tests → tsc/tests}/integration/projectionContract.js +0 -0
  287. /package/dist/{tests → tsc/tests}/integration/projectionContracts.integration.test.d.ts +0 -0
  288. /package/dist/{tests → tsc/tests}/integration/projectionContracts.integration.test.js +0 -0
  289. /package/dist/{tests → tsc/tests}/integration/providedIpPipelineCast.integration.test.d.ts +0 -0
  290. /package/dist/{tests → tsc/tests}/integration/providedIpPipelineCast.integration.test.js +0 -0
  291. /package/dist/{tests → tsc/tests}/integration/puzzleCentralStreaming.integration.test.d.ts +0 -0
  292. /package/dist/{tests → tsc/tests}/integration/puzzleCentralStreaming.integration.test.js +0 -0
  293. /package/dist/{tests → tsc/tests}/integration/redisCacheSessionPatch.integration.test.d.ts +0 -0
  294. /package/dist/{tests → tsc/tests}/integration/redisCacheSessionPatch.integration.test.js +0 -0
  295. /package/dist/{tests → tsc/tests}/integration/saveCaptchasSessionUpsert.integration.test.d.ts +0 -0
  296. /package/dist/{tests → tsc/tests}/integration/saveCaptchasSessionUpsert.integration.test.js +0 -0
  297. /package/dist/{tests → tsc/tests}/integration/serverCheckClaim.integration.test.d.ts +0 -0
  298. /package/dist/{tests → tsc/tests}/integration/serverCheckClaim.integration.test.js +0 -0
  299. /package/dist/{tests → tsc/tests}/integration/sessionRecordProjection.integration.test.d.ts +0 -0
  300. /package/dist/{tests → tsc/tests}/integration/sessionRecordProjection.integration.test.js +0 -0
  301. /package/dist/{tests → tsc/tests}/mongoGlobalSetup.d.ts +0 -0
  302. /package/dist/{tests → tsc/tests}/mongoGlobalSetup.js +0 -0
  303. /package/dist/{tests → tsc/tests}/mongooseOptions.unit.test.d.ts +0 -0
  304. /package/dist/{tests → tsc/tests}/mongooseOptions.unit.test.js +0 -0
  305. /package/dist/{tests → tsc/tests}/unit/base/mongo.unit.test.d.ts +0 -0
  306. /package/dist/{tests → tsc/tests}/unit/base/mongo.unit.test.js +0 -0
  307. /package/dist/{tests → tsc/tests}/unit/captchaLabel.unit.test.d.ts +0 -0
  308. /package/dist/{tests → tsc/tests}/unit/captchaLabel.unit.test.js +0 -0
  309. /package/dist/{tests → tsc/tests}/unit/databases/centralDbStreamer.unit.test.d.ts +0 -0
  310. /package/dist/{tests → tsc/tests}/unit/databases/centralDbStreamer.unit.test.js +0 -0
  311. /package/dist/{tests → tsc/tests}/unit/detectorBundleTtl.unit.test.d.ts +0 -0
  312. /package/dist/{tests → tsc/tests}/unit/detectorBundleTtl.unit.test.js +0 -0
  313. /package/dist/{tests → tsc/tests}/unit/inputMethods.unit.test.d.ts +0 -0
  314. /package/dist/{tests → tsc/tests}/unit/inputMethods.unit.test.js +0 -0
  315. /package/dist/{tests → tsc/tests}/unit/redisCacheEscalation.unit.test.d.ts +0 -0
  316. /package/dist/{tests → tsc/tests}/unit/redisCacheEscalation.unit.test.js +0 -0
@@ -43,12 +43,12 @@ dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
43
43
  dist/cjs/databases/index.cjs 1.14 kB │ gzip: 0.32 kB
44
44
  dist/cjs/databases/clientRecordCache.cjs 1.45 kB │ gzip: 0.69 kB
45
45
  dist/cjs/index.cjs 1.66 kB │ gzip: 0.49 kB
46
- dist/cjs/databases/client.cjs 1.82 kB │ gzip: 0.79 kB
46
+ dist/cjs/databases/client.cjs 1.96 kB │ gzip: 0.82 kB
47
47
  dist/cjs/mongooseOptions.cjs 3.74 kB │ gzip: 1.56 kB
48
48
  dist/cjs/base/mongo.cjs 4.29 kB │ gzip: 1.42 kB
49
49
  dist/cjs/databases/centralDbStreamer.cjs 6.40 kB │ gzip: 1.52 kB
50
50
  dist/cjs/databases/captcha.cjs 8.23 kB │ gzip: 2.38 kB
51
51
  dist/cjs/redisCache.cjs 14.30 kB │ gzip: 4.45 kB
52
- dist/cjs/databases/provider.cjs 70.62 kB │ gzip: 13.49 kB
52
+ dist/cjs/databases/provider.cjs 70.77 kB │ gzip: 13.53 kB
53
53
 
54
- ✓ built in 104ms
54
+ ✓ built in 63ms
@@ -1,5 +1,4 @@
1
- $ pnpm run build:cross-env --mode ${NODE_ENV:-development}
2
- $ vite build --config vite.esm.config.ts --mode production
1
+ $ vite build --config vite.esm.config.ts --mode ${NODE_ENV:-development}
3
2
  ViteEsmConfig: .
4
3
  {
5
4
  tsConfigPaths: [
@@ -38,18 +37,18 @@ Bundle build started
38
37
  ✓ 13 modules transformed.
39
38
  rendering chunks...
40
39
  computing gzip size...
41
- dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
42
- dist/base/index.js 0.14 kB │ gzip: 0.08 kB
43
- dist/base/mongoMemory.js 0.60 kB │ gzip: 0.30 kB
44
- dist/databases/index.js 0.77 kB │ gzip: 0.27 kB
45
- dist/index.js 1.07 kB │ gzip: 0.38 kB
46
- dist/databases/clientRecordCache.js 1.40 kB │ gzip: 0.68 kB
47
- dist/databases/client.js 1.73 kB │ gzip: 0.77 kB
48
- dist/mongooseOptions.js 3.58 kB │ gzip: 1.53 kB
49
- dist/base/mongo.js 4.04 kB │ gzip: 1.33 kB
50
- dist/databases/centralDbStreamer.js 6.33 kB │ gzip: 1.51 kB
51
- dist/databases/captcha.js 8.17 kB │ gzip: 2.38 kB
52
- dist/redisCache.js 14.25 kB │ gzip: 4.43 kB
53
- dist/databases/provider.js 68.90 kB │ gzip: 13.49 kB
40
+ dist/esm/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
41
+ dist/esm/base/index.js 0.14 kB │ gzip: 0.08 kB
42
+ dist/esm/base/mongoMemory.js 0.60 kB │ gzip: 0.30 kB
43
+ dist/esm/databases/index.js 0.77 kB │ gzip: 0.27 kB
44
+ dist/esm/index.js 1.07 kB │ gzip: 0.38 kB
45
+ dist/esm/databases/clientRecordCache.js 1.40 kB │ gzip: 0.68 kB
46
+ dist/esm/databases/client.js 1.85 kB │ gzip: 0.80 kB
47
+ dist/esm/mongooseOptions.js 3.58 kB │ gzip: 1.53 kB
48
+ dist/esm/base/mongo.js 4.04 kB │ gzip: 1.33 kB
49
+ dist/esm/databases/centralDbStreamer.js 6.33 kB │ gzip: 1.51 kB
50
+ dist/esm/databases/captcha.js 8.17 kB │ gzip: 2.38 kB
51
+ dist/esm/redisCache.js 14.25 kB │ gzip: 4.43 kB
52
+ dist/esm/databases/provider.js 69.04 kB │ gzip: 13.53 kB
54
53
 
55
- ✓ built in 106ms
54
+ ✓ built in 90ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 3:59:52 PM - Projects in this build:
2
+ 12:57:25 PM - Projects in this build:
3
3
  * ../../dev/config/tsconfig.json
4
4
  * ../util/tsconfig.json
5
5
  * ../locale/tsconfig.json
@@ -14,31 +14,31 @@ $ tsc --build --verbose
14
14
  * ../types-database/tsconfig.json
15
15
  * tsconfig.json
16
16
 
17
- 3:59:52 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
17
+ 12:57:25 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/vite.esm.config.ts' is older than output '../../dev/config/dist/tsc/tsconfig.tsbuildinfo'
18
18
 
19
- 3:59:52 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
19
+ 12:57:25 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/dist/tsc/tsconfig.tsbuildinfo'
20
20
 
21
- 3:59:52 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/process.ts' is older than output '../locale/tsconfig.tsbuildinfo'
21
+ 12:57:25 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translator.ts' is older than output '../locale/dist/tsc/tsconfig.tsbuildinfo'
22
22
 
23
- 3:59:52 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
23
+ 12:57:25 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/dist/tsc/tsconfig.tsbuildinfo'
24
24
 
25
- 3:59:52 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/tsconfig.tsbuildinfo'
25
+ 12:57:25 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/types.test-d.ts' is older than output '../types/dist/tsc/tsconfig.tsbuildinfo'
26
26
 
27
- 3:59:52 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/errorSites.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
27
+ 12:57:25 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/dist/tsc/tsconfig.tsbuildinfo'
28
28
 
29
- 3:59:52 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../logger/tsconfig.tsbuildinfo'
29
+ 12:57:25 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/dist/tsc/tsconfig.tsbuildinfo'
30
30
 
31
- 3:59:52 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/tests/apiRoute.unit.test.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
31
+ 12:57:25 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/dist/tsc/tsconfig.tsbuildinfo'
32
32
 
33
- 3:59:52 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
33
+ 12:57:25 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/index.ts' is older than output '../redis-client/dist/tsc/tsconfig.tsbuildinfo'
34
34
 
35
- 3:59:52 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/tsconfig.tsbuildinfo'
35
+ 12:57:25 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/tests/apiHarness.ts' is older than output '../api/dist/tsc/tsconfig.tsbuildinfo'
36
36
 
37
- 3:59:53 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
37
+ 12:57:25 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/transformRule.ts' is older than output '../user-access-policy/dist/tsc/tsconfig.tsbuildinfo'
38
38
 
39
- 3:59:53 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
39
+ 12:57:25 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/provider.ts' is older than output '../types-database/dist/tsc/tsconfig.tsbuildinfo'
40
40
 
41
- 3:59:53 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
41
+ 12:57:25 PM - Project 'tsconfig.json' is out of date because output file 'dist/tsc/tsconfig.tsbuildinfo' does not exist
42
42
 
43
- 3:59:53 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
43
+ 12:57:25 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
44
44
 
@@ -0,0 +1 @@
1
+ $ tsc --project tsconfig.types.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,59 @@
1
1
  # @prosopo/database
2
2
 
3
+ ## 4.4.0
4
+ ### Minor Changes
5
+
6
+ - 78107d9: Record the fingerprint summary, and with it the device bucket, for every captcha type rather than only PoW.
7
+
8
+ The proof of fingerprint was only built by the PoW widget and only read when a PoW solution was submitted, so sessions served a puzzle or an image never had a bucket. About half of puzzle drags could only be given one by finding a PoW the same account had solved.
9
+
10
+ The widget now sends the proof with the frictionless request, best-effort and capped at a second so it never delays the captcha. The provider verifies and summarises it once, stores the summary on the session, and the PoW, puzzle and image records copy it from there. Escalation sessions inherit it. A proof sent with a PoW solution still replaces the one from the frictionless request.
11
+
12
+ The summary is only recorded at the frictionless step, not passed to the routing machine there, so existing `deviceBucket` counter rules keep firing where they did before.
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [1966fc1]
17
+ - Updated dependencies [c69b636]
18
+ - Updated dependencies [78107d9]
19
+ - Updated dependencies [d6cc6fe]
20
+ - Updated dependencies [f13677e]
21
+ - Updated dependencies [77bd891]
22
+ - Updated dependencies [76b6edd]
23
+ - @prosopo/common@3.3.2
24
+ - @prosopo/logger@2.1.7
25
+ - @prosopo/redis-client@1.0.44
26
+ - @prosopo/types@5.20.0
27
+ - @prosopo/types-database@5.13.0
28
+ - @prosopo/user-access-policy@3.15.9
29
+ - @prosopo/util@3.4.0
30
+
31
+ ## 4.3.0
32
+ ### Minor Changes
33
+
34
+ - 915f30b: Traffic filter categories can now have exceptions. An exception matches visitors by country, by whether their country is inside or outside the account's market, by a minimum abuser score, or any mix of these. It then replaces the category's block or challenge action. When several exceptions match, the harshest wins: a block beats any challenge, and a stricter captcha beats a milder one. So the order of the list does not matter. For example, block proxies, but challenge those from the account's market unless their abuser score is at least 0.5.
35
+
36
+ The account's market countries now travel to providers inside each site's traffic filter, including when a provider pulls updated sites from the portal database. An exception that depends on the market never matches while the account has no market set.
37
+
38
+ `@prosopo/captcha-severity` gains `policyHarshness` and `harshestPolicy`. They rank a policy that may block, and the access rules now use them too, with the same ordering as before.
39
+
40
+ ### Patch Changes
41
+
42
+ - 2086040: Each kind of build now writes to its own folder under dist: dist/esm (vite ESM), dist/cjs (vite CommonJS), dist/types (declarations), dist/tsc (plain tsc), dist/bundle and dist/bundle-webpack (bundles) and dist/native (the Rust addons). Turbo caches each folder separately, so building one variant no longer overwrites or invalidates another. Package exports point at the new folders; anything importing a file from dist by path has to add the variant folder.
43
+
44
+ The Rust addons are no longer committed. They are built into dist/native, in debug for development and tests and fully optimised when NODE_ENV=production, so building them now needs a Rust toolchain.
45
+
46
+ Code that found the repo root or its certificates by climbing a fixed number of folders up from its own file now starts from its package's folder instead (new `packageDir` in @prosopo/util/node). The fixed count stopped working once the build output moved one folder deeper.
47
+ - Updated dependencies [2086040]
48
+ - Updated dependencies [915f30b]
49
+ - @prosopo/common@3.3.1
50
+ - @prosopo/logger@2.1.6
51
+ - @prosopo/redis-client@1.0.43
52
+ - @prosopo/types-database@5.12.0
53
+ - @prosopo/types@5.19.0
54
+ - @prosopo/user-access-policy@3.15.8
55
+ - @prosopo/util@3.3.17
56
+
3
57
  ## 4.2.10
4
58
  ### Patch Changes
5
59
 
@@ -1,5 +1,6 @@
1
1
  const require_mongo = require("../base/mongo.cjs");
2
2
  let _prosopo_common = require("@prosopo/common");
3
+ let _prosopo_types = require("@prosopo/types");
3
4
  let _prosopo_types_database = require("@prosopo/types-database");
4
5
  //#region src/databases/client.ts
5
6
  var CLIENT_TABLES = [{
@@ -34,6 +35,7 @@ var ClientDatabase = class extends require_mongo.MongoDatabase {
34
35
  "users.status": "active"
35
36
  }, {
36
37
  tier: 1,
38
+ marketCountries: 1,
37
39
  "sites.siteKey": 1,
38
40
  "sites.settings": 1,
39
41
  "sites.updatedAt": 1
@@ -44,7 +46,7 @@ var ClientDatabase = class extends require_mongo.MongoDatabase {
44
46
  if (!(site.updatedAt === void 0 || site.updatedAt > updatedAtTimestamp)) continue;
45
47
  newClientRecords.push({
46
48
  account: site.siteKey,
47
- settings: site.settings,
49
+ settings: (0, _prosopo_types.withMarketCountries)(site.settings, account.marketCountries),
48
50
  tier: account.tier
49
51
  });
50
52
  }
@@ -501,7 +501,7 @@ var ProviderDatabase = class ProviderDatabase extends require_mongo.MongoDatabas
501
501
  * @param ipInfo full ipinfo payload from the ipInfoMiddleware
502
502
  * @returns {Promise<void>} A promise that resolves when the record is added.
503
503
  */
504
- async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, headers, ja4, sessionId, serverChecked = false, userSubmitted = false, userSignature, ipInfo) {
504
+ async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, headers, ja4, sessionId, serverChecked = false, userSubmitted = false, userSignature, ipInfo, fingerprintSummary) {
505
505
  const tables = this.getTables();
506
506
  const powCaptchaRecord = {
507
507
  challenge,
@@ -520,7 +520,8 @@ var ProviderDatabase = class ProviderDatabase extends require_mongo.MongoDatabas
520
520
  lastUpdatedTimestamp: /* @__PURE__ */ new Date(),
521
521
  pendingStage: true,
522
522
  sessionId,
523
- ipInfo
523
+ ipInfo,
524
+ ...fingerprintSummary && { fingerprintSummary }
524
525
  };
525
526
  try {
526
527
  await tables.powcaptcha.create(powCaptchaRecord);
@@ -818,14 +819,15 @@ var ProviderDatabase = class ProviderDatabase extends require_mongo.MongoDatabas
818
819
  ipInfo
819
820
  };
820
821
  }
821
- async storePuzzleCaptchaRecord(challenge, components, targetX, targetY, originX, originY, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
822
+ async storePuzzleCaptchaRecord(challenge, components, targetX, targetY, originX, originY, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo, fingerprintSummary) {
822
823
  await this.storeInteractiveCaptchaRecord(this.interactiveCollection(_prosopo_types.CaptchaType.puzzle), {
823
824
  ...this.pendingInteractiveRecord(challenge, components, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo),
824
825
  tolerance,
825
826
  targetX,
826
827
  targetY,
827
828
  originX,
828
- originY
829
+ originY,
830
+ ...fingerprintSummary && { fingerprintSummary }
829
831
  });
830
832
  }
831
833
  async storeAudioCaptchaRecord(challenge, components, answer, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
@@ -1,5 +1,6 @@
1
1
  import { MongoDatabase } from "../base/mongo.js";
2
2
  import { ProsopoError } from "@prosopo/common";
3
+ import { withMarketCountries } from "@prosopo/types";
3
4
  import { AccountSchema, TableNames } from "@prosopo/types-database";
4
5
  //#region src/databases/client.ts
5
6
  var CLIENT_TABLES = [{
@@ -34,6 +35,7 @@ var ClientDatabase = class extends MongoDatabase {
34
35
  "users.status": "active"
35
36
  }, {
36
37
  tier: 1,
38
+ marketCountries: 1,
37
39
  "sites.siteKey": 1,
38
40
  "sites.settings": 1,
39
41
  "sites.updatedAt": 1
@@ -44,7 +46,7 @@ var ClientDatabase = class extends MongoDatabase {
44
46
  if (!(site.updatedAt === void 0 || site.updatedAt > updatedAtTimestamp)) continue;
45
47
  newClientRecords.push({
46
48
  account: site.siteKey,
47
- settings: site.settings,
49
+ settings: withMarketCountries(site.settings, account.marketCountries),
48
50
  tier: account.tier
49
51
  });
50
52
  }
@@ -501,7 +501,7 @@ var ProviderDatabase = class ProviderDatabase extends MongoDatabase {
501
501
  * @param ipInfo full ipinfo payload from the ipInfoMiddleware
502
502
  * @returns {Promise<void>} A promise that resolves when the record is added.
503
503
  */
504
- async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, headers, ja4, sessionId, serverChecked = false, userSubmitted = false, userSignature, ipInfo) {
504
+ async storePowCaptchaRecord(challenge, components, difficulty, providerSignature, ipAddress, headers, ja4, sessionId, serverChecked = false, userSubmitted = false, userSignature, ipInfo, fingerprintSummary) {
505
505
  const tables = this.getTables();
506
506
  const powCaptchaRecord = {
507
507
  challenge,
@@ -520,7 +520,8 @@ var ProviderDatabase = class ProviderDatabase extends MongoDatabase {
520
520
  lastUpdatedTimestamp: /* @__PURE__ */ new Date(),
521
521
  pendingStage: true,
522
522
  sessionId,
523
- ipInfo
523
+ ipInfo,
524
+ ...fingerprintSummary && { fingerprintSummary }
524
525
  };
525
526
  try {
526
527
  await tables.powcaptcha.create(powCaptchaRecord);
@@ -818,14 +819,15 @@ var ProviderDatabase = class ProviderDatabase extends MongoDatabase {
818
819
  ipInfo
819
820
  };
820
821
  }
821
- async storePuzzleCaptchaRecord(challenge, components, targetX, targetY, originX, originY, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
822
+ async storePuzzleCaptchaRecord(challenge, components, targetX, targetY, originX, originY, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo, fingerprintSummary) {
822
823
  await this.storeInteractiveCaptchaRecord(this.interactiveCollection(CaptchaType.puzzle), {
823
824
  ...this.pendingInteractiveRecord(challenge, components, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo),
824
825
  tolerance,
825
826
  targetX,
826
827
  targetY,
827
828
  originX,
828
- originY
829
+ originY,
830
+ ...fingerprintSummary && { fingerprintSummary }
829
831
  });
830
832
  }
831
833
  async storeAudioCaptchaRecord(challenge, components, answer, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAaA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./mongo.js";
2
+ export * from "./mongoMemory.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAaA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../../src/base/mongo.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,QAAQ,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAYrD,MAAM,WAAW,uBAAuB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CAClC;AAQD,qBAAa,aAAc,YAAW,SAAS;IAC9C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,UAAS;IAClB,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;gBAGpD,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,uBAAuB;IAoBnC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,aAAa,IAAI,QAAQ,CAAC,UAAU;IAe9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B"}
@@ -0,0 +1,142 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import { ProsopoError } from "@prosopo/common";
3
+ import { getLogger } from "@prosopo/logger";
4
+ import mongoose from "mongoose";
5
+ import { getMongoConnectionOptions } from "../mongooseOptions.js";
6
+ mongoose.set("strictQuery", false);
7
+ const DEFAULT_ENDPOINT = "mongodb://127.0.0.1:27017";
8
+ export class MongoDatabase {
9
+ constructor(url, dbname, authSource, logger, timeouts) {
10
+ this.connected = false;
11
+ this.connectTimeoutMS = timeouts?.connectTimeoutMS;
12
+ this.serverSelectionTimeoutMS = timeouts?.serverSelectionTimeoutMS;
13
+ const baseEndpoint = url || DEFAULT_ENDPOINT;
14
+ const parsedUrl = new URL(baseEndpoint);
15
+ if (dbname) {
16
+ parsedUrl.pathname = dbname;
17
+ }
18
+ if (authSource) {
19
+ parsedUrl.searchParams.set("authSource", authSource);
20
+ }
21
+ this._url = parsedUrl.toString();
22
+ this.safeURL = this.url.replace(/\w+:\w+/, "<Credentials>");
23
+ this.dbname = dbname || parsedUrl.pathname.replace("/", "");
24
+ this.logger = (logger || getLogger("info", "database:mongo")).with({
25
+ mongoUrl: this.safeURL,
26
+ });
27
+ }
28
+ get url() {
29
+ return this._url;
30
+ }
31
+ getConnection() {
32
+ if (!this.connection) {
33
+ throw new ProsopoError({
34
+ code: "DB_UNAVAILABLE",
35
+ errorSite: "DBSE-1",
36
+ message: "Connection undefined",
37
+ context: { failedFuncName: this.getConnection.name },
38
+ });
39
+ }
40
+ return this.connection;
41
+ }
42
+ async connect() {
43
+ this.logger.debug(() => ({
44
+ msg: "Connecting to database",
45
+ }));
46
+ try {
47
+ if (this.connected) {
48
+ this.logger.debug(() => ({
49
+ msg: "Database connection already open",
50
+ }));
51
+ return;
52
+ }
53
+ if (this.connecting) {
54
+ this.logger.debug(() => ({
55
+ msg: "Database connection in progress, waiting for it to finish",
56
+ }));
57
+ return this.connecting;
58
+ }
59
+ this.connecting = new Promise((resolve, reject) => {
60
+ const appName = fileURLToPath(import.meta.url);
61
+ const connection = mongoose.createConnection(this.url, getMongoConnectionOptions({
62
+ url: this.url,
63
+ appName,
64
+ dbName: this.dbname,
65
+ maxPoolSize: 50,
66
+ minPoolSize: 5,
67
+ connectTimeoutMS: this.connectTimeoutMS,
68
+ serverSelectionTimeoutMS: this.serverSelectionTimeoutMS,
69
+ }));
70
+ let opened = false;
71
+ const onConnected = () => {
72
+ opened = true;
73
+ this.logger.debug(() => ({
74
+ msg: "Database connection opened",
75
+ }));
76
+ this.connected = true;
77
+ this.connection = connection;
78
+ this.connecting = undefined;
79
+ resolve();
80
+ };
81
+ const onError = (err) => {
82
+ this.logger.error(() => ({
83
+ err,
84
+ msg: "Database error",
85
+ }));
86
+ this.connected = false;
87
+ this.connecting = undefined;
88
+ if (!opened) {
89
+ connection.destroy(true).catch((destroyErr) => {
90
+ this.logger.error(() => ({
91
+ err: destroyErr,
92
+ msg: "Failed to destroy unconnected database connection",
93
+ }));
94
+ });
95
+ }
96
+ reject(err);
97
+ };
98
+ connection.once("open", onConnected);
99
+ connection.once("error", onError);
100
+ connection.on("disconnected", () => {
101
+ this.connected = false;
102
+ this.logger.debug(() => ({
103
+ msg: "Database disconnected",
104
+ }));
105
+ });
106
+ connection.on("reconnected", () => {
107
+ this.connected = true;
108
+ this.logger.debug(() => ({
109
+ msg: "Database reconnected",
110
+ }));
111
+ });
112
+ connection.on("close", () => {
113
+ this.connected = false;
114
+ this.logger.debug(() => ({
115
+ msg: "Database connection closed",
116
+ }));
117
+ });
118
+ connection.on("fullsetup", () => {
119
+ this.connected = true;
120
+ this.logger.debug(() => ({
121
+ msg: "Database connection is fully setup",
122
+ }));
123
+ });
124
+ });
125
+ return this.connecting;
126
+ }
127
+ catch (e) {
128
+ this.logger.error(() => ({
129
+ err: e,
130
+ msg: "Database connection error",
131
+ }));
132
+ throw e;
133
+ }
134
+ }
135
+ async close() {
136
+ this.logger.debug(() => ({
137
+ msg: "Closing connection",
138
+ }));
139
+ await this.connection?.close();
140
+ }
141
+ }
142
+ //# sourceMappingURL=mongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../../src/base/mongo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoMemory.d.ts","sourceRoot":"","sources":["../../../src/base/mongoMemory.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,mBAAoB,SAAQ,aAAa;IACrD,UAAmB,IAAI,SAAM;IAC7B,OAAO,CAAC,MAAM,CAAgC;gBAG7C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM;IAKL,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC"}
@@ -0,0 +1,21 @@
1
+ import { MongoMemoryServer } from "mongodb-memory-server";
2
+ import { MongoDatabase } from "./mongo.js";
3
+ export class MongoMemoryDatabase extends MongoDatabase {
4
+ constructor(_url, dbname, logger, authSource) {
5
+ super("", dbname, authSource, logger);
6
+ this._url = "";
7
+ }
8
+ async connect() {
9
+ if (!this.mongod) {
10
+ this.mongod = await MongoMemoryServer.create();
11
+ this._url = this.mongod.getUri();
12
+ }
13
+ await super.connect();
14
+ }
15
+ async close() {
16
+ await super.close();
17
+ await this.mongod?.stop();
18
+ this.mongod = undefined;
19
+ }
20
+ }
21
+ //# sourceMappingURL=mongoMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoMemory.js","sourceRoot":"","sources":["../../../src/base/mongoMemory.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAIrD,YACC,IAAY,EACZ,MAAc,EACd,MAAc,EACd,UAAmB;QAEnB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QATpB,SAAI,GAAG,EAAE,CAAC;IAU7B,CAAC;IAEQ,KAAK,CAAC,OAAO;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAEQ,KAAK,CAAC,KAAK;QACnB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;CACD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.d.ts","sourceRoot":"","sources":["../../../src/databases/captcha.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAKxB,KAAK,aAAa,EAGlB,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,MAAM,yBAAyB,CAAC;AAajC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,uBAAuB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAI/E,aAAK,UAAU;IACd,iBAAiB,sBAAsB;IACvC,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;CACrC;AAmCD,qBAAa,eAAgB,SAAQ,aAAc,YAAW,gBAAgB;IAC7E,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAG9B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,uBAAuB;IAMpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUvC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC;IAYzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAoBnC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAajC,YAAY,CACjB,aAAa,EAAE,aAAa,EAAE,EAC9B,kBAAkB,EAAE,oBAAoB,EAAE,EAC1C,gBAAgB,EAAE,gBAAgB,EAAE,EACpC,mBAAmB,GAAE,mBAAmB,EAAO,EAC/C,sBAAsB,GAAE,sBAAsB,EAAO,EACrD,kBAAkB,GAAE,kBAAkB,EAAO;YA0HhC,sBAAsB;IAuC9B,WAAW,CAChB,MAAM,GAAE,WAAW,CAAC,iBAAiB,CAAM,EAC3C,KAAK,SAAM,GACT,OAAO,CAAC;QACV,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;QAC9C,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;QACtC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;QAC5C,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;QAC1C,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;KAClD,CAAC;CA+CF"}