@iterable/cli 0.1.4 → 0.1.6

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 CHANGED
@@ -119,6 +119,7 @@ See the [full command reference](COMMANDS.md) for all 109 commands with paramete
119
119
  | `--columns <cols>` | Comma-separated columns for table output |
120
120
  | `--json <data>` | Pass raw JSON (use `-` for stdin) |
121
121
  | `--file <path>` | Read JSON input from a file |
122
+ | `--key, -k <name>` | Use a specific stored key (overrides env var and active key) |
122
123
  | `--force, -f` | Skip confirmation prompts for destructive commands |
123
124
 
124
125
  ## Output Formats
@@ -147,8 +148,8 @@ Without `--columns`, all fields are shown.
147
148
 
148
149
  | Variable | Description | Default |
149
150
  |----------|-------------|---------|
150
- | `ITERABLE_API_KEY` | API key (overrides key manager) | — |
151
- | `ITERABLE_BASE_URL` | API base URL (overrides key manager) | `https://api.iterable.com` |
151
+ | `ITERABLE_API_KEY` | API key (overrides key manager; `--key` flag takes precedence) | — |
152
+ | `ITERABLE_BASE_URL` | API base URL (used with env var key only) | `https://api.iterable.com` |
152
153
  | `ITERABLE_DEBUG` | Enable debug logging (HTTP requests/responses to stderr) | `false` |
153
154
  | `ITERABLE_DEBUG_VERBOSE` | Include response bodies in debug output (may contain PII) | `false` |
154
155
 
package/dist/config.d.ts CHANGED
@@ -2,13 +2,5 @@ export interface CliConfig {
2
2
  readonly apiKey: string;
3
3
  readonly baseUrl: string;
4
4
  }
5
- /**
6
- * Load configuration.
7
- *
8
- * Resolution order:
9
- * 1. ITERABLE_API_KEY env var (if set, use directly -- enables CI/scripting override)
10
- * 2. Key manager active key
11
- * 3. Error with guidance
12
- */
13
- export declare function loadCliConfig(): Promise<CliConfig>;
5
+ export declare function loadCliConfig(keyNameOrId?: string): Promise<CliConfig>;
14
6
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CA2DxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAYD,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAoE5E"}
package/dist/config.js CHANGED
@@ -8,53 +8,57 @@ import { sanitizeString } from "./utils/sanitize.js";
8
8
  * Load configuration.
9
9
  *
10
10
  * Resolution order:
11
- * 1. ITERABLE_API_KEY env var (if set, use directly -- enables CI/scripting override)
12
- * 2. Key manager active key
13
- * 3. Error with guidance
11
+ * 1. --key flag (specific stored key by name or ID)
12
+ * 2. ITERABLE_API_KEY env var (enables CI/scripting override)
13
+ * 3. Key manager active key
14
14
  */
