@clize/clize 0.10.1 → 0.12.0

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 (47) hide show
  1. package/README.md +9 -11
  2. package/dist/cli.js +207 -373
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.js +1 -12
  5. package/dist/config.js.map +1 -1
  6. package/dist/context.js +32 -50
  7. package/dist/context.js.map +1 -1
  8. package/dist/core/billing.js +21 -17
  9. package/dist/core/billing.js.map +1 -1
  10. package/dist/core/credentials.js +30 -0
  11. package/dist/core/credentials.js.map +1 -0
  12. package/dist/core/dns.js +27 -1
  13. package/dist/core/dns.js.map +1 -1
  14. package/dist/core/domains.js +134 -19
  15. package/dist/core/domains.js.map +1 -1
  16. package/dist/core/reconcile.js +127 -0
  17. package/dist/core/reconcile.js.map +1 -0
  18. package/dist/core/setup.js +3 -26
  19. package/dist/core/setup.js.map +1 -1
  20. package/dist/core/sites.js +72 -20
  21. package/dist/core/sites.js.map +1 -1
  22. package/dist/index.js +54 -90
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/cloudflare.js +4 -0
  25. package/dist/lib/cloudflare.js.map +1 -1
  26. package/dist/lib/crypto.js +57 -0
  27. package/dist/lib/crypto.js.map +1 -0
  28. package/dist/lib/vercel.js +67 -0
  29. package/dist/lib/vercel.js.map +1 -0
  30. package/dist/lib/zone.js +12 -0
  31. package/dist/lib/zone.js.map +1 -1
  32. package/dist/providers/dns/cloudflare.js +8 -0
  33. package/dist/providers/dns/cloudflare.js.map +1 -1
  34. package/dist/providers/index.js +15 -3
  35. package/dist/providers/index.js.map +1 -1
  36. package/dist/providers/registrar/cloudflare.js +12 -22
  37. package/dist/providers/registrar/cloudflare.js.map +1 -1
  38. package/dist/providers/registrar/routing.js +98 -0
  39. package/dist/providers/registrar/routing.js.map +1 -0
  40. package/dist/providers/registrar/vercel.js +134 -0
  41. package/dist/providers/registrar/vercel.js.map +1 -0
  42. package/dist/remote.js +20 -8
  43. package/dist/remote.js.map +1 -1
  44. package/dist/state/file-store.js +7 -0
  45. package/dist/state/file-store.js.map +1 -1
  46. package/package.json +1 -1
  47. package/skills/clize-site-debug/SKILL.md +80 -0
@@ -1,21 +1,49 @@
1
1
  import { chargedAmount, checkMonthlySpendLimit } from "./billing.js";
2
2
  import { ensureBalance } from "./autopay.js";
3
3
  import { auditScope, currentProjectId, PENDING_PROJECT_ID, projectFilter, requireProjectId, } from "./projects.js";
