@cloud-copilot/iam-lens 0.1.108 → 0.1.109
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.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/bitset.js +3 -3
- package/dist/cjs/utils/bitset.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +52 -31
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts +371 -0
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js +980 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts +2 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -1
- package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +99 -80
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
- package/dist/cjs/whoCan/principalArnFilter.d.ts +84 -0
- package/dist/cjs/whoCan/principalArnFilter.d.ts.map +1 -0
- package/dist/cjs/whoCan/principalArnFilter.js +256 -0
- package/dist/cjs/whoCan/principalArnFilter.js.map +1 -0
- package/dist/cjs/whoCan/untrustingActions.d.ts +7 -0
- package/dist/cjs/whoCan/untrustingActions.d.ts.map +1 -0
- package/dist/cjs/whoCan/untrustingActions.js +30 -0
- package/dist/cjs/whoCan/untrustingActions.js.map +1 -0
- package/dist/cjs/whoCan/whoCan.d.ts +35 -2
- package/dist/cjs/whoCan/whoCan.d.ts.map +1 -1
- package/dist/cjs/whoCan/whoCan.js +277 -233
- package/dist/cjs/whoCan/whoCan.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/bitset.js +3 -3
- package/dist/esm/utils/bitset.js.map +1 -1
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js +53 -34
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -1
- package/dist/esm/whoCan/WhoCanProcessor.d.ts +371 -0
- package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanProcessor.js +970 -0
- package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts +2 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -1
- package/dist/esm/whoCan/WhoCanWorker.js.map +1 -1
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +102 -81
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
- package/dist/esm/whoCan/principalArnFilter.d.ts +84 -0
- package/dist/esm/whoCan/principalArnFilter.d.ts.map +1 -0
- package/dist/esm/whoCan/principalArnFilter.js +251 -0
- package/dist/esm/whoCan/principalArnFilter.js.map +1 -0
- package/dist/esm/whoCan/untrustingActions.d.ts +7 -0
- package/dist/esm/whoCan/untrustingActions.d.ts.map +1 -0
- package/dist/esm/whoCan/untrustingActions.js +27 -0
- package/dist/esm/whoCan/untrustingActions.js.map +1 -0
- package/dist/esm/whoCan/whoCan.d.ts +35 -2
- package/dist/esm/whoCan/whoCan.d.ts.map +1 -1
- package/dist/esm/whoCan/whoCan.js +278 -237
- package/dist/esm/whoCan/whoCan.js.map +1 -1
- package/package.json +3 -3
package/dist/cjs/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export { makePrincipalIndex } from './principalIndex/makePrincipalIndex.js';
|
|
|
6
6
|
export type { ContextKeys } from './simulate/contextKeys.js';
|
|
7
7
|
export { simulateRequest, type SimulationRequest } from './simulate/simulate.js';
|
|
8
8
|
export { whoCan, type WhoCanPrincipalScope, type ResourceAccessRequest, type WhoCanAllowed, type WhoCanResponse } from './whoCan/whoCan.js';
|
|
9
|
+
export { WhoCanProcessor, type WhoCanProcessorConfig, type WhoCanProcessorRequest, type WhoCanSettledEvent, type WhoCanSettledSuccess, type WhoCanSettledError } from './whoCan/WhoCanProcessor.js';
|
|
10
|
+
export { type LightRequestAnalysis, type LightResourceAnalysis, type LightResourceAnalysisWithPattern, type SingleResourceLightRequestAnalysis, type WildcardResourceLightRequestAnalysis } from './whoCan/requestAnalysis.js';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACL,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,aAAa,EACb,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACL,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,oCAAoC,EAC1C,MAAM,6BAA6B,CAAA"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.whoCan = exports.simulateRequest = exports.makePrincipalIndex = exports.principalCan = exports.loadCollectConfigs = exports.getCollectClient = exports.NoCacheProvider = exports.InMemoryCacheProvider = exports.IamCollectClient = void 0;
|
|
3
|
+
exports.WhoCanProcessor = exports.whoCan = exports.simulateRequest = exports.makePrincipalIndex = exports.principalCan = exports.loadCollectConfigs = exports.getCollectClient = exports.NoCacheProvider = exports.InMemoryCacheProvider = exports.IamCollectClient = void 0;
|
|
4
4
|
var client_js_1 = require("./collect/client.js");
|
|
5
5
|
Object.defineProperty(exports, "IamCollectClient", { enumerable: true, get: function () { return client_js_1.IamCollectClient; } });
|
|
6
6
|
Object.defineProperty(exports, "InMemoryCacheProvider", { enumerable: true, get: function () { return client_js_1.InMemoryCacheProvider; } });
|
|
@@ -16,4 +16,6 @@ var simulate_js_1 = require("./simulate/simulate.js");
|
|
|
16
16
|
Object.defineProperty(exports, "simulateRequest", { enumerable: true, get: function () { return simulate_js_1.simulateRequest; } });
|
|
17
17
|
var whoCan_js_1 = require("./whoCan/whoCan.js");
|
|
18
18
|
Object.defineProperty(exports, "whoCan", { enumerable: true, get: function () { return whoCan_js_1.whoCan; } });
|
|
19
|
+
var WhoCanProcessor_js_1 = require("./whoCan/WhoCanProcessor.js");
|
|
20
|
+
Object.defineProperty(exports, "WhoCanProcessor", { enumerable: true, get: function () { return WhoCanProcessor_js_1.WhoCanProcessor; } });
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAM4B;AAL1B,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AAYjB,mDAK6B;AAJ3B,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAIpB,kEAAqF;AAA5E,+GAAA,YAAY,OAAA;AACrB,gFAA2E;AAAlE,2HAAA,kBAAkB,OAAA;AAE3B,sDAAgF;AAAvE,8GAAA,eAAe,OAAA;AACxB,gDAM2B;AALzB,mGAAA,MAAM,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAM4B;AAL1B,6GAAA,gBAAgB,OAAA;AAChB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AAYjB,mDAK6B;AAJ3B,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAIpB,kEAAqF;AAA5E,+GAAA,YAAY,OAAA;AACrB,gFAA2E;AAAlE,2HAAA,kBAAkB,OAAA;AAE3B,sDAAgF;AAAvE,8GAAA,eAAe,OAAA;AACxB,gDAM2B;AALzB,mGAAA,MAAM,OAAA;AAMR,kEAOoC;AANlC,qHAAA,eAAe,OAAA"}
|
package/dist/cjs/utils/bitset.js
CHANGED
|
@@ -16,7 +16,7 @@ const bitset_1 = require("bitset");
|
|
|
16
16
|
function encodeBitSet(bitset) {
|
|
17
17
|
const rawHex = bitset.toString(16);
|
|
18
18
|
const compressedHex = compressHex(rawHex);
|
|
19
|
-
const sparseString = bitset.toArray().join(',');
|
|
19
|
+
const sparseString = ',' + bitset.toArray().join(',');
|
|
20
20
|
if (sparseString.length < compressedHex.length && sparseString.length < rawHex.length) {
|
|
21
21
|
return sparseString;
|
|
22
22
|
}
|
|
@@ -39,9 +39,9 @@ function decodeBitSet(encoded) {
|
|
|
39
39
|
}
|
|
40
40
|
else if (typeof encoded === 'string') {
|
|
41
41
|
// Check if it's a sparse array (comma-separated numbers)
|
|
42
|
-
if (encoded.
|
|
42
|
+
if (encoded.startsWith(',')) {
|
|
43
43
|
// It's a sparse array - convert to BitSet
|
|
44
|
-
const positions = encoded.split(',').map(Number);
|
|
44
|
+
const positions = encoded.slice(1).split(',').map(Number);
|
|
45
45
|
const bitset = new bitset_1.default();
|
|
46
46
|
positions.forEach((pos) => bitset.set(pos, 1));
|
|
47
47
|
return bitset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../../src/utils/bitset.ts"],"names":[],"mappings":";;AAQA,oCAcC;AAQD,oCA2BC;AAQD,kCAKC;AAQD,sCAMC;AAQD,0DAgBC;AASD,8DA0BC;AA/ID,mCAA2B;AAE3B;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../../src/utils/bitset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,73 @@
|
|
|
1
1
|
import { type JobResult } from '@cloud-copilot/job';
|
|
2
2
|
import { IamCollectClient } from '../collect/client.js';
|
|
3
3
|
import { type S3AbacOverride } from '../utils/s3Abac.js';
|
|
4
|
-
import { ArrayStreamingWorkQueue } from '../workers/ArrayStreamingWorkQueue.js';
|
|
5
4
|
import { PullBasedJobRunner } from '../workers/JobRunner.js';
|
|
6
|
-
import { StreamingWorkQueue } from '../workers/StreamingWorkQueue.js';
|
|
7
5
|
import { type LightRequestAnalysis } from './requestAnalysis.js';
|
|
8
6
|
import { type WhoCanAllowed, type WhoCanDenyDetail } from './whoCan.js';
|
|
9
7
|
import { type WhoCanExecutionResult, type WhoCanWorkItem } from './WhoCanWorker.js';
|
|
10
|
-
|
|
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 {};
|
|
11
73
|
//# sourceMappingURL=WhoCanMainThreadWorker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhoCanMainThreadWorker.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanMainThreadWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"WhoCanMainThreadWorker.d.ts","sourceRoot":"","sources":["../../../src/whoCan/WhoCanMainThreadWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,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"}
|
|
@@ -4,54 +4,75 @@ exports.createMainThreadStreamingWorkQueue = createMainThreadStreamingWorkQueue;
|
|
|
4
4
|
const JobRunner_js_1 = require("../workers/JobRunner.js");
|
|
5
5
|
const requestAnalysis_js_1 = require("./requestAnalysis.js");
|
|
6
6
|
const WhoCanWorker_js_1 = require("./WhoCanWorker.js");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
+
};
|
|
18
40
|
}, async (result) => {
|
|
41
|
+
const { requestId, collectDenyDetails } = result.properties;
|
|
19
42
|
if (result.status === 'fulfilled') {
|
|
20
43
|
const executionResult = result.value;
|
|
21
44
|
if (executionResult.type === 'allowed') {
|
|
22
|
-
|
|
23
|
-
onComplete({
|
|
45
|
+
onSimulationResult(requestId, {
|
|
24
46
|
status: 'fulfilled',
|
|
25
47
|
value: executionResult.allowed,
|
|
26
|
-
properties:
|
|
48
|
+
properties: {}
|
|
27
49
|
});
|
|
28
50
|
}
|
|
29
51
|
else {
|
|
30
|
-
//
|
|
31
|
-
|
|
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, {
|
|
32
64
|
status: 'fulfilled',
|
|
33
65
|
value: undefined,
|
|
34
|
-
properties:
|
|
66
|
+
properties: {}
|
|
35
67
|
});
|
|
36
|
-
// Check if we should include deny details
|
|
37
|
-
if (denyDetailsCallback && onDenyDetail) {
|
|
38
|
-
const hasDetails = executionResult.type === 'denied_single' || executionResult.type === 'denied_wildcard';
|
|
39
|
-
if (hasDetails) {
|
|
40
|
-
const lightAnalysis = (0, requestAnalysis_js_1.toLightRequestAnalysis)(executionResult);
|
|
41
|
-
const shouldInclude = denyDetailsCallback(lightAnalysis);
|
|
42
|
-
if (shouldInclude) {
|
|
43
|
-
onDenyDetail((0, requestAnalysis_js_1.convertToDenialDetails)(executionResult));
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
68
|
}
|
|
48
69
|
}
|
|
49
70
|
else {
|
|
50
|
-
// Error case
|
|
51
|
-
|
|
71
|
+
// Error case
|
|
72
|
+
onSimulationResult(requestId, {
|
|
52
73
|
status: 'rejected',
|
|
53
74
|
reason: result.reason,
|
|
54
|
-
properties:
|
|
75
|
+
properties: {}
|
|
55
76
|
});
|
|
56
77
|
}
|
|
57
78
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhoCanMainThreadWorker.js","sourceRoot":"","sources":["../../../src/whoCan/WhoCanMainThreadWorker.ts"],"names":[],"mappings":";;
|
|
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"}
|