@prosopo/user-access-policy 3.12.5 → 3.12.7
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 +4 -4
- package/.turbo/turbo-build$colon$tsc.log +14 -14
- package/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +21 -0
- package/dist/cjs/redis/reader/redisAggregate.cjs +12 -0
- package/dist/cjs/redis/reader/redisRulesReader.cjs +34 -24
- package/dist/redis/reader/redisAggregate.d.ts +1 -0
- package/dist/redis/reader/redisAggregate.d.ts.map +1 -1
- package/dist/redis/reader/redisAggregate.js +13 -1
- package/dist/redis/reader/redisAggregate.js.map +1 -1
- package/dist/redis/reader/redisRulesReader.d.ts.map +1 -1
- package/dist/redis/reader/redisRulesReader.js +35 -25
- package/dist/redis/reader/redisRulesReader.js.map +1 -1
- package/dist/tests/redis/reader/redisAggregate.unit.test.d.ts +2 -0
- package/dist/tests/redis/reader/redisAggregate.unit.test.d.ts.map +1 -0
- package/dist/tests/redis/reader/redisAggregate.unit.test.js +45 -0
- package/dist/tests/redis/reader/redisAggregate.unit.test.js.map +1 -0
- package/package.json +4 -4
- package/src/redis/reader/redisAggregate.ts +28 -0
- package/src/redis/reader/redisRulesReader.ts +15 -4
- package/src/tests/redis/reader/redisAggregate.unit.test.ts +121 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/user-access-policy@3.12.
|
|
2
|
+
> @prosopo/user-access-policy@3.12.7 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -60,14 +60,14 @@ rendering chunks...
|
|
|
60
60
|
[2mdist/cjs/[22m[36mruleInput/ruleInput.cjs [39m[1m[2m 2.11 kB[22m[1m[22m
|
|
61
61
|
[2mdist/cjs/[22m[36mruleInput/policyInput.cjs [39m[1m[2m 2.14 kB[22m[1m[22m
|
|
62
62
|
[2mdist/cjs/[22m[36mapi/rulesApiClient.cjs [39m[1m[2m 2.60 kB[22m[1m[22m
|
|
63
|
-
[2mdist/cjs/[22m[36mredis/reader/redisAggregate.cjs [39m[1m[2m 2.61 kB[22m[1m[22m
|
|
64
63
|
[2mdist/cjs/[22m[36mredis/reader/redisRulesSplitQuery.cjs [39m[1m[2m 2.66 kB[22m[1m[22m
|
|
65
64
|
[2mdist/cjs/[22m[36mruleInput/userScopeInput.cjs [39m[1m[2m 2.67 kB[22m[1m[22m
|
|
65
|
+
[2mdist/cjs/[22m[36mredis/reader/redisAggregate.cjs [39m[1m[2m 2.98 kB[22m[1m[22m
|
|
66
66
|
[2mdist/cjs/[22m[36mtransformRule.cjs [39m[1m[2m 3.05 kB[22m[1m[22m
|
|
67
67
|
[2mdist/cjs/[22m[36mredis/redisRuleIndex.cjs [39m[1m[2m 3.07 kB[22m[1m[22m
|
|
68
68
|
[2mdist/cjs/[22m[36mapi/write/insertRules.cjs [39m[1m[2m 3.38 kB[22m[1m[22m
|
|
69
69
|
[2mdist/cjs/[22m[36mredis/redisRulesWriter.cjs [39m[1m[2m 3.68 kB[22m[1m[22m
|
|
70
70
|
[2mdist/cjs/[22m[36mapi/ruleApiRoutes.cjs [39m[1m[2m 4.55 kB[22m[1m[22m
|
|
71
71
|
[2mdist/cjs/[22m[36mredis/reader/redisRulesQuery.cjs [39m[1m[2m 4.60 kB[22m[1m[22m
|
|
72
|
-
[2mdist/cjs/[22m[36mredis/reader/redisRulesReader.cjs [39m[1m[
|
|
73
|
-
[32m✓ built in
|
|
72
|
+
[2mdist/cjs/[22m[36mredis/reader/redisRulesReader.cjs [39m[1m[2m17.15 kB[22m[1m[22m
|
|
73
|
+
[32m✓ built in 529ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/user-access-policy@3.12.
|
|
2
|
+
> @prosopo/user-access-policy@3.12.7 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
10:
|
|
5
|
+
10:22:25 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../locale/tsconfig.json
|
|
8
8
|
* ../util/tsconfig.json
|
|
@@ -15,27 +15,27 @@
|
|
|
15
15
|
* ../api/tsconfig.json
|
|
16
16
|
* tsconfig.json
|
|
17
17
|
|
|
18
|
-
10:
|
|
18
|
+
10:22:25 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'
|
|
19
19
|
|
|
20
|
-
10:
|
|
20
|
+
10:22:25 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
21
21
|
|
|
22
|
-
10:
|
|
22
|
+
10:22:26 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
23
23
|
|
|
24
|
-
10:
|
|
24
|
+
10:22:26 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
25
25
|
|
|
26
|
-
10:
|
|
26
|
+
10:22:26 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'
|
|
27
27
|
|
|
28
|
-
10:
|
|
28
|
+
10:22:26 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/procaptcha/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
29
29
|
|
|
30
|
-
10:
|
|
30
|
+
10:22:26 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
31
31
|
|
|
32
|
-
10:
|
|
32
|
+
10:22:26 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'
|
|
33
33
|
|
|
34
|
-
10:
|
|
34
|
+
10:22:26 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'
|
|
35
35
|
|
|
36
|
-
10:
|
|
36
|
+
10:22:26 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
37
37
|
|
|
38
|
-
10:
|
|
38
|
+
10:22:26 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
39
39
|
|
|
40
|
-
10:
|
|
40
|
+
10:22:26 PM - Building project '/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json'...
|
|
41
41
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/user-access-policy@3.12.
|
|
2
|
+
> @prosopo/user-access-policy@3.12.7 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/user-access-policy@3.12.
|
|
6
|
+
> @prosopo/user-access-policy@3.12.7 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -65,13 +65,13 @@ rendering chunks...
|
|
|
65
65
|
[2mdist/[22m[36mruleInput/policyInput.js [39m[1m[2m 1.96 kB[22m[1m[22m
|
|
66
66
|
[2mdist/[22m[36mapi/rulesApiClient.js [39m[1m[2m 2.36 kB[22m[1m[22m
|
|
67
67
|
[2mdist/[22m[36mruleInput/userScopeInput.js [39m[1m[2m 2.44 kB[22m[1m[22m
|
|
68
|
-
[2mdist/[22m[36mredis/reader/redisAggregate.js [39m[1m[2m 2.46 kB[22m[1m[22m
|
|
69
68
|
[2mdist/[22m[36mredis/reader/redisRulesSplitQuery.js [39m[1m[2m 2.55 kB[22m[1m[22m
|
|
70
69
|
[2mdist/[22m[36mredis/redisRuleIndex.js [39m[1m[2m 2.58 kB[22m[1m[22m
|
|
71
70
|
[2mdist/[22m[36mtransformRule.js [39m[1m[2m 2.76 kB[22m[1m[22m
|
|
71
|
+
[2mdist/[22m[36mredis/reader/redisAggregate.js [39m[1m[2m 2.77 kB[22m[1m[22m
|
|
72
72
|
[2mdist/[22m[36mapi/write/insertRules.js [39m[1m[2m 3.22 kB[22m[1m[22m
|
|
73
73
|
[2mdist/[22m[36mredis/redisRulesWriter.js [39m[1m[2m 3.47 kB[22m[1m[22m
|
|
74
74
|
[2mdist/[22m[36mapi/ruleApiRoutes.js [39m[1m[2m 4.33 kB[22m[1m[22m
|
|
75
75
|
[2mdist/[22m[36mredis/reader/redisRulesQuery.js [39m[1m[2m 4.45 kB[22m[1m[22m
|
|
76
|
-
[2mdist/[22m[36mredis/reader/redisRulesReader.js [39m[1m[
|
|
77
|
-
[32m✓ built in
|
|
76
|
+
[2mdist/[22m[36mredis/reader/redisRulesReader.js [39m[1m[2m16.17 kB[22m[1m[22m
|
|
77
|
+
[32m✓ built in 562ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @prosopo/user-access-policy
|
|
2
2
|
|
|
3
|
+
## 3.12.7
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [a0cb39e]
|
|
7
|
+
- @prosopo/types@4.9.12
|
|
8
|
+
- @prosopo/api@3.5.19
|
|
9
|
+
|
|
10
|
+
## 3.12.6
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- fde6896: fix(user-access-policy,common,provider): quiet two high-volume log spammers
|
|
14
|
+
|
|
15
|
+
- `user-access-policy`: switch the split-query sub-probes from `FT.AGGREGATE + LOAD @__key` to `FT.SEARCH NOCONTENT`. The aggregate reply path in `@redis/client` 5.x can throw on a null result row and the sub-query then silently returns `[]`; the NOCONTENT reply shape doesn't have that failure mode. Removes ~2k error logs per hour without changing lookup semantics.
|
|
16
|
+
- `common`: `ProsopoBaseError` auto-logs now carry a `msg` field (mirroring the translation key). Previously every auto-logged error landed in the "undefined msg" bucket in log dashboards (~800/hour).
|
|
17
|
+
- `provider`: add the missing `msg` on the image-verify catch that emits the same pattern.
|
|
18
|
+
- Updated dependencies [b9ca0e7]
|
|
19
|
+
- Updated dependencies [fde6896]
|
|
20
|
+
- @prosopo/types@4.9.11
|
|
21
|
+
- @prosopo/common@3.1.47
|
|
22
|
+
- @prosopo/api@3.5.18
|
|
23
|
+
|
|
3
24
|
## 3.12.5
|
|
4
25
|
### Patch Changes
|
|
5
26
|
|
|
@@ -4,6 +4,17 @@ const zod = require("zod");
|
|
|
4
4
|
const redisRulesQuery = require("./redisRulesQuery.cjs");
|
|
5
5
|
const redisClient = require("../redisClient.cjs");
|
|
6
6
|
const redisRuleIndex = require("../redisRuleIndex.cjs");
|
|
7
|
+
const searchRedisKeysBounded = async (client, query, maxKeys) => {
|
|
8
|
+
const reply = await client.ft.searchNoContent(
|
|
9
|
+
redisRuleIndex.ACCESS_RULES_REDIS_INDEX_NAME,
|
|
10
|
+
query,
|
|
11
|
+
{
|
|
12
|
+
DIALECT: redisRulesQuery.REDIS_QUERY_DIALECT,
|
|
13
|
+
LIMIT: { from: 0, size: maxKeys }
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
return reply.documents;
|
|
17
|
+
};
|
|
7
18
|
const aggregateRedisKeys = async (client, query, logger, batchHandler, maxKeys) => {
|
|
8
19
|
const keyField = "__key";
|
|
9
20
|
const recordSchema = zod.z.object({
|
|
@@ -76,3 +87,4 @@ const executeAggregation = async (client, query, aggregateOptions, handleBatch,
|
|
|
76
87
|
}
|
|
77
88
|
};
|
|
78
89
|
exports.aggregateRedisKeys = aggregateRedisKeys;
|
|
90
|
+
exports.searchRedisKeysBounded = searchRedisKeysBounded;
|
|
@@ -155,30 +155,40 @@ class RedisRulesReader {
|
|
|
155
155
|
try {
|
|
156
156
|
const keyLists = await Promise.all(
|
|
157
157
|
subQueries.map(
|
|
158
|
-
(sub) =>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
158
|
+
(sub) => (
|
|
159
|
+
// FT.SEARCH NOCONTENT (via searchRedisKeysBounded) rather
|
|
160
|
+
// than FT.AGGREGATE with LOAD @__key. The aggregate reply
|
|
161
|
+
// path in `@redis/client` 5.x calls transformTuplesReply
|
|
162
|
+
// on every result row; when the RediSearch coordinator
|
|
163
|
+
// returns a null tuple (observed continuously on
|
|
164
|
+
// field:ja4Hash probes in prod), that throws
|
|
165
|
+
// `Cannot read properties of null (reading 'length')` and
|
|
166
|
+
// the whole sub-query resolves empty via the .catch below.
|
|
167
|
+
// NOCONTENT returns a flat `[total, key1, key2, ...]`
|
|
168
|
+
// array so there is no nested tuple that can be null.
|
|
169
|
+
redisAggregate.searchRedisKeysBounded(
|
|
170
|
+
this.client,
|
|
171
|
+
sub.query,
|
|
172
|
+
// Per-sub-query cap. Each probe hits a discriminating
|
|
173
|
+
// index (e.g. numericIp posting list), so the natural
|
|
174
|
+
// cardinality is tiny — this cap only fires on
|
|
175
|
+
// pathological rule-set shapes and mirrors
|
|
176
|
+
// SPLIT_MAX_CANDIDATES_PER_SUB below.
|
|
177
|
+
SPLIT_MAX_CANDIDATES_PER_SUB
|
|
178
|
+
).catch((err) => {
|
|
179
|
+
this.logger.error(() => ({
|
|
180
|
+
err,
|
|
181
|
+
data: {
|
|
182
|
+
inspect: util__namespace.inspect(
|
|
183
|
+
{ subKind: sub.kind, query: sub.query },
|
|
184
|
+
{ depth: null }
|
|
185
|
+
)
|
|
186
|
+
},
|
|
187
|
+
msg: "failed to execute split rule sub-query"
|
|
188
|
+
}));
|
|
189
|
+
return [];
|
|
190
|
+
})
|
|
191
|
+
)
|
|
182
192
|
)
|
|
183
193
|
);
|
|
184
194
|
const uniqueKeys = /* @__PURE__ */ new Set();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Logger } from "@prosopo/logger";
|
|
2
2
|
import type { RedisClientType } from "redis";
|
|
3
|
+
export declare const searchRedisKeysBounded: (client: RedisClientType, query: string, maxKeys: number) => Promise<string[]>;
|
|
3
4
|
export declare const aggregateRedisKeys: (client: RedisClientType, query: string, logger: Logger, batchHandler?: (keys: string[]) => Promise<void>, maxKeys?: number) => Promise<string[]>;
|
|
4
5
|
//# sourceMappingURL=redisAggregate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisAggregate.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisAggregate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"redisAggregate.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisAggregate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAoB7C,eAAO,MAAM,sBAAsB,WAC1B,eAAe,SAChB,MAAM,WACJ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAWlB,CAAC;AAGF,eAAO,MAAM,kBAAkB,WACtB,eAAe,SAChB,MAAM,UACL,MAAM,iBACC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,YACtC,MAAM,KACd,OAAO,CAAC,MAAM,EAAE,CAkElB,CAAC"}
|
|
@@ -2,6 +2,17 @@ import { z } from "zod";
|
|
|
2
2
|
import { REDIS_QUERY_DIALECT } from "./redisRulesQuery.js";
|
|
3
3
|
import { parseRedisRecords, REDIS_BATCH_SIZE } from "../redisClient.js";
|
|
4
4
|
import { ACCESS_RULES_REDIS_INDEX_NAME } from "../redisRuleIndex.js";
|
|
5
|
+
const searchRedisKeysBounded = async (client, query, maxKeys) => {
|
|
6
|
+
const reply = await client.ft.searchNoContent(
|
|
7
|
+
ACCESS_RULES_REDIS_INDEX_NAME,
|
|
8
|
+
query,
|
|
9
|
+
{
|
|
10
|
+
DIALECT: REDIS_QUERY_DIALECT,
|
|
11
|
+
LIMIT: { from: 0, size: maxKeys }
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
return reply.documents;
|
|
15
|
+
};
|
|
5
16
|
const aggregateRedisKeys = async (client, query, logger, batchHandler, maxKeys) => {
|
|
6
17
|
const keyField = "__key";
|
|
7
18
|
const recordSchema = z.object({
|
|
@@ -74,5 +85,6 @@ const executeAggregation = async (client, query, aggregateOptions, handleBatch,
|
|
|
74
85
|
}
|
|
75
86
|
};
|
|
76
87
|
export {
|
|
77
|
-
aggregateRedisKeys
|
|
88
|
+
aggregateRedisKeys,
|
|
89
|
+
searchRedisKeysBounded
|
|
78
90
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisAggregate.js","sourceRoot":"","sources":["../../../src/redis/reader/redisAggregate.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EACN,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"redisAggregate.js","sourceRoot":"","sources":["../../../src/redis/reader/redisAggregate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisRulesReader.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesReader.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAgB7C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,KAAK,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"redisRulesReader.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesReader.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAgB7C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,KAAK,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,yBAAyB,CAAC;AAuBjC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAiHzC,qBAAa,gBAAiB,YAAW,iBAAiB;IAExD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM;IAG1B,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcvD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAazD,SAAS,CACd,MAAM,EAAE,iBAAiB,EACzB,kBAAkB,UAAQ,EAC1B,mBAAmB,UAAO,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;YAoDV,cAAc;YA2Hd,eAAe;YA0Hf,eAAe;IAuDvB,WAAW,CAChB,MAAM,EAAE,iBAAiB,EACzB,kBAAkB,UAAQ,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC;IAgDd,eAAe,CACpB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC;cAYA,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA8B5E,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAGlD;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWvD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWzD,SAAS,CACd,MAAM,EAAE,iBAAiB,EACzB,kBAAkB,UAAQ,EAC1B,mBAAmB,UAAO,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;IAWlB,WAAW,CAChB,MAAM,EAAE,iBAAiB,EACzB,kBAAkB,UAAQ,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC;IAWd,eAAe,CACpB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC;CAKhB"}
|
|
@@ -6,7 +6,7 @@ import { REDIS_BATCH_SIZE, getMissingRedisKeys, fetchRedisHashRecords, parseRedi
|
|
|
6
6
|
import { ACCESS_RULE_REDIS_KEY_PREFIX, ACCESS_RULES_REDIS_INDEX_NAME } from "../redisRuleIndex.js";
|
|
7
7
|
import { AccessPolicyType } from "../../rule.js";
|
|
8
8
|
import { accessRuleInput } from "../../ruleInput/ruleInput.js";
|
|
9
|
-
import { aggregateRedisKeys } from "./redisAggregate.js";
|
|
9
|
+
import { searchRedisKeysBounded, aggregateRedisKeys } from "./redisAggregate.js";
|
|
10
10
|
const SERVER_SIDE_RANK_TOP_N = 20;
|
|
11
11
|
const GREEDY_MAX_CANDIDATES = REDIS_BATCH_SIZE * 10;
|
|
12
12
|
const SPLIT_MAX_CANDIDATES_PER_SUB = 500;
|
|
@@ -136,30 +136,40 @@ class RedisRulesReader {
|
|
|
136
136
|
try {
|
|
137
137
|
const keyLists = await Promise.all(
|
|
138
138
|
subQueries.map(
|
|
139
|
-
(sub) =>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
139
|
+
(sub) => (
|
|
140
|
+
// FT.SEARCH NOCONTENT (via searchRedisKeysBounded) rather
|
|
141
|
+
// than FT.AGGREGATE with LOAD @__key. The aggregate reply
|
|
142
|
+
// path in `@redis/client` 5.x calls transformTuplesReply
|
|
143
|
+
// on every result row; when the RediSearch coordinator
|
|
144
|
+
// returns a null tuple (observed continuously on
|
|
145
|
+
// field:ja4Hash probes in prod), that throws
|
|
146
|
+
// `Cannot read properties of null (reading 'length')` and
|
|
147
|
+
// the whole sub-query resolves empty via the .catch below.
|
|
148
|
+
// NOCONTENT returns a flat `[total, key1, key2, ...]`
|
|
149
|
+
// array so there is no nested tuple that can be null.
|
|
150
|
+
searchRedisKeysBounded(
|
|
151
|
+
this.client,
|
|
152
|
+
sub.query,
|
|
153
|
+
// Per-sub-query cap. Each probe hits a discriminating
|
|
154
|
+
// index (e.g. numericIp posting list), so the natural
|
|
155
|
+
// cardinality is tiny — this cap only fires on
|
|
156
|
+
// pathological rule-set shapes and mirrors
|
|
157
|
+
// SPLIT_MAX_CANDIDATES_PER_SUB below.
|
|
158
|
+
SPLIT_MAX_CANDIDATES_PER_SUB
|
|
159
|
+
).catch((err) => {
|
|
160
|
+
this.logger.error(() => ({
|
|
161
|
+
err,
|
|
162
|
+
data: {
|
|
163
|
+
inspect: util.inspect(
|
|
164
|
+
{ subKind: sub.kind, query: sub.query },
|
|
165
|
+
{ depth: null }
|
|
166
|
+
)
|
|
167
|
+
},
|
|
168
|
+
msg: "failed to execute split rule sub-query"
|
|
169
|
+
}));
|
|
170
|
+
return [];
|
|
171
|
+
})
|
|
172
|
+
)
|
|
163
173
|
)
|
|
164
174
|
);
|
|
165
175
|
const uniqueKeys = /* @__PURE__ */ new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisRulesReader.js","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesReader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG/E,OAAO,EACN,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,6BAA6B,EAC7B,4BAA4B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAMjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAmBzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAKzC,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,EAAE,CAAC;AAUpD,MAAM,4BAA4B,GAAG,GAAG,CAAC;AASzC,MAAM,gBAAgB,GAAG;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,sBAAsB;IACtB,wBAAwB;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,sBAAsB;IACtB,cAAc;IACd,aAAa;IACb,oBAAoB;IACpB,2BAA2B;CAC3B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAMd,MAAM,aAAa,GAAG,cAAc,gBAAgB,CAAC,KAAK,IAAI,CAAC;AAI/D,MAAM,SAAS,GAAG,sBAAsB,CAAC;AAMzC,MAAM,gBAAgB,GAAG;IACxB,QAAQ;IACR,OAAO;IACP,cAAc;IACd,cAAc;IACd,oBAAoB;IACpB,iBAAiB;IACjB,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,SAAS;IACT,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,SAAS;IACT,cAAc;IACd,MAAM;IACN,KAAK;IACL,YAAY;IACZ,mBAAmB;IACnB,mBAAmB;CACV,CAAC;AAMX,MAAM,iBAAiB,GAAG,CAAC,IAAgB,EAAU,EAAE;IACtD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IAC5C,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IAC5C,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;QAAE,KAAK,EAAE,CAAC;IACjD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAKF,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAgB,EAAE,CAC9D,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACxB,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,MAAM,GAAG,MAAM,CAAC;AACxB,CAAC,CAAC,CAAC;AAEJ,MAAM,OAAO,gBAAgB;IAC5B,YACkB,MAAuB,EACvB,MAAc;QADd,WAAM,GAAN,MAAM,CAAiB;QACvB,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IAEJ,KAAK,CAAC,iBAAiB,CAAC,OAAiB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAEhE,MAAM,iBAAiB,GAAG,MAAM,0BAA0B,CACzD,UAAU,EACV,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAChE,CAAC;QAEF,OAAO,iBAAiB;aACtB,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAiB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAEhE,MAAM,YAAY,GAAG,MAAM,0BAA0B,CACpD,UAAU,EACV,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAC/C,CAAC;QAEF,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,SAAS,CACd,MAAyB,EACzB,kBAAkB,GAAG,KAAK,EAC1B,mBAAmB,GAAG,IAAI;QAE1B,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAE7D,IACC,mBAAmB;YAOnB,KAAK,KAAK,+CAA+C,EACxD,CAAC;YACF,OAAO,EAAE,CAAC;QACX,CAAC;QAkBD,IAAI,kBAAkB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAKD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAYO,KAAK,CAAC,cAAc,CAC3B,MAAyB;QAEzB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;QAE9C,MAAM,UAAU,GAAG,0BAA0B,CAAC,SAAS,EAAE,QAAQ,EAAE;YAClE,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACrD,CAAC,CAAC;QAEH,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,kBAAkB,CACjB,IAAI,CAAC,MAAM,EACX,GAAG,CAAC,KAAK,EACT,IAAI,CAAC,MAAM,EACX,SAAS,EAMT,4BAA4B,CAC5B,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAKf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACxB,GAAG;oBACH,IAAI,EAAE;wBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EACvC,EAAE,KAAK,EAAE,IAAI,EAAE,CACf;qBACD;oBACD,GAAG,EAAE,wCAAwC;iBAC7C,CAAC,CAAC,CAAC;gBACJ,OAAO,EAAE,CAAC;YACX,CAAC,CAAC,CACF,CACD,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACxB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACF,CAAC;YAED,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;YAEjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,iCAAiC;gBACtC,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;wBACC,aAAa,EAAE,UAAU,CAAC,MAAM;wBAChC,gBAAgB,EAAE,QAAQ,CAAC,MAAM;wBACjC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC1C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;4BACzB,KAAK,EAAE,CAAC,CAAC,MAAM;yBACf,CAAC,CAAC;wBACH,MAAM;qBACN,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CACf;iBACD;aACD,CAAC,CAAC,CAAC;YAEJ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAC9C,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,IAAI,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CACrC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1C,CAAC;YAEF,MAAM,WAAW,GAAG,iBAAiB,CACpC,eAAe,EACf,eAAe,EACf,IAAI,CAAC,MAAM,CACX,CAAC;YAUF,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAClD;gBACD,GAAG,EAAE,wCAAwC;aAC7C,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,eAAe,CAC5B,MAAyB,EACzB,KAAa;QAEb,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAC3C,6BAA6B,EAC7B,KAAK,EACL;gBACC,OAAO,EAAE,mBAAmB;gBAC5B,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC;gBAC3B,KAAK,EAAE;oBAaN,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE;oBAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE;oBAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE;oBACxD,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE;oBACrD;wBACC,IAAI,EAAE,QAAQ;wBACd,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;qBAUzC;oBACD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE;iBACxD;aACD,CACD,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,8BAA8B;gBACnC,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;wBACC,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;wBAChC,KAAK,EAAE,KAAK;qBACZ,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CACf;iBACD;aACD,CAAC,CAAC,CAAC;YAkBJ,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAI,MAA8B,CAAC,KAAK,CAAC;gBAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACX,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAC9C,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,IAAI,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CACrC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1C,CAAC;YAEF,OAAO,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACzD;gBACD,GAAG,EAAE,uCAAuC;aAC5C,CAAC,CAAC,CAAC;YAEJ,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAQO,KAAK,CAAC,eAAe,CAC5B,MAAyB,EACzB,KAAa;QAEb,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACxC,IAAI,CAAC,MAAM,EACX,KAAK,EACL,IAAI,CAAC,MAAM,EACX,SAAS,EACT,qBAAqB,CACrB,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,8BAA8B;gBACnC,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;wBACC,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,QAAQ,CAAC,MAAM;wBAC3B,KAAK,EAAE,KAAK;qBACZ,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CACf;iBACD;aACD,CAAC,CAAC,CAAC;YAEJ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,qBAAqB,CAC9C,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,IAAI,CAAC,MAAM,CACX,CAAC;YAEF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CACrC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1C,CAAC;YAEF,OAAO,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACzD;gBACD,GAAG,EAAE,uCAAuC;aAC5C,CAAC,CAAC,CAAC;YAEJ,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,MAAyB,EACzB,kBAAkB,GAAG,KAAK;QAE1B,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAE7D,IAAI,OAAO,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC;YAEJ,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACxC,IAAI,CAAC,MAAM,EACX,KAAK,EACL,IAAI,CAAC,MAAM,CACX,CAAC;YAEF,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAClC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAClD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;wBACC,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE,MAAM;qBACd,EACD;wBACC,KAAK,EAAE,IAAI;qBACX,CACD;iBACD;gBACD,GAAG,EAAE,6CAA6C;aAClD,CAAC,CAAC,CAAC;YAEJ,OAAO,EAAE,CAAC;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACxB,GAAG,EAAE,oCAAoC;YACzC,IAAI,EAAE;gBACL,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,QAAQ,EAAE,OAAO;aACjB;SACD,CAAC,CAAC,CAAC;QAEJ,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,eAAe,CACpB,YAAkD;QAElD,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAChC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAClD,CAAC;YAEF,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3E,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,IAAc;QAC9C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,qBAAqB,CAC3D,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,IAAI,CAAC,MAAM,CACX,CAAC;QACF,MAAM,OAAO,GAAsB,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAEvD,IAAI,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,iBAAiB,CAC7B,CAAC,QAAQ,CAAC,EACV,eAAe,EACf,IAAI,CAAC,MAAM,CACX,CAAC,CAAC,CAAC,CAAC;gBAEL,IAAI,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,IAAI;wBACV,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC;qBACxC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAES,WAAW,CAAC,OAAiB;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,4BAA4B,GAAG,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;CACD;AAED,MAAM,OAAO,qBAAqB;IACjC,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,iBAAiB,CAAC,OAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,8DAA8D;YACnE,IAAI,EAAE;gBACL,OAAO;aACP;SACD,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAiB;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,sDAAsD;YAC3D,IAAI,EAAE;gBACL,OAAO;aACP;SACD,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,SAAS,CACd,MAAyB,EACzB,kBAAkB,GAAG,KAAK,EAC1B,mBAAmB,GAAG,IAAI;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,sDAAsD;YAC3D,IAAI,EAAE;gBACL,MAAM;aACN;SACD,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,MAAyB,EACzB,kBAAkB,GAAG,KAAK;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,wDAAwD;YAC7D,IAAI,EAAE;gBACL,MAAM;aACN;SACD,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,eAAe,CACpB,YAAkD;QAElD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,GAAG,EAAE,4DAA4D;SACjE,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"redisRulesReader.js","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redisAggregate.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/redis/reader/redisAggregate.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { searchRedisKeysBounded } from "#policy/redis/reader/redisAggregate.js";
|
|
3
|
+
const makeClient = (reply) => ({
|
|
4
|
+
ft: {
|
|
5
|
+
searchNoContent: vi.fn().mockResolvedValue(reply),
|
|
6
|
+
},
|
|
7
|
+
});
|
|
8
|
+
describe("searchRedisKeysBounded", () => {
|
|
9
|
+
it("returns the flat documents list from FT.SEARCH NOCONTENT", async () => {
|
|
10
|
+
const client = makeClient({
|
|
11
|
+
total: 3,
|
|
12
|
+
documents: ["access_rule:a", "access_rule:b", "access_rule:c"],
|
|
13
|
+
});
|
|
14
|
+
const keys = await searchRedisKeysBounded(client, "@type:{block} @ja4Hash:{t13d_probe}", 500);
|
|
15
|
+
expect(keys).toEqual(["access_rule:a", "access_rule:b", "access_rule:c"]);
|
|
16
|
+
});
|
|
17
|
+
it("passes the caller's cap through as the FT.SEARCH LIMIT size", async () => {
|
|
18
|
+
const searchNoContent = vi
|
|
19
|
+
.fn()
|
|
20
|
+
.mockResolvedValue({ total: 0, documents: [] });
|
|
21
|
+
const client = {
|
|
22
|
+
ft: { searchNoContent },
|
|
23
|
+
};
|
|
24
|
+
await searchRedisKeysBounded(client, "@ja4Hash:{x}", 500);
|
|
25
|
+
expect(searchNoContent).toHaveBeenCalledTimes(1);
|
|
26
|
+
const call = searchNoContent.mock.calls[0];
|
|
27
|
+
expect(call).toBeDefined();
|
|
28
|
+
const options = call?.[2];
|
|
29
|
+
expect(options.LIMIT).toEqual({ from: 0, size: 500 });
|
|
30
|
+
expect(options.DIALECT).toBe(2);
|
|
31
|
+
});
|
|
32
|
+
it("returns an empty list when the search matches nothing", async () => {
|
|
33
|
+
const client = makeClient({ total: 0, documents: [] });
|
|
34
|
+
const keys = await searchRedisKeysBounded(client, "@ja4Hash:{never_indexed}", 500);
|
|
35
|
+
expect(keys).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
it("does not iterate individual document tuples (null-safe reply shape)", async () => {
|
|
38
|
+
const client = makeClient({
|
|
39
|
+
total: 2,
|
|
40
|
+
documents: ["access_rule:one", "access_rule:two"],
|
|
41
|
+
});
|
|
42
|
+
await expect(searchRedisKeysBounded(client, "@ja4Hash:{t13d2013h2_a09f3c656075_7f0f34a4126d}", 500)).resolves.toEqual(["access_rule:one", "access_rule:two"]);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=redisAggregate.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redisAggregate.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/redis/reader/redisAggregate.unit.test.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAqBhF,MAAM,UAAU,GAAG,CAAC,KAA2B,EAAoB,EAAE,CAAC,CAAC;IACtE,EAAE,EAAE;QACH,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;KACjD;CACD,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,UAAU,CAAC;YACzB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC;SAC9D,CAAC,CAAC;QAGH,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACxC,MAAoC,EACpC,qCAAqC,EACrC,GAAG,CACH,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,eAAe,GAAG,EAAE;aACxB,EAAE,EAAE;aACJ,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG;YACd,EAAE,EAAE,EAAE,eAAe,EAAE;SACO,CAAC;QAEhC,MAAM,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAE1D,MAAM,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAGvB,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAGtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACxC,MAAoC,EACpC,0BAA0B,EAC1B,GAAG,CACH,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAUH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QAIpF,MAAM,MAAM,GAAG,UAAU,CAAC;YACzB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;SACjD,CAAC,CAAC;QAEH,MAAM,MAAM,CACX,sBAAsB,CACrB,MAAoC,EACpC,iDAAiD,EACjD,GAAG,CACH,CACD,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/user-access-policy",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": "^24",
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
"test": "npm run test:unit && npm run test:integration"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@prosopo/api": "3.5.
|
|
46
|
+
"@prosopo/api": "3.5.19",
|
|
47
47
|
"@prosopo/api-route": "2.6.52",
|
|
48
|
-
"@prosopo/common": "3.1.
|
|
48
|
+
"@prosopo/common": "3.1.47",
|
|
49
49
|
"@prosopo/logger": "2.0.3",
|
|
50
50
|
"@prosopo/redis-client": "1.0.29",
|
|
51
|
-
"@prosopo/types": "4.9.
|
|
51
|
+
"@prosopo/types": "4.9.12",
|
|
52
52
|
"@prosopo/util": "3.3.4",
|
|
53
53
|
"@redis/search": "5.0.0",
|
|
54
54
|
"cidr-calc": "1.0.4",
|
|
@@ -23,6 +23,34 @@ import {
|
|
|
23
23
|
} from "#policy/redis/redisClient.js";
|
|
24
24
|
import { ACCESS_RULES_REDIS_INDEX_NAME } from "#policy/redis/redisRuleIndex.js";
|
|
25
25
|
|
|
26
|
+
// Bounded-cap variant of `aggregateRedisKeys` for hot-path sub-queries.
|
|
27
|
+
// Uses FT.SEARCH NOCONTENT rather than FT.AGGREGATE + LOAD @__key so the
|
|
28
|
+
// reply is a flat `[total, key1, key2, ...]` list decoded by
|
|
29
|
+
// `SEARCH_NOCONTENT.transformReply`, never a nested tuples array. That
|
|
30
|
+
// side-steps a crash in `@redis/client` 5.x where a `null` tuple returned
|
|
31
|
+
// by the RediSearch coordinator (seen consistently on the split-query
|
|
32
|
+
// ja4Hash probes in prod — several thousand per hour of
|
|
33
|
+
// `TypeError: Cannot read properties of null (reading 'length')`) makes
|
|
34
|
+
// `transformTuplesReply` throw and the whole sub-query resolve empty.
|
|
35
|
+
// Cap fits in a single call because callers pass a small `maxKeys`
|
|
36
|
+
// (SPLIT_MAX_CANDIDATES_PER_SUB, currently 500) — no cursor needed.
|
|
37
|
+
export const searchRedisKeysBounded = async (
|
|
38
|
+
client: RedisClientType,
|
|
39
|
+
query: string,
|
|
40
|
+
maxKeys: number,
|
|
41
|
+
): Promise<string[]> => {
|
|
42
|
+
const reply = await client.ft.searchNoContent(
|
|
43
|
+
ACCESS_RULES_REDIS_INDEX_NAME,
|
|
44
|
+
query,
|
|
45
|
+
{
|
|
46
|
+
DIALECT: REDIS_QUERY_DIALECT,
|
|
47
|
+
LIMIT: { from: 0, size: maxKeys },
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
return reply.documents;
|
|
52
|
+
};
|
|
53
|
+
|
|
26
54
|
// aggregation is used for cases when we need to get "unlimited" search results
|
|
27
55
|
export const aggregateRedisKeys = async (
|
|
28
56
|
client: RedisClientType,
|
|
@@ -38,7 +38,10 @@ import type {
|
|
|
38
38
|
AccessRulesFilter,
|
|
39
39
|
AccessRulesReader,
|
|
40
40
|
} from "#policy/rulesStorage.js";
|
|
41
|
-
import {
|
|
41
|
+
import {
|
|
42
|
+
aggregateRedisKeys,
|
|
43
|
+
searchRedisKeysBounded,
|
|
44
|
+
} from "./redisAggregate.js";
|
|
42
45
|
|
|
43
46
|
// Server-side specificity ranking config.
|
|
44
47
|
//
|
|
@@ -275,11 +278,19 @@ export class RedisRulesReader implements AccessRulesReader {
|
|
|
275
278
|
try {
|
|
276
279
|
const keyLists = await Promise.all(
|
|
277
280
|
subQueries.map((sub) =>
|
|
278
|
-
|
|
281
|
+
// FT.SEARCH NOCONTENT (via searchRedisKeysBounded) rather
|
|
282
|
+
// than FT.AGGREGATE with LOAD @__key. The aggregate reply
|
|
283
|
+
// path in `@redis/client` 5.x calls transformTuplesReply
|
|
284
|
+
// on every result row; when the RediSearch coordinator
|
|
285
|
+
// returns a null tuple (observed continuously on
|
|
286
|
+
// field:ja4Hash probes in prod), that throws
|
|
287
|
+
// `Cannot read properties of null (reading 'length')` and
|
|
288
|
+
// the whole sub-query resolves empty via the .catch below.
|
|
289
|
+
// NOCONTENT returns a flat `[total, key1, key2, ...]`
|
|
290
|
+
// array so there is no nested tuple that can be null.
|
|
291
|
+
searchRedisKeysBounded(
|
|
279
292
|
this.client,
|
|
280
293
|
sub.query,
|
|
281
|
-
this.logger,
|
|
282
|
-
undefined,
|
|
283
294
|
// Per-sub-query cap. Each probe hits a discriminating
|
|
284
295
|
// index (e.g. numericIp posting list), so the natural
|
|
285
296
|
// cardinality is tiny — this cap only fires on
|