@actsecurity/iam-simulate 0.1.173

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 (597) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +257 -0
  3. package/dist/cjs/StatementAnalysis.d.ts +63 -0
  4. package/dist/cjs/StatementAnalysis.d.ts.map +1 -0
  5. package/dist/cjs/StatementAnalysis.js +48 -0
  6. package/dist/cjs/StatementAnalysis.js.map +1 -0
  7. package/dist/cjs/action/action.d.ts +37 -0
  8. package/dist/cjs/action/action.d.ts.map +1 -0
  9. package/dist/cjs/action/action.js +102 -0
  10. package/dist/cjs/action/action.js.map +1 -0
  11. package/dist/cjs/analysis/allowedConditions.d.ts +61 -0
  12. package/dist/cjs/analysis/allowedConditions.d.ts.map +1 -0
  13. package/dist/cjs/analysis/allowedConditions.js +395 -0
  14. package/dist/cjs/analysis/allowedConditions.js.map +1 -0
  15. package/dist/cjs/analysis/analyzeResults.d.ts +99 -0
  16. package/dist/cjs/analysis/analyzeResults.d.ts.map +1 -0
  17. package/dist/cjs/analysis/analyzeResults.js +187 -0
  18. package/dist/cjs/analysis/analyzeResults.js.map +1 -0
  19. package/dist/cjs/condition/BaseConditionOperator.d.ts +13 -0
  20. package/dist/cjs/condition/BaseConditionOperator.d.ts.map +1 -0
  21. package/dist/cjs/condition/BaseConditionOperator.js +3 -0
  22. package/dist/cjs/condition/BaseConditionOperator.js.map +1 -0
  23. package/dist/cjs/condition/arn/ArnEquals.d.ts +3 -0
  24. package/dist/cjs/condition/arn/ArnEquals.d.ts.map +1 -0
  25. package/dist/cjs/condition/arn/ArnEquals.js +12 -0
  26. package/dist/cjs/condition/arn/ArnEquals.js.map +1 -0
  27. package/dist/cjs/condition/arn/ArnLike.d.ts +3 -0
  28. package/dist/cjs/condition/arn/ArnLike.d.ts.map +1 -0
  29. package/dist/cjs/condition/arn/ArnLike.js +18 -0
  30. package/dist/cjs/condition/arn/ArnLike.js.map +1 -0
  31. package/dist/cjs/condition/arn/ArnNotEquals.d.ts +3 -0
  32. package/dist/cjs/condition/arn/ArnNotEquals.d.ts.map +1 -0
  33. package/dist/cjs/condition/arn/ArnNotEquals.js +12 -0
  34. package/dist/cjs/condition/arn/ArnNotEquals.js.map +1 -0
  35. package/dist/cjs/condition/arn/ArnNotLike.d.ts +3 -0
  36. package/dist/cjs/condition/arn/ArnNotLike.d.ts.map +1 -0
  37. package/dist/cjs/condition/arn/ArnNotLike.js +18 -0
  38. package/dist/cjs/condition/arn/ArnNotLike.js.map +1 -0
  39. package/dist/cjs/condition/arn/arn.d.ts +12 -0
  40. package/dist/cjs/condition/arn/arn.d.ts.map +1 -0
  41. package/dist/cjs/condition/arn/arn.js +71 -0
  42. package/dist/cjs/condition/arn/arn.js.map +1 -0
  43. package/dist/cjs/condition/binary/BinaryEquals.d.ts +7 -0
  44. package/dist/cjs/condition/binary/BinaryEquals.d.ts.map +1 -0
  45. package/dist/cjs/condition/binary/BinaryEquals.js +28 -0
  46. package/dist/cjs/condition/binary/BinaryEquals.js.map +1 -0
  47. package/dist/cjs/condition/boolean/Bool.d.ts +3 -0
  48. package/dist/cjs/condition/boolean/Bool.d.ts.map +1 -0
  49. package/dist/cjs/condition/boolean/Bool.js +54 -0
  50. package/dist/cjs/condition/boolean/Bool.js.map +1 -0
  51. package/dist/cjs/condition/condition.d.ts +26 -0
  52. package/dist/cjs/condition/condition.d.ts.map +1 -0
  53. package/dist/cjs/condition/condition.js +665 -0
  54. package/dist/cjs/condition/condition.js.map +1 -0
  55. package/dist/cjs/condition/conditionUtil.d.ts +10 -0
  56. package/dist/cjs/condition/conditionUtil.d.ts.map +1 -0
  57. package/dist/cjs/condition/conditionUtil.js +19 -0
  58. package/dist/cjs/condition/conditionUtil.js.map +1 -0
  59. package/dist/cjs/condition/date/DateEquals.d.ts +3 -0
  60. package/dist/cjs/condition/date/DateEquals.d.ts.map +1 -0
  61. package/dist/cjs/condition/date/DateEquals.js +22 -0
  62. package/dist/cjs/condition/date/DateEquals.js.map +1 -0
  63. package/dist/cjs/condition/date/DateGreaterThan.d.ts +3 -0
  64. package/dist/cjs/condition/date/DateGreaterThan.d.ts.map +1 -0
  65. package/dist/cjs/condition/date/DateGreaterThan.js +22 -0
  66. package/dist/cjs/condition/date/DateGreaterThan.js.map +1 -0
  67. package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts +3 -0
  68. package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
  69. package/dist/cjs/condition/date/DateGreaterThanEquals.js +22 -0
  70. package/dist/cjs/condition/date/DateGreaterThanEquals.js.map +1 -0
  71. package/dist/cjs/condition/date/DateLessThan.d.ts +3 -0
  72. package/dist/cjs/condition/date/DateLessThan.d.ts.map +1 -0
  73. package/dist/cjs/condition/date/DateLessThan.js +22 -0
  74. package/dist/cjs/condition/date/DateLessThan.js.map +1 -0
  75. package/dist/cjs/condition/date/DateLessThanEquals.d.ts +3 -0
  76. package/dist/cjs/condition/date/DateLessThanEquals.d.ts.map +1 -0
  77. package/dist/cjs/condition/date/DateLessThanEquals.js +22 -0
  78. package/dist/cjs/condition/date/DateLessThanEquals.js.map +1 -0
  79. package/dist/cjs/condition/date/DateNotEquals.d.ts +3 -0
  80. package/dist/cjs/condition/date/DateNotEquals.d.ts.map +1 -0
  81. package/dist/cjs/condition/date/DateNotEquals.js +22 -0
  82. package/dist/cjs/condition/date/DateNotEquals.js.map +1 -0
  83. package/dist/cjs/condition/date/date.d.ts +18 -0
  84. package/dist/cjs/condition/date/date.d.ts.map +1 -0
  85. package/dist/cjs/condition/date/date.js +57 -0
  86. package/dist/cjs/condition/date/date.js.map +1 -0
  87. package/dist/cjs/condition/ipaddress/IpAddress.d.ts +3 -0
  88. package/dist/cjs/condition/ipaddress/IpAddress.d.ts.map +1 -0
  89. package/dist/cjs/condition/ipaddress/IpAddress.js +20 -0
  90. package/dist/cjs/condition/ipaddress/IpAddress.js.map +1 -0
  91. package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts +3 -0
  92. package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
  93. package/dist/cjs/condition/ipaddress/NotIpAddress.js +20 -0
  94. package/dist/cjs/condition/ipaddress/NotIpAddress.js.map +1 -0
  95. package/dist/cjs/condition/ipaddress/ip.d.ts +11 -0
  96. package/dist/cjs/condition/ipaddress/ip.d.ts.map +1 -0
  97. package/dist/cjs/condition/ipaddress/ip.js +70 -0
  98. package/dist/cjs/condition/ipaddress/ip.js.map +1 -0
  99. package/dist/cjs/condition/ipaddress/ipv4.d.ts +24 -0
  100. package/dist/cjs/condition/ipaddress/ipv4.d.ts.map +1 -0
  101. package/dist/cjs/condition/ipaddress/ipv4.js +59 -0
  102. package/dist/cjs/condition/ipaddress/ipv4.js.map +1 -0
  103. package/dist/cjs/condition/ipaddress/ipv6.d.ts +24 -0
  104. package/dist/cjs/condition/ipaddress/ipv6.d.ts.map +1 -0
  105. package/dist/cjs/condition/ipaddress/ipv6.js +111 -0
  106. package/dist/cjs/condition/ipaddress/ipv6.js.map +1 -0
  107. package/dist/cjs/condition/numeric/NumericEquals.d.ts +3 -0
  108. package/dist/cjs/condition/numeric/NumericEquals.d.ts.map +1 -0
  109. package/dist/cjs/condition/numeric/NumericEquals.js +22 -0
  110. package/dist/cjs/condition/numeric/NumericEquals.js.map +1 -0
  111. package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts +3 -0
  112. package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
  113. package/dist/cjs/condition/numeric/NumericGreaterThan.js +22 -0
  114. package/dist/cjs/condition/numeric/NumericGreaterThan.js.map +1 -0
  115. package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
  116. package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
  117. package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js +22 -0
  118. package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
  119. package/dist/cjs/condition/numeric/NumericLessThan.d.ts +3 -0
  120. package/dist/cjs/condition/numeric/NumericLessThan.d.ts.map +1 -0
  121. package/dist/cjs/condition/numeric/NumericLessThan.js +22 -0
  122. package/dist/cjs/condition/numeric/NumericLessThan.js.map +1 -0
  123. package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts +3 -0
  124. package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
  125. package/dist/cjs/condition/numeric/NumericLessThanEquals.js +22 -0
  126. package/dist/cjs/condition/numeric/NumericLessThanEquals.js.map +1 -0
  127. package/dist/cjs/condition/numeric/NumericNotEquals.d.ts +3 -0
  128. package/dist/cjs/condition/numeric/NumericNotEquals.d.ts.map +1 -0
  129. package/dist/cjs/condition/numeric/NumericNotEquals.js +22 -0
  130. package/dist/cjs/condition/numeric/NumericNotEquals.js.map +1 -0
  131. package/dist/cjs/condition/numeric/numeric.d.ts +18 -0
  132. package/dist/cjs/condition/numeric/numeric.d.ts.map +1 -0
  133. package/dist/cjs/condition/numeric/numeric.js +56 -0
  134. package/dist/cjs/condition/numeric/numeric.js.map +1 -0
  135. package/dist/cjs/condition/string/StringEquals.d.ts +3 -0
  136. package/dist/cjs/condition/string/StringEquals.d.ts.map +1 -0
  137. package/dist/cjs/condition/string/StringEquals.js +35 -0
  138. package/dist/cjs/condition/string/StringEquals.js.map +1 -0
  139. package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
  140. package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
  141. package/dist/cjs/condition/string/StringEqualsIgnoreCase.js +35 -0
  142. package/dist/cjs/condition/string/StringEqualsIgnoreCase.js.map +1 -0
  143. package/dist/cjs/condition/string/StringLike.d.ts +3 -0
  144. package/dist/cjs/condition/string/StringLike.d.ts.map +1 -0
  145. package/dist/cjs/condition/string/StringLike.js +35 -0
  146. package/dist/cjs/condition/string/StringLike.js.map +1 -0
  147. package/dist/cjs/condition/string/StringNotEquals.d.ts +3 -0
  148. package/dist/cjs/condition/string/StringNotEquals.d.ts.map +1 -0
  149. package/dist/cjs/condition/string/StringNotEquals.js +35 -0
  150. package/dist/cjs/condition/string/StringNotEquals.js.map +1 -0
  151. package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
  152. package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
  153. package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js +35 -0
  154. package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
  155. package/dist/cjs/condition/string/StringNotLike.d.ts +3 -0
  156. package/dist/cjs/condition/string/StringNotLike.d.ts.map +1 -0
  157. package/dist/cjs/condition/string/StringNotLike.js +35 -0
  158. package/dist/cjs/condition/string/StringNotLike.js.map +1 -0
  159. package/dist/cjs/context_keys/contextKeyTypes.d.ts +19 -0
  160. package/dist/cjs/context_keys/contextKeyTypes.d.ts.map +1 -0
  161. package/dist/cjs/context_keys/contextKeyTypes.js +27 -0
  162. package/dist/cjs/context_keys/contextKeyTypes.js.map +1 -0
  163. package/dist/cjs/context_keys/contextKeys.d.ts +24 -0
  164. package/dist/cjs/context_keys/contextKeys.d.ts.map +1 -0
  165. package/dist/cjs/context_keys/contextKeys.js +121 -0
  166. package/dist/cjs/context_keys/contextKeys.js.map +1 -0
  167. package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
  168. package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
  169. package/dist/cjs/context_keys/discoveryContextKeyConstraints.js +153 -0
  170. package/dist/cjs/context_keys/discoveryContextKeyConstraints.js.map +1 -0
  171. package/dist/cjs/context_keys/findContextKeys.d.ts +19 -0
  172. package/dist/cjs/context_keys/findContextKeys.d.ts.map +1 -0
  173. package/dist/cjs/context_keys/findContextKeys.js +58 -0
  174. package/dist/cjs/context_keys/findContextKeys.js.map +1 -0
  175. package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts +134 -0
  176. package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
  177. package/dist/cjs/core_engine/CoreSimulatorEngine.js +444 -0
  178. package/dist/cjs/core_engine/CoreSimulatorEngine.js.map +1 -0
  179. package/dist/cjs/evaluate.d.ts +199 -0
  180. package/dist/cjs/evaluate.d.ts.map +1 -0
  181. package/dist/cjs/evaluate.js +3 -0
  182. package/dist/cjs/evaluate.js.map +1 -0
  183. package/dist/cjs/explain/displayExplainCli.d.ts +3 -0
  184. package/dist/cjs/explain/displayExplainCli.d.ts.map +1 -0
  185. package/dist/cjs/explain/displayExplainCli.js +260 -0
  186. package/dist/cjs/explain/displayExplainCli.js.map +1 -0
  187. package/dist/cjs/explain/statementExplain.d.ts +161 -0
  188. package/dist/cjs/explain/statementExplain.d.ts.map +1 -0
  189. package/dist/cjs/explain/statementExplain.js +33 -0
  190. package/dist/cjs/explain/statementExplain.js.map +1 -0
  191. package/dist/cjs/global_conditions/globalConditionKeys.d.ts +3 -0
  192. package/dist/cjs/global_conditions/globalConditionKeys.d.ts.map +1 -0
  193. package/dist/cjs/global_conditions/globalConditionKeys.js +12 -0
  194. package/dist/cjs/global_conditions/globalConditionKeys.js.map +1 -0
  195. package/dist/cjs/index.d.ts +16 -0
  196. package/dist/cjs/index.d.ts.map +1 -0
  197. package/dist/cjs/index.js +25 -0
  198. package/dist/cjs/index.js.map +1 -0
  199. package/dist/cjs/package.json +3 -0
  200. package/dist/cjs/policyType.d.ts +13 -0
  201. package/dist/cjs/policyType.d.ts.map +1 -0
  202. package/dist/cjs/policyType.js +3 -0
  203. package/dist/cjs/policyType.js.map +1 -0
  204. package/dist/cjs/principal/principal.d.ts +61 -0
  205. package/dist/cjs/principal/principal.d.ts.map +1 -0
  206. package/dist/cjs/principal/principal.js +357 -0
  207. package/dist/cjs/principal/principal.js.map +1 -0
  208. package/dist/cjs/request/request.d.ts +66 -0
  209. package/dist/cjs/request/request.d.ts.map +1 -0
  210. package/dist/cjs/request/request.js +42 -0
  211. package/dist/cjs/request/request.js.map +1 -0
  212. package/dist/cjs/request/requestAction.d.ts +27 -0
  213. package/dist/cjs/request/requestAction.d.ts.map +1 -0
  214. package/dist/cjs/request/requestAction.js +20 -0
  215. package/dist/cjs/request/requestAction.js.map +1 -0
  216. package/dist/cjs/request/requestPrincipal.d.ts +92 -0
  217. package/dist/cjs/request/requestPrincipal.d.ts.map +1 -0
  218. package/dist/cjs/request/requestPrincipal.js +88 -0
  219. package/dist/cjs/request/requestPrincipal.js.map +1 -0
  220. package/dist/cjs/request/requestResource.d.ts +55 -0
  221. package/dist/cjs/request/requestResource.d.ts.map +1 -0
  222. package/dist/cjs/request/requestResource.js +40 -0
  223. package/dist/cjs/request/requestResource.js.map +1 -0
  224. package/dist/cjs/requestContext.d.ts +63 -0
  225. package/dist/cjs/requestContext.d.ts.map +1 -0
  226. package/dist/cjs/requestContext.js +46 -0
  227. package/dist/cjs/requestContext.js.map +1 -0
  228. package/dist/cjs/resource/resource.d.ts +54 -0
  229. package/dist/cjs/resource/resource.d.ts.map +1 -0
  230. package/dist/cjs/resource/resource.js +585 -0
  231. package/dist/cjs/resource/resource.js.map +1 -0
  232. package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +182 -0
  233. package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -0
  234. package/dist/cjs/services/DefaultServiceAuthorizer.js +625 -0
  235. package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -0
  236. package/dist/cjs/services/IamServiceAuthorizer.d.ts +10 -0
  237. package/dist/cjs/services/IamServiceAuthorizer.d.ts.map +1 -0
  238. package/dist/cjs/services/IamServiceAuthorizer.js +65 -0
  239. package/dist/cjs/services/IamServiceAuthorizer.js.map +1 -0
  240. package/dist/cjs/services/KmsServiceAuthorizer.d.ts +29 -0
  241. package/dist/cjs/services/KmsServiceAuthorizer.d.ts.map +1 -0
  242. package/dist/cjs/services/KmsServiceAuthorizer.js +83 -0
  243. package/dist/cjs/services/KmsServiceAuthorizer.js.map +1 -0
  244. package/dist/cjs/services/ServiceAuthorizer.d.ts +27 -0
  245. package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -0
  246. package/dist/cjs/services/ServiceAuthorizer.js +3 -0
  247. package/dist/cjs/services/ServiceAuthorizer.js.map +1 -0
  248. package/dist/cjs/services/StsServiceAuthorizer.d.ts +19 -0
  249. package/dist/cjs/services/StsServiceAuthorizer.d.ts.map +1 -0
  250. package/dist/cjs/services/StsServiceAuthorizer.js +45 -0
  251. package/dist/cjs/services/StsServiceAuthorizer.js.map +1 -0
  252. package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts +24 -0
  253. package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
  254. package/dist/cjs/services/s3/S3ServiceAuthorizer.js +79 -0
  255. package/dist/cjs/services/s3/S3ServiceAuthorizer.js.map +1 -0
  256. package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts +50 -0
  257. package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
  258. package/dist/cjs/services/s3/s3BlockPublicAccess.js +301 -0
  259. package/dist/cjs/services/s3/s3BlockPublicAccess.js.map +1 -0
  260. package/dist/cjs/simulation_engine/contextKeys.d.ts +13 -0
  261. package/dist/cjs/simulation_engine/contextKeys.d.ts.map +1 -0
  262. package/dist/cjs/simulation_engine/contextKeys.js +58 -0
  263. package/dist/cjs/simulation_engine/contextKeys.js.map +1 -0
  264. package/dist/cjs/simulation_engine/overallResult.d.ts +13 -0
  265. package/dist/cjs/simulation_engine/overallResult.d.ts.map +1 -0
  266. package/dist/cjs/simulation_engine/overallResult.js +35 -0
  267. package/dist/cjs/simulation_engine/overallResult.js.map +1 -0
  268. package/dist/cjs/simulation_engine/policyResources.d.ts +44 -0
  269. package/dist/cjs/simulation_engine/policyResources.d.ts.map +1 -0
  270. package/dist/cjs/simulation_engine/policyResources.js +120 -0
  271. package/dist/cjs/simulation_engine/policyResources.js.map +1 -0
  272. package/dist/cjs/simulation_engine/resourceTypes.d.ts +11 -0
  273. package/dist/cjs/simulation_engine/resourceTypes.d.ts.map +1 -0
  274. package/dist/cjs/simulation_engine/resourceTypes.js +26 -0
  275. package/dist/cjs/simulation_engine/resourceTypes.js.map +1 -0
  276. package/dist/cjs/simulation_engine/simulation.d.ts +114 -0
  277. package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -0
  278. package/dist/cjs/simulation_engine/simulation.js +35 -0
  279. package/dist/cjs/simulation_engine/simulation.js.map +1 -0
  280. package/dist/cjs/simulation_engine/simulationEngine.d.ts +128 -0
  281. package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -0
  282. package/dist/cjs/simulation_engine/simulationEngine.js +432 -0
  283. package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -0
  284. package/dist/cjs/simulation_engine/simulationOptions.d.ts +21 -0
  285. package/dist/cjs/simulation_engine/simulationOptions.d.ts.map +1 -0
  286. package/dist/cjs/simulation_engine/simulationOptions.js +3 -0
  287. package/dist/cjs/simulation_engine/simulationOptions.js.map +1 -0
  288. package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
  289. package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
  290. package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +62 -0
  291. package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -0
  292. package/dist/cjs/util/resourceStrings.d.ts +19 -0
  293. package/dist/cjs/util/resourceStrings.d.ts.map +1 -0
  294. package/dist/cjs/util/resourceStrings.js +107 -0
  295. package/dist/cjs/util/resourceStrings.js.map +1 -0
  296. package/dist/cjs/util.d.ts +90 -0
  297. package/dist/cjs/util.d.ts.map +1 -0
  298. package/dist/cjs/util.js +350 -0
  299. package/dist/cjs/util.js.map +1 -0
  300. package/dist/esm/StatementAnalysis.d.ts +63 -0
  301. package/dist/esm/StatementAnalysis.d.ts.map +1 -0
  302. package/dist/esm/StatementAnalysis.js +46 -0
  303. package/dist/esm/StatementAnalysis.js.map +1 -0
  304. package/dist/esm/action/action.d.ts +37 -0
  305. package/dist/esm/action/action.d.ts.map +1 -0
  306. package/dist/esm/action/action.js +100 -0
  307. package/dist/esm/action/action.js.map +1 -0
  308. package/dist/esm/analysis/allowedConditions.d.ts +61 -0
  309. package/dist/esm/analysis/allowedConditions.d.ts.map +1 -0
  310. package/dist/esm/analysis/allowedConditions.js +382 -0
  311. package/dist/esm/analysis/allowedConditions.js.map +1 -0
  312. package/dist/esm/analysis/analyzeResults.d.ts +99 -0
  313. package/dist/esm/analysis/analyzeResults.d.ts.map +1 -0
  314. package/dist/esm/analysis/analyzeResults.js +183 -0
  315. package/dist/esm/analysis/analyzeResults.js.map +1 -0
  316. package/dist/esm/condition/BaseConditionOperator.d.ts +13 -0
  317. package/dist/esm/condition/BaseConditionOperator.d.ts.map +1 -0
  318. package/dist/esm/condition/BaseConditionOperator.js +3 -0
  319. package/dist/esm/condition/BaseConditionOperator.js.map +1 -0
  320. package/dist/esm/condition/arn/ArnEquals.d.ts +3 -0
  321. package/dist/esm/condition/arn/ArnEquals.d.ts.map +1 -0
  322. package/dist/esm/condition/arn/ArnEquals.js +10 -0
  323. package/dist/esm/condition/arn/ArnEquals.js.map +1 -0
  324. package/dist/esm/condition/arn/ArnLike.d.ts +3 -0
  325. package/dist/esm/condition/arn/ArnLike.d.ts.map +1 -0
  326. package/dist/esm/condition/arn/ArnLike.js +16 -0
  327. package/dist/esm/condition/arn/ArnLike.js.map +1 -0
  328. package/dist/esm/condition/arn/ArnNotEquals.d.ts +3 -0
  329. package/dist/esm/condition/arn/ArnNotEquals.d.ts.map +1 -0
  330. package/dist/esm/condition/arn/ArnNotEquals.js +10 -0
  331. package/dist/esm/condition/arn/ArnNotEquals.js.map +1 -0
  332. package/dist/esm/condition/arn/ArnNotLike.d.ts +3 -0
  333. package/dist/esm/condition/arn/ArnNotLike.d.ts.map +1 -0
  334. package/dist/esm/condition/arn/ArnNotLike.js +16 -0
  335. package/dist/esm/condition/arn/ArnNotLike.js.map +1 -0
  336. package/dist/esm/condition/arn/arn.d.ts +12 -0
  337. package/dist/esm/condition/arn/arn.d.ts.map +1 -0
  338. package/dist/esm/condition/arn/arn.js +70 -0
  339. package/dist/esm/condition/arn/arn.js.map +1 -0
  340. package/dist/esm/condition/binary/BinaryEquals.d.ts +7 -0
  341. package/dist/esm/condition/binary/BinaryEquals.d.ts.map +1 -0
  342. package/dist/esm/condition/binary/BinaryEquals.js +27 -0
  343. package/dist/esm/condition/binary/BinaryEquals.js.map +1 -0
  344. package/dist/esm/condition/boolean/Bool.d.ts +3 -0
  345. package/dist/esm/condition/boolean/Bool.d.ts.map +1 -0
  346. package/dist/esm/condition/boolean/Bool.js +53 -0
  347. package/dist/esm/condition/boolean/Bool.js.map +1 -0
  348. package/dist/esm/condition/condition.d.ts +26 -0
  349. package/dist/esm/condition/condition.d.ts.map +1 -0
  350. package/dist/esm/condition/condition.js +666 -0
  351. package/dist/esm/condition/condition.js.map +1 -0
  352. package/dist/esm/condition/conditionUtil.d.ts +10 -0
  353. package/dist/esm/condition/conditionUtil.d.ts.map +1 -0
  354. package/dist/esm/condition/conditionUtil.js +17 -0
  355. package/dist/esm/condition/conditionUtil.js.map +1 -0
  356. package/dist/esm/condition/date/DateEquals.d.ts +3 -0
  357. package/dist/esm/condition/date/DateEquals.d.ts.map +1 -0
  358. package/dist/esm/condition/date/DateEquals.js +20 -0
  359. package/dist/esm/condition/date/DateEquals.js.map +1 -0
  360. package/dist/esm/condition/date/DateGreaterThan.d.ts +3 -0
  361. package/dist/esm/condition/date/DateGreaterThan.d.ts.map +1 -0
  362. package/dist/esm/condition/date/DateGreaterThan.js +20 -0
  363. package/dist/esm/condition/date/DateGreaterThan.js.map +1 -0
  364. package/dist/esm/condition/date/DateGreaterThanEquals.d.ts +3 -0
  365. package/dist/esm/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
  366. package/dist/esm/condition/date/DateGreaterThanEquals.js +20 -0
  367. package/dist/esm/condition/date/DateGreaterThanEquals.js.map +1 -0
  368. package/dist/esm/condition/date/DateLessThan.d.ts +3 -0
  369. package/dist/esm/condition/date/DateLessThan.d.ts.map +1 -0
  370. package/dist/esm/condition/date/DateLessThan.js +20 -0
  371. package/dist/esm/condition/date/DateLessThan.js.map +1 -0
  372. package/dist/esm/condition/date/DateLessThanEquals.d.ts +3 -0
  373. package/dist/esm/condition/date/DateLessThanEquals.d.ts.map +1 -0
  374. package/dist/esm/condition/date/DateLessThanEquals.js +20 -0
  375. package/dist/esm/condition/date/DateLessThanEquals.js.map +1 -0
  376. package/dist/esm/condition/date/DateNotEquals.d.ts +3 -0
  377. package/dist/esm/condition/date/DateNotEquals.d.ts.map +1 -0
  378. package/dist/esm/condition/date/DateNotEquals.js +20 -0
  379. package/dist/esm/condition/date/DateNotEquals.js.map +1 -0
  380. package/dist/esm/condition/date/date.d.ts +18 -0
  381. package/dist/esm/condition/date/date.d.ts.map +1 -0
  382. package/dist/esm/condition/date/date.js +54 -0
  383. package/dist/esm/condition/date/date.js.map +1 -0
  384. package/dist/esm/condition/ipaddress/IpAddress.d.ts +3 -0
  385. package/dist/esm/condition/ipaddress/IpAddress.d.ts.map +1 -0
  386. package/dist/esm/condition/ipaddress/IpAddress.js +18 -0
  387. package/dist/esm/condition/ipaddress/IpAddress.js.map +1 -0
  388. package/dist/esm/condition/ipaddress/NotIpAddress.d.ts +3 -0
  389. package/dist/esm/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
  390. package/dist/esm/condition/ipaddress/NotIpAddress.js +18 -0
  391. package/dist/esm/condition/ipaddress/NotIpAddress.js.map +1 -0
  392. package/dist/esm/condition/ipaddress/ip.d.ts +11 -0
  393. package/dist/esm/condition/ipaddress/ip.d.ts.map +1 -0
  394. package/dist/esm/condition/ipaddress/ip.js +68 -0
  395. package/dist/esm/condition/ipaddress/ip.js.map +1 -0
  396. package/dist/esm/condition/ipaddress/ipv4.d.ts +24 -0
  397. package/dist/esm/condition/ipaddress/ipv4.d.ts.map +1 -0
  398. package/dist/esm/condition/ipaddress/ipv4.js +54 -0
  399. package/dist/esm/condition/ipaddress/ipv4.js.map +1 -0
  400. package/dist/esm/condition/ipaddress/ipv6.d.ts +24 -0
  401. package/dist/esm/condition/ipaddress/ipv6.d.ts.map +1 -0
  402. package/dist/esm/condition/ipaddress/ipv6.js +106 -0
  403. package/dist/esm/condition/ipaddress/ipv6.js.map +1 -0
  404. package/dist/esm/condition/numeric/NumericEquals.d.ts +3 -0
  405. package/dist/esm/condition/numeric/NumericEquals.d.ts.map +1 -0
  406. package/dist/esm/condition/numeric/NumericEquals.js +20 -0
  407. package/dist/esm/condition/numeric/NumericEquals.js.map +1 -0
  408. package/dist/esm/condition/numeric/NumericGreaterThan.d.ts +3 -0
  409. package/dist/esm/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
  410. package/dist/esm/condition/numeric/NumericGreaterThan.js +20 -0
  411. package/dist/esm/condition/numeric/NumericGreaterThan.js.map +1 -0
  412. package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
  413. package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
  414. package/dist/esm/condition/numeric/NumericGreaterThanEquals.js +20 -0
  415. package/dist/esm/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
  416. package/dist/esm/condition/numeric/NumericLessThan.d.ts +3 -0
  417. package/dist/esm/condition/numeric/NumericLessThan.d.ts.map +1 -0
  418. package/dist/esm/condition/numeric/NumericLessThan.js +20 -0
  419. package/dist/esm/condition/numeric/NumericLessThan.js.map +1 -0
  420. package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts +3 -0
  421. package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
  422. package/dist/esm/condition/numeric/NumericLessThanEquals.js +20 -0
  423. package/dist/esm/condition/numeric/NumericLessThanEquals.js.map +1 -0
  424. package/dist/esm/condition/numeric/NumericNotEquals.d.ts +3 -0
  425. package/dist/esm/condition/numeric/NumericNotEquals.d.ts.map +1 -0
  426. package/dist/esm/condition/numeric/NumericNotEquals.js +20 -0
  427. package/dist/esm/condition/numeric/NumericNotEquals.js.map +1 -0
  428. package/dist/esm/condition/numeric/numeric.d.ts +18 -0
  429. package/dist/esm/condition/numeric/numeric.d.ts.map +1 -0
  430. package/dist/esm/condition/numeric/numeric.js +53 -0
  431. package/dist/esm/condition/numeric/numeric.js.map +1 -0
  432. package/dist/esm/condition/string/StringEquals.d.ts +3 -0
  433. package/dist/esm/condition/string/StringEquals.d.ts.map +1 -0
  434. package/dist/esm/condition/string/StringEquals.js +34 -0
  435. package/dist/esm/condition/string/StringEquals.js.map +1 -0
  436. package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
  437. package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
  438. package/dist/esm/condition/string/StringEqualsIgnoreCase.js +34 -0
  439. package/dist/esm/condition/string/StringEqualsIgnoreCase.js.map +1 -0
  440. package/dist/esm/condition/string/StringLike.d.ts +3 -0
  441. package/dist/esm/condition/string/StringLike.d.ts.map +1 -0
  442. package/dist/esm/condition/string/StringLike.js +34 -0
  443. package/dist/esm/condition/string/StringLike.js.map +1 -0
  444. package/dist/esm/condition/string/StringNotEquals.d.ts +3 -0
  445. package/dist/esm/condition/string/StringNotEquals.d.ts.map +1 -0
  446. package/dist/esm/condition/string/StringNotEquals.js +34 -0
  447. package/dist/esm/condition/string/StringNotEquals.js.map +1 -0
  448. package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
  449. package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
  450. package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js +34 -0
  451. package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
  452. package/dist/esm/condition/string/StringNotLike.d.ts +3 -0
  453. package/dist/esm/condition/string/StringNotLike.d.ts.map +1 -0
  454. package/dist/esm/condition/string/StringNotLike.js +34 -0
  455. package/dist/esm/condition/string/StringNotLike.js.map +1 -0
  456. package/dist/esm/context_keys/contextKeyTypes.d.ts +19 -0
  457. package/dist/esm/context_keys/contextKeyTypes.d.ts.map +1 -0
  458. package/dist/esm/context_keys/contextKeyTypes.js +23 -0
  459. package/dist/esm/context_keys/contextKeyTypes.js.map +1 -0
  460. package/dist/esm/context_keys/contextKeys.d.ts +24 -0
  461. package/dist/esm/context_keys/contextKeys.d.ts.map +1 -0
  462. package/dist/esm/context_keys/contextKeys.js +117 -0
  463. package/dist/esm/context_keys/contextKeys.js.map +1 -0
  464. package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
  465. package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
  466. package/dist/esm/context_keys/discoveryContextKeyConstraints.js +149 -0
  467. package/dist/esm/context_keys/discoveryContextKeyConstraints.js.map +1 -0
  468. package/dist/esm/context_keys/findContextKeys.d.ts +19 -0
  469. package/dist/esm/context_keys/findContextKeys.d.ts.map +1 -0
  470. package/dist/esm/context_keys/findContextKeys.js +55 -0
  471. package/dist/esm/context_keys/findContextKeys.js.map +1 -0
  472. package/dist/esm/core_engine/CoreSimulatorEngine.d.ts +134 -0
  473. package/dist/esm/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
  474. package/dist/esm/core_engine/CoreSimulatorEngine.js +441 -0
  475. package/dist/esm/core_engine/CoreSimulatorEngine.js.map +1 -0
  476. package/dist/esm/evaluate.d.ts +199 -0
  477. package/dist/esm/evaluate.d.ts.map +1 -0
  478. package/dist/esm/evaluate.js +2 -0
  479. package/dist/esm/evaluate.js.map +1 -0
  480. package/dist/esm/explain/displayExplainCli.d.ts +3 -0
  481. package/dist/esm/explain/displayExplainCli.d.ts.map +1 -0
  482. package/dist/esm/explain/displayExplainCli.js +258 -0
  483. package/dist/esm/explain/displayExplainCli.js.map +1 -0
  484. package/dist/esm/explain/statementExplain.d.ts +161 -0
  485. package/dist/esm/explain/statementExplain.d.ts.map +1 -0
  486. package/dist/esm/explain/statementExplain.js +30 -0
  487. package/dist/esm/explain/statementExplain.js.map +1 -0
  488. package/dist/esm/global_conditions/globalConditionKeys.d.ts +3 -0
  489. package/dist/esm/global_conditions/globalConditionKeys.d.ts.map +1 -0
  490. package/dist/esm/global_conditions/globalConditionKeys.js +9 -0
  491. package/dist/esm/global_conditions/globalConditionKeys.js.map +1 -0
  492. package/dist/esm/index.d.ts +16 -0
  493. package/dist/esm/index.d.ts.map +1 -0
  494. package/dist/esm/index.js +10 -0
  495. package/dist/esm/index.js.map +1 -0
  496. package/dist/esm/package.json +3 -0
  497. package/dist/esm/policyType.d.ts +13 -0
  498. package/dist/esm/policyType.d.ts.map +1 -0
  499. package/dist/esm/policyType.js +2 -0
  500. package/dist/esm/policyType.js.map +1 -0
  501. package/dist/esm/principal/principal.d.ts +61 -0
  502. package/dist/esm/principal/principal.d.ts.map +1 -0
  503. package/dist/esm/principal/principal.js +354 -0
  504. package/dist/esm/principal/principal.js.map +1 -0
  505. package/dist/esm/request/request.d.ts +66 -0
  506. package/dist/esm/request/request.d.ts.map +1 -0
  507. package/dist/esm/request/request.js +34 -0
  508. package/dist/esm/request/request.js.map +1 -0
  509. package/dist/esm/request/requestAction.d.ts +27 -0
  510. package/dist/esm/request/requestAction.d.ts.map +1 -0
  511. package/dist/esm/request/requestAction.js +15 -0
  512. package/dist/esm/request/requestAction.js.map +1 -0
  513. package/dist/esm/request/requestPrincipal.d.ts +92 -0
  514. package/dist/esm/request/requestPrincipal.d.ts.map +1 -0
  515. package/dist/esm/request/requestPrincipal.js +80 -0
  516. package/dist/esm/request/requestPrincipal.js.map +1 -0
  517. package/dist/esm/request/requestResource.d.ts +55 -0
  518. package/dist/esm/request/requestResource.d.ts.map +1 -0
  519. package/dist/esm/request/requestResource.js +34 -0
  520. package/dist/esm/request/requestResource.js.map +1 -0
  521. package/dist/esm/requestContext.d.ts +63 -0
  522. package/dist/esm/requestContext.d.ts.map +1 -0
  523. package/dist/esm/requestContext.js +39 -0
  524. package/dist/esm/requestContext.js.map +1 -0
  525. package/dist/esm/resource/resource.d.ts +54 -0
  526. package/dist/esm/resource/resource.d.ts.map +1 -0
  527. package/dist/esm/resource/resource.js +582 -0
  528. package/dist/esm/resource/resource.js.map +1 -0
  529. package/dist/esm/services/DefaultServiceAuthorizer.d.ts +182 -0
  530. package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -0
  531. package/dist/esm/services/DefaultServiceAuthorizer.js +623 -0
  532. package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -0
  533. package/dist/esm/services/IamServiceAuthorizer.d.ts +10 -0
  534. package/dist/esm/services/IamServiceAuthorizer.d.ts.map +1 -0
  535. package/dist/esm/services/IamServiceAuthorizer.js +63 -0
  536. package/dist/esm/services/IamServiceAuthorizer.js.map +1 -0
  537. package/dist/esm/services/KmsServiceAuthorizer.d.ts +29 -0
  538. package/dist/esm/services/KmsServiceAuthorizer.d.ts.map +1 -0
  539. package/dist/esm/services/KmsServiceAuthorizer.js +82 -0
  540. package/dist/esm/services/KmsServiceAuthorizer.js.map +1 -0
  541. package/dist/esm/services/ServiceAuthorizer.d.ts +27 -0
  542. package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -0
  543. package/dist/esm/services/ServiceAuthorizer.js +5 -0
  544. package/dist/esm/services/ServiceAuthorizer.js.map +1 -0
  545. package/dist/esm/services/StsServiceAuthorizer.d.ts +19 -0
  546. package/dist/esm/services/StsServiceAuthorizer.d.ts.map +1 -0
  547. package/dist/esm/services/StsServiceAuthorizer.js +44 -0
  548. package/dist/esm/services/StsServiceAuthorizer.js.map +1 -0
  549. package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts +24 -0
  550. package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
  551. package/dist/esm/services/s3/S3ServiceAuthorizer.js +76 -0
  552. package/dist/esm/services/s3/S3ServiceAuthorizer.js.map +1 -0
  553. package/dist/esm/services/s3/s3BlockPublicAccess.d.ts +50 -0
  554. package/dist/esm/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
  555. package/dist/esm/services/s3/s3BlockPublicAccess.js +299 -0
  556. package/dist/esm/services/s3/s3BlockPublicAccess.js.map +1 -0
  557. package/dist/esm/simulation_engine/contextKeys.d.ts +13 -0
  558. package/dist/esm/simulation_engine/contextKeys.d.ts.map +1 -0
  559. package/dist/esm/simulation_engine/contextKeys.js +55 -0
  560. package/dist/esm/simulation_engine/contextKeys.js.map +1 -0
  561. package/dist/esm/simulation_engine/overallResult.d.ts +13 -0
  562. package/dist/esm/simulation_engine/overallResult.d.ts.map +1 -0
  563. package/dist/esm/simulation_engine/overallResult.js +32 -0
  564. package/dist/esm/simulation_engine/overallResult.js.map +1 -0
  565. package/dist/esm/simulation_engine/policyResources.d.ts +44 -0
  566. package/dist/esm/simulation_engine/policyResources.d.ts.map +1 -0
  567. package/dist/esm/simulation_engine/policyResources.js +117 -0
  568. package/dist/esm/simulation_engine/policyResources.js.map +1 -0
  569. package/dist/esm/simulation_engine/resourceTypes.d.ts +11 -0
  570. package/dist/esm/simulation_engine/resourceTypes.d.ts.map +1 -0
  571. package/dist/esm/simulation_engine/resourceTypes.js +23 -0
  572. package/dist/esm/simulation_engine/resourceTypes.js.map +1 -0
  573. package/dist/esm/simulation_engine/simulation.d.ts +114 -0
  574. package/dist/esm/simulation_engine/simulation.d.ts.map +1 -0
  575. package/dist/esm/simulation_engine/simulation.js +30 -0
  576. package/dist/esm/simulation_engine/simulation.js.map +1 -0
  577. package/dist/esm/simulation_engine/simulationEngine.d.ts +128 -0
  578. package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -0
  579. package/dist/esm/simulation_engine/simulationEngine.js +430 -0
  580. package/dist/esm/simulation_engine/simulationEngine.js.map +1 -0
  581. package/dist/esm/simulation_engine/simulationOptions.d.ts +21 -0
  582. package/dist/esm/simulation_engine/simulationOptions.d.ts.map +1 -0
  583. package/dist/esm/simulation_engine/simulationOptions.js +3 -0
  584. package/dist/esm/simulation_engine/simulationOptions.js.map +1 -0
  585. package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
  586. package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
  587. package/dist/esm/simulation_engine/unsafeSimulationEngine.js +62 -0
  588. package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -0
  589. package/dist/esm/util/resourceStrings.d.ts +19 -0
  590. package/dist/esm/util/resourceStrings.d.ts.map +1 -0
  591. package/dist/esm/util/resourceStrings.js +103 -0
  592. package/dist/esm/util/resourceStrings.js.map +1 -0
  593. package/dist/esm/util.d.ts +90 -0
  594. package/dist/esm/util.d.ts.map +1 -0
  595. package/dist/esm/util.js +341 -0
  596. package/dist/esm/util.js.map +1 -0
  597. package/package.json +119 -0
