@clize/clize 0.11.0 → 0.13.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.
@@ -214,4 +214,32 @@ export async function assertDomainInProject(ctx, domain, action) {
214
214
  throw new ClizeError(`${domain} 属于项目 "${ownerSlug}",当前检出的是 "${ctx.projectSlug}" —— 防串台,已拦下(${action})。` +
215
215
  `确认要跨项目操作就显式指定:加 -p ${ownerSlug},或 cd 到该项目目录(clize use ${ownerSlug})。`, 409);
216
216
  }
217
+ /** deploy 专用的项目归属解析:「跟随域名」—— 部署目标域全局唯一、所属由服务端为真相,
218
+ * 故按它真实所属项目走,而不是死守可能陈旧的本地 clize.json 检出。
219
+ * - 未检出 / 该域无身份记录 → 不拦,返回域当前所属(可能为 undefined)。
220
+ * - 检出来自 clize.json(checkout)却与域所属不符 → 不报错,自动跟随域名(消除 stale clize.json 反复 409),
221
+ * 标 rerouted 让上层回写本地并提示。
222
+ * - 检出来自显式 -p(flag)且与域所属不符 → 仍报 409(用户明确点名了项目,对不上值得拦)。
223
+ * 返回的 project(域真实所属 slug)供 CLI 回写 clize.json,根治本地↔远端漂移。 */
224
+ export async function resolveDeployProject(ctx, domain) {
225
+ const identity = await ctx.store.getIdentity(ctx.tenantId, domain.toLowerCase());
226
+ const def = await ctx.store.ensureDefaultProject(ctx.tenantId);
227
+ const ownerId = identity ? (identity.projectId ?? def.id) : undefined;
228
+ const ownerSlug = ownerId
229
+ ? ((await ctx.store.listProjects(ctx.tenantId)).find((p) => p.id === ownerId)?.slug ?? "default")
230
+ : undefined;
231
+ if (!ctx.projectSlug)
232
+ return { project: ownerSlug, rerouted: false };
233
+ const checked = await currentProjectId(ctx); // flag 不存在在此抛 404(typo 防线不变)
234
+ if (!checked || !identity)
235
+ return { project: ownerSlug ?? ctx.projectSlug, rerouted: false };
236
+ if (ownerId === checked)
237
+ return { project: ownerSlug, rerouted: false };
238
+ // 检出与域所属不符:
239
+ if (ctx.projectSlugSource === "flag")
240
+ throw new ClizeError(`${domain} 属于项目 "${ownerSlug}",但 -p 点名了 "${ctx.projectSlug}" —— 显式指定的项目对不上,已拦下(deploy)。` +
241
+ `要部署到 ${domain} 就去掉 -p(按域自动路由),或改 -p ${ownerSlug}。`, 409);
242
+ // 来自 clize.json 的陈旧检出 → 跟随域名,自动路由,不打断。
243
+ return { project: ownerSlug, rerouted: true, checkout: ctx.projectSlug };
244
+ }
217
245
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/core/projects.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,mCAAmC;AACnC,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC;SACL,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;8CAE8C;AAC9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,IAAqC;IAErC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;yDAEyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD;;;6CAG6C;AAC7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAC/B,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACnB,IAAI,GAAG,CAAC,iBAAiB,KAAK,UAAU;QAAE,OAAO,kBAAkB,CAAC;IACpE,MAAM,IAAI,UAAU,CAClB,OAAO,GAAG,CAAC,WAAW,4BAA4B;QAChD,kDAAkD,EACpD,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;;sDAGsD;AACtD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC,CAAC,gCAAgC;IACxE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;IAC1D,IAAI,EAAE,IAAI,EAAE,KAAK,kBAAkB;QAAE,OAAO,EAAE,CAAC;IAC/C,wDAAwD;IACxD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE;QACtD,IAAI,EAAE,GAAG,CAAC,WAAW;QACrB,IAAI,EAAE,GAAG,CAAC,WAAW;KACtB,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACxC,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE;KAC5C,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY;IAC9C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,CAAC,SAAkB,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AACnE,CAAC;AAED;4FAC4F;AAC5F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY;IAC3C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,CAAC,OAAO,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;sBACsB;AACtB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,MAAc,EACd,UAAkB;IAElB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,MAAM,GACV,UAAU,KAAK,SAAS;QACtB,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpD,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM;QACT,MAAM,IAAI,UAAU,CAAC,OAAO,UAAU,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC;IAC5C,IAAI,MAAM,KAAK,MAAM,CAAC,EAAE;QACtB,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;IAC1F,MAAM,QAAQ,GACZ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC;IAC/F,MAAM,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACxC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE;KACvD,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,MAAM,CAAC,IAAI;QACf,OAAO,EAAE,MAAM,CAAC,UAAU,MAAM,CAAC,IAAI,sBAAsB;KAC5D,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,IAAY,EACZ,KAAuC;IAEvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAChD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,QAAQ,GACZ,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpD,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,IAAI,2BAA2B,EAAE,GAAG,CAAC,CAAC;IACjF,IAAI,OAAO,IAAI,IAAI,KAAK,SAAS;QAC/B,MAAM,IAAI,UAAU,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;IAC7E,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,IAAI,UAAU,CAAC,OAAO,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACxC,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;KACrD,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI;YAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,IAAI,sBAAsB,GAAG,CAAC,IAAI,EAAE,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,IAAY,EACZ,OAA0B,EAAE;IAE5B,IAAI,IAAI,KAAK,SAAS;QACpB,MAAM,IAAI,UAAU,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,IAAI,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAC1E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,CACjC,CAAC;IACF,IAAI,OAA2B,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,MAAM,IAAI,UAAU,CAClB,OAAO,IAAI,QAAQ,OAAO,CAAC,MAAM,QAAQ,IAAI,CAAC,MAAM,UAAU;gBAC5D,iDAAiD,EACnD,GAAG,CACJ,CAAC;QACJ,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,SAAS;YACrB,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpD,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,IAAI,OAAO,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,OAAO;YACrB,MAAM,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,IAAI;YAClB,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxF,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACxC,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;KACtF,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;YACnE,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,SAAS,IAAI,KAAK,OAAO,CAAC,MAAM,QAAQ,IAAI,CAAC,MAAM,eAAe,OAAO,yBAAyB;YACpG,CAAC,CAAC,UAAU,IAAI,yBAAyB;KAC5C,CAAC;AACJ,CAAC;AAED;;qDAEqD;AACrD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAY,EACZ,MAAc,EACd,MAAc;IAEd,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO;IAC7B,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB;IACrE,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC;IACzC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO;IAC5B,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC;IAC3C,MAAM,IAAI,UAAU,CAClB,GAAG,MAAM,UAAU,SAAS,aAAa,GAAG,CAAC,WAAW,gBAAgB,MAAM,IAAI;QAChF,sBAAsB,SAAS,0BAA0B,SAAS,IAAI,EACxE,GAAG,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/core/projects.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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"}
@@ -0,0 +1,54 @@
1
+ import { resolveZone } from "../lib/zone.js";
2
+ const PHASE = "http_request_dynamic_redirect";
3
+ const TAG = "clize-canonical"; // description 前缀:幂等识别 / 替换 clize 自己下的规则,不动别人的
4
+ /** 取 apex(去 www. + 末两段)。clize 主力单级 TLD;多级 TLD(co.uk 等)不在主力范围。 */
5
+ function apexOf(domain) {
6
+ return domain.toLowerCase().replace(/^www\./, "").split(".").slice(-2).join(".");
7
+ }
8
+ /** 在 apex 的 CF zone 上配 www↔apex 的 301 规范化重定向。默认 www→apex;toWww 反向(apex→www)。 */
9
+ export async function canonicalizeDomain(ctx, domain, opts = {}) {
10
+ const apex = apexOf(domain);
11
+ const zoneId = await resolveZone(ctx, apex); // 未托管 CF 会抛清晰错误
12
+ const from = opts.toWww ? apex : `www.${apex}`;
13
+ const to = opts.toWww ? `www.${apex}` : apex;
14
+ // 把 from 主机的请求 301 到 to,保留路径(target_url 表达式)+ query(preserve_query_string)。
15
+ const rule = {
16
+ action: "redirect",
17
+ action_parameters: {
18
+ from_value: {
19
+ status_code: 301,
20
+ target_url: { expression: `concat("https://${to}", http.request.uri.path)` },
21
+ preserve_query_string: true,
22
+ },
23
+ },
24
+ expression: `http.host eq "${from}"`,
25
+ description: `${TAG}:${from}->${to}`,
26
+ enabled: true,
27
+ };
28
+ // 读现有 entrypoint(该 phase 从未配过 → 404,视作空)。
29
+ let existing = [];
30
+ try {
31
+ const ep = await ctx.cf.request("GET", `/zones/${zoneId}/rulesets/phases/${PHASE}/entrypoint`);
32
+ existing = ep.rules ?? [];
33
+ }
34
+ catch {
35
+ existing = []; // 没有 entrypoint ruleset(该 zone 从未配过 dynamic redirect)
36
+ }
37
+ // 幂等 + 不踩别人:去掉 clize 之前下的同向规则(带 TAG 且同表达式),其余原样保留(连 id,PUT 时 CF 保留更新)。
38
+ const kept = existing.filter((r) => !(r.description?.startsWith(`${TAG}:`) && r.expression === rule.expression));
39
+ await ctx.cf.request("PUT", `/zones/${zoneId}/rulesets/phases/${PHASE}/entrypoint`, {
40
+ rules: [rule, ...kept],
41
+ });
42
+ await ctx.store
43
+ .appendAudit(ctx.tenantId, { action: "domain_canonicalize", detail: { domain: apex, from, to } })
44
+ .catch(() => { }); // 留痕 best-effort,失败不阻断
45
+ return {
46
+ domain: apex,
47
+ from,
48
+ to,
49
+ rule: `301 ${from} → ${to}(保留路径 + query string)`,
50
+ message: `已在 Cloudflare 配好 ${from} → ${to} 的 301 规范化(Single Redirect)。` +
51
+ `验证:curl -sI https://${from}/ 看 location。`,
52
+ };
53
+ }
54
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/core/redirect.ts"],"names":[],"mappings":"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"}
@@ -170,4 +170,34 @@ export function projectSender() {
170
170
  return { from: `support@mail.${p.domain}`, replyTo: `support@${p.domain}` };
171
171
  return undefined;
172
172
  }
