@cloud-copilot/iam-expand 0.6.0 → 0.7.0-rc1
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/expand.d.ts.map +1 -1
- package/dist/cjs/expand.js +4 -5
- package/dist/cjs/expand.js.map +1 -1
- package/dist/cjs/expand_file.d.ts +5 -1
- package/dist/cjs/expand_file.d.ts.map +1 -1
- package/dist/cjs/expand_file.js +19 -4
- package/dist/cjs/expand_file.js.map +1 -1
- package/dist/cjs/invert.d.ts +4 -0
- package/dist/cjs/invert.d.ts.map +1 -0
- package/dist/cjs/invert.js +54 -0
- package/dist/cjs/invert.js.map +1 -0
- package/dist/cjs/util.d.ts +3 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +10 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/esm/expand.d.ts.map +1 -1
- package/dist/esm/expand.js +2 -3
- package/dist/esm/expand.js.map +1 -1
- package/dist/esm/expand_file.d.ts +5 -1
- package/dist/esm/expand_file.d.ts.map +1 -1
- package/dist/esm/expand_file.js +19 -4
- package/dist/esm/expand_file.js.map +1 -1
- package/dist/esm/invert.d.ts +4 -0
- package/dist/esm/invert.d.ts.map +1 -0
- package/dist/esm/invert.js +51 -0
- package/dist/esm/invert.js.map +1 -0
- package/dist/esm/util.d.ts +3 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +6 -0
- package/dist/esm/util.js.map +1 -0
- package/package.json +1 -1
package/dist/cjs/expand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAGA,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAE7B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C;AAUD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2FtJ"}
|
package/dist/cjs/expand.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InvalidActionBehavior = void 0;
|
|
4
4
|
exports.expandIamActions = expandIamActions;
|
|
5
5
|
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
6
|
+
const util_js_1 = require("./util.js");
|
|
6
7
|
var InvalidActionBehavior;
|
|
7
8
|
(function (InvalidActionBehavior) {
|
|
8
9
|
InvalidActionBehavior["Remove"] = "Remove";
|
|
@@ -16,7 +17,6 @@ const defaultOptions = {
|
|
|
16
17
|
errorOnInvalidService: false,
|
|
17
18
|
invalidActionBehavior: InvalidActionBehavior.Remove,
|
|
18
19
|
};
|
|
19
|
-
const allAsterisksPattern = /^\*+$/i;
|
|
20
20
|
/**
|
|
21
21
|
* Expands an IAM action string that contains wildcards.
|
|
22
22
|
* If the action string contains no wildcards, it is returned as is.
|
|
@@ -43,7 +43,7 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
43
43
|
return allMatches;
|
|
44
44
|
}
|
|
45
45
|
const actionString = actionStringOrStrings.trim();
|
|
46
|
-
if (actionString.match(allAsterisksPattern)) {
|
|
46
|
+
if (actionString.match(util_js_1.allAsterisksPattern)) {
|
|
47
47
|
if (options.expandAsterisk) {
|
|
48
48
|
//If that's really what you want...
|
|
49
49
|
const allActions = [];
|
|
@@ -76,7 +76,7 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
76
76
|
}
|
|
77
77
|
return [];
|
|
78
78
|
}
|
|
79
|
-
if (wildcardActions.match(allAsterisksPattern)) {
|
|
79
|
+
if (wildcardActions.match(util_js_1.allAsterisksPattern)) {
|
|
80
80
|
if (options.expandServiceAsterisk) {
|
|
81
81
|
const actionsForService = await (0, iam_data_1.iamActionsForService)(service);
|
|
82
82
|
return actionsForService.map(action => `${service}:${action}`);
|
|
@@ -104,8 +104,7 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
const allActions = await (0, iam_data_1.iamActionsForService)(service);
|
|
107
|
-
const
|
|
108
|
-
const regex = new RegExp(pattern, 'i');
|
|
107
|
+
const regex = (0, util_js_1.convertStringToPattern)(wildcardActions);
|
|
109
108
|
const matchingActions = allActions.filter(action => regex.test(action)).map(action => `${service}:${action}`);
|
|
110
109
|
matchingActions.sort();
|
|
111
110
|
return matchingActions;
|
package/dist/cjs/expand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
+
interface ExpandJsonDocumentOptions extends ExpandIamActionsOptions {
|
|
3
|
+
invertNotActions: boolean;
|
|
4
|
+
}
|
|
2
5
|
/**
|
|
3
6
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
7
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -8,5 +11,6 @@ import { ExpandIamActionsOptions } from "./expand.js";
|
|
|
8
11
|
* @param key the key of the current node in the document
|
|
9
12
|
* @returns the original JSON document with any actions expanded in place
|
|
10
13
|
*/
|
|
11
|
-
export declare function expandJsonDocument(options: Partial<
|
|
14
|
+
export declare function expandJsonDocument(options: Partial<ExpandJsonDocumentOptions>, document: any, key?: string): Promise<any>;
|
|
15
|
+
export {};
|
|
12
16
|
//# sourceMappingURL=expand_file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGxE,UAAU,yBAA0B,SAAQ,uBAAuB;IACjE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA+B/H"}
|
package/dist/cjs/expand_file.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.expandJsonDocument = expandJsonDocument;
|
|
4
4
|
const expand_js_1 = require("./expand.js");
|
|
5
|
+
const invert_js_1 = require("./invert.js");
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
invertNotActions: false
|
|
8
|
+
};
|
|
5
9
|
/**
|
|
6
10
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
7
11
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -12,11 +16,9 @@ const expand_js_1 = require("./expand.js");
|
|
|
12
16
|
* @returns the original JSON document with any actions expanded in place
|
|
13
17
|
*/
|
|
14
18
|
async function expandJsonDocument(options, document, key) {
|
|
19
|
+
options = { ...defaultOptions, ...options };
|
|
15
20
|
if (key === 'Action' || key === 'NotAction') {
|
|
16
|
-
if (
|
|
17
|
-
return (0, expand_js_1.expandIamActions)(document, options);
|
|
18
|
-
}
|
|
19
|
-
if (Array.isArray(document) && document.length > 0 && typeof document[0] === 'string') {
|
|
21
|
+
if (isStringOrArrayofStrings(document)) {
|
|
20
22
|
return (0, expand_js_1.expandIamActions)(document, options);
|
|
21
23
|
}
|
|
22
24
|
}
|
|
@@ -28,6 +30,10 @@ async function expandJsonDocument(options, document, key) {
|
|
|
28
30
|
return results;
|
|
29
31
|
}
|
|
30
32
|
if (typeof document === 'object' && document !== null) {
|
|
33
|
+
if (options.invertNotActions && document.NotAction && isStringOrArrayofStrings(document.NotAction)) {
|
|
34
|
+
document.Action = (0, invert_js_1.invert)(document.NotAction);
|
|
35
|
+
delete document.NotAction;
|
|
36
|
+
}
|
|
31
37
|
for (const key of Object.keys(document)) {
|
|
32
38
|
document[key] = await expandJsonDocument(options, document[key], key);
|
|
33
39
|
}
|
|
@@ -35,4 +41,13 @@ async function expandJsonDocument(options, document, key) {
|
|
|
35
41
|
}
|
|
36
42
|
return document;
|
|
37
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks to see if a value is a string or an array of strings, used for type narrowing
|
|
46
|
+
*
|
|
47
|
+
* @param value The value to test
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
function isStringOrArrayofStrings(value) {
|
|
51
|
+
return typeof value === 'string' || (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string');
|
|
52
|
+
}
|
|
38
53
|
//# sourceMappingURL=expand_file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":";;AAoBA,gDA+BC;AAnDD,2CAAwE;AACxE,2CAAqC;AAMrC,MAAM,cAAc,GAAwD;IAC1E,gBAAgB,EAAE,KAAK;CACxB,CAAA;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAA2C,EAAE,QAAa,EAAE,GAAY;IAC/G,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,IAAA,4BAAgB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,IAAG,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClG,QAAQ,CAAC,MAAM,GAAG,IAAA,kBAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,QAAQ,CAAC,SAAS,CAAA;QAC3B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,KAAU;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.d.ts","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;CACvC;AAID,wBAAsB,MAAM,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoD5I"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.invert = invert;
|
|
4
|
+
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
const defaultOptions = {};
|
|
7
|
+
async function invert(actionStringOrStrings, overrideOptions) {
|
|
8
|
+
const options = { ...defaultOptions, ...overrideOptions };
|
|
9
|
+
if (!actionStringOrStrings) {
|
|
10
|
+
throw new Error('at least one action must be provided to invert');
|
|
11
|
+
}
|
|
12
|
+
let allActionsFound = false;
|
|
13
|
+
const servicesToExclude = new Set();
|
|
14
|
+
const excludePatterns = {};
|
|
15
|
+
const actionsToInvert = Array.isArray(actionStringOrStrings) ? actionStringOrStrings : [actionStringOrStrings];
|
|
16
|
+
for (const action of actionsToInvert) {
|
|
17
|
+
if (action.match(util_js_1.allAsterisksPattern)) {
|
|
18
|
+
allActionsFound = true;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const parts = action.split(':');
|
|
22
|
+
if (parts.length !== 2) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const [service, wildcardActions] = parts.map(part => part.toLowerCase());
|
|
26
|
+
if (wildcardActions.match(util_js_1.allAsterisksPattern)) {
|
|
27
|
+
servicesToExclude.add(service);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (!excludePatterns[service]) {
|
|
31
|
+
excludePatterns[service] = [];
|
|
32
|
+
}
|
|
33
|
+
excludePatterns[service].push((0, util_js_1.convertStringToPattern)(wildcardActions));
|
|
34
|
+
}
|
|
35
|
+
if (allActionsFound) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
const allServices = await (0, iam_data_1.iamServiceKeys)();
|
|
39
|
+
const actionLists = await Promise.all(allServices.map(async (serviceKey) => {
|
|
40
|
+
if (servicesToExclude.has(serviceKey)) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
const serviceActions = await (0, iam_data_1.iamActionsForService)(serviceKey);
|
|
44
|
+
const excludePatternsForService = excludePatterns[serviceKey] || [];
|
|
45
|
+
if (excludePatternsForService.length === 0) {
|
|
46
|
+
return serviceActions.map(action => `${serviceKey}:${action}`);
|
|
47
|
+
}
|
|
48
|
+
return serviceActions.filter(action => {
|
|
49
|
+
return !excludePatternsForService.some(pattern => action.match(pattern));
|
|
50
|
+
}).map(action => `${serviceKey}:${action}`);
|
|
51
|
+
}));
|
|
52
|
+
return Array.from(new Set(actionLists.flat())).sort();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=invert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAAW,CAAA;AAE3C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnE"}
|
package/dist/cjs/util.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allAsterisksPattern = void 0;
|
|
4
|
+
exports.convertStringToPattern = convertStringToPattern;
|
|
5
|
+
exports.allAsterisksPattern = /^\*+$/i;
|
|
6
|
+
function convertStringToPattern(actionString) {
|
|
7
|
+
const pattern = "^" + actionString.replace(/\?/g, '.').replace(/\*/g, '.*?') + "$";
|
|
8
|
+
return new RegExp(pattern, 'i');
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;AAEA,wDAGC;AALY,QAAA,mBAAmB,GAAG,QAAQ,CAAA;AAE3C,SAAgB,sBAAsB,CAAC,YAAoB;IACzD,MAAM,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAClF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/esm/expand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAGA,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAE7B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C;AAUD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2FtJ"}
|
package/dist/esm/expand.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { iamActionDetails, iamActionExists, iamActionsForService, iamServiceExists, iamServiceKeys } from '@cloud-copilot/iam-data';
|
|
2
|
+
import { allAsterisksPattern, convertStringToPattern } from './util.js';
|
|
2
3
|
export var InvalidActionBehavior;
|
|
3
4
|
(function (InvalidActionBehavior) {
|
|
4
5
|
InvalidActionBehavior["Remove"] = "Remove";
|
|
@@ -12,7 +13,6 @@ const defaultOptions = {
|
|
|
12
13
|
errorOnInvalidService: false,
|
|
13
14
|
invalidActionBehavior: InvalidActionBehavior.Remove,
|
|
14
15
|
};
|
|
15
|
-
const allAsterisksPattern = /^\*+$/i;
|
|
16
16
|
/**
|
|
17
17
|
* Expands an IAM action string that contains wildcards.
|
|
18
18
|
* If the action string contains no wildcards, it is returned as is.
|
|
@@ -100,8 +100,7 @@ export async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
const allActions = await iamActionsForService(service);
|
|
103
|
-
const
|
|
104
|
-
const regex = new RegExp(pattern, 'i');
|
|
103
|
+
const regex = convertStringToPattern(wildcardActions);
|
|
105
104
|
const matchingActions = allActions.filter(action => regex.test(action)).map(action => `${service}:${action}`);
|
|
106
105
|
matchingActions.sort();
|
|
107
106
|
return matchingActions;
|
package/dist/esm/expand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACnI,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAEvE,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,0CAAiB,CAAA;IACjB,wCAAe,CAAA;IACf,4CAAmB,CAAA;AACrB,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC;AA8CD,MAAM,cAAc,GAA4B;IAC9C,cAAc,EAAE,KAAK;IACrB,qBAAqB,EAAE,KAAK;IAC5B,oBAAoB,EAAE,KAAK;IAC3B,qBAAqB,EAAE,KAAK;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC,MAAM;CACpD,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,qBAAwC,EAAE,eAAkD;IACjI,MAAM,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,eAAe,EAAC,CAAA;IAEvD,IAAG,CAAC,qBAAqB,EAAE,CAAC;QAC1B,mDAAmD;QACnD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;YACrF,OAAO,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC,CAAA;QAEH,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1D,UAAU,CAAC,IAAI,EAAE,CAAA;QAEjB,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAA;IAEjD,IAAG,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3C,IAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAC1B,mCAAmC;YACnC,MAAM,UAAU,GAAG,EAAE,CAAA;YACrB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAA;YAC1C,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBACxC,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAA;gBAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC,CAAA;YAC1E,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAED,IAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;QAC3D,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACrC,IAAG,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;QAC3D,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACxE,IAAG,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,IAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAG,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,IAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACjC,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAA;YAC7D,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACpE,IAAG,YAAY,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;YAChE,OAAO,CAAC,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;QAED,IAAG,OAAO,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,EAAE,CAAA;QACX,CAAC;aAAM,IAAG,OAAO,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,OAAO,EAAE,CAAC;YAC1E,OAAO,CAAC,YAAY,CAAC,CAAA;QACvB,CAAC;aAAM,IAAG,OAAO,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAA;IACrD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAA;IAC7G,eAAe,CAAC,IAAI,EAAE,CAAA;IAEtB,OAAO,eAAe,CAAA;AACxB,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
+
interface ExpandJsonDocumentOptions extends ExpandIamActionsOptions {
|
|
3
|
+
invertNotActions: boolean;
|
|
4
|
+
}
|
|
2
5
|
/**
|
|
3
6
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
7
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -8,5 +11,6 @@ import { ExpandIamActionsOptions } from "./expand.js";
|
|
|
8
11
|
* @param key the key of the current node in the document
|
|
9
12
|
* @returns the original JSON document with any actions expanded in place
|
|
10
13
|
*/
|
|
11
|
-
export declare function expandJsonDocument(options: Partial<
|
|
14
|
+
export declare function expandJsonDocument(options: Partial<ExpandJsonDocumentOptions>, document: any, key?: string): Promise<any>;
|
|
15
|
+
export {};
|
|
12
16
|
//# sourceMappingURL=expand_file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGxE,UAAU,yBAA0B,SAAQ,uBAAuB;IACjE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA+B/H"}
|
package/dist/esm/expand_file.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { expandIamActions } from "./expand.js";
|
|
2
|
+
import { invert } from "./invert.js";
|
|
3
|
+
const defaultOptions = {
|
|
4
|
+
invertNotActions: false
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
8
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -9,11 +13,9 @@ import { expandIamActions } from "./expand.js";
|
|
|
9
13
|
* @returns the original JSON document with any actions expanded in place
|
|
10
14
|
*/
|
|
11
15
|
export async function expandJsonDocument(options, document, key) {
|
|
16
|
+
options = { ...defaultOptions, ...options };
|
|
12
17
|
if (key === 'Action' || key === 'NotAction') {
|
|
13
|
-
if (
|
|
14
|
-
return expandIamActions(document, options);
|
|
15
|
-
}
|
|
16
|
-
if (Array.isArray(document) && document.length > 0 && typeof document[0] === 'string') {
|
|
18
|
+
if (isStringOrArrayofStrings(document)) {
|
|
17
19
|
return expandIamActions(document, options);
|
|
18
20
|
}
|
|
19
21
|
}
|
|
@@ -25,6 +27,10 @@ export async function expandJsonDocument(options, document, key) {
|
|
|
25
27
|
return results;
|
|
26
28
|
}
|
|
27
29
|
if (typeof document === 'object' && document !== null) {
|
|
30
|
+
if (options.invertNotActions && document.NotAction && isStringOrArrayofStrings(document.NotAction)) {
|
|
31
|
+
document.Action = invert(document.NotAction);
|
|
32
|
+
delete document.NotAction;
|
|
33
|
+
}
|
|
28
34
|
for (const key of Object.keys(document)) {
|
|
29
35
|
document[key] = await expandJsonDocument(options, document[key], key);
|
|
30
36
|
}
|
|
@@ -32,4 +38,13 @@ export async function expandJsonDocument(options, document, key) {
|
|
|
32
38
|
}
|
|
33
39
|
return document;
|
|
34
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Checks to see if a value is a string or an array of strings, used for type narrowing
|
|
43
|
+
*
|
|
44
|
+
* @param value The value to test
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
function isStringOrArrayofStrings(value) {
|
|
48
|
+
return typeof value === 'string' || (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string');
|
|
49
|
+
}
|
|
35
50
|
//# sourceMappingURL=expand_file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA2B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA2B,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,cAAc,GAAwD;IAC1E,gBAAgB,EAAE,KAAK;CACxB,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2C,EAAE,QAAa,EAAE,GAAY;IAC/G,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,IAAG,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,QAAQ,CAAC,SAAS,CAAA;QAC3B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,KAAU;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.d.ts","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;CACvC;AAID,wBAAsB,MAAM,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoD5I"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { iamActionsForService, iamServiceKeys } from "@cloud-copilot/iam-data";
|
|
2
|
+
import { allAsterisksPattern, convertStringToPattern } from "./util.js";
|
|
3
|
+
const defaultOptions = {};
|
|
4
|
+
export async function invert(actionStringOrStrings, overrideOptions) {
|
|
5
|
+
const options = { ...defaultOptions, ...overrideOptions };
|
|
6
|
+
if (!actionStringOrStrings) {
|
|
7
|
+
throw new Error('at least one action must be provided to invert');
|
|
8
|
+
}
|
|
9
|
+
let allActionsFound = false;
|
|
10
|
+
const servicesToExclude = new Set();
|
|
11
|
+
const excludePatterns = {};
|
|
12
|
+
const actionsToInvert = Array.isArray(actionStringOrStrings) ? actionStringOrStrings : [actionStringOrStrings];
|
|
13
|
+
for (const action of actionsToInvert) {
|
|
14
|
+
if (action.match(allAsterisksPattern)) {
|
|
15
|
+
allActionsFound = true;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
const parts = action.split(':');
|
|
19
|
+
if (parts.length !== 2) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const [service, wildcardActions] = parts.map(part => part.toLowerCase());
|
|
23
|
+
if (wildcardActions.match(allAsterisksPattern)) {
|
|
24
|
+
servicesToExclude.add(service);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!excludePatterns[service]) {
|
|
28
|
+
excludePatterns[service] = [];
|
|
29
|
+
}
|
|
30
|
+
excludePatterns[service].push(convertStringToPattern(wildcardActions));
|
|
31
|
+
}
|
|
32
|
+
if (allActionsFound) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const allServices = await iamServiceKeys();
|
|
36
|
+
const actionLists = await Promise.all(allServices.map(async (serviceKey) => {
|
|
37
|
+
if (servicesToExclude.has(serviceKey)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const serviceActions = await iamActionsForService(serviceKey);
|
|
41
|
+
const excludePatternsForService = excludePatterns[serviceKey] || [];
|
|
42
|
+
if (excludePatternsForService.length === 0) {
|
|
43
|
+
return serviceActions.map(action => `${serviceKey}:${action}`);
|
|
44
|
+
}
|
|
45
|
+
return serviceActions.filter(action => {
|
|
46
|
+
return !excludePatternsForService.some(pattern => action.match(pattern));
|
|
47
|
+
}).map(action => `${serviceKey}:${action}`);
|
|
48
|
+
}));
|
|
49
|
+
return Array.from(new Set(actionLists.flat())).sort();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=invert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAAW,CAAA;AAE3C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnE"}
|
package/dist/esm/util.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAA;AAE3C,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,MAAM,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAClF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC"}
|