@prosopo/database 4.6.1 → 4.6.3

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 (37) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +6 -6
  2. package/.turbo/turbo-build$colon$esm.log +6 -6
  3. package/.turbo/turbo-build$colon$tsc.log +15 -15
  4. package/CHANGELOG.md +37 -0
  5. package/dist/cjs/databases/captcha.cjs +9 -8
  6. package/dist/cjs/databases/centralDbStreamer.cjs +4 -4
  7. package/dist/cjs/databases/index.cjs +1 -0
  8. package/dist/cjs/databases/provider.cjs +4 -3
  9. package/dist/cjs/index.cjs +1 -0
  10. package/dist/esm/databases/captcha.js +9 -9
  11. package/dist/esm/databases/centralDbStreamer.js +5 -5
  12. package/dist/esm/databases/index.js +2 -2
  13. package/dist/esm/databases/provider.js +4 -3
  14. package/dist/esm/index.js +2 -2
  15. package/dist/tsc/databases/captcha.d.ts +4 -0
  16. package/dist/tsc/databases/captcha.d.ts.map +1 -1
  17. package/dist/tsc/databases/captcha.js +8 -8
  18. package/dist/tsc/databases/captcha.js.map +1 -1
  19. package/dist/tsc/databases/centralDbStreamer.js +5 -5
  20. package/dist/tsc/databases/centralDbStreamer.js.map +1 -1
  21. package/dist/tsc/databases/provider.d.ts +2 -2
  22. package/dist/tsc/databases/provider.d.ts.map +1 -1
  23. package/dist/tsc/databases/provider.js +3 -2
  24. package/dist/tsc/databases/provider.js.map +1 -1
  25. package/dist/tsc/tests/integration/saveCaptchasStoredAt.integration.test.d.ts +2 -0
  26. package/dist/tsc/tests/integration/saveCaptchasStoredAt.integration.test.d.ts.map +1 -0
  27. package/dist/tsc/tests/integration/saveCaptchasStoredAt.integration.test.js +84 -0
  28. package/dist/tsc/tests/integration/saveCaptchasStoredAt.integration.test.js.map +1 -0
  29. package/dist/tsc/tests/unit/databases/centralDbStreamer.unit.test.js +11 -0
  30. package/dist/tsc/tests/unit/databases/centralDbStreamer.unit.test.js.map +1 -1
  31. package/dist/types/databases/captcha.d.ts +4 -0
  32. package/dist/types/databases/captcha.d.ts.map +1 -1
  33. package/dist/types/databases/provider.d.ts +2 -2
  34. package/dist/types/databases/provider.d.ts.map +1 -1
  35. package/dist/types/tests/integration/saveCaptchasStoredAt.integration.test.d.ts +2 -0
  36. package/dist/types/tests/integration/saveCaptchasStoredAt.integration.test.d.ts.map +1 -0
  37. package/package.json +8 -8
@@ -40,16 +40,16 @@ computing gzip size...
40
40
  dist/cjs/base/index.cjs 0.43 kB │ gzip: 0.16 kB
41
41
  dist/cjs/base/mongoMemory.cjs 0.66 kB │ gzip: 0.32 kB
42
42
  dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
43
- dist/cjs/databases/index.cjs 1.14 kB │ gzip: 0.32 kB
43
+ dist/cjs/databases/index.cjs 1.20 kB │ gzip: 0.34 kB
44
44
  dist/cjs/databases/clientRecordCache.cjs 1.45 kB │ gzip: 0.69 kB
45
- dist/cjs/index.cjs 1.87 kB │ gzip: 0.54 kB
45
+ dist/cjs/index.cjs 1.93 kB │ gzip: 0.55 kB
46
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.47 kB │ gzip: 1.49 kB
49
49
  dist/cjs/base/reconcileIndexes.cjs 5.97 kB │ gzip: 1.98 kB
50
- dist/cjs/databases/centralDbStreamer.cjs 6.40 kB │ gzip: 1.52 kB
51
- dist/cjs/databases/captcha.cjs 8.39 kB │ gzip: 2.40 kB
50
+ dist/cjs/databases/centralDbStreamer.cjs 6.48 kB │ gzip: 1.52 kB
51
+ dist/cjs/databases/captcha.cjs 8.46 kB │ gzip: 2.44 kB
52
52
  dist/cjs/redisCache.cjs 14.30 kB │ gzip: 4.45 kB
