@prosopo/user-access-policy 3.5.32 → 3.7.11

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 (214) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +23 -21
  2. package/.turbo/turbo-build$colon$tsc.log +41 -0
  3. package/.turbo/turbo-build.log +28 -22
  4. package/CHANGELOG.md +393 -0
  5. package/dist/.export.d.ts +6 -0
  6. package/dist/.export.d.ts.map +1 -0
  7. package/dist/.export.js.map +1 -0
  8. package/dist/api/.export.d.ts +7 -0
  9. package/dist/api/.export.d.ts.map +1 -0
  10. package/dist/api/.export.js.map +1 -0
  11. package/dist/api/accessRulesApiClient.d.ts +2 -0
  12. package/dist/api/accessRulesApiClient.d.ts.map +1 -0
  13. package/dist/api/accessRulesApiClient.js +2 -0
  14. package/dist/api/accessRulesApiClient.js.map +1 -0
  15. package/dist/api/delete/.export.d.ts +2 -0
  16. package/dist/api/delete/.export.d.ts.map +1 -0
  17. package/dist/api/delete/.export.js.map +1 -0
  18. package/dist/api/delete/deleteAllRules.d.ts +11 -0
  19. package/dist/api/delete/deleteAllRules.d.ts.map +1 -0
  20. package/dist/api/delete/deleteAllRules.js +3 -2
  21. package/dist/api/delete/deleteAllRules.js.map +1 -0
  22. package/dist/api/delete/deleteRuleGroups.d.ts +19 -0
  23. package/dist/api/delete/deleteRuleGroups.d.ts.map +1 -0
  24. package/dist/api/delete/deleteRuleGroups.js +3 -2
  25. package/dist/api/delete/deleteRuleGroups.js.map +1 -0
  26. package/dist/api/delete/deleteRules.d.ts +15 -0
  27. package/dist/api/delete/deleteRules.d.ts.map +1 -0
  28. package/dist/api/delete/deleteRules.js +3 -2
  29. package/dist/api/delete/deleteRules.js.map +1 -0
  30. package/dist/api/read/.export.d.ts +4 -0
  31. package/dist/api/read/.export.d.ts.map +1 -0
  32. package/dist/api/read/.export.js.map +1 -0
  33. package/dist/api/read/fetchRules.d.ts +53 -0
  34. package/dist/api/read/fetchRules.d.ts.map +1 -0
  35. package/dist/api/read/fetchRules.js +4 -3
  36. package/dist/api/read/fetchRules.js.map +1 -0
  37. package/dist/api/read/findRuleIds.d.ts +28 -0
  38. package/dist/api/read/findRuleIds.d.ts.map +1 -0
  39. package/dist/api/read/findRuleIds.js +3 -2
  40. package/dist/api/read/findRuleIds.js.map +1 -0
  41. package/dist/api/read/getMissingIds.d.ts +28 -0
  42. package/dist/api/read/getMissingIds.d.ts.map +1 -0
  43. package/dist/api/read/getMissingIds.js +4 -3
  44. package/dist/api/read/getMissingIds.js.map +1 -0
  45. package/dist/api/ruleApiRoutes.d.ts +43 -0
  46. package/dist/api/ruleApiRoutes.d.ts.map +1 -0
  47. package/dist/api/ruleApiRoutes.js.map +1 -0
  48. package/dist/api/rulesApiClient.d.ts +20 -0
  49. package/dist/api/rulesApiClient.d.ts.map +1 -0
  50. package/dist/api/rulesApiClient.js +18 -19
  51. package/dist/api/rulesApiClient.js.map +1 -0
  52. package/dist/api/write/.export.d.ts +2 -0
  53. package/dist/api/write/.export.d.ts.map +1 -0
  54. package/dist/api/write/.export.js.map +1 -0
  55. package/dist/api/write/insertRules.d.ts +29 -0
  56. package/dist/api/write/insertRules.d.ts.map +1 -0
  57. package/dist/api/write/insertRules.js +12 -9
  58. package/dist/api/write/insertRules.js.map +1 -0
  59. package/dist/api/write/rehashRules.d.ts +11 -0
  60. package/dist/api/write/rehashRules.d.ts.map +1 -0
  61. package/dist/api/write/rehashRules.js +7 -6
  62. package/dist/api/write/rehashRules.js.map +1 -0
  63. package/dist/cjs/api/delete/deleteAllRules.cjs +3 -2
  64. package/dist/cjs/api/delete/deleteRuleGroups.cjs +3 -2
  65. package/dist/cjs/api/delete/deleteRules.cjs +3 -2
  66. package/dist/cjs/api/read/fetchRules.cjs +4 -3
  67. package/dist/cjs/api/read/findRuleIds.cjs +3 -2
  68. package/dist/cjs/api/read/getMissingIds.cjs +4 -3
  69. package/dist/cjs/api/rulesApiClient.cjs +18 -19
  70. package/dist/cjs/api/write/insertRules.cjs +13 -10
  71. package/dist/cjs/api/write/rehashRules.cjs +7 -6
  72. package/dist/cjs/mongoose/mongooseRuleSchema.cjs +4 -1
  73. package/dist/cjs/redis/reader/redisRulesQuery.cjs +18 -1
  74. package/dist/cjs/redis/reader/redisRulesReader.cjs +13 -4
  75. package/dist/cjs/redis/redisRuleIndex.cjs +5 -1
  76. package/dist/cjs/redis/redisRulesWriter.cjs +6 -0
  77. package/dist/cjs/ruleInput/policyInput.cjs +8 -0
  78. package/dist/cjs/ruleInput/userScopeInput.cjs +4 -1
  79. package/dist/cjs/ruleRecord.cjs +4 -1
  80. package/dist/mongoose/.export.d.ts +2 -0
  81. package/dist/mongoose/.export.d.ts.map +1 -0
  82. package/dist/mongoose/.export.js.map +1 -0
  83. package/dist/mongoose/mongooseRuleSchema.d.ts +4 -0
  84. package/dist/mongoose/mongooseRuleSchema.d.ts.map +1 -0
  85. package/dist/mongoose/mongooseRuleSchema.js +4 -1
  86. package/dist/mongoose/mongooseRuleSchema.js.map +1 -0
  87. package/dist/redis/.export.d.ts +3 -0
  88. package/dist/redis/.export.d.ts.map +1 -0
  89. package/dist/redis/.export.js.map +1 -0
  90. package/dist/redis/reader/redisAggregate.d.ts +4 -0
  91. package/dist/redis/reader/redisAggregate.d.ts.map +1 -0
  92. package/dist/redis/reader/redisAggregate.js.map +1 -0
  93. package/dist/redis/reader/redisRulesQuery.d.ts +4 -0
  94. package/dist/redis/reader/redisRulesQuery.d.ts.map +1 -0
  95. package/dist/redis/reader/redisRulesQuery.js +18 -1
  96. package/dist/redis/reader/redisRulesQuery.js.map +1 -0
  97. package/dist/redis/reader/redisRulesReader.d.ts +26 -0
  98. package/dist/redis/reader/redisRulesReader.d.ts.map +1 -0
  99. package/dist/redis/reader/redisRulesReader.js +14 -5
  100. package/dist/redis/reader/redisRulesReader.js.map +1 -0
  101. package/dist/redis/redisClient.d.ts +11 -0
  102. package/dist/redis/redisClient.d.ts.map +1 -0
  103. package/dist/redis/redisClient.js.map +1 -0
  104. package/dist/redis/redisRuleIndex.d.ts +13 -0
  105. package/dist/redis/redisRuleIndex.d.ts.map +1 -0
  106. package/dist/redis/redisRuleIndex.js +5 -1
  107. package/dist/redis/redisRuleIndex.js.map +1 -0
  108. package/dist/redis/redisRulesStorage.d.ts +5 -0
  109. package/dist/redis/redisRulesStorage.d.ts.map +1 -0
  110. package/dist/redis/redisRulesStorage.js.map +1 -0
  111. package/dist/redis/redisRulesWriter.d.ts +22 -0
  112. package/dist/redis/redisRulesWriter.d.ts.map +1 -0
  113. package/dist/redis/redisRulesWriter.js +6 -0
  114. package/dist/redis/redisRulesWriter.js.map +1 -0
  115. package/dist/rule.d.ts +37 -0
  116. package/dist/rule.d.ts.map +1 -0
  117. package/dist/rule.js.map +1 -0
  118. package/dist/ruleInput/.export.d.ts +4 -0
  119. package/dist/ruleInput/.export.d.ts.map +1 -0
  120. package/dist/ruleInput/.export.js.map +1 -0
  121. package/dist/ruleInput/policyInput.d.ts +39 -0
  122. package/dist/ruleInput/policyInput.d.ts.map +1 -0
  123. package/dist/ruleInput/policyInput.js +9 -1
  124. package/dist/ruleInput/policyInput.js.map +1 -0
  125. package/dist/ruleInput/ruleInput.d.ts +163 -0
  126. package/dist/ruleInput/ruleInput.d.ts.map +1 -0
  127. package/dist/ruleInput/ruleInput.js.map +1 -0
  128. package/dist/ruleInput/userScopeInput.d.ts +117 -0
  129. package/dist/ruleInput/userScopeInput.d.ts.map +1 -0
  130. package/dist/ruleInput/userScopeInput.js +4 -1
  131. package/dist/ruleInput/userScopeInput.js.map +1 -0
  132. package/dist/ruleRecord.d.ts +18 -0
  133. package/dist/ruleRecord.d.ts.map +1 -0
  134. package/dist/ruleRecord.js +4 -1
  135. package/dist/ruleRecord.js.map +1 -0
  136. package/dist/rulesStorage.d.ts +30 -0
  137. package/dist/rulesStorage.d.ts.map +1 -0
  138. package/dist/rulesStorage.js.map +1 -0
  139. package/dist/tests/insertRulesEndpoint.unit.test.d.ts +2 -0
  140. package/dist/tests/insertRulesEndpoint.unit.test.d.ts.map +1 -0
  141. package/dist/tests/insertRulesEndpoint.unit.test.js +57 -0
  142. package/dist/tests/insertRulesEndpoint.unit.test.js.map +1 -0
  143. package/dist/tests/policyInput.unit.test.d.ts +2 -0
  144. package/dist/tests/policyInput.unit.test.d.ts.map +1 -0
  145. package/dist/tests/policyInput.unit.test.js +116 -0
  146. package/dist/tests/policyInput.unit.test.js.map +1 -0
  147. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts +2 -0
  148. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts.map +1 -0
  149. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js +199 -0
  150. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js.map +1 -0
  151. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts +2 -0
  152. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts.map +1 -0
  153. package/dist/tests/redis/redisRulesStorage.integration.test.js +831 -0
  154. package/dist/tests/redis/redisRulesStorage.integration.test.js.map +1 -0
  155. package/dist/tests/testLogger.d.ts +4 -0
  156. package/dist/tests/testLogger.d.ts.map +1 -0
  157. package/dist/tests/testLogger.js +22 -0
  158. package/dist/tests/testLogger.js.map +1 -0
  159. package/dist/tests/transformRule.unit.test.d.ts +2 -0
  160. package/dist/tests/transformRule.unit.test.d.ts.map +1 -0
  161. package/dist/tests/transformRule.unit.test.js +191 -0
  162. package/dist/tests/transformRule.unit.test.js.map +1 -0
  163. package/dist/transformRule.d.ts +7 -0
  164. package/dist/transformRule.d.ts.map +1 -0
  165. package/dist/transformRule.js.map +1 -0
  166. package/entries.ts +1 -1
  167. package/package.json +18 -12
  168. package/src/.export.ts +44 -0
  169. package/src/api/.export.ts +25 -0
  170. package/src/api/accessRulesApiClient.ts +13 -0
  171. package/src/api/delete/.export.ts +18 -0
  172. package/src/api/delete/deleteAllRules.ts +47 -0
  173. package/src/api/delete/deleteRuleGroups.ts +96 -0
  174. package/src/api/delete/deleteRules.ts +81 -0
  175. package/src/api/read/.export.ts +25 -0
  176. package/src/api/read/fetchRules.ts +88 -0
  177. package/src/api/read/findRuleIds.ts +95 -0
  178. package/src/api/read/getMissingIds.ts +81 -0
  179. package/src/api/ruleApiRoutes.ts +146 -0
  180. package/src/api/rulesApiClient.ts +154 -0
  181. package/src/api/write/.export.ts +15 -0
  182. package/src/api/write/insertRules.ts +183 -0
  183. package/src/api/write/rehashRules.ts +85 -0
  184. package/src/mongoose/.export.ts +15 -0
  185. package/src/mongoose/mongooseRuleSchema.ts +65 -0
  186. package/src/redis/.export.ts +17 -0
  187. package/src/redis/reader/redisAggregate.ts +103 -0
  188. package/src/redis/reader/redisRulesQuery.ts +217 -0
  189. package/src/redis/reader/redisRulesReader.ts +318 -0
  190. package/src/redis/redisClient.ts +120 -0
  191. package/src/redis/redisRuleIndex.ts +85 -0
  192. package/src/redis/redisRulesStorage.ts +68 -0
  193. package/src/redis/redisRulesWriter.ts +158 -0
  194. package/src/rule.ts +59 -0
  195. package/src/ruleInput/.export.ts +19 -0
  196. package/src/ruleInput/policyInput.ts +51 -0
  197. package/src/ruleInput/ruleInput.ts +103 -0
  198. package/src/ruleInput/userScopeInput.ts +108 -0
  199. package/src/ruleRecord.ts +69 -0
  200. package/src/rulesStorage.ts +72 -0
  201. package/src/tests/insertRulesEndpoint.unit.test.ts +89 -0
  202. package/src/tests/policyInput.unit.test.ts +150 -0
  203. package/src/tests/redis/reader/redisRulesQuery.unit.test.ts +284 -0
  204. package/src/tests/redis/redisRulesStorage.integration.test.ts +1156 -0
  205. package/src/tests/testLogger.ts +38 -0
  206. package/src/tests/transformRule.unit.test.ts +255 -0
  207. package/src/transformRule.ts +128 -0
  208. package/tsconfig.cjs.json +41 -0
  209. package/tsconfig.json +47 -0
  210. package/tsconfig.tsbuildinfo +1 -0
  211. package/tsconfig.types.json +9 -0
  212. package/vite.cjs.config.ts +1 -1
  213. package/vite.esm.config.ts +1 -1
  214. package/vite.test.config.ts +1 -1
