@actsecurity/iam-lens 0.1.156

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 (383) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +203 -0
  3. package/dist/cjs/cli.d.ts +3 -0
  4. package/dist/cjs/cli.d.ts.map +1 -0
  5. package/dist/cjs/cli.js +206 -0
  6. package/dist/cjs/cli.js.map +1 -0
  7. package/dist/cjs/collect/client.d.ts +550 -0
  8. package/dist/cjs/collect/client.d.ts.map +1 -0
  9. package/dist/cjs/collect/client.js +1119 -0
  10. package/dist/cjs/collect/client.js.map +1 -0
  11. package/dist/cjs/collect/collect.d.ts +44 -0
  12. package/dist/cjs/collect/collect.d.ts.map +1 -0
  13. package/dist/cjs/collect/collect.js +55 -0
  14. package/dist/cjs/collect/collect.js.map +1 -0
  15. package/dist/cjs/collect/inMemoryClient.d.ts +6 -0
  16. package/dist/cjs/collect/inMemoryClient.d.ts.map +1 -0
  17. package/dist/cjs/collect/inMemoryClient.js +11 -0
  18. package/dist/cjs/collect/inMemoryClient.js.map +1 -0
  19. package/dist/cjs/index.d.ts +13 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +28 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/package.json +3 -0
  24. package/dist/cjs/principalCan/permission.d.ts +125 -0
  25. package/dist/cjs/principalCan/permission.d.ts.map +1 -0
  26. package/dist/cjs/principalCan/permission.js +1229 -0
  27. package/dist/cjs/principalCan/permission.js.map +1 -0
  28. package/dist/cjs/principalCan/permissionSet.d.ts +140 -0
  29. package/dist/cjs/principalCan/permissionSet.d.ts.map +1 -0
  30. package/dist/cjs/principalCan/permissionSet.js +437 -0
  31. package/dist/cjs/principalCan/permissionSet.js.map +1 -0
  32. package/dist/cjs/principalCan/principalCan.d.ts +26 -0
  33. package/dist/cjs/principalCan/principalCan.d.ts.map +1 -0
  34. package/dist/cjs/principalCan/principalCan.js +195 -0
  35. package/dist/cjs/principalCan/principalCan.js.map +1 -0
  36. package/dist/cjs/principalCan/principalConstraints.d.ts +147 -0
  37. package/dist/cjs/principalCan/principalConstraints.d.ts.map +1 -0
  38. package/dist/cjs/principalCan/principalConstraints.js +472 -0
  39. package/dist/cjs/principalCan/principalConstraints.js.map +1 -0
  40. package/dist/cjs/principalCan/resources/actions.d.ts +9 -0
  41. package/dist/cjs/principalCan/resources/actions.d.ts.map +1 -0
  42. package/dist/cjs/principalCan/resources/actions.js +27 -0
  43. package/dist/cjs/principalCan/resources/actions.js.map +1 -0
  44. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
  45. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
  46. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js +114 -0
  47. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
  48. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
  49. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
  50. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js +110 -0
  51. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
  52. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
  53. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
  54. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js +123 -0
  55. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
  56. package/dist/cjs/principalCan/resources/statements.d.ts +27 -0
  57. package/dist/cjs/principalCan/resources/statements.d.ts.map +1 -0
  58. package/dist/cjs/principalCan/resources/statements.js +119 -0
  59. package/dist/cjs/principalCan/resources/statements.js.map +1 -0
  60. package/dist/cjs/principalIndex/makePrincipalIndex.d.ts +8 -0
  61. package/dist/cjs/principalIndex/makePrincipalIndex.d.ts.map +1 -0
  62. package/dist/cjs/principalIndex/makePrincipalIndex.js +105 -0
  63. package/dist/cjs/principalIndex/makePrincipalIndex.js.map +1 -0
  64. package/dist/cjs/principals.d.ts +54 -0
  65. package/dist/cjs/principals.d.ts.map +1 -0
  66. package/dist/cjs/principals.js +143 -0
  67. package/dist/cjs/principals.js.map +1 -0
  68. package/dist/cjs/resources.d.ts +32 -0
  69. package/dist/cjs/resources.d.ts.map +1 -0
  70. package/dist/cjs/resources.js +71 -0
  71. package/dist/cjs/resources.js.map +1 -0
  72. package/dist/cjs/simulate/contextKeys.d.ts +68 -0
  73. package/dist/cjs/simulate/contextKeys.d.ts.map +1 -0
  74. package/dist/cjs/simulate/contextKeys.js +293 -0
  75. package/dist/cjs/simulate/contextKeys.js.map +1 -0
  76. package/dist/cjs/simulate/simulate.d.ts +72 -0
  77. package/dist/cjs/simulate/simulate.d.ts.map +1 -0
  78. package/dist/cjs/simulate/simulate.js +296 -0
  79. package/dist/cjs/simulate/simulate.js.map +1 -0
  80. package/dist/cjs/test-datasets/testClient.d.ts +17 -0
  81. package/dist/cjs/test-datasets/testClient.d.ts.map +1 -0
  82. package/dist/cjs/test-datasets/testClient.js +58 -0
  83. package/dist/cjs/test-datasets/testClient.js.map +1 -0
  84. package/dist/cjs/utils/arn.d.ts +22 -0
  85. package/dist/cjs/utils/arn.d.ts.map +1 -0
  86. package/dist/cjs/utils/arn.js +49 -0
  87. package/dist/cjs/utils/arn.js.map +1 -0
  88. package/dist/cjs/utils/bitset.d.ts +45 -0
  89. package/dist/cjs/utils/bitset.d.ts.map +1 -0
  90. package/dist/cjs/utils/bitset.js +149 -0
  91. package/dist/cjs/utils/bitset.js.map +1 -0
  92. package/dist/cjs/utils/dynamicImport.d.ts +31 -0
  93. package/dist/cjs/utils/dynamicImport.d.ts.map +1 -0
  94. package/dist/cjs/utils/dynamicImport.js +64 -0
  95. package/dist/cjs/utils/dynamicImport.js.map +1 -0
  96. package/dist/cjs/utils/packageVersion.d.ts +5 -0
  97. package/dist/cjs/utils/packageVersion.d.ts.map +1 -0
  98. package/dist/cjs/utils/packageVersion.js +25 -0
  99. package/dist/cjs/utils/packageVersion.js.map +1 -0
  100. package/dist/cjs/utils/readPackageFile.d.ts +3 -0
  101. package/dist/cjs/utils/readPackageFile.d.ts.map +1 -0
  102. package/dist/cjs/utils/readPackageFile.js +16 -0
  103. package/dist/cjs/utils/readPackageFile.js.map +1 -0
  104. package/dist/cjs/utils/s3Abac.d.ts +3 -0
  105. package/dist/cjs/utils/s3Abac.d.ts.map +1 -0
  106. package/dist/cjs/utils/s3Abac.js +5 -0
  107. package/dist/cjs/utils/s3Abac.js.map +1 -0
  108. package/dist/cjs/utils/stringOrFileArgument.d.ts +9 -0
  109. package/dist/cjs/utils/stringOrFileArgument.d.ts.map +1 -0
  110. package/dist/cjs/utils/stringOrFileArgument.js +25 -0
  111. package/dist/cjs/utils/stringOrFileArgument.js.map +1 -0
  112. package/dist/cjs/utils/sts.d.ts +2 -0
  113. package/dist/cjs/utils/sts.d.ts.map +1 -0
  114. package/dist/cjs/utils/sts.js +9 -0
  115. package/dist/cjs/utils/sts.js.map +1 -0
  116. package/dist/cjs/utils/testUtils.d.ts +56 -0
  117. package/dist/cjs/utils/testUtils.d.ts.map +1 -0
  118. package/dist/cjs/utils/testUtils.js +95 -0
  119. package/dist/cjs/utils/testUtils.js.map +1 -0
  120. package/dist/cjs/utils/workerScript.d.ts +8 -0
  121. package/dist/cjs/utils/workerScript.d.ts.map +1 -0
  122. package/dist/cjs/utils/workerScript.js +23 -0
  123. package/dist/cjs/utils/workerScript.js.map +1 -0
  124. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
  125. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
  126. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +80 -0
  127. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -0
  128. package/dist/cjs/whoCan/WhoCanProcessor.d.ts +400 -0
  129. package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
  130. package/dist/cjs/whoCan/WhoCanProcessor.js +1088 -0
  131. package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
  132. package/dist/cjs/whoCan/WhoCanWorker.d.ts +87 -0
  133. package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -0
  134. package/dist/cjs/whoCan/WhoCanWorker.js +201 -0
  135. package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -0
  136. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
  137. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
  138. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +189 -0
  139. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
  140. package/dist/cjs/whoCan/principalArnFilter.d.ts +84 -0
  141. package/dist/cjs/whoCan/principalArnFilter.d.ts.map +1 -0
  142. package/dist/cjs/whoCan/principalArnFilter.js +258 -0
  143. package/dist/cjs/whoCan/principalArnFilter.js.map +1 -0
  144. package/dist/cjs/whoCan/principalScope.d.ts +35 -0
  145. package/dist/cjs/whoCan/principalScope.d.ts.map +1 -0
  146. package/dist/cjs/whoCan/principalScope.js +104 -0
  147. package/dist/cjs/whoCan/principalScope.js.map +1 -0
  148. package/dist/cjs/whoCan/requestAnalysis.d.ts +73 -0
  149. package/dist/cjs/whoCan/requestAnalysis.d.ts.map +1 -0
  150. package/dist/cjs/whoCan/requestAnalysis.js +87 -0
  151. package/dist/cjs/whoCan/requestAnalysis.js.map +1 -0
  152. package/dist/cjs/whoCan/untrustingActions.d.ts +7 -0
  153. package/dist/cjs/whoCan/untrustingActions.d.ts.map +1 -0
  154. package/dist/cjs/whoCan/untrustingActions.js +30 -0
  155. package/dist/cjs/whoCan/untrustingActions.js.map +1 -0
  156. package/dist/cjs/whoCan/whoCan.d.ts +295 -0
  157. package/dist/cjs/whoCan/whoCan.d.ts.map +1 -0
  158. package/dist/cjs/whoCan/whoCan.js +574 -0
  159. package/dist/cjs/whoCan/whoCan.js.map +1 -0
  160. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts +17 -0
  161. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  162. package/dist/cjs/whoCan/workerBootstrapPlugin.js +3 -0
  163. package/dist/cjs/whoCan/workerBootstrapPlugin.js.map +1 -0
  164. package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts +15 -0
  165. package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
  166. package/dist/cjs/workers/ArrayStreamingWorkQueue.js +35 -0
  167. package/dist/cjs/workers/ArrayStreamingWorkQueue.js.map +1 -0
  168. package/dist/cjs/workers/JobRunner.d.ts +47 -0
  169. package/dist/cjs/workers/JobRunner.d.ts.map +1 -0
  170. package/dist/cjs/workers/JobRunner.js +101 -0
  171. package/dist/cjs/workers/JobRunner.js.map +1 -0
  172. package/dist/cjs/workers/RingQueue.d.ts +14 -0
  173. package/dist/cjs/workers/RingQueue.d.ts.map +1 -0
  174. package/dist/cjs/workers/RingQueue.js +43 -0
  175. package/dist/cjs/workers/RingQueue.js.map +1 -0
  176. package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts +10 -0
  177. package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
  178. package/dist/cjs/workers/SharedArrayBufferMainCache.js +37 -0
  179. package/dist/cjs/workers/SharedArrayBufferMainCache.js.map +1 -0
  180. package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
  181. package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
  182. package/dist/cjs/workers/SharedArrayBufferWorkerCache.js +49 -0
  183. package/dist/cjs/workers/SharedArrayBufferWorkerCache.js.map +1 -0
  184. package/dist/cjs/workers/StreamingWorkQueue.d.ts +18 -0
  185. package/dist/cjs/workers/StreamingWorkQueue.d.ts.map +1 -0
  186. package/dist/cjs/workers/StreamingWorkQueue.js +67 -0
  187. package/dist/cjs/workers/StreamingWorkQueue.js.map +1 -0
  188. package/dist/cjs/workers/buffers.d.ts +4 -0
  189. package/dist/cjs/workers/buffers.d.ts.map +1 -0
  190. package/dist/cjs/workers/buffers.js +26 -0
  191. package/dist/cjs/workers/buffers.js.map +1 -0
  192. package/dist/esm/cli.d.ts +3 -0
  193. package/dist/esm/cli.d.ts.map +1 -0
  194. package/dist/esm/cli.js +204 -0
  195. package/dist/esm/cli.js.map +1 -0
  196. package/dist/esm/collect/client.d.ts +550 -0
  197. package/dist/esm/collect/client.d.ts.map +1 -0
  198. package/dist/esm/collect/client.js +1114 -0
  199. package/dist/esm/collect/client.js.map +1 -0
  200. package/dist/esm/collect/collect.d.ts +44 -0
  201. package/dist/esm/collect/collect.d.ts.map +1 -0
  202. package/dist/esm/collect/collect.js +51 -0
  203. package/dist/esm/collect/collect.js.map +1 -0
  204. package/dist/esm/collect/inMemoryClient.d.ts +6 -0
  205. package/dist/esm/collect/inMemoryClient.d.ts.map +1 -0
  206. package/dist/esm/collect/inMemoryClient.js +8 -0
  207. package/dist/esm/collect/inMemoryClient.js.map +1 -0
  208. package/dist/esm/index.d.ts +13 -0
  209. package/dist/esm/index.d.ts.map +1 -0
  210. package/dist/esm/index.js +11 -0
  211. package/dist/esm/index.js.map +1 -0
  212. package/dist/esm/package.json +3 -0
  213. package/dist/esm/principalCan/permission.d.ts +125 -0
  214. package/dist/esm/principalCan/permission.d.ts.map +1 -0
  215. package/dist/esm/principalCan/permission.js +1212 -0
  216. package/dist/esm/principalCan/permission.js.map +1 -0
  217. package/dist/esm/principalCan/permissionSet.d.ts +140 -0
  218. package/dist/esm/principalCan/permissionSet.d.ts.map +1 -0
  219. package/dist/esm/principalCan/permissionSet.js +429 -0
  220. package/dist/esm/principalCan/permissionSet.js.map +1 -0
  221. package/dist/esm/principalCan/principalCan.d.ts +26 -0
  222. package/dist/esm/principalCan/principalCan.d.ts.map +1 -0
  223. package/dist/esm/principalCan/principalCan.js +193 -0
  224. package/dist/esm/principalCan/principalCan.js.map +1 -0
  225. package/dist/esm/principalCan/principalConstraints.d.ts +147 -0
  226. package/dist/esm/principalCan/principalConstraints.d.ts.map +1 -0
  227. package/dist/esm/principalCan/principalConstraints.js +456 -0
  228. package/dist/esm/principalCan/principalConstraints.js.map +1 -0
  229. package/dist/esm/principalCan/resources/actions.d.ts +9 -0
  230. package/dist/esm/principalCan/resources/actions.d.ts.map +1 -0
  231. package/dist/esm/principalCan/resources/actions.js +24 -0
  232. package/dist/esm/principalCan/resources/actions.js.map +1 -0
  233. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
  234. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
  235. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js +110 -0
  236. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
  237. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
  238. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
  239. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js +106 -0
  240. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
  241. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
  242. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
  243. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js +120 -0
  244. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
  245. package/dist/esm/principalCan/resources/statements.d.ts +27 -0
  246. package/dist/esm/principalCan/resources/statements.d.ts.map +1 -0
  247. package/dist/esm/principalCan/resources/statements.js +117 -0
  248. package/dist/esm/principalCan/resources/statements.js.map +1 -0
  249. package/dist/esm/principalIndex/makePrincipalIndex.d.ts +8 -0
  250. package/dist/esm/principalIndex/makePrincipalIndex.d.ts.map +1 -0
  251. package/dist/esm/principalIndex/makePrincipalIndex.js +104 -0
  252. package/dist/esm/principalIndex/makePrincipalIndex.js.map +1 -0
  253. package/dist/esm/principals.d.ts +54 -0
  254. package/dist/esm/principals.d.ts.map +1 -0
  255. package/dist/esm/principals.js +133 -0
  256. package/dist/esm/principals.js.map +1 -0
  257. package/dist/esm/resources.d.ts +32 -0
  258. package/dist/esm/resources.d.ts.map +1 -0
  259. package/dist/esm/resources.js +69 -0
  260. package/dist/esm/resources.js.map +1 -0
  261. package/dist/esm/simulate/contextKeys.d.ts +68 -0
  262. package/dist/esm/simulate/contextKeys.d.ts.map +1 -0
  263. package/dist/esm/simulate/contextKeys.js +287 -0
  264. package/dist/esm/simulate/contextKeys.js.map +1 -0
  265. package/dist/esm/simulate/simulate.d.ts +72 -0
  266. package/dist/esm/simulate/simulate.d.ts.map +1 -0
  267. package/dist/esm/simulate/simulate.js +295 -0
  268. package/dist/esm/simulate/simulate.js.map +1 -0
  269. package/dist/esm/test-datasets/testClient.d.ts +17 -0
  270. package/dist/esm/test-datasets/testClient.d.ts.map +1 -0
  271. package/dist/esm/test-datasets/testClient.js +56 -0
  272. package/dist/esm/test-datasets/testClient.js.map +1 -0
  273. package/dist/esm/utils/arn.d.ts +22 -0
  274. package/dist/esm/utils/arn.d.ts.map +1 -0
  275. package/dist/esm/utils/arn.js +43 -0
  276. package/dist/esm/utils/arn.js.map +1 -0
  277. package/dist/esm/utils/bitset.d.ts +45 -0
  278. package/dist/esm/utils/bitset.d.ts.map +1 -0
  279. package/dist/esm/utils/bitset.js +141 -0
  280. package/dist/esm/utils/bitset.js.map +1 -0
  281. package/dist/esm/utils/dynamicImport.d.ts +31 -0
  282. package/dist/esm/utils/dynamicImport.d.ts.map +1 -0
  283. package/dist/esm/utils/dynamicImport.js +60 -0
  284. package/dist/esm/utils/dynamicImport.js.map +1 -0
  285. package/dist/esm/utils/packageVersion.d.ts +5 -0
  286. package/dist/esm/utils/packageVersion.d.ts.map +1 -0
  287. package/dist/esm/utils/packageVersion.js +22 -0
  288. package/dist/esm/utils/packageVersion.js.map +1 -0
  289. package/dist/esm/utils/readPackageFile.d.ts +3 -0
  290. package/dist/esm/utils/readPackageFile.d.ts.map +1 -0
  291. package/dist/esm/utils/readPackageFile.js +15 -0
  292. package/dist/esm/utils/readPackageFile.js.map +1 -0
  293. package/dist/esm/utils/readPackageFileEsm.d.ts.map +1 -0
  294. package/dist/esm/utils/s3Abac.d.ts +3 -0
  295. package/dist/esm/utils/s3Abac.d.ts.map +1 -0
  296. package/dist/esm/utils/s3Abac.js +2 -0
  297. package/dist/esm/utils/s3Abac.js.map +1 -0
  298. package/dist/esm/utils/stringOrFileArgument.d.ts +9 -0
  299. package/dist/esm/utils/stringOrFileArgument.d.ts.map +1 -0
  300. package/dist/esm/utils/stringOrFileArgument.js +22 -0
  301. package/dist/esm/utils/stringOrFileArgument.js.map +1 -0
  302. package/dist/esm/utils/sts.d.ts +2 -0
  303. package/dist/esm/utils/sts.d.ts.map +1 -0
  304. package/dist/esm/utils/sts.js +6 -0
  305. package/dist/esm/utils/sts.js.map +1 -0
  306. package/dist/esm/utils/testUtils.d.ts +56 -0
  307. package/dist/esm/utils/testUtils.d.ts.map +1 -0
  308. package/dist/esm/utils/testUtils.js +90 -0
  309. package/dist/esm/utils/testUtils.js.map +1 -0
  310. package/dist/esm/utils/workerScript.d.ts +8 -0
  311. package/dist/esm/utils/workerScript.d.ts.map +1 -0
  312. package/dist/esm/utils/workerScript.js +18 -0
  313. package/dist/esm/utils/workerScript.js.map +1 -0
  314. package/dist/esm/utils/workerScriptEsm.d.ts.map +1 -0
  315. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
  316. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
  317. package/dist/esm/whoCan/WhoCanMainThreadWorker.js +81 -0
  318. package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -0
  319. package/dist/esm/whoCan/WhoCanProcessor.d.ts +400 -0
  320. package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
  321. package/dist/esm/whoCan/WhoCanProcessor.js +1080 -0
  322. package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
  323. package/dist/esm/whoCan/WhoCanWorker.d.ts +87 -0
  324. package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -0
  325. package/dist/esm/whoCan/WhoCanWorker.js +198 -0
  326. package/dist/esm/whoCan/WhoCanWorker.js.map +1 -0
  327. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
  328. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
  329. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +193 -0
  330. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
  331. package/dist/esm/whoCan/principalArnFilter.d.ts +84 -0
  332. package/dist/esm/whoCan/principalArnFilter.d.ts.map +1 -0
  333. package/dist/esm/whoCan/principalArnFilter.js +253 -0
  334. package/dist/esm/whoCan/principalArnFilter.js.map +1 -0
  335. package/dist/esm/whoCan/principalScope.d.ts +35 -0
  336. package/dist/esm/whoCan/principalScope.d.ts.map +1 -0
  337. package/dist/esm/whoCan/principalScope.js +102 -0
  338. package/dist/esm/whoCan/principalScope.js.map +1 -0
  339. package/dist/esm/whoCan/requestAnalysis.d.ts +73 -0
  340. package/dist/esm/whoCan/requestAnalysis.d.ts.map +1 -0
  341. package/dist/esm/whoCan/requestAnalysis.js +83 -0
  342. package/dist/esm/whoCan/requestAnalysis.js.map +1 -0
  343. package/dist/esm/whoCan/untrustingActions.d.ts +7 -0
  344. package/dist/esm/whoCan/untrustingActions.d.ts.map +1 -0
  345. package/dist/esm/whoCan/untrustingActions.js +27 -0
  346. package/dist/esm/whoCan/untrustingActions.js.map +1 -0
  347. package/dist/esm/whoCan/whoCan.d.ts +295 -0
  348. package/dist/esm/whoCan/whoCan.d.ts.map +1 -0
  349. package/dist/esm/whoCan/whoCan.js +571 -0
  350. package/dist/esm/whoCan/whoCan.js.map +1 -0
  351. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts +17 -0
  352. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  353. package/dist/esm/whoCan/workerBootstrapPlugin.js +2 -0
  354. package/dist/esm/whoCan/workerBootstrapPlugin.js.map +1 -0
  355. package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts +15 -0
  356. package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
  357. package/dist/esm/workers/ArrayStreamingWorkQueue.js +31 -0
  358. package/dist/esm/workers/ArrayStreamingWorkQueue.js.map +1 -0
  359. package/dist/esm/workers/JobRunner.d.ts +47 -0
  360. package/dist/esm/workers/JobRunner.d.ts.map +1 -0
  361. package/dist/esm/workers/JobRunner.js +94 -0
  362. package/dist/esm/workers/JobRunner.js.map +1 -0
  363. package/dist/esm/workers/RingQueue.d.ts +14 -0
  364. package/dist/esm/workers/RingQueue.d.ts.map +1 -0
  365. package/dist/esm/workers/RingQueue.js +36 -0
  366. package/dist/esm/workers/RingQueue.js.map +1 -0
  367. package/dist/esm/workers/SharedArrayBufferMainCache.d.ts +10 -0
  368. package/dist/esm/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
  369. package/dist/esm/workers/SharedArrayBufferMainCache.js +34 -0
  370. package/dist/esm/workers/SharedArrayBufferMainCache.js.map +1 -0
  371. package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
  372. package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
  373. package/dist/esm/workers/SharedArrayBufferWorkerCache.js +46 -0
  374. package/dist/esm/workers/SharedArrayBufferWorkerCache.js.map +1 -0
  375. package/dist/esm/workers/StreamingWorkQueue.d.ts +18 -0
  376. package/dist/esm/workers/StreamingWorkQueue.d.ts.map +1 -0
  377. package/dist/esm/workers/StreamingWorkQueue.js +61 -0
  378. package/dist/esm/workers/StreamingWorkQueue.js.map +1 -0
  379. package/dist/esm/workers/buffers.d.ts +4 -0
  380. package/dist/esm/workers/buffers.d.ts.map +1 -0
  381. package/dist/esm/workers/buffers.js +21 -0
  382. package/dist/esm/workers/buffers.js.map +1 -0
  383. package/package.json +132 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * An action-scoped set of principal ARN patterns extracted from a Deny statement.
