@inkbox/cli 0.2.1

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.
@@ -0,0 +1,22 @@
1
+ import { createClient, getGlobalOpts } from "../client.js";
2
+ import { output } from "../output.js";
3
+ import { withErrorHandler } from "../errors.js";
4
+ export function registerSigningKeyCommands(program) {
5
+ const signingKey = program
6
+ .command("signing-key")
7
+ .description("Webhook signing key operations");
8
+ signingKey
9
+ .command("create")
10
+ .description("Create or rotate the webhook signing key")
11
+ .action(withErrorHandler(async function () {
12
+ const opts = getGlobalOpts(this);
13
+ const inkbox = createClient(opts);
14
+ const key = await inkbox.createSigningKey();
15
+ output({
16
+ signingKey: key.signingKey,
17
+ createdAt: key.createdAt,
18
+ }, { json: !!opts.json });
19
+ console.error("Note: Store this key securely — it cannot be retrieved again.");
20
+ }));
21
+ }
22
+ //# sourceMappingURL=signing-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing-key.js","sourceRoot":"","sources":["../../src/commands/signing-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAEjD,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CACL,gBAAgB,CAAC,KAAK;QACpB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CACJ;YACE,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,EACD,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CACtB,CAAC;QACF,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,276 @@
1
+ import { createClient, getGlobalOpts } from "../client.js";
2
+ import { output } from "../output.js";
3
+ import { withErrorHandler } from "../errors.js";
4
+ import { parseTotpUri } from "@inkbox/sdk";
5
+ export function registerVaultCommands(program) {
6
+ const vault = program
7
+ .command("vault")
8
+ .description("Encrypted vault operations");
9
+ vault
10
+ .command("info")
11
+ .description("Show vault info")
12
+ .action(withErrorHandler(async function () {
13
+ const opts = getGlobalOpts(this);
14
+ const inkbox = createClient(opts);
15
+ const info = await inkbox.vault.info();
16
+ output(info, { json: !!opts.json });
17
+ }));
18
+ vault
19
+ .command("secrets")
20
+ .description("List vault secrets (metadata only)")
21
+ .option("--type <type>", "Filter by type: login, api_key, ssh_key, key_pair, other")
22
+ .action(withErrorHandler(async function (cmdOpts) {
23
+ const opts = getGlobalOpts(this);
24
+ const inkbox = createClient(opts);
25
+ const secrets = await inkbox.vault.listSecrets({
26
+ secretType: cmdOpts.type,
27
+ });
28
+ output(secrets, {
29
+ json: !!opts.json,
30
+ columns: ["id", "name", "secretType", "status", "createdAt"],
31
+ });
32
+ }));
33
+ vault
34
+ .command("get <secret-id>")
35
+ .description("Get and decrypt a secret (requires vault key)")
36
+ .action(withErrorHandler(async function (secretId) {
37
+ const opts = getGlobalOpts(this);
38
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
39
+ if (!vaultKey) {
40
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
41
+ process.exit(1);
42
+ }
43
+ const inkbox = createClient(opts);
44
+ await inkbox.ready();
45
+ const unlocked = inkbox.vault._unlocked;
46
+ const secret = await unlocked.getSecret(secretId);
47
+ output({
48
+ id: secret.id,
49
+ name: secret.name,
50
+ secretType: secret.secretType,
51
+ status: secret.status,
52
+ createdAt: secret.createdAt,
53
+ payload: secret.payload,
54
+ }, { json: !!opts.json });
55
+ }));
56
+ vault
57
+ .command("create")
58
+ .description("Create a new secret (requires vault key)")
59
+ .requiredOption("--name <name>", "Secret display name")
60
+ .requiredOption("--type <type>", "Secret type: login, api_key, ssh_key, key_pair, other")
61
+ .option("--description <desc>", "Optional description")
62
+ .option("--username <user>", "Username (for login type)")
63
+ .option("--password <pass>", "Password (for login type)")
64
+ .option("--email <email>", "Email (for login type)")
65
+ .option("--url <url>", "URL (for login type)")
66
+ .option("--totp-uri <uri>", "otpauth:// TOTP URI (for login type)")
67
+ .option("--key <key>", "API key value (for api_key type)")
68
+ .option("--access-key <key>", "Access key (for key_pair type)")
69
+ .option("--secret-key <key>", "Secret key (for key_pair type)")
70
+ .option("--endpoint <url>", "Endpoint URL (for api_key and key_pair types)")
71
+ .option("--private-key <key>", "Private key (for ssh_key type)")
72
+ .option("--public-key <key>", "Public key (for ssh_key type)")
73
+ .option("--fingerprint <fp>", "Key fingerprint (for ssh_key type)")
74
+ .option("--passphrase <pass>", "Key passphrase (for ssh_key type)")
75
+ .option("--data <json>", "JSON payload (for other type)")
76
+ .option("--notes <text>", "Optional notes")
77
+ .action(withErrorHandler(async function (cmdOpts) {
78
+ const opts = getGlobalOpts(this);
79
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
80
+ if (!vaultKey) {
81
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
82
+ process.exit(1);
83
+ }
84
+ const inkbox = createClient(opts);
85
+ await inkbox.ready();
86
+ const unlocked = inkbox.vault._unlocked;
87
+ let payload;
88
+ switch (cmdOpts.type) {
89
+ case "login":
90
+ if (!cmdOpts.password) {
91
+ console.error("Error: --password is required for login secrets.");
92
+ process.exit(1);
93
+ }
94
+ payload = {
95
+ password: cmdOpts.password,
96
+ username: cmdOpts.username,
97
+ email: cmdOpts.email,
98
+ url: cmdOpts.url,
99
+ notes: cmdOpts.notes,
100
+ ...(cmdOpts.totpUri
101
+ ? { totp: parseTotpUri(cmdOpts.totpUri) }
102
+ : {}),
103
+ };
104
+ break;
105
+ case "api_key":
106
+ if (!cmdOpts.key) {
107
+ console.error("Error: --key is required for api_key secrets.");
108
+ process.exit(1);
109
+ }
110
+ payload = {
111
+ apiKey: cmdOpts.key,
112
+ endpoint: cmdOpts.endpoint,
113
+ notes: cmdOpts.notes,
114
+ };
115
+ break;
116
+ case "key_pair":
117
+ if (!cmdOpts.accessKey || !cmdOpts.secretKey) {
118
+ console.error("Error: --access-key and --secret-key are required for key_pair secrets.");
119
+ process.exit(1);
120
+ }
121
+ payload = {
122
+ accessKey: cmdOpts.accessKey,
123
+ secretKey: cmdOpts.secretKey,
124
+ endpoint: cmdOpts.endpoint,
125
+ notes: cmdOpts.notes,
126
+ };
127
+ break;
128
+ case "ssh_key":
129
+ if (!cmdOpts.privateKey) {
130
+ console.error("Error: --private-key is required for ssh_key secrets.");
131
+ process.exit(1);
132
+ }
133
+ payload = {
134
+ privateKey: cmdOpts.privateKey,
135
+ publicKey: cmdOpts.publicKey,
136
+ fingerprint: cmdOpts.fingerprint,
137
+ passphrase: cmdOpts.passphrase,
138
+ notes: cmdOpts.notes,
139
+ };
140
+ break;
141
+ case "other":
142
+ if (!cmdOpts.data) {
143
+ console.error("Error: --data (JSON string) is required for other secrets.");
144
+ process.exit(1);
145
+ }
146
+ payload = {
147
+ data: cmdOpts.data,
148
+ notes: cmdOpts.notes,
149
+ };
150
+ break;
151
+ default:
152
+ console.error(`Error: Unknown secret type '${cmdOpts.type}'. Use: login, api_key, ssh_key, key_pair, other.`);
153
+ process.exit(1);
154
+ }
155
+ const secret = await unlocked.createSecret({
156
+ name: cmdOpts.name,
157
+ description: cmdOpts.description,
158
+ payload,
159
+ });
160
+ output({
161
+ id: secret.id,
162
+ name: secret.name,
163
+ secretType: secret.secretType,
164
+ status: secret.status,
165
+ }, { json: !!opts.json });
166
+ }));
167
+ vault
168
+ .command("delete <secret-id>")
169
+ .description("Delete a secret")
170
+ .action(withErrorHandler(async function (secretId) {
171
+ const opts = getGlobalOpts(this);
172
+ const inkbox = createClient(opts);
173
+ await inkbox.vault.deleteSecret(secretId);
174
+ console.log(`Deleted secret '${secretId}'.`);
175
+ }));
176
+ vault
177
+ .command("keys")
178
+ .description("List vault keys")
179
+ .option("--type <type>", "Filter by type: primary or recovery")
180
+ .action(withErrorHandler(async function (cmdOpts) {
181
+ const opts = getGlobalOpts(this);
182
+ const inkbox = createClient(opts);
183
+ const keys = await inkbox.vault.listKeys({
184
+ keyType: cmdOpts.type,
185
+ });
186
+ output(keys, {
187
+ json: !!opts.json,
188
+ columns: ["id", "keyType", "status", "createdBy", "createdAt"],
189
+ });
190
+ }));
191
+ vault
192
+ .command("logins")
193
+ .description("List login credentials for an identity")
194
+ .requiredOption("-i, --identity <handle>", "Agent identity handle")
195
+ .action(withErrorHandler(async function (cmdOpts) {
196
+ const opts = getGlobalOpts(this);
197
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
198
+ if (!vaultKey) {
199
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
200
+ process.exit(1);
201
+ }
202
+ const inkbox = createClient(opts);
203
+ await inkbox.ready();
204
+ const identity = await inkbox.getIdentity(cmdOpts.identity);
205
+ const creds = await identity.getCredentials();
206
+ const secrets = creds.listLogins();
207
+ output(secrets, {
208
+ json: !!opts.json,
209
+ columns: ["id", "name", "secretType", "status", "createdAt"],
210
+ });
211
+ }));
212
+ vault
213
+ .command("api-keys")
214
+ .description("List API key credentials for an identity")
215
+ .requiredOption("-i, --identity <handle>", "Agent identity handle")
216
+ .action(withErrorHandler(async function (cmdOpts) {
217
+ const opts = getGlobalOpts(this);
218
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
219
+ if (!vaultKey) {
220
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
221
+ process.exit(1);
222
+ }
223
+ const inkbox = createClient(opts);
224
+ await inkbox.ready();
225
+ const identity = await inkbox.getIdentity(cmdOpts.identity);
226
+ const creds = await identity.getCredentials();
227
+ const secrets = creds.listApiKeys();
228
+ output(secrets, {
229
+ json: !!opts.json,
230
+ columns: ["id", "name", "secretType", "status", "createdAt"],
231
+ });
232
+ }));
233
+ vault
234
+ .command("ssh-keys")
235
+ .description("List SSH key credentials for an identity")
236
+ .requiredOption("-i, --identity <handle>", "Agent identity handle")
237
+ .action(withErrorHandler(async function (cmdOpts) {
238
+ const opts = getGlobalOpts(this);
239
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
240
+ if (!vaultKey) {
241
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
242
+ process.exit(1);
243
+ }
244
+ const inkbox = createClient(opts);
245
+ await inkbox.ready();
246
+ const identity = await inkbox.getIdentity(cmdOpts.identity);
247
+ const creds = await identity.getCredentials();
248
+ const secrets = creds.listSshKeys();
249
+ output(secrets, {
250
+ json: !!opts.json,
251
+ columns: ["id", "name", "secretType", "status", "createdAt"],
252
+ });
253
+ }));
254
+ vault
255
+ .command("key-pairs")
256
+ .description("List key pair credentials for an identity")
257
+ .requiredOption("-i, --identity <handle>", "Agent identity handle")
258
+ .action(withErrorHandler(async function (cmdOpts) {
259
+ const opts = getGlobalOpts(this);
260
+ const vaultKey = opts.vaultKey ?? process.env.INKBOX_VAULT_KEY;
261
+ if (!vaultKey) {
262
+ console.error("Error: Vault key required. Set INKBOX_VAULT_KEY or pass --vault-key.");
263
+ process.exit(1);
264
+ }
265
+ const inkbox = createClient(opts);
266
+ await inkbox.ready();
267
+ const identity = await inkbox.getIdentity(cmdOpts.identity);
268
+ const creds = await identity.getCredentials();
269
+ const secrets = creds.listKeyPairs();
270
+ output(secrets, {
271
+ json: !!opts.json,
272
+ columns: ["id", "name", "secretType", "status", "createdAt"],
273
+ });
274
+ }));
275
+ }
276
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/commands/vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { getGlobalOpts } from "../client.js";
2
+ import { output } from "../output.js";
3
+ import { withErrorHandler } from "../errors.js";
4
+ import { verifyWebhook } from "@inkbox/sdk";
5
+ export function registerWebhookCommands(program) {
6
+ const webhook = program
7
+ .command("webhook")
8
+ .description("Webhook utilities");
9
+ webhook
10
+ .command("verify")
11
+ .description("Verify a webhook signature (local, no API call)")
12
+ .requiredOption("--payload <payload>", "Raw request body")
13
+ .requiredOption("--secret <secret>", "Signing key secret")
14
+ .option("-H, --header <header>", "Header in Key: Value format (repeatable)", (val, acc) => {
15
+ acc.push(val);
16
+ return acc;
17
+ }, [])
18
+ .action(withErrorHandler(async function (cmdOpts) {
19
+ const opts = getGlobalOpts(this);
20
+ const headers = {};
21
+ for (const h of cmdOpts.header) {
22
+ const idx = h.indexOf(":");
23
+ if (idx === -1) {
24
+ console.error(`Error: Invalid header format '${h}'. Use 'Key: Value'.`);
25
+ process.exit(1);
26
+ }
27
+ headers[h.slice(0, idx).trim().toLowerCase()] = h
28
+ .slice(idx + 1)
29
+ .trim();
30
+ }
31
+ const valid = verifyWebhook({
32
+ payload: cmdOpts.payload,
33
+ headers,
34
+ secret: cmdOpts.secret,
35
+ });
36
+ if (opts.json) {
37
+ output({ valid }, { json: true });
38
+ }
39
+ else if (valid) {
40
+ console.log("Valid signature.");
41
+ }
42
+ else {
43
+ console.error("Invalid signature.");
44
+ process.exit(1);
45
+ }
46
+ }));
47
+ }
48
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAEpC,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACzD,cAAc,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;SACzD,MAAM,CACL,uBAAuB,EACvB,0CAA0C,EAC1C,CAAC,GAAW,EAAE,GAAa,EAAE,EAAE;QAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAc,CACf;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,WAEpB,OAIC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,sBAAsB,CAAC,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;iBAC9C,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;iBACd,IAAI,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,31 @@
1
+ import { InkboxAPIError, InkboxError, InkboxVaultKeyError } from "@inkbox/sdk";
2
+ export function withErrorHandler(fn) {
3
+ return async function (...args) {
4
+ try {
5
+ await fn.call(this, ...args);
6
+ }
7
+ catch (err) {
8
+ if (err instanceof InkboxAPIError) {
9
+ console.error(`Error: HTTP ${err.statusCode}: ${err.detail}`);
10
+ if (err.statusCode === 401) {
11
+ console.error("Hint: Check your API key.");
12
+ }
13
+ }
14
+ else if (err instanceof InkboxVaultKeyError) {
15
+ console.error(`Error: ${err.message}`);
16
+ console.error("Hint: Set INKBOX_VAULT_KEY or pass --vault-key.");
17
+ }
18
+ else if (err instanceof InkboxError) {
19
+ console.error(`Error: ${err.message}`);
20
+ }
21
+ else if (err instanceof Error) {
22
+ console.error(`Error: ${err.message}`);
23
+ }
24
+ else {
25
+ console.error("An unknown error occurred.");
26
+ }
27
+ process.exit(1);
28
+ }
29
+ };
30
+ }
31
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,UAAU,gBAAgB,CAC9B,EAAiC;IAEjC,OAAO,KAAK,WAA0B,GAAG,IAAO;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9D,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC3B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,CACX,iDAAiD,CAClD,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { registerIdentityCommands } from "./commands/identity.js";
4
+ import { registerEmailCommands } from "./commands/email.js";
5
+ import { registerPhoneCommands } from "./commands/phone.js";
6
+ import { registerVaultCommands } from "./commands/vault.js";
7
+ import { registerMailboxCommands } from "./commands/mailbox.js";
8
+ import { registerNumberCommands } from "./commands/number.js";
9
+ import { registerSigningKeyCommands } from "./commands/signing-key.js";
10
+ import { registerWebhookCommands } from "./commands/webhook.js";
11
+ const program = new Command()
12
+ .name("inkbox")
13
+ .description("CLI for the Inkbox API — email, phone, identities, and vault for AI agents")
14
+ .version("0.1.0")
15
+ .option("--api-key <key>", "Inkbox API key (or set INKBOX_API_KEY)")
16
+ .option("--vault-key <key>", "Vault key for decrypt operations (or set INKBOX_VAULT_KEY)")
17
+ .option("--base-url <url>", "Override API base URL")
18
+ .option("--json", "Output as JSON", false);
19
+ registerIdentityCommands(program);
20
+ registerEmailCommands(program);
21
+ registerPhoneCommands(program);
22
+ registerVaultCommands(program);
23
+ registerMailboxCommands(program);
24
+ registerNumberCommands(program);
25
+ registerSigningKeyCommands(program);
26
+ registerWebhookCommands(program);
27
+ program.parse();
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;KACzF,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;KACnD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAE7C,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/output.js ADDED
@@ -0,0 +1,53 @@
1
+ function formatValue(v) {
2
+ if (v === null || v === undefined)
3
+ return "-";
4
+ if (v instanceof Date)
5
+ return v.toISOString().slice(0, 16).replace("T", " ");
6
+ if (typeof v === "object")
7
+ return JSON.stringify(v);
8
+ return String(v);
9
+ }
10
+ export function printTable(rows, columns) {
11
+ if (rows.length === 0) {
12
+ console.log("No results.");
13
+ return;
14
+ }
15
+ const widths = columns.map((col) => Math.max(col.length, ...rows.map((r) => formatValue(r[col]).length)));
16
+ const header = columns
17
+ .map((col, i) => col.padEnd(widths[i]))
18
+ .join(" ");
19
+ const separator = widths.map((w) => "-".repeat(w)).join(" ");
20
+ console.log(header);
21
+ console.log(separator);
22
+ for (const row of rows) {
23
+ const line = columns
24
+ .map((col, i) => formatValue(row[col]).padEnd(widths[i]))
25
+ .join(" ");
26
+ console.log(line);
27
+ }
28
+ }
29
+ export function printRecord(obj) {
30
+ const maxKey = Math.max(...Object.keys(obj).map((k) => k.length));
31
+ for (const [key, val] of Object.entries(obj)) {
32
+ console.log(`${key.padEnd(maxKey)} ${formatValue(val)}`);
33
+ }
34
+ }
35
+ export function printJson(data) {
36
+ console.log(JSON.stringify(data, (_key, val) => (val instanceof Date ? val.toISOString() : val), 2));
37
+ }
38
+ export function output(data, opts) {
39
+ if (opts.json) {
40
+ printJson(data);
41
+ return;
42
+ }
43
+ if (Array.isArray(data) && opts.columns) {
44
+ printTable(data, opts.columns);
45
+ }
46
+ else if (typeof data === "object" && data !== null && !Array.isArray(data)) {
47
+ printRecord(data);
48
+ }
49
+ else {
50
+ console.log(data);
51
+ }
52
+ }
53
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@inkbox/cli",
3
+ "version": "0.2.1",
4
+ "description": "CLI for the Inkbox API",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "inkbox": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsx src/index.ts",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "dependencies": {
20
+ "@inkbox/sdk": "^0.2.1",
21
+ "commander": "^13.0.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^25.5.0",
25
+ "tsx": "^4.21.0",
26
+ "typescript": "^5.4.0"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/inkbox-ai/inkbox",
31
+ "directory": "cli"
32
+ },
33
+ "homepage": "https://inkbox.ai",
34
+ "bugs": {
35
+ "url": "https://github.com/inkbox-ai/inkbox/issues"
36
+ },
37
+ "engines": {
38
+ "node": ">=18"
39
+ }
40
+ }