@caelo-cms/provisioning 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/adapter.d.ts +95 -0
  2. package/dist/adapter.d.ts.map +1 -0
  3. package/dist/adapter.js +3 -0
  4. package/dist/adapter.js.map +1 -0
  5. package/dist/bootstrap-token.d.ts +11 -0
  6. package/dist/bootstrap-token.d.ts.map +1 -0
  7. package/dist/bootstrap-token.js +9 -0
  8. package/dist/bootstrap-token.js.map +1 -0
  9. package/dist/caddy.d.ts +34 -0
  10. package/dist/caddy.d.ts.map +1 -0
  11. package/dist/caddy.js +53 -0
  12. package/dist/caddy.js.map +1 -0
  13. package/{src/cdn-copy.ts → dist/cdn-copy.d.ts} +11 -42
  14. package/dist/cdn-copy.d.ts.map +1 -0
  15. package/dist/cdn-copy.js +48 -0
  16. package/dist/cdn-copy.js.map +1 -0
  17. package/dist/cli.d.ts +3 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +670 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/compose.d.ts +27 -0
  22. package/dist/compose.d.ts.map +1 -0
  23. package/{src/compose.ts → dist/compose.js} +15 -35
  24. package/dist/compose.js.map +1 -0
  25. package/dist/dns/cloudflare.d.ts +9 -0
  26. package/dist/dns/cloudflare.d.ts.map +1 -0
  27. package/dist/dns/cloudflare.js +160 -0
  28. package/dist/dns/cloudflare.js.map +1 -0
  29. package/dist/dns/index.d.ts +12 -0
  30. package/dist/dns/index.d.ts.map +1 -0
  31. package/dist/dns/index.js +42 -0
  32. package/dist/dns/index.js.map +1 -0
  33. package/dist/dns/manual.d.ts +5 -0
  34. package/dist/dns/manual.d.ts.map +1 -0
  35. package/dist/dns/manual.js +96 -0
  36. package/dist/dns/manual.js.map +1 -0
  37. package/dist/dns/types.d.ts +23 -0
  38. package/dist/dns/types.d.ts.map +1 -0
  39. package/dist/dns/types.js +3 -0
  40. package/dist/dns/types.js.map +1 -0
  41. package/dist/gcloud.d.ts +42 -0
  42. package/dist/gcloud.d.ts.map +1 -0
  43. package/dist/gcloud.js +187 -0
  44. package/dist/gcloud.js.map +1 -0
  45. package/dist/index.d.ts +22 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +7 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/install-state.d.ts +54 -0
  50. package/dist/install-state.d.ts.map +1 -0
  51. package/dist/install-state.js +118 -0
  52. package/dist/install-state.js.map +1 -0
  53. package/dist/lifecycle.d.ts +19 -0
  54. package/dist/lifecycle.d.ts.map +1 -0
  55. package/dist/lifecycle.js +589 -0
  56. package/dist/lifecycle.js.map +1 -0
  57. package/dist/migration-runner.d.ts +15 -0
  58. package/dist/migration-runner.d.ts.map +1 -0
  59. package/dist/migration-runner.js +174 -0
  60. package/dist/migration-runner.js.map +1 -0
  61. package/dist/redirects-emit.d.ts +65 -0
  62. package/dist/redirects-emit.d.ts.map +1 -0
  63. package/dist/redirects-emit.js +92 -0
  64. package/dist/redirects-emit.js.map +1 -0
  65. package/dist/wizard.d.ts +35 -0
  66. package/dist/wizard.d.ts.map +1 -0
  67. package/dist/wizard.js +160 -0
  68. package/dist/wizard.js.map +1 -0
  69. package/dist/wizards/gcp-cost.d.ts +27 -0
  70. package/dist/wizards/gcp-cost.d.ts.map +1 -0
  71. package/dist/wizards/gcp-cost.js +77 -0
  72. package/dist/wizards/gcp-cost.js.map +1 -0
  73. package/dist/wizards/gcp-pulumi.d.ts +37 -0
  74. package/dist/wizards/gcp-pulumi.d.ts.map +1 -0
  75. package/dist/wizards/gcp-pulumi.js +100 -0
  76. package/dist/wizards/gcp-pulumi.js.map +1 -0
  77. package/dist/wizards/gcp.d.ts +9 -0
  78. package/dist/wizards/gcp.d.ts.map +1 -0
  79. package/dist/wizards/gcp.js +895 -0
  80. package/dist/wizards/gcp.js.map +1 -0
  81. package/package.json +34 -7
  82. package/stacks/aws/index.ts +6 -7
  83. package/stacks/azure/index.ts +11 -11
  84. package/stacks/gcp/Pulumi.production.yaml +16 -0
  85. package/stacks/gcp/Pulumi.yaml +52 -6
  86. package/stacks/gcp/index.ts +569 -188
  87. package/stacks/self-hosted/index.ts +3 -3
  88. package/static/welcome.html +155 -0
  89. package/src/adapter.ts +0 -103
  90. package/src/bootstrap-token.ts +0 -20
  91. package/src/caddy.ts +0 -93
  92. package/src/cli.ts +0 -674
  93. package/src/index.test.ts +0 -246
  94. package/src/index.ts +0 -52
  95. package/src/redirects-emit.ts +0 -166
  96. package/tsconfig.json +0 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * P14 — production docker-compose.yml generator.