15
- export async function loadCliConfig() {
16
- const baseUrlFromEnv = process.env.ITERABLE_BASE_URL ?? "https://api.iterable.com";
15
+ const DEFAULT_BASE_URL = "https://api.iterable.com";
16
+ export async function loadCliConfig(keyNameOrId) {
17
+ if (keyNameOrId && !isTestEnv()) {
18
+ const keyManager = getKeyManager();
19
+ const keys = await keyManager.listKeys();
20
+ const keyMeta = keys.find((k) => k.name === keyNameOrId || k.id === keyNameOrId);
21
+ if (!keyMeta) {
22
+ throw new CliError(`Key not found: "${keyNameOrId}". Run "${COMMAND_NAME} keys list" to see available keys.`, 2);
23
+ }
24
+ const apiKey = await keyManager.getKey(keyMeta.id);
25
+ if (!apiKey) {
26
+ throw new CliError(`Failed to retrieve key "${keyNameOrId}". Try "${COMMAND_NAME} keys update ${keyNameOrId}".`, 1);
27
+ }
28
+ return { apiKey, baseUrl: keyMeta.baseUrl };
29
+ }
17
30
  if (process.env.ITERABLE_API_KEY) {
18
- return { apiKey: process.env.ITERABLE_API_KEY, baseUrl: baseUrlFromEnv };
31
+ return {
32
+ apiKey: process.env.ITERABLE_API_KEY,
33
+ baseUrl: process.env.ITERABLE_BASE_URL ?? DEFAULT_BASE_URL,
34
+ };
19
35
  }
20
36
  if (!isTestEnv()) {
21
37
  try {
22
38
  const keyManager = getKeyManager();
23
- await keyManager.initialize();
24
39
  if (await keyManager.hasKeys()) {
25
40
  if (!(await keyManager.hasActiveKey())) {
26
- throw new CliError(`No active API key. Run "${COMMAND_NAME} keys activate <name>" to activate one, or set ITERABLE_API_KEY environment variable.`, 2);
41
+ throw new CliError(`No active API key. Run "${COMMAND_NAME} keys activate <name>", use --key <name>, or set ITERABLE_API_KEY.`, 2);
27
42
  }
28
43
  const apiKey = await keyManager.getActiveKey();
29
- if (apiKey) {
30
- let baseUrl = baseUrlFromEnv;
31
- const meta = await keyManager.getActiveKeyMetadata();
32
- if (meta?.baseUrl) {
33
- baseUrl = meta.baseUrl;
34
- }
35
- return { apiKey, baseUrl };
44
+ const meta = await keyManager.getActiveKeyMetadata();
45
+ if (apiKey && meta) {
46
+ return { apiKey, baseUrl: meta.baseUrl };
36
47
  }
37
48
  }
38
49
  }
39
50
  catch (error) {
40
51
  if (error instanceof CliError)
41
52
  throw error;
42
- const errorMessage = error instanceof Error ? error.message : String(error);
43
- if (errorMessage.includes("Key store not initialized") ||
44
- errorMessage.includes("No API key found")) {
45
- logger.debug("No keys in key manager, falling back to error");
46
- }
47
- else {
48
- const sanitizedMessage = sanitizeString(errorMessage);
49
- logger.error("Unexpected error loading from key manager", {
50
- error: sanitizedMessage,
51
- });
52
- console.error(
53
- // eslint-disable-line no-console
54
- "Warning: Failed to load API key from key storage:", sanitizedMessage);
55
- }
53
+ const sanitizedMessage = sanitizeString(error instanceof Error ? error.message : String(error));
54
+ logger.error("Failed to load from key manager", {
55
+ error: sanitizedMessage,
56
+ });
57
+ console.error(
58
+ // eslint-disable-line no-console
59
+ "Warning: Failed to load API key from key storage:", sanitizedMessage);
56
60
  }
57
61
  }
58
- throw new CliError(`No API key found. Run "${COMMAND_NAME} keys add" to add one, or set ITERABLE_API_KEY environment variable.`, 2);
62
+ throw new CliError(`No API key found. Run "${COMMAND_NAME} keys add" to add one, or set ITERABLE_API_KEY.`, 2);
59
63
  }
60
64
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAOrD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,0BAA0B,CAAC;IAE9D,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YACnC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;YAE9B,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;oBACvC,MAAM,IAAI,QAAQ,CAChB,2BAA2B,YAAY,uFAAuF,EAC9H,CAAC,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,OAAO,GAAG,cAAc,CAAC;oBAC7B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBACrD,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;wBAClB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBACzB,CAAC;oBACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAE3C,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEzD,IACE,YAAY,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBAClD,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACzC,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;oBACxD,KAAK,EAAE,gBAAgB;iBACxB,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK;gBACX,iCAAiC;gBACjC,mDAAmD,EACnD,gBAAgB,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,0BAA0B,YAAY,sEAAsE,EAC5G,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { IterableClient } from "@iterable/api";
3
+ import chalk from "chalk";
3
4
  import { readFileSync } from "fs";
4
5
  import { z } from "zod";
5
6
  import { loadCliConfig } from "./config.js";
@@ -8,6 +9,10 @@ import { formatOutput, getDefaultFormat } from "./output.js";
8
9
  import { buildParser, parseCommand } from "./parser.js";
9
10
  import { findCommand, parseArgs, showCategoryHelp, showGlobalHelp, showVersion, } from "./router.js";
10
11
  import { COMMAND_NAME } from "./utils/command-info.js";
12
+ const CLI_PAGINATION_DEFAULTS = {
13
+ page: 1,
14
+ pageSize: 10,
15
+ };
11
16
  async function main() {
12
17
  const parsed = parseArgs(process.argv.slice(2));
13
18
  if (parsed.globalFlags.version) {
@@ -25,7 +30,7 @@ async function main() {
25
30
  }
26
31
  if (parsed.category === "keys") {
27
32
  const { handleKeysCommand } = await import("./keys-cli.js");
28
- await handleKeysCommand(parsed.action ? [parsed.action, ...parsed.rest] : []);
33
+ await handleKeysCommand(parsed.action ? [parsed.action, ...parsed.rest] : [], parsed.globalFlags.key);
29
34
  return;
30
35
  }
31
36
  if (!parsed.action) {
@@ -46,7 +51,7 @@ async function main() {
46
51
  }
47
52
  return;
48
53
  }
49
- const config = await loadCliConfig();
54
+ const config = await loadCliConfig(parsed.globalFlags.key);
50
55
  const debug = process.env.ITERABLE_DEBUG === "true" ||
51
56
  process.env.ITERABLE_DEBUG_VERBOSE === "true";
52
57
  const client = new IterableClient({
@@ -62,6 +67,14 @@ async function main() {
62
67
  restArgs = ["--json", content];
63
68
  }
64
69
  const params = await parseCommand(command.schema, `iterable ${parsed.category} ${parsed.action}`, restArgs, command.positionalArgs, command.cliTransforms);
70
+ const schemaKeys = command.schema instanceof z.ZodObject
71
+ ? new Set(Object.keys(command.schema.shape))
72
+ : new Set();
73
+ for (const [key, defaultVal] of Object.entries(CLI_PAGINATION_DEFAULTS)) {
74
+ if (schemaKeys.has(key)) {
75
+ params[key] ??= defaultVal;
76
+ }
77
+ }
65
78
  if (command.destructive &&
66
79
  !parsed.globalFlags.force &&
67
80
  process.stdin.isTTY) {
@@ -80,8 +93,9 @@ async function main() {
80
93
  }
81
94
  }
82
95
  const result = await command.execute(client, params);
83
- const format = parsed.globalFlags.output ?? getDefaultFormat();
84
- console.log(formatOutput(result, format, parsed.globalFlags.columns)); // eslint-disable-line no-console
96
+ const format = parsed.globalFlags.output ??
97
+ (parsed.globalFlags.columns ? "table" : getDefaultFormat());
98
+ console.log(formatOutput(result, format, parsed.globalFlags.columns, params)); // eslint-disable-line no-console
85
99
  }
86
100
  finally {
87
101
  client.destroy();
@@ -89,46 +103,36 @@ async function main() {
89
103
  }
90
104
  main().catch(async (error) => {
91
105
  const { IterableApiError, IterableNetworkError, IterableRawError, IterableResponseValidationError, } = await import("@iterable/api");
92
- /* eslint-disable no-console */
106
+ const err = (msg) => console.error(chalk.red(`✖ ${msg}`)); // eslint-disable-line no-console
107
+ const hint = (msg) => console.error(chalk.dim(` ${msg}`)); // eslint-disable-line no-console
93
108
  if (error instanceof CliError) {
94
- console.error(error.message);
109
+ err(error.message);
95
110
  process.exit(error.exitCode);
96
111
  }
97
112
  if (error instanceof z.ZodError) {
98
- const details = error.issues
99
- .map((i) => `${i.path.join(".")}: ${i.message}`)
100
- .join(", ");
101
- console.error(`Validation error: ${details}`);
113
+ err("Validation error");
114
+ for (const issue of error.issues) {
115
+ hint(`${issue.path.join(".")}: ${issue.message}`);
116
+ }
102
117
  process.exit(2);
103
118
  }
104
- if (error instanceof IterableApiError) {
105
- console.error(`API error (${error.statusCode}): ${error.message}`);
119
+ if (error instanceof IterableApiError ||
120
+ error instanceof IterableRawError ||
121
+ error instanceof IterableResponseValidationError) {
122
+ err(`${error.message} (${error.statusCode})`);
106
123
  if (error.endpoint)
107
- console.error(` Endpoint: ${error.endpoint}`);
108
- if (error.statusCode === 401) {
109
- console.error(` Run '${COMMAND_NAME} keys add' to configure your API key`);
124
+ hint(`Endpoint: ${error.endpoint}`);
125
+ if (error instanceof IterableApiError && error.statusCode === 401) {
126
+ hint(`Run '${COMMAND_NAME} keys add' to configure your API key`);
110
127
  }
111
128
  process.exit(1);
112
129
  }
113
- if (error instanceof IterableRawError) {
114
- console.error(`API error (${error.statusCode}): ${error.message}`);
115
- if (error.endpoint)
116
- console.error(` Endpoint: ${error.endpoint}`);
117
- process.exit(1);
118
- }
119
- if (error instanceof IterableResponseValidationError) {
120
- console.error(`Response validation error (${error.statusCode}): ${error.message}`);
121
- if (error.endpoint)
122
- console.error(` Endpoint: ${error.endpoint}`);
123
- process.exit(1);
124
- }
125
130
  if (error instanceof IterableNetworkError) {
126
- console.error(`Network error: ${error.message}`);
131
+ err(error.message);
127
132
  process.exit(1);
128
133
  }
129
- /* eslint-enable no-console */
130
134
  const msg = error instanceof Error ? error.message : String(error);
131
- console.error(`Error: ${msg}`); // eslint-disable-line no-console
135
+ err(msg);
132
136
  process.exit(1);
133
137
  });
134
138
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ export declare class KeyManager {
52
52
  * @param execSecurity - Optional security command executor (for dependency injection in tests)
53
53
  */
54
54
  constructor(configDir?: string, execSecurity?: SecurityExecutor);
55
+ private ensureStore;
55
56
  /**
56
57
  * Validate metadata against keychain and clean up orphaned entries (macOS only)
57
58
  *
@@ -1 +1 @@
1
- {"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"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"}
@@ -98,6 +98,15 @@ export class KeyManager {
98
98
  this.storageMethod = StorageMethod.FILE;
99
99
  }
100
100
  }
101
+ async ensureStore() {
102
+ if (!this.store) {
103
+ await this.initialize();
104
+ }
105
+ if (!this.store) {
106
+ throw new Error("Key store not initialized");
107
+ }
108
+ return this.store;
109
+ }
101
110
  /**
102
111
  * Validate metadata against keychain and clean up orphaned entries (macOS only)
103
112
  *
@@ -493,9 +502,6 @@ export class KeyManager {
493
502
  * @returns The ID of the saved key
494
503
  */
495
504
  async saveKey(name, apiKey, baseUrl, envOverrides, idOrName) {
496
- if (!this.store) {
497
- await this.initialize();
498
- }
499
505
  if (!this.store) {
500
506
  throw new Error("Key store not initialized");
501
507
  }
@@ -616,6 +622,7 @@ export class KeyManager {
616
622
  * @throws {Error} If the key name already exists, validation fails, or storage fails
617
623
  */
618
624
  async addKey(name, apiKey, baseUrl, envOverrides) {
625
+ await this.ensureStore();
619
626
  return this.saveKey(name, apiKey, baseUrl, envOverrides);
620
627
  }
621
628
  /**
@@ -632,6 +639,7 @@ export class KeyManager {
632
639
  * @throws {Error} If the key is not found, name conflict, validation fails, or storage fails
633
640
  */
634
641
  async updateKey(idOrName, name, apiKey, baseUrl, envOverrides) {
642
+ await this.ensureStore();
635
643
  return this.saveKey(name, apiKey, baseUrl, envOverrides, idOrName);
636
644
  }
637
645
  /**
@@ -644,13 +652,8 @@ export class KeyManager {
644
652
  * @throws {Error} If the key store is not initialized
645
653
  */
646
654
  async listKeys() {
647
- if (!this.store) {
648
- await this.initialize();
649
- }
650
- if (!this.store) {
651
- throw new Error("Key store not initialized");
652
- }
653
- return [...this.store.keys];
655
+ const store = await this.ensureStore();
656
+ return [...store.keys];
654
657
  }
655
658
  /**
656
659
  * Get key metadata by ID
@@ -672,14 +675,9 @@ export class KeyManager {
672
675
  * @throws {Error} If storage access fails
673
676
  */
674
677
  async getKey(idOrName) {
675
- if (!this.store) {
676
- await this.initialize();
677
- }
678
- if (!this.store) {
679
- throw new Error("Key store not initialized");
680
- }
678
+ const store = await this.ensureStore();
681
679
  // Find the key metadata
682
- const keyMeta = this.store.keys.find((k) => k.id === idOrName || k.name === idOrName);
680
+ const keyMeta = store.keys.find((k) => k.id === idOrName || k.name === idOrName);
683
681
  if (!keyMeta) {
684
682
  return null;
685
683
  }
@@ -750,13 +748,8 @@ export class KeyManager {
750
748
  * @throws {Error} If storage access fails
751
749
  */
752
750
  async getActiveKey() {
753
- if (!this.store) {
754
- await this.initialize();
755
- }
756
- if (!this.store) {
757
- throw new Error("Key store not initialized");
758
- }
759
- const activeKey = this.store.keys.find((k) => k.isActive);
751
+ const store = await this.ensureStore();
752
+ const activeKey = store.keys.find((k) => k.isActive);
760
753
  if (!activeKey) {
761
754
  return null;
762
755
  }
@@ -772,13 +765,8 @@ export class KeyManager {
772
765
  * @throws {Error} If the key store is not initialized
773
766
  */
774
767
  async getActiveKeyMetadata() {
775
- if (!this.store) {
776
- await this.initialize();
777
- }
778
- if (!this.store) {
779
- throw new Error("Key store not initialized");
780
- }
781
- return this.store.keys.find((k) => k.isActive) || null;
768
+ const store = await this.ensureStore();
769
+ return store.keys.find((k) => k.isActive) || null;
782
770
  }
783
771
  /**
784
772
  * Set a key as active by ID or name
@@ -791,19 +779,14 @@ export class KeyManager {
791
779
  * @throws {Error} If the key is not found or the store is not initialized
792
780
  */
793
781
  async setActiveKey(idOrName) {
794
- if (!this.store) {
795
- await this.initialize();
796
- }
797
- if (!this.store) {
798
- throw new Error("Key store not initialized");
799
- }
782
+ const store = await this.ensureStore();
800
783
  // Find the key
801
- const keyMeta = this.store.keys.find((k) => k.id === idOrName || k.name === idOrName);
784
+ const keyMeta = store.keys.find((k) => k.id === idOrName || k.name === idOrName);
802
785
  if (!keyMeta) {
803
786
  throw new Error(`Key not found: ${idOrName}`);
804
787
  }
805
788
  // Deactivate all keys
806
- this.store.keys.forEach((k) => {
789
+ store.keys.forEach((k) => {
807
790
  k.isActive = false;
808
791
  });
809
792
  // Activate the selected key
@@ -820,18 +803,13 @@ export class KeyManager {
820
803
  * @throws {Error} If the key is not found or the store is not initialized
821
804
  */
822
805
  async deleteKey(id) {
823
- if (!this.store) {
824
- await this.initialize();
825
- }
826
- if (!this.store) {
827
- throw new Error("Key store not initialized");
828
- }
806
+ const store = await this.ensureStore();
829
807
  // Find the key by ID only
830
- const index = this.store.keys.findIndex((k) => k.id === id);
808
+ const index = store.keys.findIndex((k) => k.id === id);
831
809
  if (index === -1) {
832
810
  throw new Error(`Key not found with ID: ${id}`);
833
811
  }
834
- const keyMeta = this.store.keys[index];
812
+ const keyMeta = store.keys[index];
835
813
  if (!keyMeta) {
836
814
  throw new Error(`Key not found with ID: ${id}`);
837
815
  }
@@ -857,7 +835,7 @@ export class KeyManager {
857
835
  // Continue anyway to clean up metadata, but warn the user
858
836
  }
859
837
  // Remove from metadata
860
- this.store.keys.splice(index, 1);
838
+ store.keys.splice(index, 1);
861
839
  await this.saveMetadata();
862
840
  if (!keychainDeleted) {
863
841
  logger.warn("Key removed from metadata but may still exist in Keychain", {
@@ -873,7 +851,7 @@ export class KeyManager {
873
851
  }
874
852
  else {
875
853
  // Windows/Linux: Just remove from JSON
876
- this.store.keys.splice(index, 1);
854
+ store.keys.splice(index, 1);
877
855
  await this.saveMetadata();
878
856
  logger.debug("API key deleted", { id: keyMeta.id, name: keyMeta.name });
879
857
  }
@@ -887,30 +865,18 @@ export class KeyManager {
887
865
  * @throws {Error} If the key store is not initialized
888
866
  */
889
867
  async hasKeys() {
890
- if (!this.store) {
891
- await this.initialize();
892
- }
893
- if (!this.store) {
894
- throw new Error("Key store not initialized");
895
- }
896
- return this.store.keys.length > 0;
868
+ const store = await this.ensureStore();
869
+ return store.keys.length > 0;
897
870
  }
898
871
  /** Check if any key is currently marked as active (metadata only, no keychain call). */
899
872
  async hasActiveKey() {
900
- if (!this.store) {
901
- await this.initialize();
902
- }
903
- if (!this.store) {
904
- throw new Error("Key store not initialized");
905
- }
906
- return this.store.keys.some((k) => k.isActive);
873
+ const store = await this.ensureStore();
874
+ return store.keys.some((k) => k.isActive);
907
875
  }
908
876
  /** Deactivate all keys (no key will be active). */
909
877
  async deactivateAllKeys() {
910
- if (!this.store) {
911
- throw new Error("Key store not initialized");
912
- }
913
- this.store.keys.forEach((k) => {
878
+ const store = await this.ensureStore();
879
+ store.keys.forEach((k) => {
914
880
  k.isActive = false;
915
881
  });
916
882
  await this.saveMetadata();
@@ -926,14 +892,9 @@ export class KeyManager {
926
892
  * @throws {Error} If storage access fails
927
893
  */
928
894
  async findKeyByValue(apiKeyValue) {
929
- if (!this.store) {
930
- await this.initialize();
931
- }
932
- if (!this.store) {
933
- throw new Error("Key store not initialized");
934
- }
895
+ const store = await this.ensureStore();
935
896
  // Check each key to see if the value matches
936
- for (const keyMeta of this.store.keys) {
897
+ for (const keyMeta of store.keys) {
937
898
  try {
938
899
  let storedKey;
939
900
  switch (this.storageMethod) {