@prosopo/user-access-policy 3.12.2 → 3.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +4 -4
  2. package/.turbo/turbo-build$colon$tsc.log +14 -14
  3. package/.turbo/turbo-build.log +5 -5
  4. package/CHANGELOG.md +30 -0
  5. package/dist/cjs/redis/reader/redisRulesReader.cjs +42 -11
  6. package/dist/cjs/redis/reader/redisRulesSplitQuery.cjs +5 -3
  7. package/dist/redis/reader/redisRulesReader.d.ts +1 -1
  8. package/dist/redis/reader/redisRulesReader.d.ts.map +1 -1
  9. package/dist/redis/reader/redisRulesReader.js +43 -12
  10. package/dist/redis/reader/redisRulesReader.js.map +1 -1
  11. package/dist/redis/reader/redisRulesSplitQuery.d.ts +3 -0
  12. package/dist/redis/reader/redisRulesSplitQuery.d.ts.map +1 -1
  13. package/dist/redis/reader/redisRulesSplitQuery.js +6 -4
  14. package/dist/redis/reader/redisRulesSplitQuery.js.map +1 -1
  15. package/dist/tests/redis/reader/redisRulesSplitQuery.unit.test.js +27 -1
  16. package/dist/tests/redis/reader/redisRulesSplitQuery.unit.test.js.map +1 -1
  17. package/dist/tests/redis/redisRulesReaderRank.benchmark.integration.test.js +1 -2
  18. package/dist/tests/redis/redisRulesReaderRank.benchmark.integration.test.js.map +1 -1
  19. package/dist/tests/redis/redisRulesStorage.integration.test.js +46 -0
  20. package/dist/tests/redis/redisRulesStorage.integration.test.js.map +1 -1
  21. package/package.json +7 -7
  22. package/src/redis/reader/redisRulesReader.ts +78 -28
  23. package/src/redis/reader/redisRulesSplitQuery.ts +31 -6
  24. package/src/tests/redis/reader/redisRulesSplitQuery.unit.test.ts +76 -1
  25. package/src/tests/redis/redisRulesReaderRank.benchmark.integration.test.ts +12 -4
  26. package/src/tests/redis/redisRulesStorage.integration.test.ts +100 -0
  27. package/tsconfig.tsbuildinfo +1 -1
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/user-access-policy@3.12.2 build:cjs
2
+ > @prosopo/user-access-policy@3.12.4 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -59,9 +59,9 @@ rendering chunks...
59
59
  dist/cjs/redis/redisClient.cjs  2.09 kB
60
60
  dist/cjs/ruleInput/ruleInput.cjs  2.11 kB
61
61
  dist/cjs/ruleInput/policyInput.cjs  2.14 kB
62
- dist/cjs/redis/reader/redisRulesSplitQuery.cjs  2.43 kB
63
62
  dist/cjs/api/rulesApiClient.cjs  2.60 kB
64
63
  dist/cjs/redis/reader/redisAggregate.cjs  2.61 kB
64
+ dist/cjs/redis/reader/redisRulesSplitQuery.cjs  2.66 kB
65
65
  dist/cjs/ruleInput/userScopeInput.cjs  2.67 kB
66
66
  dist/cjs/transformRule.cjs  3.05 kB
67
67
  dist/cjs/redis/redisRuleIndex.cjs  3.07 kB
@@ -69,5 +69,5 @@ rendering chunks...
69
69
  dist/cjs/redis/redisRulesWriter.cjs  3.68 kB
70
70
  dist/cjs/api/ruleApiRoutes.cjs  4.55 kB
71
71
  dist/cjs/redis/reader/redisRulesQuery.cjs  4.60 kB
72
- dist/cjs/redis/reader/redisRulesReader.cjs 15.32 kB
73
- ✓ built in 383ms
72
+ dist/cjs/redis/reader/redisRulesReader.cjs 16.45 kB
73
+ ✓ built in 483ms
@@ -1,8 +1,8 @@
1
1
 
