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