@geekmidas/cli 10.0.0-alpha.60 → 10.0.0-alpha.61

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 (73) hide show
  1. package/dist/{HostingerProvider-BTZd2u0f.cjs → HostingerProvider-CgDaD8VR.cjs} +2 -2
  2. package/dist/{HostingerProvider-BTZd2u0f.cjs.map → HostingerProvider-CgDaD8VR.cjs.map} +1 -1
  3. package/dist/{HostingerProvider-DgzKa_Tj.mjs → HostingerProvider-DI_Pr2VE.mjs} +2 -2
  4. package/dist/{HostingerProvider-DgzKa_Tj.mjs.map → HostingerProvider-DI_Pr2VE.mjs.map} +1 -1
  5. package/dist/{LegacyStateStore-CToa2hga.mjs → LegacyStateStore-C7vFAxbu.mjs} +2 -2
  6. package/dist/{LegacyStateStore-CToa2hga.mjs.map → LegacyStateStore-C7vFAxbu.mjs.map} +1 -1
  7. package/dist/{LegacyStateStore-CidlPT0N.cjs → LegacyStateStore-JbBVFp_2.cjs} +2 -2
  8. package/dist/{LegacyStateStore-CidlPT0N.cjs.map → LegacyStateStore-JbBVFp_2.cjs.map} +1 -1
  9. package/dist/{LocalStateStore-Dpuqka1N.cjs → LocalStateStore-DHj_-CQB.cjs} +2 -2
  10. package/dist/{LocalStateStore-Dpuqka1N.cjs.map → LocalStateStore-DHj_-CQB.cjs.map} +1 -1
  11. package/dist/{LocalStateStore-BFLiOocU.mjs → LocalStateStore-DfUwQsL8.mjs} +2 -2
  12. package/dist/{LocalStateStore-BFLiOocU.mjs.map → LocalStateStore-DfUwQsL8.mjs.map} +1 -1
  13. package/dist/{OpenApiTsGenerator-BTuUumsV.cjs → OpenApiTsGenerator-BSrgw7B0.cjs} +31 -2
  14. package/dist/OpenApiTsGenerator-BSrgw7B0.cjs.map +1 -0
  15. package/dist/{OpenApiTsGenerator-CvVr1Ilz.mjs → OpenApiTsGenerator-q5B0z8Xg.mjs} +31 -2
  16. package/dist/OpenApiTsGenerator-q5B0z8Xg.mjs.map +1 -0
  17. package/dist/{S3StateStore-aaGkjcxO.mjs → S3StateStore-Dq6hHtzY.mjs} +2 -2
  18. package/dist/{S3StateStore-aaGkjcxO.mjs.map → S3StateStore-Dq6hHtzY.mjs.map} +1 -1
  19. package/dist/{S3StateStore-cnm813Xn.cjs → S3StateStore-xqnpUrzy.cjs} +2 -2
  20. package/dist/{S3StateStore-cnm813Xn.cjs.map → S3StateStore-xqnpUrzy.cjs.map} +1 -1
  21. package/dist/{SSMStateStore-DwaGprVX.cjs → SSMStateStore-5dBRwVlJ.cjs} +2 -2
  22. package/dist/{SSMStateStore-DwaGprVX.cjs.map → SSMStateStore-5dBRwVlJ.cjs.map} +1 -1
  23. package/dist/{SSMStateStore-BllaJKGo.mjs → SSMStateStore-SUmvAbLi.mjs} +2 -2
  24. package/dist/{SSMStateStore-BllaJKGo.mjs.map → SSMStateStore-SUmvAbLi.mjs.map} +1 -1
  25. package/dist/{bundler-DJVR4QlW.mjs → bundler-B5VsKW-_.mjs} +2 -2
  26. package/dist/{bundler-DJVR4QlW.mjs.map → bundler-B5VsKW-_.mjs.map} +1 -1
  27. package/dist/{bundler-CzXZPSBJ.cjs → bundler-DXATpO1T.cjs} +2 -2
  28. package/dist/{bundler-CzXZPSBJ.cjs.map → bundler-DXATpO1T.cjs.map} +1 -1
  29. package/dist/{cli-DzR1hpum.mjs → cli-DEA_J3Sa.mjs} +2 -2
  30. package/dist/{cli-DzR1hpum.mjs.map → cli-DEA_J3Sa.mjs.map} +1 -1
  31. package/dist/{cli-D_qTl20Z.cjs → cli-DQdrVkj2.cjs} +2 -2
  32. package/dist/{cli-D_qTl20Z.cjs.map → cli-DQdrVkj2.cjs.map} +1 -1
  33. package/dist/deploy/public.cjs +2 -2
  34. package/dist/deploy/public.mjs +2 -2
  35. package/dist/{deploy-D6Q09OkA.mjs → deploy-BJcLmVTc.mjs} +6 -153
  36. package/dist/deploy-BJcLmVTc.mjs.map +1 -0
  37. package/dist/{deploy-0fBVeWO-.cjs → deploy-BbJdgQ2b.cjs} +17 -170
  38. package/dist/deploy-BbJdgQ2b.cjs.map +1 -0
  39. package/dist/{encryption-aDA2AzVx.mjs → encryption-DaA9gRXr.mjs} +2 -2
  40. package/dist/{encryption-aDA2AzVx.mjs.map → encryption-DaA9gRXr.mjs.map} +1 -1
  41. package/dist/{encryption-CML4UaPi.cjs → encryption-ojzUo7-z.cjs} +2 -2
  42. package/dist/{encryption-CML4UaPi.cjs.map → encryption-ojzUo7-z.cjs.map} +1 -1
  43. package/dist/index.cjs +1720 -139
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.mjs +1712 -147
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/migrate-5_J5JySj.mjs +265 -0
  48. package/dist/migrate-5_J5JySj.mjs.map +1 -0
  49. package/dist/migrate-BScRpCEx.cjs +270 -0
  50. package/dist/migrate-BScRpCEx.cjs.map +1 -0
  51. package/dist/openapi.cjs +1 -1
  52. package/dist/openapi.mjs +1 -1
  53. package/dist/{ready-CIHpnUc5.mjs → ready-DQIy21W5.mjs} +2 -2
  54. package/dist/{ready-CIHpnUc5.mjs.map → ready-DQIy21W5.mjs.map} +1 -1
  55. package/dist/{ready-CCLIAkwR.cjs → ready-XlNx-Gbo.cjs} +2 -2
  56. package/dist/{ready-CCLIAkwR.cjs.map → ready-XlNx-Gbo.cjs.map} +1 -1
  57. package/dist/{sniffer-DIv12ncU.cjs → sniffer-CQmJnNJM.cjs} +2569 -2161
  58. package/dist/sniffer-CQmJnNJM.cjs.map +1 -0
  59. package/dist/{sniffer-BM8fpCas.mjs → sniffer-bdleks5l.mjs} +2416 -2176
  60. package/dist/sniffer-bdleks5l.mjs.map +1 -0
  61. package/dist/vitest.cjs +1 -1
  62. package/dist/vitest.mjs +1 -1
  63. package/package.json +13 -13
  64. package/dist/OpenApiTsGenerator-BTuUumsV.cjs.map +0 -1
  65. package/dist/OpenApiTsGenerator-CvVr1Ilz.mjs.map +0 -1
  66. package/dist/deploy-0fBVeWO-.cjs.map +0 -1
  67. package/dist/deploy-D6Q09OkA.mjs.map +0 -1
  68. package/dist/migrate-BTqIflwc.cjs +0 -743
  69. package/dist/migrate-BTqIflwc.cjs.map +0 -1
  70. package/dist/migrate-B_6KofUo.mjs +0 -736
  71. package/dist/migrate-B_6KofUo.mjs.map +0 -1
  72. package/dist/sniffer-BM8fpCas.mjs.map +0 -1
  73. package/dist/sniffer-DIv12ncU.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- const require_sniffer = require("./sniffer-DIv12ncU.cjs");