2
- > @prosopo/user-access-policy@3.12.2 build:tsc
2
+ > @prosopo/user-access-policy@3.12.4 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 10:34:50 AM - Projects in this build:
5
+ 4:35:21 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:34:50 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
18
+ 4:35:21 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/index.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
19
19
 
20
- 10:34:50 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
20
+ 4:35:21 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:34:50 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
22
+ 4:35:21 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:34:50 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
24
+ 4:35:21 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:34:50 AM - 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'
26
+ 4:35:21 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:34:50 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
28
+ 4:35:21 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/keyring/keyring/types.ts' is older than output '../types/tsconfig.tsbuildinfo'
29
29
 
30
- 10:34:50 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
30
+ 4:35:21 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
31
31
 
32
- 10:34:50 AM - 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'
32
+ 4:35:21 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:50 AM - 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'
34
+ 4:35:21 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:34:51 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
36
+ 4:35:22 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:34:51 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
38
+ 4:35:22 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
39
39
 
40
- 10:34:51 AM - Building project '/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json'...
40
+ 4:35:22 PM - Building project '/home/runner/work/captcha/captcha/packages/user-access-policy/tsconfig.json'...
41
41
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/user-access-policy@3.12.2 build
2
+ > @prosopo/user-access-policy@3.12.4 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/user-access-policy@3.12.2 build:cross-env
6
+ > @prosopo/user-access-policy@3.12.4 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -63,15 +63,15 @@ rendering chunks...
63
63
  dist/ruleInput/ruleInput.js  1.76 kB
64
64
  dist/redis/redisClient.js  1.90 kB
65
65
  dist/ruleInput/policyInput.js  1.96 kB
66
- dist/redis/reader/redisRulesSplitQuery.js  2.35 kB
67
66
  dist/api/rulesApiClient.js  2.36 kB
68
67
  dist/ruleInput/userScopeInput.js  2.44 kB
69
68
  dist/redis/reader/redisAggregate.js  2.46 kB
69
+ dist/redis/reader/redisRulesSplitQuery.js  2.55 kB
70
70
  dist/redis/redisRuleIndex.js  2.58 kB
71
71
  dist/transformRule.js  2.76 kB
72
72
  dist/api/write/insertRules.js  3.22 kB
73
73
  dist/redis/redisRulesWriter.js  3.47 kB
74
74
  dist/api/ruleApiRoutes.js  4.33 kB
75
75
  dist/redis/reader/redisRulesQuery.js  4.45 kB
76
- dist/redis/reader/redisRulesReader.js 14.33 kB
77
- ✓ built in 464ms
76
+ dist/redis/reader/redisRulesReader.js 15.44 kB
77
+ ✓ built in 469ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @prosopo/user-access-policy
2
2
 