53
- dist/cjs/databases/provider.cjs 72.31 kB │ gzip: 13.98 kB
53
+ dist/cjs/databases/provider.cjs 72.45 kB │ gzip: 14.00 kB
54
54
 
55
- ✓ built in 125ms
55
+ ✓ built in 94ms
@@ -40,16 +40,16 @@ computing gzip size...
40
40
  dist/esm/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
41
41
  dist/esm/base/index.js 0.25 kB │ gzip: 0.12 kB
42
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.19 kB │ gzip: 0.42 kB
43
+ dist/esm/databases/index.js 0.81 kB │ gzip: 0.28 kB
44
+ dist/esm/index.js 1.22 kB │ gzip: 0.43 kB
45
45
  dist/esm/databases/clientRecordCache.js 1.40 kB │ gzip: 0.68 kB
46
46
  dist/esm/databases/client.js 1.85 kB │ gzip: 0.80 kB
47
47
  dist/esm/mongooseOptions.js 3.58 kB │ gzip: 1.53 kB
48
48
  dist/esm/base/mongo.js 4.22 kB │ gzip: 1.40 kB
49
49
  dist/esm/base/reconcileIndexes.js 5.93 kB │ gzip: 1.97 kB
50
- dist/esm/databases/centralDbStreamer.js 6.33 kB │ gzip: 1.51 kB
51
- dist/esm/databases/captcha.js 8.29 kB │ gzip: 2.40 kB
50
+ dist/esm/databases/centralDbStreamer.js 6.37 kB │ gzip: 1.51 kB
51
+ dist/esm/databases/captcha.js 8.33 kB │ gzip: 2.43 kB
52
52
  dist/esm/redisCache.js 14.25 kB │ gzip: 4.43 kB
53
- dist/esm/databases/provider.js 70.50 kB │ gzip: 13.97 kB
53
+ dist/esm/databases/provider.js 70.63 kB │ gzip: 13.98 kB
54
54
 
55
- ✓ built in 121ms
55
+ ✓ built in 72ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 4:57:07 PM - Projects in this build:
2
+ 10:07:28 AM - 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
- 4:57:07 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/dist/tsc/tsconfig.tsbuildinfo'
17
+ 10:07:28 AM - 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/dist/tsc/tsconfig.tsbuildinfo'
18
18
 
19
- 4:57:07 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'
19
+ 10:07:29 AM - 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
- 4:57:07 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/dist/tsc/tsconfig.tsbuildinfo'
21
+ 10:07:29 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/dist/tsc/tsconfig.tsbuildinfo'
22
22
 
23
- 4:57:07 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'
23
+ 10:07:29 AM - 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
- 4:57:07 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'
25
+ 10:07:29 AM - 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
- 4:57:07 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/errorSites.unit.test.ts' is older than output '../common/dist/tsc/tsconfig.tsbuildinfo'
27
+ 10:07:29 AM - 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
- 4:57:07 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/dist/tsc/tsconfig.tsbuildinfo'
29
+ 10:07:29 AM - 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
- 4:57:07 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'
31
+ 10:07:29 AM - 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
- 4:57:07 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/tests/redisIndex.integration.test.ts' is older than output '../redis-client/dist/tsc/tsconfig.tsbuildinfo'
33
+ 10:07:29 AM - 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
- 4:57:07 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/dist/tsc/tsconfig.tsbuildinfo'
35
+ 10:07:29 AM - 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
- 4:57:08 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'
37
+ 10:07:29 AM - 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
- 4:57:08 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/captcha.ts' is older than output '../types-database/dist/tsc/tsconfig.tsbuildinfo'
39
+ 10:07:29 AM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/index.ts' is older than output '../types-database/dist/tsc/tsconfig.tsbuildinfo'
40
40
 
41
- 4:57:08 PM - Project 'tsconfig.json' is out of date because output file 'dist/tsc/tsconfig.tsbuildinfo' does not exist
41
+ 10:07:29 AM - Project 'tsconfig.json' is out of date because output file 'dist/tsc/tsconfig.tsbuildinfo' does not exist
42
42
 
43
- 4:57:08 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
43
+ 10:07:29 AM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
44
44
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @prosopo/database
2
2
 
