@newrelic/preflight 1.67.3 → 1.69.0
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 +2 -2
- package/dist/config.d.ts +75 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +201 -22
- package/dist/config.js.map +1 -1
- package/dist/dashboard/routes/api-handler.d.ts +1 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +120 -94
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/data/dashboards/ai-coding-assistant-adoption-cost.json +291 -1
- package/dist/data/dashboards/ai-coding-assistant-team-view.json +6 -6
- package/dist/hooks/billed-turn-ledger.d.ts +46 -0
- package/dist/hooks/billed-turn-ledger.d.ts.map +1 -0
- package/dist/hooks/billed-turn-ledger.js +274 -0
- package/dist/hooks/billed-turn-ledger.js.map +1 -0
- package/dist/hooks/collector-script.d.ts.map +1 -1
- package/dist/hooks/collector-script.js +5 -1
- package/dist/hooks/collector-script.js.map +1 -1
- package/dist/hooks/event-processor.d.ts +3 -7
- package/dist/hooks/event-processor.d.ts.map +1 -1
- package/dist/hooks/event-processor.js +21 -7
- package/dist/hooks/event-processor.js.map +1 -1
- package/dist/hooks/parent-transcript-watcher.d.ts +6 -5
- package/dist/hooks/parent-transcript-watcher.d.ts.map +1 -1
- package/dist/hooks/parent-transcript-watcher.js +64 -62
- package/dist/hooks/parent-transcript-watcher.js.map +1 -1
- package/dist/hooks/throttled-warning.d.ts +16 -0
- package/dist/hooks/throttled-warning.d.ts.map +1 -0
- package/dist/hooks/throttled-warning.js +32 -0
- package/dist/hooks/throttled-warning.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -83
- package/dist/index.js.map +1 -1
- package/dist/install/cli.d.ts.map +1 -1
- package/dist/install/cli.js +69 -1
- package/dist/install/cli.js.map +1 -1
- package/dist/install/dashboard-health.js +1 -1
- package/dist/install/dashboard-health.js.map +1 -1
- package/dist/install/diagnostics.d.ts +2 -0
- package/dist/install/diagnostics.d.ts.map +1 -1
- package/dist/install/diagnostics.js +132 -28
- package/dist/install/diagnostics.js.map +1 -1
- package/dist/install/headless-install.d.ts +26 -0
- package/dist/install/headless-install.d.ts.map +1 -1
- package/dist/install/headless-install.js +44 -1
- package/dist/install/headless-install.js.map +1 -1
- package/dist/install/install-helper.d.ts +2 -0
- package/dist/install/install-helper.d.ts.map +1 -1
- package/dist/install/install-helper.js +5 -0
- package/dist/install/install-helper.js.map +1 -1
- package/dist/install/keychain.d.ts +18 -0
- package/dist/install/keychain.d.ts.map +1 -0
- package/dist/install/keychain.js +60 -0
- package/dist/install/keychain.js.map +1 -0
- package/dist/install/kiro-install-helper.d.ts +27 -0
- package/dist/install/kiro-install-helper.d.ts.map +1 -0
- package/dist/install/kiro-install-helper.js +53 -0
- package/dist/install/kiro-install-helper.js.map +1 -0
- package/dist/install/setup-wizard.d.ts +4 -0
- package/dist/install/setup-wizard.d.ts.map +1 -1
- package/dist/install/setup-wizard.js +94 -9
- package/dist/install/setup-wizard.js.map +1 -1
- package/dist/lib/child-env.d.ts +11 -0
- package/dist/lib/child-env.d.ts.map +1 -0
- package/dist/lib/child-env.js +35 -0
- package/dist/lib/child-env.js.map +1 -0
- package/dist/lib/git-remote.d.ts +7 -0
- package/dist/lib/git-remote.d.ts.map +1 -1
- package/dist/lib/git-remote.js +13 -0
- package/dist/lib/git-remote.js.map +1 -1
- package/dist/metrics/cost-tracker-seed.d.ts +16 -0
- package/dist/metrics/cost-tracker-seed.d.ts.map +1 -1
- package/dist/metrics/cost-tracker-seed.js +42 -7
- package/dist/metrics/cost-tracker-seed.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +11 -3
- package/dist/metrics/cost-tracker.d.ts.map +1 -1
- package/dist/metrics/cost-tracker.js +4 -1
- package/dist/metrics/cost-tracker.js.map +1 -1
- package/dist/metrics/git-activity-recorder.d.ts +3 -3
- package/dist/metrics/git-activity-recorder.d.ts.map +1 -1
- package/dist/metrics/git-activity-recorder.js +3 -3
- package/dist/metrics/git-activity-recorder.js.map +1 -1
- package/dist/metrics/git-workspace-identity.d.ts +6 -1
- package/dist/metrics/git-workspace-identity.d.ts.map +1 -1
- package/dist/metrics/git-workspace-identity.js +56 -32
- package/dist/metrics/git-workspace-identity.js.map +1 -1
- package/dist/metrics/git-workspace-reporter.d.ts +4 -3
- package/dist/metrics/git-workspace-reporter.d.ts.map +1 -1
- package/dist/metrics/git-workspace-reporter.js +4 -3
- package/dist/metrics/git-workspace-reporter.js.map +1 -1
- package/dist/metrics/pricing-init.d.ts +13 -0
- package/dist/metrics/pricing-init.d.ts.map +1 -0
- package/dist/metrics/pricing-init.js +19 -0
- package/dist/metrics/pricing-init.js.map +1 -0
- package/dist/metrics/skill-activation-tracker.d.ts +27 -0
- package/dist/metrics/skill-activation-tracker.d.ts.map +1 -0
- package/dist/metrics/skill-activation-tracker.js +92 -0
- package/dist/metrics/skill-activation-tracker.js.map +1 -0
- package/dist/metrics/turn-cost-attributor.d.ts +34 -16
- package/dist/metrics/turn-cost-attributor.d.ts.map +1 -1
- package/dist/metrics/turn-cost-attributor.js +95 -60
- package/dist/metrics/turn-cost-attributor.js.map +1 -1
- package/dist/proxy/proxy-manager.d.ts +3 -0
- package/dist/proxy/proxy-manager.d.ts.map +1 -1
- package/dist/proxy/proxy-manager.js +43 -3
- package/dist/proxy/proxy-manager.js.map +1 -1
- package/dist/proxy/types.d.ts +7 -0
- package/dist/proxy/types.d.ts.map +1 -1
- package/dist/proxy/types.js.map +1 -1
- package/dist/proxy/upstream-http.d.ts.map +1 -1
- package/dist/proxy/upstream-http.js +44 -1
- package/dist/proxy/upstream-http.js.map +1 -1
- package/dist/proxy/upstream-stdio.d.ts +0 -1
- package/dist/proxy/upstream-stdio.d.ts.map +1 -1
- package/dist/proxy/upstream-stdio.js +2 -26
- package/dist/proxy/upstream-stdio.js.map +1 -1
- package/dist/redaction-patterns.d.ts.map +1 -1
- package/dist/redaction-patterns.js +1 -0
- package/dist/redaction-patterns.js.map +1 -1
- package/dist/secret-command.d.ts +59 -0
- package/dist/secret-command.d.ts.map +1 -0
- package/dist/secret-command.js +123 -0
- package/dist/secret-command.js.map +1 -0
- package/dist/security/audit-trail.d.ts +7 -1
- package/dist/security/audit-trail.d.ts.map +1 -1
- package/dist/security/audit-trail.js +24 -0
- package/dist/security/audit-trail.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -4
- package/dist/server.js.map +1 -1
- package/dist/shared/pricing-data.d.ts.map +1 -1
- package/dist/shared/pricing-data.js +223 -32
- package/dist/shared/pricing-data.js.map +1 -1
- package/dist/shared/pricing.d.ts +25 -3
- package/dist/shared/pricing.d.ts.map +1 -1
- package/dist/shared/pricing.js +46 -9
- package/dist/shared/pricing.js.map +1 -1
- package/dist/shared/tokens.d.ts +16 -0
- package/dist/shared/tokens.d.ts.map +1 -1
- package/dist/shared/tokens.js +18 -0
- package/dist/shared/tokens.js.map +1 -1
- package/dist/shared/transport/otlp-shared.d.ts.map +1 -1
- package/dist/shared/transport/otlp-shared.js +7 -14
- package/dist/shared/transport/otlp-shared.js.map +1 -1
- package/dist/storage/local-store.d.ts +6 -4
- package/dist/storage/local-store.d.ts.map +1 -1
- package/dist/storage/local-store.js +21 -7
- package/dist/storage/local-store.js.map +1 -1
- package/dist/storage/session-store.d.ts +24 -1
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +38 -7
- package/dist/storage/session-store.js.map +1 -1
- package/dist/storage/types.d.ts +13 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/tools/cross-session-tools.d.ts +7 -1
- package/dist/tools/cross-session-tools.d.ts.map +1 -1
- package/dist/tools/cross-session-tools.js +47 -14
- package/dist/tools/cross-session-tools.js.map +1 -1
- package/dist/tools/session-stats.d.ts +6 -0
- package/dist/tools/session-stats.d.ts.map +1 -1
- package/dist/tools/session-stats.js +3 -2
- package/dist/tools/session-stats.js.map +1 -1
- package/dist/transport/audit-record-sender.d.ts +20 -0
- package/dist/transport/audit-record-sender.d.ts.map +1 -0
- package/dist/transport/audit-record-sender.js +54 -0
- package/dist/transport/audit-record-sender.js.map +1 -0
- package/dist/transport/nr-ingest.d.ts +7 -0
- package/dist/transport/nr-ingest.d.ts.map +1 -1
- package/dist/transport/nr-ingest.js +64 -27
- package/dist/transport/nr-ingest.js.map +1 -1
- package/dist/transport/tier-types.d.ts +11 -1
- package/dist/transport/tier-types.d.ts.map +1 -1
- package/dist/transport/tier-types.js +28 -6
- package/dist/transport/tier-types.js.map +1 -1
- package/dist/transport/unforwarded-session-monitor.d.ts +12 -6
- package/dist/transport/unforwarded-session-monitor.d.ts.map +1 -1
- package/dist/transport/unforwarded-session-monitor.js +24 -5
- package/dist/transport/unforwarded-session-monitor.js.map +1 -1
- package/dist/web/assets/{index-lvdXUntr.js → index-U9DPZ-Tb.js} +3 -3
- package/dist/web/index.html +1 -1
- package/examples/local-alert-rules.json +28 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-install.d.ts","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headless-install.d.ts","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAYjF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,eAAO,MAAM,iCAAiC,2QAC0N,CAAC;AAEzQ;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CAClC,GACL,qBAAqB,CA0BvB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACnD,2EAA2E;IAC3E,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,GAAG,MAAM,qBAAqB,CAmB9B"}
|
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
import { dirname } from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { createLogger } from '../shared/index.js';
|
|
3
|
+
import { areHooksInstalled, mergeSettings, detectSettingsPath, readAndCheckHooks, } from './install-helper.js';
|
|
3
4
|
import { readJsonFileStrict, writeJsonFile, errMsg } from './json-utils.js';
|
|
4
5
|
import { resolveBinaryPath } from './schedule.js';
|
|
6
|
+
const logger = createLogger('headless-install');
|
|
7
|
+
export const HEADLESS_INSTALL_DISABLED_MESSAGE = 'nr_observe_install_hooks is disabled, so no changes were made. Run `preflight install` in a terminal to install the hooks, or set "allowHeadlessInstall": true in your Preflight config (or NEW_RELIC_AI_ALLOW_HEADLESS_INSTALL=true) to let this tool install them.';
|
|
5
8
|
/**
|
|
6
9
|
* Installs the preflight hook entries (PreToolUse, PostToolUse,
|
|
7
10
|
* PermissionRequest, PermissionDenied) into ~/.claude/settings.json (or
|
|
8
11
|
* the project-level equivalent) without a TTY. Does NOT touch ~/.mcp.json —
|
|
9
12
|
* Smithery handles MCP server registration separately.
|
|
10
13
|
*
|
|
14
|
+
* Refuses unless `allowHeadlessInstall` is true. Any connected MCP client can
|
|
15
|
+
* call the tool, so rewriting the user's agent hook config is opt-in. A refusal
|
|
16
|
+
* reads and writes nothing. Hooks already present at project scope count as
|
|
17
|
+
* installed, since Claude Code would run a second user-scope set as well.
|
|
18
|
+
*
|
|
11
19
|
* Returns a typed result so MCP tool callers can format a user-facing message.
|
|
12
20
|
*/
|
|
13
21
|
export function installHooksHeadless(options = {}) {
|
|
22
|
+
if (options.allowHeadlessInstall !== true) {
|
|
23
|
+
return { status: 'disabled', message: HEADLESS_INSTALL_DISABLED_MESSAGE };
|
|
24
|
+
}
|
|
14
25
|
const scope = options.scope ?? 'user';
|
|
15
26
|
const settingsPath = options._settingsPathOverride ?? detectSettingsPath(scope, null);
|
|
27
|
+
const projectSettingsPath = options._projectSettingsPathOverride ?? detectSettingsPath('project', null);
|
|
28
|
+
if (projectSettingsPath !== settingsPath && readAndCheckHooks(projectSettingsPath)) {
|
|
29
|
+
return { status: 'already_installed', settingsPath: projectSettingsPath };
|
|
30
|
+
}
|
|
16
31
|
const binPath = resolveBinaryPath();
|
|
17
32
|
try {
|
|
18
33
|
const existing = readJsonFileStrict(settingsPath);
|
|
@@ -27,4 +42,32 @@ export function installHooksHeadless(options = {}) {
|
|
|
27
42
|
return { status: 'error', message: errMsg(err) };
|
|
28
43
|
}
|
|
29
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds the `headlessInstaller` the MCP tool calls. `allowHeadlessInstall` is
|
|
47
|
+
* captured by value, so callers rebuild the installer once config has loaded.
|
|
48
|
+
* The audit trail is read at call time via `getAuditTrail`. An audit entry is written only when hooks were
|
|
49
|
+
* actually changed, so a refusal or an already-installed no-op leaves no entry.
|
|
50
|
+
*/
|
|
51
|
+
export function createHeadlessInstaller(options) {
|
|
52
|
+
return () => {
|
|
53
|
+
const result = installHooksHeadless({
|
|
54
|
+
allowHeadlessInstall: options.allowHeadlessInstall,
|
|
55
|
+
_settingsPathOverride: options._settingsPathOverride,
|
|
56
|
+
_projectSettingsPathOverride: options._projectSettingsPathOverride,
|
|
57
|
+
});
|
|
58
|
+
if (result.status === 'installed') {
|
|
59
|
+
// The hooks are already on disk, so a failed audit step must not turn
|
|
60
|
+
// the call into an error the client would retry.
|
|
61
|
+
try {
|
|
62
|
+
const record = options.getAuditTrail()?.recordHeadlessHookInstall(result.settingsPath);
|
|
63
|
+
if (record)
|
|
64
|
+
options.onAuditRecord?.(record);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
logger.warn('Hook install succeeded but its audit record failed', { error: errMsg(err) });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
30
73
|
//# sourceMappingURL=headless-install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-install.js","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"headless-install.js","sourceRoot":"","sources":["../../src/install/headless-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,6 +75,8 @@ export declare function areHooksInstalled(settingsContent: Record<string, unknow
|
|
|
75
75
|
* whether NR hooks are installed. Returns false on any I/O error.
|
|
76
76
|
*/
|
|
77
77
|
export declare function readAndCheckHooks(settingsPath?: string): boolean;
|
|
78
|
+
/** Whether NR hooks are installed in user-scope or project-scope Claude Code settings. */
|
|
79
|
+
export declare function areHooksInstalledAtAnyScope(home?: string | null): boolean;
|
|
78
80
|
export declare function mergeSettings(existing: Record<string, unknown>, binPath?: string | null, options?: {
|
|
79
81
|
platform?: PlatformTarget;
|
|
80
82
|
}): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-helper.d.ts","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install-helper.d.ts","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -269,6 +269,11 @@ export function readAndCheckHooks(settingsPath) {
|
|
|
269
269
|
return false;
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
+
/** Whether NR hooks are installed in user-scope or project-scope Claude Code settings. */
|
|
273
|
+
export function areHooksInstalledAtAnyScope(home) {
|
|
274
|
+
return (readAndCheckHooks(detectSettingsPath('user', home)) ||
|
|
275
|
+
readAndCheckHooks(detectSettingsPath('project', null)));
|
|
276
|
+
}
|
|
272
277
|
// ---------------------------------------------------------------------------
|
|
273
278
|
// Zod schemas — validate existing file shapes before merging
|
|
274
279
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-helper.js","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install-helper.js","sourceRoot":"","sources":["../../src/install/install-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SecretField } from '../secret-command.js';
|
|
2
|
+
export declare const SECURITY_BIN = "/usr/bin/security";
|
|
3
|
+
export type KeychainField = Extract<SecretField, 'licenseKey' | 'nrApiKey'>;
|
|
4
|
+
export interface KeychainDeps {
|
|
5
|
+
readonly add: (service: string, account: string, secret: string) => void;
|
|
6
|
+
readonly read: (field: KeychainField, argv: readonly string[]) => string;
|
|
7
|
+
}
|
|
8
|
+
export declare function isKeychainSupported(): boolean;
|
|
9
|
+
export declare function keychainAccount(): string;
|
|
10
|
+
/** The argv for the `*Command` config field that reads the secret back. */
|
|
11
|
+
export declare function keychainReadCommand(field: KeychainField, account?: string): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Stores `secret` in the login Keychain and reads it back through the same
|
|
14
|
+
* argv the config will use, so the returned command is known to work.
|
|
15
|
+
* Throws without the secret in the message.
|
|
16
|
+
*/
|
|
17
|
+
export declare function storeInKeychain(field: KeychainField, secret: string, deps?: KeychainDeps): string[];
|
|
18
|
+
//# sourceMappingURL=keychain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../src/install/keychain.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;AAO5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;CAC1E;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,SAAoB,GAAG,MAAM,EAAE,CAE/F;AA2BD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,YAA2B,GAChC,MAAM,EAAE,CAQV"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { userInfo } from 'node:os';
|
|
4
|
+
import { stripDangerousEnv } from '../lib/child-env.js';
|
|
5
|
+
import { resolveSecretCommand } from '../secret-command.js';
|
|
6
|
+
export const SECURITY_BIN = '/usr/bin/security';
|
|
7
|
+
const SERVICES = {
|
|
8
|
+
licenseKey: 'preflight-license-key',
|
|
9
|
+
nrApiKey: 'preflight-nr-api-key',
|
|
10
|
+
};
|
|
11
|
+
export function isKeychainSupported() {
|
|
12
|
+
return process.platform === 'darwin' && existsSync(SECURITY_BIN);
|
|
13
|
+
}
|
|
14
|
+
export function keychainAccount() {
|
|
15
|
+
return userInfo().username;
|
|
16
|
+
}
|
|
17
|
+
/** The argv for the `*Command` config field that reads the secret back. */
|
|
18
|
+
export function keychainReadCommand(field, account = keychainAccount()) {
|
|
19
|
+
return [SECURITY_BIN, 'find-generic-password', '-s', SERVICES[field], '-a', account, '-w'];
|
|
20
|
+
}
|
|
21
|
+
function quote(value) {
|
|
22
|
+
return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
23
|
+
}
|
|
24
|
+
// The secret goes to `security -i` on stdin so it never appears in `ps` argv.
|
|
25
|
+
function addViaSecurityStdin(service, account, secret) {
|
|
26
|
+
if (/[\r\n\0]/.test(secret))
|
|
27
|
+
throw new Error('the secret contains a line break');
|
|
28
|
+
const command = `add-generic-password -U -s ${quote(service)} -a ${quote(account)} -w ${quote(secret)}\n`;
|
|
29
|
+
const result = spawnSync(SECURITY_BIN, ['-i'], {
|
|
30
|
+
input: command,
|
|
31
|
+
encoding: 'utf8',
|
|
32
|
+
shell: false,
|
|
33
|
+
env: stripDangerousEnv(process.env).env,
|
|
34
|
+
timeout: 20_000,
|
|
35
|
+
stdio: ['pipe', 'ignore', 'ignore'],
|
|
36
|
+
});
|
|
37
|
+
if (result.error)
|
|
38
|
+
throw new Error('could not run /usr/bin/security');
|
|
39
|
+
if (result.status !== 0)
|
|
40
|
+
throw new Error('security add-generic-password failed');
|
|
41
|
+
}
|
|
42
|
+
const DEFAULT_DEPS = {
|
|
43
|
+
add: addViaSecurityStdin,
|
|
44
|
+
read: (field, argv) => resolveSecretCommand(field, argv),
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Stores `secret` in the login Keychain and reads it back through the same
|
|
48
|
+
* argv the config will use, so the returned command is known to work.
|
|
49
|
+
* Throws without the secret in the message.
|
|
50
|
+
*/
|
|
51
|
+
export function storeInKeychain(field, secret, deps = DEFAULT_DEPS) {
|
|
52
|
+
const account = keychainAccount();
|
|
53
|
+
const argv = keychainReadCommand(field, account);
|
|
54
|
+
deps.add(SERVICES[field], account, secret);
|
|
55
|
+
if (deps.read(field, argv) !== secret) {
|
|
56
|
+
throw new Error('the Keychain returned a different value than was stored');
|
|
57
|
+
}
|
|
58
|
+
return argv;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=keychain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/install/keychain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates and merges the Kiro hook file. Kiro hooks are workspace-scoped
|
|
3
|
+
* (`.kiro/hooks/`, see docs/KIRO_POWER.md), so the file is written relative
|
|
4
|
+
* to a project directory, never to the home directory.
|
|
5
|
+
*
|
|
6
|
+
* The command carries `MCP_CLIENT=kiro` itself: Kiro runs hook commands as a
|
|
7
|
+
* process separate from the MCP server and does not pass them the server's
|
|
8
|
+
* `env` block.
|
|
9
|
+
*/
|
|
10
|
+
export declare const KIRO_HOOKS_FILE = "preflight-observability.json";
|
|
11
|
+
interface KiroHook {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly trigger: string;
|
|
14
|
+
readonly action: {
|
|
15
|
+
readonly type: 'command';
|
|
16
|
+
readonly command: string;
|
|
17
|
+
};
|
|
18
|
+
readonly timeout: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function kiroHooksPath(projectDir: string): string;
|
|
21
|
+
export declare function generateKiroHooks(): readonly KiroHook[];
|
|
22
|
+
/** Replaces Preflight's own entries and keeps every other hook in the file. */
|
|
23
|
+
export declare function mergeKiroHooksFile(existing: Record<string, unknown>): Record<string, unknown>;
|
|
24
|
+
/** Drops Preflight's own entries and keeps every other hook in the file. */
|
|
25
|
+
export declare function removeKiroHooksFile(existing: Record<string, unknown>): Record<string, unknown>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=kiro-install-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-install-helper.d.ts","sourceRoot":"","sources":["../../src/install/kiro-install-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,eAAe,iCAAiC,CAAC;AAK9D,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,IAAI,SAAS,QAAQ,EAAE,CAevD;AAUD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM7F;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates and merges the Kiro hook file. Kiro hooks are workspace-scoped
|
|
3
|
+
* (`.kiro/hooks/`, see docs/KIRO_POWER.md), so the file is written relative
|
|
4
|
+
* to a project directory, never to the home directory.
|
|
5
|
+
*
|
|
6
|
+
* The command carries `MCP_CLIENT=kiro` itself: Kiro runs hook commands as a
|
|
7
|
+
* process separate from the MCP server and does not pass them the server's
|
|
8
|
+
* `env` block.
|
|
9
|
+
*/
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
export const KIRO_HOOKS_FILE = 'preflight-observability.json';
|
|
12
|
+
const KIRO_HOOK_NAME_PREFIX = 'Preflight:';
|
|
13
|
+
const KIRO_HOOK_COMMAND = 'MCP_CLIENT=kiro preflight-collector';
|
|
14
|
+
const KIRO_HOOK_TIMEOUT_SECONDS = 10;
|
|
15
|
+
export function kiroHooksPath(projectDir) {
|
|
16
|
+
return join(projectDir, '.kiro', 'hooks', KIRO_HOOKS_FILE);
|
|
17
|
+
}
|
|
18
|
+
export function generateKiroHooks() {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
name: 'Preflight: pre tool call',
|
|
22
|
+
trigger: 'PreToolUse',
|
|
23
|
+
action: { type: 'command', command: KIRO_HOOK_COMMAND },
|
|
24
|
+
timeout: KIRO_HOOK_TIMEOUT_SECONDS,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'Preflight: post tool call',
|
|
28
|
+
trigger: 'PostToolUse',
|
|
29
|
+
action: { type: 'command', command: KIRO_HOOK_COMMAND },
|
|
30
|
+
timeout: KIRO_HOOK_TIMEOUT_SECONDS,
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
function withoutPreflightHooks(existing) {
|
|
35
|
+
const current = Array.isArray(existing.hooks) ? existing.hooks : [];
|
|
36
|
+
return current.filter((h) => {
|
|
37
|
+
const name = h?.name;
|
|
38
|
+
return !(typeof name === 'string' && name.startsWith(KIRO_HOOK_NAME_PREFIX));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Replaces Preflight's own entries and keeps every other hook in the file. */
|
|
42
|
+
export function mergeKiroHooksFile(existing) {
|
|
43
|
+
return {
|
|
44
|
+
version: 'v1',
|
|
45
|
+
...existing,
|
|
46
|
+
hooks: [...withoutPreflightHooks(existing), ...generateKiroHooks()],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Drops Preflight's own entries and keeps every other hook in the file. */
|
|
50
|
+
export function removeKiroHooksFile(existing) {
|
|
51
|
+
return { ...existing, hooks: withoutPreflightHooks(existing) };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=kiro-install-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-install-helper.js","sourceRoot":"","sources":["../../src/install/kiro-install-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,8BAA8B,CAAC;AAC9D,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAC3C,MAAM,iBAAiB,GAAG,qCAAqC,CAAC;AAChE,MAAM,yBAAyB,GAAG,EAAE,CAAC;AASrC,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL;YACE,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACvD,OAAO,EAAE,yBAAyB;SACnC;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACvD,OAAO,EAAE,yBAAyB;SACnC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAiC;IAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAI,CAA+B,EAAE,IAAI,CAAC;QACpD,OAAO,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,QAAiC;IAClE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,QAAQ;QACX,KAAK,EAAE,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -38,6 +38,10 @@ export declare function buildConfig(existing: Partial<z.infer<typeof ConfigFileS
|
|
|
38
38
|
dashboardPort?: number | null;
|
|
39
39
|
nrApiKey?: string | null;
|
|
40
40
|
collectorHost?: string | null;
|
|
41
|
+
/** Written instead of the plaintext `licenseKey`, which is then dropped from the file. */
|
|
42
|
+
licenseKeyCommand?: readonly string[] | null;
|
|
43
|
+
/** Written instead of the plaintext `nrApiKey`, which is then dropped from the file. */
|
|
44
|
+
nrApiKeyCommand?: readonly string[] | null;
|
|
41
45
|
}): Partial<z.infer<typeof ConfigFileSchema>>;
|
|
42
46
|
export declare function resolveEnvironmentChoice(envRaw: string, defaultEnv: string): string;
|
|
43
47
|
export declare function runSetupWizard(opts?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/install/setup-wizard.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA0B,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/install/setup-wizard.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA0B,gBAAgB,EAAwB,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAsBzC,UAAU,YAAY;IACpB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAkBD,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,4BAA4B,GACjC,2BAA2B,CA6B7B;AAwED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,wBAAgB,WAAW,CACzB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,EACnD,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7C,wFAAwF;IACxF,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC5C,GACA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAoC3C;AAcD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+nBpF"}
|
|
@@ -9,6 +9,8 @@ import { writeJsonFile } from './json-utils.js';
|
|
|
9
9
|
import { installSchedule, installDashboardDaemon, resolveBinaryPath } from './schedule.js';
|
|
10
10
|
import { isWsl, resolveWindowsHome } from './platform.js';
|
|
11
11
|
import { validateLicenseKey, validateApiKey } from './key-validator.js';
|
|
12
|
+
import { isKeychainSupported, storeInKeychain } from './keychain.js';
|
|
13
|
+
import { resolveSecretCommand } from '../secret-command.js';
|
|
12
14
|
import { getDashboardAddress, waitForHealthyDashboard } from './dashboard-health.js';
|
|
13
15
|
import { REGIONS, getRegion, suggestRegionFromLicenseKey, detectRegionFromLicenseKeyStrict, } from './regions.js';
|
|
14
16
|
const CONFIG_PATH = resolve(DEFAULT_STORAGE_PATH, 'config.json');
|
|
@@ -72,6 +74,25 @@ export function copyStarterAlertRules(opts) {
|
|
|
72
74
|
function print(msg = '') {
|
|
73
75
|
process.stdout.write(msg + '\n');
|
|
74
76
|
}
|
|
77
|
+
async function offerKeychain(rl, label) {
|
|
78
|
+
const answer = (await rl.question(`Store the ${label} in the macOS Keychain instead of config.json? Preflight reads it back at startup [y/N]: `))
|
|
79
|
+
.trim()
|
|
80
|
+
.toLowerCase();
|
|
81
|
+
return answer === 'y' || answer === 'yes';
|
|
82
|
+
}
|
|
83
|
+
// Falls back to a plaintext value (the caller keeps it) when the Keychain write fails.
|
|
84
|
+
function storeOrWarn(field, secret, label) {
|
|
85
|
+
try {
|
|
86
|
+
const argv = storeInKeychain(field, secret);
|
|
87
|
+
print(` ✓ ${label} stored in the macOS Keychain`);
|
|
88
|
+
return argv;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
92
|
+
print(` ⚠ Could not store the ${label} in the Keychain (${reason}). It will be written to config.json instead.`);
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
75
96
|
function loadExisting() {
|
|
76
97
|
let parsed;
|
|
77
98
|
try {
|
|
@@ -110,7 +131,7 @@ function loadExisting() {
|
|
|
110
131
|
export function buildConfig(existing, inputs) {
|
|
111
132
|
const mode = inputs.mode ?? 'cloud';
|
|
112
133
|
const includeNrCreds = mode !== 'local';
|
|
113
|
-
|
|
134
|
+
const config = {
|
|
114
135
|
...existing,
|
|
115
136
|
mode,
|
|
116
137
|
...(includeNrCreds ? { accountId: inputs.accountId, licenseKey: inputs.licenseKey } : {}),
|
|
@@ -125,6 +146,26 @@ export function buildConfig(existing, inputs) {
|
|
|
125
146
|
...(inputs.nrApiKey ? { nrApiKey: inputs.nrApiKey } : {}),
|
|
126
147
|
...(inputs.collectorHost ? { collectorHost: inputs.collectorHost } : {}),
|
|
127
148
|
};
|
|
149
|
+
// The command always outranks the file value at load, so exactly one of the
|
|
150
|
+
// pair is written: a new plaintext key replaces a stale command, and a
|
|
151
|
+
// command replaces any plaintext key.
|
|
152
|
+
if (includeNrCreds) {
|
|
153
|
+
if (inputs.licenseKeyCommand) {
|
|
154
|
+
config.licenseKeyCommand = [...inputs.licenseKeyCommand];
|
|
155
|
+
delete config.licenseKey;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
delete config.licenseKeyCommand;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (inputs.nrApiKeyCommand) {
|
|
162
|
+
config.nrApiKeyCommand = [...inputs.nrApiKeyCommand];
|
|
163
|
+
delete config.nrApiKey;
|
|
164
|
+
}
|
|
165
|
+
else if (inputs.nrApiKey) {
|
|
166
|
+
delete config.nrApiKeyCommand;
|
|
167
|
+
}
|
|
168
|
+
return config;
|
|
128
169
|
}
|
|
129
170
|
function parseModeAnswer(raw, fallback) {
|
|
130
171
|
const trimmed = raw.trim().toLowerCase();
|
|
@@ -186,6 +227,10 @@ export async function runSetupWizard(opts = {}) {
|
|
|
186
227
|
let licenseKey = '';
|
|
187
228
|
let collectorHost = null;
|
|
188
229
|
let nrApiKey = null;
|
|
230
|
+
let licenseKeyCommand = null;
|
|
231
|
+
let keychainLicenseKey = false;
|
|
232
|
+
let keychainNrApiKey = false;
|
|
233
|
+
let nrApiKeyCommand = null;
|
|
189
234
|
let validatedEmail = null;
|
|
190
235
|
if (mode !== 'local') {
|
|
191
236
|
const envAccountId = process.env.NEW_RELIC_ACCOUNT_ID?.trim() ?? '';
|
|
@@ -213,13 +258,27 @@ export async function runSetupWizard(opts = {}) {
|
|
|
213
258
|
const envLicenseKey = process.env.NEW_RELIC_LICENSE_KEY?.trim() ?? '';
|
|
214
259
|
const existingKey = typeof existing.licenseKey === 'string' ? existing.licenseKey : '';
|
|
215
260
|
const defaultKey = existingKey || envLicenseKey;
|
|
261
|
+
const existingKeyCommand = existing.licenseKeyCommand ?? null;
|
|
216
262
|
const keyHint = existingKey
|
|
217
263
|
? '(already set)'
|
|
218
|
-
:
|
|
219
|
-
? '
|
|
220
|
-
:
|
|
264
|
+
: existingKeyCommand
|
|
265
|
+
? '(set by licenseKeyCommand)'
|
|
266
|
+
: envLicenseKey
|
|
267
|
+
? '$NEW_RELIC_LICENSE_KEY'
|
|
268
|
+
: 'required';
|
|
221
269
|
const keyPrompt = `License Key — authenticates telemetry ingest to your NR account [${keyHint}]: `;
|
|
222
270
|
licenseKey = (await rl.question(keyPrompt)).trim();
|
|
271
|
+
if (!licenseKey && existingKeyCommand) {
|
|
272
|
+
try {
|
|
273
|
+
licenseKey = resolveSecretCommand('licenseKey', existingKeyCommand);
|
|
274
|
+
licenseKeyCommand = existingKeyCommand;
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
278
|
+
rl.close();
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
223
282
|
if (!licenseKey)
|
|
224
283
|
licenseKey = defaultKey;
|
|
225
284
|
if (!licenseKey) {
|
|
@@ -227,6 +286,9 @@ export async function runSetupWizard(opts = {}) {
|
|
|
227
286
|
rl.close();
|
|
228
287
|
process.exit(1);
|
|
229
288
|
}
|
|
289
|
+
if (!licenseKeyCommand && isKeychainSupported()) {
|
|
290
|
+
keychainLicenseKey = await offerKeychain(rl, 'license key');
|
|
291
|
+
}
|
|
230
292
|
// Step 2b: Environment / region. --staging pre-selects the region and
|
|
231
293
|
// skips this question entirely — staging is never shown in the menu
|
|
232
294
|
// or matched against typed input; it's reachable only via the flag.
|
|
@@ -259,18 +321,33 @@ export async function runSetupWizard(opts = {}) {
|
|
|
259
321
|
const envApiKey = process.env.NEW_RELIC_API_KEY?.trim() ?? '';
|
|
260
322
|
const existingApiKey = typeof existing.nrApiKey === 'string' ? existing.nrApiKey : null;
|
|
261
323
|
const defaultApiKey = existingApiKey ?? (envApiKey || null);
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
324
|
+
const existingApiKeyCommand = existing.nrApiKeyCommand ?? null;
|
|
325
|
+
const apiKeyHint = existingApiKeyCommand
|
|
326
|
+
? '(set by nrApiKeyCommand)'
|
|
327
|
+
: existingApiKey
|
|
328
|
+
? '(already set)'
|
|
329
|
+
: envApiKey
|
|
330
|
+
? '$NEW_RELIC_API_KEY'
|
|
331
|
+
: 'optional';
|
|
267
332
|
const apiKeyRaw = (await rl.question(`API Key (NRAK-...) — for team queries and deploying dashboards/alerts [${apiKeyHint}]: `)).trim();
|
|
268
333
|
if (apiKeyRaw) {
|
|
269
334
|
nrApiKey = apiKeyRaw;
|
|
270
335
|
}
|
|
336
|
+
else if (existingApiKeyCommand) {
|
|
337
|
+
nrApiKeyCommand = existingApiKeyCommand;
|
|
338
|
+
try {
|
|
339
|
+
nrApiKey = resolveSecretCommand('nrApiKey', existingApiKeyCommand);
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
print(` ⚠ ${err instanceof Error ? err.message : String(err)} — keeping nrApiKeyCommand without validating it`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
271
345
|
else if (defaultApiKey) {
|
|
272
346
|
nrApiKey = defaultApiKey;
|
|
273
347
|
}
|
|
348
|
+
if (nrApiKey && !nrApiKeyCommand && isKeychainSupported()) {
|
|
349
|
+
keychainNrApiKey = await offerKeychain(rl, 'API key');
|
|
350
|
+
}
|
|
274
351
|
// Step 2d: Validate credentials
|
|
275
352
|
print('\nValidating credentials...');
|
|
276
353
|
const licenseResult = await validateLicenseKey({ licenseKey, accountId, collectorHost });
|
|
@@ -375,6 +452,12 @@ export async function runSetupWizard(opts = {}) {
|
|
|
375
452
|
// (runInstallCli) should own this field. Preserving a stale value here would silently
|
|
376
453
|
// drive the next bare install toward the wrong platform if the user declines hooks.
|
|
377
454
|
const { platformTarget: _platformTarget, ...existingForWizard } = existing;
|
|
455
|
+
if (keychainLicenseKey) {
|
|
456
|
+
licenseKeyCommand = storeOrWarn('licenseKey', licenseKey, 'license key');
|
|
457
|
+
}
|
|
458
|
+
if (keychainNrApiKey && nrApiKey) {
|
|
459
|
+
nrApiKeyCommand = storeOrWarn('nrApiKey', nrApiKey, 'API key');
|
|
460
|
+
}
|
|
378
461
|
const config = buildConfig(existingForWizard, {
|
|
379
462
|
accountId,
|
|
380
463
|
licenseKey,
|
|
@@ -387,6 +470,8 @@ export async function runSetupWizard(opts = {}) {
|
|
|
387
470
|
dashboardPort,
|
|
388
471
|
nrApiKey,
|
|
389
472
|
collectorHost,
|
|
473
|
+
licenseKeyCommand,
|
|
474
|
+
nrApiKeyCommand,
|
|
390
475
|
});
|
|
391
476
|
writeJsonFile(CONFIG_PATH, config, DEFAULT_STORAGE_PATH);
|
|
392
477
|
print(`\nConfig written to ${CONFIG_PATH}`);
|