run402-mcp 3.8.3 → 4.0.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.
Files changed (51) hide show
  1. package/README.md +3 -3
  2. package/dist/index.js +13 -23
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/add-custom-domain.d.ts.map +1 -1
  5. package/dist/tools/add-custom-domain.js +4 -33
  6. package/dist/tools/add-custom-domain.js.map +1 -1
  7. package/dist/tools/check-domain-status.d.ts.map +1 -1
  8. package/dist/tools/check-domain-status.js +4 -33
  9. package/dist/tools/check-domain-status.js.map +1 -1
  10. package/dist/tools/deploy.d.ts +62 -10
  11. package/dist/tools/deploy.d.ts.map +1 -1
  12. package/dist/tools/deploy.js +12 -2
  13. package/dist/tools/deploy.js.map +1 -1
  14. package/dist/tools/domains.d.ts +84 -0
  15. package/dist/tools/domains.d.ts.map +1 -0
  16. package/dist/tools/domains.js +129 -0
  17. package/dist/tools/domains.js.map +1 -0
  18. package/dist/tools/list-custom-domains.d.ts.map +1 -1
  19. package/dist/tools/list-custom-domains.js +4 -29
  20. package/dist/tools/list-custom-domains.js.map +1 -1
  21. package/dist/tools/remove-custom-domain.d.ts.map +1 -1
  22. package/dist/tools/remove-custom-domain.js +4 -16
  23. package/dist/tools/remove-custom-domain.js.map +1 -1
  24. package/package.json +1 -1
  25. package/schemas/release-spec.v1.json +14 -3
  26. package/schemas/run402-app.v1.schema.json +56 -1
  27. package/sdk/dist/config.d.ts +22 -5
  28. package/sdk/dist/config.d.ts.map +1 -1
  29. package/sdk/dist/config.js +6 -1
  30. package/sdk/dist/config.js.map +1 -1
  31. package/sdk/dist/namespaces/deploy.js +57 -8
  32. package/sdk/dist/namespaces/deploy.js.map +1 -1
  33. package/sdk/dist/namespaces/deploy.types.d.ts +19 -5
  34. package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
  35. package/sdk/dist/namespaces/deploy.types.js.map +1 -1
  36. package/sdk/dist/namespaces/domains.d.ts +148 -55
  37. package/sdk/dist/namespaces/domains.d.ts.map +1 -1
  38. package/sdk/dist/namespaces/domains.js +114 -69
  39. package/sdk/dist/namespaces/domains.js.map +1 -1
  40. package/sdk/dist/namespaces/sender-domain.d.ts +12 -10
  41. package/sdk/dist/namespaces/sender-domain.d.ts.map +1 -1
  42. package/sdk/dist/namespaces/sender-domain.js +25 -43
  43. package/sdk/dist/namespaces/sender-domain.js.map +1 -1
  44. package/sdk/dist/node/deploy-manifest.d.ts +14 -2
  45. package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
  46. package/sdk/dist/node/deploy-manifest.js +45 -8
  47. package/sdk/dist/node/deploy-manifest.js.map +1 -1
  48. package/sdk/dist/scoped.d.ts +22 -7
  49. package/sdk/dist/scoped.d.ts.map +1 -1
  50. package/sdk/dist/scoped.js +33 -4
  51. package/sdk/dist/scoped.js.map +1 -1
@@ -1,89 +1,134 @@
1
1
  /**
2
- * `domains` namespace — custom domains (BYODomain) mapped to run402
3
- * subdomains. Manages the registration/verification lifecycle and DNS
4
- * instructions surfaced back to the user's DNS provider.
2
+ * `domains` namespace — ProjectDomain lifecycle.
3
+ *
4
+ * Domain operations are project-scoped control-plane actions. They use the
5
+ * SDK credential provider's server auth (SIWX, control-plane session, or
6
+ * delegate) and deliberately do not require local project-key cache entries.
5
7
  */