173
+ /** deploy 成功后把服务端回的真实 project(及自定义域)回写就近 clize.json,根治本地↔远端漂移
174
+ * (反复 409 / 手动 -p 的根因)。保守起见:只更新已存在的 clize.json,不主动新建文件;
175
+ * best-effort,失败不影响 deploy 结果展示。<slug>.clize.app handle 站不写 domain 字段(它走 handle 语义)。 */
176
+ export function recordDeploy(result) {
177
+ const r = (result ?? {});
178
+ const project = typeof r.project === "string" && r.project ? r.project : undefined;
179
+ const hostRaw = typeof r.host === "string" ? r.host : typeof r.domain === "string" ? r.domain : undefined;
180
+ const domain = hostRaw && !hostRaw.toLowerCase().endsWith("." + HANDLE_ROOT) ? hostRaw.toLowerCase() : undefined;
181
+ if (!project && !domain)
182
+ return;
183
+ const f = findProjectFile();
184
+ if (!f)
185
+ return; // 没有 clize.json 就不主动建(一次性 deploy --domain 不留痕)
186
+ let existing = {};
187
+ try {
188
+ existing = JSON.parse(fs.readFileSync(f, "utf8"));
189
+ }
190
+ catch {
191
+ return; // 文件损坏不覆盖
192
+ }
193
+ const next = { ...existing };
194
+ if (project)
195
+ next.project = project;
196
+ if (domain)
197
+ next.domain = domain;
198
+ next.updatedAt = new Date().toISOString();
199
+ if (!next.createdAt)
200
+ next.createdAt = new Date().toISOString();
201
+ fs.writeFileSync(f, JSON.stringify(next, null, 2));
202
+ }
173
203
  //# sourceMappingURL=setup.js.map
