@prosopo/user-access-policy 2.6.4 → 3.1.5

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 (371) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/accessPolicy.d.ts +169 -0
  3. package/dist/accessPolicy.d.ts.map +1 -0
  4. package/dist/accessPolicy.js +65 -0
  5. package/dist/accessPolicy.js.map +1 -0
  6. package/dist/accessPolicyResolver.d.ts +115 -0
  7. package/dist/accessPolicyResolver.d.ts.map +1 -0
  8. package/dist/accessPolicyResolver.js +44 -0
  9. package/dist/accessPolicyResolver.js.map +1 -0
  10. package/dist/accessRules.d.ts +16 -0
  11. package/dist/accessRules.d.ts.map +1 -0
  12. package/dist/accessRules.js +8 -0
  13. package/dist/accessRules.js.map +1 -0
  14. package/dist/api/accessRuleApiRoutes.d.ts +27 -0
  15. package/dist/api/accessRuleApiRoutes.d.ts.map +1 -0
  16. package/dist/api/accessRuleApiRoutes.js +56 -0
  17. package/dist/api/accessRuleApiRoutes.js.map +1 -0
  18. package/dist/api/deleteAllRulesEndpoint.d.ts +12 -0
  19. package/dist/api/deleteAllRulesEndpoint.d.ts.map +1 -0
  20. package/dist/api/deleteAllRulesEndpoint.js +21 -0
  21. package/dist/api/deleteAllRulesEndpoint.js.map +1 -0
  22. package/dist/api/deleteRulesEndpoint.d.ts +116 -0
  23. package/dist/api/deleteRulesEndpoint.d.ts.map +1 -0
  24. package/dist/api/deleteRulesEndpoint.js +31 -0
  25. package/dist/api/deleteRulesEndpoint.js.map +1 -0
  26. package/dist/api/insertRulesEndpoint.d.ts +22 -0
  27. package/dist/api/insertRulesEndpoint.d.ts.map +1 -0
  28. package/dist/api/insertRulesEndpoint.js +62 -0
  29. package/dist/api/insertRulesEndpoint.js.map +1 -0
  30. package/dist/cjs/accessPolicy.cjs +79 -0
  31. package/dist/cjs/accessPolicyResolver.cjs +87 -0
  32. package/dist/cjs/accessRules.cjs +11 -0
  33. package/dist/cjs/api/accessRuleApiRoutes.cjs +79 -0
  34. package/dist/cjs/api/deleteAllRulesEndpoint.cjs +24 -0
  35. package/dist/cjs/api/deleteRulesEndpoint.cjs +34 -0
  36. package/dist/cjs/api/insertRulesEndpoint.cjs +65 -0
  37. package/dist/cjs/index.cjs +22 -23
  38. package/dist/cjs/redis/redisAccessRules.cjs +140 -0
  39. package/dist/cjs/redis/redisAccessRulesIndex.cjs +103 -0
  40. package/dist/cjs/redis/redisIndex.cjs +22 -0
  41. package/dist/cjs/util.cjs +5 -0
  42. package/dist/index.d.ts +13 -15
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +14 -20
  45. package/dist/index.js.map +1 -1
  46. package/dist/redis/redisAccessRules.d.ts +7 -0
  47. package/dist/redis/redisAccessRules.d.ts.map +1 -0
  48. package/dist/redis/redisAccessRules.js +105 -0
  49. package/dist/redis/redisAccessRules.js.map +1 -0
  50. package/dist/redis/redisAccessRulesIndex.d.ts +12 -0
  51. package/dist/redis/redisAccessRulesIndex.d.ts.map +1 -0
  52. package/dist/redis/redisAccessRulesIndex.js +81 -0
  53. package/dist/redis/redisAccessRulesIndex.js.map +1 -0
  54. package/dist/redis/redisIndex.d.ts +9 -0
  55. package/dist/redis/redisIndex.d.ts.map +1 -0
  56. package/dist/redis/redisIndex.js +23 -0
  57. package/dist/redis/redisIndex.js.map +1 -0
  58. package/dist/tests/accessPolicy.test.d.ts +2 -0
  59. package/dist/tests/accessPolicy.test.d.ts.map +1 -0
  60. package/dist/tests/accessPolicy.test.js +27 -0
  61. package/dist/tests/accessPolicy.test.js.map +1 -0
  62. package/dist/tests/redis/redisAccessRules.test.d.ts +2 -0
  63. package/dist/tests/redis/redisAccessRules.test.d.ts.map +1 -0
  64. package/dist/tests/redis/redisAccessRules.test.js +398 -0
  65. package/dist/tests/redis/redisAccessRules.test.js.map +1 -0
  66. package/dist/tests/redis/redisIndex.test.d.ts +2 -0
  67. package/dist/tests/redis/redisIndex.test.d.ts.map +1 -0
  68. package/dist/tests/redis/redisIndex.test.js +84 -0
  69. package/dist/tests/redis/redisIndex.test.js.map +1 -0
  70. package/dist/tests/redis/testRedisClient.d.ts +3 -0
  71. package/dist/tests/redis/testRedisClient.d.ts.map +1 -0
  72. package/dist/tests/redis/testRedisClient.js +8 -0
  73. package/dist/tests/redis/testRedisClient.js.map +1 -0
  74. package/dist/tests/testLogger.d.ts +4 -0
  75. package/dist/tests/testLogger.d.ts.map +1 -0
  76. package/dist/tests/testLogger.js +22 -0
  77. package/dist/tests/testLogger.js.map +1 -0
  78. package/dist/util.d.ts +2 -0
  79. package/dist/util.d.ts.map +1 -0
  80. package/dist/util.js +3 -0
  81. package/dist/util.js.map +1 -0
  82. package/package.json +16 -14
  83. package/vite.cjs.config.ts +4 -6
  84. package/vite.config.ts +39 -0
  85. package/vite.test.config.ts +2 -1
  86. package/dist/blacklistInspector.d.ts +0 -6
  87. package/dist/blacklistInspector.d.ts.map +0 -1
  88. package/dist/blacklistInspector.js +0 -2
  89. package/dist/blacklistInspector.js.map +0 -1
  90. package/dist/cjs/rules/api/apiRulePaths.cjs +0 -7
  91. package/dist/cjs/rules/api/apiRuleRoutesProvider.cjs +0 -23
  92. package/dist/cjs/rules/api/deleteMany/apiDeleteManyRulesArgsSchema.cjs +0 -13
  93. package/dist/cjs/rules/api/deleteMany/apiDeleteManyRulesEndpoint.cjs +0 -19
  94. package/dist/cjs/rules/api/getExpressApiRuleRateLimits.cjs +0 -18
  95. package/dist/cjs/rules/api/insertMany/apiInsertManyRulesArgsSchema.cjs +0 -39
  96. package/dist/cjs/rules/api/insertMany/apiInsertManyRulesEndpoint.cjs +0 -193
  97. package/dist/cjs/rules/blacklistRulesInspector.cjs +0 -44
  98. package/dist/cjs/rules/imageCaptchaConfigRulesResolver.cjs +0 -115
  99. package/dist/cjs/rules/mongoose/indexes/rulePerformanceMongooseIndexes.cjs +0 -75
  100. package/dist/cjs/rules/mongoose/indexes/ruleUniqueMongooseIndexes.cjs +0 -137
  101. package/dist/cjs/rules/mongoose/rulesMongooseStorage.cjs +0 -177
  102. package/dist/cjs/rules/mongoose/schemas/config/configMongooseSchema.cjs +0 -14
  103. package/dist/cjs/rules/mongoose/schemas/config/imageCaptchaConfigMongooseSchema.cjs +0 -17
  104. package/dist/cjs/rules/mongoose/schemas/getRuleMongooseSchema.cjs +0 -19
  105. package/dist/cjs/rules/mongoose/schemas/ip/ipMongooseSchema.cjs +0 -29
  106. package/dist/cjs/rules/mongoose/schemas/ip/v4/ipV4MaskMongooseSchema.cjs +0 -14
  107. package/dist/cjs/rules/mongoose/schemas/ip/v4/ipV4MongooseSchema.cjs +0 -18
  108. package/dist/cjs/rules/mongoose/schemas/ip/v6/ipV6MaskMongooseSchema.cjs +0 -34
  109. package/dist/cjs/rules/mongoose/schemas/ip/v6/ipV6MongooseSchema.cjs +0 -33
  110. package/dist/cjs/rules/mongoose/schemas/ruleMongooseSchema.cjs +0 -43
  111. package/dist/cjs/rules/rule/config/imageCaptcha/imageCaptchaConfigSchema.cjs +0 -8
  112. package/dist/cjs/rules/rule/config/ruleConfigSchema.cjs +0 -8
  113. package/dist/cjs/rules/rule/ip/ruleIpSchema.cjs +0 -10
  114. package/dist/cjs/rules/rule/ip/ruleIpVersion.cjs +0 -8
  115. package/dist/cjs/rules/rule/ip/v4/mask/ruleIpV4MaskSchema.cjs +0 -9
  116. package/dist/cjs/rules/rule/ip/v4/ruleIpV4Schema.cjs +0 -10
  117. package/dist/cjs/rules/rule/ip/v6/mask/ruleIpV6MaskSchema.cjs +0 -9
  118. package/dist/cjs/rules/rule/ip/v6/ruleIpV6NumericMaxLength.cjs +0 -4
  119. package/dist/cjs/rules/rule/ip/v6/ruleIpV6Schema.cjs +0 -10
  120. package/dist/imageCaptchaConfigResolver.d.ts +0 -7
  121. package/dist/imageCaptchaConfigResolver.d.ts.map +0 -1
  122. package/dist/imageCaptchaConfigResolver.js +0 -2
  123. package/dist/imageCaptchaConfigResolver.js.map +0 -1
  124. package/dist/rules/api/apiRulePaths.d.ts +0 -5
  125. package/dist/rules/api/apiRulePaths.d.ts.map +0 -1
  126. package/dist/rules/api/apiRulePaths.js +0 -5
  127. package/dist/rules/api/apiRulePaths.js.map +0 -1
  128. package/dist/rules/api/apiRuleRoutesProvider.d.ts +0 -9
  129. package/dist/rules/api/apiRuleRoutesProvider.d.ts.map +0 -1
  130. package/dist/rules/api/apiRuleRoutesProvider.js +0 -22
  131. package/dist/rules/api/apiRuleRoutesProvider.js.map +0 -1
  132. package/dist/rules/api/deleteMany/apiDeleteManyRulesArgsSchema.d.ts +0 -162
  133. package/dist/rules/api/deleteMany/apiDeleteManyRulesArgsSchema.d.ts.map +0 -1
  134. package/dist/rules/api/deleteMany/apiDeleteManyRulesArgsSchema.js +0 -10
  135. package/dist/rules/api/deleteMany/apiDeleteManyRulesArgsSchema.js.map +0 -1
  136. package/dist/rules/api/deleteMany/apiDeleteManyRulesEndpoint.d.ts +0 -12
  137. package/dist/rules/api/deleteMany/apiDeleteManyRulesEndpoint.d.ts.map +0 -1
  138. package/dist/rules/api/deleteMany/apiDeleteManyRulesEndpoint.js +0 -18
  139. package/dist/rules/api/deleteMany/apiDeleteManyRulesEndpoint.js.map +0 -1
  140. package/dist/rules/api/getExpressApiRuleRateLimits.d.ts +0 -8
  141. package/dist/rules/api/getExpressApiRuleRateLimits.d.ts.map +0 -1
  142. package/dist/rules/api/getExpressApiRuleRateLimits.js +0 -21
  143. package/dist/rules/api/getExpressApiRuleRateLimits.js.map +0 -1
  144. package/dist/rules/api/insertMany/apiInsertManyRulesArgsSchema.d.ts +0 -163
  145. package/dist/rules/api/insertMany/apiInsertManyRulesArgsSchema.d.ts.map +0 -1
  146. package/dist/rules/api/insertMany/apiInsertManyRulesArgsSchema.js +0 -37
  147. package/dist/rules/api/insertMany/apiInsertManyRulesArgsSchema.js.map +0 -1
  148. package/dist/rules/api/insertMany/apiInsertManyRulesEndpoint.d.ts +0 -18
  149. package/dist/rules/api/insertMany/apiInsertManyRulesEndpoint.d.ts.map +0 -1
  150. package/dist/rules/api/insertMany/apiInsertManyRulesEndpoint.js +0 -195
  151. package/dist/rules/api/insertMany/apiInsertManyRulesEndpoint.js.map +0 -1
  152. package/dist/rules/blacklistRulesInspector.d.ts +0 -12
  153. package/dist/rules/blacklistRulesInspector.d.ts.map +0 -1
  154. package/dist/rules/blacklistRulesInspector.js +0 -38
  155. package/dist/rules/blacklistRulesInspector.js.map +0 -1
  156. package/dist/rules/imageCaptchaConfigRulesResolver.d.ts +0 -21
  157. package/dist/rules/imageCaptchaConfigRulesResolver.d.ts.map +0 -1
  158. package/dist/rules/imageCaptchaConfigRulesResolver.js +0 -92
  159. package/dist/rules/imageCaptchaConfigRulesResolver.js.map +0 -1
  160. package/dist/rules/mongoose/indexes/mongooseIndex.d.ts +0 -7
  161. package/dist/rules/mongoose/indexes/mongooseIndex.d.ts.map +0 -1
  162. package/dist/rules/mongoose/indexes/mongooseIndex.js +0 -2
  163. package/dist/rules/mongoose/indexes/mongooseIndex.js.map +0 -1
  164. package/dist/rules/mongoose/indexes/rulePerformanceMongooseIndexes.d.ts +0 -4
  165. package/dist/rules/mongoose/indexes/rulePerformanceMongooseIndexes.d.ts.map +0 -1
  166. package/dist/rules/mongoose/indexes/rulePerformanceMongooseIndexes.js +0 -74
  167. package/dist/rules/mongoose/indexes/rulePerformanceMongooseIndexes.js.map +0 -1
  168. package/dist/rules/mongoose/indexes/ruleUniqueMongooseIndexes.d.ts +0 -4
  169. package/dist/rules/mongoose/indexes/ruleUniqueMongooseIndexes.d.ts.map +0 -1
  170. package/dist/rules/mongoose/indexes/ruleUniqueMongooseIndexes.js +0 -136
  171. package/dist/rules/mongoose/indexes/ruleUniqueMongooseIndexes.js.map +0 -1
  172. package/dist/rules/mongoose/ruleMongooseRecord.d.ts +0 -7
  173. package/dist/rules/mongoose/ruleMongooseRecord.d.ts.map +0 -1
  174. package/dist/rules/mongoose/ruleMongooseRecord.js +0 -2
  175. package/dist/rules/mongoose/ruleMongooseRecord.js.map +0 -1
  176. package/dist/rules/mongoose/rulesMongooseStorage.d.ts +0 -30
  177. package/dist/rules/mongoose/rulesMongooseStorage.d.ts.map +0 -1
  178. package/dist/rules/mongoose/rulesMongooseStorage.js +0 -177
  179. package/dist/rules/mongoose/rulesMongooseStorage.js.map +0 -1
  180. package/dist/rules/mongoose/schemas/config/configMongooseSchema.d.ts +0 -43
  181. package/dist/rules/mongoose/schemas/config/configMongooseSchema.d.ts.map +0 -1
  182. package/dist/rules/mongoose/schemas/config/configMongooseSchema.js +0 -10
  183. package/dist/rules/mongoose/schemas/config/configMongooseSchema.js.map +0 -1
  184. package/dist/rules/mongoose/schemas/config/imageCaptchaConfigMongooseSchema.d.ts +0 -29
  185. package/dist/rules/mongoose/schemas/config/imageCaptchaConfigMongooseSchema.d.ts.map +0 -1
  186. package/dist/rules/mongoose/schemas/config/imageCaptchaConfigMongooseSchema.js +0 -13
  187. package/dist/rules/mongoose/schemas/config/imageCaptchaConfigMongooseSchema.js.map +0 -1
  188. package/dist/rules/mongoose/schemas/getRuleMongooseSchema.d.ts +0 -5
  189. package/dist/rules/mongoose/schemas/getRuleMongooseSchema.d.ts.map +0 -1
  190. package/dist/rules/mongoose/schemas/getRuleMongooseSchema.js +0 -15
  191. package/dist/rules/mongoose/schemas/getRuleMongooseSchema.js.map +0 -1
  192. package/dist/rules/mongoose/schemas/ip/ipMongooseSchema.d.ts +0 -141
  193. package/dist/rules/mongoose/schemas/ip/ipMongooseSchema.d.ts.map +0 -1
  194. package/dist/rules/mongoose/schemas/ip/ipMongooseSchema.js +0 -25
  195. package/dist/rules/mongoose/schemas/ip/ipMongooseSchema.js.map +0 -1
  196. package/dist/rules/mongoose/schemas/ip/v4/ipV4MaskMongooseSchema.d.ts +0 -36
  197. package/dist/rules/mongoose/schemas/ip/v4/ipV4MaskMongooseSchema.d.ts.map +0 -1
  198. package/dist/rules/mongoose/schemas/ip/v4/ipV4MaskMongooseSchema.js +0 -8
  199. package/dist/rules/mongoose/schemas/ip/v4/ipV4MaskMongooseSchema.js.map +0 -1
  200. package/dist/rules/mongoose/schemas/ip/v4/ipV4MongooseSchema.d.ts +0 -64
  201. package/dist/rules/mongoose/schemas/ip/v4/ipV4MongooseSchema.d.ts.map +0 -1
  202. package/dist/rules/mongoose/schemas/ip/v4/ipV4MongooseSchema.js +0 -12
  203. package/dist/rules/mongoose/schemas/ip/v4/ipV4MongooseSchema.js.map +0 -1
  204. package/dist/rules/mongoose/schemas/ip/v6/ipV6MaskMongooseSchema.d.ts +0 -36
  205. package/dist/rules/mongoose/schemas/ip/v6/ipV6MaskMongooseSchema.d.ts.map +0 -1
  206. package/dist/rules/mongoose/schemas/ip/v6/ipV6MaskMongooseSchema.js +0 -17
  207. package/dist/rules/mongoose/schemas/ip/v6/ipV6MaskMongooseSchema.js.map +0 -1
  208. package/dist/rules/mongoose/schemas/ip/v6/ipV6MongooseSchema.d.ts +0 -64
  209. package/dist/rules/mongoose/schemas/ip/v6/ipV6MongooseSchema.d.ts.map +0 -1
  210. package/dist/rules/mongoose/schemas/ip/v6/ipV6MongooseSchema.js +0 -17
  211. package/dist/rules/mongoose/schemas/ip/v6/ipV6MongooseSchema.js.map +0 -1
  212. package/dist/rules/mongoose/schemas/ruleMongooseSchema.d.ts +0 -9
  213. package/dist/rules/mongoose/schemas/ruleMongooseSchema.d.ts.map +0 -1
  214. package/dist/rules/mongoose/schemas/ruleMongooseSchema.js +0 -42
  215. package/dist/rules/mongoose/schemas/ruleMongooseSchema.js.map +0 -1
  216. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfig.d.ts +0 -5
  217. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfig.d.ts.map +0 -1
  218. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfig.js +0 -2
  219. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfig.js.map +0 -1
  220. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfigSchema.d.ts +0 -12
  221. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfigSchema.d.ts.map +0 -1
  222. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfigSchema.js +0 -7
  223. package/dist/rules/rule/config/imageCaptcha/imageCaptchaConfigSchema.js.map +0 -1
  224. package/dist/rules/rule/config/ruleConfig.d.ts +0 -5
  225. package/dist/rules/rule/config/ruleConfig.d.ts.map +0 -1
  226. package/dist/rules/rule/config/ruleConfig.js +0 -2
  227. package/dist/rules/rule/config/ruleConfig.js.map +0 -1
  228. package/dist/rules/rule/config/ruleConfigSchema.d.ts +0 -24
  229. package/dist/rules/rule/config/ruleConfigSchema.d.ts.map +0 -1
  230. package/dist/rules/rule/config/ruleConfigSchema.js +0 -7
  231. package/dist/rules/rule/config/ruleConfigSchema.js.map +0 -1
  232. package/dist/rules/rule/ip/ruleIp.d.ts +0 -5
  233. package/dist/rules/rule/ip/ruleIp.d.ts.map +0 -1
  234. package/dist/rules/rule/ip/ruleIp.js +0 -2
  235. package/dist/rules/rule/ip/ruleIp.js.map +0 -1
  236. package/dist/rules/rule/ip/ruleIpSchema.d.ts +0 -108
  237. package/dist/rules/rule/ip/ruleIpSchema.d.ts.map +0 -1
  238. package/dist/rules/rule/ip/ruleIpSchema.js +0 -9
  239. package/dist/rules/rule/ip/ruleIpSchema.js.map +0 -1
  240. package/dist/rules/rule/ip/ruleIpVersion.d.ts +0 -6
  241. package/dist/rules/rule/ip/ruleIpVersion.d.ts.map +0 -1
  242. package/dist/rules/rule/ip/ruleIpVersion.js +0 -7
  243. package/dist/rules/rule/ip/ruleIpVersion.js.map +0 -1
  244. package/dist/rules/rule/ip/v4/mask/ruleIpV4Mask.d.ts +0 -5
  245. package/dist/rules/rule/ip/v4/mask/ruleIpV4Mask.d.ts.map +0 -1
  246. package/dist/rules/rule/ip/v4/mask/ruleIpV4Mask.js +0 -2
  247. package/dist/rules/rule/ip/v4/mask/ruleIpV4Mask.js.map +0 -1
  248. package/dist/rules/rule/ip/v4/mask/ruleIpV4MaskSchema.d.ts +0 -15
  249. package/dist/rules/rule/ip/v4/mask/ruleIpV4MaskSchema.d.ts.map +0 -1
  250. package/dist/rules/rule/ip/v4/mask/ruleIpV4MaskSchema.js +0 -8
  251. package/dist/rules/rule/ip/v4/mask/ruleIpV4MaskSchema.js.map +0 -1
  252. package/dist/rules/rule/ip/v4/ruleIpV4.d.ts +0 -5
  253. package/dist/rules/rule/ip/v4/ruleIpV4.d.ts.map +0 -1
  254. package/dist/rules/rule/ip/v4/ruleIpV4.js +0 -2
  255. package/dist/rules/rule/ip/v4/ruleIpV4.js.map +0 -1
  256. package/dist/rules/rule/ip/v4/ruleIpV4Schema.d.ts +0 -35
  257. package/dist/rules/rule/ip/v4/ruleIpV4Schema.d.ts.map +0 -1
  258. package/dist/rules/rule/ip/v4/ruleIpV4Schema.js +0 -9
  259. package/dist/rules/rule/ip/v4/ruleIpV4Schema.js.map +0 -1
  260. package/dist/rules/rule/ip/v6/mask/ruleIpV6Mask.d.ts +0 -5
  261. package/dist/rules/rule/ip/v6/mask/ruleIpV6Mask.d.ts.map +0 -1
  262. package/dist/rules/rule/ip/v6/mask/ruleIpV6Mask.js +0 -2
  263. package/dist/rules/rule/ip/v6/mask/ruleIpV6Mask.js.map +0 -1
  264. package/dist/rules/rule/ip/v6/mask/ruleIpV6MaskSchema.d.ts +0 -15
  265. package/dist/rules/rule/ip/v6/mask/ruleIpV6MaskSchema.d.ts.map +0 -1
  266. package/dist/rules/rule/ip/v6/mask/ruleIpV6MaskSchema.js +0 -8
  267. package/dist/rules/rule/ip/v6/mask/ruleIpV6MaskSchema.js.map +0 -1
  268. package/dist/rules/rule/ip/v6/ruleIpV6.d.ts +0 -5
  269. package/dist/rules/rule/ip/v6/ruleIpV6.d.ts.map +0 -1
  270. package/dist/rules/rule/ip/v6/ruleIpV6.js +0 -2
  271. package/dist/rules/rule/ip/v6/ruleIpV6.js.map +0 -1
  272. package/dist/rules/rule/ip/v6/ruleIpV6NumericMaxLength.d.ts +0 -3
  273. package/dist/rules/rule/ip/v6/ruleIpV6NumericMaxLength.d.ts.map +0 -1
  274. package/dist/rules/rule/ip/v6/ruleIpV6NumericMaxLength.js +0 -3
  275. package/dist/rules/rule/ip/v6/ruleIpV6NumericMaxLength.js.map +0 -1
  276. package/dist/rules/rule/ip/v6/ruleIpV6Schema.d.ts +0 -35
  277. package/dist/rules/rule/ip/v6/ruleIpV6Schema.d.ts.map +0 -1
  278. package/dist/rules/rule/ip/v6/ruleIpV6Schema.js +0 -9
  279. package/dist/rules/rule/ip/v6/ruleIpV6Schema.js.map +0 -1
  280. package/dist/rules/rule/rule.d.ts +0 -14
  281. package/dist/rules/rule/rule.d.ts.map +0 -1
  282. package/dist/rules/rule/rule.js +0 -2
  283. package/dist/rules/rule/rule.js.map +0 -1
  284. package/dist/rules/storage/filters/deleteRuleFilters.d.ts +0 -9
  285. package/dist/rules/storage/filters/deleteRuleFilters.d.ts.map +0 -1
  286. package/dist/rules/storage/filters/deleteRuleFilters.js +0 -2
  287. package/dist/rules/storage/filters/deleteRuleFilters.js.map +0 -1
  288. package/dist/rules/storage/filters/search/searchRuleFilterSettings.d.ts +0 -6
  289. package/dist/rules/storage/filters/search/searchRuleFilterSettings.d.ts.map +0 -1
  290. package/dist/rules/storage/filters/search/searchRuleFilterSettings.js +0 -2
  291. package/dist/rules/storage/filters/search/searchRuleFilterSettings.js.map +0 -1
  292. package/dist/rules/storage/filters/search/searchRuleFilters.d.ts +0 -9
  293. package/dist/rules/storage/filters/search/searchRuleFilters.d.ts.map +0 -1
  294. package/dist/rules/storage/filters/search/searchRuleFilters.js +0 -2
  295. package/dist/rules/storage/filters/search/searchRuleFilters.js.map +0 -1
  296. package/dist/rules/storage/ruleRecord.d.ts +0 -6
  297. package/dist/rules/storage/ruleRecord.d.ts.map +0 -1
  298. package/dist/rules/storage/ruleRecord.js +0 -2
  299. package/dist/rules/storage/ruleRecord.js.map +0 -1
  300. package/dist/rules/storage/rulesStorage.d.ts +0 -14
  301. package/dist/rules/storage/rulesStorage.d.ts.map +0 -1
  302. package/dist/rules/storage/rulesStorage.js +0 -2
  303. package/dist/rules/storage/rulesStorage.js.map +0 -1
  304. package/dist/tests/benchmark/commands/commandBase.d.ts +0 -14
  305. package/dist/tests/benchmark/commands/commandBase.d.ts.map +0 -1
  306. package/dist/tests/benchmark/commands/commandBase.js +0 -22
  307. package/dist/tests/benchmark/commands/commandBase.js.map +0 -1
  308. package/dist/tests/benchmark/commands/measureFindCommand.d.ts +0 -14
  309. package/dist/tests/benchmark/commands/measureFindCommand.d.ts.map +0 -1
  310. package/dist/tests/benchmark/commands/measureFindCommand.js +0 -60
  311. package/dist/tests/benchmark/commands/measureFindCommand.js.map +0 -1
  312. package/dist/tests/benchmark/commands/populateCommand.d.ts +0 -18
  313. package/dist/tests/benchmark/commands/populateCommand.d.ts.map +0 -1
  314. package/dist/tests/benchmark/commands/populateCommand.js +0 -97
  315. package/dist/tests/benchmark/commands/populateCommand.js.map +0 -1
  316. package/dist/tests/benchmark/connectionCleaner/connectionCleaner.d.ts +0 -5
  317. package/dist/tests/benchmark/connectionCleaner/connectionCleaner.d.ts.map +0 -1
  318. package/dist/tests/benchmark/connectionCleaner/connectionCleaner.js +0 -2
  319. package/dist/tests/benchmark/connectionCleaner/connectionCleaner.js.map +0 -1
  320. package/dist/tests/benchmark/connectionCleaner/mongooseConnectionCleaner.d.ts +0 -6
  321. package/dist/tests/benchmark/connectionCleaner/mongooseConnectionCleaner.d.ts.map +0 -1
  322. package/dist/tests/benchmark/connectionCleaner/mongooseConnectionCleaner.js +0 -8
  323. package/dist/tests/benchmark/connectionCleaner/mongooseConnectionCleaner.js.map +0 -1
  324. package/dist/tests/benchmark/mongooseRulesStorageBenchmark.d.ts +0 -2
  325. package/dist/tests/benchmark/mongooseRulesStorageBenchmark.d.ts.map +0 -1
  326. package/dist/tests/benchmark/mongooseRulesStorageBenchmark.js +0 -8
  327. package/dist/tests/benchmark/mongooseRulesStorageBenchmark.js.map +0 -1
  328. package/dist/tests/benchmark/rulesStorageBenchmark.d.ts +0 -12
  329. package/dist/tests/benchmark/rulesStorageBenchmark.d.ts.map +0 -1
  330. package/dist/tests/benchmark/rulesStorageBenchmark.js +0 -30
  331. package/dist/tests/benchmark/rulesStorageBenchmark.js.map +0 -1
  332. package/dist/tests/benchmark/storageFactory/mongooseRulesStorageFactory.d.ts +0 -10
  333. package/dist/tests/benchmark/storageFactory/mongooseRulesStorageFactory.d.ts.map +0 -1
  334. package/dist/tests/benchmark/storageFactory/mongooseRulesStorageFactory.js +0 -16
  335. package/dist/tests/benchmark/storageFactory/mongooseRulesStorageFactory.js.map +0 -1
  336. package/dist/tests/benchmark/storageFactory/rulesStorageFactory.d.ts +0 -6
  337. package/dist/tests/benchmark/storageFactory/rulesStorageFactory.d.ts.map +0 -1
  338. package/dist/tests/benchmark/storageFactory/rulesStorageFactory.js +0 -2
  339. package/dist/tests/benchmark/storageFactory/rulesStorageFactory.js.map +0 -1
  340. package/dist/tests/rules/ImageCaptchaConfigRulesResolver.test.d.ts +0 -2
  341. package/dist/tests/rules/ImageCaptchaConfigRulesResolver.test.d.ts.map +0 -1
  342. package/dist/tests/rules/ImageCaptchaConfigRulesResolver.test.js +0 -75
  343. package/dist/tests/rules/ImageCaptchaConfigRulesResolver.test.js.map +0 -1
  344. package/dist/tests/rules/blacklistRulesInspector.unit.test.d.ts +0 -2
  345. package/dist/tests/rules/blacklistRulesInspector.unit.test.d.ts.map +0 -1
  346. package/dist/tests/rules/blacklistRulesInspector.unit.test.js +0 -58
  347. package/dist/tests/rules/blacklistRulesInspector.unit.test.js.map +0 -1
  348. package/dist/tests/rules/loggerMockedInstance.d.ts +0 -13
  349. package/dist/tests/rules/loggerMockedInstance.d.ts.map +0 -1
  350. package/dist/tests/rules/loggerMockedInstance.js +0 -14
  351. package/dist/tests/rules/loggerMockedInstance.js.map +0 -1
  352. package/dist/tests/rules/mongoose/find.unit.test.d.ts +0 -2
  353. package/dist/tests/rules/mongoose/find.unit.test.d.ts.map +0 -1
  354. package/dist/tests/rules/mongoose/find.unit.test.js +0 -202
  355. package/dist/tests/rules/mongoose/find.unit.test.js.map +0 -1
  356. package/dist/tests/rules/mongoose/insert/insertIpV6Formatting.unit.test.d.ts +0 -2
  357. package/dist/tests/rules/mongoose/insert/insertIpV6Formatting.unit.test.d.ts.map +0 -1
  358. package/dist/tests/rules/mongoose/insert/insertIpV6Formatting.unit.test.js +0 -131
  359. package/dist/tests/rules/mongoose/insert/insertIpV6Formatting.unit.test.js.map +0 -1
  360. package/dist/tests/rules/mongoose/insert/insertValidation.unit.test.d.ts +0 -2
  361. package/dist/tests/rules/mongoose/insert/insertValidation.unit.test.d.ts.map +0 -1
  362. package/dist/tests/rules/mongoose/insert/insertValidation.unit.test.js +0 -101
  363. package/dist/tests/rules/mongoose/insert/insertValidation.unit.test.js.map +0 -1
  364. package/dist/tests/rules/mongoose/ip.unit.test.d.ts +0 -2
  365. package/dist/tests/rules/mongoose/ip.unit.test.d.ts.map +0 -1
  366. package/dist/tests/rules/mongoose/ip.unit.test.js +0 -380
  367. package/dist/tests/rules/mongoose/ip.unit.test.js.map +0 -1
  368. package/dist/tests/rules/storage/testRulesStorage.d.ts +0 -17
  369. package/dist/tests/rules/storage/testRulesStorage.d.ts.map +0 -1
  370. package/dist/tests/rules/storage/testRulesStorage.js +0 -25
  371. package/dist/tests/rules/storage/testRulesStorage.js.map +0 -1