3
+ ## 3.12.4
4
+ ### Patch Changes
5
+
6
+ - @prosopo/common@3.1.46
7
+ - @prosopo/types@4.9.9
8
+ - @prosopo/api@3.5.16
9
+
10
+ ## 3.12.3
11
+ ### Patch Changes
12
+
13
+ - b07b448: fix(user-access-policy): route non-block strict-match rule lookups through the split-query path
14
+
15
+ Live 2026-07-10 Twickets regression: a portal-authored Restrict/image rule scoped to `clientId + numericIp` was silently dropped from the frictionless access-policy lookup even though the rule was correctly stored in Redis and indexed. The DM then fell through to `default_pow` and served POW instead of the configured image challenge.
16
+
17
+ Root cause: the `findRulesRanked` FT.AGGREGATE ranker used for non-block lookups capped candidates at `SERVER_SIDE_RANK_TOP_N = 20` after a server-side `SORTBY @_rank`. Under Greedy matching with `matchingFieldsOnly=true`, the query is a wide OR that matches every rule missing `headHash`, `coords`, or `headersHash` — for a Twickets-shaped tenant (~860 candidates) the top 20 slots were filled by higher-specificity SIMD_REPLAY and SUDDEN_VOLUME_INCREASE Block rules that didn't actually apply to the request. The specific-IP Restrict rule (specificity 2) was pushed out; Node saw only irrelevant candidates; `rankCandidateRules` filtered them all out via `ruleApplies`; the lookup returned `[]`.
18
+
19
+ Fix: extend the existing `findBlockRulesSplit` path (previously the hot path for `blockOnly=true` callers) to cover every `matchingFieldsOnly` call. Each sub-query hits a discriminating posting list (exact numericIp, exact ja4Hash, etc.), so the ip:exact probe returns exactly the rules literally matching the request IP — the specific-IP rule can no longer be pushed off the end by irrelevant candidates from other probes. `blockOnly` is now a flag on the sub-query builder that narrows probes to `@type:{block}` when set. Split reader now sorts candidates by (specificity desc, block-first) so direct reader consumers see the same order the old FT.AGGREGATE ranker gave.
20
+
21
+ Regression coverage added:
22
+
23
+ - Unit: `buildScopedRulesSubQueries` emits/omits `@type:{block}` correctly per `blockOnly` flag and produces the same probe shape either way.
24
+ - Integration: specific-IP Restrict rule survives when 40 higher-specificity irrelevant Block rules co-exist on the same tenant (mirrors the live Twickets shape).
25
+
26
+ Benchmarks unchanged: split hot path p50=1.4ms / p99=2.2ms across 19,300 seeded rules; 100×10 concurrent storm holds ~990 req/s.
27
+ - Updated dependencies [6abff15]
28
+ - @prosopo/logger@2.0.3
29
+ - @prosopo/api-route@2.6.52
30
+ - @prosopo/common@3.1.45
31
+ - @prosopo/redis-client@1.0.29
32
+
3
33
  ## 3.12.2
4
34
  ### Patch Changes
5
35
 
@@ -71,6 +71,29 @@ const RULE_LOAD_FIELDS = [
71
71
  "@numericIpMaskMin",
72
72
  "@numericIpMaskMax"
73
73
  ];