@@ -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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"}
@@ -4,11 +4,16 @@
4
4
  // 不用 per-handle worker、不用被 token 拦的 wildcard 路由。
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
- import { assertDomainInProject } from "./projects.js";
7
+ import { resolveDeployProject } 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
- /** 共享站点 worker 源码:KV 取 `${host}${path}`,SPA/根回退 index.html,无内容→占位页。 */
11
- const SITE_WORKER_SRC = `
11
+ /** 共享站点 worker 源码。KV 取 `${host}${path}` 命中即返;
12
+ * 精确 miss 时区分两种情况(关键:别把「路径不存在」当首页返 200 → soft-404):
13
+ * ① 该 host 没 index.html(站点没部署)→ 占位页;
14
+ * ② 已部署但路径不存在 → 按 not-found 模式处理:显式 per-host 配置(`::cfg::<host>`)优先,
15
+ * 否则自动判定 —— 有 404.html → 多页站 → 返 404.html + 真 404 状态;没有 → 当 SPA → 回退 index.html(200)。 */
16
+ export const SITE_WORKER_SRC = `
12
17
  export default {
13
18
  async fetch(request, env) {
14
19
  const url = new URL(request.url);
@@ -20,11 +25,28 @@ export default {
20
25
  const ct = (hit.metadata && hit.metadata.ct) || "application/octet-stream";
21
26
  return new Response(hit.value, { headers: { "content-type": ct, "cache-control": "public, max-age=300" } });
22
27
  }
28
+ // 精确路径 miss。先分「站点没部署(占位页)」与「已部署但路径不存在(真 404)」。
23
29
  const idx = await env.SITES.getWithMetadata(host + "/index.html", { type: "arrayBuffer" });
24
- if (idx && idx.value) {
30
+ if (!idx || !idx.value) {
31
+ return new Response(placeholder(host), { headers: { "content-type": "text/html; charset=utf-8" } });
32
+ }
33
+ // 已部署:未知路径处理。显式配置 spa/404-page/none 优先;否则按有无 404.html 自动判定。
34
+ const cfg = await env.SITES.get("::cfg::" + host, { type: "json" });
35
+ const set = cfg && cfg.notFound;
36
+ let mode = (set === "spa" || set === "404-page" || set === "none") ? set : null;
37
+ let nf = null;
38
+ if (mode !== "spa") {
39
+ nf = await env.SITES.getWithMetadata(host + "/404.html", { type: "arrayBuffer" });
40
+ if (!mode) mode = (nf && nf.value) ? "404-page" : "spa";
41
+ }
42
+ if (mode === "spa") {
25
43
  return new Response(idx.value, { headers: { "content-type": "text/html; charset=utf-8" } });
26
44
  }
27
- return new Response(placeholder(host), { headers: { "content-type": "text/html; charset=utf-8" } });
45
+ if (mode === "404-page" && nf && nf.value) {
46
+ const ct = (nf.metadata && nf.metadata.ct) || "text/html; charset=utf-8";
47
+ return new Response(nf.value, { status: 404, headers: { "content-type": ct } });
48
+ }
49
+ return new Response(notFound(host, p), { status: 404, headers: { "content-type": "text/html; charset=utf-8" } });
28
50
  }
29
51
  };
30
52
  function placeholder(host) {
@@ -33,6 +55,12 @@ function placeholder(host) {
33
55
  '.b{text-align:center}.h{font-size:13px;color:#8A8F98;font-family:ui-monospace,monospace}.t{margin-top:10px;font-size:22px;font-weight:600}.s{margin-top:8px;font-size:13px;color:#8A8F98;font-family:ui-monospace,monospace}</style></head>'+
34
56
  '<body><div class="b"><div class="h">'+host+'</div><div class="t">已用 clize 占下</div><div class="s">clize deploy ./site --domain '+host+'</div></div></body></html>';
35
57
  }
58
+ function notFound(host, p) {
59
+ return '<!doctype html><html lang="zh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="robots" content="noindex"><title>404 · '+host+'</title>'+
60
+ '<style>body{margin:0;height:100vh;display:grid;place-items:center;background:#050506;color:#EDEDEF;font-family:-apple-system,system-ui,sans-serif}'+
61
+ '.b{text-align:center}.c{font-size:54px;font-weight:700;letter-spacing:-.02em}.t{margin-top:6px;font-size:15px;color:#8A8F98}.s{margin-top:14px;font-size:12px;color:#5A5F68;font-family:ui-monospace,monospace}a{color:#8A8F98}</style></head>'+
62
+ '<body><div class="b"><div class="c">404</div><div class="t">页面不存在</div><div class="s">'+host+p+'</div><div class="s"><a href="/">← 返回首页</a></div></div></body></html>';
63
+ }
36
64
  `;
37
65
  const CT = {
38
66
  ".html": "text/html; charset=utf-8",
@@ -84,18 +112,30 @@ export async function ensureSiteInfra(ctx) {
84
112
  * zone 不存在则建;pending(NS 没委派给 CF)且域名是 Vercel 注册的 → 自动把 NS 切到 CF + 催激活。
85
113
  * 仍 pending(注册局/DNS 传播未完成,或非 Vercel 域名 NS 没指 CF)→ 明确报错,绝不静默放过。
86
114
  */
87
- async function ensureZoneActiveForHandle(ctx, host) {
115
+ export async function ensureZoneActiveForHandle(ctx, host) {
88
116
  const apex = host.toLowerCase().split(".").slice(-2).join(".");
89
117
  const id = await ctx.cf.findZoneId(apex);
90
118
  let zone = id ? await ctx.cf.getZone(id) : await ctx.cf.createZone(apex);
91
119
  if (zone.status === "active")
92
120
  return zone.id;
93
- // pending:NS 没委派给 CFVercel 注册的域名 → 自动切 NS 到 CF 分配的 name_servers + 催激活。
121
+ // pending:NS 没委派给 CF。该域名注册在 Vercel → 自动切 NS 到 CF 分配的 name_servers + 催激活。
94
122
  const reg = ctx.providers.registrar;
95
123
  const cfNs = zone.name_servers ?? [];
96
- const isVercel = reg.registrarIdFor?.(apex) === "vercel";
124
+ // 判「是不是 Vercel 域名」不能只信 registrarIdFor —— 它是「按 TLD 该路由给谁」的静态判断:
125
+ // 重叠 TLD(com/app/dev/info/xyz…)在平台代付下比价后可能实际注册在 Vercel,却被它判成
126
+ // cloudflare,于是下面切 NS 整段被跳过、zone 永远 pending(diagramgen.app 即此坑)。
127
+ // 再叠加「zone 源 NS 是否指向 vercel-dns.com」这个真实世界信号兜底,对存量域名也成立。
128
+ const onVercelNs = nameserversOnVercel(zone.original_name_servers);
129
+ const isVercel = reg.registrarIdFor?.(apex) === "vercel" || onVercelNs;
97
130
  if (isVercel && reg.setNameservers && cfNs.length) {
98
131
  await reg.setNameservers(apex, cfNs);
132
+ // 留痕:audit 里能看到 NS 真的切过(此前切 NS 不记录,排障时只见买域、不见切 NS)。
133
+ await ctx.store
134
+ .appendAudit(ctx.tenantId, {
135
+ action: "domain_set_nameservers",
136
+ detail: { domain: apex, nameservers: cfNs, reason: onVercelNs ? "original_ns_vercel" : "registrar_vercel" },
137
+ })
138
+ .catch(() => { }); // best-effort:留痕失败不阻断切 NS / 部署
99
139
  await ctx.cf.activationCheck(zone.id).catch(() => { }); // 催一下;失败不致命(CF 也会自动轮询)
100
140
  zone = await ctx.cf.getZone(zone.id); // 重查:.app 等注册局 NS 生效快,通常此刻已 active
101
141
  if (zone.status === "active")
@@ -161,14 +201,27 @@ export function readDirFiles(dir) {
161
201
  ct: ctOf(f),
162
202
  }));
163
203
  }
204
+ /** deploy 输出里对「未知路径如何处理」的人话说明(P1 #4:让做 SEO 的人能预期 404 行为)。 */
205
+ function notFoundNote(mode, has404) {
206
+ if (mode === "spa")
207
+ return ";未知路径回退首页(SPA)";
208
+ if (mode === "404-page")
209
+ return has404 ? ";未知路径返回 404.html(真 404)" : ";未知路径返回极简 404(本次未含 404.html)";
210
+ if (mode === "none")
211
+ return ";未知路径返回极简 404";
212
+ return has404
213
+ ? ";检测到 404.html → 未知路径返回真 404(SEO 友好)"
214
+ : ";未知路径回退首页(无 404.html;要真 404 就放一个 404.html,或加 --not-found 404-page)";
215
+ }
164
216
  /** 核心:把已读好的文件写进 KV(`host/relpath`)+ 绑定该域到共享 worker。无 fs,本地与云上共用。 */
165
- export async function deployFilesToHandle(ctx, handle, files) {
217
+ export async function deployFilesToHandle(ctx, handle, files, opts = {}) {
166
218
  const host = handle.toLowerCase();
167
219
  if (!files.length)
168
220
  throw new Error("没有文件可部署");
169
- // 串台护栏:检出项目时,目标域必须属于当前项目(防把 A 项目的站部到 B 项目的域上)
170
- await assertDomainInProject(ctx, host, "deploy");
171
- // 自带 bootstrap:确保共享 worker + KV 就位(幂等)
221
+ // 项目归属:deploy 跟随域名(目标域全局唯一,所属由服务端为真相)——
222
+ // 陈旧的 clize.json 检出不再 409,自动按域所属部署;只有显式 -p 点名不符才拦下。
223
+ const routed = await resolveDeployProject(ctx, host);
224
+ // 自带 bootstrap:确保共享 worker + KV 就位(幂等;也借此滚动 worker 新逻辑)
172
225
  const kvId = (await ensureSiteInfra(ctx)).kvNamespaceId;
173
226
  const items = files.map((f) => ({
174
227
  key: host + (f.path.startsWith("/") ? f.path : "/" + f.path),
@@ -179,19 +232,36 @@ export async function deployFilesToHandle(ctx, handle, files) {
179
232
  for (let i = 0; i < items.length; i += 5000) {
180
233
  await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/storage/kv/namespaces/${kvId}/bulk`, items.slice(i, i + 5000));
181
234
  }