@@ -1,28 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const apiRulePaths = require("./rules/api/apiRulePaths.cjs");
4
- const apiRuleRoutesProvider = require("./rules/api/apiRuleRoutesProvider.cjs");
5
- const getExpressApiRuleRateLimits = require("./rules/api/getExpressApiRuleRateLimits.cjs");
6
- const blacklistRulesInspector = require("./rules/blacklistRulesInspector.cjs");
7
- const imageCaptchaConfigRulesResolver = require("./rules/imageCaptchaConfigRulesResolver.cjs");
8
- const rulesMongooseStorage = require("./rules/mongoose/rulesMongooseStorage.cjs");
9
- const getRuleMongooseSchema = require("./rules/mongoose/schemas/getRuleMongooseSchema.cjs");
10
- const createBlacklistInspector = (rulesStorage, logger) => {
11
- return new blacklistRulesInspector.BlacklistRulesInspector(rulesStorage, logger);
12
- };
13
- const createImageCaptchaConfigResolver = (rulesStorage, logger) => {
14
- return new imageCaptchaConfigRulesResolver.ImageCaptchaConfigRulesResolver(rulesStorage, logger);
15
- };
3
+ const accessPolicy = require("./accessPolicy.cjs");
4
+ const accessPolicyResolver = require("./accessPolicyResolver.cjs");
5
+ const accessRuleApiRoutes = require("./api/accessRuleApiRoutes.cjs");
6
+ const deleteAllRulesEndpoint = require("./api/deleteAllRulesEndpoint.cjs");
7
+ const deleteRulesEndpoint = require("./api/deleteRulesEndpoint.cjs");
8
+ const insertRulesEndpoint = require("./api/insertRulesEndpoint.cjs");
9
+ const redisAccessRules = require("./redis/redisAccessRules.cjs");
10
+ const redisAccessRulesIndex = require("./redis/redisAccessRulesIndex.cjs");
16
11
  const createApiRuleRoutesProvider = (rulesStorage) => {
17
- return new apiRuleRoutesProvider.ApiRuleRoutesProvider(rulesStorage);
18
- };
19
- const createMongooseRulesStorage = (logger, readingModel, writingModel = null) => {
20
- return new rulesMongooseStorage.RulesMongooseStorage(logger, readingModel, writingModel);
12
+ return new accessRuleApiRoutes.AccessRuleApiRoutes(rulesStorage);
21
13
  };