74
+ const readerSpecificity = (rule2) => {
75
+ let score = 0;
76
+ if (rule2.clientId !== void 0) score++;
77
+ if (rule2.userId !== void 0) score++;
78
+ if (rule2.ja4Hash !== void 0) score++;
79
+ if (rule2.headersHash !== void 0) score++;
80
+ if (rule2.userAgentHash !== void 0) score++;
81
+ if (rule2.headHash !== void 0) score++;
82
+ if (rule2.coords !== void 0) score++;
83
+ if (rule2.countryCode !== void 0) score++;
84
+ if (rule2.asn !== void 0) score++;
85
+ if (rule2.os !== void 0) score++;
86
+ if (rule2.numericIp !== void 0) score++;
87
+ if (rule2.numericIpMaskMin !== void 0) score++;
88
+ return score;
89
+ };
90
+ const sortByReaderRank = (rules) => [...rules].sort((a, b) => {
91
+ const specDelta = readerSpecificity(b) - readerSpecificity(a);
92
+ if (specDelta !== 0) return specDelta;
93
+ const aBlock = a.type === rule.AccessPolicyType.Block ? 1 : 0;
94
+ const bBlock = b.type === rule.AccessPolicyType.Block ? 1 : 0;
95
+ return bBlock - aBlock;
96
+ });
74
97
  class RedisRulesReader {
75
98
  constructor(client, logger) {
76
99
  this.client = client;
@@ -105,11 +128,8 @@ class RedisRulesReader {
105
128
  query === "( @clientId:{global} | ismissing(@clientId) )") {
106
129
  return [];
107
130
  }
108
- if (matchingFieldsOnly && filter.blockOnly && filter.userScope !== void 0) {
109
- return this.findBlockRulesSplit(filter);
110
- }
111
- if (matchingFieldsOnly) {
112
- return this.findRulesRanked(filter, query);
131
+ if (matchingFieldsOnly && filter.userScope !== void 0) {
132
+ return this.findRulesSplit(filter);
113
133
  }
114
134
  return this.findRulesGreedy(filter, query);
115
135
  }
@@ -119,13 +139,19 @@ class RedisRulesReader {
119
139
  // strict "every populated rule field matches request" semantics —
120
140
  // FT can't express that shape cheaply and the previous server-side
121
141
  // APPLY / SORTBY imposed the linear-per-rule cost we're eliminating.
122
- async findBlockRulesSplit(filter) {
142
+ //
143
+ // Handles both blockOnly (hard-block middleware) and non-blockOnly
144
+ // (frictionless access-policy lookup) callers via the `blockOnly`
145
+ // flag on the sub-query builder.
146
+ async findRulesSplit(filter) {
123
147
  const userScope = filter.userScope;
124
148
  if (userScope === void 0) {
125
149
  return [];
126
150
  }
127
151
  const clientId = filter.policyScope?.clientId;
128
- const subQueries = redisRulesSplitQuery.buildScopedBlockSubQueries(userScope, clientId);
152
+ const subQueries = redisRulesSplitQuery.buildScopedRulesSubQueries(userScope, clientId, {
153
+ ...filter.blockOnly === true && { blockOnly: true }
154
+ });
129
155
  try {
130
156
  const keyLists = await Promise.all(
131
157
  subQueries.map(
@@ -149,7 +175,7 @@ class RedisRulesReader {
149
175
  { depth: null }
150
176
  )
151
177
  },
152
- msg: "failed to execute split block sub-query"
178
+ msg: "failed to execute split rule sub-query"
153
179
  }));
154
180
  return [];
155
181
  })
@@ -166,7 +192,7 @@ class RedisRulesReader {
166
192
  }
167
193
  const ruleKeys = [...uniqueKeys];
168
194
  this.logger.debug(() => ({
169
- msg: "Executed split block sub-queries",
195
+ msg: "Executed split rule sub-queries",
170
196
  data: {
171
197
  inspect: util__namespace.inspect(
172
198
  {
@@ -190,14 +216,19 @@ class RedisRulesReader {
190
216
  const nonEmptyRecords = records.filter(
191
217
  (record) => Object.keys(record).length > 0
192
218
  );
193
- return redisClient.parseRedisRecords(nonEmptyRecords, ruleInput.accessRuleInput, this.logger);
219
+ const parsedRules = redisClient.parseRedisRecords(
220
+ nonEmptyRecords,
221
+ ruleInput.accessRuleInput,
222
+ this.logger
223
+ );
224
+ return sortByReaderRank(parsedRules);
194
225
  } catch (e) {
195
226
  this.logger.error(() => ({
196
227
  err: e,
197
228
  data: {
198
229
  inspect: util__namespace.inspect({ filter }, { depth: null })
199
230
  },
200
- msg: "failed to execute split block query set"
231
+ msg: "failed to execute split rule query set"
201
232
  }));
202
233
  return [];
203
234
  }
@@ -40,10 +40,10 @@ const buildFieldClause = (field, value) => {
40
40
  const queryValue = FIELDS_REQUIRING_ESCAPE.has(field) ? escapeTagValue(stringValue) : stringValue;
41
41
  return `@${field}:{${queryValue}}`;
42
42
  };
43
- const buildScopedBlockSubQueries = (userScope, clientId) => {
44
- const typeClause = `@type:{${rule.AccessPolicyType.Block}}`;
43
+ const buildScopedRulesSubQueries = (userScope, clientId, options = {}) => {
44
+ const typeClause = options.blockOnly ? `@type:{${rule.AccessPolicyType.Block}} ` : "";
45
45
  const scopeClause = buildScopeClause(clientId);
46
- const prefix = `${typeClause} ${scopeClause}`;
46
+ const prefix = `${typeClause}${scopeClause}`;
47
47
  const subQueries = [];
48
48
  for (const field of SCALAR_USER_SCOPE_FIELDS) {
49
49
  const clause = buildFieldClause(field, userScope[field]);
@@ -75,4 +75,6 @@ const buildScopedBlockSubQueries = (userScope, clientId) => {
75
75
  });
76
76
  return subQueries;
77
77
  };
78
+ const buildScopedBlockSubQueries = (userScope, clientId) => buildScopedRulesSubQueries(userScope, clientId, { blockOnly: true });
78
79
  exports.buildScopedBlockSubQueries = buildScopedBlockSubQueries;
80
+ exports.buildScopedRulesSubQueries = buildScopedRulesSubQueries;
@@ -10,7 +10,7 @@ export declare class RedisRulesReader implements AccessRulesReader {
10
10
  getMissingRuleIds(ruleIds: string[]): Promise<string[]>;
11
11
  fetchRules(ruleIds: string[]): Promise<AccessRuleEntry[]>;
12
12
  findRules(filter: AccessRulesFilter, matchingFieldsOnly?: boolean, skipEmptyUserScopes?: boolean): Promise<AccessRule[]>;
13
- private findBlockRulesSplit;
13
+ private findRulesSplit;
14
14
  private findRulesRanked;
15
15
  private findRulesGreedy;
16
16
  findRuleIds(filter: AccessRulesFilter, matchingFieldsOnly?: boolean): Promise<string[]>;
@@ -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;AAoBjC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAgFzC,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;YAmDV,mBAAmB;YAmGnB,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"}
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;AAoBjC,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;YAmHd,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"}
@@ -1,7 +1,7 @@
1
1
  import * as util from "node:util";
2
2
  import { chunkIntoBatches, executeBatchesSequentially } from "@prosopo/common";
3
3
  import { getRulesRedisQuery, REDIS_QUERY_DIALECT } from "./redisRulesQuery.js";
4
- import { buildScopedBlockSubQueries } from "./redisRulesSplitQuery.js";
4
+ import { buildScopedRulesSubQueries } from "./redisRulesSplitQuery.js";
5
5
  import { REDIS_BATCH_SIZE, getMissingRedisKeys, fetchRedisHashRecords, parseRedisRecords } from "../redisClient.js";
6
6
  import { ACCESS_RULE_REDIS_KEY_PREFIX, ACCESS_RULES_REDIS_INDEX_NAME } from "../redisRuleIndex.js";
7
7
  import { AccessPolicyType } from "../../rule.js";
@@ -52,6 +52,29 @@ const RULE_LOAD_FIELDS = [
52
52
  "@numericIpMaskMin",
53
53
  "@numericIpMaskMax"
54
54
  ];
55
+ const readerSpecificity = (rule) => {
56
+ let score = 0;
57
+ if (rule.clientId !== void 0) score++;
58
+ if (rule.userId !== void 0) score++;
59
+ if (rule.ja4Hash !== void 0) score++;
60
+ if (rule.headersHash !== void 0) score++;
61
+ if (rule.userAgentHash !== void 0) score++;
62
+ if (rule.headHash !== void 0) score++;
63
+ if (rule.coords !== void 0) score++;
64
+ if (rule.countryCode !== void 0) score++;
65
+ if (rule.asn !== void 0) score++;
66
+ if (rule.os !== void 0) score++;
67
+ if (rule.numericIp !== void 0) score++;
68
+ if (rule.numericIpMaskMin !== void 0) score++;
69
+ return score;
70
+ };
71
+ const sortByReaderRank = (rules) => [...rules].sort((a, b) => {
72
+ const specDelta = readerSpecificity(b) - readerSpecificity(a);
73
+ if (specDelta !== 0) return specDelta;
74
+ const aBlock = a.type === AccessPolicyType.Block ? 1 : 0;
75
+ const bBlock = b.type === AccessPolicyType.Block ? 1 : 0;
76
+ return bBlock - aBlock;
77
+ });
55
78
  class RedisRulesReader {
56
79
  constructor(client, logger) {
57
80
  this.client = client;
@@ -86,11 +109,8 @@ class RedisRulesReader {
86
109
  query === "( @clientId:{global} | ismissing(@clientId) )") {
87
110
  return [];
88
111
  }
89
- if (matchingFieldsOnly && filter.blockOnly && filter.userScope !== void 0) {
90
- return this.findBlockRulesSplit(filter);
91
- }
92
- if (matchingFieldsOnly) {
93
- return this.findRulesRanked(filter, query);
112
+ if (matchingFieldsOnly && filter.userScope !== void 0) {
113
+ return this.findRulesSplit(filter);
94
114
  }
95
115
  return this.findRulesGreedy(filter, query);
96
116
  }
@@ -100,13 +120,19 @@ class RedisRulesReader {
100
120
  // strict "every populated rule field matches request" semantics —
101
121
  // FT can't express that shape cheaply and the previous server-side
102
122
  // APPLY / SORTBY imposed the linear-per-rule cost we're eliminating.
103
- async findBlockRulesSplit(filter) {
123
+ //
124
+ // Handles both blockOnly (hard-block middleware) and non-blockOnly
125
+ // (frictionless access-policy lookup) callers via the `blockOnly`
126
+ // flag on the sub-query builder.
127
+ async findRulesSplit(filter) {
104
128
  const userScope = filter.userScope;
105
129
  if (userScope === void 0) {
106
130
  return [];
107
131
  }
108
132
  const clientId = filter.policyScope?.clientId;
109
- const subQueries = buildScopedBlockSubQueries(userScope, clientId);
133
+ const subQueries = buildScopedRulesSubQueries(userScope, clientId, {
134
+ ...filter.blockOnly === true && { blockOnly: true }
135
+ });
110
136
  try {
111
137
  const keyLists = await Promise.all(
112
138
  subQueries.map(
@@ -130,7 +156,7 @@ class RedisRulesReader {
130
156
  { depth: null }
131
157
  )
132
158
  },
133
- msg: "failed to execute split block sub-query"
159
+ msg: "failed to execute split rule sub-query"
134
160
  }));
135
161
  return [];
136
162
  })
@@ -147,7 +173,7 @@ class RedisRulesReader {
147
173
  }
148
174
  const ruleKeys = [...uniqueKeys];
149
175
  this.logger.debug(() => ({
150
- msg: "Executed split block sub-queries",
176
+ msg: "Executed split rule sub-queries",
151
177
  data: {
152
178
  inspect: util.inspect(
153
179
  {
@@ -171,14 +197,19 @@ class RedisRulesReader {
171
197
  const nonEmptyRecords = records.filter(
172
198
  (record) => Object.keys(record).length > 0
173
199
  );
174
- return parseRedisRecords(nonEmptyRecords, accessRuleInput, this.logger);
200
+ const parsedRules = parseRedisRecords(
201
+ nonEmptyRecords,
202
+ accessRuleInput,
203
+ this.logger
204
+ );
205
+ return sortByReaderRank(parsedRules);
175
206
  } catch (e) {
176
207
  this.logger.error(() => ({
177
208
  err: e,
178
209
  data: {
179
210
  inspect: util.inspect({ filter }, { depth: null })
180
211
  },
181
- msg: "failed to execute split block query set"
212
+ msg: "failed to execute split rule query set"
182
213
  }));
183
214
  return [];
184
215
  }
@@ -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;AAEX,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;QAUD,IACC,kBAAkB;YAClB,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,SAAS,KAAK,SAAS,EAC7B,CAAC;YACF,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAKD,IAAI,kBAAkB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAKD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAQO,KAAK,CAAC,mBAAmB,CAChC,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,CAAC,CAAC;QAEnE,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,yCAAyC;iBAC9C,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,kCAAkC;gBACvC,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,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,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAClD;gBACD,GAAG,EAAE,yCAAyC;aAC9C,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":"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"}
@@ -3,6 +3,9 @@ type SubQuery = {
3
3
  kind: string;
4
4
  query: string;
5
5
  };
6
+ export declare const buildScopedRulesSubQueries: (userScope: UserScope, clientId: string | undefined, options?: {
7
+ blockOnly?: boolean;
8
+ }) => SubQuery[];
6
9
  export declare const buildScopedBlockSubQueries: (userScope: UserScope, clientId: string | undefined) => SubQuery[];
7
10
  export {};
8
11
  //# sourceMappingURL=redisRulesSplitQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redisRulesSplitQuery.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesSplitQuery.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,KAAK,SAAS,EACd,MAAM,iBAAiB,CAAC;AAoEzB,KAAK,QAAQ,GAAG;IAGf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAsBF,eAAO,MAAM,0BAA0B,cAC3B,SAAS,YACV,MAAM,GAAG,SAAS,KAC1B,QAAQ,EAqDV,CAAC"}
1
+ {"version":3,"file":"redisRulesSplitQuery.d.ts","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesSplitQuery.ts"],"names":[],"mappings":"AAcA,OAAO,EAGN,KAAK,SAAS,EACd,MAAM,iBAAiB,CAAC;AAoEzB,KAAK,QAAQ,GAAG;IAGf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAgCF,eAAO,MAAM,0BAA0B,cAC3B,SAAS,YACV,MAAM,GAAG,SAAS,YACnB;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,KAC9B,QAAQ,EAuDV,CAAC;AAQF,eAAO,MAAM,0BAA0B,cAC3B,SAAS,YACV,MAAM,GAAG,SAAS,KAC1B,QAAQ,EAC0D,CAAC"}
@@ -38,10 +38,10 @@ const buildFieldClause = (field, value) => {
38
38
  const queryValue = FIELDS_REQUIRING_ESCAPE.has(field) ? escapeTagValue(stringValue) : stringValue;
39
39
  return `@${field}:{${queryValue}}`;
40
40
  };
41
- const buildScopedBlockSubQueries = (userScope, clientId) => {
42
- const typeClause = `@type:{${AccessPolicyType.Block}}`;
41
+ const buildScopedRulesSubQueries = (userScope, clientId, options = {}) => {
42
+ const typeClause = options.blockOnly ? `@type:{${AccessPolicyType.Block}} ` : "";
43
43
  const scopeClause = buildScopeClause(clientId);
44
- const prefix = `${typeClause} ${scopeClause}`;
44
+ const prefix = `${typeClause}${scopeClause}`;
45
45
  const subQueries = [];
46
46
  for (const field of SCALAR_USER_SCOPE_FIELDS) {
47
47
  const clause = buildFieldClause(field, userScope[field]);
@@ -73,6 +73,8 @@ const buildScopedBlockSubQueries = (userScope, clientId) => {
73
73
  });
74
74
  return subQueries;
75
75
  };
76
+ const buildScopedBlockSubQueries = (userScope, clientId) => buildScopedRulesSubQueries(userScope, clientId, { blockOnly: true });
76
77
  export {
77
- buildScopedBlockSubQueries
78
+ buildScopedBlockSubQueries,
79
+ buildScopedRulesSubQueries
78
80
  };
@@ -1 +1 @@
1
- {"version":3,"file":"redisRulesSplitQuery.js","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesSplitQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redisRulesSplitQuery.js","sourceRoot":"","sources":["../../../src/redis/reader/redisRulesSplitQuery.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { buildScopedBlockSubQueries } from "#policy/redis/reader/redisRulesSplitQuery.js";
2
+ import { buildScopedBlockSubQueries, buildScopedRulesSubQueries, } from "#policy/redis/reader/redisRulesSplitQuery.js";
3
3
  describe("buildScopedBlockSubQueries", () => {
4
4
  it("emits one sub-query per populated user-scope field", () => {
5
5
  const subs = buildScopedBlockSubQueries({
@@ -76,4 +76,30 @@ describe("buildScopedBlockSubQueries", () => {
76
76
  expect(coordsSub?.query).toContain("@coords:{\\[\\[\\[100\\,200\\]\\]\\]}");
77
77
  });
78
78
  });
79
+ describe("buildScopedRulesSubQueries", () => {
80
+ it("omits @type:{block} when blockOnly is not set", () => {
81
+ const subs = buildScopedRulesSubQueries({ numericIp: 1376899398n }, "client-A");
82
+ for (const sub of subs) {
83
+ expect(sub.query).not.toContain("@type:{block}");
84
+ }
85
+ });
86
+ it("includes @type:{block} when blockOnly is true", () => {
87
+ const subs = buildScopedRulesSubQueries({ numericIp: 1376899398n }, "client-A", { blockOnly: true });
88
+ for (const sub of subs) {
89
+ expect(sub.query).toContain("@type:{block}");
90
+ }
91
+ });
92
+ it("emits the same probe kinds regardless of blockOnly", () => {
93
+ const withoutBlock = buildScopedRulesSubQueries({ numericIp: 1376899398n, ja4Hash: "abc" }, "client-A");
94
+ const withBlock = buildScopedRulesSubQueries({ numericIp: 1376899398n, ja4Hash: "abc" }, "client-A", { blockOnly: true });
95
+ expect(withoutBlock.map((s) => s.kind).sort()).toEqual(withBlock.map((s) => s.kind).sort());
96
+ });
97
+ it("produces an ip-exact probe that hits the numericIp posting list", () => {
98
+ const subs = buildScopedRulesSubQueries({ numericIp: 1376899398n }, "5EZVvsHMrKCFKp5NYNoTyDjTjetoVo1Z4UNNbTwJf1GfN6Xm");
99
+ const ipExact = subs.find((s) => s.kind === "ip:exact");
100
+ expect(ipExact).toBeDefined();
101
+ expect(ipExact?.query).toContain("@numericIp:[1376899398 1376899398]");
102
+ expect(ipExact?.query).toContain("@clientId:{5EZVvsHMrKCFKp5NYNoTyDjTjetoVo1Z4UNNbTwJf1GfN6Xm}");
103
+ });
104
+ });
79
105
  //# sourceMappingURL=redisRulesSplitQuery.unit.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redisRulesSplitQuery.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/redis/reader/redisRulesSplitQuery.unit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redisRulesSplitQuery.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/redis/reader/redisRulesSplitQuery.unit.test.ts"],"names":[],"mappings":"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"}
@@ -133,7 +133,7 @@ describe("redisRulesReader ranked-path benchmark", () => {
133
133
  expect(p50).toBeLessThan(P50_LATENCY_MS);
134
134
  expect(p99).toBeLessThan(P99_LATENCY_MS);
135
135
  }, 120_000);
136
- test("ranked findRules result size is bounded by SERVER_SIDE_RANK_TOP_N", async () => {
136
+ test("split findRules returns every applicable candidate (no server-side rank cap)", async () => {
137
137
  const { clientId, scope } = buildBenchmarkRequest(0);
138
138
  const results = await reader.findRules({
139
139
  policyScope: { clientId },
@@ -141,7 +141,6 @@ describe("redisRulesReader ranked-path benchmark", () => {
141
141
  userScope: scope,
142
142
  userScopeMatch: FilterScopeMatch.Greedy,
143
143
  }, true);
144
- expect(results.length).toBeLessThanOrEqual(20);
145
144
  expect(results.length).toBeGreaterThan(0);
146
145
  }, 60_000);
147
146
  test("HGETALL-free: ranked path returns full rules without per-rule fanout", async () => {