3
+ ## 4.6.3
4
+ ### Patch Changes
5
+
6
+ - e1cb7f4: Icon order challenges can now be redrawn exactly, the way puzzle challenges already can.
7
+
8
+ - The provider saves what it needs to redraw each icon order challenge on its record: the render seed, the frame geometry and the render settings (`render`).
9
+ - `@prosopo/icon-order-assets/browser` is a new entry that rebuilds a challenge from those inputs without `sharp`, so the portal can show the image a visitor was served. It returns the frame and the target strip as SVG plus the grain to lay over the frame. Rasterised the same way, the frame matches the served one byte for byte.
10
+ - `@prosopo/puzzle-assets/browser` also exports `hslToRgb` and the `Prng` type, which the new entry uses.
11
+
12
+ The seed regenerates the answer too, so like the puzzle seeds it is never sent to a client.
13
+ - Updated dependencies [e1cb7f4]
14
+ - Updated dependencies [7caad4c]
15
+ - Updated dependencies [6b96e77]
16
+ - Updated dependencies [a191c21]
17
+ - @prosopo/types@5.27.0
18
+ - @prosopo/types-database@5.18.1
19
+ - @prosopo/util@3.6.1
20
+ - @prosopo/common@3.3.2
21
+ - @prosopo/user-access-policy@3.15.19
22
+ - @prosopo/logger@2.1.10
23
+ - @prosopo/redis-client@1.0.47
24
+
25
+ ## 4.6.2
26
+ ### Patch Changes
27
+
28
+ - a85559d: Records copied to the central captcha store no longer carry the provider's `storedAtTimestamp`. The central store's `storedAtTimestamp` TTL index is now one year; provider stores keep four weeks.
29
+ - Updated dependencies [a85559d]
30
+ - Updated dependencies [d9520ea]
31
+ - Updated dependencies [1ba238e]
32
+ - @prosopo/types-database@5.18.0
33
+ - @prosopo/types@5.26.0
34
+ - @prosopo/util@3.6.0
35
+ - @prosopo/user-access-policy@3.15.18
36
+ - @prosopo/common@3.3.2
37
+ - @prosopo/logger@2.1.9
38
+ - @prosopo/redis-client@1.0.46
39
+
3
40
  ## 4.6.1
4
41
  ### Patch Changes
5
42
 
@@ -39,6 +39,10 @@ var CAPTCHA_TABLES = [
39
39
  schema: _prosopo_types_database.StoredIconOrderCaptchaRecordSchema
40
40
  }
41
41
  ];
