@prosopo/user-access-policy 3.5.27 → 3.5.31

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 (240) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/package.json +11 -11
  3. package/coverage/base.css +0 -224
  4. package/coverage/block-navigation.js +0 -87
  5. package/coverage/clover.xml +0 -786
  6. package/coverage/coverage-final.json +0 -15
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +0 -146
  9. package/coverage/prettify.css +0 -1
  10. package/coverage/prettify.js +0 -2
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +0 -210
  13. package/coverage/src/accessPolicy.ts.html +0 -457
  14. package/coverage/src/accessPolicyResolver.ts.html +0 -211
  15. package/coverage/src/accessRules.ts.html +0 -265
  16. package/coverage/src/api/accessRuleApiRoutes.ts.html +0 -379
  17. package/coverage/src/api/accessRulesApiClient.ts.html +0 -274
  18. package/coverage/src/api/deleteAllRulesEndpoint.ts.html +0 -229
  19. package/coverage/src/api/deleteRulesEndpoint.ts.html +0 -301
  20. package/coverage/src/api/index.html +0 -176
  21. package/coverage/src/api/insertRulesEndpoint.ts.html +0 -436
  22. package/coverage/src/index.html +0 -176
  23. package/coverage/src/index.ts.html +0 -277
  24. package/coverage/src/redis/index.html +0 -161
  25. package/coverage/src/redis/redisRulesIndex.ts.html +0 -769
  26. package/coverage/src/redis/redisRulesReader.ts.html +0 -652
  27. package/coverage/src/redis/redisRulesStorage.ts.html +0 -229
  28. package/coverage/src/redis/redisRulesWriter.ts.html +0 -424
  29. package/coverage/src/util.ts.html +0 -136
  30. package/dist/.export.d.ts +0 -6
  31. package/dist/.export.d.ts.map +0 -1
  32. package/dist/.export.js.map +0 -1
  33. package/dist/accessPolicy.d.ts +0 -169
  34. package/dist/accessPolicy.d.ts.map +0 -1
  35. package/dist/accessPolicy.js +0 -80
  36. package/dist/accessPolicy.js.map +0 -1
  37. package/dist/accessPolicyResolver.d.ts +0 -110
  38. package/dist/accessPolicyResolver.d.ts.map +0 -1
  39. package/dist/accessPolicyResolver.js +0 -31
  40. package/dist/accessPolicyResolver.js.map +0 -1
  41. package/dist/accessRules.d.ts +0 -16
  42. package/dist/accessRules.d.ts.map +0 -1
  43. package/dist/accessRules.js +0 -11
  44. package/dist/accessRules.js.map +0 -1
  45. package/dist/api/.export.d.ts +0 -7
  46. package/dist/api/.export.d.ts.map +0 -1
  47. package/dist/api/.export.js.map +0 -1
  48. package/dist/api/accessRuleApiRoutes.d.ts +0 -27
  49. package/dist/api/accessRuleApiRoutes.d.ts.map +0 -1
  50. package/dist/api/accessRuleApiRoutes.js +0 -79
  51. package/dist/api/accessRuleApiRoutes.js.map +0 -1
  52. package/dist/api/accessRulesApiClient.d.ts +0 -10
  53. package/dist/api/accessRulesApiClient.d.ts.map +0 -1
  54. package/dist/api/accessRulesApiClient.js +0 -38
  55. package/dist/api/accessRulesApiClient.js.map +0 -1
  56. package/dist/api/delete/.export.d.ts +0 -2
  57. package/dist/api/delete/.export.d.ts.map +0 -1
  58. package/dist/api/delete/.export.js.map +0 -1
  59. package/dist/api/delete/deleteAllRules.d.ts +0 -11
  60. package/dist/api/delete/deleteAllRules.d.ts.map +0 -1
  61. package/dist/api/delete/deleteAllRules.js.map +0 -1
  62. package/dist/api/delete/deleteRuleGroups.d.ts +0 -19
  63. package/dist/api/delete/deleteRuleGroups.d.ts.map +0 -1
  64. package/dist/api/delete/deleteRuleGroups.js.map +0 -1
  65. package/dist/api/delete/deleteRules.d.ts +0 -15
  66. package/dist/api/delete/deleteRules.d.ts.map +0 -1
  67. package/dist/api/delete/deleteRules.js.map +0 -1
  68. package/dist/api/deleteAllRulesEndpoint.d.ts +0 -12
  69. package/dist/api/deleteAllRulesEndpoint.d.ts.map +0 -1
  70. package/dist/api/deleteAllRulesEndpoint.js +0 -24
  71. package/dist/api/deleteAllRulesEndpoint.js.map +0 -1
  72. package/dist/api/deleteRulesEndpoint.d.ts +0 -116
  73. package/dist/api/deleteRulesEndpoint.d.ts.map +0 -1
  74. package/dist/api/deleteRulesEndpoint.js +0 -34
  75. package/dist/api/deleteRulesEndpoint.js.map +0 -1
  76. package/dist/api/insertRulesEndpoint.d.ts +0 -22
  77. package/dist/api/insertRulesEndpoint.d.ts.map +0 -1
  78. package/dist/api/insertRulesEndpoint.js +0 -62
  79. package/dist/api/insertRulesEndpoint.js.map +0 -1
  80. package/dist/api/read/.export.d.ts +0 -4
  81. package/dist/api/read/.export.d.ts.map +0 -1
  82. package/dist/api/read/.export.js.map +0 -1
  83. package/dist/api/read/fetchRules.d.ts +0 -53
  84. package/dist/api/read/fetchRules.d.ts.map +0 -1
  85. package/dist/api/read/fetchRules.js.map +0 -1
  86. package/dist/api/read/findRuleIds.d.ts +0 -28
  87. package/dist/api/read/findRuleIds.d.ts.map +0 -1
  88. package/dist/api/read/findRuleIds.js.map +0 -1
  89. package/dist/api/read/getMissingIds.d.ts +0 -28
  90. package/dist/api/read/getMissingIds.d.ts.map +0 -1
  91. package/dist/api/read/getMissingIds.js.map +0 -1
  92. package/dist/api/ruleApiRoutes.d.ts +0 -43
  93. package/dist/api/ruleApiRoutes.d.ts.map +0 -1
  94. package/dist/api/ruleApiRoutes.js.map +0 -1
  95. package/dist/api/rulesApiClient.d.ts +0 -20
  96. package/dist/api/rulesApiClient.d.ts.map +0 -1
  97. package/dist/api/rulesApiClient.js.map +0 -1
  98. package/dist/api/write/.export.d.ts +0 -2
  99. package/dist/api/write/.export.d.ts.map +0 -1
  100. package/dist/api/write/.export.js.map +0 -1
  101. package/dist/api/write/insertRules.d.ts +0 -29
  102. package/dist/api/write/insertRules.d.ts.map +0 -1
  103. package/dist/api/write/insertRules.js.map +0 -1
  104. package/dist/api/write/rehashRules.d.ts +0 -11
  105. package/dist/api/write/rehashRules.d.ts.map +0 -1
  106. package/dist/api/write/rehashRules.js.map +0 -1
  107. package/dist/cjs/accessPolicy.cjs +0 -80
  108. package/dist/cjs/accessPolicyResolver.cjs +0 -31
  109. package/dist/cjs/accessRules.cjs +0 -11
  110. package/dist/cjs/api/accessRuleApiRoutes.cjs +0 -79
  111. package/dist/cjs/api/deleteAllRulesEndpoint.cjs +0 -24
  112. package/dist/cjs/api/deleteRulesEndpoint.cjs +0 -34
  113. package/dist/cjs/api/insertRulesEndpoint.cjs +0 -62
  114. package/dist/cjs/index.cjs +0 -29
  115. package/dist/cjs/redis/redisAccessRules.cjs +0 -152
  116. package/dist/cjs/redis/redisAccessRulesIndex.cjs +0 -171
  117. package/dist/cjs/redis/redisIndex.cjs +0 -22
  118. package/dist/cjs/util.cjs +0 -5
  119. package/dist/index.d.ts +0 -15
  120. package/dist/index.d.ts.map +0 -1
  121. package/dist/index.js +0 -32
  122. package/dist/index.js.map +0 -1
  123. package/dist/mongoose/.export.d.ts +0 -2
  124. package/dist/mongoose/.export.d.ts.map +0 -1
  125. package/dist/mongoose/.export.js.map +0 -1
  126. package/dist/mongoose/mongooseRuleSchema.d.ts +0 -4
  127. package/dist/mongoose/mongooseRuleSchema.d.ts.map +0 -1
  128. package/dist/mongoose/mongooseRuleSchema.js.map +0 -1
  129. package/dist/redis/.export.d.ts +0 -3
  130. package/dist/redis/.export.d.ts.map +0 -1
  131. package/dist/redis/.export.js.map +0 -1
  132. package/dist/redis/reader/redisAggregate.d.ts +0 -4
  133. package/dist/redis/reader/redisAggregate.d.ts.map +0 -1
  134. package/dist/redis/reader/redisAggregate.js.map +0 -1
  135. package/dist/redis/reader/redisRulesQuery.d.ts +0 -4
  136. package/dist/redis/reader/redisRulesQuery.d.ts.map +0 -1
  137. package/dist/redis/reader/redisRulesQuery.js.map +0 -1
  138. package/dist/redis/reader/redisRulesReader.d.ts +0 -26
  139. package/dist/redis/reader/redisRulesReader.d.ts.map +0 -1
  140. package/dist/redis/reader/redisRulesReader.js.map +0 -1
  141. package/dist/redis/redisAccessRules.d.ts +0 -7
  142. package/dist/redis/redisAccessRules.d.ts.map +0 -1
  143. package/dist/redis/redisAccessRules.js +0 -119
  144. package/dist/redis/redisAccessRules.js.map +0 -1
  145. package/dist/redis/redisAccessRulesIndex.d.ts +0 -13
  146. package/dist/redis/redisAccessRulesIndex.d.ts.map +0 -1
  147. package/dist/redis/redisAccessRulesIndex.js +0 -140
  148. package/dist/redis/redisAccessRulesIndex.js.map +0 -1
  149. package/dist/redis/redisClient.d.ts +0 -11
  150. package/dist/redis/redisClient.d.ts.map +0 -1
  151. package/dist/redis/redisClient.js.map +0 -1
  152. package/dist/redis/redisIndex.d.ts +0 -9
  153. package/dist/redis/redisIndex.d.ts.map +0 -1
  154. package/dist/redis/redisIndex.js +0 -23
  155. package/dist/redis/redisIndex.js.map +0 -1
  156. package/dist/redis/redisRuleIndex.d.ts +0 -13
  157. package/dist/redis/redisRuleIndex.d.ts.map +0 -1
  158. package/dist/redis/redisRuleIndex.js.map +0 -1
  159. package/dist/redis/redisRulesIndex.d.ts +0 -9
  160. package/dist/redis/redisRulesIndex.d.ts.map +0 -1
  161. package/dist/redis/redisRulesIndex.js +0 -138
  162. package/dist/redis/redisRulesIndex.js.map +0 -1
  163. package/dist/redis/redisRulesReader.d.ts +0 -6
  164. package/dist/redis/redisRulesReader.d.ts.map +0 -1
  165. package/dist/redis/redisRulesReader.js +0 -125
  166. package/dist/redis/redisRulesReader.js.map +0 -1
  167. package/dist/redis/redisRulesStorage.d.ts +0 -5
  168. package/dist/redis/redisRulesStorage.d.ts.map +0 -1
  169. package/dist/redis/redisRulesStorage.js.map +0 -1
  170. package/dist/redis/redisRulesWriter.d.ts +0 -22
  171. package/dist/redis/redisRulesWriter.d.ts.map +0 -1
  172. package/dist/redis/redisRulesWriter.js.map +0 -1
  173. package/dist/rule.d.ts +0 -34
  174. package/dist/rule.d.ts.map +0 -1
  175. package/dist/rule.js.map +0 -1
  176. package/dist/ruleInput/.export.d.ts +0 -4
  177. package/dist/ruleInput/.export.d.ts.map +0 -1
  178. package/dist/ruleInput/.export.js.map +0 -1
  179. package/dist/ruleInput/policyInput.d.ts +0 -38
  180. package/dist/ruleInput/policyInput.d.ts.map +0 -1
  181. package/dist/ruleInput/policyInput.js.map +0 -1
  182. package/dist/ruleInput/ruleInput.d.ts +0 -145
  183. package/dist/ruleInput/ruleInput.d.ts.map +0 -1
  184. package/dist/ruleInput/ruleInput.js.map +0 -1
  185. package/dist/ruleInput/userScopeInput.d.ts +0 -93
  186. package/dist/ruleInput/userScopeInput.d.ts.map +0 -1
  187. package/dist/ruleInput/userScopeInput.js.map +0 -1
  188. package/dist/ruleRecord.d.ts +0 -18
  189. package/dist/ruleRecord.d.ts.map +0 -1
  190. package/dist/ruleRecord.js.map +0 -1
  191. package/dist/rulesStorage.d.ts +0 -30
  192. package/dist/rulesStorage.d.ts.map +0 -1
  193. package/dist/rulesStorage.js.map +0 -1
  194. package/dist/tests/accessPolicy.test.d.ts +0 -2
  195. package/dist/tests/accessPolicy.test.d.ts.map +0 -1
  196. package/dist/tests/accessPolicy.test.js +0 -27
  197. package/dist/tests/accessPolicy.test.js.map +0 -1
  198. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts +0 -2
  199. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts.map +0 -1
  200. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js +0 -101
  201. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js.map +0 -1
  202. package/dist/tests/redis/redisAccessRules.integration.test.d.ts +0 -2
  203. package/dist/tests/redis/redisAccessRules.integration.test.d.ts.map +0 -1
  204. package/dist/tests/redis/redisAccessRules.integration.test.js +0 -586
  205. package/dist/tests/redis/redisAccessRules.integration.test.js.map +0 -1
  206. package/dist/tests/redis/redisAccessRules.unit.test.d.ts +0 -2
  207. package/dist/tests/redis/redisAccessRules.unit.test.d.ts.map +0 -1
  208. package/dist/tests/redis/redisAccessRules.unit.test.js +0 -198
  209. package/dist/tests/redis/redisAccessRules.unit.test.js.map +0 -1
  210. package/dist/tests/redis/redisIndex.integration.test.d.ts +0 -2
  211. package/dist/tests/redis/redisIndex.integration.test.d.ts.map +0 -1
  212. package/dist/tests/redis/redisIndex.integration.test.js +0 -80
  213. package/dist/tests/redis/redisIndex.integration.test.js.map +0 -1
  214. package/dist/tests/redis/redisRulesIndex.unit.test.d.ts +0 -2
  215. package/dist/tests/redis/redisRulesIndex.unit.test.d.ts.map +0 -1
  216. package/dist/tests/redis/redisRulesIndex.unit.test.js +0 -101
  217. package/dist/tests/redis/redisRulesIndex.unit.test.js.map +0 -1
  218. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts +0 -2
  219. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts.map +0 -1
  220. package/dist/tests/redis/redisRulesStorage.integration.test.js +0 -611
  221. package/dist/tests/redis/redisRulesStorage.integration.test.js.map +0 -1
  222. package/dist/tests/redis/testRedisClient.d.ts +0 -3
  223. package/dist/tests/redis/testRedisClient.d.ts.map +0 -1
  224. package/dist/tests/redis/testRedisClient.js +0 -8
  225. package/dist/tests/redis/testRedisClient.js.map +0 -1
  226. package/dist/tests/testLogger.d.ts +0 -4
  227. package/dist/tests/testLogger.d.ts.map +0 -1
  228. package/dist/tests/testLogger.js +0 -22
  229. package/dist/tests/testLogger.js.map +0 -1
  230. package/dist/tests/transformRule.unit.test.d.ts +0 -2
  231. package/dist/tests/transformRule.unit.test.d.ts.map +0 -1
  232. package/dist/tests/transformRule.unit.test.js +0 -188
  233. package/dist/tests/transformRule.unit.test.js.map +0 -1
  234. package/dist/transformRule.d.ts +0 -7
  235. package/dist/transformRule.d.ts.map +0 -1
  236. package/dist/transformRule.js.map +0 -1
  237. package/dist/util.d.ts +0 -2
  238. package/dist/util.d.ts.map +0 -1
  239. package/dist/util.js +0 -5
  240. package/dist/util.js.map +0 -1
