@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,299 @@
1
+ import {} from '@actsecurity/iam-policy';
2
+ import { splitArnParts } from '../../util.js';
3
+ /**
4
+ * Classifies a standard S3 bucket policy as public or non-public for runtime
5
+ * RestrictPublicBuckets behavior.
6
+ *
7
+ * @param policy the loaded S3 bucket policy to classify
8
+ * @returns whether the policy is runtime-public and, when public, the public statements
9
+ */
10
+ export function classifyS3RuntimePublicBucketPolicy(policy) {
11
+ const publicStatements = policy
12
+ .statements()
13
+ .filter((statement) => statement.isAllow() && statementIsRuntimePublic(statement))
14
+ .map((statement) => statementIdentifier(statement));
15
+ if (publicStatements.length > 0) {
16
+ return { result: 'public', publicStatements };
17
+ }
18
+ return { result: 'nonPublic' };
19
+ }
20
+ /**
21
+ * Determines whether an individual Allow statement makes a bucket policy runtime-public.
22
+ *
23
+ * @param statement the statement to classify
24
+ * @returns true if the statement is public for runtime RestrictPublicBuckets behavior
25
+ */
26
+ function statementIsRuntimePublic(statement) {
27
+ if (!statement.isPrincipalStatement()) {
28
+ return true;
29
+ }
30
+ const principals = statement.principals();
31
+ if (principals.some((principal) => principal.isWildcardPrincipal())) {
32
+ return !hasPublicAccessLimitingCondition(statement);
33
+ }
34
+ return false;
35
+ }
36
+ /**
37
+ * Gets the statement index and Sid for classifier output.
38
+ *
39
+ * @param statement the statement to identify
40
+ * @returns the statement index and optional Sid
41
+ */
42
+ function statementIdentifier(statement) {
43
+ return {
44
+ index: statement.index(),
45
+ ...(statement.sid() ? { sid: statement.sid() } : {})
46
+ };
47
+ }
48
+ /**
49
+ * Determines whether a wildcard-principal statement has a condition that limits access
50
+ * enough to be non-public for S3 BPA runtime classification.
51
+ *
52
+ * @param statement the wildcard-principal statement to inspect
53
+ * @returns true if a supported condition makes the statement non-public
54
+ */
55
+ function hasPublicAccessLimitingCondition(statement) {
56
+ const conditionMap = statement.conditionMap();
57
+ if (!conditionMap) {
58
+ return false;
59
+ }
60
+ return (hasFixedValueCondition(conditionMap, 'aws:PrincipalOrgID') ||
61
+ hasFixedValueCondition(conditionMap, 'aws:PrincipalAccount') ||
62
+ hasPrincipalArnLimitingCondition(conditionMap) ||
63
+ hasOrgPathLimitingCondition(conditionMap, 'aws:PrincipalOrgPaths') ||
64
+ hasAwsServicePrincipalLimitingCondition(conditionMap) ||
65
+ hasPrincipalServiceNameLimitingCondition(conditionMap) ||
66
+ hasUseridLimitingCondition(conditionMap) ||
67
+ hasFixedValueCondition(conditionMap, 'aws:SourceVpce') ||
68
+ hasFixedValueCondition(conditionMap, 'aws:SourceVpc') ||
69
+ hasSourceVpcArnLimitingCondition(conditionMap) ||
70
+ hasFixedValueCondition(conditionMap, 'aws:VpceAccount') ||
71
+ hasFixedValueCondition(conditionMap, 'aws:VpceOrgID') ||
72
+ hasOrgPathLimitingCondition(conditionMap, 'aws:VpceOrgPaths') ||
73
+ hasSourceIpLimitingCondition(conditionMap) ||
74
+ hasFixedArnCondition(conditionMap, 'aws:SourceArn') ||
75
+ hasFixedValueCondition(conditionMap, 'aws:SourceAccount'));
76
+ }
77
+ /**
78
+ * Checks for exact fixed-value conditions for account, org, VPC, and similar keys.
79
+ *
80
+ * @param conditionMap the statement condition map
81
+ * @param key the condition key to inspect
82
+ * @returns true if the key is constrained to fixed values by supported operators
83
+ */
84
+ function hasFixedValueCondition(conditionMap, key) {
85
+ return conditionEntries(conditionMap, key).some(({ operator, values }) => ['StringEquals', 'StringEqualsIgnoreCase', 'ForAnyValue:StringEquals'].includes(operator) ||
86
+ (operator === 'StringLike' && values.every((value) => !hasWildcard(value))));
87
+ }
88
+ /**
89
+ * Checks for public-access-limiting aws:PrincipalArn conditions.
90
+ *
91
+ * @param conditionMap the statement condition map
92
+ * @returns true if PrincipalArn is constrained to a fixed account principal pattern
93
+ */
94
+ function hasPrincipalArnLimitingCondition(conditionMap) {
95
+ return conditionEntries(conditionMap, 'aws:PrincipalArn').some(({ operator, values }) => {
96
+ if (operator === 'ArnEquals') {
97
+ return values.every(isArnWithFixedAccount);
98
+ }
99
+ if (operator === 'ArnLike') {
100
+ return values.every((value) => isArnWithFixedAccount(value) && arnWildcardOnlyInResource(value));
101
+ }
102
+ return false;
103
+ });
104
+ }
105
+ /**
106
+ * Checks for exact SourceVpcArn conditions.
107
+ *
108
+ * @param conditionMap the statement condition map
109
+ * @returns true if SourceVpcArn is constrained to exact ARNs
110
+ */
111
+ function hasSourceVpcArnLimitingCondition(conditionMap) {
112
+ return hasFixedArnCondition(conditionMap, 'aws:SourceVpcArn');
113
+ }
114
+ /**
115
+ * Checks for fixed ARN conditions.
116
+ *
117
+ * @param conditionMap the statement condition map
118
+ * @param key the condition key to inspect
119
+ * @returns true if the key is constrained to fixed ARN values
120
+ */
121
+ function hasFixedArnCondition(conditionMap, key) {
122
+ return conditionEntries(conditionMap, key).some(({ operator, values }) => operator === 'ArnEquals' && values.every(isArnWithFixedAccount));
123
+ }
124
+ /**
125
+ * Checks for AWS Organizations path conditions with fixed org path prefixes.
126
+ *
127
+ * @param conditionMap the statement condition map
128
+ * @param key the condition key to inspect
129
+ * @returns true if the path condition is fixed or uses a documented suffix wildcard shape
130
+ */
131
+ function hasOrgPathLimitingCondition(conditionMap, key) {
132
+ return conditionEntries(conditionMap, key).some(({ operator, values }) => {
133
+ if (operator === 'StringEquals') {
134
+ return values.every(isFixedOrgPath);
135
+ }
136
+ if (operator === 'StringLike') {
137
+ return values.every(isFixedOrgPathWithOptionalSuffixWildcard);
138
+ }
139
+ return false;
140
+ });
141
+ }
142
+ /**
143
+ * Checks for conditions that limit access to AWS service principals.
144
+ *
145
+ * @param conditionMap the statement condition map
146
+ * @returns true if the statement is limited to AWS service principals
147
+ */
148
+ function hasAwsServicePrincipalLimitingCondition(conditionMap) {
149
+ return conditionEntries(conditionMap, 'aws:PrincipalIsAWSService').some(({ operator, values }) => ['Bool', 'StringEquals', 'StringEqualsIgnoreCase', 'StringLike'].includes(operator) &&
150
+ values.every((value) => value.toLowerCase() === 'true'));
151
+ }
152
+ /**
153
+ * Checks for service-principal name conditions.
154
+ *
155
+ * @param conditionMap the statement condition map
156
+ * @returns true if the statement is limited to service principal names
157
+ */
158
+ function hasPrincipalServiceNameLimitingCondition(conditionMap) {
159
+ return ['aws:PrincipalServiceName', 'aws:PrincipalServiceNamesList'].some((key) => conditionEntries(conditionMap, key).some(({ operator, values }) => {
160
+ return ([
161
+ 'StringEquals',
162
+ 'ForAnyValue:StringEquals',
163
+ 'StringLike',
164
+ 'ForAnyValue:StringLike'
165
+ ].includes(operator) && values.every(isServiceNamePattern));
166
+ }));
167
+ }
168
+ /**
169
+ * Checks for aws:userid conditions with a fixed stable ID prefix.
170
+ *
171
+ * @param conditionMap the statement condition map
172
+ * @returns true if userid is constrained to exact values or fixed-prefix session suffix wildcards
173
+ */
174
+ function hasUseridLimitingCondition(conditionMap) {
175
+ return conditionEntries(conditionMap, 'aws:userid').some(({ operator, values }) => {
176
+ if (operator === 'StringEquals') {
177
+ return values.every((value) => !hasWildcard(value));
178
+ }
179
+ if (operator === 'StringLike') {
180
+ return values.every((value) => /^[A-Z0-9]+:\*$/.test(value));
181
+ }
182
+ return false;
183
+ });
184
+ }
185
+ /**
186
+ * Checks for sufficiently narrow aws:SourceIp conditions.
187
+ *
188
+ * @param conditionMap the statement condition map
189
+ * @returns true if SourceIp ranges are narrow enough to be non-public
190
+ */
191
+ function hasSourceIpLimitingCondition(conditionMap) {
192
+ return conditionEntries(conditionMap, 'aws:SourceIp').some(({ operator, values }) => operator === 'IpAddress' && values.every(sourceIpRangeIsNonPublic));
193
+ }
194
+ /**
195
+ * Gets condition entries for a key using case-insensitive key matching.
196
+ *
197
+ * @param conditionMap the statement condition map
198
+ * @param key the condition key to inspect
199
+ * @returns matching condition entries
200
+ */
201
+ function conditionEntries(conditionMap, key) {
202
+ const entries = [];
203
+ for (const [operator, keyValues] of Object.entries(conditionMap)) {
204
+ for (const [conditionKey, values] of Object.entries(keyValues)) {
205
+ if (conditionKey.toLowerCase() === key.toLowerCase()) {
206
+ entries.push({ operator, values });
207
+ }
208
+ }
209
+ }
210
+ return entries;
211
+ }
212
+ /**
213
+ * Checks whether an ARN pattern has a fixed account component.
214
+ *
215
+ * @param value the ARN or ARN pattern to inspect
216
+ * @returns true if the account component is fixed and non-wildcard
217
+ */
218
+ function isArnWithFixedAccount(value) {
219
+ const arn = splitArnParts(value);
220
+ return !!arn.accountId && !hasWildcard(arn.accountId);
221
+ }
222
+ /**
223
+ * Checks whether ARN wildcards are limited to the resource component.
224
+ *
225
+ * @param value the ARN pattern to inspect
226
+ * @returns true if partition, service, region, and account are fixed
227
+ */
228
+ function arnWildcardOnlyInResource(value) {
229
+ const arn = splitArnParts(value);
230
+ return ![arn.partition, arn.service, arn.region, arn.accountId].some((part) => part ? hasWildcard(part) : false);
231
+ }
232
+ /**
233
+ * Checks whether a string has IAM wildcard characters.
234
+ *
235
+ * @param value the value to inspect
236
+ * @returns true if the value contains `*` or `?`
237
+ */
238
+ function hasWildcard(value) {
239
+ return value.includes('*') || value.includes('?');
240
+ }
241
+ /**
242
+ * Checks whether an Organizations path has a fixed org/root path prefix.
243
+ *
244
+ * @param value the org path value to inspect
245
+ * @returns true if the value is fixed and starts with an org path
246
+ */
247
+ function isFixedOrgPath(value) {
248
+ return /^o-[a-z0-9]+\/[^*?]+/.test(value) && !hasWildcard(value);
249
+ }
250
+ /**
251
+ * Checks whether an Organizations path is fixed or uses a suffix wildcard.
252
+ *
253
+ * @param value the org path value to inspect
254
+ * @returns true if the value has a fixed org path prefix and optional trailing wildcard
255
+ */
256
+ function isFixedOrgPathWithOptionalSuffixWildcard(value) {
257
+ if (!value.endsWith('*')) {
258
+ return isFixedOrgPath(value);
259
+ }
260
+ const prefix = value.slice(0, -1);
261
+ return /^o-[a-z0-9]+\/[^*?]+/.test(prefix) && !hasWildcard(prefix);
262
+ }
263
+ /**
264
+ * Checks whether a value is an AWS service-name pattern.
265
+ *
266
+ * @param value the service name or pattern to inspect
267
+ * @returns true if the value is an amazonaws.com service name pattern
268
+ */
269
+ function isServiceNamePattern(value) {
270
+ return /^([a-z0-9-]+|\*)\.(amazonaws\.com|amazonaws\.com\.cn)$/.test(value);
271
+ }
272
+ /**
273
+ * Determines whether a SourceIp CIDR is narrow/private enough to be non-public.
274
+ *
275
+ * @param cidr the CIDR value to inspect
276
+ * @returns true if the CIDR is non-public for S3 BPA classification
277
+ */
278
+ function sourceIpRangeIsNonPublic(cidr) {
279
+ const [address, prefixString] = cidr.split('/');
280
+ const prefix = Number(prefixString);
281
+ if (!address || !Number.isInteger(prefix)) {
282
+ return false;
283
+ }
284
+ if (address.includes(':')) {
285
+ return prefix >= 32;
286
+ }
287
+ const firstOctet = Number(address.split('.')[0]);
288
+ const secondOctet = Number(address.split('.')[1]);
289
+ if (!Number.isInteger(firstOctet) || !Number.isInteger(secondOctet)) {
290
+ return false;
291
+ }
292
+ if (firstOctet === 10 ||
293
+ (firstOctet === 172 && secondOctet >= 16 && secondOctet <= 31) ||
294
+ (firstOctet === 192 && secondOctet === 168)) {
295
+ return true;
296
+ }
297
+ return prefix >= 8;
298
+ }
299
+ //# sourceMappingURL=s3BlockPublicAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3BlockPublicAccess.js","sourceRoot":"","sources":["../../../../src/services/s3/s3BlockPublicAccess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type ResourceType } from '@actsecurity/iam-data';
2
+ /**
3
+ * Get the allowed context keys for a request.
4
+ *
5
+ * @param service The service the action belongs to
6
+ * @param action The action to get the allowed context keys for
7
+ * @param resource The resource the action is being performed on
8
+ * @param bucketAbacEnabled Whether ABAC is enabled on the S3 bucket (only applies to S3)
9
+ * @returns The allowed context keys for the request as lower case strings
10
+ * @throws error if the service or action does not exist
11
+ */
12
+ export declare function allowedContextKeysForRequest(service: string, action: string, resource: string, bucketAbacEnabled: boolean, suggestedResourceType: ResourceType | undefined): Promise<string[]>;
13
+ //# sourceMappingURL=contextKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextKeys.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/contextKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAA;AAI9B;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,OAAO,EAC1B,qBAAqB,EAAE,YAAY,GAAG,SAAS,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCnB"}
@@ -0,0 +1,55 @@
1
+ import { getAllGlobalConditionKeys, iamActionDetails } from '@actsecurity/iam-data';
2
+ import { isS3BucketOrObjectArn, isWildcardOnlyAction, lowerCaseAll } from '../util.js';
3
+ import { getResourceTypesForAction } from './resourceTypes.js';
4
+ /**
5
+ * Get the allowed context keys for a request.
6
+ *
7
+ * @param service The service the action belongs to
8
+ * @param action The action to get the allowed context keys for
9
+ * @param resource The resource the action is being performed on
10
+ * @param bucketAbacEnabled Whether ABAC is enabled on the S3 bucket (only applies to S3)
11
+ * @returns The allowed context keys for the request as lower case strings
12
+ * @throws error if the service or action does not exist
13
+ */
14
+ export async function allowedContextKeysForRequest(service, action, resource, bucketAbacEnabled, suggestedResourceType) {
15
+ const actionDetails = await iamActionDetails(service, action);
16
+ const actionConditionKeys = lowerCaseAll(actionDetails.conditionKeys);
17
+ const isWildCardOnly = await isWildcardOnlyAction(service, action);
18
+ if (isWildCardOnly) {
19
+ return [...actionConditionKeys, ...lowerCaseGlobalConditionKeys()];
20
+ }
21
+ let resourceType = suggestedResourceType;
22
+ if (!resourceType) {
23
+ const resourceTypes = await getResourceTypesForAction(service, action, resource);
24
+ if (resourceTypes.length === 0) {
25
+ throw new Error(`No resource types found for action ${action} on service ${service}`);
26
+ }
27
+ else if (resourceTypes.length > 1) {
28
+ throw new Error(`Multiple resource types found for action ${action} on service ${service}`);
29
+ }
30
+ resourceType = resourceTypes[0];
31
+ }
32
+ const resourceTypeConditions = [
33
+ ...(resourceType.conditionKeys ?? []),
34
+ ...(actionDetails.resourceTypes.find((rt) => rt.name === resourceType.key)?.conditionKeys ??
35
+ [])
36
+ ];
37
+ const allKeys = [
38
+ ...lowerCaseAll(resourceTypeConditions),
39
+ ...actionConditionKeys,
40
+ ...lowerCaseGlobalConditionKeys()
41
+ ];
42
+ if (!isS3BucketOrObjectArn(resource) || bucketAbacEnabled) {
43
+ return allKeys;
44
+ }
45
+ // Filter out S3 ABAC keys if bucket ABAC is not enabled
46
+ return allKeys.filter((key) => !key.startsWith('aws:resourcetag/') && !key.startsWith('s3:buckettag/'));
47
+ }
48
+ let lowerCaseConditionKeys;
49
+ function lowerCaseGlobalConditionKeys() {
50
+ if (!lowerCaseConditionKeys) {
51
+ lowerCaseConditionKeys = getAllGlobalConditionKeys().map((k) => k.toLowerCase());
52
+ }
53
+ return lowerCaseConditionKeys;
54
+ }
55
+ //# sourceMappingURL=contextKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextKeys.js","sourceRoot":"","sources":["../../../src/simulation_engine/contextKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAEjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAE9D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAe,EACf,MAAc,EACd,QAAgB,EAChB,iBAA0B,EAC1B,qBAA+C;IAE/C,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7D,MAAM,mBAAmB,GAAG,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAErE,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,4BAA4B,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,YAAY,GAAG,qBAAqB,CAAA;IACxC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAChF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,eAAe,OAAO,EAAE,CAAC,CAAA;QACvF,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4CAA4C,MAAM,eAAe,OAAO,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,sBAAsB,GAAG;QAC7B,GAAG,CAAC,YAAY,CAAC,aAAa,IAAI,EAAE,CAAC;QACrC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,YAAa,CAAC,GAAG,CAAC,EAAE,aAAa;YACxF,EAAE,CAAC;KACN,CAAA;IAED,MAAM,OAAO,GAAG;QACd,GAAG,YAAY,CAAC,sBAAsB,CAAC;QACvC,GAAG,mBAAmB;QACtB,GAAG,4BAA4B,EAAE;KAClC,CAAA;IAED,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,wDAAwD;IACxD,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CACjF,CAAA;AACH,CAAC;AAED,IAAI,sBAA4C,CAAA;AAChD,SAAS,4BAA4B;IACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,yBAAyB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,sBAAsB,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { EvaluationResult } from '../evaluate.js';
2
+ import type { SimulationResourceResult } from './simulationEngine.js';
3
+ /**
4
+ * Calculates the overall evaluation result from multiple simulation resource results.
5
+ *
6
+ * @param results Array of simulation resource results to evaluate
7
+ * @returns The overall evaluation result following AWS IAM evaluation logic:
8
+ * - 'Allowed' if any result is allowed
9
+ * - 'ExplicitlyDenied' if all results are explicitly denied
10
+ * - 'ImplicitlyDenied' for all other cases (including empty results)
11
+ */
12
+ export declare function calculateOverallResult(results: SimulationResourceResult[]): EvaluationResult;
13
+ //# sourceMappingURL=overallResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overallResult.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/overallResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAErE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,gBAAgB,CAyB5F"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Calculates the overall evaluation result from multiple simulation resource results.
3
+ *
4
+ * @param results Array of simulation resource results to evaluate
5
+ * @returns The overall evaluation result following AWS IAM evaluation logic:
6
+ * - 'Allowed' if any result is allowed
7
+ * - 'ExplicitlyDenied' if all results are explicitly denied
8
+ * - 'ImplicitlyDenied' for all other cases (including empty results)
9
+ */
10
+ export function calculateOverallResult(results) {
11
+ if (results.length === 0) {
12
+ return 'ImplicitlyDenied';
13
+ }
14
+ let hasExplicitlyDenied = false;
15
+ let hasImplicitlyDenied = false;
16
+ for (const result of results) {
17
+ const evaluationResult = result.analysis?.result;
18
+ if (evaluationResult === 'Allowed') {
19
+ return 'Allowed';
20
+ }
21
+ if (evaluationResult === 'ExplicitlyDenied') {
22
+ hasExplicitlyDenied = true;
23
+ continue;
24
+ }
25
+ hasImplicitlyDenied = true;
26
+ }
27
+ if (hasExplicitlyDenied && !hasImplicitlyDenied) {
28
+ return 'ExplicitlyDenied';
29
+ }
30
+ return 'ImplicitlyDenied';
31
+ }
32
+ //# sourceMappingURL=overallResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overallResult.js","sourceRoot":"","sources":["../../../src/simulation_engine/overallResult.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmC;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAC/B,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAA;QAChD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,gBAAgB,KAAK,kBAAkB,EAAE,CAAC;YAC5C,mBAAmB,GAAG,IAAI,CAAA;YAC1B,SAAQ;QACV,CAAC;QACD,mBAAmB,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED,IAAI,mBAAmB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { type ResourceType } from '@actsecurity/iam-data';
2
+ import { type Statement } from '@actsecurity/iam-policy';
3
+ import { type PolicyWithName } from '../core_engine/CoreSimulatorEngine.js';
4
+ /**
5
+ * Extracts matching resource strings from a set of policies for a given action and resource pattern.
6
+ *
7
+ * @param policies Array of policies to search through (undefined entries are skipped)
8
+ * @param action The action to match against policy statements
9
+ * @param resourceType The resource type to filter resource strings by
10
+ * @param resourceArnPattern The resource ARN pattern to match against
11
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
12
+ * @returns Array of unique resource strings that match the criteria
13
+ */
14
+ export declare function getMatchingResourceStringsForPolicies(policies: (PolicyWithName | undefined)[], action: string, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
15
+ /**
16
+ * Extracts resource strings from a single policy statement that allows the specified action.
17
+ *
18
+ * @param statement The policy statement to analyze
19
+ * @param action The action to check if the statement allows
20
+ * @param resourceType The resource type to filter by
21
+ * @param resourceArnPattern The resource ARN pattern to match
22
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
23
+ * @returns Array of resource strings from the statement, or empty array if statement doesn't allow the action
24
+ */
25
+ export declare function getResourceStringsFromStatement(statement: Statement, action: string, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
26
+ /**
27
+ * Extracts resource strings from a statement's Resource or NotResource elements that match the given criteria.
28
+ *
29
+ * @param statement The policy statement to analyze
30
+ * @param resourceType The resource type to filter by
31
+ * @param resourceArnPattern The resource ARN pattern to check for overlap
32
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
33
+ * @returns Array of matching resource strings, or ['*'] for certain NotResource cases
34
+ */
35
+ export declare function statementResourceStringsForResourceTypeAndPattern(statement: Statement, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
36
+ /**
37
+ * Determines if a policy statement allows the specified action.
38
+ *
39
+ * @param statement The policy statement to check
40
+ * @param action The action to test against the statement
41
+ * @returns true if the statement allows the action, false otherwise
42
+ */
43
+ export declare function statementAllowsAction(statement: Statement, action: string): boolean;
44
+ //# sourceMappingURL=policyResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policyResources.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/policyResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAMxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAG3E;;;;;;;;;GASG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAoBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAUV;AAED;;;;;;;;GAQG;AACH,wBAAgB,iDAAiD,CAC/D,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAkCV;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBnF"}
@@ -0,0 +1,117 @@
1
+ import {} from '@actsecurity/iam-data';
2
+ import {} from '@actsecurity/iam-policy';
3
+ import { actionMatchesPattern, resourceArnWithWildcardsToRegex, resourceStringMatchesResourceTypePattern } from '@actsecurity/iam-utils';
4
+ import {} from '../core_engine/CoreSimulatorEngine.js';
5
+ import { expandShortArn, resourceArnsOverlap } from '../util/resourceStrings.js';
6
+ /**
7
+ * Extracts matching resource strings from a set of policies for a given action and resource pattern.
8
+ *
9
+ * @param policies Array of policies to search through (undefined entries are skipped)
10
+ * @param action The action to match against policy statements
11
+ * @param resourceType The resource type to filter resource strings by
12
+ * @param resourceArnPattern The resource ARN pattern to match against
13
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
14
+ * @returns Array of unique resource strings that match the criteria
15
+ */
16
+ export function getMatchingResourceStringsForPolicies(policies, action, resourceType, resourceArnPattern, shouldExpandShortArns) {
17
+ const resourceStrings = new Set();
18
+ for (const policy of policies) {
19
+ if (!policy) {
20
+ continue;
21
+ }
22
+ for (const statement of policy.statements()) {
23
+ const stmtResourceStrings = getResourceStringsFromStatement(statement, action, resourceType, resourceArnPattern, shouldExpandShortArns);
24
+ for (const rs of stmtResourceStrings) {
25
+ resourceStrings.add(rs);
26
+ }
27
+ }
28
+ }
29
+ return Array.from(resourceStrings);
30
+ }
31
+ /**
32
+ * Extracts resource strings from a single policy statement that allows the specified action.
33
+ *
34
+ * @param statement The policy statement to analyze
35
+ * @param action The action to check if the statement allows
36
+ * @param resourceType The resource type to filter by
37
+ * @param resourceArnPattern The resource ARN pattern to match
38
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
39
+ * @returns Array of resource strings from the statement, or empty array if statement doesn't allow the action
40
+ */
41
+ export function getResourceStringsFromStatement(statement, action, resourceType, resourceArnPattern, shouldExpandShortArns) {
42
+ if (statementAllowsAction(statement, action)) {
43
+ return statementResourceStringsForResourceTypeAndPattern(statement, resourceType, resourceArnPattern, shouldExpandShortArns);
44
+ }
45
+ return [];
46
+ }
47
+ /**
48
+ * Extracts resource strings from a statement's Resource or NotResource elements that match the given criteria.
49
+ *
50
+ * @param statement The policy statement to analyze
51
+ * @param resourceType The resource type to filter by
52
+ * @param resourceArnPattern The resource ARN pattern to check for overlap
53
+ * @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
54
+ * @returns Array of matching resource strings, or ['*'] for certain NotResource cases
55
+ */
56
+ export function statementResourceStringsForResourceTypeAndPattern(statement, resourceType, resourceArnPattern, shouldExpandShortArns) {
57
+ if (statement.isResourceStatement() && statement.isAllow()) {
58
+ const resourceStrings = [];
59
+ for (const stmtResource of statement.resources()) {
60
+ const effectiveValue = shouldExpandShortArns
61
+ ? expandShortArn(stmtResource.value())
62
+ : stmtResource.value();
63
+ if (resourceStringMatchesResourceTypePattern(effectiveValue, resourceType.arn)) {
64
+ if (resourceArnsOverlap(resourceArnPattern, effectiveValue)) {
65
+ resourceStrings.push(stmtResource.value());
66
+ }
67
+ }
68
+ }
69
+ return resourceStrings;
70
+ }
71
+ if (statement.isNotResourceStatement() && statement.isAllow()) {
72
+ for (const stmtNotResource of statement.notResources()) {
73
+ const effectiveValue = shouldExpandShortArns
74
+ ? expandShortArn(stmtNotResource.value())
75
+ : stmtNotResource.value();
76
+ // If any NotResource string equals or is a superset of the resource type pattern, then the statement does not apply to the string. Otherwise, it should return the string '*'
77
+ if (effectiveValue === resourceArnPattern ||
78
+ isResourceArnSuperset(effectiveValue, resourceArnPattern)) {
79
+ return [];
80
+ }
81
+ }
82
+ return ['*'];
83
+ }
84
+ // If it's a statement that has no Resource or NotResource such as a trust policy, just return the original pattern
85
+ return [resourceArnPattern];
86
+ }
87
+ /**
88
+ * Determines if a policy statement allows the specified action.
89
+ *
90
+ * @param statement The policy statement to check
91
+ * @param action The action to test against the statement
92
+ * @returns true if the statement allows the action, false otherwise
93
+ */
94
+ export function statementAllowsAction(statement, action) {
95
+ if (statement.isActionStatement() && statement.isAllow()) {
96
+ for (const stmtAction of statement.actions()) {
97
+ if (actionMatchesPattern(action, stmtAction.value())) {
98
+ return true;
99
+ }
100
+ }
101
+ return false;
102
+ }
103
+ else if (statement.isNotActionStatement() && statement.isAllow()) {
104
+ for (const stmtAction of statement.notActions()) {
105
+ if (actionMatchesPattern(action, stmtAction.value())) {
106
+ return false;
107
+ }
108
+ }
109
+ return true;
110
+ }
111
+ return false;
112
+ }
113
+ function isResourceArnSuperset(arnSuperset, arnSubset) {
114
+ const regexSuperset = resourceArnWithWildcardsToRegex(arnSuperset);
115
+ return regexSuperset.test(arnSubset);
116
+ }
117
+ //# sourceMappingURL=policyResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policyResources.js","sourceRoot":"","sources":["../../../src/simulation_engine/policyResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAkB,MAAM,yBAAyB,CAAA;AACxD,OAAO,EACL,oBAAoB,EACpB,+BAA+B,EAC/B,wCAAwC,EACzC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAuB,MAAM,uCAAuC,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhF;;;;;;;;;GASG;AACH,MAAM,UAAU,qCAAqC,CACnD,QAAwC,EACxC,MAAc,EACd,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IACzC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAQ;QACV,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YAC5C,MAAM,mBAAmB,GAAG,+BAA+B,CACzD,SAAS,EACT,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,CACtB,CAAA;YACD,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;gBACrC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,+BAA+B,CAC7C,SAAoB,EACpB,MAAc,EACd,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,IAAI,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,iDAAiD,CACtD,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,CACtB,CAAA;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iDAAiD,CAC/D,SAAoB,EACpB,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,IAAI,SAAS,CAAC,mBAAmB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAa,EAAE,CAAA;QACpC,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;YACjD,MAAM,cAAc,GAAG,qBAAqB;gBAC1C,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACtC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;YACxB,IAAI,wCAAwC,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/E,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,IAAI,SAAS,CAAC,sBAAsB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9D,KAAK,MAAM,eAAe,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,qBAAqB;gBAC1C,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBACzC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;YAC3B,8KAA8K;YAC9K,IACE,cAAc,KAAK,kBAAkB;gBACrC,qBAAqB,CAAC,cAAc,EAAE,kBAAkB,CAAC,EACzD,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAoB,EAAE,MAAc;IACxE,IAAI,SAAS,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACnE,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;YAChD,IAAI,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,SAAiB;IACnE,MAAM,aAAa,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAA;IAClE,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ResourceType } from '@actsecurity/iam-data';
2
+ /**
3
+ * Get the the possible resource types for an action and resource
4
+ *
5
+ * @param service the service the action belongs to
6
+ * @param action the action to get the resource type for
7
+ * @param resource the resource type matching the action, if any
8
+ * @throws an error if the service or action does not exist, or if the action is a wildcard only action
9
+ */
10
+ export declare function getResourceTypesForAction(service: string, action: string, resource: string): Promise<ResourceType[]>;
11
+ //# sourceMappingURL=resourceTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceTypes.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/resourceTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAA;AAG9B;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB"}