@prism-d1/cli 1.0.94 → 1.0.96

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 (37) hide show
  1. package/dist/src/commands/bedrock-protection/scan-account.d.ts +45 -0
  2. package/dist/src/commands/bedrock-protection/scan-account.d.ts.map +1 -0
  3. package/dist/src/commands/bedrock-protection/scan-account.js +107 -0
  4. package/dist/src/commands/bedrock-protection/scan-account.js.map +1 -0
  5. package/dist/src/commands/bedrock-protection/scan-org.d.ts +23 -0
  6. package/dist/src/commands/bedrock-protection/scan-org.d.ts.map +1 -0
  7. package/dist/src/commands/bedrock-protection/scan-org.js +328 -0
  8. package/dist/src/commands/bedrock-protection/scan-org.js.map +1 -0
  9. package/dist/src/commands/bedrock-protection/scan-repo.d.ts +16 -0
  10. package/dist/src/commands/bedrock-protection/scan-repo.d.ts.map +1 -0
  11. package/dist/src/commands/bedrock-protection/scan-repo.js +397 -0
  12. package/dist/src/commands/bedrock-protection/scan-repo.js.map +1 -0
  13. package/dist/src/utils/audit-bedrock.d.ts +25 -0
  14. package/dist/src/utils/audit-bedrock.d.ts.map +1 -0
  15. package/dist/src/utils/audit-bedrock.js +331 -0
  16. package/dist/src/utils/audit-bedrock.js.map +1 -0
  17. package/dist/src/utils/audit-iam.d.ts +7 -0
  18. package/dist/src/utils/audit-iam.d.ts.map +1 -0
  19. package/dist/src/utils/audit-iam.js +239 -0
  20. package/dist/src/utils/audit-iam.js.map +1 -0
  21. package/dist/src/utils/audit-org.d.ts +80 -0
  22. package/dist/src/utils/audit-org.d.ts.map +1 -0
  23. package/dist/src/utils/audit-org.js +304 -0
  24. package/dist/src/utils/audit-org.js.map +1 -0
  25. package/dist/src/utils/audit.d.ts +61 -0
  26. package/dist/src/utils/audit.d.ts.map +1 -0
  27. package/dist/src/utils/audit.js +90 -0
  28. package/dist/src/utils/audit.js.map +1 -0
  29. package/dist/src/utils/aws.d.ts +69 -0
  30. package/dist/src/utils/aws.d.ts.map +1 -0
  31. package/dist/src/utils/aws.js +103 -0
  32. package/dist/src/utils/aws.js.map +1 -0
  33. package/dist/src/utils/exec.d.ts +12 -1
  34. package/dist/src/utils/exec.d.ts.map +1 -1
  35. package/dist/src/utils/exec.js +23 -2
  36. package/dist/src/utils/exec.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/utils/aws.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;2CACuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAejE;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,MAAM,GACd;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAiCjE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAShE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIpD;AAED,eAAO,MAAM,cAAc;;;CAG1B,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Thin JSON wrapper over the AWS CLI for the audit commands.
