@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,46 @@
1
+ import {} from '@actsecurity/iam-policy';
2
+ import {} from './condition/condition.js';
3
+ import {} from './explain/statementExplain.js';
4
+ import {} from './principal/principal.js';
5
+ /**
6
+ * Checks if a statement is an identity statement that allows the request.
7
+ *
8
+ * @param statement The statement to check.
9
+ * @returns Whether the statement is an identity statement that allows the request.
10
+ */
11
+ export function identityStatementAllows(statement) {
12
+ if (statement.resourceMatch &&
13
+ statement.actionMatch &&
14
+ statement.conditionMatch === 'Match' &&
15
+ statement.statement.effect() === 'Allow') {
16
+ return true;
17
+ }
18
+ return false;
19
+ }
20
+ export function identityStatementExplicitDeny(statement) {
21
+ if (statement.resourceMatch &&
22
+ statement.actionMatch &&
23
+ statement.conditionMatch === 'Match' &&
24
+ statement.statement.effect() === 'Deny') {
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+ export function statementMatches(analysis) {
30
+ return (analysis.resourceMatch &&
31
+ analysis.actionMatch &&
32
+ analysis.conditionMatch === 'Match' &&
33
+ ['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
34
+ }
35
+ /**
36
+ * Determines whether ignored conditions are decisive for a statement and should be reported.
37
+ *
38
+ * @param analysis the analysis of the statement
39
+ * @returns true if the ignored conditions are decisive, false otherwise
40
+ */
41
+ export function reportIgnoredConditions(analysis) {
42
+ return (analysis.resourceMatch &&
43
+ analysis.actionMatch &&
44
+ ['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
45
+ }
46
+ //# sourceMappingURL=StatementAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatementAnalysis.js","sourceRoot":"","sources":["../../src/StatementAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAA6B,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAyB,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAA6B,MAAM,0BAA0B,CAAA;AAqDpE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAA4B;IAClE,IACE,SAAS,CAAC,aAAa;QACvB,SAAS,CAAC,WAAW;QACrB,SAAS,CAAC,cAAc,KAAK,OAAO;QACpC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,OAAO,EACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,SAA4B;IACxE,IACE,SAAS,CAAC,aAAa;QACvB,SAAS,CAAC,WAAW;QACrB,SAAS,CAAC,cAAc,KAAK,OAAO;QACpC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,MAAM,EACvC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAGC;IAED,OAAO,CACL,QAAQ,CAAC,aAAa;QACtB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,cAAc,KAAK,OAAO;QACnC,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAC7E,QAAQ,CAAC,cAAc,CACxB,CACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAqF;IAErF,OAAO,CACL,QAAQ,CAAC,aAAa;QACtB,QAAQ,CAAC,WAAW;QACpB,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAC7E,QAAQ,CAAC,cAAc,CACxB,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type Action, type Statement } from '@actsecurity/iam-policy';
2
+ import { type ActionExplain, type StatementExplain } from '../explain/statementExplain.js';
3
+ import { type AwsRequest } from '../request/request.js';
4
+ /**
5
+ * Check if a request matches the Action or NotAction elements of a statement.
6
+ *
7
+ * @param request the request to check
8
+ * @param statement the statement to check against
9
+ * @returns true if the request matches the Action or NotAction in the statement, false otherwise
10
+ */
11
+ export declare function requestMatchesStatementActions(request: AwsRequest, statement: Statement): {
12
+ matches: boolean;
13
+ details: Pick<StatementExplain, 'actions' | 'notActions'>;
14
+ };
15
+ /**
16
+ * Check if a request matches a set of actions.
17
+ *
18
+ * @param request the request to check
19
+ * @param actions the actions to check against
20
+ * @returns true if the request matches any of the actions, false otherwise
21
+ */
22
+ export declare function requestMatchesActions(request: AwsRequest, actions: Action[]): {
23
+ matches: boolean;
24
+ explains: ActionExplain[];
25
+ };
26
+ /**
27
+ * Check if a request does not match a set of actions.
28
+ *
29
+ * @param request the request to check
30
+ * @param actions the actions to check against
31
+ * @returns true if the request does not match any of the actions, false if the request matches any of the actions
32
+ */
33
+ export declare function requestMatchesNotActions(request: AwsRequest, actions: Action[]): {
34
+ matches: boolean;
35
+ explains: ActionExplain[];
36
+ };
37
+ //# sourceMappingURL=action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/action/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAC1F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,SAAS,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,YAAY,CAAC,CAAA;CAAE,CAejF;AAgBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAIjD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CASjD"}
@@ -0,0 +1,100 @@
1
+ import {} from '@actsecurity/iam-policy';
2
+ import {} from '../explain/statementExplain.js';
3
+ import {} from '../request/request.js';
4
+ const whitespaceRegex = /\s/;
5
+ /**
6
+ * Check if a request matches the Action or NotAction elements of a statement.
7
+ *
8
+ * @param request the request to check
9
+ * @param statement the statement to check against
10
+ * @returns true if the request matches the Action or NotAction in the statement, false otherwise
11
+ */
12
+ export function requestMatchesStatementActions(request, statement) {
13
+ if (statement.isActionStatement()) {
14
+ const { matches, explains } = requestMatchesActions(request, statement.actions());
15
+ if (!statement.actionIsArray()) {
16
+ return { matches, details: { actions: explains[0] } };
17
+ }
18
+ return { matches, details: { actions: explains } };
19
+ }
20
+ else if (statement.isNotActionStatement()) {
21
+ const { matches, explains } = requestMatchesNotActions(request, statement.notActions());
22
+ if (!statement.notActionIsArray()) {
23
+ return { matches, details: { notActions: explains[0] } };
24
+ }
25
+ return { matches, details: { notActions: explains } };
26
+ }
27
+ throw new Error('Statement has neither Actions nor NotActions');
28
+ }
29
+ /**
30
+ * Convert an action action (the part after the colon) to a regular expression.
31
+ *
32
+ * @param action the action to convert to a regular expression
33
+ * @returns a regular that replaces any wildcards in the action with the appropriate regular expression.
34
+ */
35
+ function convertActionToRegex(action) {
36
+ if (action.indexOf(':') != -1) {
37
+ throw new Error('Action should not contain a colon');
38
+ }
39
+ const pattern = '^' + action.replace(/\?/g, '.').replace(/\*/g, '.*?') + '$';
40
+ return new RegExp(pattern, 'i');
41
+ }
42
+ /**
43
+ * Check if a request matches a set of actions.
44
+ *
45
+ * @param request the request to check
46
+ * @param actions the actions to check against
47
+ * @returns true if the request matches any of the actions, false otherwise
48
+ */
49
+ export function requestMatchesActions(request, actions) {
50
+ const explains = actions.map((action) => requestMatchesSingleAction(request, action));
51
+ const matches = explains.some((explain) => explain.matches);
52
+ return { matches, explains };
53
+ }
54
+ /**
55
+ * Check if a request does not match a set of actions.
56
+ *
57
+ * @param request the request to check
58
+ * @param actions the actions to check against
59
+ * @returns true if the request does not match any of the actions, false if the request matches any of the actions
60
+ */
61
+ export function requestMatchesNotActions(request, actions) {
62
+ const explains = actions.map((action) => {
63
+ const explain = requestMatchesSingleAction(request, action);
64
+ explain.matches = !explain.matches;
65
+ return explain;
66
+ });
67
+ const matches = !explains.some((explain) => !explain.matches);
68
+ return { matches, explains };
69
+ }
70
+ function requestMatchesSingleAction(request, action) {
71
+ if (action.isWildcardAction()) {
72
+ return {
73
+ action: action.value(),
74
+ matches: true
75
+ };
76
+ }
77
+ else if (action.isServiceAction()) {
78
+ const actionPart = action.action();
79
+ if (actionPart.length === 0 || whitespaceRegex.test(actionPart)) {
80
+ return {
81
+ action: action.value(),
82
+ matches: false
83
+ };
84
+ }
85
+ if (request.action.service() != action.service()) {
86
+ return {
87
+ action: action.value(),
88
+ matches: false
89
+ };
90
+ }
91
+ const actionRegex = convertActionToRegex(actionPart);
92
+ const matches = actionRegex.test(request.action.action());
93
+ return {
94
+ action: action.value(),
95
+ matches
96
+ };
97
+ }
98
+ throw new Error('Unknown action type');
99
+ }
100
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/action/action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type Condition } from '@actsecurity/iam-policy';
2
+ import { type AllowedConditionExpression, type AllowedConditionSource, type IdentityAnalysis, type RcpAnalysis, type ResourceAnalysis, type ScpAnalysis } from '../evaluate.js';
3
+ import { type StatementAnalysis } from '../StatementAnalysis.js';
4
+ /**
5
+ * Convert a statement's ignored allow-side conditions to an expression.
6
+ *
7
+ * @param statement the statement analysis to convert
8
+ * @param policyType the policy family containing the statement
9
+ * @param orgIdentifier the organization identifier for control-policy statements
10
+ * @returns an expression for the statement's ignored conditions
11
+ */
12
+ export declare function allowStatementExpression(statement: StatementAnalysis, policyType: AllowedConditionSource['policyType'], orgIdentifier?: string): AllowedConditionExpression;
13
+ /**
14
+ * Convert a statement's ignored deny-side conditions to an expression that avoids the deny.
15
+ *
16
+ * @param statement the statement analysis to convert
17
+ * @param policyType the policy family containing the statement
18
+ * @param orgIdentifier the organization identifier for control-policy statements
19
+ * @returns an expression that must hold to avoid the deny
20
+ */
21
+ export declare function denyStatementEscapeExpression(statement: StatementAnalysis, policyType: AllowedConditionSource['policyType'], orgIdentifier?: string): AllowedConditionExpression;
22
+ /**
23
+ * Invert a single IAM condition into an allowed-condition expression.
24
+ *
25
+ * @param condition the condition to invert
26
+ * @param source source metadata for the condition
27
+ * @returns the expression that satisfies the logical complement of the condition
28
+ */
29
+ export declare function invertCondition(condition: Condition, source: AllowedConditionSource): AllowedConditionExpression;
30
+ /**
31
+ * Combine condition expressions with AND semantics and simplify identity/absorbing values.
32
+ *
33
+ * @param expressions the expressions to combine
34
+ * @returns a simplified expression
35
+ */
36
+ export declare function and(expressions: AllowedConditionExpression[]): AllowedConditionExpression;
37
+ /**
38
+ * Combine condition expressions with OR semantics and simplify identity/absorbing values.
39
+ *
40
+ * @param expressions the expressions to combine
41
+ * @returns a simplified expression
42
+ */
43
+ export declare function or(expressions: AllowedConditionExpression[]): AllowedConditionExpression;
44
+ export declare function allowedConditionOutput(expression: AllowedConditionExpression, simulationMode: string, result: string): AllowedConditionExpression | undefined;
45
+ export declare function sessionPolicyExpression(analysis: IdentityAnalysis | undefined, sessionPolicyPresent: boolean): AllowedConditionExpression;
46
+ export declare function identityPolicyExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
47
+ export declare function permissionBoundaryExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
48
+ export declare function endpointPolicyExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
49
+ export declare function resourceAllowStatementsExpression(statements: StatementAnalysis[]): AllowedConditionExpression;
50
+ export declare function allDenyEscapeExpressions(input: {
51
+ sessionAnalysis?: IdentityAnalysis;
52
+ scpAnalysis?: ScpAnalysis;
53
+ rcpAnalysis?: RcpAnalysis;
54
+ identityAnalysis?: IdentityAnalysis;
55
+ resourceAnalysis?: ResourceAnalysis;
56
+ permissionBoundaryAnalysis?: IdentityAnalysis;
57
+ endpointAnalysis?: IdentityAnalysis;
58
+ }): AllowedConditionExpression[];
59
+ export declare function always(): AllowedConditionExpression;
60
+ export declare function never(reason: 'explicitDenyWithoutConditions' | 'noApplicableAllow'): AllowedConditionExpression;
61
+ //# sourceMappingURL=allowedConditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowedConditions.d.ts","sourceRoot":"","sources":["../../../src/analysis/allowedConditions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE3B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,EAChD,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CAE5B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,EAChD,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CAO5B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,sBAAsB,GAC7B,0BAA0B,CAK5B;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,WAAW,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAmBzF;AAED;;;;;GAKG;AACH,wBAAgB,EAAE,CAAC,WAAW,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAmBxF;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,0BAA0B,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,0BAA0B,GAAG,SAAS,CAKxC;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,oBAAoB,EAAE,OAAO,GAC5B,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,iBAAiB,EAAE,GAC9B,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,eAAe,CAAC,EAAE,gBAAgB,CAAA;IAClC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,0BAA0B,CAAC,EAAE,gBAAgB,CAAA;IAC7C,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC,GAAG,0BAA0B,EAAE,CAU/B;AA+VD,wBAAgB,MAAM,IAAI,0BAA0B,CAEnD;AAED,wBAAgB,KAAK,CACnB,MAAM,EAAE,+BAA+B,GAAG,mBAAmB,GAC5D,0BAA0B,CAE5B"}
@@ -0,0 +1,382 @@
1
+ import {} from '@actsecurity/iam-policy';
2
+ import {} from '../evaluate.js';
3
+ import {} from '../StatementAnalysis.js';
4
+ /**
5
+ * Convert a statement's ignored allow-side conditions to an expression.
6
+ *
7
+ * @param statement the statement analysis to convert
8
+ * @param policyType the policy family containing the statement
9
+ * @param orgIdentifier the organization identifier for control-policy statements
10
+ * @returns an expression for the statement's ignored conditions
11
+ */
12
+ export function allowStatementExpression(statement, policyType, orgIdentifier) {
13
+ return statementConditionExpression(statement, policyType, false, orgIdentifier);
14
+ }
15
+ /**
16
+ * Convert a statement's ignored deny-side conditions to an expression that avoids the deny.
17
+ *
18
+ * @param statement the statement analysis to convert
19
+ * @param policyType the policy family containing the statement
20
+ * @param orgIdentifier the organization identifier for control-policy statements
21
+ * @returns an expression that must hold to avoid the deny
22
+ */
23
+ export function denyStatementEscapeExpression(statement, policyType, orgIdentifier) {
24
+ if (!statement.ignoredConditions || statement.ignoredConditions.length === 0) {
25
+ return never('explicitDenyWithoutConditions');
26
+ }
27
+ const source = sourceForStatement(statement, policyType, orgIdentifier);
28
+ return or(statement.ignoredConditions.map((condition) => invertCondition(condition, source)));
29
+ }
30
+ /**
31
+ * Invert a single IAM condition into an allowed-condition expression.
32
+ *
33
+ * @param condition the condition to invert
34
+ * @param source source metadata for the condition
35
+ * @returns the expression that satisfies the logical complement of the condition
36
+ */
37
+ export function invertCondition(condition, source) {
38
+ const op = condition.operation().value();
39
+ const key = condition.conditionKey();
40
+ const values = condition.conditionValues();
41
+ return invertConditionParts(op, key, values, source);
42
+ }
43
+ /**
44
+ * Combine condition expressions with AND semantics and simplify identity/absorbing values.
45
+ *
46
+ * @param expressions the expressions to combine
47
+ * @returns a simplified expression
48
+ */
49
+ export function and(expressions) {
50
+ const children = expressions.map((expr) => simplify(expr));
51
+ if (children.some((expr) => expr.conditionType === 'never')) {
52
+ return children.find((expr) => expr.conditionType === 'never');
53
+ }
54
+ const withoutAlways = dedupe(children
55
+ .filter((expr) => expr.conditionType !== 'always')
56
+ .flatMap((expr) => expr.conditionType === 'group' && expr.operator === 'and' ? expr.conditions : [expr]));
57
+ if (withoutAlways.length === 0) {
58
+ return always();
59
+ }
60
+ if (withoutAlways.length === 1) {
61
+ return withoutAlways[0];
62
+ }
63
+ return { conditionType: 'group', operator: 'and', conditions: withoutAlways };
64
+ }
65
+ /**
66
+ * Combine condition expressions with OR semantics and simplify identity/absorbing values.
67
+ *
68
+ * @param expressions the expressions to combine
69
+ * @returns a simplified expression
70
+ */
71
+ export function or(expressions) {
72
+ const children = expressions.map((expr) => simplify(expr));
73
+ if (children.some((expr) => expr.conditionType === 'always')) {
74
+ return always();
75
+ }
76
+ const withoutNever = dedupe(children
77
+ .filter((expr) => expr.conditionType !== 'never')
78
+ .flatMap((expr) => expr.conditionType === 'group' && expr.operator === 'or' ? expr.conditions : [expr]));
79
+ if (withoutNever.length === 0) {
80
+ return never('noApplicableAllow');
81
+ }
82
+ if (withoutNever.length === 1) {
83
+ return withoutNever[0];
84
+ }
85
+ return { conditionType: 'group', operator: 'or', conditions: withoutNever };
86
+ }
87
+ export function allowedConditionOutput(expression, simulationMode, result) {
88
+ if (simulationMode !== 'Discovery' || result !== 'Allowed') {
89
+ return undefined;
90
+ }
91
+ return publicExpression(expression);
92
+ }
93
+ export function sessionPolicyExpression(analysis, sessionPolicyPresent) {
94
+ return sessionPolicyPresent ? identityAllowExpression(analysis, 'session') : always();
95
+ }
96
+ export function identityPolicyExpression(analysis) {
97
+ return identityAllowExpression(analysis, 'identity');
98
+ }
99
+ export function permissionBoundaryExpression(analysis) {
100
+ return identityAllowExpression(analysis, 'permissionBoundary');
101
+ }
102
+ export function endpointPolicyExpression(analysis) {
103
+ return identityAllowExpression(analysis, 'endpointPolicy');
104
+ }
105
+ export function resourceAllowStatementsExpression(statements) {
106
+ return allowStatementsExpression(statements, 'resource');
107
+ }
108
+ export function allDenyEscapeExpressions(input) {
109
+ return [
110
+ ...denyEscapeExpressions(input.sessionAnalysis, 'session'),
111
+ ...controlPolicyDenyEscapeExpressions(input.scpAnalysis, 'scp'),
112
+ ...controlPolicyDenyEscapeExpressions(input.rcpAnalysis, 'rcp'),
113
+ ...denyEscapeExpressions(input.identityAnalysis, 'identity'),
114
+ ...resourceDenyEscapeExpressions(input.resourceAnalysis),
115
+ ...denyEscapeExpressions(input.permissionBoundaryAnalysis, 'permissionBoundary'),
116
+ ...denyEscapeExpressions(input.endpointAnalysis, 'endpointPolicy')
117
+ ];
118
+ }
119
+ function identityAllowExpression(analysis, policyType) {
120
+ if (!analysis || analysis.result !== 'Allowed') {
121
+ return never('noApplicableAllow');
122
+ }
123
+ return allowStatementsExpression(analysis.allowStatements, policyType);
124
+ }
125
+ function allowStatementsExpression(statements, policyType) {
126
+ if (statements.length === 0) {
127
+ return never('noApplicableAllow');
128
+ }
129
+ return or(statements.map((statement) => allowStatementExpression(statement, policyType)));
130
+ }
131
+ function denyEscapeExpressions(analysis, policyType) {
132
+ return denyStatementsThatNeedEscapes(analysis).map((statement) => denyStatementEscapeExpression(statement, policyType));
133
+ }
134
+ function resourceDenyEscapeExpressions(analysis) {
135
+ return denyStatementsThatNeedEscapes(analysis).map((statement) => denyStatementEscapeExpression(statement, 'resource'));
136
+ }
137
+ function controlPolicyDenyEscapeExpressions(analysis, policyType) {
138
+ return (analysis?.ouAnalysis ?? []).flatMap((ou) => denyStatementsThatNeedEscapes(ou).map((statement) => denyStatementEscapeExpression(statement, policyType, ou.orgIdentifier)));
139
+ }
140
+ function denyStatementsThatNeedEscapes(analysis) {
141
+ return [...(analysis?.denyStatements ?? []), ...(analysis?.unmatchedStatements ?? [])].filter((statement) => statement.statement.isDeny() && (statement.ignoredConditions?.length ?? 0) > 0);
142
+ }
143
+ function statementConditionExpression(statement, policyType, inverted, orgIdentifier) {
144
+ const source = sourceForStatement(statement, policyType, orgIdentifier);
145
+ const conditions = statement.ignoredConditions ?? [];
146
+ const conditionExpressions = conditions.map((condition) => conditionLeaf(condition, source, inverted));
147
+ const sessionExpression = sessionNameExpression(statement, source);
148
+ if (sessionExpression) {
149
+ conditionExpressions.push(sessionExpression);
150
+ }
151
+ return and(conditionExpressions);
152
+ }
153
+ function sourceForStatement(statement, policyType, orgIdentifier) {
154
+ const sid = statement.statement.sid();
155
+ return {
156
+ policyType,
157
+ effect: statement.statement.effect(),
158
+ policyIdentifier: statement.policyId,
159
+ ...(orgIdentifier ? { orgIdentifier } : {}),
160
+ ...(sid ? { statementId: sid } : {}),
161
+ statementIndex: statement.statement.index()
162
+ };
163
+ }
164
+ function conditionLeaf(condition, source, inverted) {
165
+ return {
166
+ conditionType: 'condition',
167
+ op: condition.operation().value(),
168
+ key: condition.conditionKey(),
169
+ values: condition.conditionValues(),
170
+ sources: [source],
171
+ ...(inverted ? { inverted: true } : {})
172
+ };
173
+ }
174
+ function sessionNameExpression(statement, source) {
175
+ if (!statement.ignoredRoleSessionName) {
176
+ return undefined;
177
+ }
178
+ const names = principalExplains(statement)
179
+ .map((explain) => sessionNameFromAssumedRoleArn(explain.principal))
180
+ .filter((name) => name !== undefined);
181
+ if (names.length === 0) {
182
+ return undefined;
183
+ }
184
+ return {
185
+ conditionType: 'sessionName',
186
+ sessionName: Array.from(new Set(names)),
187
+ sources: [source]
188
+ };
189
+ }
190
+ function principalExplains(statement) {
191
+ const principals = statement.explain.principals ?? statement.explain.notPrincipals;
192
+ if (!principals) {
193
+ return [];
194
+ }
195
+ return Array.isArray(principals) ? principals : [principals];
196
+ }
197
+ function sessionNameFromAssumedRoleArn(arn) {
198
+ const resource = arn.split(':').at(-1);
199
+ if (!resource?.startsWith('assumed-role/')) {
200
+ return undefined;
201
+ }
202
+ return resource.split('/').at(2);
203
+ }
204
+ function invertConditionParts(op, key, values, source) {
205
+ const setOperator = conditionSetOperator(op);
206
+ const hasIfExists = isIfExists(op);
207
+ const base = conditionBaseOperator(op);
208
+ if (hasIfExists) {
209
+ const withoutIfExists = operatorName(base, setOperator, false);
210
+ const invertedBase = invertConditionParts(withoutIfExists, key, values, source);
211
+ if (negativeConditionOperatorsMatchMissingKeys(base)) {
212
+ return invertedBase;
213
+ }
214
+ return and([leaf('Null', key, ['false'], source), invertedBase]);
215
+ }
216
+ if (base.toLowerCase() === 'null' || base.toLowerCase() === 'bool') {
217
+ return leaf(invertedOperatorName(op, base, setOperator, hasIfExists), key, flipBooleanValues(values), source);
218
+ }
219
+ if (setOperator === 'ForAllValues') {
220
+ return and([
221
+ leaf('Null', key, ['false'], source),
222
+ leaf(operatorName(invertBaseOperator(base), 'ForAnyValue', false), key, values, source)
223
+ ]);
224
+ }
225
+ if (setOperator === 'ForAnyValue') {
226
+ return or([
227
+ leaf('Null', key, ['true'], source),
228
+ leaf(operatorName(invertBaseOperator(base), 'ForAllValues', false), key, values, source)
229
+ ]);
230
+ }
231
+ return leaf(invertBaseOperator(base), key, values, source);
232
+ }
233
+ function leaf(op, key, values, source) {
234
+ return {
235
+ conditionType: 'condition',
236
+ op,
237
+ key,
238
+ values,
239
+ sources: [source],
240
+ inverted: true
241
+ };
242
+ }
243
+ function conditionSetOperator(op) {
244
+ const prefix = op.includes(':') ? op.split(':')[0].toLowerCase() : undefined;
245
+ if (prefix === 'forallvalues') {
246
+ return 'ForAllValues';
247
+ }
248
+ if (prefix === 'foranyvalue') {
249
+ return 'ForAnyValue';
250
+ }
251
+ return undefined;
252
+ }
253
+ function conditionBaseOperator(op) {
254
+ return op
255
+ .split(':')
256
+ .at(-1)
257
+ .replace(/IfExists$/i, '');
258
+ }
259
+ function isIfExists(op) {
260
+ return /IfExists$/i.test(op);
261
+ }
262
+ function invertedOperatorName(originalOp, base, setOperator, hasIfExists) {
263
+ if (base.toLowerCase() === 'bool' || base.toLowerCase() === 'null') {
264
+ return operatorName(base, setOperator, hasIfExists);
265
+ }
266
+ return originalOp;
267
+ }
268
+ function negativeConditionOperatorsMatchMissingKeys(base) {
269
+ return new Set([
270
+ 'stringnotequals',
271
+ 'stringnotequalsignorecase',
272
+ 'stringnotlike',
273
+ 'arnnotequals',
274
+ 'arnnotlike',
275
+ 'numericnotequals',
276
+ 'datenotequals',
277
+ 'notipaddress',
278
+ 'binarynotequals'
279
+ ]).has(base.toLowerCase());
280
+ }
281
+ function operatorName(base, setOperator, ifExists) {
282
+ const op = canonicalBaseOperator(base) + (ifExists ? 'IfExists' : '');
283
+ return setOperator ? `${setOperator}:${op}` : op;
284
+ }
285
+ function invertBaseOperator(base) {
286
+ const map = {
287
+ stringequals: 'StringNotEquals',
288
+ stringnotequals: 'StringEquals',
289
+ stringequalsignorecase: 'StringNotEqualsIgnoreCase',
290
+ stringnotequalsignorecase: 'StringEqualsIgnoreCase',
291
+ stringlike: 'StringNotLike',
292
+ stringnotlike: 'StringLike',
293
+ arnequals: 'ArnNotEquals',
294
+ arnnotequals: 'ArnEquals',
295
+ arnlike: 'ArnNotLike',
296
+ arnnotlike: 'ArnLike',
297
+ numericequals: 'NumericNotEquals',
298
+ numericnotequals: 'NumericEquals',
299
+ numericlessthan: 'NumericGreaterThanEquals',
300
+ numericlessthanequals: 'NumericGreaterThan',
301
+ numericgreaterthan: 'NumericLessThanEquals',
302
+ numericgreaterthanequals: 'NumericLessThan',
303
+ dateequals: 'DateNotEquals',
304
+ datenotequals: 'DateEquals',
305
+ datelessthan: 'DateGreaterThanEquals',
306
+ datelessthanequals: 'DateGreaterThan',
307
+ dategreaterthan: 'DateLessThanEquals',
308
+ dategreaterthanequals: 'DateLessThan',
309
+ ipaddress: 'NotIpAddress',
310
+ notipaddress: 'IpAddress',
311
+ binaryequals: 'BinaryNotEquals',
312
+ binarynotequals: 'BinaryEquals'
313
+ };
314
+ return map[base.toLowerCase()] ?? `Not:${base}`;
315
+ }
316
+ function canonicalBaseOperator(base) {
317
+ const canonical = {
318
+ stringequals: 'StringEquals',
319
+ stringnotequals: 'StringNotEquals',
320
+ stringequalsignorecase: 'StringEqualsIgnoreCase',
321
+ stringnotequalsignorecase: 'StringNotEqualsIgnoreCase',
322
+ stringlike: 'StringLike',
323
+ stringnotlike: 'StringNotLike',
324
+ arnequals: 'ArnEquals',
325
+ arnnotequals: 'ArnNotEquals',
326
+ arnlike: 'ArnLike',
327
+ arnnotlike: 'ArnNotLike',
328
+ numericequals: 'NumericEquals',
329
+ numericnotequals: 'NumericNotEquals',
330
+ numericlessthan: 'NumericLessThan',
331
+ numericlessthanequals: 'NumericLessThanEquals',
332
+ numericgreaterthan: 'NumericGreaterThan',
333
+ numericgreaterthanequals: 'NumericGreaterThanEquals',
334
+ dateequals: 'DateEquals',
335
+ datenotequals: 'DateNotEquals',
336
+ datelessthan: 'DateLessThan',
337
+ datelessthanequals: 'DateLessThanEquals',
338
+ dategreaterthan: 'DateGreaterThan',
339
+ dategreaterthanequals: 'DateGreaterThanEquals',
340
+ bool: 'Bool',
341
+ null: 'Null',
342
+ ipaddress: 'IpAddress',
343
+ notipaddress: 'NotIpAddress',
344
+ binaryequals: 'BinaryEquals',
345
+ binarynotequals: 'BinaryNotEquals'
346
+ };
347
+ return canonical[base.toLowerCase()] ?? base;
348
+ }
349
+ function flipBooleanValues(values) {
350
+ return values.map((value) => (value.toLowerCase() === 'true' ? 'false' : 'true'));
351
+ }
352
+ function publicExpression(expression) {
353
+ const simplified = simplify(expression);
354
+ return simplified.conditionType === 'always' || simplified.conditionType === 'never'
355
+ ? undefined
356
+ : simplified;
357
+ }
358
+ function simplify(expression) {
359
+ if (expression.conditionType !== 'group') {
360
+ return expression;
361
+ }
362
+ return expression.operator === 'and' ? and(expression.conditions) : or(expression.conditions);
363
+ }
364
+ export function always() {
365
+ return { conditionType: 'always' };
366
+ }
367
+ export function never(reason) {
368
+ return { conditionType: 'never', reason };
369
+ }
370
+ function dedupe(expressions) {
371
+ const seen = new Set();
372
+ const result = [];
373
+ for (const expression of expressions) {
374
+ const key = JSON.stringify(expression);
375
+ if (!seen.has(key)) {
376
+ seen.add(key);
377
+ result.push(expression);
378
+ }
379
+ }
380
+ return result;
381
+ }
382
+ //# sourceMappingURL=allowedConditions.js.map