6
- import { deprecatePositional } from "../deprecate.js";
7
- import { requireProjectCredentials } from "../project-credentials.js";
8
- function withProjectId(path, projectId) {
9
- const sep = path.includes("?") ? "&" : "?";
10
- return `${path}${sep}project_id=${encodeURIComponent(projectId)}`;
8
+ import { LocalError } from "../errors.js";
9
+ function domainPath(projectId, domain) {
10
+ return `/projects/v1/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}`;
11
+ }
12
+ function authMeta(method, projectId) {
13
+ return { method, target: { project_id: projectId } };
14
+ }
15
+ function removed(command, replacement) {
16
+ throw new LocalError(`${command} has been removed. Use ${replacement}.`, command, {
17
+ code: "COMMAND_REMOVED",
18
+ details: { command, replacement },
19
+ next_actions: [{ type: "use_replacement_command", command: replacement }],
20
+ });
21
+ }
22
+ function waitSatisfied(domain, until) {
23
+ if (until === "active")
24
+ return domain.status === "active";
25
+ if (until === "receive-active") {
26
+ const email = domain.effective.email;
27
+ return email?.receive?.active === true;
28
+ }
29
+ return domain.checks.every((check) => !check.blocking || check.status === "passed");
30
+ }
31
+ function sleep(ms) {
32
+ return new Promise((resolve) => setTimeout(resolve, ms));
11
33
  }
12
34
  export class Domains {
13
35
  client;
14
36
  constructor(client) {
15
37
  this.client = client;
16
38
  }
17
- async add(projectId, domainOrOpts, subdomainName) {
18
- let domain;
19
- let subdomain;
20
- let authMode;
21
- if (typeof domainOrOpts === "object" && domainOrOpts !== null) {
22
- domain = domainOrOpts.domain;
23
- subdomain = domainOrOpts.subdomainName;
24
- authMode = domainOrOpts.authMode;
25
- }
26
- else {
27
- deprecatePositional("domains.add", "use add(projectId, { domain, subdomainName })");
28
- domain = domainOrOpts;
29
- subdomain = subdomainName;
30
- }
31
- if (authMode === "service_key") {
32
- const project = await requireProjectCredentials(this.client, projectId, "registering custom domain");
33
- return this.client.request("/domains/v1", {
34
- method: "POST",
35
- headers: { Authorization: `Bearer ${project.service_key}` },
36
- body: { domain, subdomain_name: subdomain },
37
- context: "registering custom domain",
38
- });
39
- }
40
- return this.client.request("/domains/v1", {
39
+ async ensure(projectId, domain, opts) {
40
+ return this.client.request(domainPath(projectId, domain), {
41
+ method: "PUT",
42
+ body: { desired: opts.desired },
43
+ authMeta: authMeta("domains.ensure", projectId),
44
+ context: "ensuring project domain",
45
+ });
46
+ }
47
+ async get(projectId, domain) {
48
+ return this.client.request(domainPath(projectId, domain), {
49
+ authMeta: authMeta("domains.get", projectId),
50
+ context: "getting project domain",
51
+ });
52
+ }
53
+ async list(projectId) {
54
+ return this.client.request(`/projects/v1/${encodeURIComponent(projectId)}/domains`, {
55
+ authMeta: authMeta("domains.list", projectId),
56
+ context: "listing project domains",
57
+ });
58
+ }
59
+ async check(projectId, domain) {
60
+ return this.client.request(`${domainPath(projectId, domain)}/actions/check`, {
41
61
  method: "POST",
42
- body: { project_id: projectId, domain, subdomain_name: subdomain },
43
- context: "registering custom domain",
62
+ authMeta: authMeta("domains.check", projectId),
63
+ context: "checking project domain",
44
64
  });
45
65
  }
46
- /** List all custom domains registered for a project. */
47
- async list(projectId, opts = {}) {
48
- if (opts.authMode === "service_key") {
49
- const project = await requireProjectCredentials(this.client, projectId, "listing custom domains");
50
- return this.client.request("/domains/v1", {
51
- headers: { Authorization: `Bearer ${project.service_key}` },
52
- context: "listing custom domains",
53
- });
54
- }
55
- return this.client.request(withProjectId("/domains/v1", projectId), {
56
- context: "listing custom domains",
66
+ async apply(projectId, domain) {
67
+ return this.client.request(`${domainPath(projectId, domain)}/actions/apply`, {
68
+ method: "POST",
69
+ authMeta: authMeta("domains.apply", projectId),
70
+ context: "applying project domain",
57
71
  });
58
72
  }
59
- /** Check verification/SSL status for a specific custom domain. */
60
- async status(projectId, domain, opts = {}) {
61
- if (opts.authMode === "service_key") {
62
- const project = await requireProjectCredentials(this.client, projectId, "checking domain status");
63
- return this.client.request(`/domains/v1/${encodeURIComponent(domain)}`, {
64
- headers: { Authorization: `Bearer ${project.service_key}` },
65
- context: "checking domain status",
66
- });
67
- }
68
- return this.client.request(withProjectId(`/domains/v1/${encodeURIComponent(domain)}`, projectId), {
69
- context: "checking domain status",
73
+ async repair(projectId, domain) {
74
+ return this.client.request(`${domainPath(projectId, domain)}/actions/repair`, {
75
+ method: "POST",
76
+ authMeta: authMeta("domains.repair", projectId),
77
+ context: "repairing project domain",
70
78
  });
71
79
  }
72
- /** Release a custom domain. `projectId` is optional for ownership-free removal. */
73
- async remove(domain, opts = {}) {
74
- const headers = {};
75
- if (opts.projectId && opts.authMode === "service_key") {
76
- const project = await requireProjectCredentials(this.client, opts.projectId, "removing custom domain");
77
- headers.Authorization = `Bearer ${project.service_key}`;
78
- }
79
- const path = opts.projectId && opts.authMode !== "service_key"
80
- ? withProjectId(`/domains/v1/${encodeURIComponent(domain)}`, opts.projectId)
81
- : `/domains/v1/${encodeURIComponent(domain)}`;
82
- return this.client.request(path, {
80
+ async testReceive(projectId, domain, to) {
81
+ return this.client.request(`${domainPath(projectId, domain)}/actions/test_receive`, {
82
+ method: "POST",
83
+ body: { to },
84
+ authMeta: authMeta("domains.testReceive", projectId),
85
+ context: "creating project domain receive test",
86
+ });
87
+ }
88
+ async activate(projectId, domain) {
89
+ return this.client.request(`${domainPath(projectId, domain)}/actions/activate_mailbox_addresses`, {
90
+ method: "POST",
91
+ authMeta: authMeta("domains.activate", projectId),
92
+ context: "activating project domain mailbox addresses",
93
+ });
94
+ }
95
+ async disconnect(projectId, domain) {
96
+ return this.client.request(domainPath(projectId, domain), {
83
97
  method: "DELETE",
84
- headers,
85
- context: "removing custom domain",
98
+ authMeta: authMeta("domains.disconnect", projectId),
99
+ context: "disconnecting project domain",
86
100
  });
87
101
  }
102
+ async wait(projectId, domain, opts = {}) {
103
+ const until = opts.until ?? "active";
104
+ const timeoutMs = opts.timeoutMs ?? 120_000;
105
+ const intervalMs = opts.intervalMs ?? 5_000;
106
+ const started = Date.now();
107
+ let last = await this.check(projectId, domain);
108
+ while (!waitSatisfied(last, until)) {
109
+ if (Date.now() - started >= timeoutMs) {
110
+ throw new LocalError(`Timed out waiting for project domain ${domain} to reach ${until}`, "waiting for project domain", {
111
+ code: "DOMAIN_WAIT_TIMEOUT",
112
+ details: { project_id: projectId, domain, until, last_status: last.status, checks: last.checks },
113
+ next_actions: [{ type: "check", command: `run402 domains check ${domain} --project ${projectId}` }],
114
+ });
115
+ }
116
+ await sleep(intervalMs);
117
+ last = await this.check(projectId, domain);
118
+ }
119
+ return last;
120
+ }
121
+ async add(projectId, domainOrOpts) {
122
+ const domain = typeof domainOrOpts === "string" ? domainOrOpts : domainOrOpts.domain;
123
+ return removed("domains.add", `run402 domains connect ${domain} --project ${projectId} --web`);
124
+ }
125
+ /** @deprecated Removed. Use get(projectId, domain). */
126
+ async status(projectId, domain) {
127
+ return removed("domains.status", `run402 domains status ${domain} --project ${projectId}`);
128
+ }
129
+ /** @deprecated Removed. Use disconnect(projectId, domain). */
130
+ async remove(domain, opts = {}) {
131
+ return removed("domains.remove", `run402 domains disconnect ${domain}${opts.projectId ? ` --project ${opts.projectId}` : ""} --confirm`);
132
+ }
88
133
  }
89
134
  //# sourceMappingURL=domains.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/namespaces/domains.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/namespaces/domains.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  /**
2
- * `senderDomain` namespace — custom email sending domains with DKIM
3
- * verification and optional inbound routing.
2
+ * `senderDomain` namespace — removed compatibility shim.
3
+ *
4
+ * Sender-domain APIs are now folded into the project-scoped ProjectDomain
5
+ * lifecycle under `domains`. Methods remain present so existing imports fail
6
+ * loudly and locally with a replacement path instead of calling retired
7
+ * `/email/v1/domains` endpoints.
4
8
  */
5
- import type { Client } from "../kernel.js";
6
9
  export interface DnsRecord {
7
10
  type: string;
8
11
  name: string;
@@ -27,19 +30,18 @@ export interface DisableInboundResult {
27
30
  status: string;
28
31
  }
29
32
  export declare class SenderDomain {
30
- private readonly client;
31
33
  readonly inboundEnable: (projectId: string, domain: string) => Promise<InboundEnableResult>;
32
34
  readonly inboundDisable: (projectId: string, domain: string) => Promise<DisableInboundResult>;
33
- constructor(client: Client);
34
- /** Register a custom email sending domain. Returns DKIM + SPF/DMARC DNS records. */
35
+ constructor(_client: unknown);
36
+ /** @deprecated Use `domains.ensure(projectId, domain, { desired })`. */
35
37
  register(projectId: string, domain: string): Promise<SenderDomainRegisterResult>;
36
- /** Get the project's current sender-domain registration state (polls SES). */
38
+ /** @deprecated Use `domains.list(projectId)` or `domains.get(projectId, domain)`. */
37
39
  status(projectId: string): Promise<SenderDomainStatusResult>;
38
- /** Remove the custom sender domain; email reverts to each mailbox's managed address. */
40
+ /** @deprecated Use `domains.disconnect(projectId, domain)`. */
39
41
  remove(projectId: string): Promise<void>;
40
- /** Enable inbound email on a verified custom sender domain. */
42
+ /** @deprecated Use `domains.ensure(..., { desired: { email: { receive: ... }}})`. */
41
43
  enableInbound(projectId: string, domain: string): Promise<InboundEnableResult>;
42
- /** Disable inbound email for a custom sender domain. */
44
+ /** @deprecated Use `domains.ensure` with receive disabled or `domains.disconnect`. */
43
45
  disableInbound(projectId: string, domain: string): Promise<DisableInboundResult>;
44
46
  }
45
47
  //# sourceMappingURL=sender-domain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender-domain.d.ts","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5F,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBAEjE,MAAM,EAAE,MAAM;IAK3C,oFAAoF;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAWtF,8EAA8E;IACxE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IASlE,wFAAwF;IAClF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C,+DAA+D;IACzD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWpF,wDAAwD;IAClD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAUvF"}
1
+ {"version":3,"file":"sender-domain.d.ts","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5F,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBAElF,OAAO,EAAE,OAAO;IAK5B,wEAAwE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAOtF,qFAAqF;IAC/E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOlE,+DAA+D;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,qFAAqF;IAC/E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOpF,sFAAsF;IAChF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAMvF"}
@@ -1,63 +1,45 @@
1
1
  /**
2
- * `senderDomain` namespace — custom email sending domains with DKIM
3
- * verification and optional inbound routing.
2
+ * `senderDomain` namespace — removed compatibility shim.
3
+ *
4
+ * Sender-domain APIs are now folded into the project-scoped ProjectDomain
5
+ * lifecycle under `domains`. Methods remain present so existing imports fail
6
+ * loudly and locally with a replacement path instead of calling retired
7
+ * `/email/v1/domains` endpoints.
4
8
  */
5
- import { requireProjectCredentials } from "../project-credentials.js";
9
+ import { LocalError } from "../errors.js";
6
10
  export class SenderDomain {
7
- client;
8
11
  inboundEnable;
9
12
  inboundDisable;
10
- constructor(client) {
11
- this.client = client;
13
+ constructor(_client) {
12
14
  this.inboundEnable = this.enableInbound.bind(this);
13
15
  this.inboundDisable = this.disableInbound.bind(this);
14
16
  }
15
- /** Register a custom email sending domain. Returns DKIM + SPF/DMARC DNS records. */
17
+ /** @deprecated Use `domains.ensure(projectId, domain, { desired })`. */
16
18
  async register(projectId, domain) {
17
- const project = await requireProjectCredentials(this.client, projectId, "registering sender domain");
18
- return this.client.request("/email/v1/domains", {
19
- method: "POST",
20
- headers: { Authorization: `Bearer ${project.service_key}` },
21
- body: { domain },
22
- context: "registering sender domain",
23
- });
19
+ return removed("senderDomain.register", `run402 domains connect ${domain} --project ${projectId} --email-send`);
24
20
  }
25
- /** Get the project's current sender-domain registration state (polls SES). */
21
+ /** @deprecated Use `domains.list(projectId)` or `domains.get(projectId, domain)`. */
26
22
  async status(projectId) {
27
- const project = await requireProjectCredentials(this.client, projectId, "checking sender domain status");
28
- return this.client.request("/email/v1/domains", {
29
- headers: { Authorization: `Bearer ${project.service_key}` },
30
- context: "checking sender domain status",
31
- });
23
+ return removed("senderDomain.status", `run402 domains list --project ${projectId}`);
32
24
  }
33
- /** Remove the custom sender domain; email reverts to each mailbox's managed address. */
25
+ /** @deprecated Use `domains.disconnect(projectId, domain)`. */
34
26
  async remove(projectId) {
35
- const project = await requireProjectCredentials(this.client, projectId, "removing sender domain");
36
- await this.client.request("/email/v1/domains", {
37
- method: "DELETE",
38
- headers: { Authorization: `Bearer ${project.service_key}` },
39
- context: "removing sender domain",
40
- });
27
+ return removed("senderDomain.remove", `run402 domains disconnect <domain> --project ${projectId} --confirm`);
41
28
  }
42
- /** Enable inbound email on a verified custom sender domain. */
29
+ /** @deprecated Use `domains.ensure(..., { desired: { email: { receive: ... }}})`. */
43
30
  async enableInbound(projectId, domain) {
44
- const project = await requireProjectCredentials(this.client, projectId, "enabling inbound email");
45
- return this.client.request("/email/v1/domains/inbound", {
46
- method: "POST",
47
- headers: { Authorization: `Bearer ${project.service_key}` },
48
- body: { domain },
49
- context: "enabling inbound email",
50
- });
31
+ return removed("senderDomain.enableInbound", `run402 domains connect ${domain} --project ${projectId} --email-receive`);
51
32
  }
52
- /** Disable inbound email for a custom sender domain. */
33
+ /** @deprecated Use `domains.ensure` with receive disabled or `domains.disconnect`. */
53
34
  async disableInbound(projectId, domain) {
54
- const project = await requireProjectCredentials(this.client, projectId, "disabling inbound email");
55
- return this.client.request("/email/v1/domains/inbound", {
56
- method: "DELETE",
57
- headers: { Authorization: `Bearer ${project.service_key}` },
58
- body: { domain },
59
- context: "disabling inbound email",
60
- });
35
+ return removed("senderDomain.disableInbound", `run402 domains disconnect ${domain} --project ${projectId} --confirm`);
61
36
  }
62
37
  }
38
+ function removed(command, replacement) {
39
+ throw new LocalError(`${command} has been removed. Use ${replacement}.`, command, {
40
+ code: "COMMAND_REMOVED",
41
+ details: { command, replacement },
42
+ next_actions: [{ type: "use_replacement_command", command: replacement }],
43
+ });
44
+ }
63
45
  //# sourceMappingURL=sender-domain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender-domain.js","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AA8BtE,MAAM,OAAO,YAAY;IAIM;IAHpB,aAAa,CAAsE;IACnF,cAAc,CAAuE;IAE9F,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,MAAc;QAC9C,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAC;QAErG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAA6B,mBAAmB,EAAE;YAC1E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,OAAO,EAAE,2BAA2B;SACrC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,+BAA+B,CAAC,CAAC;QAEzG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAA2B,mBAAmB,EAAE;YACxE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,wFAAwF;IACxF,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAElG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAU,mBAAmB,EAAE;YACtD,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;IACL,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,MAAc;QACnD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAElG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB,2BAA2B,EAAE;YAC3E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,MAAc;QACpD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAEnG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAuB,2BAA2B,EAAE;YAC5E,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"sender-domain.js","sourceRoot":"","sources":["../../src/namespaces/sender-domain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA8B1C,MAAM,OAAO,YAAY;IACd,aAAa,CAAsE;IACnF,cAAc,CAAuE;IAE9F,YAAY,OAAgB;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,MAAc;QAC9C,OAAO,OAAO,CACZ,uBAAuB,EACvB,0BAA0B,MAAM,cAAc,SAAS,eAAe,CACvE,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,OAAO,OAAO,CACZ,qBAAqB,EACrB,iCAAiC,SAAS,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,OAAO,OAAO,CACZ,qBAAqB,EACrB,gDAAgD,SAAS,YAAY,CACtE,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,MAAc;QACnD,OAAO,OAAO,CACZ,4BAA4B,EAC5B,0BAA0B,MAAM,cAAc,SAAS,kBAAkB,CAC1E,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,MAAc;QACpD,OAAO,OAAO,CACZ,6BAA6B,EAC7B,6BAA6B,MAAM,cAAc,SAAS,YAAY,CACvE,CAAC;IACJ,CAAC;CACF;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,WAAmB;IACnD,MAAM,IAAI,UAAU,CAClB,GAAG,OAAO,0BAA0B,WAAW,GAAG,EAClD,OAAO,EACP;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;QACjC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KAC1E,CACF,CAAC;AACJ,CAAC"}
@@ -21,8 +21,7 @@ export type DeployManifestFileEntry = ContentSource | {
21
21
  content_type?: string;
22
22
  };
23
23
  export type DeployManifestFileSet = Record<string, DeployManifestFileEntry>;
24
- export interface DeployManifestMigrationSpec {
25
- id: string;
24
+ interface DeployManifestMigrationBaseSpec {
26
25
  checksum?: string;
27
26
  sql?: string;
28
27
  sql_ref?: ContentRef;
@@ -30,6 +29,18 @@ export interface DeployManifestMigrationSpec {
30
29
  sql_file?: string;
31
30
  transaction?: "required" | "none";
32
31
  }
32
+ export interface DeployManifestVersionedMigrationSpec extends DeployManifestMigrationBaseSpec {
33
+ id: string;
34
+ name?: never;
35
+ }
36
+ export interface DeployManifestContentTrackedMigrationSpec extends DeployManifestMigrationBaseSpec {
37
+ /** Content-tracked migration name. The SDK compiles this to
38
+ * `<name>_<sha256(sql)[0:16]>`; SQL MUST be idempotent because changed
39
+ * content applies again against a database with prior versions. */
40
+ name: string;
41
+ id?: never;
42
+ }
43
+ export type DeployManifestMigrationSpec = DeployManifestVersionedMigrationSpec | DeployManifestContentTrackedMigrationSpec;
33
44
  export interface DeployManifestDatabaseSpec {
34
45
  migrations?: DeployManifestMigrationSpec[];
35
46
  expose?: DatabaseSpec["expose"];
@@ -135,4 +146,5 @@ export interface NormalizedDeployManifest {
135
146
  export declare function loadDeployManifest(path: string, opts?: LoadDeployManifestOptions): Promise<NormalizedDeployManifest>;
136
147
  export declare function loadExecutableDeployConfig(path: string, opts?: LoadExecutableDeployConfigOptions): Promise<Run402ReleaseConfig>;
137
148
  export declare function normalizeDeployManifest(input: DeployManifestInput, opts?: NormalizeDeployManifestOptions): Promise<NormalizedDeployManifest>;
149
+ export {};
138
150
  //# sourceMappingURL=deploy-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-manifest.d.ts","sourceRoot":"","sources":["../../src/node/deploy-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-manifest.d.ts","sourceRoot":"","sources":["../../src/node/deploy-manifest.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ const MANIFEST_I18N_FIELDS = new Set([
38
38
  const MANIFEST_DATABASE_FIELDS = new Set(["migrations", "expose", "zero_downtime"]);
39
39
  const MANIFEST_MIGRATION_FIELDS = new Set([
40
40
  "id",
41
+ "name",
41
42
  "checksum",
42
43
  "sql",
43
44
  "sql_ref",
@@ -104,6 +105,7 @@ const TYPESCRIPT_MANIFEST_EXTENSIONS = new Set([".ts", ".mts", ".cts"]);
104
105
  const TYPESCRIPT_FUNCTION_EXTENSIONS = new Set([".ts", ".tsx", ".mts", ".cts"]);
105
106
  const EXECUTABLE_CONFIG_TIMEOUT_MS = 5_000;
106
107
  const EXECUTABLE_CONFIG_METADATA = Symbol("run402.executableConfigMetadata");
108
+ const MIGRATION_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;
107
109
  export async function loadDeployManifest(path, opts = {}) {
108
110
  const manifestPath = isAbsolute(path) ? path : resolvePath(process.cwd(), path);
109
111
  const extension = extname(manifestPath).toLowerCase();
@@ -342,18 +344,43 @@ async function mapDatabase(database, opts) {
342
344
  throw new LocalError("Deploy manifest database.migrations must be an array", CONTEXT);
343
345
  }
344
346
  out.migrations = [];
345
- for (const migration of raw.migrations) {
346
- out.migrations.push(await mapMigration(migration, opts));
347
+ const seenNames = new Map();
348
+ for (const [index, migration] of raw.migrations.entries()) {
349
+ out.migrations.push(await mapMigration(migration, opts, index, seenNames));
347
350
  }
348
351
  }
349
352
  return out;
350
353
  }
351
- async function mapMigration(migration, opts) {
354
+ async function mapMigration(migration, opts, index, seenNames) {
352
355
  assertPlainRecord(migration, "Deploy manifest database.migrations[]");
353
356
  assertKnownFields(migration, "Deploy manifest database.migrations[]", MANIFEST_MIGRATION_FIELDS);
354
- const out = {
355
- id: migration.id,
356
- };
357
+ const hasId = Object.prototype.hasOwnProperty.call(migration, "id") && migration.id !== undefined;
358
+ const hasName = Object.prototype.hasOwnProperty.call(migration, "name") && migration.name !== undefined;
359
+ const label = migrationLabel(migration, index);
360
+ if (hasId && hasName) {
361
+ throw new LocalError(`${label} declares both id and name; use exactly one`, CONTEXT);
362
+ }
363
+ if (!hasId && !hasName) {
364
+ throw new LocalError(`${label} must declare exactly one of id or name`, CONTEXT);
365
+ }
366
+ let out;
367
+ if (hasName) {
368
+ if (typeof migration.name !== "string" || !MIGRATION_NAME_RE.test(migration.name)) {
369
+ throw new LocalError(`${label}.name must match /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/`, CONTEXT);
370
+ }
371
+ const firstIndex = seenNames.get(migration.name);
372
+ if (firstIndex !== undefined) {
373
+ throw new LocalError(`${label}.name duplicates database.migrations[${firstIndex}].name ${JSON.stringify(migration.name)}`, CONTEXT);
374
+ }
375
+ seenNames.set(migration.name, index);
376
+ out = { name: migration.name };
377
+ }
378
+ else {
379
+ if (typeof migration.id !== "string" || migration.id.trim() === "") {
380
+ throw new LocalError(`${label}.id must be a non-empty string`, CONTEXT);
381
+ }
382
+ out = { id: migration.id };
383
+ }
357
384
  if (migration.sql !== undefined)
358
385
  out.sql = migration.sql;
359
386
  if (migration.sql_ref !== undefined)
@@ -366,7 +393,7 @@ async function mapMigration(migration, opts) {
366
393
  if (migration.sql_path !== undefined &&
367
394
  migration.sql_file !== undefined &&
368
395
  migration.sql_path !== migration.sql_file) {
369
- throw new LocalError(`Migration ${migration.id} has both sql_path and sql_file with different values`, CONTEXT);
396
+ throw new LocalError(`${label} has both sql_path and sql_file with different values`, CONTEXT);
370
397
  }
371
398
  if (out.sql === undefined && sqlPath !== undefined) {
372
399
  const field = migration.sql_path !== undefined ? "sql_path" : "sql_file";
@@ -375,11 +402,21 @@ async function mapMigration(migration, opts) {
375
402
  out.sql = await readFile(abs, "utf-8");
376
403
  }
377
404
  catch (err) {
378
- throw new LocalError(`Failed to read migration ${field} '${sqlPath}': ${err.message}`, CONTEXT, err);
405
+ throw new LocalError(`Failed to read migration ${field} '${sqlPath}' for ${label}: ${err.message}`, CONTEXT, err);
379
406
  }
380
407
  }
381
408
  return out;
382
409
  }
410
+ function migrationLabel(migration, index) {
411
+ const identity = typeof migration.id === "string"
412
+ ? migration.id
413
+ : typeof migration.name === "string"
414
+ ? migration.name
415
+ : null;
416
+ return identity
417
+ ? `Deploy manifest database.migrations[${index}] (${identity})`
418
+ : `Deploy manifest database.migrations[${index}]`;
419
+ }
383
420
  function mapFunctions(functions, opts) {
384
421
  assertPlainRecord(functions, "Deploy manifest functions");
385
422
  assertKnownFields(functions, "Deploy manifest functions", MANIFEST_FUNCTIONS_FIELDS);