@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.
Files changed (176) hide show
  1. package/dist/GoDaddyProvider--36rw8cP.mjs +387 -0
  2. package/dist/GoDaddyProvider--36rw8cP.mjs.map +1 -0
  3. package/dist/GoDaddyProvider-DnRor066.cjs +387 -0
  4. package/dist/GoDaddyProvider-DnRor066.cjs.map +1 -0
  5. package/dist/{HostingerProvider-CVc3rLPB.mjs → HostingerProvider-BI6J7oJr.mjs} +2 -2
  6. package/dist/{HostingerProvider-CVc3rLPB.mjs.map → HostingerProvider-BI6J7oJr.mjs.map} +1 -1
  7. package/dist/{HostingerProvider-BCB1QJj1.cjs → HostingerProvider-CyTpG_jy.cjs} +2 -2
  8. package/dist/{HostingerProvider-BCB1QJj1.cjs.map → HostingerProvider-CyTpG_jy.cjs.map} +1 -1
  9. package/dist/{LegacyStateStore-CWG_HVC0.cjs → LegacyStateStore-BaBoYl59.cjs} +2 -2
  10. package/dist/{LegacyStateStore-CWG_HVC0.cjs.map → LegacyStateStore-BaBoYl59.cjs.map} +1 -1
  11. package/dist/{LegacyStateStore-B0R4LlX_.mjs → LegacyStateStore-CO7bzJCU.mjs} +2 -2
  12. package/dist/{LegacyStateStore-B0R4LlX_.mjs.map → LegacyStateStore-CO7bzJCU.mjs.map} +1 -1
  13. package/dist/{LocalStateStore-CLwa2DpK.cjs → LocalStateStore-CUWh2BWU.cjs} +2 -2
  14. package/dist/{LocalStateStore-CLwa2DpK.cjs.map → LocalStateStore-CUWh2BWU.cjs.map} +1 -1
  15. package/dist/{LocalStateStore-Q4vXg2ua.mjs → LocalStateStore-C_hYDv6I.mjs} +2 -2
  16. package/dist/{LocalStateStore-Q4vXg2ua.mjs.map → LocalStateStore-C_hYDv6I.mjs.map} +1 -1
  17. package/dist/{S3StateStore-Cea9_5gF.cjs → S3StateStore-O8EYfjfG.cjs} +2 -2
  18. package/dist/{S3StateStore-Cea9_5gF.cjs.map → S3StateStore-O8EYfjfG.cjs.map} +1 -1
  19. package/dist/{S3StateStore-CksKYKRa.mjs → S3StateStore-hIm8Rrmu.mjs} +2 -2
  20. package/dist/{S3StateStore-CksKYKRa.mjs.map → S3StateStore-hIm8Rrmu.mjs.map} +1 -1
  21. package/dist/{SSMStateStore-aBOTF018.cjs → SSMStateStore-DIzbiqCz.cjs} +2 -2
  22. package/dist/{SSMStateStore-aBOTF018.cjs.map → SSMStateStore-DIzbiqCz.cjs.map} +1 -1
  23. package/dist/{SSMStateStore-BszSCAS2.mjs → SSMStateStore-IvcjTk8h.mjs} +2 -2
  24. package/dist/{SSMStateStore-BszSCAS2.mjs.map → SSMStateStore-IvcjTk8h.mjs.map} +1 -1
  25. package/dist/SubscriberGenerator-BPqQf8fB.mjs.map +1 -1
  26. package/dist/SubscriberGenerator-BVn7cQ-2.cjs.map +1 -1
  27. package/dist/{add-5MZAXybv.cjs → add-C9qX4Juc.cjs} +30 -7
  28. package/dist/add-C9qX4Juc.cjs.map +1 -0
  29. package/dist/{add-D_jNqnfZ.mjs → add-v3tCbrpE.mjs} +30 -7
  30. package/dist/add-v3tCbrpE.mjs.map +1 -0
  31. package/dist/{bundler-1REMhKps.cjs → bundler-C4NmpRTD.cjs} +5 -5
  32. package/dist/{bundler-1REMhKps.cjs.map → bundler-C4NmpRTD.cjs.map} +1 -1
  33. package/dist/{bundler-BMo-JP5s.mjs → bundler-C_fCgcVO.mjs} +5 -5
  34. package/dist/{bundler-BMo-JP5s.mjs.map → bundler-C_fCgcVO.mjs.map} +1 -1
  35. package/dist/{cli-BL8ZHsLQ.cjs → cli-C85Dut8K.cjs} +6 -5
  36. package/dist/cli-C85Dut8K.cjs.map +1 -0
  37. package/dist/{cli-7edNFwGk.mjs → cli-REdO9X5b.mjs} +7 -6
  38. package/dist/cli-REdO9X5b.mjs.map +1 -0
  39. package/dist/{compose-xw86kVYi.cjs → compose-BvrhDwJ6.cjs} +556 -30
  40. package/dist/compose-BvrhDwJ6.cjs.map +1 -0
  41. package/dist/{compose-DbJhRQlh.mjs → compose-Dn0oAgQ0.mjs} +509 -31
  42. package/dist/compose-Dn0oAgQ0.mjs.map +1 -0
  43. package/dist/{config-DrCAyoH5.d.mts → config-CdEcTrjG.d.mts} +3 -3
  44. package/dist/{config-CpjsVxru.d.cts.map → config-CdEcTrjG.d.mts.map} +1 -1
  45. package/dist/{config-CpjsVxru.d.cts → config-pST7E0CS.d.cts} +3 -3
  46. package/dist/{config-DrCAyoH5.d.mts.map → config-pST7E0CS.d.cts.map} +1 -1
  47. package/dist/config.cjs +1 -1
  48. package/dist/config.d.cts +3 -3
  49. package/dist/config.d.mts +3 -3
  50. package/dist/config.mjs +1 -1
  51. package/dist/{credentials-tr26-KML.cjs → credentials-BKfIugu2.cjs} +47 -2
  52. package/dist/credentials-BKfIugu2.cjs.map +1 -0
  53. package/dist/{credentials-BgJ5mS_d.mjs → credentials-CnVqoXMb.mjs} +30 -3
  54. package/dist/credentials-CnVqoXMb.mjs.map +1 -0
  55. package/dist/deploy/public.cjs +10 -10
  56. package/dist/deploy/public.d.cts +9 -3
  57. package/dist/deploy/public.d.cts.map +1 -1
  58. package/dist/deploy/public.d.mts +9 -3
  59. package/dist/deploy/public.d.mts.map +1 -1
  60. package/dist/deploy/public.mjs +10 -10
  61. package/dist/{deploy-BTfmXd3g.mjs → deploy-BaERRh0Q.mjs} +10 -8
  62. package/dist/deploy-BaERRh0Q.mjs.map +1 -0
  63. package/dist/{deploy-CtbZj4zN.cjs → deploy-DbBGo3a6.cjs} +10 -8
  64. package/dist/deploy-DbBGo3a6.cjs.map +1 -0
  65. package/dist/{dokploy-r69yZaIt.mjs → dokploy-CMmD_ddX.mjs} +2 -2
  66. package/dist/{dokploy-r69yZaIt.mjs.map → dokploy-CMmD_ddX.mjs.map} +1 -1
  67. package/dist/{dokploy-TGk3oPwr.cjs → dokploy-DwAaKA9B.cjs} +2 -2
  68. package/dist/{dokploy-TGk3oPwr.cjs.map → dokploy-DwAaKA9B.cjs.map} +1 -1
  69. package/dist/{encryption-C-8Tt5Hh.mjs → encryption-BQmhq9_y.mjs} +3 -3
  70. package/dist/{encryption-C-8Tt5Hh.mjs.map → encryption-BQmhq9_y.mjs.map} +1 -1
  71. package/dist/{encryption-CDn7BH5O.cjs → encryption-BrN_9_CM.cjs} +3 -3
  72. package/dist/{encryption-CDn7BH5O.cjs.map → encryption-BrN_9_CM.cjs.map} +1 -1
  73. package/dist/{engine-jAINgiOB.mjs → engine-DILocOOH.mjs} +23 -404
  74. package/dist/engine-DILocOOH.mjs.map +1 -0
  75. package/dist/{engine-Bt5k_UMq.cjs → engine-DgHoFBMw.cjs} +25 -406
  76. package/dist/engine-DgHoFBMw.cjs.map +1 -0
  77. package/dist/{github-DFhuJQlp.cjs → github-Bf7pz6AV.cjs} +3 -3
  78. package/dist/{github-DFhuJQlp.cjs.map → github-Bf7pz6AV.cjs.map} +1 -1
  79. package/dist/{github-CZHAtwPT.mjs → github-xzg99wz8.mjs} +3 -3
  80. package/dist/{github-CZHAtwPT.mjs.map → github-xzg99wz8.mjs.map} +1 -1
  81. package/dist/{index-MnUJuUlj.d.mts → index-D-F_hTDz.d.cts} +21 -4
  82. package/dist/index-D-F_hTDz.d.cts.map +1 -0
  83. package/dist/{index-elsLJTUv.d.cts → index-YFNxR5Ns.d.mts} +21 -4
  84. package/dist/index-YFNxR5Ns.d.mts.map +1 -0
  85. package/dist/index.cjs +246 -63
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.mjs +247 -65
  88. package/dist/index.mjs.map +1 -1
  89. package/dist/{local-Cq8qdgNX.cjs → local-BjxDfPvy.cjs} +2 -2
  90. package/dist/{local-Cq8qdgNX.cjs.map → local-BjxDfPvy.cjs.map} +1 -1
  91. package/dist/{local-Ciq-bTPr.mjs → local-IuoIF3CT.mjs} +2 -2
  92. package/dist/{local-Ciq-bTPr.mjs.map → local-IuoIF3CT.mjs.map} +1 -1
  93. package/dist/{migrate-B1rVlwj1.cjs → migrate-7xayVtzL.cjs} +3 -3
  94. package/dist/{migrate-B1rVlwj1.cjs.map → migrate-7xayVtzL.cjs.map} +1 -1
  95. package/dist/{migrate-ggkPVJRC.mjs → migrate-CKLJ73OO.mjs} +4 -4
  96. package/dist/{migrate-ggkPVJRC.mjs.map → migrate-CKLJ73OO.mjs.map} +1 -1
  97. package/dist/{migrate-Dn7nK6sh.mjs → migrate-CpmO5qnl.mjs} +3 -3
  98. package/dist/{migrate-Dn7nK6sh.mjs.map → migrate-CpmO5qnl.mjs.map} +1 -1
  99. package/dist/{migrate-B16qgYTn.cjs → migrate-DPF7ZF8M.cjs} +3 -3
  100. package/dist/{migrate-B16qgYTn.cjs.map → migrate-DPF7ZF8M.cjs.map} +1 -1
  101. package/dist/openapi.cjs +1 -1
  102. package/dist/openapi.d.cts +1 -1
  103. package/dist/openapi.d.mts +1 -1
  104. package/dist/openapi.mjs +1 -1
  105. package/dist/reconcile/public.d.cts +1 -1
  106. package/dist/reconcile/public.d.mts +1 -1
  107. package/dist/{reconcile--I7V4Klj.mjs → reconcile-Dh1Jk7WE.mjs} +2 -2
  108. package/dist/{reconcile--I7V4Klj.mjs.map → reconcile-Dh1Jk7WE.mjs.map} +1 -1
  109. package/dist/{resolve-BSke45k6.mjs → resolve-Dv_weZoh.mjs} +4 -4
  110. package/dist/{resolve-BSke45k6.mjs.map → resolve-Dv_weZoh.mjs.map} +1 -1
  111. package/dist/{resolve-BXeXzpmU.cjs → resolve-dlKPFNgv.cjs} +4 -4
  112. package/dist/{resolve-BXeXzpmU.cjs.map → resolve-dlKPFNgv.cjs.map} +1 -1
  113. package/dist/{rollback-DFMiBWf0.cjs → rollback-65VVIdBM.cjs} +6 -6
  114. package/dist/{rollback-DFMiBWf0.cjs.map → rollback-65VVIdBM.cjs.map} +1 -1
  115. package/dist/{rollback-CEE6dse4.mjs → rollback-DpSU2DsD.mjs} +6 -6
  116. package/dist/{rollback-CEE6dse4.mjs.map → rollback-DpSU2DsD.mjs.map} +1 -1
  117. package/dist/{runtime-HabiNBtJ.d.mts → runtime-CN_kmqxo.d.cts} +2 -2
  118. package/dist/{runtime-D48ZKk8_.d.cts.map → runtime-CN_kmqxo.d.cts.map} +1 -1
  119. package/dist/{runtime-D48ZKk8_.d.cts → runtime-Cjvon3oj.d.mts} +2 -2
  120. package/dist/{runtime-HabiNBtJ.d.mts.map → runtime-Cjvon3oj.d.mts.map} +1 -1
  121. package/dist/{seeds-CsI0A_Ef.cjs → seeds-CN6tB-va.cjs} +646 -187
  122. package/dist/{seeds-CsI0A_Ef.cjs.map → seeds-CN6tB-va.cjs.map} +1 -1
  123. package/dist/{seeds-BYdrtZsC.mjs → seeds-perzdN81.mjs} +599 -164
  124. package/dist/seeds-perzdN81.mjs.map +1 -0
  125. package/dist/{sniffer-B0EU73bj.mjs → sniffer-BTtX3NUM.mjs} +3 -3
  126. package/dist/{sniffer-B0EU73bj.mjs.map → sniffer-BTtX3NUM.mjs.map} +1 -1
  127. package/dist/{sniffer-DJYupBeK.cjs → sniffer-IAQEpsQb.cjs} +3 -3
  128. package/dist/{sniffer-DJYupBeK.cjs.map → sniffer-IAQEpsQb.cjs.map} +1 -1
  129. package/dist/{sst-DAqUoZKG.cjs → sst-BgcOsaBi.cjs} +3 -3
  130. package/dist/{sst-DAqUoZKG.cjs.map → sst-BgcOsaBi.cjs.map} +1 -1
  131. package/dist/{sst-D1Qj4sIs.mjs → sst-CJzvyrEz.mjs} +3 -3
  132. package/dist/{sst-D1Qj4sIs.mjs.map → sst-CJzvyrEz.mjs.map} +1 -1
  133. package/dist/{stages-Brn3vcdy.cjs → stages-CUn6gvXL.cjs} +2 -2
  134. package/dist/{stages-Brn3vcdy.cjs.map → stages-CUn6gvXL.cjs.map} +1 -1
  135. package/dist/{stages-DoHHz6pS.mjs → stages-CnZRYmkI.mjs} +2 -2
  136. package/dist/{stages-DoHHz6pS.mjs.map → stages-CnZRYmkI.mjs.map} +1 -1
  137. package/dist/target/public.cjs +1 -1
  138. package/dist/target/public.d.cts +2 -2
  139. package/dist/target/public.d.mts +2 -2
  140. package/dist/target/public.mjs +1 -1
  141. package/dist/{terminal-BTbZlrFV.mjs → terminal-D8TPK7o9.mjs} +3 -3
  142. package/dist/{terminal-BTbZlrFV.mjs.map → terminal-D8TPK7o9.mjs.map} +1 -1
  143. package/dist/{terminal-COv23heb.cjs → terminal-DuapRxh6.cjs} +2 -2
  144. package/dist/{terminal-COv23heb.cjs.map → terminal-DuapRxh6.cjs.map} +1 -1
  145. package/dist/{types-0oAyFOfR.d.cts → types-NqX1Hz4P.d.cts} +210 -205
  146. package/dist/types-NqX1Hz4P.d.cts.map +1 -0
  147. package/dist/{types-BZ01tZs-.d.mts → types-ZHuZ89hv.d.mts} +210 -205
  148. package/dist/types-ZHuZ89hv.d.mts.map +1 -0
  149. package/dist/workspace/index.cjs +3 -1
  150. package/dist/workspace/index.d.cts +3 -3
  151. package/dist/workspace/index.d.mts +3 -3
  152. package/dist/workspace/index.mjs +2 -2
  153. package/dist/{workspace-D2CYLMCW.mjs → workspace-CJ0lKFq-.mjs} +231 -10
  154. package/dist/workspace-CJ0lKFq-.mjs.map +1 -0
  155. package/dist/{workspace-CT0JM3Y8.cjs → workspace-CwW3Gkru.cjs} +266 -9
  156. package/dist/workspace-CwW3Gkru.cjs.map +1 -0
  157. package/package.json +15 -15
  158. package/dist/add-5MZAXybv.cjs.map +0 -1
  159. package/dist/add-D_jNqnfZ.mjs.map +0 -1
  160. package/dist/cli-7edNFwGk.mjs.map +0 -1
  161. package/dist/cli-BL8ZHsLQ.cjs.map +0 -1
  162. package/dist/compose-DbJhRQlh.mjs.map +0 -1
  163. package/dist/compose-xw86kVYi.cjs.map +0 -1
  164. package/dist/credentials-BgJ5mS_d.mjs.map +0 -1
  165. package/dist/credentials-tr26-KML.cjs.map +0 -1
  166. package/dist/deploy-BTfmXd3g.mjs.map +0 -1
  167. package/dist/deploy-CtbZj4zN.cjs.map +0 -1
  168. package/dist/engine-Bt5k_UMq.cjs.map +0 -1
  169. package/dist/engine-jAINgiOB.mjs.map +0 -1
  170. package/dist/index-MnUJuUlj.d.mts.map +0 -1
  171. package/dist/index-elsLJTUv.d.cts.map +0 -1
  172. package/dist/seeds-BYdrtZsC.mjs.map +0 -1
  173. package/dist/types-0oAyFOfR.d.cts.map +0 -1
  174. package/dist/types-BZ01tZs-.d.mts.map +0 -1
  175. package/dist/workspace-CT0JM3Y8.cjs.map +0 -1
  176. package/dist/workspace-D2CYLMCW.mjs.map +0 -1