235
+ // 未知路径处理模式:显式传了就持久化到 per-host 配置键(worker serve 时读;auto 也写,worker 视作自动判定)。
236
+ const mode = (opts.notFound || "").toLowerCase();
237
+ if (mode) {
238
+ await ctx.cf.request("PUT", `/accounts/${ctx.cf.accountId}/storage/kv/namespaces/${kvId}/bulk`, [{ key: "::cfg::" + host, value: JSON.stringify({ notFound: mode }) }]);
239
+ }
182
240
  // 绑定 host → 共享 worker:先确保 apex zone 在 CF 且 active(Vercel 注册域名自动切 NS→CF),
183
241
  // 再绑 custom domain。绑定失败不再静默吞掉 —— 原 .catch(() => {}) 会把"域名没接上"伪装成成功。
184
242
  const zoneId = await ensureZoneActiveForHandle(ctx, host);
185
243
  await bindHandleDomain(ctx, host, zoneId);
186
244
  await ctx.store.appendAudit(ctx.tenantId, {
187
245
  action: "handle_site_deploy",
188
- detail: { host, files: files.length },
246
+ detail: {
247
+ host,
248
+ files: files.length,
249
+ ...(mode ? { notFound: mode } : {}),
250
+ ...(routed.rerouted ? { reroutedFrom: routed.checkout, project: routed.project } : {}),
251
+ },
189
252
  });