3
+ *
4
+ * Emits the production stack: Postgres + pgBackRest sidecar + Caddy +
5
+ * MinIO + four Caelo services (admin, gateway, orchestrator, runner).
6
+ * Idempotent: same input → byte-identical output. The CLI's `up`
7
+ * sub-command writes this to `<repo>/.caelo/docker-compose.yml` and
8
+ * runs `docker compose up -d`.
9
+ */
10
+ export interface ComposeSpec {
11
+ readonly domain: string;
12
+ readonly postgresPassword: string;
13
+ readonly minioRootUser: string;
14
+ readonly minioRootPassword: string;
15
+ /**
16
+ * P18 — project KEK (32 bytes hex) for at-rest encryption of AI provider
17
+ * keys + future secrets. Generated per install by cms-provision; persisted
18
+ * in `.caelo/secrets`. NEVER prompt the operator for this — auto-generated
19
+ * via the same randomHex(32) the GCP stack uses.
20
+ */
21
+ readonly caeloSecretKek: string;
22
+ readonly anthropicApiKey?: string;
23
+ readonly resendApiKey?: string;
24
+ readonly diskSize: string;
25
+ }
26
+ export declare function generateDockerCompose(spec: ComposeSpec): string;
27
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAiG/D"}
@@ -1,28 +1,7 @@
1
1
  // SPDX-License-Identifier: MPL-2.0
