@inkbox/cli 0.4.23 → 0.4.25
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 +58 -1
- package/dist/client.js +5 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/mailbox.js +119 -10
- package/dist/commands/mailbox.js.map +1 -1
- package/dist/errors.js +8 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -390,14 +390,27 @@ by `inkbox identity create` and removed by `inkbox identity delete`
|
|
|
390
390
|
has moved to the identity; mailbox PATCH hard-rejects it with a 422.
|
|
391
391
|
|
|
392
392
|
```bash
|
|
393
|
-
inkbox mailbox list # List all mailboxes
|
|
393
|
+
inkbox mailbox list # List all mailboxes (incl. a 'storage' column)
|
|
394
394
|
inkbox mailbox get <email-address> # Get mailbox details
|
|
395
395
|
inkbox mailbox update <email-address> # Update a mailbox
|
|
396
396
|
--filter-mode <mode> # whitelist or blacklist (admin-only)
|
|
397
|
+
inkbox mailbox client-settings <email-address> # IMAP/SMTP settings for a mail client
|
|
397
398
|
# To attach a webhook receiver, use `inkbox webhook subscription create
|
|
398
399
|
# --mailbox-id <id> --url <url> --event-type message.received ...`.
|
|
399
400
|
```
|
|
400
401
|
|
|
402
|
+
`mailbox list` shows a `storage` column (`1.2 GiB / 2 GiB`) and `mailbox get`
|
|
403
|
+
adds `storageUsedBytes` / `storageLimitBytes` — raw byte counts under `--json`,
|
|
404
|
+
humanized in the table. The caps are **binary** (2 GiB is `2 * 1024³` bytes),
|
|
405
|
+
so the readouts are labeled GiB/MiB. A `-` limit means the server didn't
|
|
406
|
+
resolve a cap.
|
|
407
|
+
|
|
408
|
+
Sending from a mailbox that is at its cap fails with `HTTP 402` and a hint:
|
|
409
|
+
free space with `inkbox email delete <message-id> -i <handle>` / `inkbox email
|
|
410
|
+
delete-thread <thread-id> -i <handle>` (reclaim is immediate), or upgrade the
|
|
411
|
+
plan. All three send paths (`email send`, `email reply-all`, `email forward`)
|
|
412
|
+
are enforced.
|
|
413
|
+
|
|
401
414
|
### tunnel
|
|
402
415
|
|
|
403
416
|
Tunnel read + update + sign-csr. Tunnels are provisioned atomically by
|
|
@@ -502,6 +515,46 @@ inkbox webhook subscription update <sub-id> # Update url, event_types, and/or c
|
|
|
502
515
|
inkbox webhook subscription delete <sub-id> # Remove a subscription
|
|
503
516
|
```
|
|
504
517
|
|
|
518
|
+
## Mail clients (IMAP/SMTP)
|
|
519
|
+
|
|
520
|
+
An Inkbox inbox can also be attached to a regular mail client (Thunderbird,
|
|
521
|
+
Apple Mail, mutt, …) with the API key you already have. There is no separate
|
|
522
|
+
credential to create. `inkbox mailbox client-settings <email-address>` prints
|
|
523
|
+
these:
|
|
524
|
+
|
|
525
|
+
| Setting | Value |
|
|
526
|
+
|---|---|
|
|
527
|
+
| IMAP host | `imap.inkboxmail.com` |
|
|
528
|
+
| IMAP port | `993` (IMAPS / implicit TLS) |
|
|
529
|
+
| SMTP host | `smtp.inkboxmail.com` |
|
|
530
|
+
| SMTP port | `465` (SMTPS / implicit TLS) or `587` (STARTTLS) |
|
|
531
|
+
| Username | the inbox address (e.g. `sales-bot@inkboxmail.com`) |
|
|
532
|
+
| Password | an **identity-scoped** API key (`ApiKey_...`) |
|
|
533
|
+
|
|
534
|
+
Mint the password with `inkbox api-keys create --label <name> --identity-id
|
|
535
|
+
<uuid>`. Admin-scoped keys are rejected: one key maps to exactly one mailbox.
|
|
536
|
+
Revoking the key revokes mail-client access.
|
|
537
|
+
|
|
538
|
+
Two constraints that bite in practice:
|
|
539
|
+
|
|
540
|
+
- **`From` must be the authenticated inbox address**, and exactly one address.
|
|
541
|
+
Aliases and "send as" identities are rejected.
|
|
542
|
+
- **On the Free plan, signed/encrypted mail (S/MIME, PGP) cannot be sent over
|
|
543
|
+
SMTP.** The required footer can't be injected without breaking the signature,
|
|
544
|
+
so the send is refused. Send unsigned, or upgrade the plan.
|
|
545
|
+
|
|
546
|
+
If your client saves its own copy of sent messages, leave that setting on:
|
|
547
|
+
Inkbox recognizes the copy as the message it already stored, so you get one
|
|
548
|
+
Sent entry, charged against your storage cap once.
|
|
549
|
+
|
|
550
|
+
`mailbox client-settings` derives the hosts from the configured API base URL.
|
|
551
|
+
When that URL isn't a recognized Inkbox API host, it errors instead of printing
|
|
552
|
+
hosts it would have to guess — a mail client pointed at guessed hosts would talk
|
|
553
|
+
to the wrong server.
|
|
554
|
+
|
|
555
|
+
Full setup walkthrough:
|
|
556
|
+
<https://inkbox.ai/docs/capabilities/email/mail-clients>
|
|
557
|
+
|
|
505
558
|
## Global options
|
|
506
559
|
|
|
507
560
|
```
|
|
@@ -511,6 +564,10 @@ inkbox webhook subscription delete <sub-id> # Remove a subscription
|
|
|
511
564
|
--json Output as JSON (default: formatted tables)
|
|
512
565
|
```
|
|
513
566
|
|
|
567
|
+
## Proxies
|
|
568
|
+
|
|
569
|
+
The CLI honors `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` automatically on every supported Node version — no `NODE_USE_ENV_PROXY` needed. Set `NODE_USE_ENV_PROXY=0` to opt out.
|
|
570
|
+
|
|
514
571
|
## License
|
|
515
572
|
|
|
516
573
|
MIT
|
package/dist/client.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as os from "node:os";
|
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import { Inkbox } from "@inkbox/sdk";
|
|
5
5
|
// Keep in sync with package.json "version".
|
|
6
|
-
export const CLI_VERSION = "0.4.
|
|
6
|
+
export const CLI_VERSION = "0.4.25";
|
|
7
7
|
export function getGlobalOpts(cmd) {
|
|
8
8
|
let root = cmd;
|
|
9
9
|
while (root.parent)
|
|
@@ -35,6 +35,10 @@ function readConfigFile() {
|
|
|
35
35
|
return {};
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
/** Same precedence as createClient: flag, then env, then ~/.inkbox/config. */
|
|
39
|
+
export function resolveBaseUrl(opts) {
|
|
40
|
+
return (opts.baseUrl ?? process.env.INKBOX_BASE_URL ?? readConfigFile().base_url);
|
|
41
|
+
}
|
|
38
42
|
export function createClient(opts) {
|
|
39
43
|
const fileCfg = readConfigFile();
|
|
40
44
|
const apiKey = opts.apiKey ?? process.env.INKBOX_API_KEY ?? fileCfg.api_key;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AASpC,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,OAAO,IAAI,CAAC,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,OAAO,IAAI,CAAC,IAAI,EAAgB,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI;iBACf,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;iBACb,IAAI,EAAE;iBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,sEAAsE;YACpE,sCAAsC,CACzC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC;IAChF,OAAO,IAAI,MAAM,CAAC;QAChB,MAAM;QACN,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC/B,OAAO;QACP,eAAe,EAAE,cAAc,WAAW,EAAE;KAC7C,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AASpC,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,OAAO,IAAI,CAAC,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,OAAO,IAAI,CAAC,IAAI,EAAgB,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI;iBACf,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;iBACb,IAAI,EAAE;iBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,OAAO,CACL,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAc,EAAE,CAAC,QAAQ,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,sEAAsE;YACpE,sCAAsC,CACzC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC;IAChF,OAAO,IAAI,MAAM,CAAC;QAChB,MAAM;QACN,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC/B,OAAO;QACP,eAAe,EAAE,cAAc,WAAW,EAAE;KAC7C,CAAC,CAAC;AACL,CAAC"}
|
package/dist/commands/mailbox.js
CHANGED
|
@@ -1,15 +1,104 @@
|
|
|
1
1
|
import { FilterMode, } from "@inkbox/sdk";
|
|
2
|
-
import { createClient, getGlobalOpts } from "../client.js";
|
|
2
|
+
import { createClient, getGlobalOpts, resolveBaseUrl } from "../client.js";
|
|
3
3
|
import { output } from "../output.js";
|
|
4
4
|
import { withErrorHandler } from "../errors.js";
|
|
5
5
|
const MAILBOX_LIST_COLUMNS = [
|
|
6
6
|
"emailAddress",
|
|
7
7
|
"sendingDomain",
|
|
8
|
+
"storage",
|
|
8
9
|
"id",
|
|
9
10
|
"filterMode",
|
|
10
11
|
"agentIdentityId",
|
|
11
12
|
"createdAt",
|
|
12
13
|
];
|
|
14
|
+
const BYTE_UNITS = ["B", "KiB", "MiB", "GiB", "TiB"];
|
|
15
|
+
// Storage caps are binary (2 GiB = 2 * 1024 ** 3), so this divides by 1024 and
|
|
16
|
+
// labels GiB/MiB — never pair base-2 math with a decimal "GB".
|
|
17
|
+
export function formatBytes(bytes) {
|
|
18
|
+
if (!Number.isFinite(bytes) || bytes <= 0)
|
|
19
|
+
return "0 B";
|
|
20
|
+
let value = bytes;
|
|
21
|
+
let unit = 0;
|
|
22
|
+
while (value >= 1024 && unit < BYTE_UNITS.length - 1) {
|
|
23
|
+
value /= 1024;
|
|
24
|
+
unit += 1;
|
|
25
|
+
}
|
|
26
|
+
if (unit === 0)
|
|
27
|
+
return `${Math.round(value)} B`;
|
|
28
|
+
let rounded = Math.round(value * 10) / 10;
|
|
29
|
+
if (rounded >= 1024 && unit < BYTE_UNITS.length - 1) {
|
|
30
|
+
rounded = Math.round((rounded / 1024) * 10) / 10;
|
|
31
|
+
unit += 1;
|
|
32
|
+
}
|
|
33
|
+
return `${rounded} ${BYTE_UNITS[unit]}`;
|
|
34
|
+
}
|
|
35
|
+
/** "1.2 GiB / 4 GiB"; a null limit (unresolved cap) renders as a dash. */
|
|
36
|
+
export function formatStorage(used, limit) {
|
|
37
|
+
const usedText = formatBytes(used ?? 0);
|
|
38
|
+
return `${usedText} / ${limit === null || limit === undefined ? "-" : formatBytes(limit)}`;
|
|
39
|
+
}
|
|
40
|
+
export function mailboxListRow(mb) {
|
|
41
|
+
return {
|
|
42
|
+
...mb,
|
|
43
|
+
storage: formatStorage(mb.storageUsedBytes, mb.storageLimitBytes),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** `humanize` adds the readable `storage` line; --json gets raw bytes only. */
|
|
47
|
+
export function mailboxGetRecord(mb, opts) {
|
|
48
|
+
const record = {
|
|
49
|
+
emailAddress: mb.emailAddress,
|
|
50
|
+
sendingDomain: mb.sendingDomain,
|
|
51
|
+
id: mb.id,
|
|
52
|
+
filterMode: mb.filterMode,
|
|
53
|
+
agentIdentityId: mb.agentIdentityId,
|
|
54
|
+
createdAt: mb.createdAt,
|
|
55
|
+
storageUsedBytes: mb.storageUsedBytes,
|
|
56
|
+
storageLimitBytes: mb.storageLimitBytes,
|
|
57
|
+
};
|
|
58
|
+
if (opts.humanize) {
|
|
59
|
+
record.storage = formatStorage(mb.storageUsedBytes, mb.storageLimitBytes);
|
|
60
|
+
}
|
|
61
|
+
return record;
|
|
62
|
+
}
|
|
63
|
+
const MAIL_DOMAIN_BY_API_HOST = new Map([
|
|
64
|
+
["inkbox.ai", "inkboxmail.com"],
|
|
65
|
+
["api.inkbox.ai", "inkboxmail.com"],
|
|
66
|
+
["beta.inkbox.ai", "beta.inkboxmail.com"],
|
|
67
|
+
["api.beta.inkbox.ai", "beta.inkboxmail.com"],
|
|
68
|
+
["development.inkbox.ai", "development.inkboxmail.com"],
|
|
69
|
+
["api.development.inkbox.ai", "development.inkboxmail.com"],
|
|
70
|
+
]);
|
|
71
|
+
export const UNRESOLVED_MAIL_HOSTS_ERROR = "Can't determine the mail hosts for this API base URL.";
|
|
72
|
+
/**
|
|
73
|
+
* The mail domain for the configured API base URL, or null when the URL isn't an
|
|
74
|
+
* Inkbox API host. Callers must print nothing on null — a mail client pointed at
|
|
75
|
+
* guessed hosts would talk to the wrong server.
|
|
76
|
+
*/
|
|
77
|
+
export function resolveMailDomain(baseUrl) {
|
|
78
|
+
if (!baseUrl)
|
|
79
|
+
return "inkboxmail.com"; // unset = the SDK's default API host
|
|
80
|
+
let host;
|
|
81
|
+
try {
|
|
82
|
+
host = new URL(baseUrl).hostname.toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return MAIL_DOMAIN_BY_API_HOST.get(host) ?? null;
|
|
88
|
+
}
|
|
89
|
+
export function clientSettings(emailAddress, mailDomain) {
|
|
90
|
+
return {
|
|
91
|
+
imapHost: `imap.${mailDomain}`,
|
|
92
|
+
imapPort: 993,
|
|
93
|
+
imapSecurity: "IMAPS (implicit TLS)",
|
|
94
|
+
smtpHost: `smtp.${mailDomain}`,
|
|
95
|
+
smtpPort: 465,
|
|
96
|
+
smtpPortStarttls: 587,
|
|
97
|
+
username: emailAddress,
|
|
98
|
+
// Never printed: the caller supplies their own identity-scoped API key.
|
|
99
|
+
password: "<your identity-scoped API key (ApiKey_...)>",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
13
102
|
function renderFilterModeChangeNotice(mb) {
|
|
14
103
|
const notice = mb.filterModeChangeNotice;
|
|
15
104
|
if (!notice)
|
|
@@ -132,7 +221,8 @@ export function registerMailboxCommands(program) {
|
|
|
132
221
|
const opts = getGlobalOpts(this);
|
|
133
222
|
const inkbox = createClient(opts);
|
|
134
223
|
const mailboxes = await inkbox.mailboxes.list();
|
|
135
|
-
|
|
224
|
+
// --json keeps the raw byte counts; the table gets the humanized column.
|
|
225
|
+
output(opts.json ? mailboxes : mailboxes.map(mailboxListRow), {
|
|
136
226
|
json: !!opts.json,
|
|
137
227
|
columns: MAILBOX_LIST_COLUMNS,
|
|
138
228
|
});
|
|
@@ -144,14 +234,9 @@ export function registerMailboxCommands(program) {
|
|
|
144
234
|
const opts = getGlobalOpts(this);
|
|
145
235
|
const inkbox = createClient(opts);
|
|
146
236
|
const mb = await inkbox.mailboxes.get(emailAddress);
|
|
147
|
-
output({
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
id: mb.id,
|
|
151
|
-
filterMode: mb.filterMode,
|
|
152
|
-
agentIdentityId: mb.agentIdentityId,
|
|
153
|
-
createdAt: mb.createdAt,
|
|
154
|
-
}, { json: !!opts.json });
|
|
237
|
+
output(mailboxGetRecord(mb, { humanize: !opts.json }), {
|
|
238
|
+
json: !!opts.json,
|
|
239
|
+
});
|
|
155
240
|
}));
|
|
156
241
|
mailbox
|
|
157
242
|
.command("update <email-address>")
|
|
@@ -174,6 +259,30 @@ export function registerMailboxCommands(program) {
|
|
|
174
259
|
}, { json: !!opts.json });
|
|
175
260
|
renderFilterModeChangeNotice(mb);
|
|
176
261
|
}));
|
|
262
|
+
mailbox
|
|
263
|
+
.command("client-settings <email-address>")
|
|
264
|
+
.description("Print IMAP/SMTP settings for attaching this inbox to a mail client")
|
|
265
|
+
.action(withErrorHandler(async function (emailAddress) {
|
|
266
|
+
const opts = getGlobalOpts(this);
|
|
267
|
+
const inkbox = createClient(opts);
|
|
268
|
+
const mailDomain = resolveMailDomain(resolveBaseUrl(opts));
|
|
269
|
+
// Bail before printing anything rather than emit hosts we had to guess.
|
|
270
|
+
if (!mailDomain)
|
|
271
|
+
throw new Error(UNRESOLVED_MAIL_HOSTS_ERROR);
|
|
272
|
+
// Fetch so a typo'd / foreign address fails as a normal API error.
|
|
273
|
+
const mb = await inkbox.mailboxes.get(emailAddress);
|
|
274
|
+
const settings = clientSettings(mb.emailAddress, mailDomain);
|
|
275
|
+
output(settings, { json: !!opts.json });
|
|
276
|
+
if (opts.json)
|
|
277
|
+
return;
|
|
278
|
+
console.log("");
|
|
279
|
+
console.log("Password: use an identity-scoped API key — mint one with " +
|
|
280
|
+
"'inkbox api-keys create --label <name> --identity-id <uuid>'. " +
|
|
281
|
+
"Admin-scoped keys are rejected (one key maps to one mailbox).");
|
|
282
|
+
console.log(`The message From must be exactly ${mb.emailAddress}; aliases and ` +
|
|
283
|
+
"'send as' are rejected. On the Free plan, signed/encrypted mail " +
|
|
284
|
+
"(S/MIME, PGP) cannot be sent over SMTP.");
|
|
285
|
+
}));
|
|
177
286
|
registerMailboxRulesCommands(mailbox);
|
|
178
287
|
}
|
|
179
288
|
//# sourceMappingURL=mailbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/commands/mailbox.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,GAIX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/commands/mailbox.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DuplicateContactRuleError, InkboxAPIError, InkboxError, InkboxVaultKeyError, RedundantContactAccessGrantError, } from "@inkbox/sdk";
|
|
1
|
+
import { DuplicateContactRuleError, InkboxAPIError, InkboxError, InkboxVaultKeyError, RedundantContactAccessGrantError, StorageLimitExceededError, } from "@inkbox/sdk";
|
|
2
2
|
function renderDetail(detail) {
|
|
3
3
|
return typeof detail === "string" ? detail : JSON.stringify(detail);
|
|
4
4
|
}
|
|
@@ -14,6 +14,13 @@ export function withErrorHandler(fn) {
|
|
|
14
14
|
else if (err instanceof RedundantContactAccessGrantError) {
|
|
15
15
|
console.error(`Error: HTTP ${err.statusCode}: redundant grant — ${err.detailMessage}`);
|
|
16
16
|
}
|
|
17
|
+
else if (err instanceof StorageLimitExceededError) {
|
|
18
|
+
console.error(`Error: HTTP ${err.statusCode}: ${err.detailMessage || renderDetail(err.detail)}`);
|
|
19
|
+
console.error("Hint: Free space with 'inkbox email delete <message-id> -i <handle>' " +
|
|
20
|
+
"or 'inkbox email delete-thread <thread-id> -i <handle>' " +
|
|
21
|
+
"(reclaim is immediate), or upgrade the plan" +
|
|
22
|
+
(err.upgradeUrl ? `: ${err.upgradeUrl}` : "."));
|
|
23
|
+
}
|
|
17
24
|
else if (err instanceof InkboxAPIError) {
|
|
18
25
|
console.error(`Error: HTTP ${err.statusCode}: ${renderDetail(err.detail)}`);
|
|
19
26
|
if (err.statusCode === 401) {
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,gCAAgC,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,gCAAgC,EAChC,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,SAAS,YAAY,CAAC,MAAwC;IAC5D,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,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,yBAAyB,EAAE,CAAC;gBAC7C,OAAO,CAAC,KAAK,CACX,eAAe,GAAG,CAAC,UAAU,sCAAsC,GAAG,CAAC,cAAc,GAAG,CACzF,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,gCAAgC,EAAE,CAAC;gBAC3D,OAAO,CAAC,KAAK,CACX,eAAe,GAAG,CAAC,UAAU,uBAAuB,GAAG,CAAC,aAAa,EAAE,CACxE,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,yBAAyB,EAAE,CAAC;gBACpD,OAAO,CAAC,KAAK,CACX,eAAe,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAClF,CAAC;gBACF,OAAO,CAAC,KAAK,CACX,uEAAuE;oBACrE,0DAA0D;oBAC1D,6CAA6C;oBAC7C,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,UAAU,KAAK,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5E,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
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
+
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
|
|
3
4
|
import { CLI_VERSION } from "./client.js";
|
|
4
5
|
import { registerWhoamiCommand } from "./commands/whoami.js";
|
|
5
6
|
import { registerSignupCommands } from "./commands/signup.js";
|
|
@@ -19,6 +20,18 @@ import { registerWebhookCommands } from "./commands/webhook.js";
|
|
|
19
20
|
import { registerContactsCommands } from "./commands/contacts.js";
|
|
20
21
|
import { registerNotesCommands } from "./commands/notes.js";
|
|
21
22
|
import { registerDomainCommands } from "./commands/domain.js";
|
|
23
|
+
// Node's fetch ignores HTTP(S)_PROXY/NO_PROXY unless NODE_USE_ENV_PROXY is
|
|
24
|
+
// enabled — a flag that only exists on Node 22.21+/24+ — which strands the
|
|
25
|
+
// CLI in sandboxed/proxied environments. Install the env-proxy dispatcher
|
|
26
|
+
// ourselves whenever proxy vars are present, on every supported Node
|
|
27
|
+
// (NODE_USE_ENV_PROXY=0 opts out, matching Node's own semantics), and mark
|
|
28
|
+
// it active so the SDK skips its proxy hint on connection errors.
|
|
29
|
+
const proxyVars = ["HTTPS_PROXY", "https_proxy", "HTTP_PROXY", "http_proxy"];
|
|
30
|
+
if (process.env.NODE_USE_ENV_PROXY !== "0" &&
|
|
31
|
+
proxyVars.some((name) => process.env[name])) {
|
|
32
|
+
setGlobalDispatcher(new EnvHttpProxyAgent());
|
|
33
|
+
process.env.INKBOX_ENV_PROXY_ACTIVE = "1";
|
|
34
|
+
}
|
|
22
35
|
const program = new Command()
|
|
23
36
|
.name("inkbox")
|
|
24
37
|
.description("CLI for the Inkbox API — email, phone, identities, and vault for AI agents")
|
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,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,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,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,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,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;KACzF,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;KAC5E,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,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,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,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,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,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,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,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,qEAAqE;AACrE,2EAA2E;AAC3E,kEAAkE;AAClE,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAC7E,IACE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;IACtC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAC3C,CAAC;IACD,mBAAmB,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;AAC5C,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;KACzF,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;KAC5E,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,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkbox/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.25",
|
|
4
4
|
"description": "CLI for the Inkbox API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
"prepublishOnly": "npm run build"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@inkbox/sdk": "^0.4.
|
|
22
|
-
"commander": "^13.0.0"
|
|
21
|
+
"@inkbox/sdk": "^0.4.25",
|
|
22
|
+
"commander": "^13.0.0",
|
|
23
|
+
"undici": "^7.28.0"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@types/node": "^25.5.0",
|