253
+ const has404 = files.some((f) => f.path.toLowerCase() === "/404.html");
190
254
  return {
191
255
  host,
192
256
  url: `https://${host}`,
193
257
  files: files.length,
194
- message: `已上线 https://${host}(${files.length} 个文件;TLS 自动)`,
258
+ // 真实所属项目 + 是否按域重路由 —— CLI 据 project 回写 clize.json(消除本地↔远端漂移)
259
+ ...(routed.project ? { project: routed.project } : {}),
260
+ ...(routed.rerouted
261
+ ? { rerouted: `已按域名所属项目 "${routed.project}" 部署(忽略陈旧检出 "${routed.checkout}")` }
262
+ : {}),
263
+ notFound: mode || (has404 ? "404-page(自动)" : "spa(自动)"),
264
+ message: `已上线 https://${host}(${files.length} 个文件;TLS 自动)${notFoundNote(mode, has404)}`,
195
265
  };
196
266
  }
197
267
  /** 把一个目录部署到 clize.app handle(本地:读 fs + 直接 CF)。 */
@@ -1 +1 @@
1
- {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/core/sites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/core/sites.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { z } from "zod";
9
9
  import { VERSION } from "./version.js";
10
10
  import * as addressesCore from "./core/addresses.js";
11
11
  import * as sitesCore from "./core/sites.js";
12
+ import * as setupCore from "./core/setup.js";
12
13
  import * as remoteClient from "./remote.js";
13
14
  // 托管模式探测(配置里有 CLIZE_API_KEY 即登录态)。
14
15
  const remote = remoteClient.loadRemote();
@@ -77,6 +78,20 @@ server.tool("clize_domain_search", "查域名可注册性 + 价(query 可多个;
77
78
  });