22
- exports.apiRulePaths = apiRulePaths.apiRulePaths;
23
- exports.getExpressApiRuleRateLimits = getExpressApiRuleRateLimits.getExpressApiRuleRateLimits;
24
- exports.getRuleMongooseSchema = getRuleMongooseSchema.getRuleMongooseSchema;
14
+ exports.AccessPolicyType = accessPolicy.AccessPolicyType;
15
+ exports.accessPolicySchema = accessPolicy.accessPolicySchema;
16
+ exports.policyScopeSchema = accessPolicy.policyScopeSchema;
17
+ exports.userScopeInputSchema = accessPolicy.userScopeInputSchema;
18
+ exports.ScopeMatch = accessPolicyResolver.ScopeMatch;
19
+ exports.createAccessPolicyResolver = accessPolicyResolver.createAccessPolicyResolver;
20
+ exports.accessRuleApiPaths = accessRuleApiRoutes.accessRuleApiPaths;
21
+ exports.getExpressApiRuleRateLimits = accessRuleApiRoutes.getExpressApiRuleRateLimits;
22
+ exports.deleteAllRulesEndpointSchema = deleteAllRulesEndpoint.deleteAllRulesEndpointSchema;
23
+ exports.deleteRulesEndpointSchema = deleteRulesEndpoint.deleteRulesEndpointSchema;
24
+ exports.insertRulesEndpointSchema = insertRulesEndpoint.insertRulesEndpointSchema;
25
+ exports.createRedisAccessRulesStorage = redisAccessRules.createRedisAccessRulesStorage;
26
+ exports.createRedisAccessRulesIndex = redisAccessRulesIndex.createRedisAccessRulesIndex;
25
27
  exports.createApiRuleRoutesProvider = createApiRuleRoutesProvider;
