@geekmidas/cli 10.0.0-alpha.87 → 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/databases-BY-pEImp.cjs.map +1 -1
- package/dist/databases-CzszQV0N.mjs.map +1 -1
- 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 +305 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +306 -71
- 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/ready-BpNbORRB.cjs.map +1 -1
- package/dist/ready-b6vm0-W-.mjs.map +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
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
2
|
-
const require_credentials = require("./credentials-
|
|
2
|
+
const require_credentials = require("./credentials-BKfIugu2.cjs");
|
|
3
3
|
const require_discover = require("./discover-D1It5r_h.cjs");
|
|
4
4
|
const require_derive = require("./derive-DAbo49sm.cjs");
|
|
5
|
-
const require_workspace = require("./workspace-
|
|
5
|
+
const require_workspace = require("./workspace-CwW3Gkru.cjs");
|
|
6
6
|
const require_config = require("./config.cjs");
|
|
7
7
|
const require_EndpointGenerator = require("./EndpointGenerator-CwLjBCFE.cjs");
|
|
8
8
|
const require_SubscriberGenerator = require("./SubscriberGenerator-BVn7cQ-2.cjs");
|
|
9
|
-
const require_resolve = require("./resolve-
|
|
9
|
+
const require_resolve = require("./resolve-dlKPFNgv.cjs");
|
|
10
10
|
let node_path = require("node:path");
|
|
11
11
|
let node_fs = require("node:fs");
|
|
12
12
|
let node_fs_promises = require("node:fs/promises");
|
|
@@ -31,6 +31,7 @@ let _aws_sdk_client_sns = require("@aws-sdk/client-sns");
|
|
|
31
31
|
let _aws_sdk_client_sqs = require("@aws-sdk/client-sqs");
|
|
32
32
|
let pg = require("pg");
|
|
33
33
|
let _geekmidas_cache_postgres = require("@geekmidas/cache/postgres");
|
|
34
|
+
let node_dns_promises = require("node:dns/promises");
|
|
34
35
|
let _geekmidas_storage_s3_url = require("@geekmidas/storage/s3-url");
|
|
35
36
|
_geekmidas_storage_s3_url = require_rolldown_runtime.__toESM(_geekmidas_storage_s3_url, 1);
|
|
36
37
|
//#region src/workspace/rootSite.ts
|
|
@@ -77,11 +78,11 @@ var AmbiguousRootSite = class extends Error {
|
|
|
77
78
|
};
|
|
78
79
|
//#endregion
|
|
79
80
|
//#region src/target/dokploy/domain.ts
|
|
80
|
-
/** A stage was deployed that `
|
|
81
|
+
/** A stage was deployed that `domains` gives no domain. */
|
|
81
82
|
var NoDomainForStage = class extends Error {
|
|
82
83
|
stage;
|
|
83
84
|
constructor(stage) {
|
|
84
|
-
super(`No domain for stage "${stage}". Add it to gkm.config.ts:
|
|
85
|
+
super(`No domain for stage "${stage}". Add it to gkm.config.ts: domains: { ${stage}: 'example.com' }.`);
|
|
85
86
|
this.stage = stage;
|
|
86
87
|
this.name = "NoDomainForStage";
|
|
87
88
|
}
|
|
@@ -90,11 +91,11 @@ var NoDomainForStage = class extends Error {
|
|
|
90
91
|
* The hostname an app answers on for a stage.
|
|
91
92
|
*
|
|
92
93
|
* 1. An explicit `app.domain` — a string, or one per stage — wins.
|
|
93
|
-
* 2. Otherwise from the stage's base domain in `
|
|
94
|
+
* 2. Otherwise from the stage's base domain in `domains`: the root site
|
|
94
95
|
* answers on the domain itself, and every other app on
|
|
95
96
|
* `{subdomain}.{domain}` — its declaration's `subdomain`, or its own name.
|
|
96
97
|
*
|
|
97
|
-
* @throws {NoDomainForStage} when `
|
|
98
|
+
* @throws {NoDomainForStage} when `domains` names no domain for it
|
|
98
99
|
*/
|
|
99
100
|
function resolveHost(appName, app, stage, domains, isMainFrontend) {
|
|
100
101
|
if (app.domain) {
|
|
@@ -303,6 +304,11 @@ function logsAccess(logs, ctx) {
|
|
|
303
304
|
}
|
|
304
305
|
//#endregion
|
|
305
306
|
//#region src/secrets/storage.ts
|
|
307
|
+
/**
|
|
308
|
+
* What a stage's secrets are, independent of where they are kept: building
|
|
309
|
+
* them, changing them, and handing them to a process. Where they are kept is a
|
|
310
|
+
* {@link SecretsStore}'s business — see `secretsStoreFor`.
|
|
311
|
+
*/
|
|
306
312
|
var storage_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
307
313
|
initStageSecrets: () => initStageSecrets,
|
|
308
314
|
maskPassword: () => maskPassword,
|
|
@@ -331,7 +337,7 @@ function initStageSecrets(stage) {
|
|
|
331
337
|
function toEmbeddableSecrets(secrets) {
|
|
332
338
|
return {
|
|
333
339
|
...secrets.urls,
|
|
334
|
-
...secrets.custom,
|
|
340
|
+
...Object.fromEntries(Object.entries(secrets.custom).filter(([key]) => !require_workspace.isReservedStageKey(key))),
|
|
335
341
|
...secrets.services.postgres && {
|
|
336
342
|
POSTGRES_USER: secrets.services.postgres.username,
|
|
337
343
|
POSTGRES_PASSWORD: secrets.services.postgres.password,
|
|
@@ -857,7 +863,7 @@ function isRemoteStore(workspace, stage) {
|
|
|
857
863
|
}
|
|
858
864
|
//#endregion
|
|
859
865
|
//#region src/credentials/index.ts
|
|
860
|
-
const logger$
|
|
866
|
+
const logger$2 = console;
|
|
861
867
|
/**
|
|
862
868
|
* Load environment files
|
|
863
869
|
* @internal Exported for testing
|
|
@@ -908,7 +914,7 @@ async function findAvailablePort(preferredPort, maxAttempts = 10) {
|
|
|
908
914
|
for (let i = 0; i < maxAttempts; i++) {
|
|
909
915
|
const port = preferredPort + i;
|
|
910
916
|
if (await isPortAvailable(port)) return port;
|
|
911
|
-
logger$
|
|
917
|
+
logger$2.log(`⚠️ Port ${port} is in use, trying ${port + 1}...`);
|
|
912
918
|
}
|
|
913
919
|
throw new Error(`Could not find an available port after trying ${maxAttempts} ports starting from ${preferredPort}`);
|
|
914
920
|
}
|
|
@@ -945,7 +951,7 @@ async function savePortState(workspaceRoot, ports) {
|
|
|
945
951
|
async function loadSecretsForApp(store, stage) {
|
|
946
952
|
const stageSecrets = await store.read(stage);
|
|
947
953
|
if (!stageSecrets) return {};
|
|
948
|
-
logger$
|
|
954
|
+
logger$2.log(`🔐 Loading secrets from stage: ${stage}`);
|
|
949
955
|
return toEmbeddableSecrets(stageSecrets);
|
|
950
956
|
}
|
|
951
957
|
/**
|
|
@@ -1043,7 +1049,7 @@ async function prepareEntryCredentials(options) {
|
|
|
1043
1049
|
free: isPortAvailable,
|
|
1044
1050
|
holder: holderOf
|
|
1045
1051
|
});
|
|
1046
|
-
for (const { app, from, to, holder } of assigned.moved) logger$
|
|
1052
|
+
for (const { app, from, to, holder } of assigned.moved) logger$2.log(`↪️ ${app}: ${from} is held by ${describeHolder(holder)}, which is not this workspace's — using ${to}`);
|
|
1047
1053
|
workspace = withAppPorts(workspace, assigned.ports);
|
|
1048
1054
|
workspaceAppPort = assigned.ports[appName] ?? workspaceAppPort;
|
|
1049
1055
|
}
|
|
@@ -1067,7 +1073,7 @@ async function prepareEntryCredentials(options) {
|
|
|
1067
1073
|
});
|
|
1068
1074
|
Object.assign(credentials, reconciled.env);
|
|
1069
1075
|
declaredKeys.push(...Object.keys(reconciled.env));
|
|
1070
|
-
if (Object.keys(reconciled.env).length > 0) logger$
|
|
1076
|
+
if (Object.keys(reconciled.env).length > 0) logger$2.log(`🔌 Resolved ${Object.keys(reconciled.env).length} declared URL(s)`);
|
|
1071
1077
|
}
|
|
1072
1078
|
const secretsDir = (0, node_path.join)(secretsRoot, ".gkm");
|
|
1073
1079
|
await (0, node_fs_promises.mkdir)(secretsDir, { recursive: true });
|
|
@@ -6774,6 +6780,14 @@ function requiredStageKeys(input) {
|
|
|
6774
6780
|
...apps(d)
|
|
6775
6781
|
});
|
|
6776
6782
|
}
|
|
6783
|
+
if (!input.local && input.server) add({
|
|
6784
|
+
key: require_workspace.SERVER_IPV4_KEY,
|
|
6785
|
+
id: "server",
|
|
6786
|
+
kind: "server",
|
|
6787
|
+
what: "the public IPv4 address of the server the stage's stack runs on — its hosts' DNS records point at it, and every deploy checks they do",
|
|
6788
|
+
note: `${require_workspace.SERVER_IPV6_KEY} adds its IPv6 address (AAAA records); neither is ever handed to an app`,
|
|
6789
|
+
example: "203.0.113.10"
|
|
6790
|
+
});
|
|
6777
6791
|
for (const d of byId(input.credentials)) add({
|
|
6778
6792
|
key: (0, _geekmidas_manifest.provideKey)(d.id, "credentials"),
|
|
6779
6793
|
id: d.id,
|
|
@@ -7204,17 +7218,17 @@ function isStateStore(value) {
|
|
|
7204
7218
|
async function createStateStore(options) {
|
|
7205
7219
|
const { config, workspaceRoot, workspaceName } = options;
|
|
7206
7220
|
if (!config || config.provider === "local") {
|
|
7207
|
-
const { LocalStateStore } = await Promise.resolve().then(() => require("./LocalStateStore-
|
|
7221
|
+
const { LocalStateStore } = await Promise.resolve().then(() => require("./LocalStateStore-CUWh2BWU.cjs")).then((n) => n.LocalStateStore_exports);
|
|
7208
7222
|
return new LocalStateStore(workspaceRoot);
|
|
7209
7223
|
}
|
|
7210
7224
|
if (isStateStore(config.provider)) return config.provider;
|
|
7211
7225
|
if (isStateProvider(config.provider)) {
|
|
7212
|
-
const { LegacyStateStore } = await Promise.resolve().then(() => require("./LegacyStateStore-
|
|
7226
|
+
const { LegacyStateStore } = await Promise.resolve().then(() => require("./LegacyStateStore-BaBoYl59.cjs"));
|
|
7213
7227
|
return new LegacyStateStore(config.provider, { warn: options.warn });
|
|
7214
7228
|
}
|
|
7215
7229
|
if (config.provider === "ssm") {
|
|
7216
7230
|
if (!workspaceName) throw new StateStoreNeedsWorkspaceName("ssm");
|
|
7217
|
-
const { SSMStateStore } = await Promise.resolve().then(() => require("./SSMStateStore-
|
|
7231
|
+
const { SSMStateStore } = await Promise.resolve().then(() => require("./SSMStateStore-DIzbiqCz.cjs"));
|
|
7218
7232
|
const ssm = config;
|
|
7219
7233
|
return SSMStateStore.create({
|
|
7220
7234
|
workspaceName,
|
|
@@ -7224,7 +7238,7 @@ async function createStateStore(options) {
|
|
|
7224
7238
|
}
|
|
7225
7239
|
if (config.provider === "s3") {
|
|
7226
7240
|
if (!workspaceName) throw new StateStoreNeedsWorkspaceName("s3");
|
|
7227
|
-
const { S3StateStore } = await Promise.resolve().then(() => require("./S3StateStore-
|
|
7241
|
+
const { S3StateStore } = await Promise.resolve().then(() => require("./S3StateStore-O8EYfjfG.cjs"));
|
|
7228
7242
|
const s3 = config;
|
|
7229
7243
|
return S3StateStore.create({
|
|
7230
7244
|
workspaceName,
|
|
@@ -7237,6 +7251,576 @@ async function createStateStore(options) {
|
|
|
7237
7251
|
throw new UnknownStateProvider(config);
|
|
7238
7252
|
}
|
|
7239
7253
|
//#endregion
|
|
7254
|
+
//#region src/target/dokploy/dns/DnsProvider.ts
|
|
7255
|
+
/**
|
|
7256
|
+
* Check if value is a DnsProvider implementation.
|
|
7257
|
+
*/
|
|
7258
|
+
function isDnsProvider(value) {
|
|
7259
|
+
return typeof value === "object" && value !== null && typeof value.name === "string" && typeof value.getRecords === "function" && typeof value.upsertRecords === "function" && typeof value.deleteRecords === "function";
|
|
7260
|
+
}
|
|
7261
|
+
/**
|
|
7262
|
+
* Create a DNS provider based on configuration.
|
|
7263
|
+
*
|
|
7264
|
+
* - 'hostinger': HostingerProvider
|
|
7265
|
+
* - 'route53': Route53Provider
|
|
7266
|
+
* - 'godaddy': GoDaddyProvider
|
|
7267
|
+
* - 'manual': Returns null (user handles DNS)
|
|
7268
|
+
* - Custom: Use provided DnsProvider implementation
|
|
7269
|
+
*/
|
|
7270
|
+
async function createDnsProvider(options) {
|
|
7271
|
+
const { config } = options;
|
|
7272
|
+
if (config.provider === "manual") return null;
|
|
7273
|
+
if (isDnsProvider(config.provider)) return config.provider;
|
|
7274
|
+
const provider = config.provider;
|
|
7275
|
+
if (provider === "hostinger") {
|
|
7276
|
+
const { HostingerProvider } = await Promise.resolve().then(() => require("./HostingerProvider-CyTpG_jy.cjs"));
|
|
7277
|
+
return new HostingerProvider();
|
|
7278
|
+
}
|
|
7279
|
+
if (provider === "route53") {
|
|
7280
|
+
const { Route53Provider } = await Promise.resolve().then(() => require("./Route53Provider-Bllus2NR.cjs"));
|
|
7281
|
+
const route53Config = config;
|
|
7282
|
+
return new Route53Provider({
|
|
7283
|
+
region: route53Config.region,
|
|
7284
|
+
profile: route53Config.profile,
|
|
7285
|
+
hostedZoneId: route53Config.hostedZoneId
|
|
7286
|
+
});
|
|
7287
|
+
}
|
|
7288
|
+
if (provider === "godaddy") {
|
|
7289
|
+
const { GoDaddyProvider } = await Promise.resolve().then(() => require("./GoDaddyProvider-DnRor066.cjs"));
|
|
7290
|
+
return new GoDaddyProvider(options.godaddy ?? {});
|
|
7291
|
+
}
|
|
7292
|
+
if (provider === "cloudflare") throw new DnsProviderNotImplemented("cloudflare");
|
|
7293
|
+
throw new DnsProviderUnknown(config);
|
|
7294
|
+
}
|
|
7295
|
+
/**
|
|
7296
|
+
* The provider's credentials can write records and not read them — a key
|
|
7297
|
+
* scoped to updates only. What reads them falls back to writing every record,
|
|
7298
|
+
* which is idempotent, without a diff.
|
|
7299
|
+
*/
|
|
7300
|
+
var DnsRecordsUnreadable = class extends Error {
|
|
7301
|
+
provider;
|
|
7302
|
+
domain;
|
|
7303
|
+
reason;
|
|
7304
|
+
constructor(provider, domain, reason) {
|
|
7305
|
+
super(`The ${provider} key cannot read ${domain}'s DNS records (${reason}), so changes cannot be compared with what is there: every record is written, which leaves one that already has its value as it was.`);
|
|
7306
|
+
this.provider = provider;
|
|
7307
|
+
this.domain = domain;
|
|
7308
|
+
this.reason = reason;
|
|
7309
|
+
this.name = "DnsRecordsUnreadable";
|
|
7310
|
+
}
|
|
7311
|
+
};
|
|
7312
|
+
/** A DNS provider gkm names and does not have yet. */
|
|
7313
|
+
var DnsProviderNotImplemented = class extends Error {
|
|
7314
|
+
provider;
|
|
7315
|
+
constructor(provider) {
|
|
7316
|
+
super(`The ${provider} DNS provider is not implemented yet. Use 'route53', 'godaddy', 'hostinger' or 'manual' for this domain in dns, or pass your own DnsProvider object.`);
|
|
7317
|
+
this.provider = provider;
|
|
7318
|
+
this.name = "DnsProviderNotImplemented";
|
|
7319
|
+
}
|
|
7320
|
+
};
|
|
7321
|
+
/** A `provider:` that is none of the built-ins, nor a DnsProvider object. */
|
|
7322
|
+
var DnsProviderUnknown = class extends Error {
|
|
7323
|
+
config;
|
|
7324
|
+
constructor(config) {
|
|
7325
|
+
super(`Unknown DNS provider: ${JSON.stringify(config)}. dns takes 'route53', 'godaddy', 'hostinger', 'manual', or an object implementing DnsProvider.`);
|
|
7326
|
+
this.config = config;
|
|
7327
|
+
this.name = "DnsProviderUnknown";
|
|
7328
|
+
}
|
|
7329
|
+
};
|
|
7330
|
+
//#endregion
|
|
7331
|
+
//#region src/deploy/state.ts
|
|
7332
|
+
/**
|
|
7333
|
+
* Deploy state management for Dokploy deployments
|
|
7334
|
+
*
|
|
7335
|
+
* Stores resource IDs (applications, services) per stage to avoid
|
|
7336
|
+
* re-creating resources on subsequent deploys.
|
|
7337
|
+
*/
|
|
7338
|
+
/**
|
|
7339
|
+
* Create a new empty state for a stage
|
|
7340
|
+
*/
|
|
7341
|
+
function createEmptyState(stage, projectId, environmentId) {
|
|
7342
|
+
return {
|
|
7343
|
+
provider: "dokploy",
|
|
7344
|
+
stage,
|
|
7345
|
+
projectId,
|
|
7346
|
+
environmentId,
|
|
7347
|
+
applications: {},
|
|
7348
|
+
services: {},
|
|
7349
|
+
lastDeployedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7350
|
+
};
|
|
7351
|
+
}
|
|
7352
|
+
/**
|
|
7353
|
+
* Set application ID in state (mutates state)
|
|
7354
|
+
*/
|
|
7355
|
+
function setApplicationId(state, appName, applicationId) {
|
|
7356
|
+
state.applications[appName] = applicationId;
|
|
7357
|
+
}
|
|
7358
|
+
/** Two records naming the same image: by digest when both have one. */
|
|
7359
|
+
function sameImage(a, b) {
|
|
7360
|
+
return a.digest && b.digest ? a.digest === b.digest : a.ref === b.ref;
|
|
7361
|
+
}
|
|
7362
|
+
/** The newest release in `history` after `index` that a rollback may restore. */
|
|
7363
|
+
function restorable(history, index, current) {
|
|
7364
|
+
return history.slice(index + 1).find((entry) => !entry.rolledBack && !sameImage(entry, current));
|
|
7365
|
+
}
|
|
7366
|
+
/**
|
|
7367
|
+
* Record that `image` went live for `appName` (mutates state): it becomes
|
|
7368
|
+
* `current`, and what was current becomes `previous`. Releasing what already
|
|
7369
|
+
* runs — a redeploy of the same digest — changes nothing.
|
|
7370
|
+
*/
|
|
7371
|
+
function recordRelease(state, appName, image, releasedAt = /* @__PURE__ */ new Date()) {
|
|
7372
|
+
const releases = state.releases?.[appName];
|
|
7373
|
+
if (releases && sameImage(releases.current, image)) return;
|
|
7374
|
+
const entry = {
|
|
7375
|
+
...image,
|
|
7376
|
+
releasedAt: releasedAt.toISOString()
|
|
7377
|
+
};
|
|
7378
|
+
const history = [entry, ...releases?.history ?? []].slice(0, 10);
|
|
7379
|
+
const previous = releases?.current;
|
|
7380
|
+
state.releases = {
|
|
7381
|
+
...state.releases,
|
|
7382
|
+
[appName]: {
|
|
7383
|
+
current: entry,
|
|
7384
|
+
...previous ? { previous } : {},
|
|
7385
|
+
history
|
|
7386
|
+
}
|
|
7387
|
+
};
|
|
7388
|
+
}
|
|
7389
|
+
/**
|
|
7390
|
+
* Record that `appName` was rolled back to `to` (mutates state): every
|
|
7391
|
+
* release newer than it is marked rolled back, so neither this rollback nor
|
|
7392
|
+
* a later one restores it, and `previous` moves to the release before `to`.
|
|
7393
|
+
*/
|
|
7394
|
+
function recordRollback(state, appName, to) {
|
|
7395
|
+
const releases = state.releases?.[appName];
|
|
7396
|
+
if (!releases) return;
|
|
7397
|
+
const index = releases.history.findIndex((entry) => !entry.rolledBack && sameImage(entry, to));
|
|
7398
|
+
if (index === -1) return;
|
|
7399
|
+
const history = releases.history.map((entry, i) => i < index ? {
|
|
7400
|
+
...entry,
|
|
7401
|
+
rolledBack: true
|
|
7402
|
+
} : entry);
|
|
7403
|
+
const current = history[index];
|
|
7404
|
+
const previous = restorable(history, index, current);
|
|
7405
|
+
state.releases = {
|
|
7406
|
+
...state.releases,
|
|
7407
|
+
[appName]: {
|
|
7408
|
+
current,
|
|
7409
|
+
...previous ? { previous } : {},
|
|
7410
|
+
history
|
|
7411
|
+
}
|
|
7412
|
+
};
|
|
7413
|
+
}
|
|
7414
|
+
/**
|
|
7415
|
+
* Get a generated secret for an app
|
|
7416
|
+
*/
|
|
7417
|
+
function getGeneratedSecret(state, appName, secretName) {
|
|
7418
|
+
return state?.generatedSecrets?.[appName]?.[secretName];
|
|
7419
|
+
}
|
|
7420
|
+
/**
|
|
7421
|
+
* Set a generated secret for an app (mutates state)
|
|
7422
|
+
*/
|
|
7423
|
+
function setGeneratedSecret(state, appName, secretName, value) {
|
|
7424
|
+
if (!state.generatedSecrets) state.generatedSecrets = {};
|
|
7425
|
+
if (!state.generatedSecrets[appName]) state.generatedSecrets[appName] = {};
|
|
7426
|
+
state.generatedSecrets[appName][secretName] = value;
|
|
7427
|
+
}
|
|
7428
|
+
/**
|
|
7429
|
+
* Set DNS verification record for a hostname (mutates state)
|
|
7430
|
+
*/
|
|
7431
|
+
function setDnsVerification(state, hostname, serverIp) {
|
|
7432
|
+
if (!state.dnsVerified) state.dnsVerified = {};
|
|
7433
|
+
state.dnsVerified[hostname] = {
|
|
7434
|
+
serverIp,
|
|
7435
|
+
verifiedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7436
|
+
};
|
|
7437
|
+
}
|
|
7438
|
+
/**
|
|
7439
|
+
* Check if a hostname is already verified with the given IP
|
|
7440
|
+
*/
|
|
7441
|
+
function isDnsVerified(state, hostname, serverIp) {
|
|
7442
|
+
return (state?.dnsVerified?.[hostname])?.serverIp === serverIp;
|
|
7443
|
+
}
|
|
7444
|
+
/**
|
|
7445
|
+
* Get the key for a DNS record in state
|
|
7446
|
+
*/
|
|
7447
|
+
function getDnsRecordKey(name, type) {
|
|
7448
|
+
return `${name}:${type}`;
|
|
7449
|
+
}
|
|
7450
|
+
/**
|
|
7451
|
+
* Set a created DNS record in state (mutates state)
|
|
7452
|
+
*/
|
|
7453
|
+
function setDnsRecord(state, record) {
|
|
7454
|
+
if (!state.dnsRecords) state.dnsRecords = {};
|
|
7455
|
+
const key = getDnsRecordKey(record.name, record.type);
|
|
7456
|
+
state.dnsRecords[key] = {
|
|
7457
|
+
...record,
|
|
7458
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7459
|
+
};
|
|
7460
|
+
}
|
|
7461
|
+
/**
|
|
7462
|
+
* Get backup state from state
|
|
7463
|
+
*/
|
|
7464
|
+
function getBackupState(state) {
|
|
7465
|
+
return state?.backups;
|
|
7466
|
+
}
|
|
7467
|
+
/**
|
|
7468
|
+
* Set backup state (mutates state)
|
|
7469
|
+
*/
|
|
7470
|
+
function setBackupState(state, backupState) {
|
|
7471
|
+
state.backups = backupState;
|
|
7472
|
+
}
|
|
7473
|
+
/**
|
|
7474
|
+
* Set postgres backup ID in state (mutates state)
|
|
7475
|
+
*/
|
|
7476
|
+
function setPostgresBackupId(state, backupId) {
|
|
7477
|
+
if (state.backups) state.backups.postgresBackupId = backupId;
|
|
7478
|
+
}
|
|
7479
|
+
//#endregion
|
|
7480
|
+
//#region src/target/dokploy/dns/index.ts
|
|
7481
|
+
/**
|
|
7482
|
+
* DNS orchestration for deployments
|
|
7483
|
+
*
|
|
7484
|
+
* Handles automatic DNS record creation for deployed applications.
|
|
7485
|
+
*/
|
|
7486
|
+
const logger$1 = require_discover.output;
|
|
7487
|
+
/**
|
|
7488
|
+
* Check if DNS config is legacy format (single domain with `domain` property)
|
|
7489
|
+
*/
|
|
7490
|
+
function isLegacyDnsConfig(config) {
|
|
7491
|
+
return typeof config === "object" && config !== null && "provider" in config && "domain" in config;
|
|
7492
|
+
}
|
|
7493
|
+
/**
|
|
7494
|
+
* Normalize DNS config to new multi-domain format
|
|
7495
|
+
*/
|
|
7496
|
+
function normalizeDnsConfig(config) {
|
|
7497
|
+
if (isLegacyDnsConfig(config)) {
|
|
7498
|
+
const { domain, ...providerConfig } = config;
|
|
7499
|
+
return { [domain]: providerConfig };
|
|
7500
|
+
}
|
|
7501
|
+
return config;
|
|
7502
|
+
}
|
|
7503
|
+
/**
|
|
7504
|
+
* Find the root domain for a hostname from available DNS configs
|
|
7505
|
+
*
|
|
7506
|
+
* @example
|
|
7507
|
+
* findRootDomain('api.geekmidas.com', { 'geekmidas.com': {...}, 'geekmidas.dev': {...} })
|
|
7508
|
+
* // Returns 'geekmidas.com'
|
|
7509
|
+
*/
|
|
7510
|
+
function findRootDomain(hostname, dnsConfig) {
|
|
7511
|
+
const domains = Object.keys(dnsConfig).sort((a, b) => b.length - a.length);
|
|
7512
|
+
for (const domain of domains) if (hostname === domain || hostname.endsWith(`.${domain}`)) return domain;
|
|
7513
|
+
return null;
|
|
7514
|
+
}
|
|
7515
|
+
/**
|
|
7516
|
+
* Group hostnames by their root domain
|
|
7517
|
+
*/
|
|
7518
|
+
function groupHostnamesByDomain(appHostnames, dnsConfig) {
|
|
7519
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
7520
|
+
for (const [appName, hostname] of appHostnames) {
|
|
7521
|
+
const rootDomain = findRootDomain(hostname, dnsConfig);
|
|
7522
|
+
if (!rootDomain) {
|
|
7523
|
+
logger$1.log(` ⚠ No DNS config found for hostname: ${hostname}`);
|
|
7524
|
+
continue;
|
|
7525
|
+
}
|
|
7526
|
+
if (!grouped.has(rootDomain)) grouped.set(rootDomain, /* @__PURE__ */ new Map());
|
|
7527
|
+
grouped.get(rootDomain).set(appName, hostname);
|
|
7528
|
+
}
|
|
7529
|
+
return grouped;
|
|
7530
|
+
}
|
|
7531
|
+
/**
|
|
7532
|
+
* Resolve IP address from a hostname
|
|
7533
|
+
*/
|
|
7534
|
+
async function resolveHostnameToIp(hostname) {
|
|
7535
|
+
try {
|
|
7536
|
+
return (await (0, node_dns_promises.lookup)(hostname, { family: 4 })).address;
|
|
7537
|
+
} catch (error) {
|
|
7538
|
+
throw new Error(`Failed to resolve IP for ${hostname}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
7539
|
+
}
|
|
7540
|
+
}
|
|
7541
|
+
/**
|
|
7542
|
+
* Extract subdomain from full hostname relative to root domain
|
|
7543
|
+
*
|
|
7544
|
+
* @example
|
|
7545
|
+
* extractSubdomain('api.joemoer.traflabs.io', 'traflabs.io') => 'api.joemoer'
|
|
7546
|
+
* extractSubdomain('joemoer.traflabs.io', 'traflabs.io') => 'joemoer'
|
|
7547
|
+
*/
|
|
7548
|
+
function extractSubdomain(hostname, rootDomain) {
|
|
7549
|
+
if (!hostname.endsWith(rootDomain)) throw new Error(`Hostname ${hostname} is not under root domain ${rootDomain}`);
|
|
7550
|
+
return hostname.slice(0, -(rootDomain.length + 1)) || "@";
|
|
7551
|
+
}
|
|
7552
|
+
/**
|
|
7553
|
+
* Generate required DNS records for a deployment
|
|
7554
|
+
*/
|
|
7555
|
+
function generateRequiredRecords(appHostnames, rootDomain, serverIp) {
|
|
7556
|
+
const records = [];
|
|
7557
|
+
for (const [appName, hostname] of appHostnames) {
|
|
7558
|
+
const subdomain = extractSubdomain(hostname, rootDomain);
|
|
7559
|
+
records.push({
|
|
7560
|
+
hostname,
|
|
7561
|
+
subdomain,
|
|
7562
|
+
type: "A",
|
|
7563
|
+
value: serverIp,
|
|
7564
|
+
appName
|
|
7565
|
+
});
|
|
7566
|
+
}
|
|
7567
|
+
return records;
|
|
7568
|
+
}
|
|
7569
|
+
/**
|
|
7570
|
+
* Print DNS records table
|
|
7571
|
+
*/
|
|
7572
|
+
function printDnsRecordsTable(records, rootDomain) {
|
|
7573
|
+
logger$1.log(`\n 📋 DNS Records for ${rootDomain}:`);
|
|
7574
|
+
logger$1.log(" ┌─────────────────────────────────────┬──────┬─────────────────┬────────┐");
|
|
7575
|
+
logger$1.log(" │ Subdomain │ Type │ Value │ Status │");
|
|
7576
|
+
logger$1.log(" ├─────────────────────────────────────┼──────┼─────────────────┼────────┤");
|
|
7577
|
+
for (const record of records) {
|
|
7578
|
+
const subdomain = record.subdomain.padEnd(35);
|
|
7579
|
+
const type = record.type.padEnd(4);
|
|
7580
|
+
const value = record.value.padEnd(15);
|
|
7581
|
+
let status;
|
|
7582
|
+
if (record.error) status = "✗";
|
|
7583
|
+
else if (record.created) status = "✓ new";
|
|
7584
|
+
else if (record.existed) status = "✓";
|
|
7585
|
+
else status = "?";
|
|
7586
|
+
logger$1.log(` │ ${subdomain} │ ${type} │ ${value} │ ${status.padEnd(6)} │`);
|
|
7587
|
+
}
|
|
7588
|
+
logger$1.log(" └─────────────────────────────────────┴──────┴─────────────────┴────────┘");
|
|
7589
|
+
}
|
|
7590
|
+
/**
|
|
7591
|
+
* Print DNS records in a simple format for manual setup
|
|
7592
|
+
*/
|
|
7593
|
+
function printDnsRecordsSimple(records, rootDomain) {
|
|
7594
|
+
logger$1.log("\n 📋 Required DNS Records:");
|
|
7595
|
+
logger$1.log(` Add these A records to your DNS provider (${rootDomain}):\n`);
|
|
7596
|
+
for (const record of records) logger$1.log(` ${record.subdomain} → ${record.value} (A record)`);
|
|
7597
|
+
logger$1.log("");
|
|
7598
|
+
}
|
|
7599
|
+
/**
|
|
7600
|
+
* Create DNS records for a single domain using its configured provider
|
|
7601
|
+
*/
|
|
7602
|
+
async function createDnsRecordsForDomain(records, rootDomain, providerConfig) {
|
|
7603
|
+
const ttl = "ttl" in providerConfig && providerConfig.ttl ? providerConfig.ttl : 300;
|
|
7604
|
+
let provider;
|
|
7605
|
+
try {
|
|
7606
|
+
provider = await createDnsProvider({ config: providerConfig });
|
|
7607
|
+
} catch (error) {
|
|
7608
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
7609
|
+
logger$1.log(` ⚠ Failed to create DNS provider for ${rootDomain}: ${message}`);
|
|
7610
|
+
return records.map((r) => ({
|
|
7611
|
+
...r,
|
|
7612
|
+
error: message
|
|
7613
|
+
}));
|
|
7614
|
+
}
|
|
7615
|
+
if (!provider) return records.map((r) => ({
|
|
7616
|
+
...r,
|
|
7617
|
+
created: false,
|
|
7618
|
+
existed: false
|
|
7619
|
+
}));
|
|
7620
|
+
const results = [];
|
|
7621
|
+
const upsertRecords = records.map((r) => ({
|
|
7622
|
+
name: r.subdomain,
|
|
7623
|
+
type: r.type,
|
|
7624
|
+
ttl,
|
|
7625
|
+
value: r.value
|
|
7626
|
+
}));
|
|
7627
|
+
try {
|
|
7628
|
+
const upsertResults = await provider.upsertRecords(rootDomain, upsertRecords);
|
|
7629
|
+
for (const [i, record] of records.entries()) {
|
|
7630
|
+
const result = upsertResults[i];
|
|
7631
|
+
if (!result) {
|
|
7632
|
+
results.push({
|
|
7633
|
+
hostname: record.hostname,
|
|
7634
|
+
subdomain: record.subdomain,
|
|
7635
|
+
type: record.type,
|
|
7636
|
+
value: record.value,
|
|
7637
|
+
appName: record.appName,
|
|
7638
|
+
error: "No result returned from provider"
|
|
7639
|
+
});
|
|
7640
|
+
continue;
|
|
7641
|
+
}
|
|
7642
|
+
if (result.unchanged) results.push({
|
|
7643
|
+
hostname: record.hostname,
|
|
7644
|
+
subdomain: record.subdomain,
|
|
7645
|
+
type: record.type,
|
|
7646
|
+
value: record.value,
|
|
7647
|
+
appName: record.appName,
|
|
7648
|
+
existed: true,
|
|
7649
|
+
created: false
|
|
7650
|
+
});
|
|
7651
|
+
else results.push({
|
|
7652
|
+
hostname: record.hostname,
|
|
7653
|
+
subdomain: record.subdomain,
|
|
7654
|
+
type: record.type,
|
|
7655
|
+
value: record.value,
|
|
7656
|
+
appName: record.appName,
|
|
7657
|
+
created: result.created,
|
|
7658
|
+
existed: !result.created
|
|
7659
|
+
});
|
|
7660
|
+
}
|
|
7661
|
+
} catch (error) {
|
|
7662
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
7663
|
+
logger$1.log(` ⚠ Failed to create DNS records for ${rootDomain}: ${message}`);
|
|
7664
|
+
return records.map((r) => ({
|
|
7665
|
+
hostname: r.hostname,
|
|
7666
|
+
subdomain: r.subdomain,
|
|
7667
|
+
type: r.type,
|
|
7668
|
+
value: r.value,
|
|
7669
|
+
appName: r.appName,
|
|
7670
|
+
error: message
|
|
7671
|
+
}));
|
|
7672
|
+
}
|
|
7673
|
+
return results;
|
|
7674
|
+
}
|
|
7675
|
+
/**
|
|
7676
|
+
* Main DNS orchestration function for deployments
|
|
7677
|
+
*
|
|
7678
|
+
* Supports both legacy single-domain format and new multi-domain format:
|
|
7679
|
+
* - Legacy: { provider: 'hostinger', domain: 'example.com' }
|
|
7680
|
+
* - Multi: { 'example.com': { provider: 'hostinger' }, 'example.dev': { provider: 'route53' } }
|
|
7681
|
+
*
|
|
7682
|
+
* @param appHostnames - Map of app names to hostnames
|
|
7683
|
+
* @param dnsConfig - DNS configuration (legacy or multi-domain)
|
|
7684
|
+
* @param dokployEndpoint - Dokploy server endpoint to resolve IP from
|
|
7685
|
+
* @param state - Optional state to save created records for later deletion
|
|
7686
|
+
*/
|
|
7687
|
+
async function orchestrateDns(appHostnames, dnsConfig, dokployEndpoint, state) {
|
|
7688
|
+
if (!dnsConfig) return null;
|
|
7689
|
+
const normalizedConfig = normalizeDnsConfig(dnsConfig);
|
|
7690
|
+
logger$1.log("\n🌐 Setting up DNS records...");
|
|
7691
|
+
let serverIp;
|
|
7692
|
+
try {
|
|
7693
|
+
const endpointUrl = new URL(dokployEndpoint);
|
|
7694
|
+
serverIp = await resolveHostnameToIp(endpointUrl.hostname);
|
|
7695
|
+
logger$1.log(` Server IP: ${serverIp} (from ${endpointUrl.hostname})`);
|
|
7696
|
+
} catch (error) {
|
|
7697
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
7698
|
+
logger$1.log(` ⚠ Failed to resolve server IP: ${message}`);
|
|
7699
|
+
return null;
|
|
7700
|
+
}
|
|
7701
|
+
const groupedHostnames = groupHostnamesByDomain(appHostnames, normalizedConfig);
|
|
7702
|
+
if (groupedHostnames.size === 0) {
|
|
7703
|
+
logger$1.log(" No DNS records needed (no hostnames match configured domains)");
|
|
7704
|
+
return {
|
|
7705
|
+
records: [],
|
|
7706
|
+
success: true,
|
|
7707
|
+
serverIp
|
|
7708
|
+
};
|
|
7709
|
+
}
|
|
7710
|
+
const allRecords = [];
|
|
7711
|
+
let hasFailures = false;
|
|
7712
|
+
for (const [rootDomain, domainHostnames] of groupedHostnames) {
|
|
7713
|
+
const providerConfig = normalizedConfig[rootDomain];
|
|
7714
|
+
if (!providerConfig) {
|
|
7715
|
+
logger$1.log(` ⚠ No provider config for ${rootDomain}`);
|
|
7716
|
+
continue;
|
|
7717
|
+
}
|
|
7718
|
+
const providerName = typeof providerConfig.provider === "string" ? providerConfig.provider : "custom";
|
|
7719
|
+
const requiredRecords = generateRequiredRecords(domainHostnames, rootDomain, serverIp);
|
|
7720
|
+
if (requiredRecords.length === 0) continue;
|
|
7721
|
+
logger$1.log(` Creating DNS records for ${rootDomain} (${providerName})...`);
|
|
7722
|
+
const domainRecords = await createDnsRecordsForDomain(requiredRecords, rootDomain, providerConfig);
|
|
7723
|
+
allRecords.push(...domainRecords);
|
|
7724
|
+
const created = domainRecords.filter((r) => r.created).length;
|
|
7725
|
+
const existed = domainRecords.filter((r) => r.existed).length;
|
|
7726
|
+
const failed = domainRecords.filter((r) => r.error).length;
|
|
7727
|
+
if (created > 0) logger$1.log(` ✓ Created ${created} DNS record(s) for ${rootDomain}`);
|
|
7728
|
+
if (existed > 0) logger$1.log(` ✓ ${existed} record(s) already exist for ${rootDomain}`);
|
|
7729
|
+
if (failed > 0) {
|
|
7730
|
+
logger$1.log(` ⚠ ${failed} record(s) failed for ${rootDomain}`);
|
|
7731
|
+
hasFailures = true;
|
|
7732
|
+
}
|
|
7733
|
+
if (state) {
|
|
7734
|
+
for (const record of domainRecords) if (record.created || record.existed) setDnsRecord(state, {
|
|
7735
|
+
domain: rootDomain,
|
|
7736
|
+
name: record.subdomain,
|
|
7737
|
+
type: record.type,
|
|
7738
|
+
value: record.value,
|
|
7739
|
+
ttl: "ttl" in providerConfig && providerConfig.ttl ? providerConfig.ttl : 300
|
|
7740
|
+
});
|
|
7741
|
+
}
|
|
7742
|
+
printDnsRecordsTable(domainRecords, rootDomain);
|
|
7743
|
+
if (providerConfig.provider === "manual" || failed > 0) printDnsRecordsSimple(domainRecords.filter((r) => !r.created && !r.existed), rootDomain);
|
|
7744
|
+
}
|
|
7745
|
+
return {
|
|
7746
|
+
records: allRecords,
|
|
7747
|
+
success: !hasFailures,
|
|
7748
|
+
serverIp
|
|
7749
|
+
};
|
|
7750
|
+
}
|
|
7751
|
+
/**
|
|
7752
|
+
* Verify DNS records resolve correctly after deployment.
|
|
7753
|
+
*
|
|
7754
|
+
* This function:
|
|
7755
|
+
* 1. Checks state for previously verified hostnames (skips if already verified with same IP)
|
|
7756
|
+
* 2. Attempts to resolve each hostname to an IP
|
|
7757
|
+
* 3. Compares resolved IP with expected server IP
|
|
7758
|
+
* 4. Updates state with verification results
|
|
7759
|
+
*
|
|
7760
|
+
* @param appHostnames - Map of app names to hostnames
|
|
7761
|
+
* @param serverIp - Expected IP address the hostnames should resolve to
|
|
7762
|
+
* @param state - Deploy state for caching verification results
|
|
7763
|
+
* @returns Array of verification results
|
|
7764
|
+
*/
|
|
7765
|
+
async function verifyDnsRecords(appHostnames, serverIp, state) {
|
|
7766
|
+
const results = [];
|
|
7767
|
+
logger$1.log("\n🔍 Verifying DNS records...");
|
|
7768
|
+
for (const [appName, hostname] of appHostnames) {
|
|
7769
|
+
if (isDnsVerified(state, hostname, serverIp)) {
|
|
7770
|
+
logger$1.log(` ✓ ${hostname} (previously verified)`);
|
|
7771
|
+
results.push({
|
|
7772
|
+
hostname,
|
|
7773
|
+
appName,
|
|
7774
|
+
verified: true,
|
|
7775
|
+
expectedIp: serverIp,
|
|
7776
|
+
skipped: true
|
|
7777
|
+
});
|
|
7778
|
+
continue;
|
|
7779
|
+
}
|
|
7780
|
+
try {
|
|
7781
|
+
const resolvedIp = await resolveHostnameToIp(hostname);
|
|
7782
|
+
if (resolvedIp === serverIp) {
|
|
7783
|
+
setDnsVerification(state, hostname, serverIp);
|
|
7784
|
+
logger$1.log(` ✓ ${hostname} → ${resolvedIp}`);
|
|
7785
|
+
results.push({
|
|
7786
|
+
hostname,
|
|
7787
|
+
appName,
|
|
7788
|
+
verified: true,
|
|
7789
|
+
resolvedIp,
|
|
7790
|
+
expectedIp: serverIp
|
|
7791
|
+
});
|
|
7792
|
+
} else {
|
|
7793
|
+
logger$1.log(` ⚠ ${hostname} resolves to ${resolvedIp}, expected ${serverIp}`);
|
|
7794
|
+
results.push({
|
|
7795
|
+
hostname,
|
|
7796
|
+
appName,
|
|
7797
|
+
verified: false,
|
|
7798
|
+
resolvedIp,
|
|
7799
|
+
expectedIp: serverIp
|
|
7800
|
+
});
|
|
7801
|
+
}
|
|
7802
|
+
} catch (error) {
|
|
7803
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
7804
|
+
logger$1.log(` ⚠ ${hostname} DNS not propagated (${message})`);
|
|
7805
|
+
results.push({
|
|
7806
|
+
hostname,
|
|
7807
|
+
appName,
|
|
7808
|
+
verified: false,
|
|
7809
|
+
expectedIp: serverIp,
|
|
7810
|
+
error: message
|
|
7811
|
+
});
|
|
7812
|
+
}
|
|
7813
|
+
}
|
|
7814
|
+
const verified = results.filter((r) => r.verified).length;
|
|
7815
|
+
const skipped = results.filter((r) => r.skipped).length;
|
|
7816
|
+
const pending = results.filter((r) => !r.verified).length;
|
|
7817
|
+
if (pending > 0) {
|
|
7818
|
+
logger$1.log(`\n ${verified} verified, ${pending} pending propagation`);
|
|
7819
|
+
logger$1.log(" DNS changes may take 5-30 minutes to propagate");
|
|
7820
|
+
} else if (skipped > 0) logger$1.log(` ${verified} verified (${skipped} from cache)`);
|
|
7821
|
+
return results;
|
|
7822
|
+
}
|
|
7823
|
+
//#endregion
|
|
7240
7824
|
//#region src/docker/imageRef.ts
|
|
7241
7825
|
/**
|
|
7242
7826
|
* An image reference, checked before it reaches `docker`.
|
|
@@ -7720,155 +8304,6 @@ var DeployJournal = class DeployJournal {
|
|
|
7720
8304
|
}
|
|
7721
8305
|
};
|
|
7722
8306
|
//#endregion
|
|
7723
|
-
//#region src/deploy/state.ts
|
|
7724
|
-
/**
|
|
7725
|
-
* Deploy state management for Dokploy deployments
|
|
7726
|
-
*
|
|
7727
|
-
* Stores resource IDs (applications, services) per stage to avoid
|
|
7728
|
-
* re-creating resources on subsequent deploys.
|
|
7729
|
-
*/
|
|
7730
|
-
/**
|
|
7731
|
-
* Create a new empty state for a stage
|
|
7732
|
-
*/
|
|
7733
|
-
function createEmptyState(stage, projectId, environmentId) {
|
|
7734
|
-
return {
|
|
7735
|
-
provider: "dokploy",
|
|
7736
|
-
stage,
|
|
7737
|
-
projectId,
|
|
7738
|
-
environmentId,
|
|
7739
|
-
applications: {},
|
|
7740
|
-
services: {},
|
|
7741
|
-
lastDeployedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7742
|
-
};
|
|
7743
|
-
}
|
|
7744
|
-
/**
|
|
7745
|
-
* Set application ID in state (mutates state)
|
|
7746
|
-
*/
|
|
7747
|
-
function setApplicationId(state, appName, applicationId) {
|
|
7748
|
-
state.applications[appName] = applicationId;
|
|
7749
|
-
}
|
|
7750
|
-
/** Two records naming the same image: by digest when both have one. */
|
|
7751
|
-
function sameImage(a, b) {
|
|
7752
|
-
return a.digest && b.digest ? a.digest === b.digest : a.ref === b.ref;
|
|
7753
|
-
}
|
|
7754
|
-
/** The newest release in `history` after `index` that a rollback may restore. */
|
|
7755
|
-
function restorable(history, index, current) {
|
|
7756
|
-
return history.slice(index + 1).find((entry) => !entry.rolledBack && !sameImage(entry, current));
|
|
7757
|
-
}
|
|
7758
|
-
/**
|
|
7759
|
-
* Record that `image` went live for `appName` (mutates state): it becomes
|
|
7760
|
-
* `current`, and what was current becomes `previous`. Releasing what already
|
|
7761
|
-
* runs — a redeploy of the same digest — changes nothing.
|
|
7762
|
-
*/
|
|
7763
|
-
function recordRelease(state, appName, image, releasedAt = /* @__PURE__ */ new Date()) {
|
|
7764
|
-
const releases = state.releases?.[appName];
|
|
7765
|
-
if (releases && sameImage(releases.current, image)) return;
|
|
7766
|
-
const entry = {
|
|
7767
|
-
...image,
|
|
7768
|
-
releasedAt: releasedAt.toISOString()
|
|
7769
|
-
};
|
|
7770
|
-
const history = [entry, ...releases?.history ?? []].slice(0, 10);
|
|
7771
|
-
const previous = releases?.current;
|
|
7772
|
-
state.releases = {
|
|
7773
|
-
...state.releases,
|
|
7774
|
-
[appName]: {
|
|
7775
|
-
current: entry,
|
|
7776
|
-
...previous ? { previous } : {},
|
|
7777
|
-
history
|
|
7778
|
-
}
|
|
7779
|
-
};
|
|
7780
|
-
}
|
|
7781
|
-
/**
|
|
7782
|
-
* Record that `appName` was rolled back to `to` (mutates state): every
|
|
7783
|
-
* release newer than it is marked rolled back, so neither this rollback nor
|
|
7784
|
-
* a later one restores it, and `previous` moves to the release before `to`.
|
|
7785
|
-
*/
|
|
7786
|
-
function recordRollback(state, appName, to) {
|
|
7787
|
-
const releases = state.releases?.[appName];
|
|
7788
|
-
if (!releases) return;
|
|
7789
|
-
const index = releases.history.findIndex((entry) => !entry.rolledBack && sameImage(entry, to));
|
|
7790
|
-
if (index === -1) return;
|
|
7791
|
-
const history = releases.history.map((entry, i) => i < index ? {
|
|
7792
|
-
...entry,
|
|
7793
|
-
rolledBack: true
|
|
7794
|
-
} : entry);
|
|
7795
|
-
const current = history[index];
|
|
7796
|
-
const previous = restorable(history, index, current);
|
|
7797
|
-
state.releases = {
|
|
7798
|
-
...state.releases,
|
|
7799
|
-
[appName]: {
|
|
7800
|
-
current,
|
|
7801
|
-
...previous ? { previous } : {},
|
|
7802
|
-
history
|
|
7803
|
-
}
|
|
7804
|
-
};
|
|
7805
|
-
}
|
|
7806
|
-
/**
|
|
7807
|
-
* Get a generated secret for an app
|
|
7808
|
-
*/
|
|
7809
|
-
function getGeneratedSecret(state, appName, secretName) {
|
|
7810
|
-
return state?.generatedSecrets?.[appName]?.[secretName];
|
|
7811
|
-
}
|
|
7812
|
-
/**
|
|
7813
|
-
* Set a generated secret for an app (mutates state)
|
|
7814
|
-
*/
|
|
7815
|
-
function setGeneratedSecret(state, appName, secretName, value) {
|
|
7816
|
-
if (!state.generatedSecrets) state.generatedSecrets = {};
|
|
7817
|
-
if (!state.generatedSecrets[appName]) state.generatedSecrets[appName] = {};
|
|
7818
|
-
state.generatedSecrets[appName][secretName] = value;
|
|
7819
|
-
}
|
|
7820
|
-
/**
|
|
7821
|
-
* Set DNS verification record for a hostname (mutates state)
|
|
7822
|
-
*/
|
|
7823
|
-
function setDnsVerification(state, hostname, serverIp) {
|
|
7824
|
-
if (!state.dnsVerified) state.dnsVerified = {};
|
|
7825
|
-
state.dnsVerified[hostname] = {
|
|
7826
|
-
serverIp,
|
|
7827
|
-
verifiedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7828
|
-
};
|
|
7829
|
-
}
|
|
7830
|
-
/**
|
|
7831
|
-
* Check if a hostname is already verified with the given IP
|
|
7832
|
-
*/
|
|
7833
|
-
function isDnsVerified(state, hostname, serverIp) {
|
|
7834
|
-
return (state?.dnsVerified?.[hostname])?.serverIp === serverIp;
|
|
7835
|
-
}
|
|
7836
|
-
/**
|
|
7837
|
-
* Get the key for a DNS record in state
|
|
7838
|
-
*/
|
|
7839
|
-
function getDnsRecordKey(name, type) {
|
|
7840
|
-
return `${name}:${type}`;
|
|
7841
|
-
}
|
|
7842
|
-
/**
|
|
7843
|
-
* Set a created DNS record in state (mutates state)
|
|
7844
|
-
*/
|
|
7845
|
-
function setDnsRecord(state, record) {
|
|
7846
|
-
if (!state.dnsRecords) state.dnsRecords = {};
|
|
7847
|
-
const key = getDnsRecordKey(record.name, record.type);
|
|
7848
|
-
state.dnsRecords[key] = {
|
|
7849
|
-
...record,
|
|
7850
|
-
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
7851
|
-
};
|
|
7852
|
-
}
|
|
7853
|
-
/**
|
|
7854
|
-
* Get backup state from state
|
|
7855
|
-
*/
|
|
7856
|
-
function getBackupState(state) {
|
|
7857
|
-
return state?.backups;
|
|
7858
|
-
}
|
|
7859
|
-
/**
|
|
7860
|
-
* Set backup state (mutates state)
|
|
7861
|
-
*/
|
|
7862
|
-
function setBackupState(state, backupState) {
|
|
7863
|
-
state.backups = backupState;
|
|
7864
|
-
}
|
|
7865
|
-
/**
|
|
7866
|
-
* Set postgres backup ID in state (mutates state)
|
|
7867
|
-
*/
|
|
7868
|
-
function setPostgresBackupId(state, backupId) {
|
|
7869
|
-
if (state.backups) state.backups.postgresBackupId = backupId;
|
|
7870
|
-
}
|
|
7871
|
-
//#endregion
|
|
7872
8307
|
//#region src/providers/aws.ts
|
|
7873
8308
|
/**
|
|
7874
8309
|
* The AWS account a provider provisions in — the stage's, found the way the
|
|
@@ -8064,7 +8499,7 @@ function bucketOrigins(input) {
|
|
|
8064
8499
|
continue;
|
|
8065
8500
|
}
|
|
8066
8501
|
try {
|
|
8067
|
-
const host = resolveHost(name, app, stage, workspace.
|
|
8502
|
+
const host = resolveHost(name, app, stage, workspace.domains, isMainFrontendApp(name, app, workspace.apps));
|
|
8068
8503
|
origins.add(`https://${host}`);
|
|
8069
8504
|
} catch (error) {
|
|
8070
8505
|
if (!(error instanceof NoDomainForStage)) throw error;
|
|
@@ -8506,7 +8941,7 @@ async function ensureBucketSettings(ctx, clients, input) {
|
|
|
8506
8941
|
stage: ctx.stage,
|
|
8507
8942
|
bucket: id
|
|
8508
8943
|
});
|
|
8509
|
-
if (unresolved.length > 0) ctx.log(` ${unresolved.join(", ")} ${unresolved.length === 1 ? "has" : "have"} no address on '${ctx.stage}' (
|
|
8944
|
+
if (unresolved.length > 0) ctx.log(` ${unresolved.join(", ")} ${unresolved.length === 1 ? "has" : "have"} no address on '${ctx.stage}' (domains.${ctx.stage}), so ${unresolved.length === 1 ? "is" : "are"} not in '${bucket}''s CORS`);
|
|
8510
8945
|
if (origins.length === 0) return;
|
|
8511
8946
|
const rule = corsRule(origins);
|
|
8512
8947
|
const cors = await read(() => s3.send(new S3.GetBucketCorsCommand({ Bucket })), ["NoSuchCORSConfiguration"]);
|
|
@@ -9103,6 +9538,12 @@ Object.defineProperty(exports, "DevServicesNeedServerTarget", {
|
|
|
9103
9538
|
return DevServicesNeedServerTarget;
|
|
9104
9539
|
}
|
|
9105
9540
|
});
|
|
9541
|
+
Object.defineProperty(exports, "DnsRecordsUnreadable", {
|
|
9542
|
+
enumerable: true,
|
|
9543
|
+
get: function() {
|
|
9544
|
+
return DnsRecordsUnreadable;
|
|
9545
|
+
}
|
|
9546
|
+
});
|
|
9106
9547
|
Object.defineProperty(exports, "DockerBuildFailed", {
|
|
9107
9548
|
enumerable: true,
|
|
9108
9549
|
get: function() {
|
|
@@ -9385,6 +9826,12 @@ Object.defineProperty(exports, "createCredentialsPreload", {
|
|
|
9385
9826
|
return createCredentialsPreload;
|
|
9386
9827
|
}
|
|
9387
9828
|
});
|
|
9829
|
+
Object.defineProperty(exports, "createDnsProvider", {
|
|
9830
|
+
enumerable: true,
|
|
9831
|
+
get: function() {
|
|
9832
|
+
return createDnsProvider;
|
|
9833
|
+
}
|
|
9834
|
+
});
|
|
9388
9835
|
Object.defineProperty(exports, "createEmptyState", {
|
|
9389
9836
|
enumerable: true,
|
|
9390
9837
|
get: function() {
|
|
@@ -9475,6 +9922,12 @@ Object.defineProperty(exports, "externalServices", {
|
|
|
9475
9922
|
return externalServices;
|
|
9476
9923
|
}
|
|
9477
9924
|
});
|
|
9925
|
+
Object.defineProperty(exports, "extractSubdomain", {
|
|
9926
|
+
enumerable: true,
|
|
9927
|
+
get: function() {
|
|
9928
|
+
return extractSubdomain;
|
|
9929
|
+
}
|
|
9930
|
+
});
|
|
9478
9931
|
Object.defineProperty(exports, "fakeKey", {
|
|
9479
9932
|
enumerable: true,
|
|
9480
9933
|
get: function() {
|
|
@@ -9493,6 +9946,12 @@ Object.defineProperty(exports, "findBuildRoot", {
|
|
|
9493
9946
|
return findBuildRoot;
|
|
9494
9947
|
}
|
|
9495
9948
|
});
|
|
9949
|
+
Object.defineProperty(exports, "findRootDomain", {
|
|
9950
|
+
enumerable: true,
|
|
9951
|
+
get: function() {
|
|
9952
|
+
return findRootDomain;
|
|
9953
|
+
}
|
|
9954
|
+
});
|
|
9496
9955
|
Object.defineProperty(exports, "forgetState", {
|
|
9497
9956
|
enumerable: true,
|
|
9498
9957
|
get: function() {
|
|
@@ -9553,12 +10012,6 @@ Object.defineProperty(exports, "initStageSecrets", {
|
|
|
9553
10012
|
return initStageSecrets;
|
|
9554
10013
|
}
|
|
9555
10014
|
});
|
|
9556
|
-
Object.defineProperty(exports, "isDnsVerified", {
|
|
9557
|
-
enumerable: true,
|
|
9558
|
-
get: function() {
|
|
9559
|
-
return isDnsVerified;
|
|
9560
|
-
}
|
|
9561
|
-
});
|
|
9562
10015
|
Object.defineProperty(exports, "isImageBuild", {
|
|
9563
10016
|
enumerable: true,
|
|
9564
10017
|
get: function() {
|
|
@@ -9673,6 +10126,18 @@ Object.defineProperty(exports, "newLockHolder", {
|
|
|
9673
10126
|
return newLockHolder;
|
|
9674
10127
|
}
|
|
9675
10128
|
});
|
|
10129
|
+
Object.defineProperty(exports, "normalizeDnsConfig", {
|
|
10130
|
+
enumerable: true,
|
|
10131
|
+
get: function() {
|
|
10132
|
+
return normalizeDnsConfig;
|
|
10133
|
+
}
|
|
10134
|
+
});
|
|
10135
|
+
Object.defineProperty(exports, "orchestrateDns", {
|
|
10136
|
+
enumerable: true,
|
|
10137
|
+
get: function() {
|
|
10138
|
+
return orchestrateDns;
|
|
10139
|
+
}
|
|
10140
|
+
});
|
|
9676
10141
|
Object.defineProperty(exports, "ownershipMarker", {
|
|
9677
10142
|
enumerable: true,
|
|
9678
10143
|
get: function() {
|
|
@@ -9871,18 +10336,6 @@ Object.defineProperty(exports, "setBackupState", {
|
|
|
9871
10336
|
return setBackupState;
|
|
9872
10337
|
}
|
|
9873
10338
|
});
|
|
9874
|
-
Object.defineProperty(exports, "setDnsRecord", {
|
|
9875
|
-
enumerable: true,
|
|
9876
|
-
get: function() {
|
|
9877
|
-
return setDnsRecord;
|
|
9878
|
-
}
|
|
9879
|
-
});
|
|
9880
|
-
Object.defineProperty(exports, "setDnsVerification", {
|
|
9881
|
-
enumerable: true,
|
|
9882
|
-
get: function() {
|
|
9883
|
-
return setDnsVerification;
|
|
9884
|
-
}
|
|
9885
|
-
});
|
|
9886
10339
|
Object.defineProperty(exports, "setGeneratedSecret", {
|
|
9887
10340
|
enumerable: true,
|
|
9888
10341
|
get: function() {
|
|
@@ -9973,6 +10426,12 @@ Object.defineProperty(exports, "validateImageRef", {
|
|
|
9973
10426
|
return validateImageRef;
|
|
9974
10427
|
}
|
|
9975
10428
|
});
|
|
10429
|
+
Object.defineProperty(exports, "verifyDnsRecords", {
|
|
10430
|
+
enumerable: true,
|
|
10431
|
+
get: function() {
|
|
10432
|
+
return verifyDnsRecords;
|
|
10433
|
+
}
|
|
10434
|
+
});
|
|
9976
10435
|
Object.defineProperty(exports, "verifyStageProviders", {
|
|
9977
10436
|
enumerable: true,
|
|
9978
10437
|
get: function() {
|
|
@@ -10046,4 +10505,4 @@ Object.defineProperty(exports, "workspace_exports", {
|
|
|
10046
10505
|
}
|
|
10047
10506
|
});
|
|
10048
10507
|
|
|
10049
|
-
//# sourceMappingURL=seeds-
|
|
10508
|
+
//# sourceMappingURL=seeds-CN6tB-va.cjs.map
|