@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,73 @@
1
+ import { type JobResult } from '@actsecurity/job';
2
+ import { IamCollectClient } from '../collect/client.js';
3
+ import { type S3AbacOverride } from '../utils/s3Abac.js';
4
+ import { PullBasedJobRunner } from '../workers/JobRunner.js';
5
+ import { type LightRequestAnalysis } from './requestAnalysis.js';
6
+ import { type WhoCanAllowed, type WhoCanDenyDetail } from './whoCan.js';
7
+ import { type WhoCanExecutionResult, type WhoCanWorkItem } from './WhoCanWorker.js';
8
+ /**
9
+ * A work item tagged with its owning request ID, used by the main-thread
10
+ * runner so that simulation results can be routed back to the correct request.
11
+ */
12
+ export interface TaggedWhoCanWorkItem extends WhoCanWorkItem {
13
+ /** The request ID this work item belongs to. */
14
+ requestId: string;
15
+ }
16
+ /**
17
+ * Properties attached to each job so the requestId survives through to onComplete.
18
+ */
19
+ interface MainThreadJobProperties {
20
+ /** The request ID this job belongs to. */
21
+ requestId: string;
22
+ /** Whether deny details should be collected for this work item's request. */
23
+ collectDenyDetails: boolean;
24
+ }
25
+ /**
26
+ * Dequeues the next tagged work item from the processor's FIFO scheduler.
27
+ *
28
+ * @returns the next tagged work item, or undefined if none are ready.
29
+ */
30
+ export type DequeueWork = () => TaggedWhoCanWorkItem | undefined;
31
+ /**
32
+ * Called when a simulation completes (allowed, denied, or error). Routes
33
+ * the result back to the processor by requestId.
34
+ *
35
+ * @param requestId - The request this result belongs to.
36
+ * @param result - The simulation result (fulfilled with WhoCanAllowed or undefined, or rejected).
37
+ */
38
+ export type OnSimulationResult = (requestId: string, result: JobResult<WhoCanAllowed | undefined, Record<string, unknown>>) => void;
39
+ /**
40
+ * Checks whether deny details should be included for a denied simulation.
41
+ *
42
+ * @param requestId - The request this check belongs to.
43
+ * @param lightAnalysis - The light analysis for the denied simulation.
44
+ * @returns true if deny details should be collected and delivered.
45
+ */
46
+ export type OnCheckDenyDetails = (requestId: string, lightAnalysis: LightRequestAnalysis) => boolean;
47
+ /**
48
+ * Called when deny details are ready to be delivered.
49
+ *
50
+ * @param requestId - The request this detail belongs to.
51
+ * @param detail - The deny detail record.
52
+ */
53
+ export type OnDenyDetail = (requestId: string, detail: WhoCanDenyDetail) => void;
54
+ /**
55
+ * Creates a main-thread simulation runner that pulls tagged work items from
56
+ * the processor's FIFO scheduler and routes results back by requestId.
57
+ *
58
+ * The requestId is threaded through the job's properties so it is available
59
+ * in onComplete without needing the workerId.
60
+ *
61
+ * @param dequeueWork - Function to dequeue the next tagged work item.
62
+ * @param onSimulationResult - Callback for simulation results.
63
+ * @param onCheckDenyDetails - Callback to check whether to collect deny details.
64
+ * @param onDenyDetail - Callback for deny detail delivery.
65
+ * @param collectClient - The IAM collect client for fetching policy data.
66
+ * @param s3AbacOverride - Optional override for S3 ABAC when checking S3 Bucket access.
67
+ * @param collectGrantDetails - Whether to collect grant details for allowed simulations.
68
+ * @param concurrency - The number of concurrent simulations to run on the main thread. Defaults to 50.
69
+ * @returns a PullBasedJobRunner that processes tagged whoCan work items.
70
+ */
71
+ export declare function createMainThreadStreamingWorkQueue(dequeueWork: DequeueWork, onSimulationResult: OnSimulationResult, onCheckDenyDetails: OnCheckDenyDetails, onDenyDetail: OnDenyDetail, collectClient: IamCollectClient, s3AbacOverride: S3AbacOverride | undefined, collectGrantDetails: boolean, concurrency?: number): PullBasedJobRunner<WhoCanExecutionResult, MainThreadJobProperties, TaggedWhoCanWorkItem>;
72
+ export {};
73
+ //# sourceMappingURL=WhoCanMainThreadWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhoCanMainThreadWorker.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanMainThreadWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAiB,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElG;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,UAAU,uBAAuB;IAC/B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IAEjB,6EAA6E;IAC7E,kBAAkB,EAAE,OAAO,CAAA;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAEhE;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAClE,IAAI,CAAA;AAET;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,KAAK,OAAO,CAAA;AAEpG;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,gBAAgB,EAC/B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,mBAAmB,EAAE,OAAO,EAC5B,WAAW,GAAE,MAAW,4FAoEzB"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMainThreadStreamingWorkQueue = createMainThreadStreamingWorkQueue;
4
+ const JobRunner_js_1 = require("../workers/JobRunner.js");
5
+ const requestAnalysis_js_1 = require("./requestAnalysis.js");
6
+ const WhoCanWorker_js_1 = require("./WhoCanWorker.js");
7
+ /**
8
+ * Creates a main-thread simulation runner that pulls tagged work items from
9
+ * the processor's FIFO scheduler and routes results back by requestId.
10
+ *
11
+ * The requestId is threaded through the job's properties so it is available
12
+ * in onComplete without needing the workerId.
13
+ *
14
+ * @param dequeueWork - Function to dequeue the next tagged work item.
15
+ * @param onSimulationResult - Callback for simulation results.
16
+ * @param onCheckDenyDetails - Callback to check whether to collect deny details.
17
+ * @param onDenyDetail - Callback for deny detail delivery.
18
+ * @param collectClient - The IAM collect client for fetching policy data.
19
+ * @param s3AbacOverride - Optional override for S3 ABAC when checking S3 Bucket access.
20
+ * @param collectGrantDetails - Whether to collect grant details for allowed simulations.
21
+ * @param concurrency - The number of concurrent simulations to run on the main thread. Defaults to 50.
22
+ * @returns a PullBasedJobRunner that processes tagged whoCan work items.
23
+ */
24
+ function createMainThreadStreamingWorkQueue(dequeueWork, onSimulationResult, onCheckDenyDetails, onDenyDetail, collectClient, s3AbacOverride, collectGrantDetails, concurrency = 50) {
25
+ return new JobRunner_js_1.PullBasedJobRunner(concurrency, async () => {
26
+ return dequeueWork();
27
+ }, (taggedItem) => {
28
+ const { requestId, ...workItem } = taggedItem;
29
+ return {
30
+ properties: { requestId, collectDenyDetails: workItem.collectDenyDetails },
31
+ execute: async (context) => {
32
+ return (0, WhoCanWorker_js_1.executeWhoCan)(workItem, collectClient, {
33
+ s3AbacOverride,
34
+ collectDenyDetails: workItem.collectDenyDetails,
35
+ collectGrantDetails,
36
+ strictContextKeys: workItem.strictContextKeys
37
+ });
38
+ }
39
+ };
40
+ }, async (result) => {
41
+ const { requestId, collectDenyDetails } = result.properties;
42
+ if (result.status === 'fulfilled') {
43
+ const executionResult = result.value;
44
+ if (executionResult.type === 'allowed') {
45
+ onSimulationResult(requestId, {
46
+ status: 'fulfilled',
47
+ value: executionResult.allowed,
48
+ properties: {}
49
+ });
50
+ }
51
+ else {
52
+ // Denied — handle deny details BEFORE reporting the simulation result,
53
+ // because onSimulationResult may trigger request completion checks.
54
+ const hasDetails = executionResult.type === 'denied_single' || executionResult.type === 'denied_wildcard';
55
+ if (collectDenyDetails && hasDetails) {
56
+ const lightAnalysis = (0, requestAnalysis_js_1.toLightRequestAnalysis)(executionResult);
57
+ const shouldInclude = onCheckDenyDetails(requestId, lightAnalysis);
58
+ if (shouldInclude) {
59
+ onDenyDetail(requestId, (0, requestAnalysis_js_1.convertToDenialDetails)(executionResult));
60
+ }
61
+ }
62
+ // Now report the denied simulation result (may trigger completion check)
63
+ onSimulationResult(requestId, {
64
+ status: 'fulfilled',
65
+ value: undefined,
66
+ properties: {}
67
+ });
68
+ }
69
+ }
70
+ else {
71
+ // Error case
72
+ onSimulationResult(requestId, {
73
+ status: 'rejected',
74
+ reason: result.reason,
75
+ properties: {}
76
+ });
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=WhoCanMainThreadWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhoCanMainThreadWorker.js","sourceRoot":"","sources":["../../../src/whoCan/WhoCanMainThreadWorker.ts"],"names":[],"mappings":";;AAqFA,gFA4EC;AA9JD,0DAA4D;AAC5D,6DAI6B;AAE7B,uDAAkG;AA0DlG;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,kCAAkC,CAChD,WAAwB,EACxB,kBAAsC,EACtC,kBAAsC,EACtC,YAA0B,EAC1B,aAA+B,EAC/B,cAA0C,EAC1C,mBAA4B,EAC5B,cAAsB,EAAE;IAExB,OAAO,IAAI,iCAAkB,CAK3B,WAAW,EACX,KAAK,IAAI,EAAE;QACT,OAAO,WAAW,EAAE,CAAA;IACtB,CAAC,EACD,CAAC,UAAU,EAAE,EAAE;QACb,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAA;QAC7C,OAAO;YACL,UAAU,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE;YAC1E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACzB,OAAO,IAAA,+BAAa,EAAC,QAAQ,EAAE,aAAa,EAAE;oBAC5C,cAAc;oBACd,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;oBAC/C,mBAAmB;oBACnB,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;iBAC9C,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;QAE3D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAA;YACpC,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvC,kBAAkB,CAAC,SAAS,EAAE;oBAC5B,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,eAAe,CAAC,OAAO;oBAC9B,UAAU,EAAE,EAAE;iBACf,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,oEAAoE;gBACpE,MAAM,UAAU,GACd,eAAe,CAAC,IAAI,KAAK,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,iBAAiB,CAAA;gBAExF,IAAI,kBAAkB,IAAI,UAAU,EAAE,CAAC;oBACrC,MAAM,aAAa,GAAG,IAAA,2CAAsB,EAAC,eAAe,CAAC,CAAA;oBAC7D,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAElE,IAAI,aAAa,EAAE,CAAC;wBAClB,YAAY,CAAC,SAAS,EAAE,IAAA,2CAAsB,EAAC,eAAe,CAAC,CAAC,CAAA;oBAClE,CAAC;gBACH,CAAC;gBAED,yEAAyE;gBACzE,kBAAkB,CAAC,SAAS,EAAE;oBAC5B,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,EAAE;iBACf,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa;YACb,kBAAkB,CAAC,SAAS,EAAE;gBAC5B,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,EAAE;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,400 @@
1
+ import { type TopLevelConfig } from '@actsecurity/iam-collect';
2
+ import { type ClientFactoryPlugin } from '../collect/collect.js';
3
+ import { type S3AbacOverride } from '../utils/s3Abac.js';
4
+ import { type LightRequestAnalysis } from './requestAnalysis.js';
5
+ import { type WhoCanPrincipalScope, type WhoCanResponse } from './whoCan.js';
6
+ import { type WorkerBootstrapPlugin } from './workerBootstrapPlugin.js';
7
+ export type { WorkerBootstrapPlugin } from './workerBootstrapPlugin.js';
8
+ /**
9
+ * Configuration for creating a WhoCanProcessor. These settings are fixed
10
+ * for the lifetime of the processor and baked into worker threads at creation time.
11
+ */
12
+ export interface WhoCanProcessorConfig {
13
+ /** The collect configurations for loading IAM data. */
14
+ collectConfigs: TopLevelConfig[];
15
+ /** The AWS partition to use (e.g. 'aws', 'aws-cn'). */
16
+ partition: string;
17
+ tuning?: {
18
+ /**
19
+ * The number of worker threads to use beyond the main thread. Defaults to number of CPUs - 1.
20
+ */
21
+ workerThreads?: number;
22
+ /**
23
+ * The concurrency level for processing simulations on the main thread. Defaults to 50.
24
+ */
25
+ mainThreadConcurrency?: number;
26
+ /**
27
+ * The concurrency level for processing simulations on worker threads.
28
+ * This is the value for EACH worker.
29
+ * Defaults to 50.
30
+ */
31
+ perWorkerConcurrency?: number;
32
+ /**
33
+ * The concurrency level for the shared preparation queue (account/principal fetches
34
+ * across all active requests). Defaults to min(50, max(1, number of CPUs * 2)).
35
+ */
36
+ preparationConcurrency?: number;
37
+ /**
38
+ * The maximum number of requests that may be actively expanded into scenarios
39
+ * at once. Later requests remain as lightweight entries in pendingRequests.
40
+ * Defaults to 30.
41
+ */
42
+ maxRequestsInProgress?: number;
43
+ };
44
+ /** Optional plugin to wrap the collect client with a custom implementation. */
45
+ clientFactoryPlugin?: ClientFactoryPlugin;
46
+ /**
47
+ * Optional plugin that runs once per worker thread at startup before any work
48
+ * is processed. Use this for loading instrumentation, initializing logging
49
+ * context, or other worker-lifetime setup. If the bootstrap function throws,
50
+ * the worker fails and the processor surfaces the error.
51
+ */
52
+ workerBootstrapPlugin?: WorkerBootstrapPlugin;
53
+ /** An override for S3 ABAC being enabled when checking access to S3 Bucket resources. */
54
+ s3AbacOverride?: S3AbacOverride;
55
+ /** Whether workers should collect grant details for allowed simulations. */
56
+ collectGrantDetails?: boolean;
57
+ /**
58
+ * Async callback invoked when a request settles (succeeds or fails). The processor
59
+ * awaits this callback before removing the request from active state and admitting
60
+ * the next pending request. This allows consumers to perform async work with backpressure.
61
+ *
62
+ * @param event - The settlement event containing the request ID, original request,
63
+ * status, and either the result or the error.
64
+ */
65
+ onRequestSettled: (event: WhoCanSettledEvent) => Promise<void>;
66
+ /**
67
+ * Optional async callback invoked when an `onRequestSettled` callback throws or rejects.
68
+ * If this callback itself throws, the error is silently ignored. If not provided, a
69
+ * warning is logged indicating that a settlement callback failed with no handler defined.
70
+ *
71
+ * @param event - The settlement event that was being delivered when the error occurred.
72
+ * @param error - The error thrown by the `onRequestSettled` callback.
73
+ */
74
+ onSettlementFailure?: (event: WhoCanSettledEvent, error: Error) => Promise<void>;
75
+ /**
76
+ * Whether the processor should ignore an existing principal index. Use this with testing.
77
+ */
78
+ ignorePrincipalIndex?: boolean;
79
+ }
80
+ /**
81
+ * Request parameters that vary per whoCan call on a processor.
82
+ */
83
+ export interface WhoCanProcessorRequest {
84
+ /** The ARN of the resource to check access for. */
85
+ resource?: string;
86
+ /** The account ID the resource belongs to. */
87
+ resourceAccount?: string;
88
+ /** The actions to check access for. */
89
+ actions: string[];
90
+ /** Whether to sort the results for consistent output. */
91
+ sort?: boolean;
92
+ /**
93
+ * Optional callback to filter which denied simulations should include detailed
94
+ * denial analysis. If provided, deny details are collected for this request.
95
+ * If the callback returns true for a given denial, the full deny details are
96
+ * included in the response. If omitted, no deny details are collected for this request.
97
+ *
98
+ * @param details - A lightweight summary of the denied simulation.
99
+ * @returns true to include full deny details for this denial.
100
+ */
101
+ denyDetailsCallback?: (details: LightRequestAnalysis) => boolean;
102
+ /** Optional scope to limit the set of principals tested. */
103
+ principalScope?: WhoCanPrincipalScope;
104
+ /** Optional context keys to consider strict when running simulations. */
105
+ strictContextKeys?: string[];
106
+ }
107
+ /**
108
+ * Event delivered to the onRequestSettled callback when a request completes
109
+ * (either successfully or with an error).
110
+ */
111
+ export type WhoCanSettledEvent = WhoCanSettledSuccess | WhoCanSettledError;
112
+ /**
113
+ * Settlement event for a successfully completed request.
114
+ */
115
+ export interface WhoCanSettledSuccess {
116
+ /** Discriminator for the settlement outcome. */
117
+ status: 'fulfilled';
118
+ /** The unique ID assigned when the request was enqueued. */
119
+ requestId: string;
120
+ /** The original request that was enqueued. */
121
+ request: WhoCanProcessorRequest;
122
+ /** The whoCan result for this request. */
123
+ result: WhoCanResponse;
124
+ }
125
+ /**
126
+ * Settlement event for a request that failed during preparation or simulation.
127
+ */
128
+ export interface WhoCanSettledError {
129
+ /** Discriminator for the settlement outcome. */
130
+ status: 'rejected';
131
+ /** The unique ID assigned when the request was enqueued. */
132
+ requestId: string;
133
+ /** The original request that was enqueued. */
134
+ request: WhoCanProcessorRequest;
135
+ /** The error that caused the request to fail. */
136
+ error: Error;
137
+ }
138
+ /**
139
+ * A queue-first bulk processor that accepts many whoCan requests, expands
140
+ * scenarios on the main thread, and feeds a shared simulation scheduler used
141
+ * by worker threads and an optional main-thread runner.
142
+ *
143
+ * Results are delivered through the {@link WhoCanProcessorConfig.onRequestSettled}
144
+ * callback as each request completes — they are not stored inside the processor.
145
+ *
146
+ * Use {@link enqueueWhoCan} to submit requests, then {@link waitForIdle} to
147
+ * wait for all work to complete. Call {@link shutdown} when done to terminate
148
+ * worker threads.
149
+ */
150
+ export declare class WhoCanProcessor {
151
+ private workers;
152
+ private collectClient;
153
+ private config;
154
+ private isShutdown;
155
+ private workersDead;
156
+ private pendingRequests;
157
+ private activeRequestOrder;
158
+ private requestStates;
159
+ private admissionPumpRunning;
160
+ private draining;
161
+ private preparationQueue;
162
+ private idleWaiters;
163
+ private mainThreadWorker;
164
+ private fatalError?;
165
+ private shutdownPromise?;
166
+ private constructor();
167
+ /**
168
+ * Waits for every worker to post a `{ type: 'ready' }` message. If any
169
+ * worker fails (error, non-zero exit, or explicit `startupError` message)
170
+ * the remaining workers are terminated and the returned promise rejects.
171
+ *
172
+ * @param workers - The worker instances to wait on.
173
+ */
174
+ private static awaitWorkersReady;
175
+ /**
176
+ * Creates a new WhoCanProcessor with worker threads, a shared cache, and
177
+ * lifetime-scoped message routing. The processor is ready to accept requests
178
+ * immediately after creation.
179
+ *
180
+ * @param config - The configuration for the processor, including collect configs,
181
+ * partition, simulation options, tuning, and the onRequestSettled callback.
182
+ * @returns a new WhoCanProcessor instance
183
+ */
184
+ static create(config: WhoCanProcessorConfig): Promise<WhoCanProcessor>;
185
+ /**
186
+ * Enqueues a whoCan request for processing. Returns a unique request ID
187
+ * that will appear in the corresponding {@link WhoCanSettledEvent}.
188
+ *
189
+ * This method never activates a request directly — it appends to
190
+ * pendingRequests and signals the admission pump.
191
+ *
192
+ * @param request - The whoCan request parameters.
193
+ * @returns the unique request ID assigned to this request.
194
+ * @throws if the processor is shut down or draining via waitForIdle.
195
+ */
196
+ enqueueWhoCan(request: WhoCanProcessorRequest): string;
197
+ /**
198
+ * Returns a promise that resolves when all pending and active work has
199
+ * completed and all onRequestSettled callbacks have finished.
200
+ *
201
+ * While draining, new calls to {@link enqueueWhoCan} will throw. Once
202
+ * the drain completes, the processor re-opens for new enqueues.
203
+ *
204
+ * @returns a promise that resolves when idle, or rejects if a worker crashes.
205
+ */
206
+ waitForIdle(): Promise<void>;
207
+ /**
208
+ * Shuts down the processor by rejecting all pending requests, waiting for
209
+ * active requests to settle, and terminating all worker threads.
210
+ *
211
+ * This method is idempotent — calling it multiple times is safe.
212
+ */
213
+ shutdown(): Promise<void>;
214
+ /**
215
+ * Internal shutdown implementation. Rejects pending requests, waits for
216
+ * active requests to drain, then terminates workers.
217
+ */
218
+ private executeShutdown;
219
+ /**
220
+ * Installs lifetime-scoped message, error, and exit listeners on all workers.
221
+ * Message listeners route simulation results and deny-detail checks to the
222
+ * correct request state using requestId. Error/exit listeners detect crashes
223
+ * and mark the processor as fatally failed.
224
+ */
225
+ private installLifetimeWorkerListeners;
226
+ /**
227
+ * Routes a message from a worker thread to the appropriate handler based
228
+ * on message type and requestId.
229
+ *
230
+ * @param msg - The message received from the worker.
231
+ * @param worker - The worker that sent the message.
232
+ */
233
+ private handleWorkerMessage;
234
+ /**
235
+ * Creates the main-thread simulation runner if mainThreadConcurrency > 0.
236
+ * The runner pulls from the FIFO scheduler and routes results by requestId.
237
+ */
238
+ private createMainThreadRunner;
239
+ /**
240
+ * Dequeues the next simulation scenario using FIFO request priority.
241
+ * Prefers the oldest active request that has ready scenarios. If the oldest
242
+ * is temporarily empty (still preparing), falls back to the next request
243
+ * with ready scenarios so cores do not idle.
244
+ *
245
+ * @returns the next work item, or undefined if no scenarios are ready.
246
+ */
247
+ private dequeueNextScenario;
248
+ /**
249
+ * Notifies all simulation consumers (workers and main thread) that new
250
+ * work may be available in the scheduler.
251
+ */
252
+ private notifySimulationConsumers;
253
+ /**
254
+ * Wakes the admission pump to process pending requests. If the pump is
255
+ * already running, this is a no-op — the running pump will pick up new
256
+ * pending requests on its next iteration.
257
+ */
258
+ private wakeAdmissionPump;
259
+ /**
260
+ * The admission pump loop. Drains pendingRequests into active processing
261
+ * up to maxRequestsInProgress. Only one instance of this loop runs at a time,
262
+ * guarded by admissionPumpRunning.
263
+ */
264
+ private runAdmissionPump;
265
+ /**
266
+ * Creates a fresh RequestState for an admitted request.
267
+ *
268
+ * @param submitted - The submitted request to create state for.
269
+ * @returns the new RequestState.
270
+ */
271
+ private createRequestState;
272
+ /**
273
+ * Enqueues the root preparation job for a request. This job performs resource
274
+ * account resolution, resource policy lookup, action expansion, principal scope
275
+ * handling, and then enqueues follow-up preparation jobs to enumerate principals.
276
+ *
277
+ * @param state - The request state to prepare.
278
+ */
279
+ private enqueueRootPreparation;
280
+ /**
281
+ * Executes the root preparation for a request: resolves the resource account,
282
+ * fetches the resource policy, expands actions, determines which accounts and
283
+ * principals to check, and enqueues follow-up preparation jobs.
284
+ *
285
+ * @param state - The request state to prepare.
286
+ */
287
+ private executeRootPreparation;
288
+ /**
289
+ * Handles a simulation result from a worker or the main thread runner.
290
+ * Routes the result to the correct request state and checks for completion.
291
+ *
292
+ * @param requestId - The ID of the request this result belongs to.
293
+ * @param result - The simulation job result.
294
+ */
295
+ private handleSimulationResult;
296
+ /**
297
+ * Handles a checkDenyDetails request from a worker thread. Looks up the
298
+ * request's denyDetailsCallback and responds.
299
+ *
300
+ * @param requestId - The ID of the request.
301
+ * @param checkId - The unique check ID for this deny-details round trip.
302
+ * @param lightAnalysis - The light analysis to pass to the callback.
303
+ * @param worker - The worker to respond to.
304
+ */
305
+ private handleCheckDenyDetails;
306
+ /**
307
+ * Handles a deny details result from a worker thread. Decrements the
308
+ * pending deny-details counter and checks for request completion.
309
+ *
310
+ * @param requestId - The ID of the request.
311
+ * @param denyDetail - The deny detail to store.
312
+ */
313
+ private handleDenyDetailsResult;
314
+ /**
315
+ * Checks whether a request has completed all preparation and simulation work.
316
+ * If so, settles the request as successful.
317
+ *
318
+ * @param state - The request state to check.
319
+ */
320
+ private checkRequestCompletion;
321
+ /**
322
+ * Settles a request as successful: builds the WhoCanResponse, awaits
323
+ * onRequestSettled, removes the request from active state, and wakes
324
+ * the admission pump.
325
+ *
326
+ * @param state - The request state to settle.
327
+ */
328
+ private settleRequestAsSuccess;
329
+ /**
330
+ * Settles a request as failed: invokes onRequestSettled with the error
331
+ * immediately, but keeps the request in active state until all in-flight
332
+ * work drains (created === completed). Late results for settled requests
333
+ * are discarded but still counted so the drain completes.
334
+ *
335
+ * @param state - The request state to settle.
336
+ * @param error - The error that caused the failure.
337
+ */
338
+ private settleRequestAsError;
339
+ /**
340
+ * Invokes the onRequestSettled callback and routes any errors through
341
+ * {@link handleSettlementFailure}.
342
+ *
343
+ * @param event - The settlement event to deliver.
344
+ */
345
+ private invokeSettledCallback;
346
+ /**
347
+ * Awaits the onRequestSettled callback, then removes the request from
348
+ * active state and wakes the admission pump. Used for successful settlements
349
+ * where all work is already complete.
350
+ *
351
+ * @param state - The request state being settled.
352
+ * @param event - The settlement event to deliver.
353
+ */
354
+ private invokeSettledCallbackAndCleanup;
355
+ /**
356
+ * Checks whether a settled request has fully drained: the onRequestSettled
357
+ * callback has been awaited, all preparation jobs have finished, all
358
+ * simulation results have been received, and all deny-detail round trips
359
+ * have completed. Only then is the request removed from active state.
360
+ *
361
+ * @param state - The request state to check.
362
+ */
363
+ private checkRequestDrain;
364
+ /**
365
+ * Removes a request from active state, wakes the admission pump to fill
366
+ * the freed slot, and checks if the processor is now idle.
367
+ *
368
+ * @param state - The request state to remove.
369
+ */
370
+ private removeFromActiveState;
371
+ /**
372
+ * Returns true if the processor has no pending, active, or in-flight work.
373
+ *
374
+ * @returns true if fully idle.
375
+ */
376
+ private isIdle;
377
+ /**
378
+ * Checks whether the processor has become idle and resolves or rejects the
379
+ * waitForIdle promise if so.
380
+ */
381
+ private checkIdle;
382
+ /**
383
+ * Handles an error thrown by the `onRequestSettled` callback. If the
384
+ * `onSettlementFailure` callback is defined, it is invoked with the event
385
+ * and error; any error it throws is silently ignored. If not defined, a
386
+ * warning is logged.
387
+ *
388
+ * @param event - The settlement event that was being delivered.
389
+ * @param err - The raw error thrown by the `onRequestSettled` callback.
390
+ */
391
+ private handleSettlementFailure;
392
+ /**
393
+ * Handles an unexpected worker failure by marking the processor as dead,
394
+ * terminating remaining workers, and rejecting all active and pending requests.
395
+ *
396
+ * @param error - The error that caused the worker failure.
397
+ */
398
+ private handleWorkerFailure;
399
+ }
400
+ //# sourceMappingURL=WhoCanProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhoCanProcessor.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanProcessor.ts"],"names":[],"mappings":"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"}