@cloud-copilot/iam-expand 0.1.9 → 0.1.10
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/README.md +3 -3
- package/dist/cjs/cli.js +2 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli_utils.d.ts +1 -1
- package/dist/cjs/cli_utils.d.ts.map +1 -1
- package/dist/cjs/cli_utils.js +1 -1
- package/dist/cjs/cli_utils.js.map +1 -1
- package/dist/esm/cli.js +2 -2
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli_utils.d.ts +1 -1
- package/dist/esm/cli_utils.d.ts.map +1 -1
- package/dist/esm/cli_utils.js +1 -1
- package/dist/esm/cli_utils.js.map +1 -1
- package/package.json +4 -1
- package/examples/README.md +0 -3
- package/examples/download-and-expand-authorization-details.sh +0 -8
- package/examples/download-and-expand-policies.sh +0 -22
- package/postbuild.sh +0 -13
- package/src/cli.ts +0 -94
- package/src/cli_utils.test.ts +0 -147
- package/src/cli_utils.ts +0 -84
- package/src/expand.test.ts +0 -489
- package/src/expand.ts +0 -166
- package/src/expand_file.test.ts +0 -184
- package/src/expand_file.ts +0 -39
- package/src/index.ts +0 -1
- package/src/stdin.ts +0 -34
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.esm.json +0 -14
- package/tsconfig.json +0 -22
package/README.md
CHANGED
|
@@ -151,14 +151,14 @@ Update with either:
|
|
|
151
151
|
npm update -g @cloud-copilot/iam-data
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
-
#### `--read-wait-
|
|
154
|
+
#### `--read-wait-ms`
|
|
155
155
|
When reading from stdin (see [below](#read-from-stdin)) the CLI will wait 10 seconds for the first byte to be read before timing out. This is enough time for most operations. If you want to wait longer you can set this flag to the number of milliseconds you want to wait.
|
|
156
156
|
|
|
157
157
|
```bash
|
|
158
158
|
cat policy.json | iam-expand
|
|
159
159
|
# Will wait for 10 seconds for input, which is plenty of time for a local file.
|
|
160
160
|
|
|
161
|
-
curl "https://government-secrets.s3.amazonaws.com/secret-policy.json" | iam-expand --read-wait-
|
|
161
|
+
curl "https://government-secrets.s3.amazonaws.com/secret-policy.json" | iam-expand --read-wait-ms=20_000
|
|
162
162
|
# Will wait for 20 seconds for the first byte from curl before timing out. Adjust as needed
|
|
163
163
|
```
|
|
164
164
|
|
|
@@ -232,7 +232,7 @@ Gives this file in `expanded-policy.json`
|
|
|
232
232
|
|
|
233
233
|
You can also use this to expand the actions from the output of commands.
|
|
234
234
|
```bash
|
|
235
|
-
aws iam get-account-authorization-details --output json | iam-expand --expand-service-asterisk --read-wait-
|
|
235
|
+
aws iam get-account-authorization-details --output json | iam-expand --expand-service-asterisk --read-wait-ms=20_000 > expanded-authorization-details.json
|
|
236
236
|
# Now you can search the output for actions you are interested in
|
|
237
237
|
grep -n "kms:DisableKey" expanded-inline-policies.json
|
|
238
238
|
```
|
package/dist/cjs/cli.js
CHANGED
|
@@ -34,8 +34,8 @@ function printUsage() {
|
|
|
34
34
|
console.log(' --invalid-action-behavior=error: Throw an error if an invalid action is encountered');
|
|
35
35
|
console.log('CLI Behavior Options:');
|
|
36
36
|
console.log(' --show-data-version: Print the version of the iam-data package being used and exit');
|
|
37
|
-
console.log(' --read-wait-
|
|
38
|
-
console.log('
|
|
37
|
+
console.log(' --read-wait-ms: Millisenconds to wait for the first byte from stdin before timing out.');
|
|
38
|
+
console.log(' Example: --read-wait-ms=10_000');
|
|
39
39
|
process.exit(1);
|
|
40
40
|
}
|
|
41
41
|
const args = process.argv.slice(2); // Ignore the first two elements
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,sDAA2E;AAC3E,iDAA4D;AAC5D,2CAAwE;AAExE,MAAM,WAAW,GAAG,YAAY,CAAA;AAChC,MAAM,WAAW,GAAG,yBAAyB,CAAA;AAE7C,KAAK,UAAU,cAAc,CAAC,aAAuB,EAAE,OAAyC;IAC9F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAgB,EAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC7D,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,oCAAoC,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,2BAA2B,WAAW,YAAY,CAAC,CAAA;IAC/D,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;IACtE,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;IAC5F,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAA;IAC5G,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAA;IACrF,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;IAC9E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACtG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;IACnG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/cli_utils.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAI7E,UAAU,UAAW,SAAQ,uBAAuB;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,
|
|
1
|
+
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAI7E,UAAU,UAAW,SAAQ,uBAAuB;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBxE;AAGD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAC,CAAC,CAgB1G"}
|
package/dist/cjs/cli_utils.js
CHANGED
|
@@ -58,7 +58,7 @@ function extractActionsFromLineOfInput(line) {
|
|
|
58
58
|
* @returns an array of strings from stdin
|
|
59
59
|
*/
|
|
60
60
|
async function parseStdIn(options) {
|
|
61
|
-
const delay = options.
|
|
61
|
+
const delay = options.readWaitMs ? parseInt(options.readWaitMs.replaceAll(/\D/g, '')) : undefined;
|
|
62
62
|
const data = await (0, stdin_js_1.readStdin)(delay);
|
|
63
63
|
if (data.length === 0) {
|
|
64
64
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":";;AAeA,0CAGC;AAQD,wCAyBC;AAGD,sEAMC;AAOD,gCAgBC;AAlFD,2CAA6E;AAC7E,qDAAsD;AACtD,yCAAuC;AAOvC;;;;GAIG;AACH,SAAgB,eAAe,CAAC,GAAW;IACzC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACtB,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,UAAoB;IACjD,MAAM,OAAO,GAAqC,EAAE,CAAE;IAEtD,KAAI,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAW,MAAM,CAAA;QACxB,IAAI,KAAK,GAAqB,IAAI,CAAA;QAClC,IAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,CAAC,GAAG,EAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QAED,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;IACvC,CAAC;IAED,IAAG,OAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAA+B,CAAA;QAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpG,MAAM,QAAQ,GAAG,iCAAqB,CAAC,YAAkD,CAAC,CAAC;QAC3F,IAAG,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,qBAAqB,GAAG,QAAQ,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,SAAgB,6BAA6B,CAAC,IAAY;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAE5C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAAC,OAA4B;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -32,8 +32,8 @@ function printUsage() {
|
|
|
32
32
|
console.log(' --invalid-action-behavior=error: Throw an error if an invalid action is encountered');
|
|
33
33
|
console.log('CLI Behavior Options:');
|
|
34
34
|
console.log(' --show-data-version: Print the version of the iam-data package being used and exit');
|
|
35
|
-
console.log(' --read-wait-
|
|
36
|
-
console.log('
|
|
35
|
+
console.log(' --read-wait-ms: Millisenconds to wait for the first byte from stdin before timing out.');
|
|
36
|
+
console.log(' Example: --read-wait-ms=10_000');
|
|
37
37
|
process.exit(1);
|
|
38
38
|
}
|
|
39
39
|
const args = process.argv.slice(2); // Ignore the first two elements
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAA2B,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,GAAG,YAAY,CAAA;AAChC,MAAM,WAAW,GAAG,yBAAyB,CAAA;AAE7C,KAAK,UAAU,cAAc,CAAC,aAAuB,EAAE,OAAyC;IAC9F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAC7D,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,oCAAoC,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,2BAA2B,WAAW,YAAY,CAAC,CAAA;IAC/D,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;IACtE,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;IAC5F,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAA;IAC5G,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAA;IACrF,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;IAC9E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAA;IACtG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAA;IACnG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/cli_utils.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAI7E,UAAU,UAAW,SAAQ,uBAAuB;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,
|
|
1
|
+
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAI7E,UAAU,UAAW,SAAQ,uBAAuB;IAClD,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBxE;AAGD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAC,CAAC,CAgB1G"}
|
package/dist/esm/cli_utils.js
CHANGED
|
@@ -52,7 +52,7 @@ export function extractActionsFromLineOfInput(line) {
|
|
|
52
52
|
* @returns an array of strings from stdin
|
|
53
53
|
*/
|
|
54
54
|
export async function parseStdIn(options) {
|
|
55
|
-
const delay = options.
|
|
55
|
+
const delay = options.readWaitMs ? parseInt(options.readWaitMs.replaceAll(/\D/g, '')) : undefined;
|
|
56
56
|
const data = await readStdin(delay);
|
|
57
57
|
if (data.length === 0) {
|
|
58
58
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACtB,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAoB;IACjD,MAAM,OAAO,GAAqC,EAAE,CAAE;IAEtD,KAAI,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAW,MAAM,CAAA;QACxB,IAAI,KAAK,GAAqB,IAAI,CAAA;QAClC,IAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,CAAC,GAAG,EAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QAED,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;IACvC,CAAC;IAED,IAAG,OAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAA+B,CAAA;QAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpG,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAkD,CAAC,CAAC;QAC3F,IAAG,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,qBAAqB,GAAG,QAAQ,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAE5C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA4B;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACtB,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAoB;IACjD,MAAM,OAAO,GAAqC,EAAE,CAAE;IAEtD,KAAI,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAW,MAAM,CAAA;QACxB,IAAI,KAAK,GAAqB,IAAI,CAAA;QAClC,IAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,CAAC,GAAG,EAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QAED,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;IACvC,CAAC;IAED,IAAG,OAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAA+B,CAAA;QAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpG,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAkD,CAAC,CAAC;QAC3F,IAAG,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,qBAAqB,GAAG,QAAQ,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAC1D,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAE5C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SACb,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA4B;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACnC,IAAG,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAClE,OAAO,EAAC,MAAM,EAAC,CAAA;IACjB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC,CAAA,CAAC;IAGrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1E,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,CAAA;AAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-copilot/iam-expand",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Expand AWS IAM Actions with Wildcards",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
"require": "./dist/cjs/index.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/**/*"
|
|
17
|
+
],
|
|
15
18
|
"types": "dist/cjs/index.d.ts",
|
|
16
19
|
"bin": {
|
|
17
20
|
"iam-expand": "dist/cjs/cli.js"
|
package/examples/README.md
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
: <<'END_COMMENT'
|
|
4
|
-
This script will download all the account authorization details which contains
|
|
5
|
-
inline policies and expand them then save them to a file.
|
|
6
|
-
END_COMMENT
|
|
7
|
-
|
|
8
|
-
aws iam get-account-authorization-details --output json | iam-expand --expand-service-asterisk --read-wait-time=20_000 > expanded-authorization-details.json
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
: <<'END_COMMENT'
|
|
4
|
-
This script will download all customer-managed policies in the account, expand them, and save them to files
|
|
5
|
-
in the `policies` directory. The file name will be the policy name with the path as a prefix.
|
|
6
|
-
END_COMMENT
|
|
7
|
-
|
|
8
|
-
mkdir -p policies
|
|
9
|
-
|
|
10
|
-
# List all managed policies that are attached to any entity
|
|
11
|
-
policies=$(aws iam list-policies --scope All --only-attached --query 'Policies[].{Arn:Arn,VersionId:DefaultVersionId,Path:Path,Name:PolicyName}' --output json)
|
|
12
|
-
|
|
13
|
-
# Loop through each policy to get the default version and save it
|
|
14
|
-
echo "$policies" | jq -c '.[]' | while read -r line; do
|
|
15
|
-
arn=$(echo "$line" | jq -r '.Arn')
|
|
16
|
-
version_id=$(echo "$line" | jq -r '.VersionId')
|
|
17
|
-
path=$(echo "$line" | jq -r '.Path' | tr '/' '_')
|
|
18
|
-
name=$(echo "$line" | jq -r '.Name')
|
|
19
|
-
|
|
20
|
-
file_name="policies/${path}${name}.json"
|
|
21
|
-
aws iam get-policy-version --policy-arn "$arn" --version-id "$version_id" --query 'PolicyVersion.Document' --output json 2>/dev/null | iam-expand --read-wait-time=10_000 > $file_name
|
|
22
|
-
done
|
package/postbuild.sh
DELETED
package/src/cli.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { iamDataUpdatedAt, iamDataVersion } from "@cloud-copilot/iam-data";
|
|
4
|
-
import { convertOptions, parseStdIn } from "./cli_utils.js";
|
|
5
|
-
import { expandIamActions, ExpandIamActionsOptions } from "./expand.js";
|
|
6
|
-
|
|
7
|
-
const commandName = 'iam-expand'
|
|
8
|
-
const dataPackage = '@cloud-copilot/iam-data'
|
|
9
|
-
|
|
10
|
-
async function expandAndPrint(actionStrings: string[], options: Partial<ExpandIamActionsOptions>) {
|
|
11
|
-
try {
|
|
12
|
-
const result = await expandIamActions(actionStrings, options)
|
|
13
|
-
for (const action of result) {
|
|
14
|
-
console.log(action)
|
|
15
|
-
}
|
|
16
|
-
} catch (e: any) {
|
|
17
|
-
console.error(e.message)
|
|
18
|
-
process.exit(1)
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function printUsage() {
|
|
23
|
-
console.log('No arguments provided or input from stdin.')
|
|
24
|
-
console.log('Usage:')
|
|
25
|
-
console.log(` ${commandName} [options] [action1] [action2] ...`)
|
|
26
|
-
console.log(` <input from stdout> | ${commandName} [options]`)
|
|
27
|
-
console.log('Action Expanding Options:')
|
|
28
|
-
console.log(' --expand-asterisk: Expand the * action to all actions')
|
|
29
|
-
console.log(' --expand-service-asterisk: Expand service:* to all actions for that service')
|
|
30
|
-
console.log(' --error-on-invalid-format: Throw an error if the action string is not in the correct format')
|
|
31
|
-
console.log(' --error-on-invalid-service: Throw an error if a service is not found')
|
|
32
|
-
console.log(' --invalid-action-behavior: What to do when an invalid action is encountered:')
|
|
33
|
-
console.log(' --invalid-action-behavior=remove: Remove the invalid action')
|
|
34
|
-
console.log(' --invalid-action-behavior=include: Include the invalid action')
|
|
35
|
-
console.log(' --invalid-action-behavior=error: Throw an error if an invalid action is encountered')
|
|
36
|
-
console.log('CLI Behavior Options:')
|
|
37
|
-
console.log(' --show-data-version: Print the version of the iam-data package being used and exit')
|
|
38
|
-
console.log(' --read-wait-time: Millisenconds to wait for the first byte from stdin before timing out.')
|
|
39
|
-
console.log(' Example: --read-wait-time=10_000')
|
|
40
|
-
process.exit(1)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const args = process.argv.slice(2); // Ignore the first two elements
|
|
44
|
-
const actionStrings: string[] = []
|
|
45
|
-
const optionStrings: string[] = []
|
|
46
|
-
|
|
47
|
-
for (const arg of args) {
|
|
48
|
-
if(arg.startsWith('--')) {
|
|
49
|
-
optionStrings.push(arg)
|
|
50
|
-
} else {
|
|
51
|
-
actionStrings.push(arg)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async function run() {
|
|
56
|
-
const options = convertOptions(optionStrings)
|
|
57
|
-
if(options.showDataVersion) {
|
|
58
|
-
const version = await iamDataVersion()
|
|
59
|
-
const updatedAt =
|
|
60
|
-
console.log(`${dataPackage} version: ${version}`)
|
|
61
|
-
console.log(`Data last updated: ${await iamDataUpdatedAt()}`)
|
|
62
|
-
console.log(`Update with either:`)
|
|
63
|
-
console.log(` npm update ${dataPackage}`)
|
|
64
|
-
console.log(` npm update -g ${dataPackage}`)
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if(actionStrings.length === 0) {
|
|
69
|
-
//If no actions are provided, read from stdin
|
|
70
|
-
const stdInResult = await parseStdIn(options)
|
|
71
|
-
if(stdInResult.object) {
|
|
72
|
-
console.log(JSON.stringify(stdInResult.object, null, 2))
|
|
73
|
-
return
|
|
74
|
-
} else if (stdInResult.strings) {
|
|
75
|
-
const otherActions = stdInResult.strings
|
|
76
|
-
if(otherActions.length > 0 && options.expandAsterisk) {
|
|
77
|
-
console.warn('Notice: --expand-asterisk is not supported when reading from stdin, ignoring.')
|
|
78
|
-
}
|
|
79
|
-
actionStrings.push(...otherActions)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if(actionStrings.length > 0) {
|
|
84
|
-
await expandAndPrint(actionStrings, options)
|
|
85
|
-
return
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
printUsage()
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
run().catch((e) => {
|
|
92
|
-
console.error(e)
|
|
93
|
-
process.exit(1)
|
|
94
|
-
}).then(() => process.exit(0)).finally(() => {})
|
package/src/cli_utils.test.ts
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { convertOptions, dashToCamelCase, extractActionsFromLineOfInput, parseStdIn } from "./cli_utils";
|
|
3
|
-
import { InvalidActionBehavior } from './expand.js';
|
|
4
|
-
import { readStdin } from './stdin';
|
|
5
|
-
vi.mock('./stdin')
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
vi.resetAllMocks()
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
const extractScenarios = [
|
|
12
|
-
{input: ' s3:Get* ', expected: ['s3:Get*']},
|
|
13
|
-
{input: ' s3:Get* s3:Put* ', expected: ['s3:Get*', 's3:Put*']},
|
|
14
|
-
{input: ' "s3:Get*", "s3:Put*"', expected: ['s3:Get*', 's3:Put*']},
|
|
15
|
-
{input: ' `s3:Get*`, `s3:Put*`', expected: ['s3:Get*', 's3:Put*']},
|
|
16
|
-
{input: ` 's3:Get*', 's3:Put*'`, expected: ['s3:Get*', 's3:Put*']},
|
|
17
|
-
{input: ` 'resource-Groups:Get*'`, expected: ['resource-Groups:Get*']},
|
|
18
|
-
{input: `s3:Get*, s3:Put*`, expected: ['s3:Get*', 's3:Put*']},
|
|
19
|
-
{input: "s3:Put*", expected: ['s3:Put*']},
|
|
20
|
-
{input: ":s3:Put*", expected: []},
|
|
21
|
-
{input: 'arn:aws:apigateway:*::/apis', expected: []},
|
|
22
|
-
{input: 'hamburger', expected: []},
|
|
23
|
-
]
|
|
24
|
-
|
|
25
|
-
const dashToCamelCaseScenarios = [
|
|
26
|
-
{input: "--distinct", expected: "distinct"},
|
|
27
|
-
{input: "--sort", expected: "sort"},
|
|
28
|
-
{input: "--expand-asterisk", expected: "expandAsterisk"},
|
|
29
|
-
{input: "--expand-service-asterisk", expected: "expandServiceAsterisk"},
|
|
30
|
-
{input: "--error-on-missing-service", expected: "errorOnMissingService"},
|
|
31
|
-
{input: "--error-on-invalid-format", expected: "errorOnInvalidFormat"},
|
|
32
|
-
{input: "--show-data-version", expected: "showDataVersion"},
|
|
33
|
-
]
|
|
34
|
-
|
|
35
|
-
describe('cli_utils', () => {
|
|
36
|
-
describe('extractActionsFromLineOfInput', () => {
|
|
37
|
-
extractScenarios.forEach((scenario, index) => {
|
|
38
|
-
it(`should return for scenario ${index}: ${scenario.input} `, () => {
|
|
39
|
-
// Given the input
|
|
40
|
-
const input = scenario.input
|
|
41
|
-
|
|
42
|
-
// When the actions are extracted
|
|
43
|
-
const result = extractActionsFromLineOfInput(input)
|
|
44
|
-
|
|
45
|
-
// Then I should get the expected result
|
|
46
|
-
expect(result).toEqual(scenario.expected)
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
describe('dashToCamelCase', () => {
|
|
52
|
-
dashToCamelCaseScenarios.forEach((scenario, index) => {
|
|
53
|
-
it(`should return for scenario ${index}: ${scenario.input} `, () => {
|
|
54
|
-
// Given the input
|
|
55
|
-
const input = scenario.input
|
|
56
|
-
|
|
57
|
-
// When the input is converted
|
|
58
|
-
const result = dashToCamelCase(input)
|
|
59
|
-
|
|
60
|
-
// Then I should get the expected result
|
|
61
|
-
expect(result).toEqual(scenario.expected)
|
|
62
|
-
})
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
describe('convertOptions', () => {
|
|
67
|
-
it('should convert the options to keys on an object', () => {
|
|
68
|
-
// Given options as an array of strings
|
|
69
|
-
const optionArgs = ['--distinct', '--sort', '--something-cool', '--key-with-value=10']
|
|
70
|
-
|
|
71
|
-
// When the options are converted
|
|
72
|
-
const result = convertOptions(optionArgs)
|
|
73
|
-
|
|
74
|
-
// Then each option should be a key on the object
|
|
75
|
-
expect(result).toEqual({
|
|
76
|
-
distinct: true,
|
|
77
|
-
sort: true,
|
|
78
|
-
somethingCool: true,
|
|
79
|
-
keyWithValue: "10",
|
|
80
|
-
})
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('should convert the invalidActionBehavior to an enum', () => {
|
|
84
|
-
// Given an invalid action behavior option
|
|
85
|
-
const optionArgs = ['--invalid-action-behavior=error']
|
|
86
|
-
|
|
87
|
-
// When the options are converted
|
|
88
|
-
const result = convertOptions(optionArgs)
|
|
89
|
-
|
|
90
|
-
// Then the invalidActionBehavior should be an enum
|
|
91
|
-
expect(result).toEqual({
|
|
92
|
-
invalidActionBehavior: InvalidActionBehavior.Error,
|
|
93
|
-
})
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('should remove the invalidActionBehavior if the value is not valid', () => {
|
|
97
|
-
// Given an invalid action behavior option
|
|
98
|
-
const optionArgs = ['--invalid-action-behavior=not-a-real-value']
|
|
99
|
-
|
|
100
|
-
// When the options are converted
|
|
101
|
-
const result = convertOptions(optionArgs)
|
|
102
|
-
|
|
103
|
-
// Then the invalidActionBehavior should be removed
|
|
104
|
-
expect(result).toEqual({})
|
|
105
|
-
})
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
describe('parseStdIn', () => {
|
|
109
|
-
it('should return an empty object if no data is provided', async () => {
|
|
110
|
-
// Given no data is provided
|
|
111
|
-
vi.mocked(readStdin).mockResolvedValue('')
|
|
112
|
-
|
|
113
|
-
// When the actions are parsed
|
|
114
|
-
const result = await parseStdIn({})
|
|
115
|
-
|
|
116
|
-
// Then I should get an empty object
|
|
117
|
-
expect(result).toEqual({})
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
it('should return an array of actions from the data if it cannot be parsed', async () => {
|
|
121
|
-
// Given there is data with actions in multiple lines
|
|
122
|
-
vi.mocked(readStdin).mockResolvedValue('s3:GetObject\ns3:PutObject\ns3:DeleteObject\n')
|
|
123
|
-
|
|
124
|
-
// When the actions are parsed
|
|
125
|
-
const result = await parseStdIn({})
|
|
126
|
-
|
|
127
|
-
// Then I should get the expected actions
|
|
128
|
-
expect(result).toEqual({strings: ['s3:GetObject', 's3:PutObject', 's3:DeleteObject']})
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
it('should return an object if the data can be parsed', async () => {
|
|
132
|
-
// Given there is data that can be parsed
|
|
133
|
-
const dataValue = {
|
|
134
|
-
Action: ["s3:GetObject"],
|
|
135
|
-
Version: "2012-10-17"
|
|
136
|
-
}
|
|
137
|
-
vi.mocked(readStdin).mockResolvedValue(JSON.stringify(dataValue))
|
|
138
|
-
|
|
139
|
-
// When the actions are parsed
|
|
140
|
-
const result = await parseStdIn({})
|
|
141
|
-
|
|
142
|
-
// Then I should get the expected object
|
|
143
|
-
expect(result).toEqual({object: dataValue})
|
|
144
|
-
})
|
|
145
|
-
})
|
|
146
|
-
})
|
|
147
|
-
|
package/src/cli_utils.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { ExpandIamActionsOptions, InvalidActionBehavior } from "./expand.js";
|
|
3
|
-
import { expandJsonDocument } from "./expand_file.js";
|
|
4
|
-
import { readStdin } from "./stdin.js";
|
|
5
|
-
|
|
6
|
-
interface CliOptions extends ExpandIamActionsOptions {
|
|
7
|
-
showDataVersion: boolean
|
|
8
|
-
readWaitTime: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Convert a dash-case string to camelCase
|
|
13
|
-
* @param str the string to convert
|
|
14
|
-
* @returns the camelCase string
|
|
15
|
-
*/
|
|
16
|
-
export function dashToCamelCase(str: string): string {
|
|
17
|
-
str = str.substring(2)
|
|
18
|
-
return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Convert an array of option strings to an object
|
|
23
|
-
*
|
|
24
|
-
* @param optionArgs the array of option strings to convert
|
|
25
|
-
* @returns the object representation of the options
|
|
26
|
-
*/
|
|
27
|
-
export function convertOptions(optionArgs: string[]): Partial<CliOptions> {
|
|
28
|
-
const options: Record<string, string | boolean> = {} ;
|
|
29
|
-
|
|
30
|
-
for(const option of optionArgs) {
|
|
31
|
-
let key: string = option
|
|
32
|
-
let value: boolean | string = true
|
|
33
|
-
if(option.includes('=')) {
|
|
34
|
-
[key,value] = option.split('=')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
options[dashToCamelCase(key)] = value
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if(typeof(options.invalidActionBehavior) === 'string') {
|
|
41
|
-
const behaviorString = options.invalidActionBehavior as string
|
|
42
|
-
const cleanedInput = behaviorString.charAt(0).toUpperCase() + behaviorString.slice(1).toLowerCase();
|
|
43
|
-
const behavior = InvalidActionBehavior[cleanedInput as keyof typeof InvalidActionBehavior];
|
|
44
|
-
if(behavior) {
|
|
45
|
-
options.invalidActionBehavior = behavior
|
|
46
|
-
} else {
|
|
47
|
-
delete options['invalidActionBehavior']
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return options
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const actionPattern = /\:?([a-zA-Z0-9-]+:[a-zA-Z0-9*]+)/g;
|
|
55
|
-
export function extractActionsFromLineOfInput(line: string): string[] {
|
|
56
|
-
const matches = line.matchAll(actionPattern)
|
|
57
|
-
|
|
58
|
-
return Array.from(matches)
|
|
59
|
-
.filter((match) => !match[0].startsWith('arn:') && !match[0].startsWith(':'))
|
|
60
|
-
.map((match) => match[1])
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Parse the actions from stdin
|
|
65
|
-
*
|
|
66
|
-
* @returns an array of strings from stdin
|
|
67
|
-
*/
|
|
68
|
-
export async function parseStdIn(options: Partial<CliOptions>): Promise<{strings?: string[], object?: any}> {
|
|
69
|
-
const delay = options.readWaitTime ? parseInt(options.readWaitTime.replaceAll(/\D/g, '')) : undefined
|
|
70
|
-
const data = await readStdin(delay)
|
|
71
|
-
if(data.length === 0) {
|
|
72
|
-
return {}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
const object = await expandJsonDocument(options, JSON.parse(data))
|
|
77
|
-
return {object}
|
|
78
|
-
} catch (err: any) {}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const lines = data.split('\n')
|
|
82
|
-
const actions = lines.flatMap(line => extractActionsFromLineOfInput(line))
|
|
83
|
-
return {strings: actions}
|
|
84
|
-
}
|