run402 3.3.2 → 3.3.4

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
@@ -163,6 +163,8 @@ Jobs are platform-managed runners, not arbitrary Docker execution. Submit the ga
163
163
 
164
164
  ```bash
165
165
  run402 email create my-app
166
+ run402 email mailboxes
167
+ run402 email defaults --outbound my-app --auth-sender my-app
166
168
  run402 email send --to user@example.com --subject "Welcome" --html "<h1>Hi</h1>"
167
169
  run402 email send --to user@example.com --template notification --var project_name="My App"
168
170
  ```
package/lib/email.mjs CHANGED
@@ -74,6 +74,11 @@ Usage:
74
74
 
75
75
  Subcommands:
76
76
  create <slug> [--project <id>] Create a mailbox (<slug>@mail.run402.com)
77
+ mailboxes [--project <id>] List mailboxes with default-role metadata
78
+ and gateway next_actions
79
+ defaults [--outbound <slug|id>] [--auth-sender <slug|id>] [--project <id>]
80
+ Show or set mailbox defaults. With no
81
+ flags, prints current settings/candidates.
77
82
  info [--project <id>] Show mailbox info (ID, address, slug)
78
83
  status [--project <id>] Alias for 'info' (prefer 'info')
79
84
  send --to <email> [mode flags] Send an email (template or raw HTML)
@@ -114,10 +119,12 @@ Send modes:
114
119
 
115
120
  Choosing a mailbox:
116
121
  --mailbox <slug|id> Target a specific mailbox. Accepted by send, list, get,
117
- get-raw, reply, info, and webhooks. Required when the
118
- project has more than one mailbox; omit it only when the
119
- project has exactly one. (delete takes the target as its
120
- positional <slug|mailbox_id>.)
122
+ get-raw, reply, info, and webhooks. For send, omitting
123
+ --mailbox uses default_outbound_mailbox_id when set; if
124
+ the gateway reports mailbox_settings and no default is
125
+ configured, set one with 'run402 email defaults'.
126
+ (delete takes the target as its positional
127
+ <slug|mailbox_id>.)
121
128
 
122
129
  Templates:
123
130
  project_invite — requires --var project_name=... --var invite_url=...
@@ -126,6 +133,8 @@ Templates:
126
133
 
127
134
  Examples:
128
135
  run402 email create my-app
136
+ run402 email mailboxes
137
+ run402 email defaults --outbound my-app --auth-sender my-app
129
138
  run402 email send --template project_invite --to user@example.com \\
130
139
  --var project_name="My App" --var invite_url="https://example.com/invite/abc"
131
140
  run402 email send --to user@example.com --subject "Welcome!" \\
@@ -141,7 +150,8 @@ Examples:
141
150
  run402 email webhooks register --url https://example.com/hook --events delivery,bounced
142
151
 
143
152
  Notes:
144
- - Up to 5 mailboxes per project — pass --mailbox <slug|id> to pick one
153
+ - Up to 5 mailboxes per project — configure explicit defaults before
154
+ relying on omitted --mailbox sends
145
155
  - Single recipient per send (no CC/BCC)
146
156
  - Slug: 3-63 chars, lowercase alphanumeric + hyphens, no consecutive hyphens
147
157
  - --project defaults to the active project
@@ -168,7 +178,7 @@ Options:
168
178
  max 5, ≤ 7 MB total). Content-type is inferred from the
169
179
  extension when the :content-type suffix is omitted.
170
180
  --from-name "..." Display name for the From header
171
- --mailbox <slug|id> Target mailbox (required if the project has more than one)
181
+ --mailbox <slug|id> Target mailbox. Omit to use default_outbound_mailbox_id.
172
182
  --project <id> Project ID (defaults to the active project)
173
183
  `,
174
184
  list: `run402 email list — List messages in the mailbox
@@ -235,6 +245,28 @@ Notes:
235
245
  Examples:
236
246
  run402 email create my-app
237
247
  run402 email create my-app --project prj_abc123
