@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.
- package/.turbo/turbo-build$colon$cjs.log +3 -3
- package/.turbo/turbo-build$colon$tsc.log +16 -16
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +9 -0
- package/dist/cjs/redisCache.cjs +88 -0
- package/dist/redisCache.d.ts +3 -0
- package/dist/redisCache.d.ts.map +1 -1
- package/dist/redisCache.js +88 -0
- package/dist/redisCache.js.map +1 -1
- package/dist/tests/unit/redisCacheEscalation.unit.test.d.ts +2 -0
- package/dist/tests/unit/redisCacheEscalation.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/redisCacheEscalation.unit.test.js +128 -0
- package/dist/tests/unit/redisCacheEscalation.unit.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
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
|
[2mdist/cjs/[22m[36mdatabases/centralDbStreamer.cjs [39m[1m[2m 4.20 kB[22m[1m[22m
|
|
49
49
|
[2mdist/cjs/[22m[36mbase/mongo.cjs [39m[1m[2m 4.79 kB[22m[1m[22m
|
|
50
50
|
[2mdist/cjs/[22m[36mdatabases/captcha.cjs [39m[1m[2m 7.54 kB[22m[1m[22m
|
|
51
|
-
[2mdist/cjs/[22m[36mredisCache.cjs [39m[1m[
|
|
51
|
+
[2mdist/cjs/[22m[36mredisCache.cjs [39m[1m[2m15.68 kB[22m[1m[22m
|
|
52
52
|
[2mdist/cjs/[22m[36mdatabases/provider.cjs [39m[1m[2m69.92 kB[22m[1m[22m
|
|
53
|
-
[32m✓ built in
|
|
53
|
+
[32m✓ built in 528ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
2
|
+
> @prosopo/database@3.15.2 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
+
10:33:05 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
10:33:05 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
|
|
47
47
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
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.
|
|
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
|
[2mdist/[22m[36mdatabases/centralDbStreamer.js [39m[1m[2m 4.09 kB[22m[1m[22m
|
|
53
53
|
[2mdist/[22m[36mbase/mongo.js [39m[1m[2m 4.34 kB[22m[1m[22m
|
|
54
54
|
[2mdist/[22m[36mdatabases/captcha.js [39m[1m[2m 7.46 kB[22m[1m[22m
|
|
55
|
-
[2mdist/[22m[36mredisCache.js [39m[1m[
|
|
55
|
+
[2mdist/[22m[36mredisCache.js [39m[1m[2m15.58 kB[22m[1m[22m
|
|
56
56
|
[2mdist/[22m[36mdatabases/provider.js [39m[1m[2m69.72 kB[22m[1m[22m
|
|
57
|
-
[32m✓ built in
|
|
57
|
+
[32m✓ built in 502ms[39m
|
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
|
|
package/dist/cjs/redisCache.cjs
CHANGED
|
@@ -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.
|
package/dist/redisCache.d.ts
CHANGED
|
@@ -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;
|
package/dist/redisCache.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/redisCache.js
CHANGED
|
@@ -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.
|
package/dist/redisCache.js.map
CHANGED
|
@@ -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 @@
|
|
|
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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"}
|