4
- /** Cloudflare 注册商 beta 支持的后缀;其余 checkAvailability 会返回 extension_not_supported_via_api。 */
5
- export const SUPPORTED_TLDS = ["com", "net", "org", "app", "dev", "info", "xyz"];
4
+ import { CLOUDFLARE_TLDS } from "../providers/registrar/cloudflare.js";
5
+ import { nameserversOnVercel } from "../lib/zone.js";
6
+ /** @deprecated 仅 Cloudflare 直注的固定后缀;真实可注册能力(含 Vercel)用 listSupportedTlds(ctx)。 */
7
+ export const SUPPORTED_TLDS = CLOUDFLARE_TLDS;
8
+ /** 列出真实可注册的 TLD:CF 直注的 + 配了 Vercel 时的 500+ 补充(系统按 TLD 自动选注册商)。 */
9
+ export async function listSupportedTlds(ctx) {
10
+ const registrar = ctx.providers.registrar;
11
+ const vercel = typeof registrar.vercelSupportedTlds === "function"
12
+ ? await registrar.vercelSupportedTlds().catch(() => [])
13
+ : [];
14
+ const all = Array.from(new Set([...CLOUDFLARE_TLDS, ...vercel])).sort();
15
+ return {
16
+ total: all.length,
17
+ cloudflareDirect: CLOUDFLARE_TLDS,
18
+ viaVercelCount: vercel.length,
19
+ note: vercel.length
20
+ ? `CF 直注 ${CLOUDFLARE_TLDS.length} 个(同账号、DNS 一体);其余经 Vercel,共 ${all.length} 个。直接 \`clize domain search <name>.<tld>\`,系统自动选注册商并把 NS 迁回 CF。`
21
+ : `Cloudflare 注册商 beta,仅 ${CLOUDFLARE_TLDS.length} 个;配 VERCEL_TOKEN 可解锁 Vercel 的 500+ TLD(.ai/.io/.co…)。`,
22
+ tlds: all,
23
+ };
24
+ }
25
+ /** 本次域名操作是否租户自付(按实际选中的 registrar,缺省回域名默认)。自付 → 不扣 clize 余额、不加价。 */
26
+ function selfPaidFor(ctx, domain, registrar) {
27
+ const id = registrar ?? ctx.providers.registrar.registrarIdFor?.(domain);
28
+ if (id === "vercel")
29
+ return ctx.selfPaid.vercel;
30
+ return ctx.selfPaid.cf; // cloudflare 或单一渠道(裸 CloudflareRegistrar)
31
+ }
6
32
  export async function searchDomains(ctx, domains) {
7
33
  const results = await ctx.providers.registrar.checkAvailability(domains);
8
34
  // 报价 = 用户实际要付的价,必须与扣费一致:
9
- // 托管模式(有余额概念)→ 展示对客价(成本 ×(1+markup));
10
- // 本地自带-CF 模式 展示 Cloudflare 原价(用户直接对 CF 付费,无加价)。
35
+ // self-host / 托管 BYO(租户自付)→ 原价(用户直接对 CF/Vercel 付,无加价);
36
+ // 托管平台代付对客价(成本 ×(1+markup))
11
37
  const balance = await ctx.store.getBalanceUsd(ctx.tenantId);
12
38
  if (balance === null)
13
- return results;
14
- return results.map((r) => ({
15
- ...r,
16
- registrationCost: r.registrationCost != null ? chargedAmount(ctx, r.registrationCost) : r.registrationCost,
17
- renewalCost: r.renewalCost != null ? chargedAmount(ctx, r.renewalCost) : r.renewalCost,
18
- }));
39
+ return results; // self-host:无 clize 余额量纲,原价
40
+ return results.map((r) => selfPaidFor(ctx, r.domain, r.registrar)
41
+ ? r
42
+ : {
43
+ ...r,
44
+ registrationCost: r.registrationCost != null ? chargedAmount(ctx, r.registrationCost) : r.registrationCost,
45
+ renewalCost: r.renewalCost != null ? chargedAmount(ctx, r.renewalCost) : r.renewalCost,
46
+ });
19
47
  }
20
48
  /** 列出当前租户的域名(检出了项目则只列该项目的)。 */