@@ -1,12 +1,12 @@
1
- const require_credentials = require("./credentials-tr26-KML.cjs");
1
+ const require_credentials = require("./credentials-BKfIugu2.cjs");
2
2
  const require_schemas = require("./schemas-BObwxB_t.cjs");
3
3
  const require_discover = require("./discover-D1It5r_h.cjs");
4
4
  const require_sandbox = require("./sandbox-CL--ZDui.cjs");
5
5
  const require_derive = require("./derive-DAbo49sm.cjs");
6
- const require_workspace = require("./workspace-CT0JM3Y8.cjs");
7
- const require_seeds = require("./seeds-CsI0A_Ef.cjs");
8
- const require_local = require("./local-Cq8qdgNX.cjs");
9
- const require_sniffer = require("./sniffer-DJYupBeK.cjs");
6
+ const require_workspace = require("./workspace-CwW3Gkru.cjs");
7
+ const require_seeds = require("./seeds-CN6tB-va.cjs");
8
+ const require_local = require("./local-BjxDfPvy.cjs");
9
+ const require_sniffer = require("./sniffer-IAQEpsQb.cjs");
10
10
  const require_databases = require("./databases-BY-pEImp.cjs");
11
11
  const require_credentialSchemas = require("./credentialSchemas-DCR4Wd1W.cjs");
