@clize/clize 0.32.0 → 0.33.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.
- package/README.md +19 -17
- package/dist/cli.js +484 -373
- package/dist/cli.js.map +1 -1
- package/dist/core/addresses.js +12 -11
- package/dist/core/addresses.js.map +1 -1
- package/dist/core/analytics.js +6 -5
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/authz.js +6 -5
- package/dist/core/authz.js.map +1 -1
- package/dist/core/billing.js +83 -12
- package/dist/core/billing.js.map +1 -1
- package/dist/core/credentials.js +3 -1
- package/dist/core/credentials.js.map +1 -1
- package/dist/core/dns.js +3 -2
- package/dist/core/dns.js.map +1 -1
- package/dist/core/domain-health.js +74 -50
- package/dist/core/domain-health.js.map +1 -1
- package/dist/core/domains.js +74 -44
- package/dist/core/domains.js.map +1 -1
- package/dist/core/email-tx.js +8 -6
- package/dist/core/email-tx.js.map +1 -1
- package/dist/core/email.js +13 -12
- package/dist/core/email.js.map +1 -1
- package/dist/core/env-detect.js +7 -14
- package/dist/core/env-detect.js.map +1 -1
- package/dist/core/handle.js +33 -30
- package/dist/core/handle.js.map +1 -1
- package/dist/core/install.js +114 -56
- package/dist/core/install.js.map +1 -1
- package/dist/core/media.js +37 -36
- package/dist/core/media.js.map +1 -1
- package/dist/core/payments.js +5 -4
- package/dist/core/payments.js.map +1 -1
- package/dist/core/projects.js +38 -26
- package/dist/core/projects.js.map +1 -1
- package/dist/core/redirect.js +4 -3
- package/dist/core/redirect.js.map +1 -1
- package/dist/core/serve.js +2 -1
- package/dist/core/serve.js.map +1 -1
- package/dist/core/setup.js +11 -9
- package/dist/core/setup.js.map +1 -1
- package/dist/core/shop.js +17 -16
- package/dist/core/shop.js.map +1 -1
- package/dist/core/site.js +2 -1
- package/dist/core/site.js.map +1 -1
- package/dist/core/sites.js +41 -40
- package/dist/core/sites.js.map +1 -1
- package/dist/core/triage.js +39 -5
- package/dist/core/triage.js.map +1 -1
- package/dist/core/video.js +45 -43
- package/dist/core/video.js.map +1 -1
- package/dist/github.js +4 -3
- package/dist/github.js.map +1 -1
- package/dist/i18n/t.js +65 -0
- package/dist/i18n/t.js.map +1 -0
- package/dist/i18n/zh.js +1265 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +61 -40
- package/dist/index.js.map +1 -1
- package/dist/lib/cloudflare.js +8 -7
- package/dist/lib/cloudflare.js.map +1 -1
- package/dist/lib/crypto.js +2 -1
- package/dist/lib/crypto.js.map +1 -1
- package/dist/lib/vercel.js +2 -1
- package/dist/lib/vercel.js.map +1 -1
- package/dist/lib/zone.js +2 -1
- package/dist/lib/zone.js.map +1 -1
- package/dist/mcp-profiles.js +5 -1
- package/dist/mcp-profiles.js.map +1 -1
- package/dist/providers/deploy/cloudflare.js +3 -2
- package/dist/providers/deploy/cloudflare.js.map +1 -1
- package/dist/providers/email/cloudflare-inbound.js +4 -3
- package/dist/providers/email/cloudflare-inbound.js.map +1 -1
- package/dist/providers/email/cloudflare-outbound.js +2 -1
- package/dist/providers/email/cloudflare-outbound.js.map +1 -1
- package/dist/providers/email/resend.js +3 -2
- package/dist/providers/email/resend.js.map +1 -1
- package/dist/providers/email/ses.js +3 -2
- package/dist/providers/email/ses.js.map +1 -1
- package/dist/providers/index.js +3 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/media/google.js +10 -9
- package/dist/providers/media/google.js.map +1 -1
- package/dist/providers/media/kie.js +12 -11
- package/dist/providers/media/kie.js.map +1 -1
- package/dist/providers/media/kunavo.js +10 -9
- package/dist/providers/media/kunavo.js.map +1 -1
- package/dist/providers/media/openai.js +5 -4
- package/dist/providers/media/openai.js.map +1 -1
- package/dist/providers/media/suno.js +7 -6
- package/dist/providers/media/suno.js.map +1 -1
- package/dist/providers/registrar/routing.js +2 -1
- package/dist/providers/registrar/routing.js.map +1 -1
- package/dist/providers/registrar/vercel.js +2 -1
- package/dist/providers/registrar/vercel.js.map +1 -1
- package/dist/providers/seo/dataforseo.js +5 -4
- package/dist/providers/seo/dataforseo.js.map +1 -1
- package/dist/providers/seo/gsc.js +5 -4
- package/dist/providers/seo/gsc.js.map +1 -1
- package/dist/remote.js +25 -22
- package/dist/remote.js.map +1 -1
- package/dist/selfcheck.js +23 -22
- package/dist/selfcheck.js.map +1 -1
- package/dist/state/file-store.js +17 -16
- package/dist/state/file-store.js.map +1 -1
- package/package.json +4 -3
- package/skills/clize/SKILL.md +171 -143
- package/skills/clize-seo/SKILL.md +2 -2
- package/skills/clize-site-build/SKILL.md +97 -41
- package/skills/clize-site-debug/SKILL.md +73 -45
package/dist/core/billing.js
CHANGED
|
@@ -1,15 +1,83 @@
|
|
|
1
1
|
/** 含加价的对客收费额(成本价 × (1 + markup),保留两位)。 */
|
|
2
|
+
import { t } from "../i18n/t.js";
|
|
2
3
|
export function chargedAmount(ctx, costUsd) {
|
|
3
4
|
return Math.round(costUsd * (1 + ctx.platform.billing.markupPct) * 100) / 100;
|
|
4
5
|
}
|
|
6
|
+
/** 全租户本月已花(口径见 spendBreakdown 上方注释:有 ledger 就读 ledger,没有才落回 audit.cost)。
|
|
7
|
+
* `status` 的 spentThisMonthUsd 与月度上限闸共用它 —— 显示的数字和拦人的数字必须是同一个,
|
|
8
|
+
* 否则用户看着「本月花了 $6」却在 $10 的上限上被放行到 $16。 */
|
|
9
|
+
export async function monthSpentUsd(ctx) {
|
|
10
|
+
if (ctx.store.spendThisMonthByAction) {
|
|
11
|
+
const rows = await ctx.store.spendThisMonthByAction(ctx.tenantId).catch(() => undefined);
|
|
12
|
+
if (rows)
|
|
13
|
+
return spendBreakdown(rows).monthUsd;
|
|
14
|
+
}
|
|
15
|
+
return ctx.store.spentThisMonth(ctx.tenantId);
|
|
16
|
+
}
|
|
5
17
|
/** 月度开销上限(按租户,口径=用户实付额):超限抛错。
|
|
6
|
-
* 所有花钱路径(域名注册 / 媒体生成)在扣费前都必须过这道闸 —— 不是只有域名。
|
|
18
|
+
* 所有花钱路径(域名注册 / 媒体生成)在扣费前都必须过这道闸 —— 不是只有域名。
|
|
19
|
+
* 未设上限时直接返回,不产生任何查询(高频路径别为一个 null 付一次 D1 往返)。 */
|
|
7
20
|
export async function checkMonthlySpendLimit(ctx, userCostUsd) {
|
|
8
21
|
if (ctx.tenant.monthlySpendLimitUsd == null || userCostUsd == null)
|
|
9
22
|
return;
|
|
10
|
-
const already = await
|
|
23
|
+
const already = await monthSpentUsd(ctx);
|
|
11
24
|
if (already + userCostUsd > ctx.tenant.monthlySpendLimitUsd)
|
|
12
|
-
throw new Error(
|
|
25
|
+
throw new Error(t `Monthly spend limit exceeded: $${already.toFixed(2)} spent this month, $${userCostUsd.toFixed(2)} needed now, limit $${ctx.tenant.monthlySpendLimitUsd}. Adjust MONTHLY_SPEND_LIMIT_USD.`);
|
|
26
|
+
}
|
|
27
|
+
const SPEND_CATEGORIES = [
|
|
28
|
+
{ key: "domains", label: "Domains", match: (a) => a.startsWith("domain") },
|
|
29
|
+
{ key: "media", label: "Media generation", match: (a) => a.startsWith("gen_") },
|
|
30
|
+
{ key: "seo", label: "SEO queries", match: (a) => a === "seo" || a.startsWith("seo_") },
|
|
31
|
+
{ key: "storage", label: "Site storage", match: (a) => a === "storage" },
|
|
32
|
+
// 退给买家的钱确实从余额走了,进得来构成;但它不是 clize 的服务费,得单独标清楚。
|
|
33
|
+
{ key: "shop", label: "Order refunds", match: (a) => a.startsWith("shop") },
|
|
34
|
+
{ key: "other", label: "Other", match: () => true },
|
|
35
|
+
];
|
|
36
|
+
/** 这条 credit 是退款(抵扣某类花费),还是进账(充值 / 代收货款,根本不是花费)? */
|
|
37
|
+
function isRefundAction(action) {
|
|
38
|
+
return action === "refund" || action.endsWith("_refund");
|
|
39
|
+
}
|
|
40
|
+
/** 退款 action → 它抵扣的原始 action(gen_image_refund → gen_image;裸 refund 归域名,只有注册失败会开)。 */
|
|
41
|
+
function refundBase(action) {
|
|
42
|
+
if (action === "refund")
|
|
43
|
+
return "domain_register";
|
|
44
|
+
return action.replace(/_refund$/, "");
|
|
45
|
+
}
|
|
46
|
+
/** 纯函数:ledger 月度分组 → 分类构成。
|
|
47
|
+
* **非退款的 credit 一律剔除**(充值 recharge / 代收货款 collect / 日后任何新进账)——
|
|
48
|
+
* 按「是不是退款」判而不是列一张进账名单:漏一个进账就会被当成退款去冲减花费,把总数做小。 */
|
|
49
|
+
export function spendBreakdown(rows) {
|
|
50
|
+
const acc = new Map();
|
|
51
|
+
for (const r of rows) {
|
|
52
|
+
if (r.kind === "credit" && !isRefundAction(r.action))
|
|
53
|
+
continue; // 进账不是花费
|
|
54
|
+
const base = r.kind === "credit" ? refundBase(r.action) : r.action;
|
|
55
|
+
const cat = SPEND_CATEGORIES.find((c) => c.match(base));
|
|
56
|
+
const cur = acc.get(cat.key) ?? { usd: 0, n: 0, actions: new Set() };
|
|
57
|
+
cur.usd += r.kind === "credit" ? -r.usd : r.usd;
|
|
58
|
+
cur.n += r.kind === "credit" ? 0 : r.n; // 笔数只数出账,退款不算「花了一笔」
|
|
59
|
+
cur.actions.add(r.action);
|
|
60
|
+
acc.set(cat.key, cur);
|
|
61
|
+
}
|
|
62
|
+
const byCategory = SPEND_CATEGORIES.filter((c) => acc.has(c.key))
|
|
63
|
+
.map((c) => {
|
|
64
|
+
const v = acc.get(c.key);
|
|
65
|
+
// label 在输出时翻译(表是模块常量,worker 上模块作用域不能调 t(),见 i18n/t.ts 头注释)
|
|
66
|
+
return { key: c.key, label: t(c.label), usd: Math.round(v.usd * 100) / 100, n: v.n, actions: [...v.actions].sort() };
|
|
67
|
+
})
|
|
68
|
+
.filter((c) => c.usd !== 0 || c.n > 0)
|
|
69
|
+
.sort((a, b) => b.usd - a.usd);
|
|
70
|
+
return {
|
|
71
|
+
monthUsd: Math.round(byCategory.reduce((s, c) => s + c.usd, 0) * 100) / 100,
|
|
72
|
+
byCategory,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** 本月花费构成(托管;store 无 ledger 汇总能力 → undefined,字段整个不出现)。 */
|
|
76
|
+
export async function monthSpend(ctx) {
|
|
77
|
+
if (!ctx.store.spendThisMonthByAction)
|
|
78
|
+
return undefined;
|
|
79
|
+
const rows = await ctx.store.spendThisMonthByAction(ctx.tenantId).catch(() => undefined);
|
|
80
|
+
return rows ? spendBreakdown(rows) : undefined;
|
|
13
81
|
}
|
|
14
82
|
/** 查余额 + 最近流水(无地址参数:整租户)。 */
|
|
15
83
|
export async function balance(ctx) {
|
|
@@ -22,20 +90,23 @@ export async function balance(ctx) {
|
|
|
22
90
|
return {
|
|
23
91
|
mode: "self-host",
|
|
24
92
|
clizeBalance: "n/a",
|
|
25
|
-
message: "
|
|
26
|
-
"
|
|
27
|
-
"
|
|
93
|
+
message: t("The local bring-your-own-Cloudflare mode has no clize balance: domain / deploy / media costs go straight to your own Cloudflare and model accounts.") +
|
|
94
|
+
t("To see what was spent → `clize audit` (per item) or `clize status` (this month);") +
|
|
95
|
+
t("to let clize pay with a prepaid balance → `clize login` switches to hosted mode."),
|
|
28
96
|
};
|
|
29
97
|
// ── 以下仅托管模式 ──
|
|
30
|
-
const ledger = await
|
|
31
|
-
|
|
98
|
+
const [ledger, tenant, spend] = await Promise.all([
|
|
99
|
+
ctx.store.listLedger(ctx.tenantId, 20),
|
|
100
|
+
ctx.store.getTenant(ctx.tenantId),
|
|
101
|
+
monthSpend(ctx),
|
|
102
|
+
]);
|
|
32
103
|
const autopay = {
|
|
33
|
-
enabled: !!
|
|
34
|
-
amountUsd:
|
|
104
|
+
enabled: !!tenant?.autoRechargeEnabled,
|
|
105
|
+
amountUsd: tenant?.autoRechargeAmountUsd ?? ctx.platform.billing.minRechargeUsd,
|
|
35
106
|
minRechargeUsd: ctx.platform.billing.minRechargeUsd,
|
|
36
|
-
card:
|
|
107
|
+
card: tenant?.defaultPaymentMethodId ? { brand: tenant.cardBrand, last4: tenant.cardLast4 } : null,
|
|
37
108
|
};
|
|
38
109
|
// 注意:绝不返回 markupPct / 成本 —— 那是内部毛利,不给用户看。只给余额 + 流水 + 自动续充状态。
|
|
39
|
-
return { mode: "hosted", balanceUsd: bal, billing: "active", autopay, ledger };
|
|
110
|
+
return { mode: "hosted", balanceUsd: bal, billing: "active", autopay, ...(spend ? { spend } : {}), ledger };
|
|
40
111
|
}
|
|
41
112
|
//# sourceMappingURL=billing.js.map
|
package/dist/core/billing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/core/billing.ts"],"names":[],"mappings":"AAQA,0CAA0C;AAC1C,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,OAAe;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAChF,CAAC;AAED;
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/core/billing.ts"],"names":[],"mappings":"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"}
|
package/dist/core/credentials.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { encryptSecret, decryptSecret, hasEncryptionKey } from "../lib/crypto.js";
|
|
2
|
+
/** 解密后的租户自带凭证(明文,只在内存里短暂存在,传给 createCloudContext)。 */
|
|
3
|
+
import { t } from "../i18n/t.js";
|
|
2
4
|
/** 取租户 BYO 凭证并解密 token(供 createCloudContext)。无密钥 / 未配 → 不带 token(回退平台代付)。 */
|
|
3
5
|
export async function loadTenantByoCreds(store, tenantId, encKey) {
|
|
4
6
|
const raw = await store.getTenantByo(tenantId);
|
|
@@ -15,7 +17,7 @@ export async function loadTenantByoCreds(store, tenantId, encKey) {
|
|
|
15
17
|
/** 保存租户 BYO 凭证(token 加密存;传 null 清除该项,undefined 不动)。需配 BYO_ENCRYPTION_KEY。 */
|
|
16
18
|
export async function saveTenantByoCreds(store, tenantId, encKey, patch) {
|
|
17
19
|
if (!hasEncryptionKey(encKey))
|
|
18
|
-
throw new Error("
|
|
20
|
+
throw new Error(t("The server has no BYO_ENCRYPTION_KEY; bring-your-own credentials cannot be stored safely (openssl rand -base64 32)"));
|
|
19
21
|
const sp = {};
|
|
20
22
|
if (patch.cfToken !== undefined)
|
|
21
23
|
sp.cfTokenEnc = patch.cfToken === null ? null : await encryptSecret(patch.cfToken, encKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/core/credentials.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/core/credentials.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAElF,sDAAsD;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAQjC,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAiB,EACjB,QAAgB,EAChB,MAA0B;IAE1B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAa,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;IACvF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,kCAAkC;IAC7E,kDAAkD;IAClD,IAAI,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrG,IAAI,GAAG,CAAC,cAAc;QACpB,GAAG,CAAC,WAAW,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3F,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAiB,EACjB,QAAgB,EAChB,MAA0B,EAC1B,KAKC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,oHAAoH,CAAC,CAAC,CAAC;IAC3I,MAAM,EAAE,GAAmB,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAC7B,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7F,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACxE,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QACjC,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzG,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC3E,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/core/dns.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveZone } from "../lib/zone.js";
|
|
2
|
+
import { t } from "../i18n/t.js";
|
|
2
3
|
export async function setDns(ctx, domain, record) {
|
|
3
4
|
const zoneId = await resolveZone(ctx, domain);
|
|
4
5
|
const saved = await ctx.providers.dns.setRecord(zoneId, record);
|
|
@@ -28,9 +29,9 @@ export async function removeDns(ctx, domain, type, name) {
|
|
|
28
29
|
name,
|
|
29
30
|
removed,
|
|
30
31
|
...(removed && sensitive
|
|
31
|
-
? { caution:
|
|
32
|
+
? { caution: t `Deleted the ${type.toUpperCase()} record — if clize set it for email / verification / delegation, the related feature is affected.` }
|
|
32
33
|
: {}),
|
|
33
|
-
...(removed ? {} : { message: "
|
|
34
|
+
...(removed ? {} : { message: t("No matching record (already deleted, or type/name differ).") }),
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
//# sourceMappingURL=dns.js.map
|
package/dist/core/dns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/core/dns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAY,EAAE,MAAc,EAAE,MAAiB;IAC1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,GAAG,CAAC,KAAK;SACZ,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACzB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;KACzD,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,MAAc;IACxD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAY,EACZ,MAAc,EACd,IAAY,EACZ,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,GAAG,CAAC,KAAK;SACZ,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;SAC5F,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,OAAO;QACL,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,OAAO,IAAI,SAAS;YACtB,CAAC,CAAC,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/core/dns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAY,EAAE,MAAc,EAAE,MAAiB;IAC1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,GAAG,CAAC,KAAK;SACZ,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE;QACzB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;KACzD,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,MAAc;IACxD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAY,EACZ,MAAc,EACd,IAAY,EACZ,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,MAAM,GAAG,CAAC,KAAK;SACZ,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;SAC5F,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,OAAO;QACL,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,OAAO,IAAI,SAAS;YACtB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA,eAAe,IAAI,CAAC,WAAW,EAAE,mGAAmG,EAAE;YACpJ,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,4DAA4D,CAAC,EAAE,CAAC;KACjG,CAAC;AACJ,CAAC"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// (四层体检:委派 → zone → worker 绑定 → 站点内容)。
|
|
11
11
|
// ============================================================
|
|
12
12
|
/** 平台 handle 根域(<slug>.clize.app):其委派由平台 zone 保证,不参与逐域探测。 */
|
|
13
|
+
import { t } from "../i18n/t.js";
|
|
13
14
|
const HANDLE_ROOT = globalThis
|
|
14
15
|
.process?.env?.CLIZE_HANDLE_ROOT || "clize.app";
|
|
15
16
|
/** host 是否平台子域(handle):x.clize.app / clize.app 本体。 */
|
|
@@ -44,16 +45,38 @@ async function dohResolve(name, type) {
|
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
const CF_NS_RE = /\.ns\.cloudflare\.com\.?$/i;
|
|
48
|
+
/**
|
|
49
|
+
* 平台子域(handle)探测:apex 是平台自己的 zone,NS 委派必在 CF —— 省掉那次 NS 查询。
|
|
50
|
+
* 但 **A 解析照查**:委派保证的是「clize.app 这个 zone 归 CF 管」,不保证「x.clize.app 有记录」。
|
|
51
|
+
* 免费 handle 共享一个 zone、撞过 200 条 DNS 上限(2026-08-27),记录是会没的;
|
|
52
|
+
* 从前这里直接写死 resolves:true —— 那和事故里 CF 的假 active 是同一种谎。
|
|
53
|
+
*/
|
|
54
|
+
async function probePlatformHost(h, checkedAt) {
|
|
55
|
+
const a = await dohResolve(h, "A");
|
|
56
|
+
return {
|
|
57
|
+
host: h,
|
|
58
|
+
apex: apexOf(h),
|
|
59
|
+
delegation: "cloudflare",
|
|
60
|
+
nameservers: [],
|
|
61
|
+
resolves: (a.ans.Answer ?? []).some((r) => r.type === 1 || r.type === 5),
|
|
62
|
+
dnsStatus: a.ans.Status,
|
|
63
|
+
source: "platform-zone",
|
|
64
|
+
checkedAt,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
47
67
|
/**
|
|
48
68
|
* 公网权威视角探测一个 host:apex 的 NS 委派指向 + host 的 A 解析。
|
|
49
69
|
* 这是「域名对外是否活着」的唯一可信信号 —— CF zone status 是缓存(事故中全程假 active),
|
|
50
70
|
* 注册商自家字段会说谎(事故中 Vercel 全程 verified=true)。
|
|
71
|
+
* 平台子域走 probePlatformHost(只查 A);分流在这里做,调用方一律 probeDelegation 即可。
|
|
51
72
|
*/
|
|
52
73
|
export async function probeDelegation(host) {
|
|
53
74
|
const h = host.toLowerCase();
|
|
54
75
|
const apex = apexOf(h);
|
|
55
76
|
const checkedAt = new Date().toISOString();
|
|
56
77
|
try {
|
|
78
|
+
if (isPlatformHost(h))
|
|
79
|
+
return await probePlatformHost(h, checkedAt);
|
|
57
80
|
const [ns, a] = await Promise.all([dohResolve(apex, "NS"), dohResolve(h, "A")]);
|
|
58
81
|
const nsRecords = (ns.ans.Answer ?? [])
|
|
59
82
|
.filter((r) => r.type === 2)
|
|
@@ -98,24 +121,31 @@ export function probeHealthy(p) {
|
|
|
98
121
|
/**
|
|
99
122
|
* 该域断链是否算「事故」(= 值得发告警)。
|
|
100
123
|
*
|
|
124
|
+
* 按下列顺序判(顺序即优先级):
|
|
125
|
+
* · 平台子域:可达性是平台自己的责任,群发给租户是噪音 —— 不发信(状态照记,monitor 里看得到);
|
|
126
|
+
* · 有站点或邮箱:用户把承载物放在了 clize 上,断链就是真断线 —— 告警;
|
|
127
|
+
* · pending:接入 / 注册还没走完,DNS 本就可能没到位 —— 不告警(但上一条优先);
|
|
101
128
|
* · registered:clize 是注册商,委派 / 续费是我方责任 —— 一律告警(6 月事故正是这一类);
|
|
102
|
-
* · external + 有站点或邮箱:用户把承载物放在了 clize 上,断链就是真断线 —— 告警;
|
|
103
129
|
* · external + 什么都没跑:NS 指向别处是域主的选择,不是故障 —— 只记录,不告警。
|
|
104
130
|
*
|
|
131
|
+
* 承载物判定排在 status 之前(2026-09-01 改):本租户 4 个域卡在 pending,却已经部署了站点、
|
|
132
|
+
* 收着真实客户邮件(passfar.com / stowandsort.com 等)—— 旧序里 pending 短路在前,
|
|
133
|
+
* 等于给「正在营业的域」发了永久静音卡,与本模块「只要 clize 上有承载物就照常告警」的红线相反。
|
|
134
|
+
*
|
|
105
135
|
* 注意「有承载物」按历史记录判定:站点部署过、邮箱开过就算 —— 承载物还在、委派没了,
|
|
106
136
|
* 正是最该报的形态;要彻底停掉某个域的告警,是把它从 clize 摘掉(domain remove),
|
|
107
137
|
* 而不是靠巡检去猜用户的意图。
|
|
108
138
|
*/
|
|
109
|
-
export function alertScope(
|
|
110
|
-
if (isPlatformHost(
|
|
111
|
-
return { alertable: false, why: "
|
|
112
|
-
if (
|
|
113
|
-
return { alertable:
|
|
114
|
-
if (
|
|
115
|
-
return { alertable:
|
|
116
|
-
if (
|
|
117
|
-
return { alertable: true, why:
|
|
118
|
-
return { alertable: false, why: "
|
|
139
|
+
export function alertScope(target) {
|
|
140
|
+
if (isPlatformHost(target.domain))
|
|
141
|
+
return { alertable: false, why: t("platform subdomain; delegation is guaranteed by the platform zone") };
|
|
142
|
+
if (target.hasSite || target.hasEmail)
|
|
143
|
+
return { alertable: true, why: t `clize is running ${[target.hasSite ? t("a site") : "", target.hasEmail ? t("a mailbox") : ""].filter(Boolean).join(" / ")} on it` };
|
|
144
|
+
if (target.status === "pending")
|
|
145
|
+
return { alertable: false, why: t("import / registration incomplete, and nothing runs on it in clize yet") };
|
|
146
|
+
if (target.status === "registered")
|
|
147
|
+
return { alertable: true, why: t("registered through clize; delegation is our responsibility") };
|
|
148
|
+
return { alertable: false, why: t("an external domain with no site / mailbox in clize — NS pointing elsewhere is the owner's choice, not a fault") };
|
|
119
149
|
}
|
|
120
150
|
/** 首次告警前的观察窗:连续两轮(30min 一轮)都异常才认,防 DoH 抖动。 */
|
|
121
151
|
export const ALERT_MIN_FAILED_MS = 25 * 60_000;
|
|
@@ -139,10 +169,10 @@ export function shouldAlert(input) {
|
|
|
139
169
|
if (!scope.alertable)
|
|
140
170
|
return { alert: false, why: scope.why };
|
|
141
171
|
if (input.failedMs < ALERT_MIN_FAILED_MS)
|
|
142
|
-
return { alert: false, why: "
|
|
172
|
+
return { alert: false, why: t("fewer than two failed rounds; observing first (guards against DoH jitter)") };
|
|
143
173
|
const need = alertIntervalMs(input.failedMs);
|
|
144
174
|
if (input.sinceLastAlertMs < need)
|
|
145
|
-
return { alert: false, why:
|
|
175
|
+
return { alert: false, why: t `within the ${Math.round(need / 3600_000)}h reminder interval; not sending again` };
|
|
146
176
|
return { alert: true, why: scope.why };
|
|
147
177
|
}
|
|
148
178
|
/**
|
|
@@ -154,39 +184,33 @@ export async function checkDomainHealth(ctx, domain, opts = {}) {
|
|
|
154
184
|
const d = domain.toLowerCase();
|
|
155
185
|
const apex = apexOf(d);
|
|
156
186
|
const advice = [];
|
|
157
|
-
// ① 注册局委派(
|
|
187
|
+
// ① 注册局委派(平台子域:NS 由平台 zone 保证,跳过那次查询,但 A 解析照探 —— 见 probeDelegation)
|
|
158
188
|
const platform = isPlatformHost(d);
|
|
159
|
-
const probe =
|
|
160
|
-
? {
|
|
161
|
-
host: d,
|
|
162
|
-
apex,
|
|
163
|
-
delegation: "cloudflare",
|
|
164
|
-
nameservers: [],
|
|
165
|
-
resolves: true,
|
|
166
|
-
source: "platform-zone",
|
|
167
|
-
checkedAt: new Date().toISOString(),
|
|
168
|
-
}
|
|
169
|
-
: await probeDelegation(d);
|
|
189
|
+
const probe = await probeDelegation(d);
|
|
170
190
|
const delegationOk = probeHealthy(probe);
|
|
171
191
|
let delegationNote;
|
|
172
192
|
if (platform)
|
|
173
|
-
delegationNote =
|
|
193
|
+
delegationNote = probe.resolves
|
|
194
|
+
? t `platform subdomain (${HANDLE_ROOT}); delegation guaranteed by the platform, ${d} resolves normally`
|
|
195
|
+
: t `🔴 platform subdomain (${HANDLE_ROOT}) delegates correctly, but ${d} resolves no A/CNAME — the site binding or zone records are missing`;
|
|
174
196
|
else if (probe.delegation === "cloudflare" && probe.resolves)
|
|
175
|
-
delegationNote =
|
|
197
|
+
delegationNote = t `registry NS delegation is on Cloudflare (${probe.nameservers.join(", ")}); resolves normally`;
|
|
176
198
|
else if (probe.delegation === "cloudflare")
|
|
177
|
-
delegationNote = `NS
|
|
199
|
+
delegationNote = t `NS delegation is on Cloudflare, but ${d} resolves no A/CNAME — the zone may be missing the site records`;
|
|
178
200
|
else if (probe.delegation === "elsewhere")
|
|
179
|
-
delegationNote = `⚠️
|
|
201
|
+
delegationNote = t `⚠️ registry NS points at ${probe.nameservers.join(", ")} (not Cloudflare) — the site and mailboxes will not work`;
|
|
180
202
|
else if (probe.delegation === "unresolved")
|
|
181
203
|
delegationNote = probe.nxdomain
|
|
182
|
-
?
|
|
183
|
-
:
|
|
204
|
+
? t("🔴 the registry returns NXDOMAIN for the domain (no delegation record; it was dropped from the TLD zone) — the shape of the 2026-06 outage, usually a registrar-side delegation push failure or a domain hold")
|
|
205
|
+
: t("🔴 no NS delegation found at the authoritative side");
|
|
184
206
|
else
|
|
185
|
-
delegationNote =
|
|
207
|
+
delegationNote = t `probe failed (${probe.error ?? t("DoH unreachable")}); retry later`;
|
|
186
208
|
if (probe.delegation === "elsewhere")
|
|
187
|
-
advice.push(
|
|
209
|
+
advice.push(t `Point the NS delegation back at Cloudflare: for a clize-registered domain run \`clize domain ns ${apex} <the NS Cloudflare assigned>\` (values from \`clize domain ns ${apex}\`); for an imported domain change it at the registrar.`);
|
|
188
210
|
if (probe.delegation === "unresolved")
|
|
189
|
-
advice.push(
|
|
211
|
+
advice.push(t `Run \`clize domain ns ${apex} <CF NS>\` to push the delegation again; if it is still NXDOMAIN hours later it is a registrar-side fault (for Vercel-registered domains reset the nameservers under Vercel dashboard → Domains, or contact their support).`);
|
|
212
|
+
if (platform && !probe.resolves)
|
|
213
|
+
advice.push(t `Redeploy to restore the DNS records and site binding of ${d}: \`clize deploy <dir> --domain ${d}\`.`);
|
|
190
214
|
// ② CF zone
|
|
191
215
|
let zoneOk = false;
|
|
192
216
|
let zoneStatus;
|
|
@@ -195,8 +219,8 @@ export async function checkDomainHealth(ctx, domain, opts = {}) {
|
|
|
195
219
|
try {
|
|
196
220
|
zoneId = platform ? await ctx.cf.findZoneId(HANDLE_ROOT) : await ctx.cf.findZoneId(apex);
|
|
197
221
|
if (!zoneId) {
|
|
198
|
-
zoneNote = `apex ${platform ? HANDLE_ROOT : apex}
|
|
199
|
-
advice.push(
|
|
222
|
+
zoneNote = t `apex ${platform ? HANDLE_ROOT : apex} is not in the CF account (no zone)`;
|
|
223
|
+
advice.push(t `Run \`clize domain import ${apex}\` to create the zone and add it.`);
|
|
200
224
|
}
|
|
201
225
|
else {
|
|
202
226
|
const zone = await ctx.cf.getZone(zoneId);
|
|
@@ -204,16 +228,16 @@ export async function checkDomainHealth(ctx, domain, opts = {}) {
|
|
|
204
228
|
zoneOk = zone.status === "active" && !(zone.paused);
|
|
205
229
|
zoneNote = zoneOk
|
|
206
230
|
? `zone active`
|
|
207
|
-
: `zone
|
|
231
|
+
: t `zone status ${zone.status}${zone.paused ? "(paused)" : ""}`;
|
|
208
232
|
if (!zoneOk)
|
|
209
|
-
advice.push(`zone
|
|
233
|
+
advice.push(t `The zone is not active: once the NS points at CF, run \`clize domain import ${apex}\` to push activation.`);
|
|
210
234
|
// 注意:zone active ≠ 域名可达 —— CF 的 NS 复核有缓存滞后(事故期间全程假 active)。
|
|
211
235
|
if (zoneOk && !delegationOk && !platform)
|
|
212
|
-
zoneNote += "(⚠️
|
|
236
|
+
zoneNote += t(" (⚠️ but public delegation is broken — the zone status is a CF cache; layer ① is authoritative)");
|
|
213
237
|
}
|
|
214
238
|
}
|
|
215
239
|
catch (e) {
|
|
216
|
-
zoneNote = `zone
|
|
240
|
+
zoneNote = t `zone lookup failed: ${e instanceof Error ? e.message : e}`;
|
|
217
241
|
}
|
|
218
242
|
// ③ host → 站点 worker 绑定(Workers Custom Domain)
|
|
219
243
|
let bindingOk = false;
|
|
@@ -223,11 +247,11 @@ export async function checkDomainHealth(ctx, domain, opts = {}) {
|
|
|
223
247
|
const hit = bindings.find((b) => b.hostname.toLowerCase() === d);
|
|
224
248
|
bindingOk = !!hit;
|
|
225
249
|
bindingNote = hit
|
|
226
|
-
?
|
|
227
|
-
:
|
|
250
|
+
? t `bound to worker ${hit.service}`
|
|
251
|
+
: t("not bound to the site worker (deploy binds it automatically; ignore this layer for email-only domains)");
|
|
228
252
|
}
|
|
229
253
|
catch (e) {
|
|
230
|
-
bindingNote =
|
|
254
|
+
bindingNote = t `binding lookup failed: ${e instanceof Error ? e.message : e}`;
|
|
231
255
|
}
|
|
232
256
|
// ④ 站点内容(KV 里有没有 index.html;需调用方注入 namespace id)
|
|
233
257
|
let content;
|
|
@@ -242,21 +266,21 @@ export async function checkDomainHealth(ctx, domain, opts = {}) {
|
|
|
242
266
|
}
|
|
243
267
|
content = {
|
|
244
268
|
ok: contentOk,
|
|
245
|
-
note: contentOk ? "
|
|
269
|
+
note: contentOk ? t("site content present (index.html in KV)") : t("no index.html in KV (never deployed?)"),
|
|
246
270
|
};
|
|
247
271
|
if (!contentOk && bindingOk)
|
|
248
|
-
advice.push(
|
|
272
|
+
advice.push(t `The domain is bound but has no content: run \`clize deploy <dir> --domain ${d}\`.`);
|
|
249
273
|
}
|
|
250
274
|
const healthy = delegationOk && zoneOk && (!bindingOk || !content || content.ok);
|
|
251
275
|
const verdict = !delegationOk
|
|
252
276
|
? probe.delegation === "error"
|
|
253
|
-
? "
|
|
254
|
-
: "🔴
|
|
277
|
+
? t("probe failed (network); retry later")
|
|
278
|
+
: t("🔴 unreachable from outside: registry delegation fault (the bottom layer; fix this one)")
|
|
255
279
|
: !zoneOk
|
|
256
|
-
? "🟡
|
|
280
|
+
? t("🟡 delegation fine but the CF zone is not active")
|
|
257
281
|
: bindingOk && content && !content.ok
|
|
258
|
-
? "🟡
|
|
259
|
-
: "✅
|
|
282
|
+
? t("🟡 domain resolves and is bound, but has no site content")
|
|
283
|
+
: t("✅ healthy: delegation / zone / binding all fine");
|
|
260
284
|
return {
|
|
261
285
|
domain: d,
|
|
262
286
|
apex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-health.js","sourceRoot":"","sources":["../../src/core/domain-health.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uBAAuB;AACvB,oDAAoD;AACpD,iEAAiE;AACjE,sCAAsC;AACtC,uDAAuD;AACvD,sCAAsC;AACtC,sCAAsC;AACtC,0DAA0D;AAC1D,wCAAwC;AACxC,+DAA+D;AAI/D,6DAA6D;AAC7D,MAAM,WAAW,GAAI,UAAyE;KAC3F,OAAO,EAAE,GAAG,EAAE,iBAAiB,IAAI,WAAW,CAAC;AAElD,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AA+BD,uFAAuF;AACvF,KAAK,UAAU,QAAQ,CACrB,IAA6B,EAC7B,IAAY,EACZ,IAAgB;IAEhB,MAAM,GAAG,GACP,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,mCAAmC,kBAAkB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;QAC5E,CAAC,CAAC,6CAA6C,kBAAkB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAC3F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/E,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;KAClC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAc,CAAC;AACzC,CAAC;AAED,qDAAqD;AACrD,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,IAAgB;IAEhB,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACrF,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY;QAC7F,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;QACrC,MAAM,UAAU,GAAkC,QAAQ;YACxD,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBACtB,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvC,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,WAAW,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,CAAC;YACP,IAAI;YACJ,UAAU;YACV,WAAW,EAAE,SAAS;YACtB,QAAQ;YACR,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM;YACxB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS;SACV,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,CAAC;YACP,IAAI;YACJ,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,SAAS;SACV,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,CAAkB;IAC7C,OAAO,CAAC,CAAC,UAAU,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC;AAyBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,CAAc;IACvC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC;IACrF,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IAC3E,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC;IACrF,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ;QACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAClI,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,6CAA6C,EAAE,CAAC;AAClF,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ;QAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IACvD,IAAI,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ;QAAE,OAAO,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,KAM3B;IACC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC9D,IAAI,KAAK,CAAC,QAAQ,GAAG,mBAAmB;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI;QAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAChF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACzC,CAAC;AAgBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,MAAc,EACd,OAAwD,EAAE;IAE1D,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,gCAAgC;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAE;YACC,IAAI,EAAE,CAAC;YACP,IAAI;YACJ,UAAU,EAAE,YAAY;YACxB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,eAAe;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChB;QACvB,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,cAAsB,CAAC;IAC3B,IAAI,QAAQ;QAAE,cAAc,GAAG,QAAQ,WAAW,WAAW,CAAC;SACzD,IAAI,KAAK,CAAC,UAAU,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ;QAAE,cAAc,GAAG,yBAAyB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;SACxI,IAAI,KAAK,CAAC,UAAU,KAAK,YAAY;QAAE,cAAc,GAAG,uBAAuB,CAAC,gCAAgC,CAAC;SACjH,IAAI,KAAK,CAAC,UAAU,KAAK,WAAW;QAAE,cAAc,GAAG,gBAAgB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;SAChI,IAAI,KAAK,CAAC,UAAU,KAAK,YAAY;QAAE,cAAc,GAAG,KAAK,CAAC,QAAQ;YACzE,CAAC,CAAC,uFAAuF;YACzF,CAAC,CAAC,mBAAmB,CAAC;;QACnB,cAAc,GAAG,QAAQ,KAAK,CAAC,KAAK,IAAI,SAAS,QAAQ,CAAC;IAC/D,IAAI,KAAK,CAAC,UAAU,KAAK,WAAW;QAClC,MAAM,CAAC,IAAI,CACT,qDAAqD,IAAI,0CAA0C,IAAI,mBAAmB,CAC3H,CAAC;IACJ,IAAI,KAAK,CAAC,UAAU,KAAK,YAAY;QACnC,MAAM,CAAC,IAAI,CACT,wBAAwB,IAAI,wGAAwG,CACrI,CAAC;IAEJ,YAAY;IACZ,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,UAA8B,CAAC;IACnC,IAAI,MAA0B,CAAC;IAC/B,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,QAAQ,GAAG,QAAQ,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,2BAA2B,IAAI,eAAe,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAE,IAA6B,CAAC,MAAM,CAAC,CAAC;YAC9E,QAAQ,GAAG,MAAM;gBACf,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACvF,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,kDAAkD,IAAI,UAAU,CAAC,CAAC;YAC3F,4DAA4D;YAC5D,IAAI,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;gBACtC,QAAQ,IAAI,4CAA4C,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,GAAG,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,+CAA+C;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACnC,KAAK,EACL,aAAa,GAAG,CAAC,EAAE,CAAC,SAAS,6BAA6B,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAClF,CAAC;QACF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,WAAW,GAAG,GAAG;YACf,CAAC,CAAC,eAAe,GAAG,CAAC,OAAO,EAAE;YAC9B,CAAC,CAAC,0CAA0C,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,GAAG,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;IAED,iDAAiD;IACjD,IAAI,OAAgD,CAAC;IACrD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAClB,KAAK,EACL,aAAa,GAAG,CAAC,EAAE,CAAC,SAAS,0BAA0B,IAAI,CAAC,aAAa,aAAa,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAC9H,CAAC;YACF,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,OAAO,GAAG;YACR,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B;SACxE,CAAC;QACF,IAAI,CAAC,SAAS,IAAI,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,KAAK,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,IAAI,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,CAAC,YAAY;QAC3B,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,OAAO;YAC5B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,4BAA4B;QAChC,CAAC,CAAC,CAAC,MAAM;YACP,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;gBACnC,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,yBAAyB,CAAC;IAElC,OAAO;QACL,MAAM,EAAE,CAAC;QACT,IAAI;QACJ,OAAO;QACP,OAAO;QACP,MAAM,EAAE;YACN,UAAU,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE;YAC7D,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YAC7C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC;QACD,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"domain-health.js","sourceRoot":"","sources":["../../src/core/domain-health.ts"],"names":[],"mappings":"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"}
|