26
- exports.createBlacklistInspector = createBlacklistInspector;
27
- exports.createImageCaptchaConfigResolver = createImageCaptchaConfigResolver;
28
- exports.createMongooseRulesStorage = createMongooseRulesStorage;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const util = require("node:util");
4
+ const accessRules = require("../accessRules.cjs");
5
+ const redisAccessRulesIndex = require("./redisAccessRulesIndex.cjs");
6
+ function _interopNamespaceDefault(e) {
7
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
+ if (e) {
9
+ for (const k in e) {
10
+ if (k !== "default") {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: () => e[k]
15
+ });
16
+ }
17
+ }
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+ const util__namespace = /* @__PURE__ */ _interopNamespaceDefault(util);
23
+ const createRedisAccessRulesReader = (client, logger) => {
24
+ return {
25
+ findRules: async (filter) => {
26
+ const query = redisAccessRulesIndex.getRedisAccessRulesQuery(filter);
27
+ let searchReply;
28
+ try {
29
+ searchReply = await client.ft.search(
30
+ redisAccessRulesIndex.accessRulesRedisIndexName,
31
+ query,
32
+ redisAccessRulesIndex.accessRulesRedisSearchOptions
33
+ );
34
+ logger.debug(() => ({
35
+ msg: "Executed search query",
36
+ data: {
37
+ inspect: util__namespace.inspect(
38
+ {
39
+ filter,
40
+ searchReply,
41
+ query
42
+ },
43
+ { depth: null }
44
+ )
45
+ }
46
+ }));
47
+ } catch (e) {
48
+ logger.error(() => ({
49
+ err: e,
50
+ data: {
51
+ inspect: util__namespace.inspect(
52
+ {
53
+ query,
54
+ filter
55
+ },
56
+ {
57
+ depth: null
58
+ }
59
+ )
60
+ },
61
+ msg: "failed to execute search query"
62
+ }));
63
+ return [];
64
+ }
65
+ return extractAccessRulesFromSearchReply(searchReply, logger);
66
+ },
67
+ findRuleIds: async (filter) => {
68
+ const query = redisAccessRulesIndex.getRedisAccessRulesQuery(filter);
69
+ let searchReply;
70
+ try {
71
+ searchReply = await client.ft.searchNoContent(
72
+ redisAccessRulesIndex.accessRulesRedisIndexName,
73
+ query,
74
+ redisAccessRulesIndex.accessRulesRedisSearchOptions
75
+ );
76
+ } catch (e) {
77
+ logger.error(() => ({
78
+ err: e,
79
+ data: {
80
+ inspect: util__namespace.inspect(
81
+ {
82
+ query,
83
+ filter
84
+ },
85
+ {
86
+ depth: null
87
+ }
88
+ )
89
+ },
90
+ msg: "Failed to execute search query for rule IDs"
91
+ }));
92
+ return [];
93
+ }
94
+ return searchReply.documents;
95
+ }
96
+ };
97
+ };
98
+ const createRedisAccessRulesWriter = (client) => {
99
+ return {
100
+ insertRule: async (rule, expirationSeconds) => {
101
+ const ruleKey = redisAccessRulesIndex.getRedisAccessRuleKey(rule);
102
+ const ruleValue = redisAccessRulesIndex.getRedisAccessRuleValue(rule);
103
+ await client.hSet(ruleKey, ruleValue);
104
+ if (expirationSeconds) {
105
+ await client.expire(ruleKey, expirationSeconds);
106
+ }
107
+ return ruleKey;
108
+ },
109
+ deleteRules: async (ruleIds) => void await client.del(ruleIds),
110
+ deleteAllRules: async () => {
111
+ const keys = await client.keys(`${redisAccessRulesIndex.accessRuleRedisKeyPrefix}*`);
112
+ return keys.length > 0 ? await client.del(keys) : 0;
113
+ }
114
+ };
115
+ };
116
+ const createRedisAccessRulesStorage = (client, logger) => {
117
+ return {
118
+ ...createRedisAccessRulesReader(client, logger),
119
+ ...createRedisAccessRulesWriter(client)
120
+ };
121
+ };
122
+ const extractAccessRulesFromSearchReply = (searchReply, logger) => {
123
+ const accessRules$1 = [];
124
+ searchReply.documents.map(({ id, value: document }) => {
125
+ const parsedDocument = accessRules.accessRuleSchema.safeParse(document);
126
+ if (parsedDocument.success) {
127
+ accessRules$1.push(parsedDocument.data);
128
+ } else {
129
+ logger.debug(() => ({
130
+ msg: "Failed to parse access rule from search reply",
131
+ id,
132
+ error: parsedDocument.error
133
+ }));
134
+ }
135
+ });
136
+ return accessRules$1;
137
+ };
138
+ exports.createRedisAccessRulesReader = createRedisAccessRulesReader;
139
+ exports.createRedisAccessRulesStorage = createRedisAccessRulesStorage;
140
+ exports.createRedisAccessRulesWriter = createRedisAccessRulesWriter;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const crypto = require("node:crypto");
4
+ const search = require("@redis/search");
5
+ const accessPolicyResolver = require("../accessPolicyResolver.cjs");
6
+ const redisIndex = require("./redisIndex.cjs");
7
+ const accessRulesRedisIndexName = "index:user-access-rules";
8
+ const accessRuleRedisKeyPrefix = "uar:";
9
+ const accessRuleContentHashAlgorithm = "md5";
10
+ const accessRulesIndex = {
11
+ name: accessRulesRedisIndexName,
12
+ /**
13
+ * Note on the field type decision
14
+ *
15
+ * TAG is designed for the exact value matching
16
+ * TEXT is designed for the word-based and pattern matching
17
+ *
18
+ * For our goal TAG fits perfectly and, more performant
19
+ */
20
+ schema: {
21
+ clientId: {
22
+ type: search.SCHEMA_FIELD_TYPE.TAG,
23
+ // necessary to make possible use of the ismissing() function on this field in the search
24
+ INDEXMISSING: true
25
+ },
26
+ numericIpMaskMin: search.SCHEMA_FIELD_TYPE.NUMERIC,
27
+ numericIpMaskMax: search.SCHEMA_FIELD_TYPE.NUMERIC,
28
+ userId: search.SCHEMA_FIELD_TYPE.TAG,
29
+ numericIp: search.SCHEMA_FIELD_TYPE.NUMERIC,
30
+ ja4Hash: search.SCHEMA_FIELD_TYPE.TAG,
31
+ headersHash: search.SCHEMA_FIELD_TYPE.TAG,
32
+ userAgentHash: search.SCHEMA_FIELD_TYPE.TAG
33
+ },
34
+ // the satisfy statement is to guarantee that the keys are right
35
+ options: {
36
+ ON: "HASH",
37
+ PREFIX: accessRuleRedisKeyPrefix
38
+ }
39
+ };
40
+ const createRedisAccessRulesIndex = async (client) => redisIndex.createRedisIndex(client, accessRulesIndex);
41
+ const numericIndexFields = [
42
+ "numericIp",
43
+ "numericIpMaskMin",
44
+ "numericIpMaskMax"
45
+ ];
46
+ const greedyFieldComparisons = {
47
+ numericIp: (value) => `( @numericIp:[${value}] | ( @numericIpMaskMin:[-inf ${value}] @numericIpMaskMax:[${value} +inf] ) )`
48
+ };
49
+ const accessRulesRedisSearchOptions = {
50
+ // #2 is a required option when the 'ismissing()' function is in the query body
51
+ DIALECT: 2
52
+ };
53
+ const getRedisAccessRulesQuery = (filter) => {
54
+ const { policyScope, userScope } = filter;
55
+ const policyScopeFilter = getPolicyScopeQuery(
56
+ policyScope,
57
+ filter.policyScopeMatch
58
+ );
59
+ if (userScope && Object.keys(userScope).length > 0) {
60
+ const userScopeFilter = getUserScopeQuery(userScope, filter.userScopeMatch);
61
+ return `${policyScopeFilter} ( ${userScopeFilter} )`;
62
+ }
63
+ return policyScopeFilter ? policyScopeFilter : "*";
64
+ };
65
+ const getPolicyScopeQuery = (policyScope, scopeMatchType) => {
66
+ const clientId = policyScope?.clientId;
67
+ if ("string" === typeof clientId) {
68
+ return accessPolicyResolver.ScopeMatch.Exact === scopeMatchType ? `@clientId:{${clientId}}` : `( @clientId:{${clientId}} | ismissing(@clientId) )`;
69
+ }
70
+ return accessPolicyResolver.ScopeMatch.Exact === scopeMatchType ? "ismissing(@clientId)" : "";
71
+ };
72
+ const getUserScopeQuery = (userScope, scopeMatchType) => {
73
+ const scopeEntries = Object.entries(userScope).filter(([_, value]) => value !== void 0);
74
+ const scopeJoinType = accessPolicyResolver.ScopeMatch.Exact === scopeMatchType ? " " : " | ";
75
+ return scopeEntries.map(
76
+ ([scopeFieldName, scopeFieldValue]) => getUserScopeFieldQuery(scopeFieldName, scopeFieldValue, scopeMatchType)
77
+ ).join(scopeJoinType);
78
+ };
79
+ const getUserScopeFieldQuery = (fieldName, fieldValue, matchType) => {
80
+ if (accessPolicyResolver.ScopeMatch.Greedy === matchType && "function" === typeof greedyFieldComparisons[fieldName]) {
81
+ return greedyFieldComparisons[fieldName](fieldValue);
82
+ }
83
+ return numericIndexFields.includes(fieldName) ? `@${fieldName}:[${fieldValue}]` : `@${fieldName}:{${fieldValue}}`;
84
+ };
85
+ const getRedisAccessRuleKey = (rule) => accessRuleRedisKeyPrefix + crypto.createHash(accessRuleContentHashAlgorithm).update(
86
+ JSON.stringify(
87
+ rule,
88
+ (key, value) => (
89
+ // JSON.stringify can't handle BigInt itself: throws "Do not know how to serialize a BigInt"
90
+ "bigint" === typeof value ? value.toString() : value
91
+ )
92
+ )
93
+ ).digest("hex");
94
+ const getRedisAccessRuleValue = (rule) => Object.fromEntries(
95
+ Object.entries(rule).map(([key, value]) => [key, String(value)])
96
+ );
97
+ exports.accessRuleRedisKeyPrefix = accessRuleRedisKeyPrefix;
98
+ exports.accessRulesRedisIndexName = accessRulesRedisIndexName;
99
+ exports.accessRulesRedisSearchOptions = accessRulesRedisSearchOptions;
100
+ exports.createRedisAccessRulesIndex = createRedisAccessRulesIndex;
101
+ exports.getRedisAccessRuleKey = getRedisAccessRuleKey;
102
+ exports.getRedisAccessRuleValue = getRedisAccessRuleValue;
103
+ exports.getRedisAccessRulesQuery = getRedisAccessRulesQuery;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const crypto = require("node:crypto");
4
+ const redisIndexHashesRecordKey = "_index_hashes";
5
+ const redisIndexHashAlgorithm = "sha256";
6
+ const createRedisIndex = async (client, index) => {
7
+ const indexHash = createIndexHash(index);
8
+ const existingIndexes = await client.ft._LIST();
9
+ if (existingIndexes.includes(index.name)) {
10
+ const existingIndexHash = await fetchIndexHash(client, index.name);
11
+ if (indexHash === existingIndexHash) {
12
+ return;
13
+ }
14
+ await client.ft.dropIndex(index.name);
15
+ }
16
+ await client.ft.create(index.name, index.schema, index.options);
17
+ await saveIndexHash(client, index.name, indexHash);
18
+ };
19
+ const createIndexHash = (index) => crypto.createHash(redisIndexHashAlgorithm).update(JSON.stringify(index)).digest("hex");
20
+ const fetchIndexHash = async (client, indexName) => client.hGet(redisIndexHashesRecordKey, indexName);
21
+ const saveIndexHash = async (client, indexName, indexHash) => client.hSet(redisIndexHashesRecordKey, indexName, indexHash);
22
+ exports.createRedisIndex = createRedisIndex;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const crypto = require("node:crypto");
4
+ const hashUserAgent = (userAgent) => crypto.createHash("sha256").update(userAgent).digest("hex");
5
+ exports.hashUserAgent = hashUserAgent;
package/dist/index.d.ts CHANGED
@@ -1,17 +1,15 @@
1
1
  import type { ApiRoutesProvider } from "@prosopo/api-route";