248
+ `,
249
+ mailboxes: `run402 email mailboxes — List project mailboxes
250
+
251
+ Usage:
252
+ run402 email mailboxes [--project <id>]
253
+
254
+ Returns JSON: { mailboxes, mailbox_settings?, next_actions? }. Mailbox rows
255
+ include default-role/readiness metadata when the gateway provides it.
256
+ `,
257
+ defaults: `run402 email defaults — Show or set mailbox defaults
258
+
259
+ Usage:
260
+ run402 email defaults [--project <id>]
261
+ run402 email defaults --outbound <slug|mbx_id> [--auth-sender <slug|mbx_id>] [--project <id>]
262
+ run402 email defaults --auth-sender <slug|mbx_id> [--project <id>]
263
+
264
+ Options:
265
+ --outbound <slug|mbx_id> Set default_outbound_mailbox_id
266
+ --auth-sender <slug|mbx_id> Set auth_sender_mailbox_id
267
+ --clear-outbound Clear default_outbound_mailbox_id
268
+ --clear-auth-sender Clear auth_sender_mailbox_id
269
+ --project <id> Project ID (defaults to the active project)
238
270
  `,
239
271
  get: `run402 email get — Get a message with replies
240
272
 
@@ -264,6 +296,39 @@ function strictFlagValue(args, flag) {
264
296
  return value;
265
297
  }
266
298
 
299
+ function summarizeMailboxForDefaults(m) {
300
+ return {
301
+ mailbox_id: m.mailbox_id,
302
+ slug: m.slug,
303
+ address: m.address,
304
+ status: m.status,
305
+ is_default_outbound: m.is_default_outbound ?? false,
306
+ is_auth_sender: m.is_auth_sender ?? false,
307
+ can_send: m.can_send,
308
+ send_blocked_reason: m.send_blocked_reason ?? null,
309
+ domain_kind: m.domain_kind,
310
+ };
311
+ }
312
+
313
+ function mailboxIdFromSelector(envelope, selector, flag) {
314
+ if (selector === undefined || selector === null) return undefined;
315
+ if (/^mbx_/.test(selector)) return selector;
316
+ const hit = (envelope.mailboxes ?? []).find((m) => m.mailbox_id === selector || m.slug === selector);
317
+ if (!hit) {
318
+ fail({
319
+ code: "MAILBOX_NOT_FOUND",
320
+ message: `No mailbox matching ${JSON.stringify(selector)} for ${flag}.`,
321
+ details: {
322
+ selector,
323
+ flag,
324
+ candidates: (envelope.mailboxes ?? []).map(summarizeMailboxForDefaults),
325
+ },
326
+ next_actions: [{ type: "list_mailboxes", command: "run402 email mailboxes" }],
327
+ });
328
+ }
329
+ return hit.mailbox_id;
330
+ }
331
+
267
332
  function validateArgs(args, knownFlags, flagsWithValues = knownFlags) {
268
333
  assertKnownFlags(args, knownFlags, flagsWithValues);
269
334
  const valueFlags = new Set(flagsWithValues);
@@ -321,7 +386,64 @@ async function create(args) {
321
386
 
322
387
  try {
323
388
  const data = await getSdk().email.createMailbox(projectId, slug);
324
- console.log(JSON.stringify({ mailbox_id: data.mailbox_id, address: data.address, slug: data.slug, created: true }));
389
+ console.log(JSON.stringify({
390
+ mailbox_id: data.mailbox_id,
391
+ address: data.address,
392
+ slug: data.slug,
393
+ status: data.status,
394
+ mailbox_settings: data.mailbox_settings,
395
+ next_actions: data.next_actions,
396
+ created: true,
397
+ }));
398
+ } catch (err) {
399
+ reportSdkError(err);
400
+ }
401
+ }
402
+
403
+ async function mailboxes(args) {
404
+ validateArgs(args, ["--project"]);
405
+ const projectId = resolveProjectId(strictFlagValue(args, "--project"));
406
+ try {
407
+ const data = await getSdk().email.listMailboxes(projectId);
408
+ console.log(JSON.stringify(data, null, 2));
409
+ } catch (err) {
410
+ reportSdkError(err);
411
+ }
412
+ }
413
+
414
+ async function defaults(args) {
415
+ const knownFlags = ["--project", "--outbound", "--auth-sender", "--clear-outbound", "--clear-auth-sender"];
416
+ const valueFlags = ["--project", "--outbound", "--auth-sender"];
417
+ validateArgs(args, knownFlags, valueFlags);
418
+ const projectId = resolveProjectId(strictFlagValue(args, "--project"));
419
+ const outbound = strictFlagValue(args, "--outbound");
420
+ const authSender = strictFlagValue(args, "--auth-sender");
421
+ const clearOutbound = args.includes("--clear-outbound");
422
+ const clearAuthSender = args.includes("--clear-auth-sender");
423
+
424
+ if (outbound && clearOutbound) {
425
+ fail({ code: "BAD_USAGE", message: "Use either --outbound or --clear-outbound, not both." });
426
+ }
427
+ if (authSender && clearAuthSender) {
428
+ fail({ code: "BAD_USAGE", message: "Use either --auth-sender or --clear-auth-sender, not both." });
429
+ }
430
+
431
+ const shouldPatch = outbound || authSender || clearOutbound || clearAuthSender;
432
+ try {
433
+ const current = await getSdk().email.listMailboxes(projectId);
434
+ if (!shouldPatch) {
435
+ console.log(JSON.stringify(current, null, 2));
436
+ return;
437
+ }
438
+
439
+ const patch = {};
440
+ if (outbound) patch.default_outbound_mailbox_id = mailboxIdFromSelector(current, outbound, "--outbound");
441
+ if (clearOutbound) patch.default_outbound_mailbox_id = null;
442
+ if (authSender) patch.auth_sender_mailbox_id = mailboxIdFromSelector(current, authSender, "--auth-sender");
443
+ if (clearAuthSender) patch.auth_sender_mailbox_id = null;
444
+
445
+ const updated = await getSdk().email.setMailboxDefaults(projectId, patch);
446
+ console.log(JSON.stringify(updated, null, 2));
325
447
  } catch (err) {
326
448
  reportSdkError(err);
327
449
  }
@@ -357,7 +479,17 @@ async function send(args) {
357
479
  mailbox: mailbox ?? undefined,
358
480
  attachments: attachments.length ? attachments : undefined,
359
481
  });
360
- console.log(JSON.stringify({ message_id: data.message_id, to: data.to, template: data.template, subject: data.subject, sent: true }));
482
+ console.log(JSON.stringify({
483
+ message_id: data.message_id,
484
+ to: data.to,
485
+ template: data.template,
486
+ subject: data.subject,
487
+ status: data.status,
488
+ sent_at: data.sent_at,
489
+ mailbox_id: data.mailbox_id,
490
+ from_address: data.from_address,
491
+ sent: true,
492
+ }));
361
493
  } catch (err) {
362
494
  reportSdkError(err);
363
495
  }