3
+ *
4
+ * Uses `run()` (execFileSync with an args array, no shell), so nothing here is
5
+ * exposed to shell interpretation even though callers pass a user-supplied
6
+ * --profile and --region.
7
+ */
8
+ import { run } from './exec.js';
9
+ /**
10
+ * Several AWS commands exit 0 with a COMPLETELY EMPTY body when the thing being
11
+ * described does not exist -- measured on `budgets describe-budgets` with no
12
+ * budgets, and on `bedrock get-model-invocation-logging-configuration` with
13
+ * logging disabled. `JSON.parse('')` throws, so a naive wrapper crashes on
14
+ * precisely the accounts that most need auditing. Empty output is normalised to
15
+ * {} here and interpreted by each individual check.
16
+ */
17
+ export function aws(args, target) {
18
+ const argv = target?.profile ? [...args, '--profile', target.profile] : args;
19
+ const res = run('aws', [...argv, '--output', 'json'], target?.env);
20
+ const body = (res.stdout || '').trim();
21
+ if (!res.ok) {
22
+ const m = /An error occurred \(([A-Za-z0-9.]+)\)/.exec(res.stderr || '');
23
+ return { ok: false, json: null, errorCode: m ? m[1] : '', raw: res.stderr || '' };
24
+ }
25
+ if (!body)
26
+ return { ok: true, json: {}, errorCode: '', raw: '' };
27
+ try {
28
+ return { ok: true, json: JSON.parse(body), errorCode: '', raw: body };
29
+ }
30
+ catch {
31
+ return { ok: false, json: null, errorCode: 'UnparseableResponse', raw: body };
32
+ }
33
+ }
34
+ /**
35
+ * Assume a role and return credentials as an env fragment, or an error string.
36
+ *
37
+ * Deliberately returns the failure rather than throwing: at org scale a role
38
+ * that cannot be assumed is an expected condition (an account onboarded without
39
+ * the role, an SCP denying it), and the caller must surface that account as
40
+ * INDETERMINATE rather than dropping it. A silently skipped account is exactly
41
+ * how an org audit ends up reporting on a subset while looking complete.
42
+ */
43
+ export function assumeRole(accountId, roleName, sessionName, durationSeconds, from, region) {
44
+ const res = aws([
45
+ 'sts', 'assume-role',
46
+ '--role-arn', `arn:aws:iam::${accountId}:role/${roleName}`,
47
+ '--role-session-name', sessionName,
48
+ '--duration-seconds', String(durationSeconds),
49
+ ], from);
50
+ if (!res.ok) {
51
+ const reason = res.errorCode
52
+ || (res.raw.split('\n').map((l) => l.trim()).filter(Boolean).pop() ?? 'unknown error');
53
+ return { error: reason };
54
+ }
55
+ const c = res.json?.Credentials;
56
+ if (!c?.AccessKeyId || !c?.SecretAccessKey || !c?.SessionToken) {
57
+ return { error: 'assume-role returned no usable credentials' };
58
+ }
59
+ return {
60
+ env: {
61
+ AWS_ACCESS_KEY_ID: c.AccessKeyId,
62
+ AWS_SECRET_ACCESS_KEY: c.SecretAccessKey,
63
+ AWS_SESSION_TOKEN: c.SessionToken,
64
+ // REMOVED, not blanked. A profile left in the ambient environment takes
65
+ // precedence over the injected keys and would silently audit the WRONG
66
+ // account -- the worst failure available here, since every finding would
67
+ // be misattributed. Blanking instead of removing breaks the CLI outright.
68
+ AWS_PROFILE: undefined,
69
+ AWS_DEFAULT_PROFILE: undefined,
70
+ // The unset profile also took its region with it, so pin one explicitly
71
+ // rather than depending on whatever the CLI can still resolve.
72
+ ...(region ? { AWS_REGION: region, AWS_DEFAULT_REGION: region } : {}),
73
+ },
74
+ };
75
+ }
76
+ /**
77
+ * Resolve the caller's account id, or print guidance and return null.
78
+ *
79
+ * Not every failure is an AWS API error with a parseable code -- an unknown
80
+ * --profile fails in the CLI's own config layer and never reaches the service,
81
+ * so fall back to its stderr rather than reporting "unknown error".
82
+ */
83
+ export function resolveAccount(target) {
84
+ const who = aws(['sts', 'get-caller-identity'], target);
85
+ if (who.ok)
86
+ return who.json?.Account ?? null;
87
+ const reason = who.errorCode
88
+ || (who.raw.split('\n').map((l) => l.trim()).filter(Boolean).pop() ?? 'unknown error');
89
+ console.error(`\n❌ Cannot resolve AWS identity: ${reason}`);
90
+ console.error(` Configure credentials, or pass --profile <name>.\n`);
91
+ return null;
92
+ }
93
+ export function daysSince(iso) {
94
+ const t = Date.parse(iso);
95
+ if (Number.isNaN(t))
96
+ return null;
97
+ return Math.floor((Date.now() - t) / 86_400_000);
98
+ }
99
+ export const PROFILE_OPTION = {
100
+ flags: '--profile <name>',
101
+ description: 'AWS CLI profile to audit (defaults to the ambient credentials)',
102
+ };
103
+ //# sourceMappingURL=aws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/utils/aws.ts"],"names":[],"mappings":"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"}
@@ -42,10 +42,21 @@ export interface RunResult {
42
42
  * latter would arrive as a single argument and the command would fail, which
43
43
  * is a loud failure rather than a silent injection.
44
44
  *
45
+ * `extraEnv` is merged over the inherited environment. It exists so a caller
46
+ * can hand a child process temporary STS credentials without writing them to
47
+ * disk or mutating this process's own environment -- the latter would leak the
48
+ * assumed role into every later call in the same run.
49
+ *
50
+ * A key mapped to `undefined` is REMOVED rather than set. Blanking is not
51
+ * equivalent: `AWS_PROFILE=''` makes the AWS CLI look for a profile literally
52
+ * named `()` and fail with "The config profile () could not be found", so
53
+ * injected credentials are ignored and every call errors. Measured, not
54
+ * theoretical.
55
+ *
45
56
  * Never throws: a non-zero exit, a missing binary, and a signal kill all come
46
57
  * back as `ok: false`. Callers branch on `ok` and surface `stderr`.
47
58
  */
48
- export declare function run(file: string, args: string[]): RunResult;
59
+ export declare function run(file: string, args: string[], extraEnv?: Record<string, string | undefined>): RunResult;
49
60
  /**
50
61
  * Like run(), but inherits stdio so the child can drive the terminal.
51
62
  *
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/utils/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAOpE"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/utils/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAmB1G;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAOpE"}
@@ -38,15 +38,36 @@ import { execFileSync } from 'node:child_process';
38
38
  * latter would arrive as a single argument and the command would fail, which
39
39
  * is a loud failure rather than a silent injection.
40
40
  *
41
+ * `extraEnv` is merged over the inherited environment. It exists so a caller
42
+ * can hand a child process temporary STS credentials without writing them to
43
+ * disk or mutating this process's own environment -- the latter would leak the
44
+ * assumed role into every later call in the same run.
45
+ *
46
+ * A key mapped to `undefined` is REMOVED rather than set. Blanking is not
47
+ * equivalent: `AWS_PROFILE=''` makes the AWS CLI look for a profile literally
48
+ * named `()` and fail with "The config profile () could not be found", so
49
+ * injected credentials are ignored and every call errors. Measured, not
50
+ * theoretical.
51
+ *
41
52
  * Never throws: a non-zero exit, a missing binary, and a signal kill all come
42
53
  * back as `ok: false`. Callers branch on `ok` and surface `stderr`.
43
54
  */
44
- export function run(file, args) {
55
+ export function run(file, args, extraEnv) {
56
+ let env = process.env;
57
+ if (extraEnv) {
58
+ env = { ...process.env };
59
+ for (const [k, v] of Object.entries(extraEnv)) {
60
+ if (v === undefined)
61
+ delete env[k];
62
+ else
63
+ env[k] = v;
64
+ }
65
+ }
45
66
  try {
46
67
  const stdout = execFileSync(file, args, {
47
68
  encoding: 'utf8',
48
69
  stdio: ['pipe', 'pipe', 'pipe'],
49
- env: process.env,
70
+ env,
50
71
  }).trim();
51
72
  return { ok: true, stdout, stderr: '' };
52
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/utils/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAc;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAc;IACzD,IAAI,CAAC;QACH,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/utils/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,IAAc,EAAE,QAA6C;IAC7F,IAAI,GAAG,GAAsB,OAAO,CAAC,GAAG,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;;gBAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;YACtC,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;SACJ,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAc;IACzD,IAAI,CAAC;QACH,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prism-d1/cli",
3
- "version": "1.0.94",
3
+ "version": "1.0.96",
4
4
  "description": "PRISM D1 Velocity CLI — AI development lifecycle assessment tool",
5
5
  "author": "andklee",
6
6
  "engines": {