@iterable/cli 0.1.5 → 0.2.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/COMMANDS.md +1 -0
- package/README.md +3 -2
- package/dist/config.d.ts +3 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +47 -32
- package/dist/config.js.map +1 -1
- package/dist/index.js +21 -38
- package/dist/index.js.map +1 -1
- package/dist/key-manager.d.ts +4 -8
- package/dist/key-manager.d.ts.map +1 -1
- package/dist/key-manager.js +46 -101
- package/dist/key-manager.js.map +1 -1
- package/dist/keys-cli.d.ts +1 -1
- package/dist/keys-cli.d.ts.map +1 -1
- package/dist/keys-cli.js +15 -22
- package/dist/keys-cli.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +27 -2
- package/dist/parser.js.map +1 -1
- package/dist/router.d.ts +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +81 -45
- package/dist/router.js.map +1 -1
- package/package.json +3 -3
package/COMMANDS.md
CHANGED
|
@@ -144,6 +144,7 @@ Retrieve campaigns
|
|
|
144
144
|
|
|
145
145
|
| Option | Type | Required | Description |
|
|
146
146
|
|--------|------|----------|-------------|
|
|
147
|
+
| `--campaignState` | enum[] | no | Filter campaigns by state. Can specify multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived |
|
|
147
148
|
| `--order` | `asc` \| `desc` | no | Sort direction (asc or desc) |
|
|
148
149
|
| `--page` | number | no | Page number (starting at 1) |
|
|
149
150
|
| `--pageSize` | number | no | Number of results to return per page (defaults to 20, maximum of 1000) |
|
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 (
|
|
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
|
@@ -1,14 +1,8 @@
|
|
|
1
|
+
import { IterableClient } from "@iterable/api";
|
|
1
2
|
export interface CliConfig {
|
|
2
3
|
readonly apiKey: string;
|
|
3
4
|
readonly baseUrl: string;
|
|
4
5
|
}
|
|
5
|
-
|
|
6
|
-
|
|
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>;
|
|
6
|
+
export declare function createClient(config: CliConfig): IterableClient;
|
|
7
|
+
export declare function loadCliConfig(keyNameOrId?: string): Promise<CliConfig>;
|
|
14
8
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAU,MAAM,eAAe,CAAC;AAQvD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAW9D;AAYD,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAoE5E"}
|
package/dist/config.js
CHANGED
|
@@ -1,60 +1,75 @@
|
|
|
1
|
-
import { logger } from "@iterable/api";
|
|
1
|
+
import { IterableClient, logger } from "@iterable/api";
|
|
2
2
|
import { CliError } from "./errors.js";
|
|
3
3
|
import { getKeyManager } from "./key-manager.js";
|
|
4
4
|
import { isTestEnv } from "./utils/cli-env.js";
|
|
5
|
-
import { COMMAND_NAME } from "./utils/command-info.js";
|
|
5
|
+
import { COMMAND_NAME, PACKAGE_VERSION } from "./utils/command-info.js";
|
|
6
6
|
import { sanitizeString } from "./utils/sanitize.js";
|
|
7
|
+
export function createClient(config) {
|
|
8
|
+
const debug = process.env.ITERABLE_DEBUG === "true" ||
|
|
9
|
+
process.env.ITERABLE_DEBUG_VERBOSE === "true";
|
|
10
|
+
return new IterableClient({
|
|
11
|
+
apiKey: config.apiKey,
|
|
12
|
+
baseUrl: config.baseUrl,
|
|
13
|
+
debug,
|
|
14
|
+
debugVerbose: process.env.ITERABLE_DEBUG_VERBOSE === "true",
|
|
15
|
+
customHeaders: { "User-Agent": `iterable-cli/${PACKAGE_VERSION}` },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
7
18
|
/**
|
|
8
19
|
* Load configuration.
|
|
9
20
|
*
|
|
10
21
|
* Resolution order:
|
|
11
|
-
* 1.
|
|
12
|
-
* 2.
|
|
13
|
-
* 3.
|
|
22
|
+
* 1. --key flag (specific stored key by name or ID)
|
|
23
|
+
* 2. ITERABLE_API_KEY env var (enables CI/scripting override)
|
|
24
|
+
* 3. Key manager active key
|
|
14
25
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
26
|
+
const DEFAULT_BASE_URL = "https://api.iterable.com";
|
|
27
|
+
export async function loadCliConfig(keyNameOrId) {
|
|
28
|
+
if (keyNameOrId && !isTestEnv()) {
|
|
29
|
+
const keyManager = getKeyManager();
|
|
30
|
+
const keys = await keyManager.listKeys();
|
|
31
|
+
const keyMeta = keys.find((k) => k.name === keyNameOrId || k.id === keyNameOrId);
|
|
32
|
+
if (!keyMeta) {
|
|
33
|
+
throw new CliError(`Key not found: "${keyNameOrId}". Run "${COMMAND_NAME} keys list" to see available keys.`, 2);
|
|
34
|
+
}
|
|
35
|
+
const apiKey = await keyManager.getKey(keyMeta.id);
|
|
36
|
+
if (!apiKey) {
|
|
37
|
+
throw new CliError(`Failed to retrieve key "${keyNameOrId}". Try "${COMMAND_NAME} keys update ${keyNameOrId}".`, 1);
|
|
38
|
+
}
|
|
39
|
+
return { apiKey, baseUrl: keyMeta.baseUrl };
|
|
40
|
+
}
|
|
17
41
|
if (process.env.ITERABLE_API_KEY) {
|
|
18
|
-
return {
|
|
42
|
+
return {
|
|
43
|
+
apiKey: process.env.ITERABLE_API_KEY,
|
|
44
|
+
baseUrl: process.env.ITERABLE_BASE_URL ?? DEFAULT_BASE_URL,
|
|
45
|
+
};
|
|
19
46
|
}
|
|
20
47
|
if (!isTestEnv()) {
|
|
21
48
|
try {
|
|
22
49
|
const keyManager = getKeyManager();
|
|
23
|
-
await keyManager.initialize();
|
|
24
50
|
if (await keyManager.hasKeys()) {
|
|
25
51
|
if (!(await keyManager.hasActiveKey())) {
|
|
26
|
-
throw new CliError(`No active API key. Run "${COMMAND_NAME} keys activate <name>"
|
|
52
|
+
throw new CliError(`No active API key. Run "${COMMAND_NAME} keys activate <name>", use --key <name>, or set ITERABLE_API_KEY.`, 2);
|
|
27
53
|
}
|
|
28
54
|
const apiKey = await keyManager.getActiveKey();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (meta?.baseUrl) {
|
|
33
|
-
baseUrl = meta.baseUrl;
|
|
34
|
-
}
|
|
35
|
-
return { apiKey, baseUrl };
|
|
55
|
+
const meta = await keyManager.getActiveKeyMetadata();
|
|
56
|
+
if (apiKey && meta) {
|
|
57
|
+
return { apiKey, baseUrl: meta.baseUrl };
|
|
36
58
|
}
|
|
37
59
|
}
|
|
38
60
|
}
|
|
39
61
|
catch (error) {
|
|
40
62
|
if (error instanceof CliError)
|
|
41
63
|
throw error;
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
}
|
|
64
|
+
const sanitizedMessage = sanitizeString(error instanceof Error ? error.message : String(error));
|
|
65
|
+
logger.error("Failed to load from key manager", {
|
|
66
|
+
error: sanitizedMessage,
|
|
67
|
+
});
|
|
68
|
+
console.error(
|
|
69
|
+
// eslint-disable-line no-console
|
|
70
|
+
"Warning: Failed to load API key from key storage:", sanitizedMessage);
|
|
56
71
|
}
|
|
57
72
|
}
|
|
58
|
-
throw new CliError(`No API key found. Run "${COMMAND_NAME} keys add" to add one, or set ITERABLE_API_KEY
|
|
73
|
+
throw new CliError(`No API key found. Run "${COMMAND_NAME} keys add" to add one, or set ITERABLE_API_KEY.`, 2);
|
|
59
74
|
}
|
|
60
75
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvD,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,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAOrD,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;QACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,CAAC;IAChD,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK;QACL,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM;QAC3D,aAAa,EAAE,EAAE,YAAY,EAAE,gBAAgB,eAAe,EAAE,EAAE;KACnE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAoB;IACtD,IAAI,WAAW,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,EAAE,KAAK,WAAW,CACtD,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAChB,mBAAmB,WAAW,WAAW,YAAY,oCAAoC,EACzF,CAAC,CACF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAChB,2BAA2B,WAAW,WAAW,YAAY,gBAAgB,WAAW,IAAI,EAC5F,CAAC,CACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gBAAgB;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;YAEnC,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,oEAAoE,EAC3G,CAAC,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBACrD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAE3C,MAAM,gBAAgB,GAAG,cAAc,CACrC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBAC9C,KAAK,EAAE,gBAAgB;aACxB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK;YACX,iCAAiC;YACjC,mDAAmD,EACnD,gBAAgB,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,0BAA0B,YAAY,iDAAiD,EACvF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
2
|
+
import chalk from "chalk";
|
|
3
3
|
import { readFileSync } from "fs";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import { loadCliConfig } from "./config.js";
|
|
5
|
+
import { createClient, loadCliConfig } from "./config.js";
|
|
6
6
|
import { CliError, UsageError } from "./errors.js";
|
|
7
7
|
import { formatOutput, getDefaultFormat } from "./output.js";
|
|
8
8
|
import { buildParser, parseCommand } from "./parser.js";
|
|
@@ -29,7 +29,7 @@ async function main() {
|
|
|
29
29
|
}
|
|
30
30
|
if (parsed.category === "keys") {
|
|
31
31
|
const { handleKeysCommand } = await import("./keys-cli.js");
|
|
32
|
-
await handleKeysCommand(parsed.action ? [parsed.action, ...parsed.rest] : []);
|
|
32
|
+
await handleKeysCommand(parsed.action ? [parsed.action, ...parsed.rest] : [], parsed.globalFlags.key);
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
if (!parsed.action) {
|
|
@@ -50,15 +50,8 @@ async function main() {
|
|
|
50
50
|
}
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
const config = await loadCliConfig();
|
|
54
|
-
const
|
|
55
|
-
process.env.ITERABLE_DEBUG_VERBOSE === "true";
|
|
56
|
-
const client = new IterableClient({
|
|
57
|
-
apiKey: config.apiKey,
|
|
58
|
-
baseUrl: config.baseUrl,
|
|
59
|
-
debug,
|
|
60
|
-
debugVerbose: process.env.ITERABLE_DEBUG_VERBOSE === "true",
|
|
61
|
-
});
|
|
53
|
+
const config = await loadCliConfig(parsed.globalFlags.key);
|
|
54
|
+
const client = createClient(config);
|
|
62
55
|
try {
|
|
63
56
|
let restArgs = parsed.rest;
|
|
64
57
|
if (parsed.globalFlags.file) {
|
|
@@ -102,46 +95,36 @@ async function main() {
|
|
|
102
95
|
}
|
|
103
96
|
main().catch(async (error) => {
|
|
104
97
|
const { IterableApiError, IterableNetworkError, IterableRawError, IterableResponseValidationError, } = await import("@iterable/api");
|
|
105
|
-
|
|
98
|
+
const err = (msg) => console.error(chalk.red(`✖ ${msg}`)); // eslint-disable-line no-console
|
|
99
|
+
const hint = (msg) => console.error(chalk.dim(` ${msg}`)); // eslint-disable-line no-console
|
|
106
100
|
if (error instanceof CliError) {
|
|
107
|
-
|
|
101
|
+
err(error.message);
|
|
108
102
|
process.exit(error.exitCode);
|
|
109
103
|
}
|
|
110
104
|
if (error instanceof z.ZodError) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
.join("
|
|
114
|
-
|
|
105
|
+
err("Validation error");
|
|
106
|
+
for (const issue of error.issues) {
|
|
107
|
+
hint(`${issue.path.join(".")}: ${issue.message}`);
|
|
108
|
+
}
|
|
115
109
|
process.exit(2);
|
|
116
110
|
}
|
|
117
|
-
if (error instanceof IterableApiError
|
|
118
|
-
|
|
111
|
+
if (error instanceof IterableApiError ||
|
|
112
|
+
error instanceof IterableRawError ||
|
|
113
|
+
error instanceof IterableResponseValidationError) {
|
|
114
|
+
err(`${error.message} (${error.statusCode})`);
|
|
119
115
|
if (error.endpoint)
|
|
120
|
-
|
|
121
|
-
if (error.statusCode === 401) {
|
|
122
|
-
|
|
116
|
+
hint(`Endpoint: ${error.endpoint}`);
|
|
117
|
+
if (error instanceof IterableApiError && error.statusCode === 401) {
|
|
118
|
+
hint(`Run '${COMMAND_NAME} keys add' to configure your API key`);
|
|
123
119
|
}
|
|
124
120
|
process.exit(1);
|
|
125
121
|
}
|
|
126
|
-
if (error instanceof IterableRawError) {
|
|
127
|
-
console.error(`API error (${error.statusCode}): ${error.message}`);
|
|
128
|
-
if (error.endpoint)
|
|
129
|
-
console.error(` Endpoint: ${error.endpoint}`);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
if (error instanceof IterableResponseValidationError) {
|
|
133
|
-
console.error(`Response validation error (${error.statusCode}): ${error.message}`);
|
|
134
|
-
if (error.endpoint)
|
|
135
|
-
console.error(` Endpoint: ${error.endpoint}`);
|
|
136
|
-
process.exit(1);
|
|
137
|
-
}
|
|
138
122
|
if (error instanceof IterableNetworkError) {
|
|
139
|
-
|
|
123
|
+
err(error.message);
|
|
140
124
|
process.exit(1);
|
|
141
125
|
}
|
|
142
|
-
/* eslint-enable no-console */
|
|
143
126
|
const msg = error instanceof Error ? error.message : String(error);
|
|
144
|
-
|
|
127
|
+
err(msg);
|
|
145
128
|
process.exit(1);
|
|
146
129
|
});
|
|
147
130
|
//# 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":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/key-manager.d.ts
CHANGED
|
@@ -30,8 +30,6 @@ export interface ApiKeyMetadata {
|
|
|
30
30
|
updated?: string;
|
|
31
31
|
/** Whether this is the currently active key */
|
|
32
32
|
isActive: boolean;
|
|
33
|
-
/** Optional per-key environment overrides (extensible for future vars) */
|
|
34
|
-
env?: Record<string, string>;
|
|
35
33
|
/** API key value (only present when not using Keychain storage) */
|
|
36
34
|
apiKey?: string;
|
|
37
35
|
/** Encrypted API key (Windows DPAPI) */
|
|
@@ -52,6 +50,7 @@ export declare class KeyManager {
|
|
|
52
50
|
* @param execSecurity - Optional security command executor (for dependency injection in tests)
|
|
53
51
|
*/
|
|
54
52
|
constructor(configDir?: string, execSecurity?: SecurityExecutor);
|
|
53
|
+
private ensureStore;
|
|
55
54
|
/**
|
|
56
55
|
* Validate metadata against keychain and clean up orphaned entries (macOS only)
|
|
57
56
|
*
|
|
@@ -148,7 +147,6 @@ export declare class KeyManager {
|
|
|
148
147
|
* @param name - User-friendly name for the key
|
|
149
148
|
* @param apiKey - The Iterable API key value
|
|
150
149
|
* @param baseUrl - Iterable API base URL
|
|
151
|
-
* @param envOverrides - Environment variable overrides. If undefined, keeps existing env (update) or no env (add). If provided (even empty {}), replaces/clears env.
|
|
152
150
|
* @param idOrName - If provided, updates the existing key with this ID or name
|
|
153
151
|
* @returns The ID of the saved key
|
|
154
152
|
*/
|
|
@@ -161,25 +159,23 @@ export declare class KeyManager {
|
|
|
161
159
|
* @param name - User-friendly name for the key (must be unique)
|
|
162
160
|
* @param apiKey - 32-character lowercase hexadecimal Iterable API key
|
|
163
161
|
* @param baseUrl - Iterable API base URL (must be HTTPS)
|
|
164
|
-
* @param envOverrides - Optional environment variable overrides for this key
|
|
165
162
|
* @returns The unique ID generated for this key
|
|
166
163
|
* @throws {Error} If the key name already exists, validation fails, or storage fails
|
|
167
164
|
*/
|
|
168
|
-
addKey(name: string, apiKey: string, baseUrl: string
|
|
165
|
+
addKey(name: string, apiKey: string, baseUrl: string): Promise<string>;
|
|
169
166
|
/**
|
|
170
167
|
* Update an existing API key
|
|
171
168
|
*
|
|
172
|
-
* Updates all properties of an existing key including name, API key value, base URL
|
|
169
|
+
* Updates all properties of an existing key including name, API key value, and base URL.
|
|
173
170
|
*
|
|
174
171
|
* @param idOrName - The unique ID or name of the key to update
|
|
175
172
|
* @param name - New name for the key (must be unique unless unchanged)
|
|
176
173
|
* @param apiKey - New API key value (can be the same as existing)
|
|
177
174
|
* @param baseUrl - New Iterable API base URL
|
|
178
|
-
* @param envOverrides - New environment variable overrides (undefined = keep existing, {} = clear)
|
|
179
175
|
* @returns The ID of the updated key
|
|
180
176
|
* @throws {Error} If the key is not found, name conflict, validation fails, or storage fails
|
|
181
177
|
*/
|
|
182
|
-
updateKey(idOrName: string, name: string, apiKey: string, baseUrl: string
|
|
178
|
+
updateKey(idOrName: string, name: string, apiKey: string, baseUrl: string): Promise<string>;
|
|
183
179
|
/**
|
|
184
180
|
* List all keys (metadata only, not the actual keys)
|
|
185
181
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0CH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAcnE,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"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"}
|