@@ -536,6 +668,8 @@ export async function run(sub, args) {
536
668
  if (Array.isArray(args) && (args.includes("--help") || args.includes("-h")) && sub !== "webhooks") { console.log(SUB_HELP[sub] || HELP); process.exit(0); }
537
669
  switch (sub) {
538
670
  case "create": await create(args); break;
671
+ case "mailboxes": await mailboxes(args); break;
672
+ case "defaults": await defaults(args); break;
539
673
  case "info":
540
674
  case "status": await status(args); break;
541
675
  case "send": await send(args); break;
package/lib/transfer.mjs CHANGED
@@ -10,10 +10,10 @@ import {
10
10
  positionalArgs,
11
11
  } from "./argparse.mjs";
12
12
 
13
- const HELP = `run402 transfer — Project transfer, one noun for both recipient kinds (v1.93+)
13
+ const HELP = `run402 transfer — Project transfer, one noun for wallet, email, and owned-org recipients
14
14
 
15
15
  Usage:
16
- run402 transfer init --to <wallet|email> [--project <id>] [--billing-policy migrate] [--message <text>] [--kysigned <record_id>] [--retain-collaborator developer]
16
+ run402 transfer init (--to <wallet|email> | --to-org <org_id>) [--project <id>] [--billing-policy migrate] [--message <text>] [--kysigned <record_id>] [--retain-collaborator developer]
17
17
  run402 transfer preview <transfer_id>
18
18
  run402 transfer list [--incoming | --outgoing] [--limit N] [--after <cursor>]
19
19
  run402 transfer accept <transfer_id>
@@ -22,17 +22,19 @@ Usage:
22
22
 
23
23
  Subcommands:
24
24
  init Initiate ownership change. --to <wallet> = two-party wallet transfer
25
- (completed by 'accept'); --to <email> = email->org transfer (completed by 'claim').
26
- preview Fetch the safe review document (wallet or email kind-agnostic)
27
- list List pending transfers (incoming default, or --outgoing)both kinds, unioned
25
+ (completed by 'accept'); --to <email> = email->org transfer (completed by 'claim');
26
+ --to-org <org_id> = same-actor move to an owned org (completes immediately).
27
+ preview Fetch the safe review document (pending transferkind-agnostic)
28
+ list List pending transfers (incoming default, or --outgoing) — pending rows unioned
28
29
  accept Accept an incoming WALLET transfer (your wallet must be the to_wallet)
29
30
  claim Claim an incoming EMAIL transfer into an org (--into <id>; omit = new org)
30
- cancel Cancel a pending transfer of either kind
31
+ cancel Cancel a pending transfer of any kind
31
32
 
32
33
  Notes:
33
34
  - Owner-side mutations on a project with a pending transfer return 409
34
35
  PROJECT_HAS_PENDING_TRANSFER. Cancel the transfer or wait 72h for expiry.
35
36
  - Phase 1A supports only billing_policy=migrate (default).
37
+ - --to-org is same-actor only in the first gateway release: you must own both orgs.
36
38
  - Secret VALUES are inherited by the recipient on completion; rotation is advised.
37
39
  - GitHub repo ownership is NOT transferred — handle that out of band.
38
40
  `;
@@ -41,12 +43,14 @@ const SUB_HELP = {
41
43
  init: `run402 transfer init — Initiate a project transfer
42
44
 
43
45
  Usage:
44
- run402 transfer init --to <wallet|email> [--project <id>] [--billing-policy migrate] [--message <text>] [--kysigned <record_id>] [--retain-collaborator developer]
46
+ run402 transfer init (--to <wallet|email> | --to-org <org_id>) [--project <id>] [--billing-policy migrate] [--message <text>] [--kysigned <record_id>] [--retain-collaborator developer]
45
47
 
46
48
  Options:
47
49
  --project <id> Project id (defaults to the active project)
48
50
  --to <wallet|email> Recipient (required). A wallet uses the two-party rail (completed by
49
51
  'accept'); an email uses the email->org rail (completed by 'claim').
52
+ --to-org <org_id> Destination org you already own. Same-actor only in the first gateway
53
+ release; completes immediately and returns project keys.
50
54
  --billing-policy <p> Billing policy (wallet rail). Phase 1A only allows 'migrate' (default).
51
55
  --message <text> Optional note shown to the recipient in preview + emails.
52
56
  --kysigned <record_id> Optional KySigned record id (wallet rail; Phase 1A: informational only).
@@ -57,6 +61,7 @@ Options:
57
61
  Notes:
58
62
  - Caller's wallet/session must currently own or admin the project (gateway re-checks fresh DB).
59
63
  - Owner-side mutations on the project are frozen until accept/claim/cancel/expiry.
64
+ Owned-org moves complete immediately and do not create a pending window.
60
65
  - The project lease stays with your organization; it is NOT refunded.
61
66
  `,
62
67
  preview: `run402 transfer preview — Fetch the preview document
@@ -66,7 +71,7 @@ Usage:
66
71
 
67
72
  Returns project name, custom domains, subdomains, function names, secret NAMES
68
73
  (values are never returned), CI bindings that will be revoked on completion, and
69
- billing implications. Works for both wallet- and email-addressed transfers; any
74
+ billing implications. Works for pending wallet/email/future-org transfers; any
70
75
  party to the transfer may preview.
71
76
  `,
72
77
  list: `run402 transfer list — List pending transfers
@@ -74,8 +79,7 @@ party to the transfer may preview.
74
79
  Usage:
75
80
  run402 transfer list [--incoming | --outgoing] [--limit N] [--after <cursor>]
76
81
 
77
- Lists both wallet- and email-addressed transfers, unioned; each row carries
78
- recipient_kind.
82
+ Lists pending transfers, unioned; each row carries recipient_kind.
79
83
 
80
84
  Options:
81
85
  --incoming List transfers OFFERED TO you (default).
@@ -99,7 +103,7 @@ via 'claim', not 'accept'.)
99
103
  Usage:
100
104
  run402 transfer cancel <transfer_id> [--reason <text>]
101
105
 
102
- Cancels a pending transfer of either kind. You must be authorized for the row's
106
+ Cancels a pending transfer of any kind. You must be authorized for the row's
103
107
  kind (a wallet signing party, or an owner/admin of the offering org / the
104
108
  addressed-email principal). Already-processed transfers return 409
105
109
  TRANSFER_ALREADY_PROCESSED.
@@ -124,15 +128,19 @@ const RETAIN_ROLES = new Set(["developer"]);
124
128
 
125
129
  async function init(args) {
126
130
  const parsedArgs = normalizeArgv(args);
127
- const valueFlags = ["--project", "--to", "--billing-policy", "--message", "--kysigned", "--retain-collaborator"];
131
+ const valueFlags = ["--project", "--to", "--to-org", "--billing-policy", "--message", "--kysigned", "--retain-collaborator"];
128
132
  assertKnownFlags(parsedArgs, [...valueFlags, "--help", "-h"], valueFlags);
129
133
  const extra = positionalArgs(parsedArgs, valueFlags);
130
134
  if (extra.length > 0) {
131
135
  fail({ code: "BAD_USAGE", message: `Unexpected argument for transfer init: ${extra[0]}` });
132
136
  }
133
137
  const to = flagValue(parsedArgs, "--to");
134
- if (!to) {
135
- fail({ code: "BAD_USAGE", message: "Missing --to <wallet|email>" });
138
+ const toOrg = flagValue(parsedArgs, "--to-org");
139
+ if (!to && !toOrg) {
140
+ fail({ code: "BAD_USAGE", message: "Missing recipient. Pass --to <wallet|email> or --to-org <org_id>." });
141
+ }
142
+ if (to && toOrg) {
143
+ fail({ code: "BAD_USAGE", message: "Pass exactly one recipient flag: --to <wallet|email> or --to-org <org_id>." });
136
144
  }
137
145
  const projectFlag = flagValue(parsedArgs, "--project");
138
146
  const projectId = await resolveProjectId(projectFlag);
@@ -151,18 +159,17 @@ async function init(args) {
151
159
  const kysigned = flagValue(parsedArgs, "--kysigned");
152
160
  const retainCollaborator = flagValue(parsedArgs, "--retain-collaborator");
153
161
 
154
- // One noun, two rails: an email recipient routes to the email->org completion
155
- // ('claim'); a wallet recipient routes to the two-party wallet completion
156
- // ('accept'). Both initiate on the SAME endpoint, discriminated by the body.
157
- const isEmail = to.includes("@");
162
+ // One noun, three recipient shapes. --to keeps wallet/email auto-detection;
163
+ // --to-org is explicit because org ids are not human-recipient addresses.
164
+ const recipientKind = toOrg ? "org" : (to.includes("@") ? "email" : "wallet");
158
165
 
159
166
  // --retain-collaborator (v1.91) is an email-only opt-in: the sender keeps a
160
167
  // developer membership in the recipient's org (recipient must accept at claim).
161
168
  if (retainCollaborator !== null) {
162
- if (!isEmail) {
169
+ if (recipientKind !== "email") {
163
170
  fail({
164
171
  code: "BAD_FLAG",
165
- message: "--retain-collaborator applies only to email recipients; a wallet --to uses the two-party transfer rail.",
172
+ message: "--retain-collaborator applies only to email recipients.",
166
173
  details: { flag: "--retain-collaborator" },
167
174
  });
168
175
  }
@@ -174,25 +181,48 @@ async function init(args) {
174
181
  });
175
182
  }
176
183
  }
184
+ if (kysigned !== null && recipientKind !== "wallet") {
185
+ fail({
186
+ code: "BAD_FLAG",
187
+ message: "--kysigned applies only to wallet recipients; email and owned-org transfers do not use the KySigned rail.",
188
+ details: { flag: "--kysigned" },
189
+ });
190
+ }
191
+ if (billingPolicy !== null && recipientKind !== "wallet") {
192
+ fail({
193
+ code: "BAD_FLAG",
194
+ message: "--billing-policy applies only to wallet recipients; email and owned-org transfers always migrate ownership.",
195
+ details: { flag: "--billing-policy" },
196
+ });
197
+ }
177
198
 
178
- // Both kinds initiate on the unified transfer endpoint — sign that path.
199
+ // All recipient shapes initiate on the unified transfer endpoint — sign that path.
179
200
  allowanceAuthHeaders(`/projects/v1/${projectId}/transfers`);
180
201
 
181
202
  try {
182
- const res = isEmail
183
- ? await getSdk().admin.transfers.initiate({
184
- projectId,
185
- toEmail: to,
186
- message: message ?? undefined,
187
- retainCollaborator: retainCollaborator ? { role: retainCollaborator } : undefined,
188
- })
189
- : await getSdk().admin.transfers.initiate({
190
- projectId,
191
- toWallet: to,
192
- billingPolicy: billingPolicy ?? undefined,
193
- message: message ?? undefined,
194
- kysignedRecordId: kysigned ?? undefined,
195
- });
203
+ let res;
204
+ if (recipientKind === "org") {
205
+ res = await getSdk().admin.transfers.initiate({
206
+ projectId,
207
+ toOrgId: toOrg,
208
+ message: message ?? undefined,
209
+ });
210
+ } else if (recipientKind === "email") {
211
+ res = await getSdk().admin.transfers.initiate({
212
+ projectId,
213
+ toEmail: to,
214
+ message: message ?? undefined,
215
+ retainCollaborator: retainCollaborator ? { role: retainCollaborator } : undefined,
216
+ });
217
+ } else {
218
+ res = await getSdk().admin.transfers.initiate({
219
+ projectId,
220
+ toWallet: to,
221
+ billingPolicy: billingPolicy ?? undefined,
222
+ message: message ?? undefined,
223
+ kysignedRecordId: kysigned ?? undefined,
224
+ });
225
+ }
196
226
  console.log(JSON.stringify(res, null, 2));
197
227
  } catch (err) {
198
228
  reportSdkError(err);
@@ -207,7 +237,7 @@ async function preview(args) {
207
237
  fail({ code: "BAD_USAGE", message: "Usage: run402 transfer preview <transfer_id>" });
208
238
  }
209
239
  const transferId = positionals[0];
210
- // Preview is kind-agnostic — one route serves wallet and email transfers.
240
+ // Preview is kind-agnostic — one route serves wallet, email, and future org transfers.
211
241
  allowanceAuthHeaders(`/agent/v1/transfers/${transferId}`);
212
242
 
213
243
  try {
@@ -241,8 +271,8 @@ async function list(args) {
241
271
  ? undefined
242
272
  : parseIntegerFlag("--limit", limitFlag, { min: 1, max: 1000 });
243
273
 
244
- // Incoming/outgoing are kind-agnostic — each returns the union of wallet- and
245
- // email-addressed rows, tagged with recipient_kind.
274
+ // Incoming/outgoing are kind-agnostic — each returns the union of pending
275
+ // wallet/email/future-org rows, tagged with recipient_kind.
246
276
  allowanceAuthHeaders(`/agent/v1/transfers/${direction}`);
247
277
 
248
278
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "description": "CLI for Run402 — provision Postgres databases, deploy static sites, generate images, and manage wallets via x402 and MPP micropayments.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -218,9 +218,9 @@ export interface OperatorStatusResult {
218
218
  export declare class Admin {
219
219
  private readonly client;
220
220
  /**
221
- * Project transfer sub-namespace (v1.59+) two-party SIWX-signed
222
- * project handoff. Access via `r.admin.transfers.{initiate, preview,
223
- * accept, cancel, listIncoming, listOutgoing}`.
221
+ * Project transfer sub-namespace — unified wallet, email, and owned-org
222
+ * project transfer surface. Access via `r.admin.transfers.{initiate,
223
+ * preview, accept, claim, cancel, listIncoming, listOutgoing}`.
224
224
  */
225
225
  readonly transfers: Transfers;
226
226
  constructor(client: Client);
@@ -11,9 +11,9 @@ const FINANCE_WINDOWS = new Set(["24h", "7d", "30d", "90d"]);
11
11
  export class Admin {
12
12
  client;
13
13
  /**
14
- * Project transfer sub-namespace (v1.59+) two-party SIWX-signed
15
- * project handoff. Access via `r.admin.transfers.{initiate, preview,
16
- * accept, cancel, listIncoming, listOutgoing}`.
14
+ * Project transfer sub-namespace — unified wallet, email, and owned-org
15
+ * project transfer surface. Access via `r.admin.transfers.{initiate,
16
+ * preview, accept, claim, cancel, listIncoming, listOutgoing}`.
17
17
  */
18
18
  transfers;
19
19
  constructor(client) {
@@ -1,7 +1,6 @@
1
1
  /**
2
- * `email` namespace — project mailboxes (send / list / get / raw / delete)
3
- * and mailbox webhooks. Most operations auto-resolve the project's mailbox
4
- * via the provider cache, falling back to a discovery GET when absent.
2
+ * `email` namespace — project mailboxes (defaults, send / list / get / raw /
3
+ * delete) and mailbox webhooks.
5
4
  */
6
5
  import type { Client } from "../kernel.js";
7
6
  declare const MESSAGE_DIRECTIONS: readonly ["inbound", "outbound"];
@@ -20,12 +19,46 @@ export interface MailboxRecord {
20
19
  unique_recipients: number;
21
20
  created_at: string;
22
21
  updated_at: string;
22
+ /** True when this mailbox is configured as the project's outbound default. */
23
+ is_default_outbound?: boolean;
24
+ /** True when this mailbox is configured as the auth/session email sender. */
25
+ is_auth_sender?: boolean;
26
+ /** Whether the mailbox can currently send outbound mail. */
27
+ can_send?: boolean;
28
+ /** Present when `can_send` is false, e.g. domain verification or suspension. */
29
+ send_blocked_reason?: string | null;
30
+ /** Shared run402 domain vs a project-owned sender domain. Future strings are valid. */
31
+ domain_kind?: string;
23
32
  }
24
- export type CreateMailboxResult = MailboxRecord;
33
+ export interface MailboxSettings {
34
+ default_outbound_mailbox_id: string | null;
35
+ auth_sender_mailbox_id: string | null;
36
+ }
37
+ export interface MailboxNextAction {
38
+ type?: string;
39
+ action?: string;
40
+ method?: string;
41
+ path?: string;
42
+ auth?: string;
43
+ why?: string;
44
+ command?: string;
45
+ [key: string]: unknown;
46
+ }
47
+ export interface MailboxSelectionEnvelope {
48
+ mailbox_settings?: MailboxSettings;
49
+ next_actions?: MailboxNextAction[];
50
+ }
51
+ export type CreateMailboxResult = MailboxRecord & MailboxSelectionEnvelope;
25
52
  export type MailboxInfo = MailboxRecord;
26
- export interface MailboxListResponse {
53
+ export interface MailboxListResult extends MailboxSelectionEnvelope {
27
54
  mailboxes: MailboxRecord[];
28
55
  }
56
+ export type MailboxListResponse = MailboxListResult;
57
+ export interface SetMailboxDefaultsOptions {
58
+ default_outbound_mailbox_id?: string | null;
59
+ auth_sender_mailbox_id?: string | null;
60
+ }
61
+ export type SetMailboxDefaultsResult = MailboxListResult;
29
62
  export interface DeleteMailboxResult {
30
63
  mailbox_id: string;
31
64
  address: string;
@@ -61,9 +94,9 @@ export interface SendEmailOptions {
61
94
  attachments?: EmailAttachment[];
62
95
  in_reply_to?: string;
63
96
  /**
64
- * Target mailbox (slug or `mbx_…` id) on a project that has more than one.
65
- * Omit only when the project has exactly one mailbox — otherwise the call
66
- * throws an ambiguity error naming the available slugs.
97
+ * Target mailbox (slug or `mbx_…` id). Omit to use the configured
98
+ * `default_outbound_mailbox_id` when the gateway returns mailbox settings.
99
+ * Missing or invalid defaults surface typed repair errors.
67
100
  */
68
101
  mailbox?: MailboxSelector;
69
102
  }
@@ -78,6 +111,10 @@ export interface SendEmailResult {
78
111
  template: string | null;
79
112
  subject: string | null;
80
113
  sent_at: string;
114
+ /** The actual mailbox used for the send, echoed by the gateway. */
115
+ mailbox_id?: string;
116
+ /** The actual From address used for the send, echoed by the gateway. */
117
+ from_address?: string;
81
118
  }
82
119
  export interface EmailSummary {
83
120
  id: string;
@@ -212,16 +249,20 @@ export declare class Email {
212
249
  * - `selector` is a mailbox id (`mbx_…`) → used directly; the gateway 403s
213
250
  * if the id belongs to a different project, so no list call is needed.
214
251
  * - `selector` is a slug → the project's mailboxes are listed and matched.
215
- * - `selector` omitted the project's mailboxes are listed:
216
- * 0 "create one first"; exactly 1 → that one (cache refreshed);
217
- * 2+ an ambiguity error naming the slugs (never a silent pick).
252
+ * - `selector` omitted for sends use the configured
253
+ * `default_outbound_mailbox_id`. When the gateway returns
254
+ * `mailbox_settings` and no default is set, throw
255
+ * `DEFAULT_MAILBOX_REQUIRED`; do not silently pick the first/single row.
256
+ * - `selector` omitted for reads/webhooks → require a unique mailbox, as
257
+ * before. This keeps non-send flows from guessing that the outbound
258
+ * default is also the intended read/webhook target.
218
259
  *
219
260
  * The cached `mailbox_id` is intentionally NOT used to resolve when a
220
261
  * selector is omitted — trusting it would silently target an arbitrary
221
- * mailbox on a multi-mailbox project. It remains a best-effort convenience
222
- * cache, refreshed only on the single-mailbox path.
262
+ * mailbox on a multi-mailbox project.
223
263
  */
224
264
  private resolveMailbox;
265
+ private pickDefaultOutboundMailbox;
225
266
  /**
226
267
  * Choose a mailbox from a project's list given an optional selector.
227
268
  * `selector` matches by exact mailbox id or slug. With no selector: 0 →
@@ -231,7 +272,14 @@ export declare class Email {
231
272
  private pickMailbox;
232
273
  /** Best-effort refresh of the single-mailbox convenience cache. */
233
274
  private cacheMailbox;
234
- private listMailboxes;
275
+ private listMailboxEnvelope;
276
+ /** List project mailboxes plus default-role settings and gateway repair hints. */
277
+ listMailboxes(projectId: string): Promise<MailboxListResult>;
278
+ /**
279
+ * Configure the project's mailbox defaults. Values are mailbox ids
280
+ * (`mbx_…`) or `null` to clear when the gateway allows clearing.
281
+ */
282
+ setMailboxDefaults(projectId: string, opts: SetMailboxDefaultsOptions): Promise<SetMailboxDefaultsResult>;
235
283
  /**
236
284
  * Create a mailbox for a project.
237
285
  *
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/namespaces/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAY3C,QAAA,MAAM,kBAAkB,kCAAmC,CAAC;AAC5D,QAAA,MAAM,iBAAiB,oEAAqE,CAAC;AAE7F,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AACnE,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,YAAY,GAAG,cAAc,CAAC;AAE7E,6FAA6F;AAC7F,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,4FAA4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iFAAiF;IACjF,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iFAAiF;IACjF,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,sBAAsB,CAAC;CAClC;AAED,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAC/B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,eAAe,KACvB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAGlD;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAmB3G,kFAAkF;IAC5E,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAa3B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAWzF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQxF,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAY3B,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,qBAAqB,CAAC;IAwB3B,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC;CASjB;AAED,qBAAa,KAAK;IAOJ,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACxF,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACtF,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBAEnE,MAAM,EAAE,MAAM;IAQ3C;;;;;;;;;;;;;;OAcG;YACW,cAAc;IAiB5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAqCnB,mEAAmE;YACrD,YAAY;YAaZ,aAAa;IAQ3B;;;;;;;;OAQG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+BlF,+DAA+D;IACzD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA6D/E,8CAA8C;IACxC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqBpF,yDAAyD;IACnD,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,WAAW,CAAC;IASvB;;;OAGG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,cAAc,CAAC;IAwB1B;;;;OAIG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IASrF;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAwCjG"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/namespaces/email.ts"],"names":[],"mappings":"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"}