1
+ const require_sniffer = require("./sniffer-CQmJnNJM.cjs");
2
2
  const require_home = require("./home-DOzBaWaL.cjs");
3
3
  const require_discover = require("./discover-Bc-4eA_p.cjs");
4
4
  const require_config = require("./config-DXnkCEq0.cjs");
@@ -10,7 +10,6 @@ let node_fs_promises = require("node:fs/promises");
10
10
  let node_os = require("node:os");
11
11
  let _geekmidas_manifest = require("@geekmidas/manifest");
12
12
  let node_crypto = require("node:crypto");
13
- let _geekmidas_constructs_encryption = require("@geekmidas/constructs/encryption");
14
13
  let _geekmidas_db_pg_roles = require("@geekmidas/db/pg/roles");
15
14
  let pg = require("pg");
16
15
  let _geekmidas_cache_postgres = require("@geekmidas/cache/postgres");
@@ -855,108 +854,6 @@ function surfaceAddresses(manifest, appUrls) {
855
854
  return addresses;
856
855
  }
857
856
  //#endregion
858
- //#region src/deploy/state.ts
859
- /**
860
- * Deploy state management for Dokploy deployments
861
- *
862
- * Stores resource IDs (applications, services) per stage to avoid
863
- * re-creating resources on subsequent deploys.
864
- */
865
- /**
866
- * Create a new empty state for a stage
867
- */
868
- function createEmptyState(stage, projectId, environmentId) {
869
- return {
870
- provider: "dokploy",
871
- stage,
872
- projectId,
873
- environmentId,
874
- applications: {},
875
- services: {},
876
- lastDeployedAt: (/* @__PURE__ */ new Date()).toISOString()
877
- };
878
- }
879
- /**
880
- * Set application ID in state (mutates state)
881
- */
882
- function setApplicationId(state, appName, applicationId) {
883
- state.applications[appName] = applicationId;
884
- }
885
- /**
886
- * Record the image an app was deployed with (mutates state)
887
- */
888
- function setDeployedImage(state, appName, image) {
889
- state.images = {
890
- ...state.images,
891
- [appName]: image
892
- };
893
- }
894
- /**
895
- * Get a generated secret for an app
896
- */
897
- function getGeneratedSecret(state, appName, secretName) {
898
- return state?.generatedSecrets?.[appName]?.[secretName];
899
- }
900
- /**
901
- * Set a generated secret for an app (mutates state)
902
- */
903
- function setGeneratedSecret(state, appName, secretName, value) {
904
- if (!state.generatedSecrets) state.generatedSecrets = {};
905
- if (!state.generatedSecrets[appName]) state.generatedSecrets[appName] = {};
906
- state.generatedSecrets[appName][secretName] = value;
907
- }
908
- /**
909
- * Set DNS verification record for a hostname (mutates state)
910
- */
911
- function setDnsVerification(state, hostname, serverIp) {
912
- if (!state.dnsVerified) state.dnsVerified = {};
913
- state.dnsVerified[hostname] = {
914
- serverIp,
915
- verifiedAt: (/* @__PURE__ */ new Date()).toISOString()
916
- };
917
- }
918
- /**
919
- * Check if a hostname is already verified with the given IP
920
- */
921
- function isDnsVerified(state, hostname, serverIp) {
922
- return (state?.dnsVerified?.[hostname])?.serverIp === serverIp;
923
- }
924
- /**
925
- * Get the key for a DNS record in state
926
- */
927
- function getDnsRecordKey(name, type) {
928
- return `${name}:${type}`;
929
- }
930
- /**
931
- * Set a created DNS record in state (mutates state)
932
- */
933
- function setDnsRecord(state, record) {
934
- if (!state.dnsRecords) state.dnsRecords = {};
935
- const key = getDnsRecordKey(record.name, record.type);
936
- state.dnsRecords[key] = {
937
- ...record,
938
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
939
- };
940
- }
941
- /**
942
- * Get backup state from state
943
- */
944
- function getBackupState(state) {
945
- return state?.backups;
946
- }
947
- /**
948
- * Set backup state (mutates state)
949
- */
950
- function setBackupState(state, backupState) {
951
- state.backups = backupState;
952
- }
953
- /**
954
- * Set postgres backup ID in state (mutates state)
955
- */
956
- function setPostgresBackupId(state, backupId) {
957
- if (state.backups) state.backups.postgresBackupId = backupId;
958
- }
959
- //#endregion
960
857
  //#region src/deploy/dns/DnsProvider.ts