78
79
  server.tool("clize_domain_buy", "注册域名(💰 花钱:必须 confirm=true;否则只返报价,先报给用户;归当前检出 / project 指定的项目)", { domain: z.string(), confirm: z.boolean().optional(), project: projectParam }, async ({ domain, confirm, project }) => ok(await withScope(project, () => remoteClient.api.domainBuy(rc(), domain, !!confirm))));
79
80
  server.tool("clize_claim", "占一个免费 handle <slug>.clize.app(先到先得;自动开 support@ 收信 + 占位站;归当前检出 / project 指定的项目)", { slug: z.string(), project: projectParam }, async ({ slug, project }) => ok(await withScope(project, () => remoteClient.api.claim(rc(), slug))));
81
+ server.tool("clize_domain_ns", "查 / 改域名 NS 委派。不带 nameservers = 查现状(注册商 + 当前 NS + CF 目标 NS);带 = 设 NS(clize 注册的 Vercel 域可指 CF 或指走;CF 注册锁 CF;外部域返回该去原注册商改的值)。⚠️ 指离 CF 会断该域的 clize 邮箱/站点。", { domain: z.string(), nameservers: z.array(z.string()).optional() }, async ({ domain, nameservers }) => ok(nameservers && nameservers.length
82
+ ? await remoteClient.api.domainSetNameservers(rc(), domain, nameservers)
83
+ : await remoteClient.api.domainNameservers(rc(), domain)));
84
+ server.tool("clize_dns_list", "列出某域在 Cloudflare 上的全部 DNS 记录(A/CNAME/MX/TXT…;需 NS 已托管 CF)", { domain: z.string() }, async ({ domain }) => ok(await remoteClient.api.dnsList(rc(), domain)));
85
+ server.tool("clize_dns_set", "加 / 改一条 DNS 记录(同 type+name 已存在则覆盖;需域名 NS 已托管 CF)", {
86
+ domain: z.string(),
87
+ type: z.string().describe("A | AAAA | CNAME | MX | TXT | …"),
88
+ name: z.string().describe("@ = apex,或 www / mail.example.com"),
89
+ content: z.string(),
90
+ ttl: z.number().optional(),
91
+ priority: z.number().optional().describe("MX 优先级"),
92
+ proxied: z.boolean().optional().describe("经 CF 代理(橙云)"),
93
+ }, async ({ domain, type, name, content, ttl, priority, proxied }) => ok(await remoteClient.api.dnsSet(rc(), { domain, type, name, content, ttl, priority, proxied })));
94
+ server.tool("clize_dns_rm", "删一条 DNS 记录(按 type+name 定位;幂等)", { domain: z.string(), type: z.string(), name: z.string() }, async ({ domain, type, name }) => ok(await remoteClient.api.dnsRm(rc(), domain, type, name)));
80
95
  server.tool("clize_email_setup", "配自定义域收发链路(MX / SPF + 发信验证)", { domain: z.string() }, async ({ domain }) => ok(await remoteClient.api.emailSetup(rc(), domain)));
