@inkbox/cli 0.2.5 → 0.2.7

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
@@ -48,6 +48,25 @@ inkbox --json identity list
48
48
 
49
49
  ## Commands
50
50
 
51
+ ### signup
52
+
53
+ Agent self-signup flow. The `create` command does not require an API key.
54
+
55
+ ```bash
56
+ inkbox signup create # Register a new agent (no API key needed)
57
+ --human-email <email> # Email of the human to approve (required)
58
+ --display-name <name> # Agent display name (required)
59
+ --note-to-human <note> # Message to human in verification email (required)
60
+
61
+ inkbox signup verify # Submit verification code
62
+ --code <code> # 6-digit code from email (required)
63
+
64
+ inkbox signup resend-verification # Resend the verification email (5-min cooldown)
65
+ # Returns current organization_id (may change after verify/approval)
66
+
67
+ inkbox signup status # Check claim status and restrictions
68
+ ```
69
+
51
70
  ### identity
52
71
 
53
72
  Manage agent identities.
@@ -261,6 +280,15 @@ inkbox number update <id> # Update phone number config
261
280
  inkbox number release <number-id> # Release a phone number
262
281
  ```
263
282
 
283
+ ### whoami
284
+
285
+ Show the authenticated caller's identity.
286
+
287
+ ```bash
288
+ inkbox whoami # Display caller identity (API key or JWT)
289
+ inkbox whoami --json # Output as JSON
290
+ ```
291
+
264
292
  ### signing-key
265
293
 
266
294
  Webhook signing key management.
@@ -0,0 +1,92 @@
1
+ import { getGlobalOpts } from "../client.js";
2
+ import { output } from "../output.js";
3
+ import { withErrorHandler } from "../errors.js";
4
+ import { Inkbox } from "@inkbox/sdk";
5
+ function requireApiKey(opts) {
6
+ const apiKey = opts.apiKey ?? process.env.INKBOX_API_KEY;
7
+ if (!apiKey) {
8
+ console.error("Error: API key required. Set INKBOX_API_KEY or pass --api-key.");
9
+ process.exit(1);
10
+ }
11
+ return apiKey;
12
+ }
13
+ export function registerSignupCommands(program) {
14
+ const signup = program
15
+ .command("signup")
16
+ .description("Agent self-signup flow");
17
+ signup
18
+ .command("create")
19
+ .description("Register a new agent (no API key required)")
20
+ .requiredOption("--human-email <email>", "Email of the human who should approve this agent")
21
+ .requiredOption("--display-name <name>", "Human-readable name for the agent")
22
+ .requiredOption("--note-to-human <note>", "Message from the agent to the human, included in the verification email")
23
+ .action(withErrorHandler(async function () {
24
+ const globalOpts = getGlobalOpts(this);
25
+ const cmdOpts = this.opts();
26
+ const result = await Inkbox.signup({
27
+ humanEmail: cmdOpts.humanEmail,
28
+ displayName: cmdOpts.displayName,
29
+ noteToHuman: cmdOpts.noteToHuman,
30
+ }, { baseUrl: globalOpts.baseUrl });
31
+ if (globalOpts.json) {
32
+ output(result, { json: true });
33
+ }
34
+ else {
35
+ console.log();
36
+ console.log("Agent registered successfully!");
37
+ console.log();
38
+ console.log(` Email: ${result.emailAddress}`);
39
+ console.log(` Handle: ${result.agentHandle}`);
40
+ console.log(` Org: ${result.organizationId}`);
41
+ console.log(` Status: ${result.claimStatus}`);
42
+ console.log();
43
+ console.log(` API Key: ${result.apiKey}`);
44
+ console.log();
45
+ console.log("Save the API key — it is shown only once.");
46
+ console.log(`A verification email has been sent to ${result.humanEmail}.`);
47
+ }
48
+ }));
49
+ signup
50
+ .command("verify")
51
+ .description("Submit a 6-digit verification code")
52
+ .requiredOption("--code <code>", "The 6-digit verification code")
53
+ .action(withErrorHandler(async function () {
54
+ const globalOpts = getGlobalOpts(this);
55
+ const apiKey = requireApiKey(globalOpts);
56
+ const cmdOpts = this.opts();
57
+ const result = await Inkbox.verifySignup(apiKey, { verificationCode: cmdOpts.code }, { baseUrl: globalOpts.baseUrl });
58
+ output(result, { json: !!globalOpts.json });
59
+ }));
60
+ signup
61
+ .command("resend-verification")
62
+ .description("Resend the verification email (5-minute cooldown)")
63
+ .action(withErrorHandler(async function () {
64
+ const globalOpts = getGlobalOpts(this);
65
+ const apiKey = requireApiKey(globalOpts);
66
+ const result = await Inkbox.resendSignupVerification(apiKey, { baseUrl: globalOpts.baseUrl });
67
+ output(result, { json: !!globalOpts.json });
68
+ }));
69
+ signup
70
+ .command("status")
71
+ .description("Check signup claim status and restrictions")
72
+ .action(withErrorHandler(async function () {
73
+ const globalOpts = getGlobalOpts(this);
74
+ const apiKey = requireApiKey(globalOpts);
75
+ const result = await Inkbox.getSignupStatus(apiKey, { baseUrl: globalOpts.baseUrl });
76
+ if (globalOpts.json) {
77
+ output(result, { json: true });
78
+ }
79
+ else {
80
+ output({
81
+ claimStatus: result.claimStatus,
82
+ humanState: result.humanState,
83
+ humanEmail: result.humanEmail,
84
+ maxSendsPerDay: result.restrictions.maxSendsPerDay,
85
+ allowedRecipients: result.restrictions.allowedRecipients.join(", ") || "-",
86
+ canReceive: result.restrictions.canReceive,
87
+ canCreateMailboxes: result.restrictions.canCreateMailboxes,
88
+ }, { json: false });
89
+ }
90
+ }));
91
+ }
92
+ //# sourceMappingURL=signup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/commands/signup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { createClient, getGlobalOpts } from "../client.js";
2
+ import { output } from "../output.js";
3
+ import { withErrorHandler } from "../errors.js";
4
+ export function registerWhoamiCommand(program) {
5
+ program
6
+ .command("whoami")
7
+ .description("Show the authenticated caller's identity")
8
+ .action(withErrorHandler(async function () {
9
+ const opts = getGlobalOpts(this);
10
+ const inkbox = createClient(opts);
11
+ const info = await inkbox.whoami();
12
+ output(info, { json: !!opts.json });
13
+ }));
14
+ }
15
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.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,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,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,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
+ import { registerWhoamiCommand } from "./commands/whoami.js";
4
+ import { registerSignupCommands } from "./commands/signup.js";
3
5
  import { registerIdentityCommands } from "./commands/identity.js";
4
6
  import { registerEmailCommands } from "./commands/email.js";
5
7
  import { registerPhoneCommands } from "./commands/phone.js";
@@ -17,6 +19,8 @@ const program = new Command()
17
19
  .option("--vault-key <key>", "Vault key for decrypt operations (or set INKBOX_VAULT_KEY)")
18
20
  .option("--base-url <url>", "Override API base URL")
19
21
  .option("--json", "Output as JSON", false);
22
+ registerWhoamiCommand(program);
23
+ registerSignupCommands(program);
20
24
  registerIdentityCommands(program);
21
25
  registerEmailCommands(program);
22
26
  registerPhoneCommands(program);
package/dist/index.js.map CHANGED
@@ -1 +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,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,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,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,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,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,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,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkbox/cli",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "CLI for the Inkbox API",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,7 +17,7 @@
17
17
  "prepublishOnly": "npm run build"
18
18
  },
19
19
  "dependencies": {
20
- "@inkbox/sdk": "^0.2.5",
20
+ "@inkbox/sdk": "^0.2.7",
21
21
  "commander": "^13.0.0"
22
22
  },
23
23
  "devDependencies": {