961
858
  /**
962
859
  * Check if value is a DnsProvider implementation.
@@ -978,7 +875,7 @@ async function createDnsProvider(options) {
978
875
  if (isDnsProvider(config.provider)) return config.provider;
979
876
  const provider = config.provider;
980
877
  if (provider === "hostinger") {
981
- const { HostingerProvider } = await Promise.resolve().then(() => require("./HostingerProvider-BTZd2u0f.cjs"));
878
+ const { HostingerProvider } = await Promise.resolve().then(() => require("./HostingerProvider-CgDaD8VR.cjs"));
982
879
  return new HostingerProvider();
983
880
  }
984
881
  if (provider === "route53") {
@@ -1248,7 +1145,7 @@ async function orchestrateDns(appHostnames, dnsConfig, dokployEndpoint, state) {
1248
1145
  hasFailures = true;
1249
1146
  }
1250
1147
  if (state) {
1251
- for (const record of domainRecords) if (record.created || record.existed) setDnsRecord(state, {
1148
+ for (const record of domainRecords) if (record.created || record.existed) require_sniffer.setDnsRecord(state, {
1252
1149
  domain: rootDomain,
1253
1150
  name: record.subdomain,
1254
1151
  type: record.type,
@@ -1283,7 +1180,7 @@ async function verifyDnsRecords(appHostnames, serverIp, state) {
1283
1180
  const results = [];
1284
1181
  logger$3.log("\n🔍 Verifying DNS records...");
1285
1182
  for (const [appName, hostname] of appHostnames) {
1286
- if (isDnsVerified(state, hostname, serverIp)) {
1183
+ if (require_sniffer.isDnsVerified(state, hostname, serverIp)) {
1287
1184
  logger$3.log(` ✓ ${hostname} (previously verified)`);
1288
1185
  results.push({
1289
1186
  hostname,
@@ -1297,7 +1194,7 @@ async function verifyDnsRecords(appHostnames, serverIp, state) {
1297
1194
  try {
1298
1195
  const resolvedIp = await resolveHostnameToIp(hostname);
1299
1196
  if (resolvedIp === serverIp) {
1300
- setDnsVerification(state, hostname, serverIp);
1197
+ require_sniffer.setDnsVerification(state, hostname, serverIp);
1301
1198
  logger$3.log(` ✓ ${hostname} → ${resolvedIp}`);
1302
1199
  results.push({
1303
1200
  hostname,
@@ -1531,10 +1428,10 @@ function generateSecret() {
1531
1428
  * Otherwise generates a new one and stores it.
1532
1429
  */
