@geekmidas/cli 10.0.0-alpha.88 → 10.0.0-alpha.89
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/dist/GoDaddyProvider--36rw8cP.mjs +387 -0
- package/dist/GoDaddyProvider--36rw8cP.mjs.map +1 -0
- package/dist/GoDaddyProvider-DnRor066.cjs +387 -0
- package/dist/GoDaddyProvider-DnRor066.cjs.map +1 -0
- package/dist/{HostingerProvider-CVc3rLPB.mjs → HostingerProvider-BI6J7oJr.mjs} +2 -2
- package/dist/{HostingerProvider-CVc3rLPB.mjs.map → HostingerProvider-BI6J7oJr.mjs.map} +1 -1
- package/dist/{HostingerProvider-BCB1QJj1.cjs → HostingerProvider-CyTpG_jy.cjs} +2 -2
- package/dist/{HostingerProvider-BCB1QJj1.cjs.map → HostingerProvider-CyTpG_jy.cjs.map} +1 -1
- package/dist/{LegacyStateStore-CWG_HVC0.cjs → LegacyStateStore-BaBoYl59.cjs} +2 -2
- package/dist/{LegacyStateStore-CWG_HVC0.cjs.map → LegacyStateStore-BaBoYl59.cjs.map} +1 -1
- package/dist/{LegacyStateStore-B0R4LlX_.mjs → LegacyStateStore-CO7bzJCU.mjs} +2 -2
- package/dist/{LegacyStateStore-B0R4LlX_.mjs.map → LegacyStateStore-CO7bzJCU.mjs.map} +1 -1
- package/dist/{LocalStateStore-CLwa2DpK.cjs → LocalStateStore-CUWh2BWU.cjs} +2 -2
- package/dist/{LocalStateStore-CLwa2DpK.cjs.map → LocalStateStore-CUWh2BWU.cjs.map} +1 -1
- package/dist/{LocalStateStore-Q4vXg2ua.mjs → LocalStateStore-C_hYDv6I.mjs} +2 -2
- package/dist/{LocalStateStore-Q4vXg2ua.mjs.map → LocalStateStore-C_hYDv6I.mjs.map} +1 -1
- package/dist/{S3StateStore-Cea9_5gF.cjs → S3StateStore-O8EYfjfG.cjs} +2 -2
- package/dist/{S3StateStore-Cea9_5gF.cjs.map → S3StateStore-O8EYfjfG.cjs.map} +1 -1
- package/dist/{S3StateStore-CksKYKRa.mjs → S3StateStore-hIm8Rrmu.mjs} +2 -2
- package/dist/{S3StateStore-CksKYKRa.mjs.map → S3StateStore-hIm8Rrmu.mjs.map} +1 -1
- package/dist/{SSMStateStore-aBOTF018.cjs → SSMStateStore-DIzbiqCz.cjs} +2 -2
- package/dist/{SSMStateStore-aBOTF018.cjs.map → SSMStateStore-DIzbiqCz.cjs.map} +1 -1
- package/dist/{SSMStateStore-BszSCAS2.mjs → SSMStateStore-IvcjTk8h.mjs} +2 -2
- package/dist/{SSMStateStore-BszSCAS2.mjs.map → SSMStateStore-IvcjTk8h.mjs.map} +1 -1
- package/dist/SubscriberGenerator-BPqQf8fB.mjs.map +1 -1
- package/dist/SubscriberGenerator-BVn7cQ-2.cjs.map +1 -1
- package/dist/{add-5MZAXybv.cjs → add-C9qX4Juc.cjs} +30 -7
- package/dist/add-C9qX4Juc.cjs.map +1 -0
- package/dist/{add-D_jNqnfZ.mjs → add-v3tCbrpE.mjs} +30 -7
- package/dist/add-v3tCbrpE.mjs.map +1 -0
- package/dist/{bundler-1REMhKps.cjs → bundler-C4NmpRTD.cjs} +5 -5
- package/dist/{bundler-1REMhKps.cjs.map → bundler-C4NmpRTD.cjs.map} +1 -1
- package/dist/{bundler-BMo-JP5s.mjs → bundler-C_fCgcVO.mjs} +5 -5
- package/dist/{bundler-BMo-JP5s.mjs.map → bundler-C_fCgcVO.mjs.map} +1 -1
- package/dist/{cli-BL8ZHsLQ.cjs → cli-C85Dut8K.cjs} +6 -5
- package/dist/cli-C85Dut8K.cjs.map +1 -0
- package/dist/{cli-7edNFwGk.mjs → cli-REdO9X5b.mjs} +7 -6
- package/dist/cli-REdO9X5b.mjs.map +1 -0
- package/dist/{compose-xw86kVYi.cjs → compose-BvrhDwJ6.cjs} +556 -30
- package/dist/compose-BvrhDwJ6.cjs.map +1 -0
- package/dist/{compose-DbJhRQlh.mjs → compose-Dn0oAgQ0.mjs} +509 -31
- package/dist/compose-Dn0oAgQ0.mjs.map +1 -0
- package/dist/{config-DrCAyoH5.d.mts → config-CdEcTrjG.d.mts} +3 -3
- package/dist/{config-CpjsVxru.d.cts.map → config-CdEcTrjG.d.mts.map} +1 -1
- package/dist/{config-CpjsVxru.d.cts → config-pST7E0CS.d.cts} +3 -3
- package/dist/{config-DrCAyoH5.d.mts.map → config-pST7E0CS.d.cts.map} +1 -1
- package/dist/config.cjs +1 -1
- package/dist/config.d.cts +3 -3
- package/dist/config.d.mts +3 -3
- package/dist/config.mjs +1 -1
- package/dist/{credentials-tr26-KML.cjs → credentials-BKfIugu2.cjs} +47 -2
- package/dist/credentials-BKfIugu2.cjs.map +1 -0
- package/dist/{credentials-BgJ5mS_d.mjs → credentials-CnVqoXMb.mjs} +30 -3
- package/dist/credentials-CnVqoXMb.mjs.map +1 -0
- package/dist/deploy/public.cjs +10 -10
- package/dist/deploy/public.d.cts +9 -3
- package/dist/deploy/public.d.cts.map +1 -1
- package/dist/deploy/public.d.mts +9 -3
- package/dist/deploy/public.d.mts.map +1 -1
- package/dist/deploy/public.mjs +10 -10
- package/dist/{deploy-BTfmXd3g.mjs → deploy-BaERRh0Q.mjs} +10 -8
- package/dist/deploy-BaERRh0Q.mjs.map +1 -0
- package/dist/{deploy-CtbZj4zN.cjs → deploy-DbBGo3a6.cjs} +10 -8
- package/dist/deploy-DbBGo3a6.cjs.map +1 -0
- package/dist/{dokploy-r69yZaIt.mjs → dokploy-CMmD_ddX.mjs} +2 -2
- package/dist/{dokploy-r69yZaIt.mjs.map → dokploy-CMmD_ddX.mjs.map} +1 -1
- package/dist/{dokploy-TGk3oPwr.cjs → dokploy-DwAaKA9B.cjs} +2 -2
- package/dist/{dokploy-TGk3oPwr.cjs.map → dokploy-DwAaKA9B.cjs.map} +1 -1
- package/dist/{encryption-C-8Tt5Hh.mjs → encryption-BQmhq9_y.mjs} +3 -3
- package/dist/{encryption-C-8Tt5Hh.mjs.map → encryption-BQmhq9_y.mjs.map} +1 -1
- package/dist/{encryption-CDn7BH5O.cjs → encryption-BrN_9_CM.cjs} +3 -3
- package/dist/{encryption-CDn7BH5O.cjs.map → encryption-BrN_9_CM.cjs.map} +1 -1
- package/dist/{engine-jAINgiOB.mjs → engine-DILocOOH.mjs} +23 -404
- package/dist/engine-DILocOOH.mjs.map +1 -0
- package/dist/{engine-Bt5k_UMq.cjs → engine-DgHoFBMw.cjs} +25 -406
- package/dist/engine-DgHoFBMw.cjs.map +1 -0
- package/dist/{github-DFhuJQlp.cjs → github-Bf7pz6AV.cjs} +3 -3
- package/dist/{github-DFhuJQlp.cjs.map → github-Bf7pz6AV.cjs.map} +1 -1
- package/dist/{github-CZHAtwPT.mjs → github-xzg99wz8.mjs} +3 -3
- package/dist/{github-CZHAtwPT.mjs.map → github-xzg99wz8.mjs.map} +1 -1
- package/dist/{index-MnUJuUlj.d.mts → index-D-F_hTDz.d.cts} +21 -4
- package/dist/index-D-F_hTDz.d.cts.map +1 -0
- package/dist/{index-elsLJTUv.d.cts → index-YFNxR5Ns.d.mts} +21 -4
- package/dist/index-YFNxR5Ns.d.mts.map +1 -0
- package/dist/index.cjs +246 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +247 -65
- package/dist/index.mjs.map +1 -1
- package/dist/{local-Cq8qdgNX.cjs → local-BjxDfPvy.cjs} +2 -2
- package/dist/{local-Cq8qdgNX.cjs.map → local-BjxDfPvy.cjs.map} +1 -1
- package/dist/{local-Ciq-bTPr.mjs → local-IuoIF3CT.mjs} +2 -2
- package/dist/{local-Ciq-bTPr.mjs.map → local-IuoIF3CT.mjs.map} +1 -1
- package/dist/{migrate-B1rVlwj1.cjs → migrate-7xayVtzL.cjs} +3 -3
- package/dist/{migrate-B1rVlwj1.cjs.map → migrate-7xayVtzL.cjs.map} +1 -1
- package/dist/{migrate-ggkPVJRC.mjs → migrate-CKLJ73OO.mjs} +4 -4
- package/dist/{migrate-ggkPVJRC.mjs.map → migrate-CKLJ73OO.mjs.map} +1 -1
- package/dist/{migrate-Dn7nK6sh.mjs → migrate-CpmO5qnl.mjs} +3 -3
- package/dist/{migrate-Dn7nK6sh.mjs.map → migrate-CpmO5qnl.mjs.map} +1 -1
- package/dist/{migrate-B16qgYTn.cjs → migrate-DPF7ZF8M.cjs} +3 -3
- package/dist/{migrate-B16qgYTn.cjs.map → migrate-DPF7ZF8M.cjs.map} +1 -1
- package/dist/openapi.cjs +1 -1
- package/dist/openapi.d.cts +1 -1
- package/dist/openapi.d.mts +1 -1
- package/dist/openapi.mjs +1 -1
- package/dist/reconcile/public.d.cts +1 -1
- package/dist/reconcile/public.d.mts +1 -1
- package/dist/{reconcile--I7V4Klj.mjs → reconcile-Dh1Jk7WE.mjs} +2 -2
- package/dist/{reconcile--I7V4Klj.mjs.map → reconcile-Dh1Jk7WE.mjs.map} +1 -1
- package/dist/{resolve-BSke45k6.mjs → resolve-Dv_weZoh.mjs} +4 -4
- package/dist/{resolve-BSke45k6.mjs.map → resolve-Dv_weZoh.mjs.map} +1 -1
- package/dist/{resolve-BXeXzpmU.cjs → resolve-dlKPFNgv.cjs} +4 -4
- package/dist/{resolve-BXeXzpmU.cjs.map → resolve-dlKPFNgv.cjs.map} +1 -1
- package/dist/{rollback-DFMiBWf0.cjs → rollback-65VVIdBM.cjs} +6 -6
- package/dist/{rollback-DFMiBWf0.cjs.map → rollback-65VVIdBM.cjs.map} +1 -1
- package/dist/{rollback-CEE6dse4.mjs → rollback-DpSU2DsD.mjs} +6 -6
- package/dist/{rollback-CEE6dse4.mjs.map → rollback-DpSU2DsD.mjs.map} +1 -1
- package/dist/{runtime-HabiNBtJ.d.mts → runtime-CN_kmqxo.d.cts} +2 -2
- package/dist/{runtime-D48ZKk8_.d.cts.map → runtime-CN_kmqxo.d.cts.map} +1 -1
- package/dist/{runtime-D48ZKk8_.d.cts → runtime-Cjvon3oj.d.mts} +2 -2
- package/dist/{runtime-HabiNBtJ.d.mts.map → runtime-Cjvon3oj.d.mts.map} +1 -1
- package/dist/{seeds-CsI0A_Ef.cjs → seeds-CN6tB-va.cjs} +646 -187
- package/dist/{seeds-CsI0A_Ef.cjs.map → seeds-CN6tB-va.cjs.map} +1 -1
- package/dist/{seeds-BYdrtZsC.mjs → seeds-perzdN81.mjs} +599 -164
- package/dist/seeds-perzdN81.mjs.map +1 -0
- package/dist/{sniffer-B0EU73bj.mjs → sniffer-BTtX3NUM.mjs} +3 -3
- package/dist/{sniffer-B0EU73bj.mjs.map → sniffer-BTtX3NUM.mjs.map} +1 -1
- package/dist/{sniffer-DJYupBeK.cjs → sniffer-IAQEpsQb.cjs} +3 -3
- package/dist/{sniffer-DJYupBeK.cjs.map → sniffer-IAQEpsQb.cjs.map} +1 -1
- package/dist/{sst-DAqUoZKG.cjs → sst-BgcOsaBi.cjs} +3 -3
- package/dist/{sst-DAqUoZKG.cjs.map → sst-BgcOsaBi.cjs.map} +1 -1
- package/dist/{sst-D1Qj4sIs.mjs → sst-CJzvyrEz.mjs} +3 -3
- package/dist/{sst-D1Qj4sIs.mjs.map → sst-CJzvyrEz.mjs.map} +1 -1
- package/dist/{stages-Brn3vcdy.cjs → stages-CUn6gvXL.cjs} +2 -2
- package/dist/{stages-Brn3vcdy.cjs.map → stages-CUn6gvXL.cjs.map} +1 -1
- package/dist/{stages-DoHHz6pS.mjs → stages-CnZRYmkI.mjs} +2 -2
- package/dist/{stages-DoHHz6pS.mjs.map → stages-CnZRYmkI.mjs.map} +1 -1
- package/dist/target/public.cjs +1 -1
- package/dist/target/public.d.cts +2 -2
- package/dist/target/public.d.mts +2 -2
- package/dist/target/public.mjs +1 -1
- package/dist/{terminal-BTbZlrFV.mjs → terminal-D8TPK7o9.mjs} +3 -3
- package/dist/{terminal-BTbZlrFV.mjs.map → terminal-D8TPK7o9.mjs.map} +1 -1
- package/dist/{terminal-COv23heb.cjs → terminal-DuapRxh6.cjs} +2 -2
- package/dist/{terminal-COv23heb.cjs.map → terminal-DuapRxh6.cjs.map} +1 -1
- package/dist/{types-0oAyFOfR.d.cts → types-NqX1Hz4P.d.cts} +210 -205
- package/dist/types-NqX1Hz4P.d.cts.map +1 -0
- package/dist/{types-BZ01tZs-.d.mts → types-ZHuZ89hv.d.mts} +210 -205
- package/dist/types-ZHuZ89hv.d.mts.map +1 -0
- package/dist/workspace/index.cjs +3 -1
- package/dist/workspace/index.d.cts +3 -3
- package/dist/workspace/index.d.mts +3 -3
- package/dist/workspace/index.mjs +2 -2
- package/dist/{workspace-D2CYLMCW.mjs → workspace-CJ0lKFq-.mjs} +231 -10
- package/dist/workspace-CJ0lKFq-.mjs.map +1 -0
- package/dist/{workspace-CT0JM3Y8.cjs → workspace-CwW3Gkru.cjs} +266 -9
- package/dist/workspace-CwW3Gkru.cjs.map +1 -0
- package/package.json +15 -15
- package/dist/add-5MZAXybv.cjs.map +0 -1
- package/dist/add-D_jNqnfZ.mjs.map +0 -1
- package/dist/cli-7edNFwGk.mjs.map +0 -1
- package/dist/cli-BL8ZHsLQ.cjs.map +0 -1
- package/dist/compose-DbJhRQlh.mjs.map +0 -1
- package/dist/compose-xw86kVYi.cjs.map +0 -1
- package/dist/credentials-BgJ5mS_d.mjs.map +0 -1
- package/dist/credentials-tr26-KML.cjs.map +0 -1
- package/dist/deploy-BTfmXd3g.mjs.map +0 -1
- package/dist/deploy-CtbZj4zN.cjs.map +0 -1
- package/dist/engine-Bt5k_UMq.cjs.map +0 -1
- package/dist/engine-jAINgiOB.mjs.map +0 -1
- package/dist/index-MnUJuUlj.d.mts.map +0 -1
- package/dist/index-elsLJTUv.d.cts.map +0 -1
- package/dist/seeds-BYdrtZsC.mjs.map +0 -1
- package/dist/types-0oAyFOfR.d.cts.map +0 -1
- package/dist/types-BZ01tZs-.d.mts.map +0 -1
- package/dist/workspace-CT0JM3Y8.cjs.map +0 -1
- package/dist/workspace-D2CYLMCW.mjs.map +0 -1
|
@@ -37,6 +37,72 @@ function assertKnownSecretsStore(store) {
|
|
|
37
37
|
if (typeof provider === "string" && !SECRETS_STORE_PROVIDERS.includes(provider)) throw new UnknownSecretsStoreProvider(provider);
|
|
38
38
|
}
|
|
39
39
|
//#endregion
|
|
40
|
+
//#region src/compose/dnsConfig.ts
|
|
41
|
+
/**
|
|
42
|
+
* `dns['<root domain>'].records` — how a domain's hosts point at a compose
|
|
43
|
+
* stage's server — checked and read. Pure, and kept apart from the DNS step
|
|
44
|
+
* so the workspace schema checks a config with the same rules and the same
|
|
45
|
+
* named errors the step applies.
|
|
46
|
+
*/
|
|
47
|
+
/** The stage-secret key holding the server's public IPv4 address. */
|
|
48
|
+
const SERVER_IPV4_KEY = "GKM_SERVER_IPV4";
|
|
49
|
+
/** The stage-secret key holding the server's public IPv6 address, if any. */
|
|
50
|
+
const SERVER_IPV6_KEY = "GKM_SERVER_IPV6";
|
|
51
|
+
/**
|
|
52
|
+
* Whether a stage secret is gkm's own — the server's address — and so never
|
|
53
|
+
* written into an app's or a worker's environment.
|
|
54
|
+
*/
|
|
55
|
+
function isReservedStageKey(key) {
|
|
56
|
+
return key.startsWith("GKM_SERVER_");
|
|
57
|
+
}
|
|
58
|
+
/** A DNS hostname: dot-separated labels of letters, digits and inner '-'. */
|
|
59
|
+
const HOSTNAME = /^(?=.{1,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i;
|
|
60
|
+
/** Whether `value` is a DNS hostname with at least two labels. */
|
|
61
|
+
function isHostname(value) {
|
|
62
|
+
return typeof value === "string" && HOSTNAME.test(value);
|
|
63
|
+
}
|
|
64
|
+
/** A CNAME target that is not a hostname under its own domain. */
|
|
65
|
+
var DnsTargetInvalid = class extends Error {
|
|
66
|
+
domain;
|
|
67
|
+
target;
|
|
68
|
+
stage;
|
|
69
|
+
constructor(domain, target, stage) {
|
|
70
|
+
super(`dns['${domain}'].records.target${stage ? ` for '${stage}'` : ""} is ${JSON.stringify(target)}, which is not a hostname under ${domain}. Every host's CNAME points at it and gkm writes its A record, so it must be a name in the same zone — like 'server.${domain}'.`);
|
|
71
|
+
this.domain = domain;
|
|
72
|
+
this.target = target;
|
|
73
|
+
this.stage = stage;
|
|
74
|
+
this.name = "DnsTargetInvalid";
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
/** The CNAME target names under one domain, by the stage they are for, checked. */
|
|
78
|
+
function targets(records) {
|
|
79
|
+
const { target } = records;
|
|
80
|
+
if (target && typeof target === "object" && !Array.isArray(target)) return Object.entries(target);
|
|
81
|
+
return [[void 0, target]];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* One domain's records mode checked.
|
|
85
|
+
*
|
|
86
|
+
* @throws {DnsTargetInvalid} for a target that is not a hostname under it
|
|
87
|
+
*/
|
|
88
|
+
function checkDnsRecordsMode(domain, records) {
|
|
89
|
+
if (!records || typeof records !== "object") return;
|
|
90
|
+
const mode = records;
|
|
91
|
+
if (mode.mode !== "cname") return;
|
|
92
|
+
for (const [stage, target] of targets(mode)) {
|
|
93
|
+
const name = typeof target === "string" ? target.toLowerCase() : target;
|
|
94
|
+
if (!isHostname(name) || !name.endsWith(`.${domain.toLowerCase()}`)) throw new DnsTargetInvalid(domain, target, stage);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The CNAME target a domain's hosts point at on `stage`, or `undefined` for
|
|
99
|
+
* A records — including a per-stage map that names no target for it.
|
|
100
|
+
*/
|
|
101
|
+
function cnameTarget(records, stage) {
|
|
102
|
+
if (!records || records === "a") return void 0;
|
|
103
|
+
return (typeof records.target === "string" ? records.target : records.target[stage])?.toLowerCase();
|
|
104
|
+
}
|
|
105
|
+
//#endregion
|
|
40
106
|
//#region src/compose/proxy.ts
|
|
41
107
|
/**
|
|
42
108
|
* Which proxy a stage's stack is served by, and with whose certificate —
|
|
@@ -689,6 +755,33 @@ var UndeclaredStage = class extends Error {
|
|
|
689
755
|
this.name = "UndeclaredStage";
|
|
690
756
|
}
|
|
691
757
|
};
|
|
758
|
+
/**
|
|
759
|
+
* A per-stage setting keyed by a stage the workspace does not deploy: a typo,
|
|
760
|
+
* a stage since removed, or the local stage, which none of them apply to.
|
|
761
|
+
*/
|
|
762
|
+
var UnknownStageKey = class extends Error {
|
|
763
|
+
setting;
|
|
764
|
+
stage;
|
|
765
|
+
deployed;
|
|
766
|
+
local;
|
|
767
|
+
constructor(setting, stage, deployed, local) {
|
|
768
|
+
super(`${setting} names the stage '${stage}', ` + (stage === local ? `the local stage — ${setting} is read for deployed stages only. ` : "which is not one of this workspace's deployed stages. ") + `It takes ${deployed.length > 0 ? deployed.map((s) => `'${s}'`).join(", ") : "no stage: stages.deployed is empty"} — the stages in stages.deployed.`);
|
|
769
|
+
this.setting = setting;
|
|
770
|
+
this.stage = stage;
|
|
771
|
+
this.deployed = deployed;
|
|
772
|
+
this.local = local;
|
|
773
|
+
this.name = "UnknownStageKey";
|
|
774
|
+
}
|
|
775
|
+
};
|
|
776
|
+
/**
|
|
777
|
+
* The first key of a per-stage map that is not a deployed stage.
|
|
778
|
+
*
|
|
779
|
+
* @throws {UnknownStageKey}
|
|
780
|
+
*/
|
|
781
|
+
function assertDeployedStageKeys(setting, map, stages) {
|
|
782
|
+
if (!map || !stages?.deployed) return;
|
|
783
|
+
for (const key of Object.keys(map)) if (!stages.deployed.includes(key)) throw new UnknownStageKey(setting, key, stages.deployed, stages.local);
|
|
784
|
+
}
|
|
692
785
|
//#endregion
|
|
693
786
|
//#region src/workspace/schema.ts
|
|
694
787
|
/** Routes are a glob, or a list of them. */
|
|
@@ -895,10 +988,22 @@ object({
|
|
|
895
988
|
unchanged: boolean()
|
|
896
989
|
});
|
|
897
990
|
/**
|
|
991
|
+
* How a domain's hosts point at a compose stage's server: an A (and AAAA)
|
|
992
|
+
* record each (`'a'`, the default), or one A record for `target` and a CNAME
|
|
993
|
+
* to it for every other host but the apex. `target` is one name, or one per
|
|
994
|
+
* stage; it must be under the domain.
|
|
995
|
+
*/
|
|
996
|
+
const DnsRecordsModeSchema = union([literal("a"), object({
|
|
997
|
+
mode: literal("cname"),
|
|
998
|
+
target: union([string(), record(string(), string())])
|
|
999
|
+
}).strict()]);
|
|
1000
|
+
/**
|
|
898
1001
|
* Hostinger DNS provider config (without domain - domain is the record key).
|
|
899
1002
|
*/
|
|
900
1003
|
const HostingerDnsProviderSchema = object({
|
|
901
1004
|
provider: literal("hostinger"),
|
|
1005
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1006
|
+
records: DnsRecordsModeSchema.optional(),
|
|
902
1007
|
/** TTL in seconds (default: 300) */
|
|
903
1008
|
ttl: number().int().positive().optional()
|
|
904
1009
|
});
|
|
@@ -907,6 +1012,8 @@ const HostingerDnsProviderSchema = object({
|
|
|
907
1012
|
*/
|
|
908
1013
|
const Route53DnsProviderSchema = object({
|
|
909
1014
|
provider: literal("route53"),
|
|
1015
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1016
|
+
records: DnsRecordsModeSchema.optional(),
|
|
910
1017
|
/** AWS region (optional - uses AWS_REGION env var if not provided) */
|
|
911
1018
|
region: AwsRegionSchema.optional(),
|
|
912
1019
|
/** AWS profile name (optional - uses default credential chain if not provided) */
|
|
@@ -917,23 +1024,45 @@ const Route53DnsProviderSchema = object({
|
|
|
917
1024
|
ttl: number().int().positive().optional()
|
|
918
1025
|
});
|
|
919
1026
|
/**
|
|
1027
|
+
* GoDaddy DNS provider config (without domain - domain is the record key).
|
|
1028
|
+
*
|
|
1029
|
+
* Credentials: `GODADDY_API_TOKEN` (a Personal Access Token scoped to
|
|
1030
|
+
* `domains.dns:update`), else `gkm login --provider godaddy`. GoDaddy refuses
|
|
1031
|
+
* a TTL under 600 seconds.
|
|
1032
|
+
*/
|
|
1033
|
+
const GoDaddyDnsProviderSchema = object({
|
|
1034
|
+
provider: literal("godaddy"),
|
|
1035
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1036
|
+
records: DnsRecordsModeSchema.optional(),
|
|
1037
|
+
/** TTL in seconds (default and minimum: 600) */
|
|
1038
|
+
ttl: number().int().min(600, "GoDaddy's minimum TTL is 600 seconds").optional()
|
|
1039
|
+
});
|
|
1040
|
+
/**
|
|
920
1041
|
* Cloudflare DNS provider config (placeholder for future).
|
|
921
1042
|
*/
|
|
922
1043
|
const CloudflareDnsProviderSchema = object({
|
|
923
1044
|
provider: literal("cloudflare"),
|
|
1045
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1046
|
+
records: DnsRecordsModeSchema.optional(),
|
|
924
1047
|
/** TTL in seconds (default: 300) */
|
|
925
1048
|
ttl: number().int().positive().optional()
|
|
926
1049
|
});
|
|
927
1050
|
/**
|
|
928
1051
|
* Manual DNS configuration (user handles DNS themselves).
|
|
929
1052
|
*/
|
|
930
|
-
const ManualDnsProviderSchema = object({
|
|
1053
|
+
const ManualDnsProviderSchema = object({
|
|
1054
|
+
provider: literal("manual"),
|
|
1055
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1056
|
+
records: DnsRecordsModeSchema.optional()
|
|
1057
|
+
});
|
|
931
1058
|
/**
|
|
932
1059
|
* Custom DNS provider config (user-provided implementation).
|
|
933
1060
|
*/
|
|
934
1061
|
const CustomDnsProviderSchema = object({
|
|
935
1062
|
/** Custom DnsProvider implementation */
|
|
936
1063
|
provider: custom((val) => typeof val === "object" && val !== null && typeof val.name === "string" && typeof val.getRecords === "function" && typeof val.upsertRecords === "function", { message: "Custom DNS provider must implement name, getRecords(), and upsertRecords() methods" }),
|
|
1064
|
+
/** How the hosts point at a compose stage's server — see {@link DnsRecordsModeSchema}. */
|
|
1065
|
+
records: DnsRecordsModeSchema.optional(),
|
|
937
1066
|
/** TTL in seconds (default: 300) */
|
|
938
1067
|
ttl: number().int().positive().optional()
|
|
939
1068
|
});
|
|
@@ -943,6 +1072,7 @@ const CustomDnsProviderSchema = object({
|
|
|
943
1072
|
const BuiltInDnsProviderSchema = discriminatedUnion("provider", [
|
|
944
1073
|
HostingerDnsProviderSchema,
|
|
945
1074
|
Route53DnsProviderSchema,
|
|
1075
|
+
GoDaddyDnsProviderSchema,
|
|
946
1076
|
CloudflareDnsProviderSchema,
|
|
947
1077
|
ManualDnsProviderSchema
|
|
948
1078
|
]);
|
|
@@ -965,6 +1095,7 @@ const DnsProviderSchema = union([BuiltInDnsProviderSchema, CustomDnsProviderSche
|
|
|
965
1095
|
* Supported providers:
|
|
966
1096
|
* - 'hostinger': Use Hostinger DNS API
|
|
967
1097
|
* - 'route53': Use AWS Route53
|
|
1098
|
+
* - 'godaddy': Use GoDaddy's v1 DNS API
|
|
968
1099
|
* - 'cloudflare': Use Cloudflare DNS API (future)
|
|
969
1100
|
* - 'manual': Don't create records, just print required records
|
|
970
1101
|
* - Custom: Provide a DnsProvider implementation
|
|
@@ -972,20 +1103,19 @@ const DnsProviderSchema = union([BuiltInDnsProviderSchema, CustomDnsProviderSche
|
|
|
972
1103
|
const DnsConfigSchema = record(string(), DnsProviderSchema);
|
|
973
1104
|
const HostingerDnsConfigSchema = HostingerDnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
974
1105
|
const Route53DnsConfigSchema = Route53DnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
1106
|
+
const GoDaddyDnsConfigSchema = GoDaddyDnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
975
1107
|
const CloudflareDnsConfigSchema = CloudflareDnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
976
1108
|
const ManualDnsConfigSchema = ManualDnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
977
1109
|
const CustomDnsConfigSchema = CustomDnsProviderSchema.extend({ domain: string().min(1, "Domain is required") });
|
|
978
1110
|
const BuiltInDnsConfigSchema = discriminatedUnion("provider", [
|
|
979
1111
|
HostingerDnsConfigSchema,
|
|
980
1112
|
Route53DnsConfigSchema,
|
|
1113
|
+
GoDaddyDnsConfigSchema,
|
|
981
1114
|
CloudflareDnsConfigSchema,
|
|
982
1115
|
ManualDnsConfigSchema
|
|
983
1116
|
]);
|
|
984
1117
|
const LegacyDnsConfigSchema = union([BuiltInDnsConfigSchema, CustomDnsConfigSchema]);
|
|
985
|
-
|
|
986
|
-
* Combined DNS config that supports both new multi-domain and legacy single-domain formats.
|
|
987
|
-
*/
|
|
988
|
-
const DnsConfigWithLegacySchema = union([DnsConfigSchema, LegacyDnsConfigSchema]);
|
|
1118
|
+
union([DnsConfigSchema, LegacyDnsConfigSchema]);
|
|
989
1119
|
/**
|
|
990
1120
|
* Backups configuration schema.
|
|
991
1121
|
*
|
|
@@ -1075,15 +1205,12 @@ const DeployConfigSchema = object({
|
|
|
1075
1205
|
}).optional(),
|
|
1076
1206
|
/** Whose deploy this is, on a target shared with other workspaces. */
|
|
1077
1207
|
namespace: string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "deploy.namespace must be lowercase letters and digits with single '-' between them").optional(),
|
|
1078
|
-
/** Each deployed stage's base domain (stage name -> domain). */
|
|
1079
|
-
domains: record(string(), string()).optional(),
|
|
1080
1208
|
/** Where every target pushes and pulls the apps' images. */
|
|
1081
1209
|
registry: string().min(1).optional(),
|
|
1082
1210
|
dokploy: DokployWorkspaceConfigSchema.optional(),
|
|
1083
1211
|
compose: ComposeWorkspaceConfigSchema.optional(),
|
|
1084
1212
|
telemetry: TelemetryConfigSchema.optional(),
|
|
1085
1213
|
objects: ObjectsConfigSchema.optional(),
|
|
1086
|
-
dns: DnsConfigWithLegacySchema.optional(),
|
|
1087
1214
|
backups: BackupsConfigSchema.optional()
|
|
1088
1215
|
});
|
|
1089
1216
|
/**
|
|
@@ -1276,6 +1403,10 @@ const WorkspaceConfigSchema = object({
|
|
|
1276
1403
|
*/
|
|
1277
1404
|
apps: record(string(), AppConfigSchema).optional(),
|
|
1278
1405
|
shared: SharedConfigSchema.optional(),
|
|
1406
|
+
/** Each deployed stage's base domain (stage name -> domain). */
|
|
1407
|
+
domains: record(string(), string()).optional(),
|
|
1408
|
+
/** Each root domain's DNS provider, and how its hosts are pointed. */
|
|
1409
|
+
dns: DnsConfigSchema.optional(),
|
|
1279
1410
|
deploy: DeployConfigSchema.optional(),
|
|
1280
1411
|
stages: StagesConfigSchema,
|
|
1281
1412
|
secrets: SecretsConfigSchema.optional(),
|
|
@@ -1341,6 +1472,59 @@ const WorkspaceConfigSchema = object({
|
|
|
1341
1472
|
path: ["deploy", "compose"]
|
|
1342
1473
|
});
|
|
1343
1474
|
}
|
|
1475
|
+
const perStage = [
|
|
1476
|
+
[
|
|
1477
|
+
"domains",
|
|
1478
|
+
["domains"],
|
|
1479
|
+
data.domains
|
|
1480
|
+
],
|
|
1481
|
+
[
|
|
1482
|
+
"deploy.objects",
|
|
1483
|
+
["deploy", "objects"],
|
|
1484
|
+
data.deploy?.objects
|
|
1485
|
+
],
|
|
1486
|
+
[
|
|
1487
|
+
"deploy.telemetry",
|
|
1488
|
+
["deploy", "telemetry"],
|
|
1489
|
+
data.deploy?.telemetry
|
|
1490
|
+
],
|
|
1491
|
+
...Object.entries(data.dns ?? {}).map(([domain, entry]) => {
|
|
1492
|
+
const records = entry.records;
|
|
1493
|
+
const target = records && typeof records === "object" ? records.target : void 0;
|
|
1494
|
+
return [
|
|
1495
|
+
`dns['${domain}'].records.target`,
|
|
1496
|
+
[
|
|
1497
|
+
"dns",
|
|
1498
|
+
domain,
|
|
1499
|
+
"records",
|
|
1500
|
+
"target"
|
|
1501
|
+
],
|
|
1502
|
+
target && typeof target === "object" ? target : void 0
|
|
1503
|
+
];
|
|
1504
|
+
})
|
|
1505
|
+
];
|
|
1506
|
+
for (const [setting, path, map] of perStage) try {
|
|
1507
|
+
assertDeployedStageKeys(setting, map, data.stages);
|
|
1508
|
+
} catch (error) {
|
|
1509
|
+
ctx.addIssue({
|
|
1510
|
+
code: "custom",
|
|
1511
|
+
message: error instanceof Error ? error.message : String(error),
|
|
1512
|
+
path
|
|
1513
|
+
});
|
|
1514
|
+
}
|
|
1515
|
+
for (const [domain, entry] of Object.entries(data.dns ?? {})) try {
|
|
1516
|
+
checkDnsRecordsMode(domain, entry.records);
|
|
1517
|
+
} catch (error) {
|
|
1518
|
+
ctx.addIssue({
|
|
1519
|
+
code: "custom",
|
|
1520
|
+
message: error instanceof Error ? error.message : String(error),
|
|
1521
|
+
path: [
|
|
1522
|
+
"dns",
|
|
1523
|
+
domain,
|
|
1524
|
+
"records"
|
|
1525
|
+
]
|
|
1526
|
+
});
|
|
1527
|
+
}
|
|
1344
1528
|
if (data.state?.provider === "ssm" && !data.name) ctx.addIssue({
|
|
1345
1529
|
code: "custom",
|
|
1346
1530
|
message: "Workspace name is required when using SSM state provider. Add \"name\" to your gkm.config.ts.",
|
|
@@ -1402,6 +1586,8 @@ const WORKSPACE_KEYS = /* @__PURE__ */ new Set([
|
|
|
1402
1586
|
"constructs",
|
|
1403
1587
|
"apps",
|
|
1404
1588
|
"shared",
|
|
1589
|
+
"domains",
|
|
1590
|
+
"dns",
|
|
1405
1591
|
"deploy",
|
|
1406
1592
|
"stages",
|
|
1407
1593
|
"secrets",
|
|
@@ -1535,6 +1721,8 @@ function normalizeWorkspace(config, cwd) {
|
|
|
1535
1721
|
root: cwd,
|
|
1536
1722
|
...config.constructs ? { constructs: config.constructs } : {},
|
|
1537
1723
|
apps: normalizedApps,
|
|
1724
|
+
...config.domains ? { domains: config.domains } : {},
|
|
1725
|
+
...config.dns ? { dns: config.dns } : {},
|
|
1538
1726
|
deploy: config.deploy ?? { default: "dokploy" },
|
|
1539
1727
|
shared: config.shared ?? { packages: ["packages/*"] },
|
|
1540
1728
|
stages: validateStages(config.stages),
|
|
@@ -1580,6 +1768,8 @@ function wrapSingleAppAsWorkspace(config, cwd) {
|
|
|
1580
1768
|
runtime: config.runtime,
|
|
1581
1769
|
env: config.env
|
|
1582
1770
|
} },
|
|
1771
|
+
...config.domains ? { domains: config.domains } : {},
|
|
1772
|
+
...config.dns ? { dns: config.dns } : {},
|
|
1583
1773
|
deploy: {
|
|
1584
1774
|
default: "dokploy",
|
|
1585
1775
|
...config.deploy
|
|
@@ -1610,10 +1800,41 @@ var DokployRegistryMoved = class extends Error {
|
|
|
1610
1800
|
this.name = "DokployRegistryMoved";
|
|
1611
1801
|
}
|
|
1612
1802
|
};
|
|
1803
|
+
/**
|
|
1804
|
+
* `deploy.domains`, which became `domains` at the root of the config: a stage's
|
|
1805
|
+
* domain is a fact about the product every target and every command reads,
|
|
1806
|
+
* not a deploy setting.
|
|
1807
|
+
*/
|
|
1808
|
+
var DomainsMoved = class extends Error {
|
|
1809
|
+
domains;
|
|
1810
|
+
constructor(domains) {
|
|
1811
|
+
super(`deploy.domains is now domains, at the root of gkm.config.ts. Move it out of deploy: defineWorkspace({ …, domains: ${JSON.stringify(domains)}, deploy: { … } }).`);
|
|
1812
|
+
this.domains = domains;
|
|
1813
|
+
this.name = "DomainsMoved";
|
|
1814
|
+
}
|
|
1815
|
+
};
|
|
1816
|
+
/**
|
|
1817
|
+
* `deploy.dns`, which became `dns` at the root of the config, keyed by root
|
|
1818
|
+
* domain.
|
|
1819
|
+
*/
|
|
1820
|
+
var DnsMoved = class extends Error {
|
|
1821
|
+
dns;
|
|
1822
|
+
constructor(dns) {
|
|
1823
|
+
const legacy = dns && typeof dns === "object" && "domain" in dns && "provider" in dns;
|
|
1824
|
+
const { domain, ...rest } = legacy ? dns : {};
|
|
1825
|
+
super(`deploy.dns is now dns, at the root of gkm.config.ts, keyed by root domain. Move it out of deploy: defineWorkspace({ …, dns: ${JSON.stringify(legacy ? { [String(domain)]: rest } : dns)}, deploy: { … } }).`);
|
|
1826
|
+
this.dns = dns;
|
|
1827
|
+
this.name = "DnsMoved";
|
|
1828
|
+
}
|
|
1829
|
+
};
|
|
1613
1830
|
/** Refuse a deploy key that has moved, naming where it lives now. */
|
|
1614
1831
|
function assertNoMovedDeployKeys(deploy) {
|
|
1615
1832
|
const dokploy = deploy?.dokploy;
|
|
1616
1833
|
if (dokploy && typeof dokploy === "object" && "registry" in dokploy) throw new DokployRegistryMoved(dokploy.registry);
|
|
1834
|
+
if (deploy && typeof deploy === "object") {
|
|
1835
|
+
if ("domains" in deploy) throw new DomainsMoved(deploy.domains);
|
|
1836
|
+
if ("dns" in deploy) throw new DnsMoved(deploy.dns);
|
|
1837
|
+
}
|
|
1617
1838
|
}
|
|
1618
1839
|
function processConfig(config, cwd) {
|
|
1619
1840
|
assertNoMovedDeployKeys(config.deploy);
|
|
@@ -1753,6 +1974,6 @@ function getEndpointForStage(dokployConfig, stage) {
|
|
|
1753
1974
|
return dokployConfig.endpoint;
|
|
1754
1975
|
}
|
|
1755
1976
|
//#endregion
|
|
1756
|
-
export {
|
|
1977
|
+
export { RotationInProgress as $, InvalidStages as A, LOGS_PORT as B, WorkspaceConfigSchema as C, isPhase2DeployTarget as D, isDeployTargetSupported as E, stageProblems as F, checkS3Config as G, provisioningOf as H, otlpTelemetryEnv as I, BucketNameUnavailable as J, AccessKeyLimit as K, resolveStageTelemetry as L, UndeclaredStage as M, assertDeployedStage as N, safeValidateWorkspaceConfig as O, deployedProblems as P, RecordedBucketUnreachable as Q, stageSampleRate as R, SUPPORTED_DEPLOY_TARGETS as S, getDeployTargetError as T, stageProvider as U, UnknownStageProvider as V, S3_PROVISIONING as W, IamUserNotOwned as X, BucketOwnedByAnotherProject as Y, ProvisionedBucketUnreachable as Z, PUBLIC_ENV_PREFIXES as _, allConstructGlobs as a, SERVER_IPV6_KEY as at, isWorkspaceConfig as b, constructPatterns as c, SECRETS_STORE_PROVIDERS as ct, getAppGkmConfig as d, S3RegionRequired as et, getEndpointForStage as f, wrapSingleAppAsWorkspace as g, workspaceConstructGlobs as h, InvalidWorkspaceConfig as i, SERVER_IPV4_KEY as it, TEST_STAGE as j, validateWorkspaceConfig as k, defineWorkspace as l, UnknownSecretsStoreProvider as lt, processConfig as m, DokployRegistryMoved as n, certificateFor as nt, appConstructGlobs as o, cnameTarget as ot, normalizeWorkspace as p, BucketKeySetElsewhere as q, DomainsMoved as r, proxyFor as rt, assertNoMovedDeployKeys as s, isReservedStageKey as st, DnsMoved as t, ComposeTlsFileMissing as tt, getAppBuildOrder as u, getPublicEnvPrefix as v, formatValidationErrors as w, PHASE_2_DEPLOY_TARGETS as x, stripPublicPrefix as y, telemetryEnv as z };
|
|
1757
1978
|
|
|
1758
|
-
//# sourceMappingURL=workspace-
|
|
1979
|
+
//# sourceMappingURL=workspace-CJ0lKFq-.mjs.map
|