@prosopo/database 3.15.1 → 3.15.2

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/database@3.15.1 build:cjs
2
+ > @prosopo/database@3.15.2 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -48,6 +48,6 @@ rendering chunks...
48
48
  dist/cjs/databases/centralDbStreamer.cjs  4.20 kB
49
49
  dist/cjs/base/mongo.cjs  4.79 kB
50
50
  dist/cjs/databases/captcha.cjs  7.54 kB
51
- dist/cjs/redisCache.cjs 12.40 kB
51
+ dist/cjs/redisCache.cjs 15.68 kB
52
52
  dist/cjs/databases/provider.cjs 69.92 kB
53
- ✓ built in 347ms
53
+ ✓ built in 528ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/database@3.15.1 build:tsc
2
+ > @prosopo/database@3.15.2 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 3:25:03 PM - Projects in this build:
5
+ 10:33:05 PM - Projects in this build:
6
6
  * ../../dev/config/tsconfig.json
7
7
  * ../locale/tsconfig.json
8
8
  * ../util/tsconfig.json
@@ -17,31 +17,31 @@
17
17
  * ../types-database/tsconfig.json
18
18
  * tsconfig.json
19
19
 
20
- 3:25:03 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'
20
+ 10:33:05 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/vite/NodejsPolarsNativeFilePlugin.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
21
21
 
22
- 3:25:03 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
22
+ 10:33:05 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
23
23
 
24
- 3:25:03 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
24
+ 10:33:05 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
25
25
 
26
- 3:25:03 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
26
+ 10:33:05 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/logger.ts' is older than output '../logger/tsconfig.tsbuildinfo'
27
27
 
28
- 3:25:03 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'
28
+ 10:33:05 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'
29
29
 
30
- 3:25:03 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/procaptcha/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
30
+ 10:33:05 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
31
31
 
32
- 3:25:03 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
32
+ 10:33:05 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/tests/utils/batches.unit.test.ts' is older than output '../common/tsconfig.tsbuildinfo'
33
33
 
34
- 3:25:03 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
34
+ 10:33:05 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
35
35
 
36
- 3:25:03 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/redisClient.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
36
+ 10:33:05 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'
37
37
 
38
- 3:25:03 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
38
+ 10:33:05 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
39
39
 
40
- 3:25:03 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
40
+ 10:33:05 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'
41
41
 
42
- 3:25:03 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/tsconfig.tsbuildinfo'
42
+ 10:33:05 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'
43
43
 
44
- 3:25:03 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
44
+ 10:33:05 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
45
45
 
46
- 3:25:03 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
46
+ 10:33:05 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
47
47
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/database@3.15.1 build
2
+ > @prosopo/database@3.15.2 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/database@3.15.1 build:cross-env
6
+ > @prosopo/database@3.15.2 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -52,6 +52,6 @@ rendering chunks...
52
52
  dist/databases/centralDbStreamer.js  4.09 kB
53
53
  dist/base/mongo.js  4.34 kB
54
54
  dist/databases/captcha.js  7.46 kB
55
- dist/redisCache.js 12.30 kB
55
+ dist/redisCache.js 15.58 kB
56
56
  dist/databases/provider.js 69.72 kB
57
- ✓ built in 518ms
57
+ ✓ built in 502ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @prosopo/database
2
2
 