1533
1430
  function getOrGenerateSecret(state, appName, secretName) {
1534
- const existing = getGeneratedSecret(state, appName, secretName);
1431
+ const existing = require_sniffer.getGeneratedSecret(state, appName, secretName);
1535
1432
  if (existing) return existing;
1536
1433
  const generated = generateSecret();
1537
- setGeneratedSecret(state, appName, secretName, generated);
1434
+ require_sniffer.setGeneratedSecret(state, appName, secretName, generated);
1538
1435
  return generated;
1539
1436
  }
1540
1437
  /**
@@ -1597,57 +1494,6 @@ function validateEnvVars(requiredVars, context) {
1597
1494
  };
1598
1495
  }
1599
1496
  //#endregion
1600
- //#region src/deploy/generated.ts
1601
- /**
1602
- * The values a deployed stage generates once and keeps: what nothing can
1603
- * provision and nobody else issues.
1604
- *
1605
- * - **A seed**, which salts every password a deploy derives — a database's
1606
- * master and roles, a bucket's root user. Derived from repo facts alone
1607
- * (project, stage, construct id), those passwords were computable by anyone
1608
- * who could read the repo.
1609
- * - **Each `secret` construct's value** — an auth server's signing secret —
1610
- * random, rather than derived.
1611
- * - **Each `encryption` construct's keyring** — one random key and an index
1612
- * key. Later keys are added by `gkm encryption:rotate`, never by a deploy.
1613
- *
1614
- * Both are generated on the first deploy that needs them and written to the
1615
- * stage's store, so every later deploy reads the same values: sessions survive
1616
- * a redeploy, and a role's password does not move. A value set by hand with
1617
- * `gkm secrets:set` is kept, never replaced.
1618
- */
1619
- /**
1620
- * The stage's secrets with its seed and every declared `secret`'s value
1621
- * present, generating what is missing. Pure: the caller writes the result
1622
- * back to the stage's store when `generated` is not empty.
1623
- */
1624
- function withGeneratedSecrets(secrets, manifest) {
1625
- const generated = [];
1626
- const custom = { ...secrets.custom };
1627
- for (const declaration of Object.values(manifest)) {
1628
- if (declaration?.kind !== "secret" && declaration?.kind !== "encryption") continue;
1629
- const key = declaration.provides?.[0];
1630
- if (!key || custom[key]) continue;
1631
- custom[key] = declaration.kind === "encryption" ? (0, _geekmidas_constructs_encryption.generateKeyring)() : random();
1632
- generated.push(key);
1633
- }
1634
- const seed = secrets.seed ?? random();
1635
- if (!secrets.seed) generated.push("seed");
1636
- return {
1637
- secrets: generated.length ? {
1638
- ...secrets,
1639
- seed,
1640
- custom,
1641
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1642
- } : secrets,
1643
- generated
1644
- };
1645
- }
1646
- /** 256 bits, URL-safe. */
1647
- function random() {
1648
- return (0, node_crypto.randomBytes)(32).toString("base64url");
1649
- }
1650
- //#endregion
1651
1497
  //#region src/deploy/journal.ts