3
+ * The patterns only apply when the action being simulated matches one of the
4
+ * entry's action patterns.
5
+ */
6
+ export interface DenyFilterEntry {
7
+ /** Action patterns from the deny statement (e.g., 'secretsmanager:GetSecretValue', 's3:*'). */
8
+ actionPatterns: string[];
9
+ /** Principal ARN patterns extracted from the condition. */
10
+ principalPatterns: RegExp[];
11
+ }
12
+ /**
13
+ * A pre-simulation filter that uses aws:PrincipalArn condition patterns
14
+ * from a resource policy to skip principals that cannot possibly be allowed.
15
+ */
16
+ export interface PrincipalArnFilter {
17
+ /**
18
+ * Allow patterns extracted from resource policy Allow statements.
19
+ * If non-empty, a principal must match at least one pattern to be
20
+ * worth simulating.
21
+ */
22
+ allowPatterns: RegExp[];
23
+ /**
24
+ * From Deny statements with negative operators (StringNotLike, etc.).
25
+ * For each entry, if the simulation action matches one of the entry's
26
+ * action patterns, the principal must match at least one of the entry's
27
+ * principal patterns to be worth simulating.
28
+ */
29
+ denyDerivedAllowEntries: DenyFilterEntry[];
30
+ /**
31
+ * From Deny statements with positive operators (StringLike, etc.).
32
+ * For each entry, if the simulation action matches one of the entry's
33
+ * action patterns AND the principal matches one of the entry's principal
34
+ * patterns, the simulation can be skipped (the principal is explicitly denied).
35
+ */
36
+ denyEntries: DenyFilterEntry[];
37
+ /**
38
+ * Account IDs that are explicitly named as account principals in the
39
+ * resource policy's Allow statements. Principals in these accounts
40
+ * must bypass the filter because the account-level principal grant
41
+ * is independent of any PrincipalArn conditions on wildcard statements.
42
+ */
43
+ exemptAccounts: Set<string>;
44
+ }
45
+ /**
46
+ * Converts an IAM wildcard pattern to a case-sensitive anchored RegExp.
47
+ * Handles `*` (any characters) and `?` (single character) wildcards.
48
+ * Does not handle replacement variables — callers must ensure patterns
49
+ * with variables are excluded before calling this.
50
+ *
51
+ * @param pattern the IAM pattern string (e.g. `arn:aws:iam::*:role/ec2/*`)
52
+ * @returns an anchored case-sensitive RegExp
53
+ */
54
+ export declare function iamPatternToRegex(pattern: string): RegExp;
55
+ /**
56
+ * Builds a PrincipalArnFilter from a resource policy by extracting
57
+ * aws:PrincipalArn patterns from Allow statements with wildcard principals.
58
+ *
59
+ * The filter is only constructed if **every** wildcard-Allow statement has
60
+ * a usable aws:PrincipalArn condition. If any wildcard-Allow statement lacks
61
+ * one, the filter cannot safely exclude principals and undefined is returned.
62
+ *
63
+ * @param resourcePolicy the raw resource policy document, or undefined/null if none
64
+ * @returns a PrincipalArnFilter if filtering is possible, undefined otherwise
65
+ */
66
+ export declare function buildPrincipalArnFilter(resourcePolicy: any): PrincipalArnFilter | undefined;
67
+ /**
68
+ * Tests whether a principal ARN passes the PrincipalArnFilter for a given action.
69
+ *
70
+ * Principals in the resource account or an exempt account bypass the positive
71
+ * allow-side filtering (allow patterns and deny-derived allow entries) because
72
+ * they may be granted access through account-level principal grants independent
73
+ * of any PrincipalArn conditions. However, they are still subject to deny-side
74
+ * filtering (deny entries) because an explicit deny in a resource policy applies
75
+ * regardless of the principal's account.
76
+ *
77
+ * @param principal the principal ARN to test
78
+ * @param action the action being simulated
79
+ * @param resourceAccount the account that owns the resource being checked
80
+ * @param filter the filter to apply
81
+ * @returns true if the principal should be simulated, false if it can be skipped
82
+ */
83
+ export declare function principalMatchesFilter(principal: string, action: string, resourceAccount: string, filter: PrincipalArnFilter): boolean;
84
+ //# sourceMappingURL=principalArnFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principalArnFilter.d.ts","sourceRoot":"","sources":["../../../src/whoCan/principalArnFilter.ts"],"names":[],"mappings":"AAkCA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,EAAE,CAAA;IAEvB;;;;;OAKG;IACH,uBAAuB,EAAE,eAAe,EAAE,CAAA;IAE1C;;;;;OAKG;IACH,WAAW,EAAE,eAAe,EAAE,CAAA;IAE9B;;;;;OAKG;IACH,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzD;AAYD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,GAAG,GAAG,kBAAkB,GAAG,SAAS,CA6I3F;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CA+BT"}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iamPatternToRegex = iamPatternToRegex;
4
+ exports.buildPrincipalArnFilter = buildPrincipalArnFilter;
5
+ exports.principalMatchesFilter = principalMatchesFilter;
6
+ const iam_policy_1 = require("@actsecurity/iam-policy");
7
+ const iam_utils_1 = require("@actsecurity/iam-utils");
8
+ /**
9
+ * Set of condition operators that can be used with aws:PrincipalArn to
10
+ * constrain which principals are allowed. These are the base operators
11
+ * (lowercase) without set modifiers or IfExists.
12
+ */
13
+ const ALLOW_PRINCIPAL_ARN_OPERATORS = new Set([
14
+ 'stringlike',
15
+ 'stringequals',
16
+ 'arnlike',
17
+ 'arnequals'
18
+ ]);
19
+ /**
20
+ * Negative condition operators on `aws:PrincipalArn` in Deny statements.
21
+ * The deny applies to principals NOT matching the patterns, so the patterns
22
+ * become an allow-list (only those principals are worth simulating).
23
+ */
24
+ const DENY_NEGATIVE_OPERATORS = new Set([
25
+ 'stringnotlike',
26
+ 'stringnotequals',
27
+ 'arnnotlike',
28
+ 'arnnotequals'
29
+ ]);
30
+ /**
31
+ * Positive condition operators on `aws:PrincipalArn` in Deny statements.
32
+ * The deny applies to principals matching the patterns, so those principals
33
+ * can be skipped for the deny statement's actions.
34
+ */
35
+ const DENY_POSITIVE_OPERATORS = new Set(['stringlike', 'stringequals', 'arnlike', 'arnequals']);
36
+ /**
37
+ * Converts an IAM wildcard pattern to a case-sensitive anchored RegExp.
38
+ * Handles `*` (any characters) and `?` (single character) wildcards.
39
+ * Does not handle replacement variables — callers must ensure patterns
40
+ * with variables are excluded before calling this.
41
+ *
42
+ * @param pattern the IAM pattern string (e.g. `arn:aws:iam::*:role/ec2/*`)
43
+ * @returns an anchored case-sensitive RegExp
44
+ */
45
+ function iamPatternToRegex(pattern) {
46
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
47
+ const withWildcards = escaped.replace(/\*/g, '.*').replace(/\?/g, '.');
48
+ return new RegExp(`^${withWildcards}$`);
49
+ }
50
+ /**
51
+ * Checks whether any value in an array contains a replacement variable (`${...}`).
52
+ *
53
+ * @param values the condition values to check
54
+ * @returns true if any value contains a replacement variable
55
+ */
56
+ function hasAnyReplacementVariable(values) {
57
+ return values.some((v) => v.includes('${'));
58
+ }
59
+ /**
60
+ * Builds a PrincipalArnFilter from a resource policy by extracting
61
+ * aws:PrincipalArn patterns from Allow statements with wildcard principals.
62
+ *
63
+ * The filter is only constructed if **every** wildcard-Allow statement has
64
+ * a usable aws:PrincipalArn condition. If any wildcard-Allow statement lacks
65
+ * one, the filter cannot safely exclude principals and undefined is returned.
66
+ *
67
+ * @param resourcePolicy the raw resource policy document, or undefined/null if none
68
+ * @returns a PrincipalArnFilter if filtering is possible, undefined otherwise
69
+ */
70
+ function buildPrincipalArnFilter(resourcePolicy) {
71
+ if (!resourcePolicy) {
72
+ return undefined;
73
+ }
74
+ const policy = (0, iam_policy_1.loadPolicy)(resourcePolicy);
75
+ const allAllowPatterns = [];
76
+ const exemptAccounts = new Set();
77
+ let hasAnyWildcardAllow = false;
78
+ for (const statement of policy.statements()) {
79
+ if (!statement.isAllow()) {
80
+ continue;
81
+ }
82
+ // Check if this Allow statement has a wildcard principal, and collect
83
+ // explicit account principals whose accounts should be exempt from filtering
84
+ let hasWildcardPrincipal = false;
85
+ if (statement.isPrincipalStatement()) {
86
+ for (const principal of statement.principals()) {
87
+ if (principal.isWildcardPrincipal()) {
88
+ hasWildcardPrincipal = true;
89
+ }
90
+ else if (principal.isAccountPrincipal()) {
91
+ exemptAccounts.add(principal.accountId());
92
+ }
93
+ }
94
+ }
95
+ else if (statement.isNotPrincipalStatement()) {
96
+ // NotPrincipal Allow effectively allows everyone except the named principals,
97
+ // so it acts like a wildcard — we can't filter
98
+ return undefined;
99
+ }
100
+ if (!hasWildcardPrincipal) {
101
+ continue;
102
+ }
103
+ hasAnyWildcardAllow = true;
104
+ // Look for aws:PrincipalArn conditions with supported operators
105
+ let statementHasUsableFilter = false;
106
+ const conditions = statement.conditions();
107
+ for (const cond of conditions) {
108
+ if (cond.conditionKey().toLowerCase() !== 'aws:principalarn') {
109
+ continue;
110
+ }
111
+ const baseOp = cond.operation().baseOperator().toLowerCase();
112
+ if (!ALLOW_PRINCIPAL_ARN_OPERATORS.has(baseOp)) {
113
+ continue;
114
+ }
115
+ const values = cond.conditionValues();
116
+ // If any value has a replacement variable, ignore the entire condition
117
+ if (hasAnyReplacementVariable(values)) {
118
+ continue;
119
+ }
120
+ // All values count as a usable filter for the statement — even literal
121
+ // ARNs constrain which principals can match. However, only wildcard
122
+ // values are added as filter patterns; literal ARNs are already handled
123
+ // as specific principals by accountsToCheckBasedOnResourcePolicy.
124
+ for (const value of values) {
125
+ statementHasUsableFilter = true;
126
+ if (value.includes('*') || value.includes('?')) {
127
+ allAllowPatterns.push(iamPatternToRegex(value));
128
+ }
129
+ }
130
+ }
131
+ // If this wildcard-Allow has no usable PrincipalArn condition,
132
+ // it could allow any principal — filtering is not safe
133
+ if (!statementHasUsableFilter) {
134
+ return undefined;
135
+ }
136
+ }
137
+ // --- Deny statement extraction ---
138
+ const denyDerivedAllowEntries = [];
139
+ const denyEntries = [];
140
+ for (const statement of policy.statements()) {
141
+ if (statement.isAllow())
142
+ continue;
143
+ if (!statement.isActionStatement())
144
+ continue;
145
+ if (statement.isNotResourceStatement())
146
+ continue;
147
+ if (statement.isNotPrincipalStatement())
148
+ continue;
149
+ // Must have a wildcard principal
150
+ let hasWildcardPrincipal = false;
151
+ if (statement.isPrincipalStatement()) {
152
+ for (const principal of statement.principals()) {
153
+ if (principal.isWildcardPrincipal()) {
154
+ hasWildcardPrincipal = true;
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ if (!hasWildcardPrincipal)
160
+ continue;
161
+ // Resource must include '*' or be non-existent
162
+ if (statement.isResourceStatement()) {
163
+ if (!statement.resources().some((r) => r.isAllResources()))
164
+ continue;
165
+ }
166
+ // Must have exactly one condition and it must be aws:PrincipalArn
167
+ const conditions = statement.conditions();
168
+ if (conditions.length !== 1)
169
+ continue;
170
+ const cond = conditions[0];
171
+ if (cond.conditionKey().toLowerCase() !== 'aws:principalarn')
172
+ continue;
173
+ if (cond.operation().isIfExists())
174
+ continue;
175
+ const values = cond.conditionValues();
176
+ if (hasAnyReplacementVariable(values))
177
+ continue;
178
+ const baseOp = cond.operation().baseOperator().toLowerCase();
179
+ const actionPatterns = statement.actions().map((a) => a.value());
180
+ const principalPatterns = values.map(iamPatternToRegex);
181
+ if (DENY_NEGATIVE_OPERATORS.has(baseOp)) {
182
+ denyDerivedAllowEntries.push({ actionPatterns, principalPatterns });
183
+ }
184
+ else if (DENY_POSITIVE_OPERATORS.has(baseOp)) {
185
+ denyEntries.push({ actionPatterns, principalPatterns });
186
+ }
187
+ }
188
+ // Return a filter if there's anything useful
189
+ const hasAllowPatterns = hasAnyWildcardAllow && allAllowPatterns.length > 0;
190
+ const hasDenyInfo = denyDerivedAllowEntries.length > 0 || denyEntries.length > 0;
191
+ if (!hasAllowPatterns && !hasDenyInfo) {
192
+ return undefined;
193
+ }
194
+ return {
195
+ allowPatterns: hasAllowPatterns ? allAllowPatterns : [],
196
+ denyDerivedAllowEntries,
197
+ denyEntries,
198
+ exemptAccounts
199
+ };
200
+ }
201
+ /**
202
+ * Checks whether an action matches any of the given action patterns using
203
+ * IAM wildcard semantics.
204
+ *
205
+ * @param action the action being simulated (e.g., 'secretsmanager:GetSecretValue')
206
+ * @param patterns the action patterns from a deny statement
207
+ * @returns true if the action matches at least one pattern
208
+ */
209
+ function actionMatchesAnyPattern(action, patterns) {
210
+ return patterns.some((pattern) => (0, iam_utils_1.actionMatchesPattern)(action, pattern));
211
+ }
212
+ /**
213
+ * Tests whether a principal ARN passes the PrincipalArnFilter for a given action.
214
+ *
215
+ * Principals in the resource account or an exempt account bypass the positive
216
+ * allow-side filtering (allow patterns and deny-derived allow entries) because
217
+ * they may be granted access through account-level principal grants independent
218
+ * of any PrincipalArn conditions. However, they are still subject to deny-side
219
+ * filtering (deny entries) because an explicit deny in a resource policy applies
220
+ * regardless of the principal's account.
221
+ *
222
+ * @param principal the principal ARN to test
223
+ * @param action the action being simulated
224
+ * @param resourceAccount the account that owns the resource being checked
225
+ * @param filter the filter to apply
226
+ * @returns true if the principal should be simulated, false if it can be skipped
227
+ */
228
+ function principalMatchesFilter(principal, action, resourceAccount, filter) {
229
+ const accountId = (0, iam_utils_1.splitArnParts)(principal).accountId;
230
+ const isExempt = accountId === resourceAccount || filter.exemptAccounts.has(accountId ?? '');
231
+ // Allow patterns from Allow statements: exempt principals bypass this check
232
+ // because they may be granted access through account-level principal grants
233
+ // independent of any PrincipalArn conditions on wildcard statements.
234
+ if (!isExempt && filter.allowPatterns.length > 0) {
235
+ if (!filter.allowPatterns.some((pattern) => pattern.test(principal)))
236
+ return false;
237
+ }
238
+ // Deny-derived filtering applies to ALL principals regardless of account.
239
+ // An explicit deny in a resource policy applies universally.
240
+ // For each deny-derived allow entry whose actions match,
241
+ // the principal must match at least one principal pattern
242
+ for (const entry of filter.denyDerivedAllowEntries) {
243
+ if (actionMatchesAnyPattern(action, entry.actionPatterns)) {
244
+ if (!entry.principalPatterns.some((p) => p.test(principal)))
245
+ return false;
246
+ }
247
+ }
248
+ // For each deny entry whose actions match,
249
+ // skip if the principal matches any principal pattern
250
+ for (const entry of filter.denyEntries) {
251
+ if (actionMatchesAnyPattern(action, entry.actionPatterns)) {
252
+ if (entry.principalPatterns.some((p) => p.test(principal)))
253
+ return false;
254
+ }
255
+ }
256
+ return true;
257
+ }
258
+ //# sourceMappingURL=principalArnFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principalArnFilter.js","sourceRoot":"","sources":["../../../src/whoCan/principalArnFilter.ts"],"names":[],"mappings":";;AA4FA,8CAIC;AAuBD,0DA6IC;AA8BD,wDAoCC;AAtUD,wDAAoD;AACpD,sDAA4E;AAE5E;;;;GAIG;AACH,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,YAAY;IACZ,cAAc;IACd,SAAS;IACT,WAAW;CACZ,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,eAAe;IACf,iBAAiB;IACjB,YAAY;IACZ,cAAc;CACf,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;AAmD/F;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtE,OAAO,IAAI,MAAM,CAAC,IAAI,aAAa,GAAG,CAAC,CAAA;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAAC,MAAgB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,uBAAuB,CAAC,cAAmB;IACzD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,uBAAU,EAAC,cAAc,CAAC,CAAA;IACzC,MAAM,gBAAgB,GAAa,EAAE,CAAA;IACrC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;IACxC,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzB,SAAQ;QACV,CAAC;QAED,sEAAsE;QACtE,6EAA6E;QAC7E,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAChC,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBACpC,oBAAoB,GAAG,IAAI,CAAA;gBAC7B,CAAC;qBAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBAC1C,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAA;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/C,8EAA8E;YAC9E,+CAA+C;YAC/C,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QAED,mBAAmB,GAAG,IAAI,CAAA;QAE1B,gEAAgE;QAChE,IAAI,wBAAwB,GAAG,KAAK,CAAA;QACpC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;QAEzC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAC7D,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAA;YAC5D,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAErC,uEAAuE;YACvE,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,SAAQ;YACV,CAAC;YAED,uEAAuE;YACvE,oEAAoE;YACpE,wEAAwE;YACxE,kEAAkE;YAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,wBAAwB,GAAG,IAAI,CAAA;gBAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,uDAAuD;QACvD,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,uBAAuB,GAAsB,EAAE,CAAA;IACrD,MAAM,WAAW,GAAsB,EAAE,CAAA;IAEzC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,OAAO,EAAE;YAAE,SAAQ;QACjC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;YAAE,SAAQ;QAC5C,IAAI,SAAS,CAAC,sBAAsB,EAAE;YAAE,SAAQ;QAChD,IAAI,SAAS,CAAC,uBAAuB,EAAE;YAAE,SAAQ;QAEjD,iCAAiC;QACjC,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAChC,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBACpC,oBAAoB,GAAG,IAAI,CAAA;oBAC3B,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,oBAAoB;YAAE,SAAQ;QAEnC,+CAA+C;QAC/C,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAAE,SAAQ;QACtE,CAAC;QAED,kEAAkE;QAClE,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAErC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,KAAK,kBAAkB;YAAE,SAAQ;QACtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE;YAAE,SAAQ;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACrC,IAAI,yBAAyB,CAAC,MAAM,CAAC;YAAE,SAAQ;QAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAA;QAC5D,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAEvD,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,uBAAuB,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACrE,CAAC;aAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,mBAAmB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3E,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IAEhF,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO;QACL,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACvD,uBAAuB;QACvB,WAAW;QACX,cAAc;KACf,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,MAAc,EAAE,QAAkB;IACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,gCAAoB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,MAAc,EACd,eAAuB,EACvB,MAA0B;IAE1B,MAAM,SAAS,GAAG,IAAA,yBAAa,EAAC,SAAS,CAAC,CAAC,SAAS,CAAA;IACpD,MAAM,QAAQ,GAAG,SAAS,KAAK,eAAe,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IAE5F,4EAA4E;IAC5E,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IACpF,CAAC;IAED,0EAA0E;IAC1E,6DAA6D;IAE7D,yDAAyD;IACzD,0DAA0D;IAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACnD,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC3E,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,sDAAsD;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { IamCollectClient } from '../collect/client.js';
2
+ import { type WhoCanPrincipalScope } from './whoCan.js';
3
+ /**
4
+ * Resolves a `WhoCanPrincipalScope` into concrete sets of account IDs and principal ARNs
5
+ * using the collect client for OU lookups.
6
+ *
7
+ * `scope.principals` are kept separate from `scope.accounts` — a scope like
8
+ * `{ principals: ['arn:...:role/Foo'] }` tests only that one role and does NOT
9
+ * expand to search every principal in Foo's account.
10
+ *
11
+ * @param client The collect client used to resolve OU paths to account IDs.
12
+ * @param scope The principal scope to resolve.
13
+ * @returns An object with `accounts` and `principals` sets.
14
+ */
15
+ export declare function resolvePrincipalScope(client: IamCollectClient, scope: WhoCanPrincipalScope): Promise<{
16
+ accounts: Set<string>;
17
+ principals: Set<string>;
18
+ }>;
19
+ /**
20
+ * Intersects the resource-policy-derived scope with a caller-supplied principal scope.
21
+ * Returns the narrowed set of accounts (for full-account search) and principals
22
+ * (for individual principal testing).
23
+ *
24
+ * @param resourcePolicyAccounts Account IDs derived from the resource policy.
25
+ * @param resourcePolicyPrincipals Individual principal ARNs derived from the resource policy.
26
+ * @param resourcePolicyCheckAllAccounts Whether the resource policy implies all accounts should be checked.
27
+ * @param scopeAccounts Account IDs from the resolved principal scope.
28
+ * @param suggestedPrincipals Principal ARNs from the resolved principal scope.
29
+ * @returns The intersected accounts and principals to search.
30
+ */
31
+ export declare function intersectWithPrincipalScope(resourcePolicyAccounts: string[], resourcePolicyPrincipals: string[], resourcePolicyCheckAllAccounts: boolean, scopeAccounts: Set<string>, scopePrincipals: Set<string>): {
32
+ accounts: string[];
33
+ principals: string[];
34
+ };
35
+ //# sourceMappingURL=principalScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principalScope.d.ts","sourceRoot":"","sources":["../../../src/whoCan/principalScope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEvD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAuB7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,sBAAsB,EAAE,MAAM,EAAE,EAChC,wBAAwB,EAAE,MAAM,EAAE,EAClC,8BAA8B,EAAE,OAAO,EACvC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAwD9C"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvePrincipalScope = resolvePrincipalScope;
4
+ exports.intersectWithPrincipalScope = intersectWithPrincipalScope;
5
+ const iam_utils_1 = require("@actsecurity/iam-utils");
6
+ /**
7
+ * Resolves a `WhoCanPrincipalScope` into concrete sets of account IDs and principal ARNs
8
+ * using the collect client for OU lookups.
9
+ *
10
+ * `scope.principals` are kept separate from `scope.accounts` — a scope like
11
+ * `{ principals: ['arn:...:role/Foo'] }` tests only that one role and does NOT
12
+ * expand to search every principal in Foo's account.
13
+ *
14
+ * @param client The collect client used to resolve OU paths to account IDs.
15
+ * @param scope The principal scope to resolve.
16
+ * @returns An object with `accounts` and `principals` sets.
17
+ */
18
+ async function resolvePrincipalScope(client, scope) {
19
+ const accounts = new Set();
20
+ const principals = new Set();
21
+ for (const p of scope.principals ?? []) {
22
+ principals.add(p);
23
+ }
24
+ for (const a of scope.accounts ?? []) {
25
+ accounts.add(a);
26
+ }
27
+ for (const ouPath of scope.ous ?? []) {
28
+ const parts = ouPath.split('/');
29
+ const orgId = parts[0];
30
+ const pathParts = parts.slice(1);
31
+ const [, ouAccounts] = await client.getAccountsForOrgPath(orgId, pathParts);
32
+ for (const a of ouAccounts) {
33
+ accounts.add(a);
34
+ }
35
+ }
36
+ return { accounts, principals };
37
+ }
38
+ /**
39
+ * Intersects the resource-policy-derived scope with a caller-supplied principal scope.
40
+ * Returns the narrowed set of accounts (for full-account search) and principals
41
+ * (for individual principal testing).
42
+ *
43
+ * @param resourcePolicyAccounts Account IDs derived from the resource policy.
44
+ * @param resourcePolicyPrincipals Individual principal ARNs derived from the resource policy.
45
+ * @param resourcePolicyCheckAllAccounts Whether the resource policy implies all accounts should be checked.
46
+ * @param scopeAccounts Account IDs from the resolved principal scope.
47
+ * @param suggestedPrincipals Principal ARNs from the resolved principal scope.
48
+ * @returns The intersected accounts and principals to search.
49
+ */
50
+ function intersectWithPrincipalScope(resourcePolicyAccounts, resourcePolicyPrincipals, resourcePolicyCheckAllAccounts, scopeAccounts, scopePrincipals) {
51
+ // Accounts: intersection of resource policy accounts and scope accounts
52
+ const rpAccountSet = new Set(resourcePolicyAccounts);
53
+ const accounts = resourcePolicyCheckAllAccounts
54
+ ? Array.from(scopeAccounts)
55
+ : resourcePolicyAccounts.filter((a) => scopeAccounts.has(a));
56
+ const accountsResultSet = new Set(accounts);
57
+ // Principals: merge from both sides, filtering by the other side's scope
58
+ const principalSet = new Set();
59
+ // From resource policy principals: keep if the principal's account is in scopeAccounts,
60
+ // OR the principal ARN is in scopePrincipals.
61
+ for (const p of resourcePolicyPrincipals) {
62
+ if ((0, iam_utils_1.isServicePrincipal)(p)) {
63
+ if (scopePrincipals.has(p)) {
64
+ principalSet.add(p);
65
+ }
66
+ }
67
+ else {
68
+ const accountId = (0, iam_utils_1.splitArnParts)(p).accountId;
69
+ if (accountId && accountsResultSet.has(accountId)) {
70
+ // Account loop already covers this principal — skip
71
+ continue;
72
+ }
73
+ if (accountId && scopeAccounts.has(accountId)) {
74
+ principalSet.add(p);
75
+ }
76
+ else if (scopePrincipals.has(p)) {
77
+ principalSet.add(p);
78
+ }
79
+ }
80
+ }
81
+ const rpPrincipalSet = new Set(resourcePolicyPrincipals);
82
+ // From scope principals: keep if the principal's account is in resource policy accounts
83
+ // or resourcePolicyCheckAllAccounts is true. Exclude if account is already in accounts result.
84
+ // Service principals only survive if resourcePolicyCheckAllAccounts or the resource policy named them.
85
+ for (const p of scopePrincipals) {
86
+ if ((0, iam_utils_1.isServicePrincipal)(p)) {
87
+ if (resourcePolicyCheckAllAccounts || rpPrincipalSet.has(p)) {
88
+ principalSet.add(p);
89
+ }
90
+ }
91
+ else {
92
+ const accountId = (0, iam_utils_1.splitArnParts)(p).accountId;
93
+ if (accountId && accountsResultSet.has(accountId)) {
94
+ // Account loop already covers this principal — skip
95
+ continue;
96
+ }
97
+ if (resourcePolicyCheckAllAccounts || (accountId && rpAccountSet.has(accountId))) {
98
+ principalSet.add(p);
99
+ }
100
+ }
101
+ }
102
+ return { accounts, principals: Array.from(principalSet) };
103
+ }
104
+ //# sourceMappingURL=principalScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principalScope.js","sourceRoot":"","sources":["../../../src/whoCan/principalScope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { type BlockedReason, type EvaluationResult, type RequestAnalysis } from '@actsecurity/iam-simulate';
2
+ import type { DeniedWhoCanExecutionResultWithDetails } from './WhoCanWorker.js';
3
+ import type { WhoCanDenyDetail } from './whoCan.js';
4
+ /**
5
+ * A lightweight representation of RequestAnalysis containing only the result fields
6
+ * of the various policy analyses (identity, resource, SCP, RCP, permission boundary).
7
+ */
8
+ export interface LightResourceAnalysis {
9
+ result: RequestAnalysis['result'];
10
+ sameAccount?: boolean;
11
+ identityAnalysis?: Pick<NonNullable<RequestAnalysis['identityAnalysis']>, 'result'>;
12
+ resourceAnalysis?: Pick<NonNullable<RequestAnalysis['resourceAnalysis']>, 'result'>;
13
+ scpAnalysis?: Pick<NonNullable<RequestAnalysis['scpAnalysis']>, 'result'>;
14
+ rcpAnalysis?: Pick<NonNullable<RequestAnalysis['rcpAnalysis']>, 'result'>;
15
+ permissionBoundaryAnalysis?: Pick<NonNullable<RequestAnalysis['permissionBoundaryAnalysis']>, 'result'>;
16
+ blockedBy: Set<BlockedReason>;
17
+ }
18
+ /**
19
+ * A LightResourceAnalysis extended with resource pattern and type information.
20
+ * Used for wildcard resource analyses to provide details on each matched pattern.
21
+ */
22
+ export interface LightResourceAnalysisWithPattern extends LightResourceAnalysis {
23
+ /**
24
+ * The specific resource pattern that was analyzed, most likely found in a policy statement's Resource field. This is used to provide more granular details in wildcard resource analyses, where multiple patterns may match the requested resource.
25
+ */
26
+ pattern: string;
27
+ /**
28
+ * The resource type that was tested.
29
+ */
30
+ resourceType: string;
31
+ }
32
+ /**
33
+ * A light request analysis for a single resource.
34
+ */
35
+ export interface SingleResourceLightRequestAnalysis extends LightResourceAnalysis {
36
+ type: 'single';
37
+ overallResult: EvaluationResult;
38
+ }
39
+ /**
40
+ * A light request analysis for a wildcard resource with multiple patterns.
41
+ * Used for wildcard resource analyses to provide details on each matched pattern.
42
+ */
43
+ export interface WildcardResourceLightRequestAnalysis {
44
+ type: 'wildcard';
45
+ /**
46
+ * The overall result of the wildcard resource analysis, which is typically a combination of the results of the individual pattern analyses. This provides a high-level summary of whether the requested action is allowed or denied across all matched patterns, while the individual pattern analyses provide more granular details.
47
+ */
48
+ overallResult: EvaluationResult;
49
+ /**
50
+ * The details of the analyses for each matched resource pattern/resource type pair.
51
+ */
52
+ patterns: LightResourceAnalysisWithPattern[];
53
+ }
54
+ /**
55
+ * A light version of RequestAnalysis containing only the result and sameAccount fields,
56
+ * along with the result fields of the various analyses.
57
+ */
58
+ export type LightRequestAnalysis = SingleResourceLightRequestAnalysis | WildcardResourceLightRequestAnalysis;
59
+ /**
60
+ * Convert a full RequestAnalysis to a LightRequestAnalysis.
61
+ *
62
+ * @param executionResult - The denied execution result containing the RequestAnalysis to convert
63
+ * @returns A LightRequestAnalysis with only the essential fields
64
+ */
65
+ export declare function toLightRequestAnalysis(executionResult: DeniedWhoCanExecutionResultWithDetails): LightRequestAnalysis;
66
+ /**
67
+ * Gets the denial reasons for a denied SimulationResult.
68
+ *
69
+ * @param executionResult - The denied execution result containing the RequestAnalysis with denial reasons
70
+ * @returns A WhoCanDenyDetail object containing the denial reasons and other details to be returned to the user
71
+ */
72
+ export declare function convertToDenialDetails(executionResult: DeniedWhoCanExecutionResultWithDetails): WhoCanDenyDetail;
73
+ //# sourceMappingURL=requestAnalysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestAnalysis.d.ts","sourceRoot":"","sources":["../../../src/whoCan/requestAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IACjC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACnF,gBAAgB,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACnF,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACzE,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACzE,0BAA0B,CAAC,EAAE,IAAI,CAC/B,WAAW,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC,EAC1D,QAAQ,CACT,CAAA;IACD,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAiC,SAAQ,qBAAqB;IAC7E;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kCAAmC,SAAQ,qBAAqB;IAC/E,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,EAAE,gBAAgB,CAAA;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,UAAU,CAAA;IAEhB;;OAEG;IACH,aAAa,EAAE,gBAAgB,CAAA;IAE/B;;OAEG;IACH,QAAQ,EAAE,gCAAgC,EAAE,CAAA;CAC7C;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC9B,kCAAkC,GAAG,oCAAoC,CAAA;AA2B3E;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,sCAAsC,GACtD,oBAAoB,CAqBtB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,sCAAsC,GACtD,gBAAgB,CA0BlB"}