3
+ ## 3.15.2
4
+ ### Patch Changes
5
+
6
+ - ec363e9: fix(provider): resolve origin sessionId to escalation when post-PoW route() escalates to image/puzzle
7
+
8
+ When the decision machine's route() phase escalates the user from PoW to an image/puzzle captcha, `buildEscalation` mints a fresh session — but the originating session has already been consumed by the preceding /captcha/pow request. Widgets that didn't switch to the escalation sessionId on the next /captcha/* call (older bundled SDKs, hand-rolled wrappers, network-retry races, tab races) landed on NO_SESSION_FOUND. Production deploy of R1/R2 escalations at 18:39 UTC caused a 4.6× spike in CAPTCHA.NO_SESSION_FOUND (363/hr → 1,668/hr); rate dropped immediately once the routing artifact was deleted.
9
+
10
+ Records an origin → escalation sessionId mapping in Redis at the moment `buildEscalation` creates the new session. On the next /captcha/* request, `isValidRequest` falls back to that mapping when `checkAndRemoveSession` returns null for the supplied sessionId, then invalidates the mapping (single-use). When Redis is unavailable the escalation still returns to the client unchanged — those deployments accept the widget must handle the new sessionId on its own.
11
+
3
12
  ## 3.15.1
4
13
  ### Patch Changes
5
14
 
@@ -194,6 +194,94 @@ class RedisWriteQueue {
194
194
  return null;
195
195
  }
196
196
  }
197
+ /**
198
+ * Cache an origin → escalation sessionId mapping for the post-PoW
199
+ * escalation flow.
200
+ *
201
+ * Background: when the routing machine returns image/puzzle from the
202
+ * postPow phase, `buildEscalation` (`api/captcha/submitPoWCaptchaSolution.ts`)
203
+ * mints a new session with a fresh `sessionId` and returns it on the
204
+ * `escalation` field. A widget that handles the escalation cleanly
205
+ * mounts the next captcha with the new sessionId. But there are
206
+ * several real-world paths where the widget keeps using the original
207
+ * sessionId for the follow-up `/captcha/{type}` request — bundled SDK
208
+ * versions that predate the escalation handler, dapps that hand-roll
209
+ * the wrapper, network-glitch retries, or browser-tab races. The
210
+ * original session has been consumed and soft-deleted by the
211
+ * preceding `/captcha/pow`, so the follow-up gets
212
+ * `CAPTCHA.NO_SESSION_FOUND` and the user sees an inline error → FAQ.
213
+ *
214
+ * This mapping lets `isValidRequest` resolve the original sessionId
215
+ * forward to the live escalation session and proceed normally.
216
+ *
217
+ * TTL is short on purpose: escalation handoffs complete in seconds
218
+ * (the user solves the follow-up immediately) and a stale mapping
219
+ * pointing at a long-gone session would just produce a different
220
+ * shape of NO_SESSION_FOUND.
221
+ */
222
+ async cacheSessionEscalation(originSessionId, escalationSessionId, ttlSeconds = 600) {
223
+ const client = await this.getClient();
224
+ if (!client) {
225
+ return false;
226
+ }
227
+ try {
228
+ const key = `cache:session:escalation:${originSessionId}`;
229
+ await client.set(key, escalationSessionId, { EX: ttlSeconds });
230
+ return true;
231
+ } catch (error) {
232
+ this.logger.warn(() => ({
233
+ msg: "Failed to cache session escalation mapping in Redis",
234
+ err: error,
235
+ originSessionId,
236
+ escalationSessionId
237
+ }));
238
+ return false;
239
+ }
240
+ }
241
+ /**
242
+ * Resolve an original sessionId to its escalation sessionId, if one was
243
+ * recorded. Returns null when there is no mapping (either no escalation
244
+ * happened, or the TTL has elapsed).
245
+ */
246
+ async getCachedSessionEscalation(originSessionId) {
247
+ const client = await this.getClient();
248
+ if (!client) {
249
+ return null;
250
+ }
251
+ try {
252
+ const key = `cache:session:escalation:${originSessionId}`;
253
+ return await client.get(key);
254
+ } catch (error) {
255
+ this.logger.warn(() => ({
256
+ msg: "Failed to get cached session escalation mapping from Redis",
257
+ err: error,
258
+ originSessionId
259
+ }));
260
+ return null;
261
+ }
262
+ }
263
+ /**
264
+ * Invalidate an escalation mapping. Called when the escalation session
265
+ * itself is consumed so subsequent retries on the origin sessionId fall
266
+ * through to the standard NO_SESSION_FOUND path rather than chasing a
267
+ * second-hand stale pointer.
268
+ */
269
+ async invalidateCachedSessionEscalation(originSessionId) {
270
+ const client = await this.getClient();
271
+ if (!client) {
272
+ return;
273
+ }
274
+ try {
275
+ const key = `cache:session:escalation:${originSessionId}`;
276
+ await client.del(key);
277
+ } catch (error) {
278
+ this.logger.warn(() => ({
279
+ msg: "Failed to invalidate cached session escalation mapping",
280
+ err: error,
281
+ originSessionId
282
+ }));
283
+ }
284
+ }
197
285
  // ── Session write queue ─────────────────────────────────────────────