21
49
  export async function listDomains(ctx) {
@@ -33,14 +61,17 @@ export async function registerDomain(ctx, domain, opts = {}) {
33
61
  const autoRenew = opts.autoRenew ?? true;
34
62
  // 0) 项目归属先行解析(fail fast):检出名无效要在扣费 / 注册之前就报,绝不静默落错项目。
35
63
  const projectId = await requireProjectId(ctx);
36
- // 1) 查价 + 可用性
64
+ // 1) 查价 + 可用性(注册商由 RoutingRegistrar 自动选)
37
65
  const [check] = await ctx.providers.registrar.checkAvailability([domain]);
38
66
  if (!check?.available)
39
67
  throw new Error(`域名 ${domain} 不可注册${check?.reason ? `(${check.reason})` : ""}`);
40
68
  const cost = check.registrationCost;
41
- // 2) 月度开销上限(按租户,口径=用户实付:托管=对客价,自带-CF=原价 —— 与 audit 累计口径一致)
69
+ // selfPaid:按 checkAvailability 自动选中的注册商判定(平台代付重叠会比首年价选低的那家)
70
+ const selfPaid = selfPaidFor(ctx, domain, check.registrar);
71
+ // 2) 月度开销上限(口径=用户实付:平台代付=对客价,自付=原价 —— 与 audit 累计口径一致)
42
72
  const balanceForLimit = await ctx.store.getBalanceUsd(ctx.tenantId);
43
- await checkMonthlySpendLimit(ctx, balanceForLimit !== null && cost != null ? chargedAmount(ctx, cost) : cost);
73
+ const userCost = cost == null ? cost : selfPaid ? cost : chargedAmount(ctx, cost);
74
+ await checkMonthlySpendLimit(ctx, userCost);
44
75
  // 3) 演练模式
45
76
  if (ctx.tenant.dryRun) {
46
77
  await ctx.store.appendAudit(ctx.tenantId, {
@@ -62,13 +93,14 @@ export async function registerDomain(ctx, domain, opts = {}) {
62
93
  wouldCost: cost,
63
94
  currency: check.currency,
64
95
  autoRenew,
96
+ registrar: check.registrar,
65
97
  message: "演练模式:未真正注册。设 DRY_RUN=false 后执行。",
66
98
  };
67
99
  }
68
- // 4) 计费闸(托管模式:预付余额 + 加价,先扣后注册;本地 balance=null 跳过)
100
+ // 4) 计费闸(仅「托管 + 平台代付」:预付余额 + 加价,先扣后注册;self-host / BYO 自付跳过)
69
101
  const balanceUsd = balanceForLimit;
70
102
  let charged;
71
- if (balanceUsd !== null && cost != null) {
103
+ if (!selfPaid && balanceUsd !== null && cost != null) {
72
104
  charged = chargedAmount(ctx, cost);
73
105
  // 余额不足时先自动续充(已开自动续充 + 绑卡才触发;否则下面 chargeBalance 抛 402)。
74
106
  await ensureBalance(ctx, charged, { action: "domain_register", detail: { domain } });
@@ -96,19 +128,28 @@ export async function registerDomain(ctx, domain, opts = {}) {
96
128
  // 审计 / 月度开销也按对客实付额(托管=charged,自带-CF=raw cost),不暴露成本。
97
129
  await ctx.store.appendAudit(ctx.tenantId, {
98
130
  action: "domain_register",
99
- detail: { domain, autoRenew, state: result.state },
131
+ detail: { domain, autoRenew, state: result.state, registrar: result.registrar },
100
132
  cost: charged ?? cost,
101
133
  projectId,
102
134
  });
103
- // 6) 注册成功后查 zoneId 并写入注册表(归属当前检出项目)
135
+ // 6) 注册成功后记录(归当前项目)
136
+ // CF 注册的域名 zone 自动在 CF;Vercel 注册的留 Vercel DNS —— NS→CF 全自动被 Vercel 堵死
137
+ // (能写 customNameservers 但激活/关 CDN 不开放给 API,见 DOMAINS.md §Vercel-NS),
138
+ // 故不强迁。需 support@ 邮箱的域名请用 CF 直注的 TLD,或后续 `clize domain import` 手动迁 NS。
139
+ const viaVercel = result.registrar === "vercel";
104
140
  const zoneId = await ctx.cf.findZoneId(domain).catch(() => undefined);
141
+ const status = result.completed ? "registered" : "pending";
105
142
  await ctx.store.upsertIdentity(ctx.tenantId, {
106
143
  domain,
107
- status: result.completed ? "registered" : "pending",
144
+ status,
108
145
  zoneId,
109
146
  registeredAt: new Date().toISOString(),
110
147
  expiresAt: result.expiresAt,
111
148
  autoRenew,
149
+ // 权威来源:回填「谁真正执行了注册」(平台代付比价后可能是 Vercel,而非 TLD 默认的 CF)。
150
+ // 替代 store 对新身份默认的 "cloudflare" —— 让日后 setAutoRenew / 排障能查到真实注册商,
151
+ // 不再依赖 registrarIdFor 的 TLD 静态猜测(result.registrar 缺省时不写,沿用 store 默认)。
152
+ ...(result.registrar ? { registrar: result.registrar } : {}),
112
153
  projectId,
113
154
  });
114
155
  // 返回只给「实付价」(pricePaidUsd),不含 CF 成本 / 毛利。
@@ -118,6 +159,11 @@ export async function registerDomain(ctx, domain, opts = {}) {
118
159
  currency: check.currency,
119
160
  zoneId,
120
161
  autoRenew,
162
+ ...(viaVercel
163
+ ? {
164
+ note: "域名注册在 Vercel、DNS 也在 Vercel。要 support@ 邮箱 → 用 CF 直注的 TLD,或在 Vercel dashboard 手动关 CDN/设 custom NS 后再 `clize domain import`(API 不支持自动迁)。",
165
+ }
166
+ : {}),
121
167
  };
122
168
  }
123
169
  /**
@@ -310,7 +356,11 @@ export async function setAutoRenew(ctx, domain, enabled) {
310
356
  });
311
357
  return { dryRun: true, domain, autoRenew: enabled, message: "演练模式:未真正修改。" };
312
358
  }
313
- await ctx.providers.registrar.setAutoRenew(domain, enabled);
359
+ // 落到真实注册商:从 Identity.registrar(注册时回填的权威来源)取 hint 传给 routing,
360
+ // 替代它的 TLD 静态猜测 —— 重叠 TLD 在 Vercel 注册时会猜错家,CF 不认该域、开关失效。
361
+ // 未纳管 / 旧记录无 registrar → hint 为空,routing 回退 TLD 路由(不劣于改前)。
362
+ const identity = await ctx.store.getIdentity(ctx.tenantId, domain);
363
+ await ctx.providers.registrar.setAutoRenew(domain, enabled, { registrar: identity?.registrar });
314
364
  await ctx.store.appendAudit(ctx.tenantId, {
315
365
  action: "domain_autorenew",
316
366
  detail: { domain, enabled },
@@ -318,6 +368,71 @@ export async function setAutoRenew(ctx, domain, enabled) {
318
368
  await ctx.store.upsertIdentity(ctx.tenantId, { domain, autoRenew: enabled });
319
369
  return { domain, autoRenew: enabled, message: enabled ? "已开启自动续费" : "已关闭自动续费" };
320
370
  }
371
+ /** 读某域 NS 现状:注册商 + 当前委派(zone 源 NS)+ CF 分配的目标 NS。供 `domain ns`(无参)查看 / 排障。 */
372
+ export async function getDomainNameservers(ctx, domain) {
373
+ const d = domain.toLowerCase();
374
+ const id = await ctx.store.getIdentity(ctx.tenantId, d);
375
+ const apex = d.split(".").slice(-2).join(".");
376
+ const zoneId = await ctx.cf.findZoneId(apex).catch(() => undefined);
377
+ const zone = zoneId ? await ctx.cf.getZone(zoneId).catch(() => undefined) : undefined;
378
+ return {
379
+ domain: d,
380
+ registrar: id?.registrar ?? "(未知/未纳管)",
381
+ status: id?.status,
382
+ currentNameservers: zone?.original_name_servers ?? id?.nameservers,
383
+ cloudflareNameservers: zone?.name_servers,
384
+ zoneStatus: zone?.status,
385
+ hint: "改 NS:`clize domain ns <域名> <ns1> <ns2> …`。clize 注册的 Vercel 域名可任意指向;CF 注册域 NS 锁 CF;外部域只能去原注册商改。",
386
+ };
387
+ }
388
+ /**
389
+ * 设某域的 registrar nameservers(显式暴露,非仅 deploy 自动切)。按真实注册商分流:
390
+ * - clize 注册的 Vercel 域 → 程序化改(可指 CF、也可指走;指离 CF 回带 warning);
391
+ * - CF 注册域 → NS 锁 CF(CF Registrar 硬限制),报错引导用 `clize dns`;
392
+ * - 外部接入域 → clize 无原注册商权限,报错给出目标值引导手动改。
393
+ */
394
+ export async function setDomainNameservers(ctx, domain, nameservers) {
395
+ const d = domain.toLowerCase();
396
+ if (!nameservers.length)
397
+ throw new Error("需至少一个 nameserver(只想看现状就别带 ns 参数)");
398
+ const id = await ctx.store.getIdentity(ctx.tenantId, d);
399
+ const reg = ctx.providers.registrar;
400
+ // 外部接入域:clize 没有原注册商权限,改不了 —— 给出目标 NS、引导用户去原注册商改。
401
+ if (id?.status === "external")
402
+ throw new Error(`${d} 是外部接入域,clize 没有它原注册商的权限、无法程序化改 NS。请到你注册该域名的服务商处把 nameservers 改成:${nameservers.join(", ")}。`);
403
+ // 判真实注册商:registrar 字段(注册时回填 / 对账校正)优先,zone 源 NS 指向 vercel-dns 兜底。
404
+ const apex = d.split(".").slice(-2).join(".");
405
+ const zoneId = await ctx.cf.findZoneId(apex).catch(() => undefined);
406
+ const onVercelNs = zoneId
407
+ ? nameserversOnVercel((await ctx.cf.getZone(zoneId).catch(() => undefined))?.original_name_servers)
408
+ : false;
409
+ const isVercel = id?.registrar === "vercel" || onVercelNs;
410
+ if (id?.registrar === "cloudflare" && !isVercel)
411
+ throw new Error(`${d} 注册在 Cloudflare Registrar,其 NS 锁定在 Cloudflare、不能指向第三方(CF Registrar 硬限制)。要自管 DNS 用 \`clize dns\` 直接在 CF 上配记录。`);
412
+ if (!reg.setNameservers)
413
+ throw new Error(`${d} 的注册商不支持程序化改 NS(可能是修复前的存量记录)——先跑注册商对账,或确认它确属 clize 注册。`);
414
+ await reg.setNameservers(d, nameservers);
415
+ await ctx.store
416
+ .appendAudit(ctx.tenantId, {
417
+ action: "domain_set_nameservers",
418
+ detail: { domain: d, nameservers, source: "manual" },
419
+ })
420
+ .catch(() => { });
421
+ await ctx.store.upsertIdentity(ctx.tenantId, { domain: d, nameservers });
422
+ // 指离 CF 警告:没有任一 NS 指向 *.ns.cloudflare.com → 该域上的 clize 邮箱(收信)/ 站点会停。
423
+ const offCloudflare = !nameservers.some((ns) => /\.ns\.cloudflare\.com\.?$/i.test(ns));
424
+ return {
425
+ domain: d,
426
+ nameservers,
427
+ registrar: id?.registrar ?? "vercel",
428
+ message: `已把 ${d} 的 NS 设为:${nameservers.join(", ")}(注册局生效 + 传播需几分钟;验证查 dns.google,别信注册商自家字段)。`,
429
+ ...(offCloudflare
430
+ ? {
431
+ warning: "⚠️ NS 已指离 Cloudflare —— 该域上的 clize 邮箱(收信)和站点会停止工作,直到把 NS 指回 CF 的 nameservers。",
432
+ }
433
+ : {}),
434
+ };
435
+ }
321
436
  /** 从注册商拉取真实已注册域名列表(含到期时间,用于防过期巡检)。 */
322
437
  export function listRegistered(ctx) {
323
438
  return ctx.providers.registrar.listRegistered();
@@ -1 +1 @@
1
- {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/core/domains.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/core/domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { nameserversOnVercel } from "../lib/zone.js";
2
+ /** 只校正「本系统注册」的身份;external(import 接入的外部域)registrar 字段不归我们所有,不动。 */
3
+ const RECONCILABLE = new Set([
4
+ "registered",
5
+ "pending",
6
+ ]);
7
+ /**
8
+ * 单租户对账:用 ctx.tenantId 的 store/registrar/cf 判定并校正 registrar。
9
+ * @param opts.apply 默认 true(真写库);false = 仅预演返回将要改的清单,不落库、不留痕。
10
+ */
11
+ export async function reconcileRegistrars(ctx, opts = {}) {
12
+ const apply = opts.apply ?? true;
13
+ const targets = (await ctx.store.listIdentities(ctx.tenantId)).filter((i) => RECONCILABLE.has(i.status));
14
+ const report = {
15
+ tenantId: ctx.tenantId,
16
+ scanned: targets.length,
17
+ corrected: [],
18
+ unresolved: [],
19
+ applied: apply,
20
+ };
21
+ if (!targets.length)
22
+ return report; // 空租户:不打扰注册商 API
23
+ // 1) 权威信号:注册商真实已注册列表,按归属(registrar 字段)分桶 domain→cloudflare/vercel。
24
+ // listRegistered 失败(无凭证 / 限流)不致命 —— 退化为空桶,后面靠 zone 源 NS 兜底。
25
+ const cf = new Set();
26
+ const vercel = new Set();
27
+ try {
28
+ for (const d of await ctx.providers.registrar.listRegistered()) {
29
+ const name = d.domain?.toLowerCase();
30
+ if (!name)
31
+ continue;
32
+ if (d.registrar === "vercel")
33
+ vercel.add(name);
34
+ else if (d.registrar === "cloudflare")
35
+ cf.add(name);
36
+ }
37
+ }
38
+ catch {
39
+ /* 信号缺失:不阻断,靠 NS 兜底 */
40
+ }
41
+ // 2) 逐域判真实注册商:权威列表优先;判不了再用 zone 源 NS 兜底(只在现值非 vercel 时翻成
42
+ // vercel —— 对准 bug 方向,避免把已正确 / 不相干的记录乱翻)。
43
+ for (const id of targets) {
44
+ const domain = id.domain.toLowerCase();
45
+ const inVercel = vercel.has(domain);
46
+ const inCf = cf.has(domain);
47
+ let verdict;
48
+ if (inVercel && !inCf)
49
+ verdict = { to: "vercel", via: "registry" };
50
+ else if (inCf && !inVercel)
51
+ verdict = { to: "cloudflare", via: "registry" };
52
+ // 两边都在(理论上不该)/ 都不在 → 权威列表判不了;仅当现值非 vercel 时用 NS 兜底翻 vercel。
53
+ if (!verdict && id.registrar !== "vercel" && (await zoneOnVercelNs(ctx, domain)))
54
+ verdict = { to: "vercel", via: "nameserver" };
55
+ if (!verdict) {
56
+ report.unresolved.push(domain);
57
+ continue;
58
+ }
59
+ if (verdict.to === id.registrar)
60
+ continue; // 已正确:幂等不写
61
+ const correction = {
62
+ tenantId: ctx.tenantId,
63
+ domain,
64
+ from: id.registrar,
65
+ to: verdict.to,
66
+ via: verdict.via,
67
+ };
68
+ report.corrected.push(correction);
69
+ if (apply) {
70
+ await ctx.store.upsertIdentity(ctx.tenantId, { domain, registrar: verdict.to });
71
+ await ctx.store
72
+ .appendAudit(ctx.tenantId, {
73
+ action: "domain_registrar_reconcile",
74
+ detail: { domain, from: correction.from, to: verdict.to, via: verdict.via },
75
+ })
76
+ .catch(() => { }); // 留痕失败不阻断校正
77
+ }
78
+ }
79
+ return report;
80
+ }
81
+ /** best-effort:该域名的 CF zone「源 NS」是否指向 Vercel(查不到 zone / 出错 → false,不影响其它域)。 */
82
+ async function zoneOnVercelNs(ctx, domain) {
83
+ try {
84
+ const apex = domain.split(".").slice(-2).join(".");
85
+ const zoneId = await ctx.cf.findZoneId(apex);
86
+ if (!zoneId)
87
+ return false;
88
+ const zone = await ctx.cf.getZone(zoneId);
89
+ return nameserversOnVercel(zone.original_name_servers);
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ }
95
+ /**
96
+ * 多租户对账编排:按租户维度遍历,每租户用 buildCtx 建自己的 ctx(各查各账号),逐租户聚合。
97
+ * store 无关 —— 调用方把「如何按 tenantId 建 ctx」注入进来(worker 用 createCloudContext + BYO 凭证;
98
+ * 测试可用同一个 FileStore 给不同 tenantId 各建 ctx)。单租户失败不阻断其它租户(错误进该租户 report)。
99
+ */
100
+ export async function reconcileTenants(opts) {
101
+ const apply = opts.apply ?? true;
102
+ const reports = [];
103
+ for (const tenantId of opts.tenantIds) {
104
+ try {
105
+ const ctx = await opts.buildCtx(tenantId);
106
+ reports.push(await reconcileRegistrars(ctx, { apply }));
107
+ }
108
+ catch (e) {
109
+ reports.push({
110
+ tenantId,
111
+ scanned: 0,
112
+ corrected: [],
113
+ unresolved: [],
114
+ applied: apply,
115
+ error: e instanceof Error ? e.message : String(e),
116
+ });
117
+ }
118
+ }
119
+ return {
120
+ tenants: reports.length,
121
+ scanned: reports.reduce((n, r) => n + r.scanned, 0),
122
+ correctedCount: reports.reduce((n, r) => n + r.corrected.length, 0),
123
+ applied: apply,
124
+ reports,
125
+ };
126
+ }
127
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/core/reconcile.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,12 @@
1
- // 上手:login(保存凭证到本地)+ init(绑定当前项目)。
2
- // 鉴权 M1 走"自带 token";login 把它存进 ~/.clize/config.json,免去每次配环境变量,
3
- // 也让官网的 `clize login` / `clize init` 成为真命令。context.createLocalContext 会读这个文件。
1
+ // 上手:login(保存 clize key 到本地)+ init(绑定当前项目)。
2
+ // login clize key 存进 ~/.clize/config.json,免去每次配环境变量;
3
+ // remote.loadRemote() 读这个文件判定登录态(纯托管下 CLI/MCP 是瘦客户端)。
4
4
  import fs from "node:fs";
5
5
  import os from "node:os";
6
6
  import path from "node:path";
7
7
  export function configPath() {
8
8
  return path.join(os.homedir(), ".clize", "config.json");
9
9
  }
10
- /** 保存访问凭证到 ~/.clize/config.json(token + 账户 id),仅本机可读。 */
11
- export function saveLogin(token, account) {
12
- const p = configPath();
13
- fs.mkdirSync(path.dirname(p), { recursive: true });
14
- let cfg = {};
15
- try {
16
- cfg = JSON.parse(fs.readFileSync(p, "utf8"));
17
- }
18
- catch {
19
- /* 首次,新建 */
20
- }
21
- cfg.CLOUDFLARE_API_TOKEN = token;
22
- if (account)
23
- cfg.CLOUDFLARE_ACCOUNT_ID = account;
24
- fs.writeFileSync(p, JSON.stringify(cfg, null, 2));
25
- try {
26
- fs.chmodSync(p, 0o600);
27
- }
28
- catch {
29
- /* 平台不支持则忽略 */
30
- }
31
- return { saved: p, message: "凭证已保存(仅本机可读)。跑 `clize check` 验证连通性。" };
32
- }
33
10
  /** 保存托管(remote)模式凭证:clize API URL + clize key → 切到托管模式。 */
34
11
  export function saveRemoteLogin(apiUrl, apiKey) {
35
12
  const p = configPath();
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { assertDomainInProject } from "./projects.js";
8
+ import { nameserversOnVercel } from "../lib/zone.js";
8
9
  const SITE_WORKER = "clize-handle-site";
9
10
  const SITE_KV_TITLE = "clize-sites";
10
11
  /** 共享站点 worker 源码:KV 取 `${host}${path}`,SPA/根回退 index.html,无内容→占位页。 */
@@ -79,18 +80,75 @@ export async function ensureSiteInfra(ctx) {
79
80
  await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/workers/scripts/${SITE_WORKER}`, form);
80
81
  return { worker: SITE_WORKER, kvNamespaceId: kvId, message: "站点基建就绪(共享 worker + KV)" };
81
82
  }
82
- /** 把一个域绑定到共享站点 worker(确保基建在;幂等)。用于 claim 后让 handle 立刻显示占位页。 */
83
+ /**
84
+ * 确保 host 的 apex zone 在 CF 且 active —— 绑 custom domain 到站点 worker 的前提。
85
+ * zone 不存在则建;pending(NS 没委派给 CF)且域名是 Vercel 注册的 → 自动把 NS 切到 CF + 催激活。
86
+ * 仍 pending(注册局/DNS 传播未完成,或非 Vercel 域名 NS 没指 CF)→ 明确报错,绝不静默放过。
87
+ */
88
+ export async function ensureZoneActiveForHandle(ctx, host) {
89
+ const apex = host.toLowerCase().split(".").slice(-2).join(".");
90
+ const id = await ctx.cf.findZoneId(apex);
91
+ let zone = id ? await ctx.cf.getZone(id) : await ctx.cf.createZone(apex);
92
+ if (zone.status === "active")
93
+ return zone.id;
94
+ // pending:NS 没委派给 CF。该域名注册在 Vercel → 自动切 NS 到 CF 分配的 name_servers + 催激活。
95
+ const reg = ctx.providers.registrar;
96
+ const cfNs = zone.name_servers ?? [];
97
+ // 判「是不是 Vercel 域名」不能只信 registrarIdFor —— 它是「按 TLD 该路由给谁」的静态判断:
98
+ // 重叠 TLD(com/app/dev/info/xyz…)在平台代付下比价后可能实际注册在 Vercel,却被它判成
99
+ // cloudflare,于是下面切 NS 整段被跳过、zone 永远 pending(diagramgen.app 即此坑)。
100
+ // 再叠加「zone 源 NS 是否指向 vercel-dns.com」这个真实世界信号兜底,对存量域名也成立。
101
+ const onVercelNs = nameserversOnVercel(zone.original_name_servers);
102
+ const isVercel = reg.registrarIdFor?.(apex) === "vercel" || onVercelNs;
103
+ if (isVercel && reg.setNameservers && cfNs.length) {
104
+ await reg.setNameservers(apex, cfNs);
105
+ // 留痕:audit 里能看到 NS 真的切过(此前切 NS 不记录,排障时只见买域、不见切 NS)。
106
+ await ctx.store
107
+ .appendAudit(ctx.tenantId, {
108
+ action: "domain_set_nameservers",
109
+ detail: { domain: apex, nameservers: cfNs, reason: onVercelNs ? "original_ns_vercel" : "registrar_vercel" },
110
+ })
111
+ .catch(() => { }); // best-effort:留痕失败不阻断切 NS / 部署
112
+ await ctx.cf.activationCheck(zone.id).catch(() => { }); // 催一下;失败不致命(CF 也会自动轮询)
113
+ zone = await ctx.cf.getZone(zone.id); // 重查:.app 等注册局 NS 生效快,通常此刻已 active
114
+ if (zone.status === "active")
115
+ return zone.id;
116
+ }
117
+ const nsHint = cfNs.length ? cfNs.join(", ") : "见 CF dashboard";
118
+ throw new Error(isVercel
119
+ ? `已把 ${apex} 的 NS 切到 Cloudflare(${nsHint}),但 zone 仍 pending —— ` +
120
+ `注册局/DNS 传播需几分钟,稍后重跑 deploy 即可上线(站点内容已在 KV,不会丢)。`
121
+ : `${apex} 的 CF zone 是 ${zone.status}:NS 没指向 Cloudflare。` +
122
+ `请到注册商把 NS 改成 ${nsHint},生效后重跑 deploy。`);
123
+ }
124
+ /** 绑定 host → 共享站点 worker。已绑定=幂等忽略;其他错误抛出,不再静默吞掉(避免"假成功")。 */
125
+ async function bindHandleDomain(ctx, host, zoneId) {
126
+ try {
127
+ await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/workers/domains`, {
128
+ hostname: host.toLowerCase(),
129
+ service: SITE_WORKER,
130
+ environment: "production",
131
+ zone_id: zoneId,
132
+ });
133
+ }
134
+ catch (e) {
135
+ const msg = e instanceof Error ? e.message : String(e);
136
+ if (/already|exist|duplicate|conflict/i.test(msg))
137
+ return; // 已绑定 = 幂等成功
138
+ throw new Error(`绑定 ${host} 到站点 worker 失败:${msg}`);
139
+ }
140
+ }
141
+ /** 把一个域绑定到共享站点 worker(确保基建在)。claim 后让 handle 显示占位页 —— 此阶段绑不上不致命。 */
83
142
  export async function bindHandleSite(ctx, host) {
84
143
  await ensureSiteInfra(ctx);
85
- const zoneId = await ctx.cf.findZoneId(host.split(".").slice(-2).join("."));
86
- await ctx.cf
87
- .request("PUT", `/accounts/${ctx.cf.accountId}/workers/domains`, {
88
- hostname: host.toLowerCase(),
89
- service: SITE_WORKER,
90
- environment: "production",
91
- zone_id: zoneId,
92
- })
93
- .catch(() => { });
144
+ // claim 占位:尽力绑(自动切 NS);NS 还在传播等导致绑不上不阻断 —— 真正 deploy 时会严格绑定并报错。
145
+ try {
146
+ const zoneId = await ensureZoneActiveForHandle(ctx, host);
147
+ await bindHandleDomain(ctx, host, zoneId);
148
+ }
149
+ catch {
150
+ /* 占位绑定失败不阻断 claim;deployFilesToHandle 会在部署时严格处理 */
151
+ }
94
152
  }
95
153
  function walk(dir) {
96
154
  const out = [];
@@ -134,16 +192,10 @@ export async function deployFilesToHandle(ctx, handle, files) {
134
192
  for (let i = 0; i < items.length; i += 5000) {
135
193
  await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/storage/kv/namespaces/${kvId}/bulk`, items.slice(i, i + 5000));
136
194
  }
137
- // 绑定 host → 共享 worker(幂等;zone = host 的顶级二段,如 clize.app)
138
- const zoneId = await ctx.cf.findZoneId(host.split(".").slice(-2).join("."));
139
- await ctx.cf
140
- .request("PUT", `/accounts/${ctx.cf.accountId}/workers/domains`, {
141
- hostname: host,
142
- service: SITE_WORKER,
143
- environment: "production",
144
- zone_id: zoneId,
145
- })
146
- .catch(() => { }); // 已绑定则忽略
195
+ // 绑定 host → 共享 worker:先确保 apex zone CF active(Vercel 注册域名自动切 NS→CF),
196
+ // 再绑 custom domain。绑定失败不再静默吞掉 —— 原 .catch(() => {}) 会把"域名没接上"伪装成成功。
197
+ const zoneId = await ensureZoneActiveForHandle(ctx, host);
198
+ await bindHandleDomain(ctx, host, zoneId);
147
199
  await ctx.store.appendAudit(ctx.tenantId, {
148
200
  action: "handle_site_deploy",
149
201
  detail: { host, files: files.length },