1652
1498
  var DeployJournal = class DeployJournal {
1653
1499
  store;
@@ -2551,7 +2397,7 @@ async function preflight({ workspace, manifest, stage, ctx }) {
2551
2397
  const secretsStore = await require_store.secretsStoreFor(workspace, stage, { ...ctx.home ? { home: ctx.home } : {} });
2552
2398
  const stored = await secretsStore.read(stage);
2553
2399
  if (!stored) logger.log(` ⚠️ No secrets found for stage "${stage}"; starting them`);
2554
- const { secrets: stageSecrets, generated } = withGeneratedSecrets(stored ?? require_storage.initStageSecrets(stage), manifest);
2400
+ const { secrets: stageSecrets, generated } = require_sniffer.withGeneratedSecrets(stored ?? require_storage.initStageSecrets(stage), manifest);
2555
2401
  if (generated.length > 0) {
2556
2402
  if (ctx.dryRun) logger.log(` 🔑 Would generate for "${stage}" (${secretsStore.name}): ${generated.join(", ")}`);
2557
2403
  else {
@@ -2596,7 +2442,7 @@ async function deployLocked(run) {
2596
2442
  });
2597
2443
  const { api, endpoint } = await dokployApi(workspace, ctx);
2598
2444
  logger.log("\n📋 Loading deploy state...");
2599
- const journal = await DeployJournal.open(store, stage, () => createEmptyState(stage, "", ""));
2445
+ const journal = await DeployJournal.open(store, stage, () => require_sniffer.createEmptyState(stage, "", ""));
2600
2446
  const state = journal.state;
2601
2447
  if (journal.existed) logger.log(` Found existing state for stage "${stage}"`);
2602
2448
  else logger.log(` Creating new state for stage "${stage}"`);
@@ -2728,15 +2574,15 @@ async function deployLocked(run) {
2728
2574
  projectName: identity.scope,
2729
2575
  stage,
2730
2576
  config: workspace.deploy.backups,
2731
- existingState: getBackupState(state),
2577
+ existingState: require_sniffer.getBackupState(state),
2732
2578
  logger
2733
2579
  });
2734
- setBackupState(state, backupState);
2580
+ require_sniffer.setBackupState(state, backupState);
2735
2581
  if (!backupState.postgresBackupId) {
2736
2582
  const backupSchedule = workspace.deploy.backups.schedule ?? "0 2 * * *";
2737
2583
  const backupRetention = workspace.deploy.backups.retention ?? 30;
2738
2584
  logger.log(" Creating postgres backup schedule...");
2739
- setPostgresBackupId(state, (await api.createPostgresBackup({
2585
+ const backup = await api.createPostgresBackup({
2740
2586
  schedule: backupSchedule,
2741
2587
  prefix: `${stage}/postgres`,
2742
2588
  destinationId: backupState.destinationId,
@@ -2744,7 +2590,8 @@ async function deployLocked(run) {
2744
2590
  postgresId: backupCluster.postgresId,
2745
2591
  enabled: true,
2746
2592
  keepLatestCount: backupRetention
2747
- })).backupId);
2593
+ });
2594
+ require_sniffer.setPostgresBackupId(state, backup.backupId);
2748
2595
  logger.log(` ✓ Postgres backup schedule created (${backupSchedule})`);
2749
2596
  } else logger.log(" ✓ Using existing postgres backup schedule");
2750
2597
  }
@@ -2792,7 +2639,7 @@ async function deployLocked(run) {
2792
2639
  };
2793
2640
  /** An image is pushed: worth keeping even if what follows fails. */
2794
2641
  const built = async (appName, image, ref) => {
2795
- setDeployedImage(state, appName, {
2642
+ require_sniffer.setDeployedImage(state, appName, {
2796
2643
  ref: image.imageRef ?? ref,
2797
2644
  ...image.digest ? { digest: image.digest } : {}
2798
2645
  });
@@ -3071,7 +2918,7 @@ async function ensureApplication(api, journal, appName, dokployAppName, projectI
3071
2918
  action: via === "created" ? "create" : "reuse",
3072
2919
  id: resource.applicationId
3073
2920
  }, via);
3074
- setApplicationId(journal.state, appName, resource.applicationId);
2921
+ require_sniffer.setApplicationId(journal.state, appName, resource.applicationId);
3075
2922
  return resource;
3076
2923
  }
3077
2924
  /**
@@ -3515,4 +3362,4 @@ Object.defineProperty(exports, "terminalCredentials", {
3515
3362
  }
3516
3363
  });
3517
3364
 
3518
- //# sourceMappingURL=deploy-0fBVeWO-.cjs.map
3365
+ //# sourceMappingURL=deploy-BbJdgQ2b.cjs.map