198
286
  /**
199
287
  * Queue a session record for batched insertion into MongoDB.
@@ -16,6 +16,9 @@ export declare class RedisWriteQueue {
16
16
  invalidateCachedSessionByHash(userSitekeyIpHash: string): Promise<void>;
17
17
  cacheSessionByHash(userSitekeyIpHash: string, sessionId: string, ttlSeconds?: number): Promise<boolean>;
18
18
  getCachedSessionByHash(userSitekeyIpHash: string): Promise<string | null>;
19
+ cacheSessionEscalation(originSessionId: string, escalationSessionId: string, ttlSeconds?: number): Promise<boolean>;
20
+ getCachedSessionEscalation(originSessionId: string): Promise<string | null>;
21
+ invalidateCachedSessionEscalation(originSessionId: string): Promise<void>;
19
22
  queueSessionRecord(sessionId: string, record: Record<string, unknown>, ttlSeconds?: number): Promise<boolean>;
20
23
  drainSessionRecords(limit?: number): Promise<Array<{
21
24
  sessionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"redisCache.d.ts","sourceRoot":"","sources":["../src/redisCache.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAkC7D,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,aAAa,CACf;IACN,OAAO,CAAC,mBAAmB,CAAqB;gBAEpC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM;YAKzC,SAAS;IAgBjB,YAAY,CACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAyBb,gBAAgB,CACrB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IA8BpC,kBAAkB,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAiBb,+BAA+B,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAmBb,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzD,6BAA6B,CAClC,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAwBV,kBAAkB,CACvB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAO,GACf,OAAO,CAAC,OAAO,CAAC;IAuBb,sBAAsB,CAC3B,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBnB,kBAAkB,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAkCb,mBAAmB,CACxB,KAAK,SAAM,GACT,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IA+CzE,kBAAkB,CACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,EACnD,UAAU,SAAQ,EAClB,mBAAmB,SAAK,GACtB,IAAI;IAmBP,OAAO,CAAC,yBAAyB;YAiBnB,eAAe;IAa7B,iBAAiB,IAAI,IAAI;IAuBnB,sBAAsB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD7D,OAAO,IAAI,OAAO;CAGlB"}
1
+ {"version":3,"file":"redisCache.d.ts","sourceRoot":"","sources":["../src/redisCache.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAkC7D,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,aAAa,CACf;IACN,OAAO,CAAC,mBAAmB,CAAqB;gBAEpC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM;YAKzC,SAAS;IAgBjB,YAAY,CACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAyBb,gBAAgB,CACrB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IA8BpC,kBAAkB,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAiBb,+BAA+B,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAmBb,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzD,6BAA6B,CAClC,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAwBV,kBAAkB,CACvB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAO,GACf,OAAO,CAAC,OAAO,CAAC;IAuBb,sBAAsB,CAC3B,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4CnB,sBAAsB,CAC3B,eAAe,EAAE,MAAM,EACvB,mBAAmB,EAAE,MAAM,EAC3B,UAAU,SAAM,GACd,OAAO,CAAC,OAAO,CAAC;IA0Bb,0BAA0B,CAC/B,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBnB,iCAAiC,CACtC,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAwBV,kBAAkB,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAkCb,mBAAmB,CACxB,KAAK,SAAM,GACT,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IA+CzE,kBAAkB,CACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,EACnD,UAAU,SAAQ,EAClB,mBAAmB,SAAK,GACtB,IAAI;IAmBP,OAAO,CAAC,yBAAyB;YAiBnB,eAAe;IAa7B,iBAAiB,IAAI,IAAI;IAuBnB,sBAAsB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD7D,OAAO,IAAI,OAAO;CAGlB"}
@@ -192,6 +192,94 @@ class RedisWriteQueue {
192
192
  return null;
193
193
  }
194
194
  }
195
+ /**
196
+ * Cache an origin → escalation sessionId mapping for the post-PoW
197
+ * escalation flow.
198
+ *
199
+ * Background: when the routing machine returns image/puzzle from the
200
+ * postPow phase, `buildEscalation` (`api/captcha/submitPoWCaptchaSolution.ts`)
201
+ * mints a new session with a fresh `sessionId` and returns it on the
202
+ * `escalation` field. A widget that handles the escalation cleanly
203
+ * mounts the next captcha with the new sessionId. But there are
204
+ * several real-world paths where the widget keeps using the original
205
+ * sessionId for the follow-up `/captcha/{type}` request — bundled SDK
206
+ * versions that predate the escalation handler, dapps that hand-roll
207
+ * the wrapper, network-glitch retries, or browser-tab races. The
208
+ * original session has been consumed and soft-deleted by the
209
+ * preceding `/captcha/pow`, so the follow-up gets
210
+ * `CAPTCHA.NO_SESSION_FOUND` and the user sees an inline error → FAQ.
211
+ *
212
+ * This mapping lets `isValidRequest` resolve the original sessionId
213
+ * forward to the live escalation session and proceed normally.
214
+ *
215
+ * TTL is short on purpose: escalation handoffs complete in seconds
216
+ * (the user solves the follow-up immediately) and a stale mapping
217
+ * pointing at a long-gone session would just produce a different
218
+ * shape of NO_SESSION_FOUND.
219
+ */
220
+ async cacheSessionEscalation(originSessionId, escalationSessionId, ttlSeconds = 600) {
221
+ const client = await this.getClient();
222
+ if (!client) {
223
+ return false;
224
+ }
225
+ try {
226
+ const key = `cache:session:escalation:${originSessionId}`;
227
+ await client.set(key, escalationSessionId, { EX: ttlSeconds });
228
+ return true;
229
+ } catch (error) {
230
+ this.logger.warn(() => ({
231
+ msg: "Failed to cache session escalation mapping in Redis",
232
+ err: error,
233
+ originSessionId,
234
+ escalationSessionId
235
+ }));
236
+ return false;
237
+ }
238
+ }
239
+ /**
240
+ * Resolve an original sessionId to its escalation sessionId, if one was
241
+ * recorded. Returns null when there is no mapping (either no escalation
242
+ * happened, or the TTL has elapsed).
243
+ */
244
+ async getCachedSessionEscalation(originSessionId) {
245
+ const client = await this.getClient();
246
+ if (!client) {
247
+ return null;
248
+ }
249
+ try {
250
+ const key = `cache:session:escalation:${originSessionId}`;
251
+ return await client.get(key);
252
+ } catch (error) {
253
+ this.logger.warn(() => ({
254
+ msg: "Failed to get cached session escalation mapping from Redis",
255
+ err: error,
256
+ originSessionId
257
+ }));
258
+ return null;
259
+ }
260
+ }
261
+ /**
262
+ * Invalidate an escalation mapping. Called when the escalation session
263
+ * itself is consumed so subsequent retries on the origin sessionId fall
264
+ * through to the standard NO_SESSION_FOUND path rather than chasing a
265
+ * second-hand stale pointer.
266
+ */
267
+ async invalidateCachedSessionEscalation(originSessionId) {
268
+ const client = await this.getClient();
269
+ if (!client) {
270
+ return;
271
+ }
272
+ try {
273
+ const key = `cache:session:escalation:${originSessionId}`;
274
+ await client.del(key);
275
+ } catch (error) {
276
+ this.logger.warn(() => ({
277
+ msg: "Failed to invalidate cached session escalation mapping",
278
+ err: error,
279
+ originSessionId
280
+ }));
281
+ }
282
+ }
195
283
  // ── Session write queue ─────────────────────────────────────────────