@@ -0,0 +1,665 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestMatchesConditions = requestMatchesConditions;
4
+ exports.singleConditionMatchesRequest = singleConditionMatchesRequest;
5
+ const requestContext_js_1 = require("../requestContext.js");
6
+ const ArnEquals_js_1 = require("./arn/ArnEquals.js");
7
+ const ArnLike_js_1 = require("./arn/ArnLike.js");
8
+ const ArnNotEquals_js_1 = require("./arn/ArnNotEquals.js");
9
+ const ArnNotLike_js_1 = require("./arn/ArnNotLike.js");
10
+ const BinaryEquals_js_1 = require("./binary/BinaryEquals.js");
11
+ const Bool_js_1 = require("./boolean/Bool.js");
12
+ const DateEquals_js_1 = require("./date/DateEquals.js");
13
+ const DateGreaterThan_js_1 = require("./date/DateGreaterThan.js");
14
+ const DateGreaterThanEquals_js_1 = require("./date/DateGreaterThanEquals.js");
15
+ const DateLessThan_js_1 = require("./date/DateLessThan.js");
16
+ const DateLessThanEquals_js_1 = require("./date/DateLessThanEquals.js");
17
+ const DateNotEquals_js_1 = require("./date/DateNotEquals.js");
18
+ const IpAddress_js_1 = require("./ipaddress/IpAddress.js");
19
+ const NotIpAddress_js_1 = require("./ipaddress/NotIpAddress.js");
20
+ const NumericEquals_js_1 = require("./numeric/NumericEquals.js");
21
+ const NumericGreaterThan_js_1 = require("./numeric/NumericGreaterThan.js");
22
+ const NumericGreaterThanEquals_js_1 = require("./numeric/NumericGreaterThanEquals.js");
23
+ const NumericLessThan_js_1 = require("./numeric/NumericLessThan.js");
24
+ const NumericLessThanEquals_js_1 = require("./numeric/NumericLessThanEquals.js");
25
+ const NumericNotEquals_js_1 = require("./numeric/NumericNotEquals.js");
26
+ const StringEquals_js_1 = require("./string/StringEquals.js");
27
+ const StringEqualsIgnoreCase_js_1 = require("./string/StringEqualsIgnoreCase.js");
28
+ const StringLike_js_1 = require("./string/StringLike.js");
29
+ const StringNotEquals_js_1 = require("./string/StringNotEquals.js");
30
+ const StringNotEqualsIgnoreCase_js_1 = require("./string/StringNotEqualsIgnoreCase.js");
31
+ const StringNotLike_js_1 = require("./string/StringNotLike.js");
32
+ const allOperators = [
33
+ StringEquals_js_1.StringEquals,
34
+ StringNotEquals_js_1.StringNotEquals,
35
+ StringEqualsIgnoreCase_js_1.StringEqualsIgnoreCase,
36
+ StringNotEqualsIgnoreCase_js_1.StringNotEqualsIgnoreCase,
37
+ StringLike_js_1.StringLike,
38
+ StringNotLike_js_1.StringNotLike,
39
+ NumericEquals_js_1.NumericEquals,
40
+ NumericNotEquals_js_1.NumericNotEquals,
41
+ NumericLessThan_js_1.NumericLessThan,
42
+ NumericLessThanEquals_js_1.NumericLessThanEquals,
43
+ NumericGreaterThan_js_1.NumericGreaterThan,
44
+ NumericGreaterThanEquals_js_1.NumericGreaterThanEquals,
45
+ DateEquals_js_1.DateEquals,
46
+ DateNotEquals_js_1.DateNotEquals,
47
+ DateLessThan_js_1.DateLessThan,
48
+ DateLessThanEquals_js_1.DateLessThanEquals,
49
+ DateGreaterThan_js_1.DateGreaterThan,
50
+ DateGreaterThanEquals_js_1.DateGreaterThanEquals,
51
+ Bool_js_1.Bool,
52
+ BinaryEquals_js_1.BinaryEquals,
53
+ IpAddress_js_1.IpAddress,
54
+ NotIpAddress_js_1.NotIpAddress,
55
+ ArnLike_js_1.ArnLike,
56
+ ArnEquals_js_1.ArnEquals,
57
+ ArnNotLike_js_1.ArnNotLike,
58
+ ArnNotEquals_js_1.ArnNotEquals
59
+ ];
60
+ const baseOperations = {};
61
+ for (const operator of allOperators) {
62
+ baseOperations[operator.name.toLowerCase()] = operator;
63
+ }
64
+ /**
65
+ * Evaluate a set of conditions against a request
66
+ *
67
+ * @param request the request to test
68
+ * @param conditions the conditions to test
69
+ * @returns Match if all conditions match, NoMatch if any do not. Also returns all the details of the evaluation
70
+ */
71
+ function requestMatchesConditions(request, conditions, statementType, simulationParameters) {
72
+ const normalizedStatementType = statementType.toLowerCase();
73
+ const results = conditions.map((condition) => {
74
+ const evaluation = evaluateSingleCondition(request, condition, simulationParameters);
75
+ return {
76
+ condition,
77
+ explain: evaluation.explain,
78
+ knowledge: evaluation.knowledge
79
+ };
80
+ });
81
+ const isIgnored = (c) => {
82
+ if (simulationParameters.simulationMode !== 'Discovery') {
83
+ return false;
84
+ }
85
+ const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(c.condition.conditionKey());
86
+ if (c.knowledge.conditionResult !== 'known') {
87
+ if (normalizedStatementType === 'allow') {
88
+ return (!c.explain.matches ||
89
+ allowMatchedOnlyByUnknownMissingKey(c) ||
90
+ allowHasUnknownValueRequirement(c));
91
+ }
92
+ if (normalizedStatementType === 'deny') {
93
+ return true;
94
+ }
95
+ }
96
+ if (constraint.explicitlyConfigured) {
97
+ return false;
98
+ }
99
+ // In Allows we ignore conditions that do not match
100
+ if (normalizedStatementType === 'allow') {
101
+ return !c.explain.matches;
102
+ }
103
+ // In Denies we ignore conditions that do match
104
+ if (normalizedStatementType === 'deny') {
105
+ return c.explain.matches;
106
+ }
107
+ throw new Error(`Unexpected condition explain result in discovery mode, statementType: ${statementType}`);
108
+ };
109
+ const ignored = results.filter((r) => isIgnored(r));
110
+ const nonMatch = results.filter((r) => !isIgnored(r)).some((result) => !result.explain.matches);
111
+ const ignoredPossibleDeny = normalizedStatementType === 'deny' &&
112
+ ignored.some((result) => result.knowledge.conditionResult !== 'known' || result.explain.matches);
113
+ return {
114
+ matches: nonMatch || ignoredPossibleDeny ? 'NoMatch' : 'Match',
115
+ details: {
116
+ conditions: results.length == 0 ? undefined : results.map((r) => r.explain)
117
+ },
118
+ //Ignored conditions only matter if the non ignored fields all match
119
+ ignoredConditions: nonMatch ? undefined : ignoredConditions(results, isIgnored)
120
+ };
121
+ }
122
+ /**
123
+ * Get the list of conditions that were ignored during discovery mode, if any
124
+ *
125
+ * @param conditions the conditions that were evaluated with their explains
126
+ * @param statementType whether the statement is an allow or deny statement
127
+ * @param simulationParameters the general parameters for the simulation
128
+ * @returns an array of ignored conditions, or undefined if there are none
129
+ */
130
+ function ignoredConditions(conditions, isIgnored) {
131
+ const ignoredConditions = conditions.filter(isIgnored);
132
+ if (ignoredConditions.length > 0) {
133
+ return ignoredConditions.map((r) => r.condition);
134
+ }
135
+ return undefined;
136
+ }
137
+ /**
138
+ * Checks to see if a single condition matches a request
139
+ *
140
+ * @param request the request to test
141
+ * @param condition the condition to test
142
+ * @returns the result of evaluating the condition
143
+ */
144
+ function singleConditionMatchesRequest(request, condition, simulationParameters) {
145
+ return evaluateSingleCondition(request, condition, simulationParameters).explain;
146
+ }
147
+ /**
148
+ * Evaluates a single condition and records internal Discovery knowledge.
149
+ *
150
+ * @param request the request to test
151
+ * @param condition the condition to evaluate
152
+ * @param simulationParameters the simulation mode and Discovery constraints
153
+ * @returns the condition explain output plus internal Discovery knowledge
154
+ */
155
+ function evaluateSingleCondition(request, condition, simulationParameters) {
156
+ const key = condition.conditionKey();
157
+ const baseOperation = baseOperations[condition.operation().baseOperator().toLowerCase()];
158
+ const keyExists = request.contextKeyExists(key);
159
+ const keyValue = keyExists ? request.getContextKeyValue(key) : undefined;
160
+ const contextKeyKnowledge = discoveryKnowledgeForConditionKey(simulationParameters, condition.conditionKey(), keyExists);
161
+ if (condition.operation().value().toLowerCase() == 'null' ||
162
+ condition.operation().baseOperator()?.toLowerCase() == 'null') {
163
+ return {
164
+ explain: testNull(condition, keyExists),
165
+ knowledge: conditionKnowledgeForPresenceOnly(contextKeyKnowledge)
166
+ };
167
+ }
168
+ if (condition.operation().setOperator()) {
169
+ const setOperator = condition.operation().setOperator();
170
+ if (setOperator === 'ForAnyValue') {
171
+ return {
172
+ explain: forAnyValueMatch(request, condition, keyValue, baseOperation),
173
+ knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
174
+ };
175
+ }
176
+ else if (setOperator === 'ForAllValues') {
177
+ return {
178
+ explain: forAllValuesMatch(request, condition, keyValue, baseOperation),
179
+ knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
180
+ };
181
+ }
182
+ else {
183
+ throw new Error(`Unknown set operator: ${setOperator}`);
184
+ }
185
+ }
186
+ return {
187
+ explain: singleValueMatch(request, condition, baseOperation, keyValue),
188
+ knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
189
+ };
190
+ }
191
+ /**
192
+ * Determines what request context-key facts are known for a condition key.
193
+ *
194
+ * This function intentionally does not know about operators such as `Null`,
195
+ * `IfExists`, `ForAnyValue`, or `ForAllValues`. It only answers whether the
196
+ * request context definitively establishes key presence and value. Operator
197
+ * evaluators decide how those facts affect the condition result.
198
+ *
199
+ * @param simulationParameters the simulation mode and Discovery constraints
200
+ * @param key the condition context key to classify
201
+ * @param keyExists whether the condition key exists in the request context
202
+ * @returns Discovery knowledge about the condition's context key
203
+ */
204
+ function discoveryKnowledgeForConditionKey(simulationParameters, key, keyExists) {
205
+ if (simulationParameters.simulationMode !== 'Discovery') {
206
+ return requestContextKeyKnowledge(keyExists);
207
+ }
208
+ const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(key);
209
+ if (!constraint.explicitlyConfigured) {
210
+ return keyExists ? requestContextKeyKnowledge(keyExists) : unknownContextKeyKnowledge();
211
+ }
212
+ const contextKeyPresence = constraint.presenceIsKnown
213
+ ? 'known'
214
+ : 'unknown';
215
+ return {
216
+ contextKeyPresence,
217
+ contextKeyValue: contextValueKnowledge(keyExists, contextKeyPresence, constraint.valueIsKnown)
218
+ };
219
+ }
220
+ /**
221
+ * Derives condition-result knowledge for operators that only depend on key presence.
222
+ *
223
+ * `Null` conditions are evaluated by `testNull`; this helper only records that
224
+ * their result is known exactly when key presence is known.
225
+ *
226
+ * @param contextKeyKnowledge known facts about the condition context key
227
+ * @returns condition knowledge for a presence-only operator
228
+ */
229
+ function conditionKnowledgeForPresenceOnly(contextKeyKnowledge) {
230
+ return {
231
+ conditionResult: contextKeyKnowledge.contextKeyPresence,
232
+ ...contextKeyKnowledge
233
+ };
234
+ }
235
+ /**
236
+ * Derives condition-result knowledge for operators whose result may depend on value.
237
+ *
238
+ * Single-value, `IfExists`, `ForAnyValue`, and `ForAllValues` evaluators handle
239
+ * their own missing-key semantics. Once those evaluators run, the result is
240
+ * known when key presence is known and any required concrete values or policy
241
+ * variable references are known.
242
+ *
243
+ * @param request the request being evaluated
244
+ * @param condition the condition whose policy values may contain variables
245
+ * @param simulationParameters the simulation mode and Discovery constraints
246
+ * @param contextKeyKnowledge known facts about the condition context key
247
+ * @returns condition knowledge for a value-capable operator
248
+ */
249
+ function conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge) {
250
+ if (contextKeyKnowledge.contextKeyPresence === 'unknown') {
251
+ return { conditionResult: 'unknown', ...contextKeyKnowledge };
252
+ }
253
+ if (contextKeyKnowledge.contextKeyValue === 'unknown') {
254
+ return { conditionResult: 'unknown', ...contextKeyKnowledge };
255
+ }
256
+ if (conditionValuesReferenceUnknownValue(request, condition, simulationParameters)) {
257
+ return { conditionResult: 'unknown', ...contextKeyKnowledge };
258
+ }
259
+ return { conditionResult: 'known', ...contextKeyKnowledge };
260
+ }
261
+ /**
262
+ * Builds context-key knowledge for normal request-context semantics.
263
+ *
264
+ * Outside explicitly configured Discovery constraints, the request context is
265
+ * authoritative: key presence is known, and the value is known when present.
266
+ *
267
+ * @param keyExists whether the condition key exists in the request context
268
+ * @returns context-key knowledge for ordinary request-context evaluation
269
+ */
270
+ function requestContextKeyKnowledge(keyExists) {
271
+ return {
272
+ contextKeyPresence: 'known',
273
+ contextKeyValue: keyExists ? 'known' : 'not-applicable'
274
+ };
275
+ }
276
+ /**
277
+ * Builds context-key knowledge for an absent unconstrained Discovery key.
278
+ *
279
+ * In Discovery mode, an absent synthetic request-context value does not prove
280
+ * that the real request context lacks an unconstrained key.
281
+ *
282
+ * @returns context-key knowledge with unknown presence and value
283
+ */
284
+ function unknownContextKeyKnowledge() {
285
+ return {
286
+ contextKeyPresence: 'unknown',
287
+ contextKeyValue: 'unknown'
288
+ };
289
+ }
290
+ /**
291
+ * Checks whether an Allow condition should be reported because it matched only
292
+ * by missing-key semantics while the key's presence is unknown.
293
+ *
294
+ * `IfExists` and `ForAllValues` operators can match missing keys. Bare negative
295
+ * operators such as `StringNotEquals` can also match missing keys. When key
296
+ * presence is unknown, those matches are conditional on the real request also
297
+ * lacking the key. `ForAnyValue` missing-key evaluations do not match, so they
298
+ * are reported through the normal non-matching Allow condition path instead.
299
+ *
300
+ * @param conditionAndExplain the evaluated condition and its Discovery knowledge
301
+ * @returns true when the condition should be surfaced as an ignored Allow condition
302
+ */
303
+ function allowMatchedOnlyByUnknownMissingKey(conditionAndExplain) {
304
+ if (conditionAndExplain.explain.matchedBecauseMissing !== true) {
305
+ return false;
306
+ }
307
+ const operation = conditionAndExplain.condition.operation();
308
+ if (operation.isIfExists()) {
309
+ return true;
310
+ }
311
+ if (operation.setOperator() === 'ForAnyValue') {
312
+ return false;
313
+ }
314
+ const baseOperation = baseOperations[operation.baseOperator().toLowerCase()];
315
+ return !!baseOperation?.isNegative;
316
+ }
317
+ /**
318
+ * Checks whether an Allow condition should be reported because Discovery knows
319
+ * the key is present but not enough value-level facts to trust a placeholder match.
320
+ *
321
+ * When `conditionResult` is already unknown, presence is known, and the key has
322
+ * an applicable value, the uncertainty comes from either the condition key's
323
+ * concrete value or a policy variable referenced by the condition value. In both
324
+ * cases a matching placeholder must still be surfaced as an ignored/output
325
+ * requirement.
326
+ *
327
+ * @param conditionAndExplain the evaluated condition and its Discovery knowledge
328
+ * @returns true when a matched Allow condition still has an unknown value requirement
329
+ */
330
+ function allowHasUnknownValueRequirement(conditionAndExplain) {
331
+ return (conditionAndExplain.knowledge.contextKeyPresence === 'known' &&
332
+ conditionAndExplain.knowledge.contextKeyValue !== 'not-applicable');
333
+ }
334
+ /**
335
+ * Determines the value-knowledge dimension for a condition key.
336
+ *
337
+ * If presence is unknown, the value is also unknown because the key might not be
338
+ * present. If presence is known and the key is absent, the value is not
339
+ * applicable rather than unknown.
340
+ *
341
+ * @param keyExists whether the condition key exists in the request context
342
+ * @param contextKeyPresence whether the condition key's presence is known
343
+ * @param configuredValueIsKnown whether constraints say a present value is authoritative
344
+ * @returns the value-knowledge dimension for the condition key
345
+ */
346
+ function contextValueKnowledge(keyExists, contextKeyPresence, configuredValueIsKnown) {
347
+ // If the presence is unknown, the value must be unknown by definition
348
+ if (contextKeyPresence === 'unknown') {
349
+ return 'unknown';
350
+ }
351
+ // If the presence is known but the key does not exist, the value doesn't matter
352
+ if (!keyExists) {
353
+ return 'not-applicable';
354
+ }
355
+ // If the presence is known and the key exists, use discovery constraint
356
+ return configuredValueIsKnown ? 'known' : 'unknown';
357
+ }
358
+ /**
359
+ * Checks whether any policy condition value references an unknown context value.
360
+ *
361
+ * For example, a known `s3:prefix` condition can still be unknown if the policy
362
+ * value is `${aws:SourceAccount}` and `aws:SourceAccount` has unknown value in
363
+ * Discovery mode.
364
+ *
365
+ * @param request the request being evaluated
366
+ * @param condition the condition whose policy values may contain variables
367
+ * @param simulationParameters the simulation mode and Discovery constraints
368
+ * @returns true if any referenced context variable has unknown presence or value
369
+ */
370
+ function conditionValuesReferenceUnknownValue(request, condition, simulationParameters) {
371
+ for (const value of condition.conditionValues()) {
372
+ for (const variable of contextVariablesInString(value)) {
373
+ const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(variable);
374
+ if (!constraint.explicitlyConfigured) {
375
+ continue;
376
+ }
377
+ if (!request.contextKeyExists(variable)) {
378
+ if (!constraint.presenceIsKnown) {
379
+ return true;
380
+ }
381
+ continue;
382
+ }
383
+ if (!constraint.valueIsKnown) {
384
+ return true;
385
+ }
386
+ }
387
+ }
388
+ return false;
389
+ }
390
+ /**
391
+ * Extracts context variable names referenced by `${...}` policy variables.
392
+ *
393
+ * Special IAM escapes such as `${*}`, `${?}`, and `${$}` are ignored because
394
+ * they are literal substitutions rather than request context variables.
395
+ *
396
+ * @param value the raw policy value to inspect
397
+ * @returns context variable names referenced by the policy value
398
+ */
399
+ function contextVariablesInString(value) {
400
+ const variables = [];
401
+ for (const match of value.matchAll(/\$\{(.*?)\}/g)) {
402
+ const variable = match[1]?.split(', ')[0]?.trim();
403
+ if (variable && variable !== '*' && variable !== '?' && variable !== '$') {
404
+ variables.push(variable);
405
+ }
406
+ }
407
+ return variables;
408
+ }
409
+ /**
410
+ * Tests a condition with a null operator
411
+ *
412
+ * @param condition the condition to test
413
+ * @param keyExists whether the key exists in the request
414
+ * @returns the result of evaluating the null operator
415
+ */
416
+ function testNull(condition, keyExists) {
417
+ const goalValue = keyExists ? 'false' : 'true';
418
+ const conditionValues = condition.conditionValues().map((value) => {
419
+ return {
420
+ value,
421
+ matches: value.toLowerCase() === goalValue
422
+ };
423
+ });
424
+ return {
425
+ operator: condition.operation().value(),
426
+ conditionKeyValue: condition.conditionKey(),
427
+ values: condition.valueIsArray() ? conditionValues : conditionValues[0],
428
+ matches: conditionValues.some((value) => value.matches)
429
+ };
430
+ }
431
+ function singleValueMatch(request, condition, baseOperation, keyValue) {
432
+ const isNotOperator = condition.operation().baseOperator().toLowerCase().includes('not');
433
+ if (condition.operation().isIfExists() || isNotOperator) {
434
+ //Check if it exists, return true if it doesn't
435
+ //Double check what happens here if the key is not a valid key or is of the wrong type
436
+ if (!keyValue) {
437
+ const valueExplains = condition.conditionValues().map((value) => ({
438
+ value,
439
+ matches: true
440
+ }));
441
+ return {
442
+ operator: condition.operation().value(),
443
+ conditionKeyValue: condition.conditionKey(),
444
+ values: condition.valueIsArray() ? valueExplains : valueExplains[0],
445
+ matches: true,
446
+ matchedBecauseMissing: true,
447
+ resolvedConditionKeyValue: keyValue
448
+ };
449
+ }
450
+ }
451
+ if (!keyValue || !keyValue.isStringValue()) {
452
+ //Set operator is required for a multi-value key
453
+ //Confirmed this at re:Inforce 2025 IAM431.
454
+ const valueExplains = condition.conditionValues().map((value) => ({
455
+ value,
456
+ matches: false
457
+ }));
458
+ return {
459
+ operator: condition.operation().value(),
460
+ conditionKeyValue: condition.conditionKey(),
461
+ values: condition.valueIsArray() ? valueExplains : valueExplains[0],
462
+ matches: false,
463
+ failedBecauseMissing: !keyValue,
464
+ failedBecauseArray: keyValue?.isArrayValue()
465
+ };
466
+ }
467
+ if (!baseOperation) {
468
+ const valueExplains = condition.conditionValues().map((value) => ({
469
+ value,
470
+ matches: false
471
+ }));
472
+ return {
473
+ operator: condition.operation().value(),
474
+ conditionKeyValue: condition.conditionKey(),
475
+ values: condition.valueIsArray() ? valueExplains : valueExplains[0],
476
+ matches: false,
477
+ missingOperator: true
478
+ };
479
+ }
480
+ const { matches, explains } = baseOperation.matches(request, keyValue.value, condition.conditionValues());
481
+ return {
482
+ matches,
483
+ operator: condition.operation().value(),
484
+ conditionKeyValue: condition.conditionKey(),
485
+ values: condition.valueIsArray() ? explains : explains[0],
486
+ resolvedConditionKeyValue: keyValue.value
487
+ };
488
+ }
489
+ /**
490
+ * Tests a condition with a ForAllValues set operator
491
+ *
492
+ * @param request the request to test
493
+ * @param condition the condition with ForAllValues set operator
494
+ * @param keyExists whether the key exists in the request
495
+ * @param keyValue the value of the key in the request
496
+ * @param baseOperation the base operation to test the key against
497
+ * @returns the result of evaluating the ForAllValues set operator
498
+ */
499
+ function forAllValuesMatch(request, condition, keyValue, baseOperation) {
500
+ const matchingValueExplains = condition
501
+ .conditionValues()
502
+ .map((value) => ({
503
+ value,
504
+ matches: true
505
+ }));
506
+ const notMatchingValueExplains = condition
507
+ .conditionValues()
508
+ .map((value) => ({
509
+ value,
510
+ matches: false
511
+ }));
512
+ if (!keyValue) {
513
+ return {
514
+ operator: condition.operation().value(),
515
+ conditionKeyValue: condition.conditionKey(),
516
+ values: matchingValueExplains,
517
+ matches: true,
518
+ matchedBecauseMissing: true
519
+ };
520
+ }
521
+ // If the key only has a single value, convert it to an array to process
522
+ if (keyValue.isStringValue()) {
523
+ keyValue = new requestContext_js_1.ContextKeyImpl(keyValue.name, [keyValue.value]);
524
+ }
525
+ if (!keyValue.isArrayValue()) {
526
+ throw new Error('Key value is not an array, this is a bug.');
527
+ }
528
+ if (!baseOperation) {
529
+ return {
530
+ operator: condition.operation().value(),
531
+ conditionKeyValue: condition.conditionKey(),
532
+ values: notMatchingValueExplains,
533
+ matches: false,
534
+ missingOperator: true
535
+ };
536
+ }
537
+ const valueExplains = keyValue.values.map((value) => {
538
+ const { matches, explains } = baseOperation.matches(request, value, condition.conditionValues());
539
+ return {
540
+ requestValue: value,
541
+ matches,
542
+ explains
543
+ };
544
+ });
545
+ const anyNonMatches = valueExplains.some((valueExplain) => !valueExplain.matches);
546
+ const overallMatch = !anyNonMatches;
547
+ const unmatchedValues = [];
548
+ const explains = {};
549
+ for (const valueExplain of valueExplains) {
550
+ if (!baseOperation.isNegative && !valueExplain.matches) {
551
+ unmatchedValues.push(valueExplain.requestValue);
552
+ }
553
+ else if (baseOperation.isNegative && valueExplain.matches) {
554
+ unmatchedValues.push(valueExplain.requestValue);
555
+ }
556
+ for (const explain of valueExplain.explains) {
557
+ let theExplain = explains[explain.value];
558
+ if (!theExplain) {
559
+ explains[explain.value] = {
560
+ value: explain.value,
561
+ matches: overallMatch
562
+ };
563
+ theExplain = explains[explain.value];
564
+ }
565
+ if (explain.matches && !baseOperation.isNegative) {
566
+ theExplain.matchingValues = theExplain.matchingValues || [];
567
+ theExplain.matchingValues.push(valueExplain.requestValue);
568
+ }
569
+ else if (!explain.matches && baseOperation.isNegative) {
570
+ theExplain.negativeMatchingValues = theExplain.negativeMatchingValues || [];
571
+ theExplain.negativeMatchingValues.push(valueExplain.requestValue);
572
+ }
573
+ }
574
+ }
575
+ return {
576
+ operator: condition.operation().value(),
577
+ conditionKeyValue: condition.conditionKey(),
578
+ values: Object.values(explains),
579
+ matches: overallMatch,
580
+ unmatchedValues
581
+ };
582
+ }
583
+ /**
584
+ * Test a condition with a ForAnyValue set operator
585
+ *
586
+ * @param request the request to test
587
+ * @param condition the condition with ForAnyValue set operator
588
+ * @param keyExists whether the key exists in the request
589
+ * @param keyValue the value of the key in the request
590
+ * @param baseOperation the base operation to test the key against
591
+ * @returns the result of evaluating the ForAnyValue set operator
592
+ */
593
+ function forAnyValueMatch(request, condition, keyValue, baseOperation) {
594
+ const failedValueExplains = condition.conditionValues().map((value) => ({
595
+ value,
596
+ matches: false
597
+ }));
598
+ if (!keyValue) {
599
+ return {
600
+ operator: condition.operation().value(),
601
+ conditionKeyValue: condition.conditionKey(),
602
+ values: failedValueExplains,
603
+ matches: false,
604
+ failedBecauseMissing: true
605
+ };
606
+ // return 'NoMatch'
607
+ }
608
+ // If the key only has a single value, convert it to an array to process
609
+ if (keyValue.isStringValue()) {
610
+ keyValue = new requestContext_js_1.ContextKeyImpl(keyValue.name, [keyValue.value]);
611
+ }
612
+ if (!keyValue.isArrayValue()) {
613
+ throw new Error('Key value is not an array, this is a bug.');
614
+ }
615
+ if (!baseOperation) {
616
+ return {
617
+ operator: condition.operation().value(),
618
+ conditionKeyValue: condition.conditionKey(),
619
+ values: failedValueExplains,
620
+ matches: false,
621
+ missingOperator: true
622
+ };
623
+ }
624
+ const valueExplains = keyValue.values.map((value) => {
625
+ const { matches, explains } = baseOperation.matches(request, value, condition.conditionValues());
626
+ return {
627
+ requestValue: value,
628
+ matches,
629
+ explains
630
+ };
631
+ });
632
+ const overallMatch = valueExplains.some((valueExplain) => valueExplain.matches);
633
+ const unmatchedValues = [];
634
+ const explains = {};
635
+ for (const valueExplain of valueExplains) {
636
+ if (!baseOperation.isNegative && !valueExplain.matches) {
637
+ unmatchedValues.push(valueExplain.requestValue);
638
+ }
639
+ else if (baseOperation.isNegative && valueExplain.matches) {
640
+ unmatchedValues.push(valueExplain.requestValue);
641
+ }
642
+ for (const explain of valueExplain.explains) {
643
+ let theExplain = explains[explain.value];
644
+ if (!theExplain) {
645
+ explains[explain.value] = {
646
+ value: explain.value,
647
+ matches: overallMatch
648
+ };
649
+ theExplain = explains[explain.value];
650
+ }
651
+ if (explain.matches) {
652
+ theExplain.matchingValues = theExplain.matchingValues || [];
653
+ theExplain.matchingValues.push(valueExplain.requestValue);
654
+ }
655
+ }
656
+ }
657
+ return {
658
+ operator: condition.operation().value(),
659
+ conditionKeyValue: condition.conditionKey(),
660
+ values: Object.values(explains),
661
+ matches: overallMatch,
662
+ unmatchedValues
663
+ };
664
+ }
665
+ //# sourceMappingURL=condition.js.map