@@ -1,198 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { ScopeMatch } from "#policy/accessPolicyResolver.js";
3
- import { getRedisAccessRulesQuery } from "#policy/redis/redisAccessRulesIndex.js";
4
- describe("getUserScopeQuery", () => {
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: ScopeMatch.Exact,
13
- };
14
- const query = getRedisAccessRulesQuery(filter, false);
15
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Exact,
25
- };
26
- const query = getRedisAccessRulesQuery(filter, true);
27
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@userId) ismissing(@headersHash) )");
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: ScopeMatch.Exact,
39
- };
40
- const query = getRedisAccessRulesQuery(filter, false);
41
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Greedy,
53
- };
54
- const query = getRedisAccessRulesQuery(filter, false);
55
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Exact,
67
- };
68
- const query = getRedisAccessRulesQuery(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: ScopeMatch.Exact,
81
- };
82
- const query = getRedisAccessRulesQuery(filter, true);
83
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
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: ScopeMatch.Exact,
96
- };
97
- const query = getRedisAccessRulesQuery(filter, true);
98
- expect(query).toBe(" ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[200 +inf] @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
99
- });
100
- });
101
- describe("getUserScopeQuery", () => {
102
- it("puts ismissing(x) for field x passed in as `undefined` when user scope match is exact", () => {
103
- const filter = {
104
- userScope: {
105
- numericIp: BigInt(100),
106
- ja4Hash: "ja4Hash",
107
- userAgentHash: undefined,
108
- },
109
- userScopeMatch: ScopeMatch.Exact,
110
- };
111
- const query = getRedisAccessRulesQuery(filter, false);
112
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) )");
113
- });
114
- 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", () => {
115
- const filter = {
116
- userScope: {
117
- numericIp: BigInt(100),
118
- ja4Hash: "ja4Hash",
119
- userAgentHash: undefined,
120
- },
121
- userScopeMatch: ScopeMatch.Exact,
122
- };
123
- const query = getRedisAccessRulesQuery(filter, true);
124
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@userId) ismissing(@headersHash) )");
125
- });
126
- it("puts ismissing(x) for multiple fields passed in as `undefined` when user scope match is exact", () => {
127
- const filter = {
128
- userScope: {
129
- numericIp: BigInt(100),
130
- ja4Hash: "ja4Hash",
131
- userAgentHash: undefined,
132
- headersHash: undefined,
133
- userId: undefined,
134
- },
135
- userScopeMatch: ScopeMatch.Exact,
136
- };
137
- const query = getRedisAccessRulesQuery(filter, false);
138
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
139
- });
140
- it("does not put ismissing(x) for multiple fields passed in as `undefined` when user scope match is greedy", () => {
141
- const filter = {
142
- userScope: {
143
- numericIp: BigInt(100),
144
- ja4Hash: "ja4Hash",
145
- userAgentHash: undefined,
146
- headersHash: undefined,
147
- userId: undefined,
148
- },
149
- userScopeMatch: ScopeMatch.Greedy,
150
- };
151
- const query = getRedisAccessRulesQuery(filter, false);
152
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) | @ja4Hash:{ja4Hash} )");
153
- });
154
- it("puts ismissing(x) for multiple fields passed in as `undefined` when user scope match is exact 2", () => {
155
- const filter = {
156
- userScope: {
157
- numericIp: undefined,
158
- ja4Hash: "ja4Hash",
159
- userAgentHash: undefined,
160
- headersHash: undefined,
161
- userId: undefined,
162
- },
163
- userScopeMatch: ScopeMatch.Exact,
164
- };
165
- const query = getRedisAccessRulesQuery(filter, false);
166
- expect(query).toBe(" ( ismissing(@numericIp) ismissing(@numericIpMaskMin) ismissing(@numericIpMaskMax) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
167
- });
168
- it("does not put ismissing(numericIpMaskMin) and does not put ismissing(numericIpMaskMax) when numericIp is passed in", () => {
169
- const filter = {
170
- userScope: {
171
- numericIp: BigInt(100),
172
- ja4Hash: "ja4Hash",
173
- userAgentHash: undefined,
174
- headersHash: undefined,
175
- userId: undefined,
176
- },
177
- userScopeMatch: ScopeMatch.Exact,
178
- };
179
- const query = getRedisAccessRulesQuery(filter, true);
180
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
181
- });
182
- it("does not put ismissing(numericIp) when numericIpMaskMin and numericIpMaskMax are passed in", () => {
183
- const filter = {
184
- userScope: {
185
- numericIpMaskMin: BigInt(100),
186
- numericIpMaskMax: BigInt(200),
187
- ja4Hash: "ja4Hash",
188
- userAgentHash: undefined,
189
- headersHash: undefined,
190
- userId: undefined,
191
- },
192
- userScopeMatch: ScopeMatch.Exact,
193
- };
194
- const query = getRedisAccessRulesQuery(filter, true);
195
- expect(query).toBe(" ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[200 +inf] @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
196
- });
197
- });
198
- //# sourceMappingURL=redisAccessRules.unit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisAccessRules.unit.test.js","sourceRoot":"","sources":["../../../src/tests/redis/redisAccessRules.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=redisIndex.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisIndex.integration.test.d.ts","sourceRoot":"","sources":["../../../src/tests/redis/redisIndex.integration.test.ts"],"names":[],"mappings":""}
@@ -1,80 +0,0 @@
1
- import { SCHEMA_FIELD_TYPE } from "@redis/search";
2
- import { beforeAll, describe, expect, test, } from "vitest";
3
- import { createRedisIndex } from "#policy/redis/redisIndex.js";
4
- import { createTestRedisClient } from "./testRedisClient.js";
5
- let indexCount = 0;
6
- const getTestIndexName = () => `index:${indexCount++}`;
7
- describe("redisIndex", () => {
8
- let redisClient;
9
- beforeAll(async () => {
10
- redisClient = await createTestRedisClient();
11
- });
12
- test("creates new index", async () => {
13
- const redisIndex = {
14
- name: getTestIndexName(),
15
- schema: {
16
- tagField: SCHEMA_FIELD_TYPE.TAG,
17
- },
18
- options: {},
19
- };
20
- await createRedisIndex(redisClient, redisIndex);
21
- const indexNames = await redisClient.ft._LIST();
22
- expect(indexNames).toContain(redisIndex.name);
23
- });
24
- test("does not re-create existing index when no changes declared", async () => {
25
- const redisIndex = {
26
- name: getTestIndexName(),
27
- schema: {
28
- tagField: SCHEMA_FIELD_TYPE.TAG,
29
- },
30
- options: {},
31
- };
32
- await createRedisIndex(redisClient, redisIndex);
33
- await redisClient.ft.alter(redisIndex.name, {
34
- anotherField: SCHEMA_FIELD_TYPE.TAG,
35
- });
36
- await createRedisIndex(redisClient, redisIndex);
37
- const indexNames = await redisClient.ft._LIST();
38
- const actualIndexInfo = await redisClient.ft.info(redisIndex.name);
39
- expect(indexNames).toContain(redisIndex.name);
40
- expect(actualIndexInfo.attributes.length).toBe(2);
41
- });
42
- test("re-creates existing index when schema changes made", async () => {
43
- const redisIndex = {
44
- name: getTestIndexName(),
45
- schema: {
46
- tagField: SCHEMA_FIELD_TYPE.TAG,
47
- },
48
- options: {},
49
- };
50
- await createRedisIndex(redisClient, redisIndex);
51
- redisIndex.schema = {
52
- ...redisIndex.schema,
53
- newField: SCHEMA_FIELD_TYPE.TAG,
54
- };
55
- await createRedisIndex(redisClient, redisIndex);
56
- const indexNames = await redisClient.ft._LIST();
57
- const actualIndexInfo = await redisClient.ft.info(redisIndex.name);
58
- expect(indexNames).toContain(redisIndex.name);
59
- expect(actualIndexInfo.attributes.length).toBe(2);
60
- });
61
- test("re-creates existing index when option changes made", async () => {
62
- const redisIndex = {
63
- name: getTestIndexName(),
64
- schema: {
65
- tagField: SCHEMA_FIELD_TYPE.TAG,
66
- },
67
- options: {},
68
- };
69
- await createRedisIndex(redisClient, redisIndex);
70
- redisIndex.options = {
71
- ON: "HASH",
72
- };
73
- await createRedisIndex(redisClient, redisIndex);
74
- const indexNames = await redisClient.ft._LIST();
75
- const actualIndexInfo = await redisClient.ft.info(redisIndex.name);
76
- expect(indexNames).toContain(redisIndex.name);
77
- expect(actualIndexInfo.index_definition.key_type).toBe("HASH");
78
- });
79
- });
80
- //# sourceMappingURL=redisIndex.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisIndex.integration.test.js","sourceRoot":"","sources":["../../../src/tests/redis/redisIndex.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=redisRulesIndex.unit.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisRulesIndex.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/redis/redisRulesIndex.unit.test.ts"],"names":[],"mappings":""}
@@ -1,101 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { ScopeMatch } from "#policy/accessPolicyResolver.js";
3
- import { getRedisRulesQuery } from "#policy/redis/redisRulesIndex.js";
4
- describe("getUserScopeQuery", () => {
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: ScopeMatch.Exact,
13
- };
14
- const query = getRedisRulesQuery(filter, false);
15
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Exact,
25
- };
26
- const query = getRedisRulesQuery(filter, true);
27
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@userId) ismissing(@headersHash) )");
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: ScopeMatch.Exact,
39
- };
40
- const query = getRedisRulesQuery(filter, false);
41
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Greedy,
53
- };
54
- const query = getRedisRulesQuery(filter, false);
55
- expect(query).toBe(" ( ( @numericIp:[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: ScopeMatch.Exact,
67
- };
68
- const query = getRedisRulesQuery(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: ScopeMatch.Exact,
81
- };
82
- const query = getRedisRulesQuery(filter, true);
83
- expect(query).toBe(" ( ( @numericIp:[100] | ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[100 +inf] ) ) @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
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: ScopeMatch.Exact,
96
- };
97
- const query = getRedisRulesQuery(filter, true);
98
- expect(query).toBe(" ( @numericIpMaskMin:[-inf 100] @numericIpMaskMax:[200 +inf] @ja4Hash:{ja4Hash} ismissing(@userAgentHash) ismissing(@headersHash) ismissing(@userId) )");
99
- });
100
- });
101
- //# sourceMappingURL=redisRulesIndex.unit.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisRulesIndex.unit.test.js","sourceRoot":"","sources":["../../../src/tests/redis/redisRulesIndex.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=redisRulesStorage.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisRulesStorage.integration.test.d.ts","sourceRoot":"","sources":["../../../src/tests/redis/redisRulesStorage.integration.test.ts"],"names":[],"mappings":""}