196
284
  /**
197
285
  * Queue a session record for batched insertion into MongoDB.
@@ -1 +1 @@
1
- {"version":3,"file":"redisCache.js","sourceRoot":"","sources":["../src/redisCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redisCache.js","sourceRoot":"","sources":["../src/redisCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redisCacheEscalation.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisCacheEscalation.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/unit/redisCacheEscalation.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { RedisWriteQueue } from "../../redisCache.js";
3
+ const makeFakeClient = () => {
4
+ const store = new Map();
5
+ return {
6
+ store,
7
+ set: vi.fn(async (key, value, opts) => {
8
+ store.set(key, {
9
+ value,
10
+ expiresAt: opts?.EX ? Date.now() + opts.EX * 1000 : null,
11
+ });
12
+ return "OK";
13
+ }),
14
+ get: vi.fn(async (key) => {
15
+ const entry = store.get(key);
16
+ if (!entry)
17
+ return null;
18
+ if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {
19
+ store.delete(key);
20
+ return null;
21
+ }
22
+ return entry.value;
23
+ }),
24
+ del: vi.fn(async (key) => {
25
+ const had = store.delete(key);
26
+ return had ? 1 : 0;
27
+ }),
28
+ };
29
+ };
30
+ const makeLogger = () => {
31
+ const warn = vi.fn();
32
+ return {
33
+ debug: vi.fn(),
34
+ info: vi.fn(),
35
+ log: vi.fn(),
36
+ trace: vi.fn(),
37
+ warn,
38
+ error: vi.fn(),
39
+ fatal: vi.fn(),
40
+ with: vi.fn(),
41
+ level: "info",
42
+ warnSpy: warn,
43
+ };
44
+ };
45
+ describe("RedisWriteQueue — session escalation mapping", () => {
46
+ let queue;
47
+ let fakeClient;
48
+ let logger;
49
+ beforeEach(() => {
50
+ fakeClient = makeFakeClient();
51
+ logger = makeLogger();
52
+ queue = new RedisWriteQueue({}, logger);
53
+ queue.getClient =
54
+ async () => fakeClient;
55
+ });
56
+ it("cacheSessionEscalation stores the mapping under the documented key", async () => {
57
+ const ok = await queue.cacheSessionEscalation("origin-A", "escalation-B");
58
+ expect(ok).toBe(true);
59
+ expect(fakeClient.set).toHaveBeenCalledWith("cache:session:escalation:origin-A", "escalation-B", { EX: 600 });
60
+ expect(fakeClient.store.get("cache:session:escalation:origin-A")?.value).toBe("escalation-B");
61
+ });
62
+ it("getCachedSessionEscalation returns the cached value when present", async () => {
63
+ await queue.cacheSessionEscalation("origin-A", "escalation-B");
64
+ const got = await queue.getCachedSessionEscalation("origin-A");
65
+ expect(got).toBe("escalation-B");
66
+ });
67
+ it("getCachedSessionEscalation returns null when no mapping was recorded", async () => {
68
+ const got = await queue.getCachedSessionEscalation("unknown-origin");
69
+ expect(got).toBeNull();
70
+ });
71
+ it("invalidateCachedSessionEscalation drops the mapping", async () => {
72
+ await queue.cacheSessionEscalation("origin-A", "escalation-B");
73
+ await queue.invalidateCachedSessionEscalation("origin-A");
74
+ expect(fakeClient.del).toHaveBeenCalledWith("cache:session:escalation:origin-A");
75
+ const got = await queue.getCachedSessionEscalation("origin-A");
76
+ expect(got).toBeNull();
77
+ });
78
+ it("invalidateCachedSessionEscalation is a no-op on missing keys (idempotent)", async () => {
79
+ await queue.invalidateCachedSessionEscalation("never-cached");
80
+ expect(logger.warnSpy).not.toHaveBeenCalled();
81
+ });
82
+ it("cacheSessionEscalation honours a custom TTL", async () => {
83
+ await queue.cacheSessionEscalation("origin-A", "escalation-B", 30);
84
+ expect(fakeClient.set).toHaveBeenCalledWith("cache:session:escalation:origin-A", "escalation-B", { EX: 30 });
85
+ });
86
+ it("cacheSessionEscalation returns false and logs when Redis is unavailable", async () => {
87
+ queue.getClient =
88
+ async () => null;
89
+ const ok = await queue.cacheSessionEscalation("origin-A", "escalation-B");
90
+ expect(ok).toBe(false);
91
+ });
92
+ it("getCachedSessionEscalation returns null when Redis is unavailable", async () => {
93
+ queue.getClient =
94
+ async () => null;
95
+ const got = await queue.getCachedSessionEscalation("origin-A");
96
+ expect(got).toBeNull();
97
+ });
98
+ it("set failure surfaces as false + a logged warning, not a thrown error", async () => {
99
+ fakeClient.set.mockRejectedValueOnce(new Error("REDIS_DOWN"));
100
+ const ok = await queue.cacheSessionEscalation("origin-A", "escalation-B");
101
+ expect(ok).toBe(false);
102
+ expect(logger.warnSpy).toHaveBeenCalled();
103
+ });
104
+ it("get failure surfaces as null + a logged warning, not a thrown error", async () => {
105
+ fakeClient.get.mockRejectedValueOnce(new Error("REDIS_DOWN"));
106
+ const got = await queue.getCachedSessionEscalation("origin-A");
107
+ expect(got).toBeNull();
108
+ expect(logger.warnSpy).toHaveBeenCalled();
109
+ });
110
+ it("del failure surfaces as a logged warning, not a thrown error", async () => {
111
+ fakeClient.del.mockRejectedValueOnce(new Error("REDIS_DOWN"));
112
+ await expect(queue.invalidateCachedSessionEscalation("origin-A")).resolves.toBeUndefined();
113
+ expect(logger.warnSpy).toHaveBeenCalled();
114
+ });
115
+ it("entries respect TTL expiry", async () => {
116
+ vi.useFakeTimers();
117
+ try {
118
+ await queue.cacheSessionEscalation("origin-A", "escalation-B", 1);
119
+ expect(await queue.getCachedSessionEscalation("origin-A")).toBe("escalation-B");
120
+ vi.advanceTimersByTime(2_000);
121
+ expect(await queue.getCachedSessionEscalation("origin-A")).toBeNull();
122
+ }
123
+ finally {
124
+ vi.useRealTimers();
125
+ }
126
+ });
127
+ });
128
+ //# sourceMappingURL=redisCacheEscalation.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisCacheEscalation.unit.test.js","sourceRoot":"","sources":["../../../src/tests/unit/redisCacheEscalation.unit.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/database",
3
- "version": "3.15.1",
3
+ "version": "3.15.2",
4
4
  "description": "Prosopo database plugins for provider",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",