@@ -0,0 +1,199 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getRulesRedisQuery } from "#policy/redis/reader/redisRulesQuery.js";
3
+ import { FilterScopeMatch, } from "#policy/rulesStorage.js";
4
+ describe("getRulesRedisQuery", () => {
5
+ it("puts ismissing(x) for field x passed in as `undefined` when user scope match is exact", () => {
6
+ const filter = {
7
+ userScope: {
8
+ numericIp: BigInt(100),
9
+ ja4Hash: "ja4Hash",
10
+ userAgentHash: undefined,
11
+ },
12
+ userScopeMatch: FilterScopeMatch.Exact,
13
+ };
14
+ const query = getRulesRedisQuery(filter, false);
15
+ expect(query).toBe("( ( @numericIp:[100 100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) )");
16
+ });
17
+ it("puts ismissing(x) for field x passed in as `undefined` when user scope match is exact and for missing fields when matchingFieldsOnly is set", () => {
18
+ const filter = {
19
+ userScope: {
20
+ numericIp: BigInt(100),
21
+ ja4Hash: "ja4Hash",
22
+ userAgentHash: undefined,
23
+ },
24
+ userScopeMatch: FilterScopeMatch.Exact,
25
+ };
26
+ const query = getRulesRedisQuery(filter, true);
27
+ expect(query).toBe("( ( @numericIp:[100 100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@userId) ismissing(@headersHash) ismissing(@headHash) ismissing(@coords) ismissing(@countryCode) )");
28
+ });
29
+ it("puts ismissing(x) for multiple fields passed in as `undefined` when user scope match is exact", () => {
30
+ const filter = {
31
+ userScope: {
32
+ numericIp: BigInt(100),
33
+ ja4Hash: "ja4Hash",
34
+ userAgentHash: undefined,
35
+ headersHash: undefined,
36
+ userId: undefined,
37
+ },
38
+ userScopeMatch: FilterScopeMatch.Exact,
39
+ };
40
+ const query = getRulesRedisQuery(filter, false);
41
+ expect(query).toBe("( ( @numericIp:[100 100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
42
+ });
43
+ it("does not put ismissing(x) for multiple fields passed in as `undefined` when user scope match is greedy", () => {
44
+ const filter = {
45
+ userScope: {
46
+ numericIp: BigInt(100),
47
+ ja4Hash: "ja4Hash",
48
+ userAgentHash: undefined,
49
+ headersHash: undefined,
50
+ userId: undefined,
51
+ },
52
+ userScopeMatch: FilterScopeMatch.Greedy,
53
+ };
54
+ const query = getRulesRedisQuery(filter, false);
55
+ expect(query).toBe("( ( @numericIp:[100 100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) | @ja4Hash:{ja4Hash} )");
56
+ });
57
+ it("puts ismissing(x) for multiple fields passed in as `undefined` when user scope match is exact 2", () => {
58
+ const filter = {
59
+ userScope: {
60
+ numericIp: undefined,
61
+ ja4Hash: "ja4Hash",
62
+ userAgentHash: undefined,
63
+ headersHash: undefined,
64
+ userId: undefined,
65
+ },
66
+ userScopeMatch: FilterScopeMatch.Exact,
67
+ };
68
+ const query = getRulesRedisQuery(filter, false);
69
+ expect(query).toBe("( ismissing(@numericIp) ismissing(@numericIpMaskMin) ismissing(@numericIpMaskMax) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
70
+ });
71
+ it("does not put ismissing(numericIpMaskMin) and does not put ismissing(numericIpMaskMax) when numericIp is passed in", () => {
72
+ const filter = {
73
+ userScope: {
74
+ numericIp: BigInt(100),
75
+ ja4Hash: "ja4Hash",
76
+ userAgentHash: undefined,
77
+ headersHash: undefined,
78
+ userId: undefined,
79
+ },
80
+ userScopeMatch: FilterScopeMatch.Exact,
81
+ };
82
+ const query = getRulesRedisQuery(filter, true);
83
+ expect(query).toBe("( ( @numericIp:[100 100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) ismissing(@headHash) ismissing(@coords) ismissing(@countryCode) )");
84
+ });
85
+ it("does not put ismissing(numericIp) when numericIpMaskMin and numericIpMaskMax are passed in", () => {
86
+ const filter = {
87
+ userScope: {
88
+ numericIpMaskMin: BigInt(100),
89
+ numericIpMaskMax: BigInt(200),
90
+ ja4Hash: "ja4Hash",
91
+ userAgentHash: undefined,
92
+ headersHash: undefined,
93
+ userId: undefined,
94
+ },
95
+ userScopeMatch: FilterScopeMatch.Exact,
96
+ };
97
+ const query = getRulesRedisQuery(filter, true);
98
+ expect(query).toBe("( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[200 +inf] @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) ismissing(@headHash) ismissing(@coords) ismissing(@countryCode) )");
99
+ });
100
+ it("does not duplicate ismissing for numericIpMaskMin and numericIpMaskMax when matchingFieldsOnly is true and all IP fields are undefined", () => {
101
+ const filter = {
102
+ userScope: {
103
+ userId: "user123",
104
+ },
105
+ userScopeMatch: FilterScopeMatch.Exact,
106
+ };
107
+ const query = getRulesRedisQuery(filter, true);
108
+ const numericIpMaskMinMatches = query.match(/ismissing\(@numericIpMaskMin\)/g);
109
+ const numericIpMaskMaxMatches = query.match(/ismissing\(@numericIpMaskMax\)/g);
110
+ expect(numericIpMaskMinMatches).toHaveLength(1);
111
+ expect(numericIpMaskMaxMatches).toHaveLength(1);
112
+ expect(query).toContain("ismissing(@numericIp)");
113
+ expect(query).toContain("@userId:{user123}");
114
+ });
115
+ it("emits ismissing for numericIpMaskMin when numericIpMaskMax is defined but numericIpMaskMin is not", () => {
116
+ const filter = {
117
+ userScope: {
118
+ numericIpMaskMax: BigInt(200),
119
+ },
120
+ userScopeMatch: FilterScopeMatch.Exact,
121
+ };
122
+ const query = getRulesRedisQuery(filter, true);
123
+ expect(query).toContain("ismissing(@numericIpMaskMin)");
124
+ expect(query).toContain("@numericIpMaskMax:[200 +inf]");
125
+ expect(query).not.toContain("ismissing(@numericIpMaskMax)");
126
+ });
127
+ it("emits ismissing for numericIpMaskMax when numericIpMaskMin is defined but numericIpMaskMax is not", () => {
128
+ const filter = {
129
+ userScope: {
130
+ numericIpMaskMin: BigInt(100),
131
+ },
132
+ userScopeMatch: FilterScopeMatch.Exact,
133
+ };
134
+ const query = getRulesRedisQuery(filter, true);
135
+ expect(query).toContain("@numericIpMaskMin:[-inf 100]");
136
+ expect(query).toContain("ismissing(@numericIpMaskMax)");
137
+ expect(query).not.toContain("ismissing(@numericIpMaskMin)");
138
+ });
139
+ it("includes headHash in query when provided", () => {
140
+ const filter = {
141
+ userScope: {
142
+ headHash: "abc123def456",
143
+ },
144
+ userScopeMatch: FilterScopeMatch.Exact,
145
+ };
146
+ const query = getRulesRedisQuery(filter, false);
147
+ expect(query).toBe("( @headHash:{abc123def456} )");
148
+ });
149
+ it("includes coords in query when provided with escaped special characters", () => {
150
+ const filter = {
151
+ userScope: {
152
+ coords: "[[[100,200]]]",
153
+ },
154
+ userScopeMatch: FilterScopeMatch.Exact,
155
+ };
156
+ const query = getRulesRedisQuery(filter, false);
157
+ expect(query).toContain("@coords:{\\[\\[\\[100\\,200\\]\\]\\]}");
158
+ });
159
+ it("includes both headHash and coords when both provided", () => {
160
+ const filter = {
161
+ userScope: {
162
+ headHash: "abc123def456",
163
+ coords: "[[[100,200]]]",
164
+ },
165
+ userScopeMatch: FilterScopeMatch.Exact,
166
+ };
167
+ const query = getRulesRedisQuery(filter, false);
168
+ expect(query).toContain("@headHash:{abc123def456}");
169
+ expect(query).toContain("@coords:{\\[\\[\\[100\\,200\\]\\]\\]}");
170
+ });
171
+ it("puts ismissing(headHash) and ismissing(coords) when not provided and matchingFieldsOnly is true", () => {
172
+ const filter = {
173
+ userScope: {
174
+ ja4Hash: "ja4Hash",
175
+ },
176
+ userScopeMatch: FilterScopeMatch.Exact,
177
+ };
178
+ const query = getRulesRedisQuery(filter, true);
179
+ expect(query).toContain("ismissing(@headHash)");
180
+ expect(query).toContain("ismissing(@coords)");
181
+ });
182
+ it("combines headHash with other fields correctly in exact match", () => {
183
+ const filter = {
184
+ userScope: {
185
+ numericIp: BigInt(100),
186
+ ja4Hash: "ja4Hash",
187
+ headHash: "abc123def456",
188
+ userAgentHash: undefined,
189
+ },
190
+ userScopeMatch: FilterScopeMatch.Exact,
191
+ };
192
+ const query = getRulesRedisQuery(filter, false);
193
+ expect(query).toContain("@numericIp:[100 100]");
194
+ expect(query).toContain("@ja4Hash:{ja4Hash}");
195
+ expect(query).toContain("@headHash:{abc123def456}");
196
+ expect(query).toContain("ismissing(@userAgentHash)");
197
+ });
198
+ });
199
+ //# sourceMappingURL=redisRulesQuery.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisRulesQuery.unit.test.js","sourceRoot":"","sources":["../../../../src/tests/redis/reader/redisRulesQuery.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redisRulesStorage.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisRulesStorage.integration.test.d.ts","sourceRoot":"","sources":["../../../src/tests/redis/redisRulesStorage.integration.test.ts"],"names":[],"mappings":""}