81
96
  server.tool("clize_email_address_add", "加一个地址(tag 分类 + knowledge 文件/目录路径,知识作答时进 system prompt)", { address: z.string(), tag: z.string().optional(), knowledge: z.string().optional() }, async ({ address, tag, knowledge }) => ok(await remoteClient.api.emailAddressAdd(rc(), {
82
97
  address,
@@ -106,7 +121,21 @@ server.tool("clize_email_send", "发信(📨 硬闸:confirm 缺省只返回草
106
121
  confirm: !!confirm,
107
122
  allowDuplicate: !!allowDuplicate,
108
123
  }))));
109
- server.tool("clize_deploy_site", "把一个本地目录部署到某域(多文件静态站;免费 handle 或自定义域)", { dir: z.string(), domain: z.string(), project: projectParam }, async ({ dir, domain, project }) => ok(await withScope(project, () => remoteClient.api.deploy(rc(), domain, sitesCore.readDirFiles(dir)))));
124
+ server.tool("clize_deploy_site", "把一个本地目录部署到某域(多文件静态站;免费 handle 或自定义域)。notFound 控未知路径:404-page 404.html/真 404(SEO 站推荐)、spa 回退首页、none 极简 404、auto 默认( 404.html 自动 404-page)", {
125
+ dir: z.string(),
126
+ domain: z.string(),
127
+ notFound: z.enum(["404-page", "spa", "none", "auto"]).optional(),
128
+ project: projectParam,
129
+ }, async ({ dir, domain, notFound, project }) => ok(await withScope(project, async () => {
130
+ const r = await remoteClient.api.deploy(rc(), domain, sitesCore.readDirFiles(dir), notFound);
131
+ try {
132
+ setupCore.recordDeploy(r); // 回写真实 project/域到就近 clize.json(消除漂移)
133
+ }
134
+ catch {
135
+ /* best-effort */
136
+ }
137
+ return r;
138
+ })));
110
139
  server.tool("clize_context", "会话开头 rehydrate:某地址的 身份 + 知识 + 操作规约(无 address = 列地址)", { address: z.string().optional() }, async ({ address }) => ok(await remoteClient.api.context(rc(), address)));
111
140
  async function main() {
112
141
  await server.connect(new StdioServerTransport());