2
- import type { Logger } from "@prosopo/common";
3
- import type { Model } from "mongoose";
4
- import type { BlacklistInspector } from "./blacklistInspector.js";
5
- import { apiRulePaths } from "./rules/api/apiRulePaths.js";
6
- import { getExpressApiRuleRateLimits } from "./rules/api/getExpressApiRuleRateLimits.js";
7
- import type { ApiInsertManyRulesArgsOutputSchema, ApiInsertManyRulesArgsSchema } from "./rules/api/insertMany/apiInsertManyRulesArgsSchema.js";
8
- import { ImageCaptchaConfigRulesResolver } from "./rules/imageCaptchaConfigRulesResolver.js";
9
- import { getRuleMongooseSchema } from "./rules/mongoose/schemas/getRuleMongooseSchema.js";
10
- import type { Rule } from "./rules/rule/rule.js";
11
- import type { RulesStorage } from "./rules/storage/rulesStorage.js";
12
- declare const createBlacklistInspector: (rulesStorage: RulesStorage, logger: Logger) => BlacklistInspector;
13
- declare const createImageCaptchaConfigResolver: (rulesStorage: RulesStorage, logger: Logger) => ImageCaptchaConfigRulesResolver;
14
- declare const createApiRuleRoutesProvider: (rulesStorage: RulesStorage) => ApiRoutesProvider;
15
- declare const createMongooseRulesStorage: (logger: Logger, readingModel: Model<Rule> | null, writingModel?: Model<Rule> | null) => RulesStorage;
16
- export { type Rule, type RulesStorage, type BlacklistInspector, type ApiInsertManyRulesArgsSchema, type ApiInsertManyRulesArgsOutputSchema, createMongooseRulesStorage, createImageCaptchaConfigResolver, createBlacklistInspector, createApiRuleRoutesProvider, getRuleMongooseSchema, getExpressApiRuleRateLimits, apiRulePaths, };
2
+ import { type AccessPolicy, AccessPolicyType, type AccessRuleExtended, type PolicyScope, type UserScope, type UserScopeApiInput, type UserScopeApiOutput, accessPolicySchema, policyScopeSchema } from "#policy/accessPolicy.js";
3
+ import { type ResolveAccessPolicy, createAccessPolicyResolver } from "#policy/accessPolicyResolver.js";
4
+ import { type PolicyFilter, ScopeMatch } from "#policy/accessPolicyResolver.js";
5
+ import type { AccessRule, AccessRulesStorage } from "#policy/accessRules.js";
6
+ import { accessRuleApiPaths, getExpressApiRuleRateLimits } from "#policy/api/accessRuleApiRoutes.js";
7
+ import { deleteAllRulesEndpointSchema } from "#policy/api/deleteAllRulesEndpoint.js";
8
+ import { type DeleteRulesEndpointSchemaInput, type DeleteRulesEndpointSchemaOutput, deleteRulesEndpointSchema } from "#policy/api/deleteRulesEndpoint.js";
9
+ import { type InsertManyRulesEndpointInputSchema, type InsertManyRulesEndpointOutputSchema, insertRulesEndpointSchema } from "#policy/api/insertRulesEndpoint.js";
10
+ import { createRedisAccessRulesStorage } from "#policy/redis/redisAccessRules.js";
11
+ import { createRedisAccessRulesIndex } from "#policy/redis/redisAccessRulesIndex.js";
12
+ import { userScopeInputSchema } from "./accessPolicy.js";
13
+ export declare const createApiRuleRoutesProvider: (rulesStorage: AccessRulesStorage) => ApiRoutesProvider;
14
+ export { type AccessPolicy, type PolicyScope, type AccessRulesStorage, type ResolveAccessPolicy, type PolicyFilter, type DeleteRulesEndpointSchemaOutput, type DeleteRulesEndpointSchemaInput, type InsertManyRulesEndpointInputSchema, type InsertManyRulesEndpointOutputSchema, type AccessRule, type UserScope, type UserScopeApiInput, type UserScopeApiOutput, type AccessRuleExtended, createAccessPolicyResolver, AccessPolicyType, ScopeMatch, createRedisAccessRulesIndex, createRedisAccessRulesStorage, accessRuleApiPaths, accessPolicySchema, policyScopeSchema, insertRulesEndpointSchema, deleteAllRulesEndpointSchema, deleteRulesEndpointSchema, getExpressApiRuleRateLimits, userScopeInputSchema, };
17
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,KAAK,EACX,kCAAkC,EAClC,4BAA4B,EAC5B,MAAM,wDAAwD,CAAC;AAEhE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAE7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,QAAA,MAAM,wBAAwB,iBACf,YAAY,UAClB,MAAM,KACZ,kBAEF,CAAC;AAEF,QAAA,MAAM,gCAAgC,iBACvB,YAAY,UAClB,MAAM,KACZ,+BAEF,CAAC;AAEF,QAAA,MAAM,2BAA2B,iBAClB,YAAY,KACxB,iBAEF,CAAC;AAEF,QAAA,MAAM,0BAA0B,WACvB,MAAM,gBACA,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,iBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAC9B,YAEF,CAAC;AAEF,OAAO,EACN,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,kCAAkC,EACvC,0BAA0B,EAC1B,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,GACZ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACN,KAAK,YAAY,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,mBAAmB,EACxB,0BAA0B,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAEN,kBAAkB,EAClB,2BAA2B,EAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,yBAAyB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,KAAK,kCAAkC,EACvC,KAAK,mCAAmC,EACxC,yBAAyB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,eAAO,MAAM,2BAA2B,iBACzB,kBAAkB,KAC9B,iBAEF,CAAC;AAEF,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,mCAAmC,EACxC,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,0BAA0B,EAC1B,gBAAgB,EAChB,UAAU,EAEV,2BAA2B,EAC3B,6BAA6B,EAE7B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,oBAAoB,GACpB,CAAC"}
package/dist/index.js CHANGED
@@ -1,21 +1,15 @@
1
- import { apiRulePaths } from "./rules/api/apiRulePaths.js";
2
- import { ApiRuleRoutesProvider } from "./rules/api/apiRuleRoutesProvider.js";
3
- import { getExpressApiRuleRateLimits } from "./rules/api/getExpressApiRuleRateLimits.js";
4
- import { BlacklistRulesInspector } from "./rules/blacklistRulesInspector.js";
5
- import { ImageCaptchaConfigRulesResolver } from "./rules/imageCaptchaConfigRulesResolver.js";
6
- import { RulesMongooseStorage } from "./rules/mongoose/rulesMongooseStorage.js";
7
- import { getRuleMongooseSchema } from "./rules/mongoose/schemas/getRuleMongooseSchema.js";
8
- const createBlacklistInspector = (rulesStorage, logger) => {
9
- return new BlacklistRulesInspector(rulesStorage, logger);
10
- };
11
- const createImageCaptchaConfigResolver = (rulesStorage, logger) => {
12
- return new ImageCaptchaConfigRulesResolver(rulesStorage, logger);
13
- };
14
- const createApiRuleRoutesProvider = (rulesStorage) => {
15
- return new ApiRuleRoutesProvider(rulesStorage);
16
- };
17
- const createMongooseRulesStorage = (logger, readingModel, writingModel = null) => {
18
- return new RulesMongooseStorage(logger, readingModel, writingModel);
19
- };
20
- export { createMongooseRulesStorage, createImageCaptchaConfigResolver, createBlacklistInspector, createApiRuleRoutesProvider, getRuleMongooseSchema, getExpressApiRuleRateLimits, apiRulePaths, };
1
+ import { AccessPolicyType, accessPolicySchema, policyScopeSchema, } from "#policy/accessPolicy.js";
2
+ import { createAccessPolicyResolver, } from "#policy/accessPolicyResolver.js";
3
+ import { ScopeMatch } from "#policy/accessPolicyResolver.js";
4
+ import { AccessRuleApiRoutes, accessRuleApiPaths, getExpressApiRuleRateLimits, } from "#policy/api/accessRuleApiRoutes.js";
5
+ import { deleteAllRulesEndpointSchema } from "#policy/api/deleteAllRulesEndpoint.js";
6
+ import { deleteRulesEndpointSchema, } from "#policy/api/deleteRulesEndpoint.js";
7
+ import { insertRulesEndpointSchema, } from "#policy/api/insertRulesEndpoint.js";
8
+ import { createRedisAccessRulesStorage } from "#policy/redis/redisAccessRules.js";
9
+ import { createRedisAccessRulesIndex } from "#policy/redis/redisAccessRulesIndex.js";
10
+ import { userScopeInputSchema } from "./accessPolicy.js";
11
+ export const createApiRuleRoutesProvider = (rulesStorage) => {
12
+ return new AccessRuleApiRoutes(rulesStorage);
13
+ };
14
+ export { createAccessPolicyResolver, AccessPolicyType, ScopeMatch, createRedisAccessRulesIndex, createRedisAccessRulesStorage, accessRuleApiPaths, accessPolicySchema, policyScopeSchema, insertRulesEndpointSchema, deleteAllRulesEndpointSchema, deleteRulesEndpointSchema, getExpressApiRuleRateLimits, userScopeInputSchema, };
21
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAKzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAI1F,MAAM,wBAAwB,GAAG,CAChC,YAA0B,EAC1B,MAAc,EACO,EAAE;IACvB,OAAO,IAAI,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACxC,YAA0B,EAC1B,MAAc,EACoB,EAAE;IACpC,OAAO,IAAI,+BAA+B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CACnC,YAA0B,EACN,EAAE;IACtB,OAAO,IAAI,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAClC,MAAc,EACd,YAAgC,EAChC,eAAmC,IAAI,EACxB,EAAE;IACjB,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,OAAO,EAMN,0BAA0B,EAC1B,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,GACZ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAEN,gBAAgB,EAMhB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAqB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EACN,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAGN,yBAAyB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGN,yBAAyB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAC1C,YAAgC,EACZ,EAAE;IACtB,OAAO,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,OAAO,EAeN,0BAA0B,EAC1B,gBAAgB,EAChB,UAAU,EAEV,2BAA2B,EAC3B,6BAA6B,EAE7B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,oBAAoB,GACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Logger } from "@prosopo/common";
2
+ import type { RedisClientType } from "redis";
3
+ import { type AccessRulesReader, type AccessRulesStorage, type AccessRulesWriter } from "#policy/accessRules.js";
4
+ export declare const createRedisAccessRulesReader: (client: RedisClientType, logger: Logger) => AccessRulesReader;
5
+ export declare const createRedisAccessRulesWriter: (client: RedisClientType) => AccessRulesWriter;
6
+ export declare const createRedisAccessRulesStorage: (client: RedisClientType, logger: Logger) => AccessRulesStorage;
7
+ //# sourceMappingURL=redisAccessRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisAccessRules.d.ts","sourceRoot":"","sources":["../../src/redis/redisAccessRules.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAEN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEtB,MAAM,wBAAwB,CAAC;AAUhC,eAAO,MAAM,4BAA4B,WAChC,eAAe,UACf,MAAM,KACZ,iBAqFF,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAChC,eAAe,KACrB,iBA2BF,CAAC;AAEF,eAAO,MAAM,6BAA6B,WACjC,eAAe,UACf,MAAM,KACZ,kBAKF,CAAC"}
@@ -0,0 +1,105 @@
1
+ import * as util from "node:util";
2
+ import { accessRuleSchema, } from "#policy/accessRules.js";
3
+ import { accessRuleRedisKeyPrefix, accessRulesRedisIndexName, accessRulesRedisSearchOptions, getRedisAccessRuleKey, getRedisAccessRuleValue, getRedisAccessRulesQuery, } from "#policy/redis/redisAccessRulesIndex.js";
4
+ export const createRedisAccessRulesReader = (client, logger) => {
5
+ return {
6
+ findRules: async (filter) => {
7
+ const query = getRedisAccessRulesQuery(filter);
8
+ let searchReply;
9
+ try {
10
+ searchReply = await client.ft.search(accessRulesRedisIndexName, query, accessRulesRedisSearchOptions);
11
+ logger.debug(() => ({
12
+ msg: "Executed search query",
13
+ data: {
14
+ inspect: util.inspect({
15
+ filter: filter,
16
+ searchReply: searchReply,
17
+ query: query,
18
+ }, { depth: null }),
19
+ },
20
+ }));
21
+ }
22
+ catch (e) {
23
+ logger.error(() => ({
24
+ err: e,
25
+ data: {
26
+ inspect: util.inspect({
27
+ query: query,
28
+ filter: filter,
29
+ }, {
30
+ depth: null,
31
+ }),
32
+ },
33
+ msg: "failed to execute search query",
34
+ }));
35
+ return [];
36
+ }
37
+ return extractAccessRulesFromSearchReply(searchReply, logger);
38
+ },
39
+ findRuleIds: async (filter) => {
40
+ const query = getRedisAccessRulesQuery(filter);
41
+ let searchReply;
42
+ try {
43
+ searchReply = await client.ft.searchNoContent(accessRulesRedisIndexName, query, accessRulesRedisSearchOptions);
44
+ }
45
+ catch (e) {
46
+ logger.error(() => ({
47
+ err: e,
48
+ data: {
49
+ inspect: util.inspect({
50
+ query: query,
51
+ filter: filter,
52
+ }, {
53
+ depth: null,
54
+ }),
55
+ },
56
+ msg: "Failed to execute search query for rule IDs",
57
+ }));
58
+ return [];
59
+ }
60
+ return searchReply.documents;
61
+ },
62
+ };
63
+ };
64
+ export const createRedisAccessRulesWriter = (client) => {
65
+ return {
66
+ insertRule: async (rule, expirationSeconds) => {
67
+ const ruleKey = getRedisAccessRuleKey(rule);
68
+ const ruleValue = getRedisAccessRuleValue(rule);
69
+ await client.hSet(ruleKey, ruleValue);
70
+ if (expirationSeconds) {
71
+ await client.expire(ruleKey, expirationSeconds);
72
+ }
73
+ return ruleKey;
74
+ },
75
+ deleteRules: async (ruleIds) => void (await client.del(ruleIds)),
76
+ deleteAllRules: async () => {
77
+ const keys = await client.keys(`${accessRuleRedisKeyPrefix}*`);
78
+ return keys.length > 0 ? await client.del(keys) : 0;
79
+ },
80
+ };
81
+ };
82
+ export const createRedisAccessRulesStorage = (client, logger) => {
83
+ return {
84
+ ...createRedisAccessRulesReader(client, logger),
85
+ ...createRedisAccessRulesWriter(client),
86
+ };
87
+ };
88
+ const extractAccessRulesFromSearchReply = (searchReply, logger) => {
89
+ const accessRules = [];
90
+ searchReply.documents.map(({ id, value: document }) => {
91
+ const parsedDocument = accessRuleSchema.safeParse(document);
92
+ if (parsedDocument.success) {
93
+ accessRules.push(parsedDocument.data);
94
+ }
95
+ else {
96
+ logger.debug(() => ({
97
+ msg: "Failed to parse access rule from search reply",
98
+ id: id,
99
+ error: parsedDocument.error,
100
+ }));
101
+ }
102
+ });
103
+ return accessRules;
104
+ };
105
+ //# sourceMappingURL=redisAccessRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisAccessRules.js","sourceRoot":"","sources":["../../src/redis/redisAccessRules.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC,OAAO,EAKN,gBAAgB,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC3C,MAAuB,EACvB,MAAc,EACM,EAAE;IACtB,OAAO;QACN,SAAS,EAAE,KAAK,EAAE,MAAoB,EAAyB,EAAE;YAChE,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI,WAAwB,CAAC;YAE7B,IAAI,CAAC;gBACJ,WAAW,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,MAAM,CACnC,yBAAyB,EACzB,KAAK,EACL,6BAA6B,CAC7B,CAAC;gBAEF,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnB,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE;wBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;4BACC,MAAM,EAAE,MAAM;4BACd,WAAW,EAAE,WAAW;4BACxB,KAAK,EAAE,KAAK;yBACZ,EACD,EAAE,KAAK,EAAE,IAAI,EAAE,CACf;qBACD;iBACD,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnB,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE;wBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;4BACC,KAAK,EAAE,KAAK;4BACZ,MAAM,EAAE,MAAM;yBACd,EACD;4BACC,KAAK,EAAE,IAAI;yBACX,CACD;qBACD;oBACD,GAAG,EAAE,gCAAgC;iBACrC,CAAC,CAAC,CAAC;gBAEJ,OAAO,EAAE,CAAC;YACX,CAAC;YAED,OAAO,iCAAiC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,MAAoB,EAAqB,EAAE;YAC9D,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI,WAAiC,CAAC;YAEtC,IAAI,CAAC;gBACJ,WAAW,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,eAAe,CAC5C,yBAAyB,EACzB,KAAK,EACL,6BAA6B,CAC7B,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBAEZ,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnB,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE;wBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CACpB;4BACC,KAAK,EAAE,KAAK;4BACZ,MAAM,EAAE,MAAM;yBACd,EACD;4BACC,KAAK,EAAE,IAAI;yBACX,CACD;qBACD;oBACD,GAAG,EAAE,6CAA6C;iBAClD,CAAC,CAAC,CAAC;gBAEJ,OAAO,EAAE,CAAC;YACX,CAAC;YAED,OAAO,WAAW,CAAC,SAAS,CAAC;QAC9B,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC3C,MAAuB,EACH,EAAE;IACtB,OAAO;QACN,UAAU,EAAE,KAAK,EAChB,IAAgB,EAChB,iBAA0B,EACR,EAAE;YACpB,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAEhD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAEtC,IAAI,iBAAiB,EAAE,CAAC;gBACvB,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,OAAiB,EAAiB,EAAE,CACvD,KAAK,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEjC,cAAc,EAAE,KAAK,IAAqB,EAAE;YAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,wBAAwB,GAAG,CAAC,CAAC;YAE/D,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC5C,MAAuB,EACvB,MAAc,EACO,EAAE;IACvB,OAAO;QACN,GAAG,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC;QAC/C,GAAG,4BAA4B,CAAC,MAAM,CAAC;KACvC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACzC,WAAwB,EACxB,MAAc,EACC,EAAE;IACjB,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrD,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE5D,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnB,GAAG,EAAE,+CAA+C;gBACpD,EAAE,EAAE,EAAE;gBACN,KAAK,EAAE,cAAc,CAAC,KAAK;aAC3B,CAAC,CAAC,CAAC;QACL,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACpB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type FtSearchOptions } from "@redis/search";
2
+ import type { RedisClientType } from "redis";
3
+ import { type PolicyFilter } from "#policy/accessPolicyResolver.js";
4
+ import type { AccessRule } from "#policy/accessRules.js";
5
+ export declare const accessRulesRedisIndexName = "index:user-access-rules";
6
+ export declare const accessRuleRedisKeyPrefix = "uar:";
7
+ export declare const createRedisAccessRulesIndex: (client: RedisClientType) => Promise<void>;
8
+ export declare const accessRulesRedisSearchOptions: FtSearchOptions;
9
+ export declare const getRedisAccessRulesQuery: (filter: PolicyFilter) => string;
10
+ export declare const getRedisAccessRuleKey: (rule: AccessRule) => string;
11
+ export declare const getRedisAccessRuleValue: (rule: AccessRule) => Record<string, string>;
12
+ //# sourceMappingURL=redisAccessRulesIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redisAccessRulesIndex.d.ts","sourceRoot":"","sources":["../../src/redis/redisAccessRulesIndex.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAkC/C,eAAO,MAAM,2BAA2B,WAC/B,eAAe,KACrB,OAAO,CAAC,IAAI,CAA+C,CAAC;AAkB/D,eAAO,MAAM,6BAA6B,EAAE,eAG3C,CAAC;AAYF,eAAO,MAAM,wBAAwB,WAAY,YAAY,KAAG,MAe/D,CAAC;AAqDF,eAAO,MAAM,qBAAqB,SAAU,UAAU,KAAG,MAUzC,CAAC;AAEjB,eAAO,MAAM,uBAAuB,SAC7B,UAAU,KACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAGtB,CAAC"}