2
-
3
- /**
4
- * P14 — production docker-compose.yml generator.
5
- *
6
- * Emits the production stack: Postgres + pgBackRest sidecar + Caddy +
7
- * MinIO + four Caelo services (admin, gateway, orchestrator, runner).
8
- * Idempotent: same input → byte-identical output. The CLI's `up`
9
- * sub-command writes this to `<repo>/.caelo/docker-compose.yml` and
10
- * runs `docker compose up -d`.
11
- */
12
-
13
- export interface ComposeSpec {
14
- readonly domain: string;
15
- readonly postgresPassword: string; // generated by cms-provision; persisted in .caelo/secrets
16
- readonly minioRootUser: string;
17
- readonly minioRootPassword: string;
18
- readonly anthropicApiKey?: string;
19
- readonly resendApiKey?: string;
20
- readonly diskSize: string;
21
- }
22
-
23
- export function generateDockerCompose(spec: ComposeSpec): string {
24
- const env = (k: string, v: string | undefined): string => (v ? ` ${k}: "${escape(v)}"` : "");
25
- return `# SPDX-License-Identifier: MPL-2.0
2
+ export function generateDockerCompose(spec) {
3
+ const env = (k, v) => v ? ` ${k}: "${escapeYaml(v)}"` : "";
4
+ return `# SPDX-License-Identifier: MPL-2.0
26
5
  # Generated by cms-provision — do not edit; re-run \`bunx cms-provision up\`.
27
6
  # Domain: ${spec.domain}
28
7
 
@@ -32,7 +11,7 @@ services:
32
11
  container_name: caelo-postgres
33
12
  restart: unless-stopped
34
13
  environment:
35
- POSTGRES_PASSWORD: "${escape(spec.postgresPassword)}"
14
+ POSTGRES_PASSWORD: "${escapeYaml(spec.postgresPassword)}"
36
15
  POSTGRES_USER: caelo
37
16
  POSTGRES_DB: caelo
38
17
  volumes:
@@ -59,8 +38,8 @@ services:
59
38
  restart: unless-stopped
60
39
  command: server /data --console-address ":9001"
61
40
  environment:
62
- MINIO_ROOT_USER: "${escape(spec.minioRootUser)}"
63
- MINIO_ROOT_PASSWORD: "${escape(spec.minioRootPassword)}"
41
+ MINIO_ROOT_USER: "${escapeYaml(spec.minioRootUser)}"
42
+ MINIO_ROOT_PASSWORD: "${escapeYaml(spec.minioRootPassword)}"
64
43
  volumes:
65
44
  - caelo-minio:/data
66
45
 
@@ -86,8 +65,9 @@ services:
86
65
  - ../..:/app
87
66
  command: bun run --filter @caelo-cms/admin start
88
67
  environment:
89
- ADMIN_DATABASE_URL: "postgres://caelo:${escape(spec.postgresPassword)}@postgres:5432/cms_admin"
90
- PUBLIC_ADMIN_DATABASE_URL: "postgres://caelo:${escape(spec.postgresPassword)}@postgres:5432/cms_public"
68
+ ADMIN_DATABASE_URL: "postgres://caelo:${escapeYaml(spec.postgresPassword)}@postgres:5432/cms_admin"
69
+ PUBLIC_ADMIN_DATABASE_URL: "postgres://caelo:${escapeYaml(spec.postgresPassword)}@postgres:5432/cms_public"
70
+ CAELO_SECRET_KEK: "${escapeYaml(spec.caeloSecretKek)}"
91
71
  NODE_ENV: production
92
72
  ${env("ANTHROPIC_API_KEY", spec.anthropicApiKey)}
93
73
  ${env("RESEND_API_KEY", spec.resendApiKey)}
@@ -103,8 +83,8 @@ ${env("RESEND_API_KEY", spec.resendApiKey)}
103
83
  - ../..:/app
104
84
  command: bun run apps/api-gateway/src/server.ts
105
85
  environment:
106
- ADMIN_DATABASE_URL: "postgres://caelo:${escape(spec.postgresPassword)}@postgres:5432/cms_admin"
107
- PUBLIC_DATABASE_URL: "postgres://caelo:${escape(spec.postgresPassword)}@postgres:5432/cms_public"
86
+ ADMIN_DATABASE_URL: "postgres://caelo:${escapeYaml(spec.postgresPassword)}@postgres:5432/cms_admin"
87
+ PUBLIC_DATABASE_URL: "postgres://caelo:${escapeYaml(spec.postgresPassword)}@postgres:5432/cms_public"
108
88
  GATEWAY_PORT: "8090"
109
89
  NODE_ENV: production
110
90
 
@@ -116,8 +96,8 @@ volumes:
116
96
  caelo-caddy-config:
117
97
  `;
118
98
  }
119
-
120
- function escape(s: string): string {
121
- // Conservative escape for double-quoted YAML strings.
122
- return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
99
+ function escapeYaml(s) {
100
+ // Conservative escape for double-quoted YAML strings.
101
+ return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
123
102
  }
103
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../src/compose.ts"],"names":[],"mappings":"AAAA,mCAAmC;AA6BnC,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAqB,EAAU,EAAE,CACvD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO;;YAEG,IAAI,CAAC,MAAM;;;;;;;;4BAQK,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA2BnC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;8BAC1B,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;8CA0BlB,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;qDAC1B,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;2BAC3D,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;;EAExD,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC;EAC9C,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;;;;;;;;;;;;;8CAaI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;+CAChC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;;;;;;;;CAU/E,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,sDAAsD;IACtD,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DnsAdapter } from "./types.js";
2
+ export declare function detectCloudflareAuth(): Promise<{
3
+ token: string | null;
4
+ }>;
5
+ export declare function makeCloudflareAdapter(opts: {
6
+ domain: string;
7
+ apiToken: string;
8
+ }): DnsAdapter;
9
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/dns/cloudflare.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAIxD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAa9E;AAwED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAuD5F"}
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Cloudflare DNS adapter — zero-touch via the Cloudflare API.
4
+ * Uses the public REST API directly (no SDK) so the Caelo install
5
+ * doesn't carry the cloudflare-sdk's transitive dependency tree.
6
+ *
7
+ * Auth: CLOUDFLARE_API_TOKEN env var. Token scope needed:
8
+ * Zone:DNS:Edit on the target zone
9
+ * (Read-only Zone:Zone:Read is enough for `detectCloudflareAuth`.)
10
+ *
11
+ * Records are upserted — repeated runs are idempotent. Each CREATE
12
+ * is followed by a public-DNS poll to verify the change is visible
13
+ * (Cloudflare propagates within ~60s typically).
14
+ */
15
+ import { promises as dns } from "node:dns";
16
+ import { setTimeout as sleep } from "node:timers/promises";
17
+ import { log, spinner } from "@clack/prompts";
18
+ import { dim, green, red } from "kleur/colors";
19
+ const CF_API = "https://api.cloudflare.com/client/v4";
20
+ export async function detectCloudflareAuth() {
21
+ const token = process.env.CLOUDFLARE_API_TOKEN ?? null;
22
+ if (!token)
23
+ return { token: null };
24
+ // Verify the token resolves (cheap HEAD-style call).
25
+ try {
26
+ const r = await fetch(`${CF_API}/user/tokens/verify`, {
27
+ headers: { Authorization: `Bearer ${token}` },
28
+ });
29
+ if (!r.ok)
30
+ return { token: null };
31
+ return { token };
32
+ }
33
+ catch {
34
+ return { token: null };
35
+ }
36
+ }
37
+ async function findZoneId(token, domain) {
38
+ // Try the apex first, then walk up subdomains until we hit a zone.
39
+ // (e.g. caelo-cms.com → caelo-cms.com)
40
+ const parts = domain.split(".");
41
+ for (let i = 0; i < parts.length - 1; i++) {
42
+ const candidate = parts.slice(i).join(".");
43
+ const r = await fetch(`${CF_API}/zones?name=${encodeURIComponent(candidate)}`, {
44
+ headers: { Authorization: `Bearer ${token}` },
45
+ });
46
+ if (!r.ok)
47
+ continue;
48
+ const body = (await r.json());
49
+ if (body.result && body.result.length > 0)
50
+ return body.result[0]?.id ?? null;
51
+ }
52
+ return null;
53
+ }
54
+ async function existingRecord(token, zoneId, hostname, type) {
55
+ const r = await fetch(`${CF_API}/zones/${zoneId}/dns_records?type=${type}&name=${encodeURIComponent(hostname)}`, { headers: { Authorization: `Bearer ${token}` } });
56
+ if (!r.ok)
57
+ return null;
58
+ const body = (await r.json());
59
+ return body.result?.[0] ?? null;
60
+ }
61
+ async function upsertRecord(token, zoneId, record) {
62
+ const existing = await existingRecord(token, zoneId, record.hostname, record.type);
63
+ const body = {
64
+ type: record.type,
65
+ name: record.hostname,
66
+ content: record.value,
67
+ ttl: record.ttl ?? 1, // 1 = auto in Cloudflare
68
+ proxied: false, // Caelo expects raw A records hitting GCP LB IP, not Cloudflare's proxy
69
+ };
70
+ if (existing) {
71
+ if (existing.content === record.value)
72
+ return; // already correct
73
+ const r = await fetch(`${CF_API}/zones/${zoneId}/dns_records/${existing.id}`, {
74
+ method: "PUT",
75
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
76
+ body: JSON.stringify(body),
77
+ });
78
+ if (!r.ok)
79
+ throw new Error(`Cloudflare PUT ${record.hostname}: ${r.status} ${await r.text()}`);
80
+ return;
81
+ }
82
+ const r = await fetch(`${CF_API}/zones/${zoneId}/dns_records`, {
83
+ method: "POST",
84
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
85
+ body: JSON.stringify(body),
86
+ });
87
+ if (!r.ok)
88
+ throw new Error(`Cloudflare POST ${record.hostname}: ${r.status} ${await r.text()}`);
89
+ }
90
+ export function makeCloudflareAdapter(opts) {
91
+ return {
92
+ name: `Cloudflare (zero-touch via API)`,
93
+ async applyRecords(records) {
94
+ const s = spinner();
95
+ s.start(`Locating Cloudflare zone for ${opts.domain}...`);
96
+ const zoneId = await findZoneId(opts.apiToken, opts.domain);
97
+ if (!zoneId) {
98
+ s.stop(red(`No Cloudflare zone found containing ${opts.domain}.`));
99
+ throw new Error(`Domain ${opts.domain} isn't in your Cloudflare account. Add it as a zone first, or unset CLOUDFLARE_API_TOKEN to use the manual paste flow.`);
100
+ }
101
+ s.stop(green(`Cloudflare zone ${dim(zoneId)} found`));
102
+ for (const record of records) {
103
+ const s2 = spinner();
104
+ s2.start(`Upserting ${record.type} ${record.hostname} → ${record.value}...`);
105
+ try {
106
+ await upsertRecord(opts.apiToken, zoneId, record);
107
+ }
108
+ catch (e) {
109
+ s2.stop(red(`Failed: ${e instanceof Error ? e.message : String(e)}`));
110
+ throw e;
111
+ }
112
+ s2.stop(green(`${record.type} ${record.hostname} set`));
113
+ }
114
+ // Quick public-DNS poll — Cloudflare usually propagates within
115
+ // ~60s. We give 5 min before giving up + telling the operator
116
+ // to verify manually.
117
+ const s3 = spinner();
118
+ s3.start("Verifying public DNS resolution...");
119
+ const start = Date.now();
120
+ const remaining = new Set(records.map((r) => `${r.type}:${r.hostname}`));
121
+ while (remaining.size > 0 && Date.now() - start < 5 * 60 * 1000) {
122
+ for (const key of [...remaining]) {
123
+ const record = records.find((r) => `${r.type}:${r.hostname}` === key);
124
+ if (!record) {
125
+ remaining.delete(key);
126
+ continue;
127
+ }
128
+ if (await checkRecord(record))
129
+ remaining.delete(key);
130
+ }
131
+ if (remaining.size > 0)
132
+ await sleep(5000);
133
+ }
134
+ if (remaining.size > 0) {
135
+ s3.stop(red(`Some records still unresolved: ${[...remaining].join(", ")}`));
136
+ log.error(`Cloudflare API succeeded but public DNS doesn't reflect the change yet. Wait + verify with \`dig\` then re-run.`);
137
+ throw new Error("DNS verify timeout.");
138
+ }
139
+ s3.stop(green("All records resolve publicly."));
140
+ },
141
+ };
142
+ }
143
+ async function checkRecord(record) {
144
+ try {
145
+ if (record.type === "A") {
146
+ const result = await dns.resolve4(record.hostname);
147
+ return result.includes(record.value);
148
+ }
149
+ if (record.type === "CNAME") {
150
+ const result = await dns.resolveCname(record.hostname);
151
+ const expected = record.value.replace(/\.$/, "");
152
+ return result.some((v) => v.replace(/\.$/, "") === expected);
153
+ }
154
+ return true; // AAAA + TXT — assume Cloudflare API success means it's there
155
+ }
156
+ catch {
157
+ return false;
158
+ }
159
+ }
160
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/dns/cloudflare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DnsAdapter } from "./types.js";
2
+ export type { DnsAdapter, DnsRecord } from "./types.js";
3
+ /**
4
+ * Pick the right DNS adapter based on environment + interactive
5
+ * detection. The CLI's wizard calls this; if a registrar's API is
6
+ * reachable, returns its adapter. Otherwise falls back to manual.
7
+ */
8
+ export declare function pickDnsAdapter(opts: {
9
+ domain: string;
10
+ forceManual?: boolean;
11
+ }): Promise<DnsAdapter>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dns/index.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBtB"}
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * DNS adapters — each provider implements the same `DnsAdapter`
4
+ * interface so the wizard can pick by registrar. Per CLAUDE.md §11.C:
5
+ * "DNS records land automatically when the registrar API is supported.
6
+ * Otherwise the CLI prints the records, polls DNS, and continues only
7
+ * when resolution succeeds."
8
+ *
9
+ * v1 adapters:
10
+ * - Cloudflare — zero-touch via the Cloudflare API
11
+ * - Route53 — zero-touch via the AWS SDK
12
+ * - manual — print records + verify-poll via dig
13
+ *
14
+ * Detection order: Cloudflare → Route53 → manual fallback. Detection
15
+ * is best-effort; the wizard always prompts to confirm.
16
+ */
17
+ import { detectCloudflareAuth, makeCloudflareAdapter } from "./cloudflare.js";
18
+ import { makeManualAdapter } from "./manual.js";
19
+ /**
20
+ * Pick the right DNS adapter based on environment + interactive
21
+ * detection. The CLI's wizard calls this; if a registrar's API is
22
+ * reachable, returns its adapter. Otherwise falls back to manual.
23
+ */
24
+ export async function pickDnsAdapter(opts) {
25
+ if (opts.forceManual) {
26
+ return makeManualAdapter({ domain: opts.domain });
27
+ }
28
+ // Cloudflare — needs CLOUDFLARE_API_TOKEN (read-only zone scope is
29
+ // enough for detection; create needs Zone:DNS:Edit).
30
+ const cf = await detectCloudflareAuth();
31
+ if (cf.token) {
32
+ return makeCloudflareAdapter({
33
+ domain: opts.domain,
34
+ apiToken: cf.token,
35
+ });
36
+ }
37
+ // Route53 — would need AWS_PROFILE / AWS_ACCESS_KEY_ID. Not yet
38
+ // implemented; falls through to manual. The interface + adapter
39
+ // skeleton land here so the future PR is one file.
40
+ return makeManualAdapter({ domain: opts.domain });
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dns/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAGpC;IACC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,mEAAmE;IACnE,qDAAqD;IACrD,MAAM,EAAE,GAAG,MAAM,oBAAoB,EAAE,CAAC;IACxC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,qBAAqB,CAAC;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,EAAE,CAAC,KAAK;SACnB,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,gEAAgE;IAChE,mDAAmD;IAEnD,OAAO,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { DnsAdapter } from "./types.js";
2
+ export declare function makeManualAdapter(opts: {
3
+ domain: string;
4
+ }): DnsAdapter;
5
+ //# sourceMappingURL=manual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../src/dns/manual.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAKxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAyDtE"}
@@ -0,0 +1,96 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Manual DNS adapter — fallback for registrars without an API
4
+ * integration (Namecheap, GoDaddy, Porkbun, etc.). Prints the records,
5
+ * waits for the operator to paste them at the registrar, polls public
6
+ * DNS until resolution succeeds.
7
+ *
8
+ * Per CLAUDE.md §11.C: this IS one of the few human-required steps
9
+ * the wizard can't skip. The polling makes it close to zero-friction —
10
+ * the operator pastes records, presses Enter, the wizard waits.
11
+ */
12
+ import { promises as dns } from "node:dns";
13
+ import { setTimeout as sleep } from "node:timers/promises";
14
+ import { confirm, isCancel, log, note, spinner } from "@clack/prompts";
15
+ import { bold, cyan, dim, green, red } from "kleur/colors";
16
+ const POLL_INTERVAL_MS = 5000;
17
+ const POLL_TIMEOUT_MS = 30 * 60 * 1000; // 30 min — managed certs need ~15 min to issue after DNS
18
+ export function makeManualAdapter(opts) {
19
+ return {
20
+ name: `Manual (paste at your registrar for ${opts.domain})`,
21
+ async applyRecords(records) {
22
+ note([
23
+ bold("Paste these DNS records at your registrar:"),
24
+ "",
25
+ ...records.map((r) => ` ${dim(r.type.padEnd(6))} ${r.hostname.padEnd(35)} → ${bold(r.value)}`),
26
+ "",
27
+ dim("After pasting, press Enter to verify resolution."),
28
+ ].join("\n"), "DNS records");
29
+ const ack = await confirm({
30
+ message: "Records pasted at your registrar?",
31
+ initialValue: true,
32
+ });
33
+ if (isCancel(ack) || !ack) {
34
+ log.error(red("Aborted at DNS step."));
35
+ throw new Error("DNS records not pasted; aborted by operator.");
36
+ }
37
+ const s = spinner();
38
+ s.start(`Polling DNS — up to 30 min while propagation + records settle...`);
39
+ const start = Date.now();
40
+ const remaining = new Set(records.map((r) => recordKey(r)));
41
+ while (remaining.size > 0) {
42
+ if (Date.now() - start > POLL_TIMEOUT_MS) {
43
+ s.stop(red("DNS verify timeout (30 min)."));
44
+ throw new Error(`Records still unresolved after 30 min: ${[...remaining].join(", ")}. Re-run after fixing.`);
45
+ }
46
+ for (const key of [...remaining]) {
47
+ const record = records.find((r) => recordKey(r) === key);
48
+ if (!record) {
49
+ remaining.delete(key);
50
+ continue;
51
+ }
52
+ if (await checkRecord(record)) {
53
+ remaining.delete(key);
54
+ log.success(green(`✓ ${record.type} ${record.hostname} resolves to expected ${record.value}`));
55
+ }
56
+ }
57
+ if (remaining.size > 0)
58
+ await sleep(POLL_INTERVAL_MS);
59
+ }
60
+ s.stop(green("All DNS records resolve."));
61
+ void cyan;
62
+ },
63
+ };
64
+ }
65
+ function recordKey(r) {
66
+ return `${r.type}:${r.hostname}`;
67
+ }
68
+ async function checkRecord(record) {
69
+ try {
70
+ if (record.type === "A") {
71
+ const result = await dns.resolve4(record.hostname);
72
+ return result.includes(record.value);
73
+ }
74
+ if (record.type === "AAAA") {
75
+ const result = await dns.resolve6(record.hostname);
76
+ return result.includes(record.value);
77
+ }
78
+ if (record.type === "CNAME") {
79
+ const result = await dns.resolveCname(record.hostname);
80
+ // CNAME values often have a trailing dot; normalize
81
+ const expected = record.value.replace(/\.$/, "");
82
+ return result.some((v) => v.replace(/\.$/, "") === expected);
83
+ }
84
+ if (record.type === "TXT") {
85
+ const result = await dns.resolveTxt(record.hostname);
86
+ const expected = record.value.replace(/^"|"$/g, "");
87
+ return result.some((arr) => arr.join("") === expected);
88
+ }
89
+ return false;
90
+ }
91
+ catch {
92
+ // ENOTFOUND / SERVFAIL — record not propagated yet
93
+ return false;
94
+ }
95
+ }
96
+ //# sourceMappingURL=manual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/dns/manual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared DNS-adapter interface. Every adapter (Cloudflare / Route53 /
3
+ * Cloud DNS / manual) implements `applyRecords` end-to-end: takes the
4
+ * desired records, makes them real (via API or operator paste), and
5
+ * resolves only when public DNS lookups succeed.
6
+ */
7
+ export interface DnsRecord {
8
+ hostname: string;
9
+ type: "A" | "AAAA" | "CNAME" | "TXT";
10
+ value: string;
11
+ ttl?: number;
12
+ }
13
+ export interface DnsAdapter {
14
+ /** Human-readable name shown in wizard output. */
15
+ readonly name: string;
16
+ /**
17
+ * Make the records exist + verify they resolve. Resolves when
18
+ * `dig <hostname> <type>` returns the expected value globally.
19
+ * Throws on terminal failure (operator should fix + re-run).
20
+ */
21
+ applyRecords(records: DnsRecord[]): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dns/types.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dns/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,42 @@
1
+ export interface GcloudResult {
2
+ ok: boolean;
3
+ stdout: string;
4
+ stderr: string;
5
+ exitCode: number;
6
+ }
7
+ /**
8
+ * Run a gcloud command. Buffered stdout + stderr (max 4 MB each).
9
+ * Throws on spawn failure but NOT on non-zero exit — caller checks `ok`.
10
+ */
11
+ export declare function gcloud(args: string[], opts?: {
12
+ stdin?: string;
13
+ }): Promise<GcloudResult>;
14
+ /**
15
+ * Active gcloud account. Returns `null` when no account is logged in
16
+ * — caller prompts `gcloud auth login`.
17
+ */
18
+ export declare function activeAccount(): Promise<string | null>;
19
+ export interface BillingAccount {
20
+ id: string;
21
+ displayName: string;
22
+ open: boolean;
23
+ }
24
+ export declare function listBillingAccounts(): Promise<BillingAccount[]>;
25
+ export declare function projectExists(projectId: string): Promise<boolean>;
26
+ export declare function createProject(projectId: string, displayName: string): Promise<GcloudResult>;
27
+ export declare function linkBilling(projectId: string, billingAccountId: string): Promise<GcloudResult>;
28
+ export declare function enableApis(projectId: string): Promise<GcloudResult>;
29
+ export declare function serviceAccountExists(projectId: string, saEmail: string): Promise<boolean>;
30
+ export declare function createServiceAccount(projectId: string, accountId: string, displayName: string): Promise<GcloudResult>;
31
+ /**
32
+ * Bind every role the GCP stack provisioner SA needs. Idempotent —
33
+ * gcloud silently no-ops a binding that already exists.
34
+ */
35
+ export declare function grantProvisionerRoles(projectId: string, saEmail: string): Promise<{
36
+ granted: number;
37
+ failed: string[];
38
+ }>;
39
+ export declare function createServiceAccountKey(saEmail: string, outputPath: string): Promise<GcloudResult>;
40
+ export declare const REQUIRED_API_LIST: readonly string[];
41
+ export declare const PROVISIONER_ROLE_LIST: readonly string[];
42
+ //# sourceMappingURL=gcloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcloud.d.ts","sourceRoot":"","sources":["../src/gcloud.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBjG;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK5D;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBrE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGvE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAEjG;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAqBD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAEzE;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW/F;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAWvB;AA6BD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmBhD;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED,eAAO,MAAM,iBAAiB,mBAAgB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,mBAAoB,CAAC"}