12
12
  let node_path = require("node:path");
@@ -17,9 +17,8 @@ let node_crypto = require("node:crypto");
17
17
  let _geekmidas_db_pg_roles = require("@geekmidas/db/pg/roles");
18
18
  let pg = require("pg");
19
19
  let _geekmidas_cache_postgres = require("@geekmidas/cache/postgres");
20
- let node_dns_promises = require("node:dns/promises");
21
20
  //#region src/deploy/docker.ts
22
- const logger$3 = require_discover.output;
21
+ const logger$2 = require_discover.output;
23
22
  /**
24
23
  * The id the Dockerfile templates mount the encrypted credentials under:
25
24
  * `RUN --mount=type=secret,id=gkm_credentials`.
@@ -95,8 +94,8 @@ async function writeCredentialsFile(credentials) {
95
94
  * @param credentials - Encrypted credentials, passed as a build secret
96
95
  */
97
96
  async function buildImage(imageRef, buildArgs, credentials, { cwd, dockerfile, signal, stdio, stage }) {
98
- logger$3.log(`\n🔨 Building Docker image: ${imageRef}`);
99
- logger$3.log(" Generating Dockerfile...");
97
+ logger$2.log(`\n🔨 Building Docker image: ${imageRef}`);
98
+ logger$2.log(" Generating Dockerfile...");
100
99
  const { buildRoot } = await require_seeds.dockerCommand({
101
100
  cwd,
102
101
  ...stage ? { stage } : {}
@@ -118,7 +117,7 @@ async function buildImage(imageRef, buildArgs, credentials, { cwd, dockerfile, s
118
117
  ...signal ? { signal } : {},
119
118
  ...stdio ? { stdio } : {}
120
119
  });
121
- logger$3.log(`✅ Image built: ${imageRef}`);
120
+ logger$2.log(`✅ Image built: ${imageRef}`);
122
121
  } catch (error) {
123
122
  throw new require_seeds.DockerBuildFailed(imageRef, error);
124
123
  } finally {
@@ -129,14 +128,14 @@ async function buildImage(imageRef, buildArgs, credentials, { cwd, dockerfile, s
129
128
  * Push Docker image to registry
130
129
  */
131
130
  async function pushImage(imageRef, { cwd, signal, stdio }) {
132
- logger$3.log(`\n☁️ Pushing image: ${imageRef}`);
131
+ logger$2.log(`\n☁️ Pushing image: ${imageRef}`);
133
132
  try {
134
133
  await require_credentials.run("docker", ["push", imageRef], {
135
134
  cwd,
136
135
  ...signal ? { signal } : {},
137
136
  ...stdio ? { stdio } : {}
138
137
  });
139
- logger$3.log(`✅ Image pushed: ${imageRef}`);
138
+ logger$2.log(`✅ Image pushed: ${imageRef}`);
140
139
  } catch (error) {
141
140
  throw new require_seeds.DockerPushFailed(imageRef, error);
142
141
  }
@@ -189,17 +188,17 @@ async function deployDocker(options) {
189
188
  await buildImage(imageRef, buildArgs, credentials, docker);
190
189
  let digest;
191
190
  if (!skipPush) {
192
- if (!config.registry) logger$3.warn("\n⚠️ No registry configured. Use --skip-push or configure docker.registry in gkm.config.ts");
191
+ if (!config.registry) logger$2.warn("\n⚠️ No registry configured. Use --skip-push or configure docker.registry in gkm.config.ts");
193
192
  else {
194
193
  await pushImage(imageRef, docker);
195
194
  digest = await pushedDigest(imageRef, docker);
196
195
  }
197
196
  }
198
- logger$3.log("\n✅ Docker deployment ready!");
199
- logger$3.log(`\n📋 Deployment details:`);
200
- logger$3.log(` Image: ${imageRef}`);
201
- logger$3.log(` Stage: ${stage}`);
202
- if (masterKey) logger$3.log(`\n🔐 Run the container with GKM_MASTER_KEY set to the key with fingerprint ${require_sniffer.keyFingerprint(masterKey)}.`);
197
+ logger$2.log("\n✅ Docker deployment ready!");
198
+ logger$2.log(`\n📋 Deployment details:`);
199
+ logger$2.log(` Image: ${imageRef}`);
200
+ logger$2.log(` Stage: ${stage}`);
201
+ if (masterKey) logger$2.log(`\n🔐 Run the container with GKM_MASTER_KEY set to the key with fingerprint ${require_sniffer.keyFingerprint(masterKey)}.`);
203
202
  return {
204
203
  imageRef,
205
204
  ...digest ? { digest } : {},
@@ -1286,7 +1285,7 @@ async function provisionDeclared(options) {
1286
1285
  events: require_seeds.eventsBackendFor(require_seeds.providerOf(workspace)),
1287
1286
  storage: require_seeds.storageBackendFor(require_seeds.providerOf(workspace)),
1288
1287
  ...options.devServices ? { devServices: options.devServices } : {},
1289
- ...workspace.deploy?.domains?.[options.stage] ? { domain: workspace.deploy.domains[options.stage] } : {},
1288
+ ...workspace.domains?.[options.stage] ? { domain: workspace.domains[options.stage] } : {},
1290
1289
  addresses: surfaceAddresses(manifest, options.appUrls),
1291
1290
  seed: options.seed,
1292
1291
  ...options.supplied ? { supplied: options.supplied } : {},
@@ -1366,387 +1365,6 @@ function surfaceAddresses(manifest, appUrls) {
1366
1365
  return addresses;
1367
1366
  }
1368
1367
  //#endregion
1369
- //#region src/target/dokploy/dns/DnsProvider.ts
1370
- /**
1371
- * Check if value is a DnsProvider implementation.
1372
- */
1373
- function isDnsProvider(value) {
1374
- return typeof value === "object" && value !== null && typeof value.name === "string" && typeof value.getRecords === "function" && typeof value.upsertRecords === "function" && typeof value.deleteRecords === "function";
1375
- }
1376
- /**
1377
- * Create a DNS provider based on configuration.
1378
- *
1379
- * - 'hostinger': HostingerProvider
1380
- * - 'route53': Route53Provider
1381
- * - 'manual': Returns null (user handles DNS)
1382
- * - Custom: Use provided DnsProvider implementation
1383
- */
1384
- async function createDnsProvider(options) {
1385
- const { config } = options;
1386
- if (config.provider === "manual") return null;
1387
- if (isDnsProvider(config.provider)) return config.provider;
1388
- const provider = config.provider;
1389
- if (provider === "hostinger") {
1390
- const { HostingerProvider } = await Promise.resolve().then(() => require("./HostingerProvider-BCB1QJj1.cjs"));
1391
- return new HostingerProvider();
1392
- }
1393
- if (provider === "route53") {
1394
- const { Route53Provider } = await Promise.resolve().then(() => require("./Route53Provider-Bllus2NR.cjs"));
1395
- const route53Config = config;
1396
- return new Route53Provider({
1397
- region: route53Config.region,
1398
- profile: route53Config.profile,
1399
- hostedZoneId: route53Config.hostedZoneId
1400
- });
1401
- }
1402
- if (provider === "cloudflare") throw new Error("Cloudflare DNS provider not yet implemented");
1403
- throw new Error(`Unknown DNS provider: ${JSON.stringify(config)}`);
1404
- }
1405
- //#endregion
1406
- //#region src/target/dokploy/dns/index.ts
1407
- /**
1408
- * DNS orchestration for deployments
1409
- *
1410
- * Handles automatic DNS record creation for deployed applications.
1411
- */
1412
- const logger$2 = require_discover.output;
1413
- /**
1414
- * Check if DNS config is legacy format (single domain with `domain` property)
1415
- */
1416
- function isLegacyDnsConfig(config) {
1417
- return typeof config === "object" && config !== null && "provider" in config && "domain" in config;
1418
- }
1419
- /**
1420
- * Normalize DNS config to new multi-domain format
1421
- */
1422
- function normalizeDnsConfig(config) {
1423
- if (isLegacyDnsConfig(config)) {
1424
- const { domain, ...providerConfig } = config;
1425
- return { [domain]: providerConfig };
1426
- }
1427
- return config;
1428
- }
1429
- /**
1430
- * Find the root domain for a hostname from available DNS configs
1431
- *
1432
- * @example
1433
- * findRootDomain('api.geekmidas.com', { 'geekmidas.com': {...}, 'geekmidas.dev': {...} })
1434
- * // Returns 'geekmidas.com'
1435
- */
1436
- function findRootDomain(hostname, dnsConfig) {
1437
- const domains = Object.keys(dnsConfig).sort((a, b) => b.length - a.length);
1438
- for (const domain of domains) if (hostname === domain || hostname.endsWith(`.${domain}`)) return domain;
1439
- return null;
1440
- }
1441
- /**
1442
- * Group hostnames by their root domain
1443
- */
1444
- function groupHostnamesByDomain(appHostnames, dnsConfig) {
1445
- const grouped = /* @__PURE__ */ new Map();
1446
- for (const [appName, hostname] of appHostnames) {
1447
- const rootDomain = findRootDomain(hostname, dnsConfig);
1448
- if (!rootDomain) {
1449
- logger$2.log(` ⚠ No DNS config found for hostname: ${hostname}`);
1450
- continue;
1451
- }
1452
- if (!grouped.has(rootDomain)) grouped.set(rootDomain, /* @__PURE__ */ new Map());
1453
- grouped.get(rootDomain).set(appName, hostname);
1454
- }
1455
- return grouped;
1456
- }
1457
- /**
1458
- * Resolve IP address from a hostname
1459
- */
1460
- async function resolveHostnameToIp(hostname) {
1461
- try {
1462
- return (await (0, node_dns_promises.lookup)(hostname, { family: 4 })).address;
1463
- } catch (error) {
1464
- throw new Error(`Failed to resolve IP for ${hostname}: ${error instanceof Error ? error.message : "Unknown error"}`);
1465
- }
1466
- }
1467
- /**
1468
- * Extract subdomain from full hostname relative to root domain
1469
- *
1470
- * @example
1471
- * extractSubdomain('api.joemoer.traflabs.io', 'traflabs.io') => 'api.joemoer'
1472
- * extractSubdomain('joemoer.traflabs.io', 'traflabs.io') => 'joemoer'
1473
- */
1474
- function extractSubdomain(hostname, rootDomain) {
1475
- if (!hostname.endsWith(rootDomain)) throw new Error(`Hostname ${hostname} is not under root domain ${rootDomain}`);
1476
- return hostname.slice(0, -(rootDomain.length + 1)) || "@";
1477
- }
1478
- /**
1479
- * Generate required DNS records for a deployment
1480
- */
1481
- function generateRequiredRecords(appHostnames, rootDomain, serverIp) {
1482
- const records = [];
1483
- for (const [appName, hostname] of appHostnames) {
1484
- const subdomain = extractSubdomain(hostname, rootDomain);
1485
- records.push({
1486
- hostname,
1487
- subdomain,
1488
- type: "A",
1489
- value: serverIp,
1490
- appName
1491
- });
1492
- }
1493
- return records;
1494
- }
1495
- /**
1496
- * Print DNS records table
1497
- */
1498
- function printDnsRecordsTable(records, rootDomain) {
1499
- logger$2.log(`\n 📋 DNS Records for ${rootDomain}:`);
1500
- logger$2.log(" ┌─────────────────────────────────────┬──────┬─────────────────┬────────┐");
1501
- logger$2.log(" │ Subdomain │ Type │ Value │ Status │");
1502
- logger$2.log(" ├─────────────────────────────────────┼──────┼─────────────────┼────────┤");
1503
- for (const record of records) {
1504
- const subdomain = record.subdomain.padEnd(35);
1505
- const type = record.type.padEnd(4);
1506
- const value = record.value.padEnd(15);
1507
- let status;
1508
- if (record.error) status = "✗";
1509
- else if (record.created) status = "✓ new";
1510
- else if (record.existed) status = "✓";
1511
- else status = "?";
1512
- logger$2.log(` │ ${subdomain} │ ${type} │ ${value} │ ${status.padEnd(6)} │`);
1513
- }
1514
- logger$2.log(" └─────────────────────────────────────┴──────┴─────────────────┴────────┘");
1515
- }
1516
- /**
1517
- * Print DNS records in a simple format for manual setup
1518
- */
1519
- function printDnsRecordsSimple(records, rootDomain) {
1520
- logger$2.log("\n 📋 Required DNS Records:");
1521
- logger$2.log(` Add these A records to your DNS provider (${rootDomain}):\n`);
1522
- for (const record of records) logger$2.log(` ${record.subdomain} → ${record.value} (A record)`);
1523
- logger$2.log("");
1524
- }
1525
- /**
1526
- * Create DNS records for a single domain using its configured provider
1527
- */
1528
- async function createDnsRecordsForDomain(records, rootDomain, providerConfig) {
1529
- const ttl = "ttl" in providerConfig && providerConfig.ttl ? providerConfig.ttl : 300;
1530
- let provider;
1531
- try {
1532
- provider = await createDnsProvider({ config: providerConfig });
1533
- } catch (error) {
1534
- const message = error instanceof Error ? error.message : "Unknown error";
1535
- logger$2.log(` ⚠ Failed to create DNS provider for ${rootDomain}: ${message}`);
1536
- return records.map((r) => ({
1537
- ...r,
1538
- error: message
1539
- }));
1540
- }
1541
- if (!provider) return records.map((r) => ({
1542
- ...r,
1543
- created: false,
1544
- existed: false
1545
- }));
1546
- const results = [];
1547
- const upsertRecords = records.map((r) => ({
1548
- name: r.subdomain,
1549
- type: r.type,
1550
- ttl,
1551
- value: r.value
1552
- }));
1553
- try {
1554
- const upsertResults = await provider.upsertRecords(rootDomain, upsertRecords);
1555
- for (const [i, record] of records.entries()) {
1556
- const result = upsertResults[i];
1557
- if (!result) {
1558
- results.push({
1559
- hostname: record.hostname,
1560
- subdomain: record.subdomain,
1561
- type: record.type,
1562
- value: record.value,
1563
- appName: record.appName,
1564
- error: "No result returned from provider"
1565
- });
1566
- continue;
1567
- }
1568
- if (result.unchanged) results.push({
1569
- hostname: record.hostname,
1570
- subdomain: record.subdomain,
1571
- type: record.type,
1572
- value: record.value,
1573
- appName: record.appName,
1574
- existed: true,
1575
- created: false
1576
- });
1577
- else results.push({
1578
- hostname: record.hostname,
1579
- subdomain: record.subdomain,
1580
- type: record.type,
1581
- value: record.value,
1582
- appName: record.appName,
1583
- created: result.created,
1584
- existed: !result.created
1585
- });
1586
- }
1587
- } catch (error) {
1588
- const message = error instanceof Error ? error.message : "Unknown error";
1589
- logger$2.log(` ⚠ Failed to create DNS records for ${rootDomain}: ${message}`);
1590
- return records.map((r) => ({
1591
- hostname: r.hostname,
1592
- subdomain: r.subdomain,
1593
- type: r.type,
1594
- value: r.value,
1595
- appName: r.appName,
1596
- error: message
1597
- }));
1598
- }
1599
- return results;
1600
- }
1601
- /**
1602
- * Main DNS orchestration function for deployments
1603
- *
1604
- * Supports both legacy single-domain format and new multi-domain format:
1605
- * - Legacy: { provider: 'hostinger', domain: 'example.com' }
1606
- * - Multi: { 'example.com': { provider: 'hostinger' }, 'example.dev': { provider: 'route53' } }
1607
- *
1608
- * @param appHostnames - Map of app names to hostnames
1609
- * @param dnsConfig - DNS configuration (legacy or multi-domain)
1610
- * @param dokployEndpoint - Dokploy server endpoint to resolve IP from
1611
- * @param state - Optional state to save created records for later deletion
1612
- */
1613
- async function orchestrateDns(appHostnames, dnsConfig, dokployEndpoint, state) {
1614
- if (!dnsConfig) return null;
1615
- const normalizedConfig = normalizeDnsConfig(dnsConfig);
1616
- logger$2.log("\n🌐 Setting up DNS records...");
1617
- let serverIp;
1618
- try {
1619
- const endpointUrl = new URL(dokployEndpoint);
1620
- serverIp = await resolveHostnameToIp(endpointUrl.hostname);
1621
- logger$2.log(` Server IP: ${serverIp} (from ${endpointUrl.hostname})`);
1622
- } catch (error) {
1623
- const message = error instanceof Error ? error.message : "Unknown error";
1624
- logger$2.log(` ⚠ Failed to resolve server IP: ${message}`);
1625
- return null;
1626
- }
1627
- const groupedHostnames = groupHostnamesByDomain(appHostnames, normalizedConfig);
1628
- if (groupedHostnames.size === 0) {
1629
- logger$2.log(" No DNS records needed (no hostnames match configured domains)");
1630
- return {
1631
- records: [],
1632
- success: true,
1633
- serverIp
1634
- };
1635
- }
1636
- const allRecords = [];
1637
- let hasFailures = false;
1638
- for (const [rootDomain, domainHostnames] of groupedHostnames) {
1639
- const providerConfig = normalizedConfig[rootDomain];
1640
- if (!providerConfig) {
1641
- logger$2.log(` ⚠ No provider config for ${rootDomain}`);
1642
- continue;
1643
- }
1644
- const providerName = typeof providerConfig.provider === "string" ? providerConfig.provider : "custom";
1645
- const requiredRecords = generateRequiredRecords(domainHostnames, rootDomain, serverIp);
1646
- if (requiredRecords.length === 0) continue;
1647
- logger$2.log(` Creating DNS records for ${rootDomain} (${providerName})...`);
1648
- const domainRecords = await createDnsRecordsForDomain(requiredRecords, rootDomain, providerConfig);
1649
- allRecords.push(...domainRecords);
1650
- const created = domainRecords.filter((r) => r.created).length;
1651
- const existed = domainRecords.filter((r) => r.existed).length;
1652
- const failed = domainRecords.filter((r) => r.error).length;
1653
- if (created > 0) logger$2.log(` ✓ Created ${created} DNS record(s) for ${rootDomain}`);
1654
- if (existed > 0) logger$2.log(` ✓ ${existed} record(s) already exist for ${rootDomain}`);
1655
- if (failed > 0) {
1656
- logger$2.log(` ⚠ ${failed} record(s) failed for ${rootDomain}`);
1657
- hasFailures = true;
1658
- }
1659
- if (state) {
1660
- for (const record of domainRecords) if (record.created || record.existed) require_seeds.setDnsRecord(state, {
1661
- domain: rootDomain,
1662
- name: record.subdomain,
1663
- type: record.type,
1664
- value: record.value,
1665
- ttl: "ttl" in providerConfig && providerConfig.ttl ? providerConfig.ttl : 300
1666
- });
1667
- }
1668
- printDnsRecordsTable(domainRecords, rootDomain);
1669
- if (providerConfig.provider === "manual" || failed > 0) printDnsRecordsSimple(domainRecords.filter((r) => !r.created && !r.existed), rootDomain);
1670
- }
1671
- return {
1672
- records: allRecords,
1673
- success: !hasFailures,
1674
- serverIp
1675
- };
1676
- }
1677
- /**
1678
- * Verify DNS records resolve correctly after deployment.
1679
- *
1680
- * This function:
1681
- * 1. Checks state for previously verified hostnames (skips if already verified with same IP)
1682
- * 2. Attempts to resolve each hostname to an IP
1683
- * 3. Compares resolved IP with expected server IP
1684
- * 4. Updates state with verification results
1685
- *
1686
- * @param appHostnames - Map of app names to hostnames
1687
- * @param serverIp - Expected IP address the hostnames should resolve to
1688
- * @param state - Deploy state for caching verification results
1689
- * @returns Array of verification results
1690
- */
1691
- async function verifyDnsRecords(appHostnames, serverIp, state) {
1692
- const results = [];
1693
- logger$2.log("\n🔍 Verifying DNS records...");
1694
- for (const [appName, hostname] of appHostnames) {
1695
- if (require_seeds.isDnsVerified(state, hostname, serverIp)) {
1696
- logger$2.log(` ✓ ${hostname} (previously verified)`);
1697
- results.push({
1698
- hostname,
1699
- appName,
1700
- verified: true,
1701
- expectedIp: serverIp,
1702
- skipped: true
1703
- });
1704
- continue;
1705
- }
1706
- try {
1707
- const resolvedIp = await resolveHostnameToIp(hostname);
1708
- if (resolvedIp === serverIp) {
1709
- require_seeds.setDnsVerification(state, hostname, serverIp);
1710
- logger$2.log(` ✓ ${hostname} → ${resolvedIp}`);
1711
- results.push({
1712
- hostname,
1713
- appName,
1714
- verified: true,
1715
- resolvedIp,
1716
- expectedIp: serverIp
1717
- });
1718
- } else {
1719
- logger$2.log(` ⚠ ${hostname} resolves to ${resolvedIp}, expected ${serverIp}`);
1720
- results.push({
1721
- hostname,
1722
- appName,
1723
- verified: false,
1724
- resolvedIp,
1725
- expectedIp: serverIp
1726
- });
1727
- }
1728
- } catch (error) {
1729
- const message = error instanceof Error ? error.message : "Unknown error";
1730
- logger$2.log(` ⚠ ${hostname} DNS not propagated (${message})`);
1731
- results.push({
1732
- hostname,
1733
- appName,
1734
- verified: false,
1735
- expectedIp: serverIp,
1736
- error: message
1737
- });
1738
- }
1739
- }
1740
- const verified = results.filter((r) => r.verified).length;
1741
- const skipped = results.filter((r) => r.skipped).length;
1742
- const pending = results.filter((r) => !r.verified).length;
1743
- if (pending > 0) {
1744
- logger$2.log(`\n ${verified} verified, ${pending} pending propagation`);
1745
- logger$2.log(" DNS changes may take 5-30 minutes to propagate");
1746
- } else if (skipped > 0) logger$2.log(` ${verified} verified (${skipped} from cache)`);
1747
- return results;
1748
- }
1749
- //#endregion
1750
1368
  //#region src/target/dokploy/env-resolver.ts
1751
1369
  /**
1752
1370
  * Environment Variable Resolution for Dokploy Deployments
@@ -1777,6 +1395,7 @@ function getOrGenerateSecret(state, appName, secretName) {
1777
1395
  * Resolve a single environment variable
1778
1396
  */
1779
1397
  function resolveEnvVar(varName, context) {
1398
+ if (require_workspace.isReservedStageKey(varName)) return void 0;
1780
1399
  switch (varName) {
1781
1400
  case "PORT": return String(context.app.port);
1782
1401
  case "NODE_ENV": return "production";
@@ -2305,7 +1924,7 @@ async function validateDokploy(phase) {
2305
1924
  declarations: require_seeds.manifestServiceDeclarations(phase.manifest),
2306
1925
  supplied: stored?.custom ?? {},
2307
1926
  allow: phase.allowDevServices,
2308
- ...workspace.deploy?.domains?.[stage] ? { domain: workspace.deploy.domains[stage] } : {},
1927
+ ...workspace.domains?.[stage] ? { domain: workspace.domains[stage] } : {},
2309
1928
  providers: require_seeds.stageProviderNotes(workspace, stage)
2310
1929
  });
2311
1930
  const devServices = require_seeds.devServicesUsed(services);
@@ -3036,11 +2655,11 @@ async function settleDns(run, apps) {
3036
2655
  const { workspace } = run;
3037
2656
  const { api, endpoint, journal, state } = run.provisioned;
3038
2657
  const appHostnames = new Map([...run.released.appHostnames].filter(([app]) => apps.includes(app)));
3039
- const dnsConfig = workspace.deploy.dns;
2658
+ const dnsConfig = workspace.dns;
3040
2659
  if (!dnsConfig || appHostnames.size === 0) return;
3041
- const dnsResult = await orchestrateDns(appHostnames, dnsConfig, endpoint);
2660
+ const dnsResult = await require_seeds.orchestrateDns(appHostnames, dnsConfig, endpoint);
3042
2661
  if (dnsResult?.serverIp) {
3043
- await verifyDnsRecords(appHostnames, dnsResult.serverIp, state);
2662
+ await require_seeds.verifyDnsRecords(appHostnames, dnsResult.serverIp, state);
3044
2663
  await journal.save();
3045
2664
  }
3046
2665
  if (dnsResult?.success) {
@@ -3284,7 +2903,7 @@ async function dokployApi(workspace, ctx) {
3284
2903
  /** Each app's public host, the same way the deploy resolves it. */
3285
2904
  function hostOf(workspace, appName, stage) {
3286
2905
  const app = workspace.apps[appName];
3287
- return require_seeds.resolveHost(appName, app, stage, workspace.deploy?.domains, app.type === "web" && require_seeds.isMainFrontendApp(appName, app, workspace.apps));
2906
+ return require_seeds.resolveHost(appName, app, stage, workspace.domains, app.type === "web" && require_seeds.isMainFrontendApp(appName, app, workspace.apps));
3288
2907
  }
3289
2908
  /**
3290
2909
  * What a deploy would do, from the same lookups it starts with — and nothing
@@ -3576,4 +3195,4 @@ Object.defineProperty(exports, "verifySettings", {
3576
3195
  }
3577
3196
  });
3578
3197
 
3579
- //# sourceMappingURL=engine-Bt5k_UMq.cjs.map
3198
+ //# sourceMappingURL=engine-DgHoFBMw.cjs.map