42
+ var toCentralRecord = (record) => {
43
+ const { _id, storedAtTimestamp, ...centralRecord } = record;
44
+ return centralRecord;
45
+ };
42
46
  var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase {
43
47
  constructor(url, dbname, authSource, logger, timeouts) {
44
48
  super(url, dbname, authSource, logger, timeouts);
@@ -126,8 +130,7 @@ var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase
126
130
  await this.connect();
127
131
  if (sessionEvents.length) {
128
132
  const result = await this.tables.session.bulkWrite(sessionEvents.map((document) => {
129
- const { _id, ...safeDoc } = document;
130
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
133
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(document));
131
134
  return { updateOne: {
132
135
  filter: { sessionId: normalised.sessionId },
133
136
  update: { $set: normalised },
@@ -146,8 +149,7 @@ var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase
146
149
  }
147
150
  if (imageCaptchaEvents.length) {
148
151
  const result = await this.tables.commitment.bulkWrite(imageCaptchaEvents.map((doc) => {
149
- const { _id, ...safeDoc } = doc;
150
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
152
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
151
153
  return { updateOne: {
152
154
  filter: { id: normalised.id },
153
155
  update: { $set: normalised },
@@ -166,8 +168,7 @@ var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase
166
168
  }
167
169
  if (powCaptchaEvents.length) {
168
170
  const result = await this.tables.powcaptcha.bulkWrite(powCaptchaEvents.map((doc) => {
169
- const { _id, ...safeDoc } = doc;
170
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
171
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
171
172
  return { updateOne: {
172
173
  filter: { challenge: normalised.challenge },
173
174
  update: { $set: normalised },
@@ -192,8 +193,7 @@ var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase
192
193
  async upsertChallengeRecords(table, records, msg) {
193
194
  if (!records.length) return;
194
195
  const result = await this.tables[table].bulkWrite(records.map((doc) => {
195
- const { _id, ...safeDoc } = doc;
196
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
196
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
197
197
  return { updateOne: {
198
198
  filter: { challenge: normalised.challenge },
199
199
  update: { $set: normalised },
@@ -238,3 +238,4 @@ var CaptchaDatabase = class CaptchaDatabase extends require_mongo.MongoDatabase
238
238
  };
239
239
  //#endregion
240
240
  exports.CaptchaDatabase = CaptchaDatabase;
241
+ exports.toCentralRecord = toCentralRecord;
@@ -57,7 +57,7 @@ var CentralDbStreamer = class CentralDbStreamer {
57
57
  streamPowRecord(record, markStored) {
58
58
  const timestamp = this.getRecordTimestamp(record);
59
59
  this.ensureConnected().then(() => {
60
- const { _id, ...safeDoc } = record;
60
+ const safeDoc = require_captcha.toCentralRecord(record);
61
61
  return this.db.tables.powcaptcha.updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
62
62
  }).then(() => markStored?.(timestamp)).catch((err) => {
63
63
  this.logger.error(() => ({
@@ -86,7 +86,7 @@ var CentralDbStreamer = class CentralDbStreamer {
86
86
  streamImageRecord(record, markStored) {
87
87
  const timestamp = this.getRecordTimestamp(record);
88
88
  this.ensureConnected().then(() => {
89
- const { _id, ...safeDoc } = record;
89
+ const safeDoc = require_captcha.toCentralRecord(record);
90
90
  return this.db.tables.commitment.updateOne({ id: safeDoc.id }, { $set: safeDoc }, { upsert: true });
91
91
  }).then(() => markStored?.(timestamp)).catch((err) => {
92
92
  this.logger.error(() => ({
@@ -136,7 +136,7 @@ var CentralDbStreamer = class CentralDbStreamer {
136
136
  streamChallengeRecord(table, label, record, markStored) {
137
137
  const timestamp = this.getRecordTimestamp(record);
138
138
  this.ensureConnected().then(() => {
139
- const { _id, ...safeDoc } = record;
139
+ const safeDoc = require_captcha.toCentralRecord(record);
140
140
  return this.db.tables[table].updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
141
141
  }).then(() => markStored?.(timestamp)).catch((err) => {
142
142
  this.logger.error(() => ({
@@ -162,7 +162,7 @@ var CentralDbStreamer = class CentralDbStreamer {
162
162
  streamSessionRecord(record, markStored) {
163
163
  const timestamp = this.getRecordTimestamp(record);
164
164
  this.ensureConnected().then(() => {
165
- const { _id, ...safeDoc } = record;
165
+ const safeDoc = require_captcha.toCentralRecord(record);
166
166
  return this.db.tables.session.updateOne({ sessionId: safeDoc.sessionId }, { $set: safeDoc }, { upsert: true });
167
167
  }).then(() => markStored?.(timestamp)).catch((err) => {
168
168
  this.logger.error(() => ({
@@ -19,3 +19,4 @@ exports.CentralDbStreamer = require_centralDbStreamer.CentralDbStreamer;
19
19
  exports.ClientDatabase = require_client.ClientDatabase;
20
20
  exports.Databases = Databases;
21
21
  exports.ProviderDatabase = require_provider.ProviderDatabase;
22
+ exports.toCentralRecord = require_captcha.toCentralRecord;
@@ -738,7 +738,7 @@ var ProviderDatabase = class ProviderDatabase extends require_mongo.MongoDatabas
738
738
  iconOrderEvents: 1
739
739
  },
740
740
  streamRecord: (record, markStored) => this.centralStreamer?.streamIconOrderRecord(record, markStored),
741
- streamUpdate: (challenge, markStored) => this.centralStreamer?.streamIconOrderUpdate(() => this.getIconOrderCaptchaRecordByChallenge(challenge), markStored)
741
+ streamUpdate: (challenge, markStored) => this.centralStreamer?.streamIconOrderUpdate(() => this.getInteractiveCaptchaRecordByChallenge(this.interactiveCollection(_prosopo_types.CaptchaType.iconOrder), challenge, "streamIconOrderUpdate", { render: 1 }), markStored)
742
742
  };
743
743
  case _prosopo_types.CaptchaType.audio: return {
744
744
  table: "audiocaptcha",
@@ -834,11 +834,12 @@ var ProviderDatabase = class ProviderDatabase extends require_mongo.MongoDatabas
834
834
  answer
835
835
  });
836
836
  }
837
- async storeIconOrderCaptchaRecord(challenge, components, targets, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
837
+ async storeIconOrderCaptchaRecord(challenge, components, targets, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo, render) {
838
838
  await this.storeInteractiveCaptchaRecord(this.interactiveCollection(_prosopo_types.CaptchaType.iconOrder), {
839
839
  ...this.pendingInteractiveRecord(challenge, components, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo),
840
840
  targets,
841
- tolerance
841
+ tolerance,
842
+ ...render && { render }
842
843
  });
843
844
  }
844
845
  async getInteractiveCaptchaRecordByChallenge(collection, challenge, failedFuncName, extraProjection = {}) {
@@ -28,3 +28,4 @@ exports.defaultIndexName = require_reconcileIndexes.defaultIndexName;
28
28
  exports.getMongoCompressors = require_mongooseOptions.getMongoCompressors;
29
29
  exports.getMongoConnectionOptions = require_mongooseOptions.getMongoConnectionOptions;
30
30
  exports.reconcileIndexes = require_reconcileIndexes.reconcileIndexes;
31
+ exports.toCentralRecord = require_captcha.toCentralRecord;
@@ -39,6 +39,10 @@ var CAPTCHA_TABLES = [
39
39
  schema: StoredIconOrderCaptchaRecordSchema
40
40
  }
41
41
  ];
42
+ var toCentralRecord = (record) => {
43
+ const { _id, storedAtTimestamp, ...centralRecord } = record;
44
+ return centralRecord;
45
+ };
42
46
  var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
43
47
  constructor(url, dbname, authSource, logger, timeouts) {
44
48
  super(url, dbname, authSource, logger, timeouts);
@@ -126,8 +130,7 @@ var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
126
130
  await this.connect();
127
131
  if (sessionEvents.length) {
128
132
  const result = await this.tables.session.bulkWrite(sessionEvents.map((document) => {
129
- const { _id, ...safeDoc } = document;
130
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
133
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(document));
131
134
  return { updateOne: {
132
135
  filter: { sessionId: normalised.sessionId },
133
136
  update: { $set: normalised },
@@ -146,8 +149,7 @@ var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
146
149
  }
147
150
  if (imageCaptchaEvents.length) {
148
151
  const result = await this.tables.commitment.bulkWrite(imageCaptchaEvents.map((doc) => {
149
- const { _id, ...safeDoc } = doc;
150
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
152
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
151
153
  return { updateOne: {
152
154
  filter: { id: normalised.id },
153
155
  update: { $set: normalised },
@@ -166,8 +168,7 @@ var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
166
168
  }
167
169
  if (powCaptchaEvents.length) {
168
170
  const result = await this.tables.powcaptcha.bulkWrite(powCaptchaEvents.map((doc) => {
169
- const { _id, ...safeDoc } = doc;
170
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
171
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
171
172
  return { updateOne: {
172
173
  filter: { challenge: normalised.challenge },
173
174
  update: { $set: normalised },
@@ -192,8 +193,7 @@ var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
192
193
  async upsertChallengeRecords(table, records, msg) {
193
194
  if (!records.length) return;
194
195
  const result = await this.tables[table].bulkWrite(records.map((doc) => {
195
- const { _id, ...safeDoc } = doc;
196
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
196
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
197
197
  return { updateOne: {
198
198
  filter: { challenge: normalised.challenge },
199
199
  update: { $set: normalised },
@@ -237,4 +237,4 @@ var CaptchaDatabase = class CaptchaDatabase extends MongoDatabase {
237
237
  }
238
238
  };
239
239
  //#endregion
240
- export { CaptchaDatabase };
240
+ export { CaptchaDatabase, toCentralRecord };
@@ -1,4 +1,4 @@
1
- import { CaptchaDatabase } from "./captcha.js";
1
+ import { CaptchaDatabase, toCentralRecord } from "./captcha.js";
2
2
  import { getLogger } from "@prosopo/logger";
3
3
  //#region src/databases/centralDbStreamer.ts
4
4
  /**
@@ -57,7 +57,7 @@ var CentralDbStreamer = class CentralDbStreamer {
57
57
  streamPowRecord(record, markStored) {
58
58
  const timestamp = this.getRecordTimestamp(record);
59
59
  this.ensureConnected().then(() => {
60
- const { _id, ...safeDoc } = record;
60
+ const safeDoc = toCentralRecord(record);
61
61
  return this.db.tables.powcaptcha.updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
62
62
  }).then(() => markStored?.(timestamp)).catch((err) => {
63
63
  this.logger.error(() => ({
@@ -86,7 +86,7 @@ var CentralDbStreamer = class CentralDbStreamer {
86
86
  streamImageRecord(record, markStored) {
87
87
  const timestamp = this.getRecordTimestamp(record);
88
88
  this.ensureConnected().then(() => {
89
- const { _id, ...safeDoc } = record;
89
+ const safeDoc = toCentralRecord(record);
90
90
  return this.db.tables.commitment.updateOne({ id: safeDoc.id }, { $set: safeDoc }, { upsert: true });
91
91
  }).then(() => markStored?.(timestamp)).catch((err) => {
92
92
  this.logger.error(() => ({
@@ -136,7 +136,7 @@ var CentralDbStreamer = class CentralDbStreamer {
136
136
  streamChallengeRecord(table, label, record, markStored) {
137
137
  const timestamp = this.getRecordTimestamp(record);
138
138
  this.ensureConnected().then(() => {
139
- const { _id, ...safeDoc } = record;
139
+ const safeDoc = toCentralRecord(record);
140
140
  return this.db.tables[table].updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
141
141
  }).then(() => markStored?.(timestamp)).catch((err) => {
142
142
  this.logger.error(() => ({
@@ -162,7 +162,7 @@ var CentralDbStreamer = class CentralDbStreamer {
162
162
  streamSessionRecord(record, markStored) {
163
163
  const timestamp = this.getRecordTimestamp(record);
164
164
  this.ensureConnected().then(() => {
165
- const { _id, ...safeDoc } = record;
165
+ const safeDoc = toCentralRecord(record);
166
166
  return this.db.tables.session.updateOne({ sessionId: safeDoc.sessionId }, { $set: safeDoc }, { upsert: true });
167
167
  }).then(() => markStored?.(timestamp)).catch((err) => {
168
168
  this.logger.error(() => ({
@@ -1,6 +1,6 @@
1
1
  import { MongoDatabase } from "../base/mongo.js";
2
2
  import { MongoMemoryDatabase } from "../base/mongoMemory.js";
3
- import { CaptchaDatabase } from "./captcha.js";
3
+ import { CaptchaDatabase, toCentralRecord } from "./captcha.js";
4
4
  import { ClientDatabase } from "./client.js";
5
5
  import { ProviderDatabase } from "./provider.js";
6
6
  import { CentralDbStreamer } from "./centralDbStreamer.js";
@@ -14,4 +14,4 @@ var Databases = {
14
14
  [DatabaseTypes.Values.mongoMemory]: MongoMemoryDatabase
15
15
  };
16
16
  //#endregion
17
- export { CaptchaDatabase, CentralDbStreamer, ClientDatabase, Databases, ProviderDatabase };
17
+ export { CaptchaDatabase, CentralDbStreamer, ClientDatabase, Databases, ProviderDatabase, toCentralRecord };
@@ -738,7 +738,7 @@ var ProviderDatabase = class ProviderDatabase extends MongoDatabase {
738
738
  iconOrderEvents: 1
739
739
  },
740
740
  streamRecord: (record, markStored) => this.centralStreamer?.streamIconOrderRecord(record, markStored),
741
- streamUpdate: (challenge, markStored) => this.centralStreamer?.streamIconOrderUpdate(() => this.getIconOrderCaptchaRecordByChallenge(challenge), markStored)
741
+ streamUpdate: (challenge, markStored) => this.centralStreamer?.streamIconOrderUpdate(() => this.getInteractiveCaptchaRecordByChallenge(this.interactiveCollection(CaptchaType.iconOrder), challenge, "streamIconOrderUpdate", { render: 1 }), markStored)
742
742
  };
743
743
  case CaptchaType.audio: return {
744
744
  table: "audiocaptcha",
@@ -834,11 +834,12 @@ var ProviderDatabase = class ProviderDatabase extends MongoDatabase {
834
834
  answer
835
835
  });
836
836
  }
837
- async storeIconOrderCaptchaRecord(challenge, components, targets, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo) {
837
+ async storeIconOrderCaptchaRecord(challenge, components, targets, tolerance, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo, render) {
838
838
  await this.storeInteractiveCaptchaRecord(this.interactiveCollection(CaptchaType.iconOrder), {
839
839
  ...this.pendingInteractiveRecord(challenge, components, providerSignature, ipAddress, headers, ja4, sessionId, ipInfo),
840
840
  targets,
841
- tolerance
841
+ tolerance,
842
+ ...render && { render }
842
843
  });
843
844
  }
844
845
  async getInteractiveCaptchaRecordByChallenge(collection, challenge, failedFuncName, extraProjection = {}) {
package/dist/esm/index.js CHANGED
@@ -3,7 +3,7 @@ import { DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_SERVER_SELECTION_TIMEOUT_MS, getMon
3
3
  import { MongoDatabase } from "./base/mongo.js";
4
4
  import { MongoMemoryDatabase } from "./base/mongoMemory.js";
5
5
  import { defaultIndexName, reconcileIndexes } from "./base/reconcileIndexes.js";
6
- import { CaptchaDatabase } from "./databases/captcha.js";
6
+ import { CaptchaDatabase, toCentralRecord } from "./databases/captcha.js";
7
7
  import { ClientDatabase } from "./databases/client.js";
8
8
  import { ProviderDatabase } from "./databases/provider.js";
9
9
  import { CentralDbStreamer } from "./databases/centralDbStreamer.js";
@@ -13,4 +13,4 @@ import { makeDirectory } from "make-dir";
13
13
  //#region src/index.ts
14
14
  console.debug(makeDirectory);
15
15
  //#endregion
16
- export { CaptchaDatabase, CentralDbStreamer, ClientDatabase, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_SERVER_SELECTION_TIMEOUT_MS, DETECTOR_BUNDLE_TTL_SECONDS, Databases, MongoDatabase, MongoMemoryDatabase, ProviderDatabase, RedisWriteQueue, defaultIndexName, getMongoCompressors, getMongoConnectionOptions, reconcileIndexes };
16
+ export { CaptchaDatabase, CentralDbStreamer, ClientDatabase, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_SERVER_SELECTION_TIMEOUT_MS, DETECTOR_BUNDLE_TTL_SECONDS, Databases, MongoDatabase, MongoMemoryDatabase, ProviderDatabase, RedisWriteQueue, defaultIndexName, getMongoCompressors, getMongoConnectionOptions, reconcileIndexes, toCentralRecord };
@@ -11,6 +11,10 @@ declare enum TableNames {
11
11
  audiocaptcha = "audiocaptcha",
12
12
  iconordercaptcha = "iconordercaptcha"
13
13
  }
14
+ export declare const toCentralRecord: <T extends {
15
+ _id?: unknown;
16
+ storedAtTimestamp?: Date;
17
+ }>(record: T) => Omit<T, "_id" | "storedAtTimestamp">;
14
18
  export declare class CaptchaDatabase extends MongoDatabase implements ICaptchaDatabase {
15
19
  tables: Tables<TableNames>;
16
20
  private indexesEnsured;
@@ -1 +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,EACN,KAAK,uBAAuB,EAC5B,aAAa,EAEb,MAAM,kBAAkB,CAAC;AAI1B,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"}
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,EACN,KAAK,uBAAuB,EAC5B,aAAa,EAEb,MAAM,kBAAkB,CAAC;AAI1B,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,eAAO,MAAM,eAAe,GAC3B,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,IAAI,CAAA;CAAE,UAE7C,CAAC,KACP,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,mBAAmB,CAGrC,CAAC;AAEF,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;YA2HhC,sBAAsB;IAwC9B,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"}
@@ -50,6 +50,10 @@ const CAPTCHA_TABLES = [
50
50
  schema: StoredIconOrderCaptchaRecordSchema,
51
51
  },
52
52
  ];
53
+ export const toCentralRecord = (record) => {
54
+ const { _id, storedAtTimestamp, ...centralRecord } = record;
55
+ return centralRecord;
56
+ };
53
57
  export class CaptchaDatabase extends MongoDatabase {
54
58
  constructor(url, dbname, authSource, logger, timeouts) {
55
59
  super(url, dbname, authSource, logger, timeouts);
@@ -137,8 +141,7 @@ export class CaptchaDatabase extends MongoDatabase {
137
141
  await this.connect();
138
142
  if (sessionEvents.length) {
139
143
  const result = await this.tables.session.bulkWrite(sessionEvents.map((document) => {
140
- const { _id, ...safeDoc } = document;
141
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
144
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(document));
142
145
  return {
143
146
  updateOne: {
144
147
  filter: { sessionId: normalised.sessionId },
@@ -159,8 +162,7 @@ export class CaptchaDatabase extends MongoDatabase {
159
162
  }
160
163
  if (imageCaptchaEvents.length) {
161
164
  const result = await this.tables.commitment.bulkWrite(imageCaptchaEvents.map((doc) => {
162
- const { _id, ...safeDoc } = doc;
163
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
165
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
164
166
  return {
165
167
  updateOne: {
166
168
  filter: { id: normalised.id },
@@ -181,8 +183,7 @@ export class CaptchaDatabase extends MongoDatabase {
181
183
  }
182
184
  if (powCaptchaEvents.length) {
183
185
  const result = await this.tables.powcaptcha.bulkWrite(powCaptchaEvents.map((doc) => {
184
- const { _id, ...safeDoc } = doc;
185
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
186
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
186
187
  return {
187
188
  updateOne: {
188
189
  filter: { challenge: normalised.challenge },
@@ -211,8 +212,7 @@ export class CaptchaDatabase extends MongoDatabase {
211
212
  return;
212
213
  }
213
214
  const result = await this.tables[table].bulkWrite(records.map((doc) => {
214
- const { _id, ...safeDoc } = doc;
215
- const normalised = CaptchaDatabase.normaliseDocCompositeIps(safeDoc);
215
+ const normalised = CaptchaDatabase.normaliseDocCompositeIps(toCentralRecord(doc));
216
216
  return {
217
217
  updateOne: {
218
218
  filter: { challenge: normalised.challenge },
@@ -1 +1 @@
1
- {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../../src/databases/captcha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../../src/databases/captcha.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getLogger } from "@prosopo/logger";
2
- import { CaptchaDatabase } from "./captcha.js";
2
+ import { CaptchaDatabase, toCentralRecord } from "./captcha.js";
3
3
  export class CentralDbStreamer {
4
4
  constructor(mongoCaptchaUri, logger) {
5
5
  this.lastFailureTime = 0;
@@ -40,7 +40,7 @@ export class CentralDbStreamer {
40
40
  const timestamp = this.getRecordTimestamp(record);
41
41
  this.ensureConnected()
42
42
  .then(() => {
43
- const { _id, ...safeDoc } = record;
43
+ const safeDoc = toCentralRecord(record);
44
44
  return this.db.tables.powcaptcha.updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
45
45
  })
46
46
  .then(() => markStored?.(timestamp))
@@ -69,7 +69,7 @@ export class CentralDbStreamer {
69
69
  const timestamp = this.getRecordTimestamp(record);
70
70
  this.ensureConnected()
71
71
  .then(() => {
72
- const { _id, ...safeDoc } = record;
72
+ const safeDoc = toCentralRecord(record);
73
73
  return this.db.tables.commitment.updateOne({ id: safeDoc.id }, { $set: safeDoc }, { upsert: true });
74
74
  })
75
75
  .then(() => markStored?.(timestamp))
@@ -116,7 +116,7 @@ export class CentralDbStreamer {
116
116
  const timestamp = this.getRecordTimestamp(record);
117
117
  this.ensureConnected()
118
118
  .then(() => {
119
- const { _id, ...safeDoc } = record;
119
+ const safeDoc = toCentralRecord(record);
120
120
  return this.db.tables[table].updateOne({ challenge: safeDoc.challenge }, { $set: safeDoc }, { upsert: true });
121
121
  })
122
122
  .then(() => markStored?.(timestamp))
@@ -145,7 +145,7 @@ export class CentralDbStreamer {
145
145
  const timestamp = this.getRecordTimestamp(record);
146
146
  this.ensureConnected()
147
147
  .then(() => {
148
- const { _id, ...safeDoc } = record;
148
+ const safeDoc = toCentralRecord(record);
149
149
  return this.db.tables.session.updateOne({ sessionId: safeDoc.sessionId }, { $set: safeDoc }, { upsert: true });
150
150
  })
151
151
  .then(() => markStored?.(timestamp))