@geekmidas/cli 10.0.0-alpha.110 → 10.0.0-alpha.112

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 (117) hide show
  1. package/dist/{GoDaddyProvider-CjeOduia.mjs → GoDaddyProvider-CPabc3XW.mjs} +2 -2
  2. package/dist/{GoDaddyProvider-CjeOduia.mjs.map → GoDaddyProvider-CPabc3XW.mjs.map} +1 -1
  3. package/dist/{GoDaddyProvider-qNUzTXI7.cjs → GoDaddyProvider-DWrDIXzQ.cjs} +2 -2
  4. package/dist/{GoDaddyProvider-qNUzTXI7.cjs.map → GoDaddyProvider-DWrDIXzQ.cjs.map} +1 -1
  5. package/dist/{LegacyStateStore-pgscYsiG.mjs → LegacyStateStore-BdXoAlYY.mjs} +3 -3
  6. package/dist/{LegacyStateStore-pgscYsiG.mjs.map → LegacyStateStore-BdXoAlYY.mjs.map} +1 -1
  7. package/dist/{LegacyStateStore-MxiSu7KJ.cjs → LegacyStateStore-fsyPGBWu.cjs} +3 -3
  8. package/dist/{LegacyStateStore-MxiSu7KJ.cjs.map → LegacyStateStore-fsyPGBWu.cjs.map} +1 -1
  9. package/dist/{LocalStateStore-Bm8Vmwjb.cjs → LocalStateStore-AtviUBky.cjs} +2 -2
  10. package/dist/{LocalStateStore-Bm8Vmwjb.cjs.map → LocalStateStore-AtviUBky.cjs.map} +1 -1
  11. package/dist/{LocalStateStore-BcvyKbAw.mjs → LocalStateStore-BrAX5yy7.mjs} +2 -2
  12. package/dist/{LocalStateStore-BcvyKbAw.mjs.map → LocalStateStore-BrAX5yy7.mjs.map} +1 -1
  13. package/dist/{S3StateStore-H2XsAzpJ.mjs → S3StateStore-Cx7njkBz.mjs} +2 -2
  14. package/dist/{S3StateStore-H2XsAzpJ.mjs.map → S3StateStore-Cx7njkBz.mjs.map} +1 -1
  15. package/dist/{S3StateStore-DXHSBVsV.cjs → S3StateStore-tn5g80Sx.cjs} +2 -2
  16. package/dist/{S3StateStore-DXHSBVsV.cjs.map → S3StateStore-tn5g80Sx.cjs.map} +1 -1
  17. package/dist/{SSMStateStore-BLPSNl-U.cjs → SSMStateStore-CAFde-Fq.cjs} +2 -2
  18. package/dist/{SSMStateStore-BLPSNl-U.cjs.map → SSMStateStore-CAFde-Fq.cjs.map} +1 -1
  19. package/dist/{SSMStateStore-CENciQEM.mjs → SSMStateStore-sqZ3oDmn.mjs} +2 -2
  20. package/dist/{SSMStateStore-CENciQEM.mjs.map → SSMStateStore-sqZ3oDmn.mjs.map} +1 -1
  21. package/dist/{add-Cdg1kEqN.cjs → add-Cs8yT5iH.cjs} +3 -3
  22. package/dist/{add-Cdg1kEqN.cjs.map → add-Cs8yT5iH.cjs.map} +1 -1
  23. package/dist/{add-snhdVmR-.mjs → add-DJE7zqJ4.mjs} +3 -3
  24. package/dist/{add-snhdVmR-.mjs.map → add-DJE7zqJ4.mjs.map} +1 -1
  25. package/dist/{bundler-Wd9H4QLJ.mjs → bundler-DrySVbXF.mjs} +5 -5
  26. package/dist/{bundler-Wd9H4QLJ.mjs.map → bundler-DrySVbXF.mjs.map} +1 -1
  27. package/dist/{bundler-B4GDxImV.cjs → bundler-NrtItVBp.cjs} +5 -5
  28. package/dist/{bundler-B4GDxImV.cjs.map → bundler-NrtItVBp.cjs.map} +1 -1
  29. package/dist/{cli-BZYz55tO.cjs → cli-CHzpFBh-.cjs} +2 -2
  30. package/dist/{cli-BZYz55tO.cjs.map → cli-CHzpFBh-.cjs.map} +1 -1
  31. package/dist/{cli-BzrDSNSg.mjs → cli-DDY3jfTt.mjs} +4 -4
  32. package/dist/{cli-BzrDSNSg.mjs.map → cli-DDY3jfTt.mjs.map} +1 -1
  33. package/dist/{compose-DN9zySvQ.cjs → compose-ByIbIrzs.cjs} +20 -5
  34. package/dist/compose-ByIbIrzs.cjs.map +1 -0
  35. package/dist/{compose-Gsd1Nq7R.mjs → compose-CDC2bCme.mjs} +20 -5
  36. package/dist/compose-CDC2bCme.mjs.map +1 -0
  37. package/dist/deploy/public.cjs +6 -6
  38. package/dist/deploy/public.mjs +6 -6
  39. package/dist/{deploy-H2S8_mTx.mjs → deploy-DLq9-m6H.mjs} +5 -5
  40. package/dist/{deploy-H2S8_mTx.mjs.map → deploy-DLq9-m6H.mjs.map} +1 -1
  41. package/dist/{deploy-CFvq8daZ.cjs → deploy-Dl_NavYE.cjs} +5 -5
  42. package/dist/{deploy-CFvq8daZ.cjs.map → deploy-Dl_NavYE.cjs.map} +1 -1
  43. package/dist/{dns-BdETzP10.cjs → dns-C2TGXUF4.cjs} +2 -2
  44. package/dist/{dns-BdETzP10.cjs.map → dns-C2TGXUF4.cjs.map} +1 -1
  45. package/dist/{dns-pFMShDqW.mjs → dns-pzftumxg.mjs} +2 -2
  46. package/dist/{dns-pFMShDqW.mjs.map → dns-pzftumxg.mjs.map} +1 -1
  47. package/dist/{dokploy-oDJbnvCb.mjs → dokploy-B7-OwY2s.mjs} +2 -2
  48. package/dist/{dokploy-oDJbnvCb.mjs.map → dokploy-B7-OwY2s.mjs.map} +1 -1
  49. package/dist/{dokploy-HioAjP7K.cjs → dokploy-OqBh8G4g.cjs} +2 -2
  50. package/dist/{dokploy-HioAjP7K.cjs.map → dokploy-OqBh8G4g.cjs.map} +1 -1
  51. package/dist/eas-Cne743nQ.cjs +337 -0
  52. package/dist/eas-Cne743nQ.cjs.map +1 -0
  53. package/dist/eas-DEpwISrQ.mjs +334 -0
  54. package/dist/eas-DEpwISrQ.mjs.map +1 -0
  55. package/dist/{encryption-D5pDJyp2.mjs → encryption-DJv_jEXi.mjs} +2 -2
  56. package/dist/{encryption-D5pDJyp2.mjs.map → encryption-DJv_jEXi.mjs.map} +1 -1
  57. package/dist/{encryption-DVCxD-gV.cjs → encryption-DoVnVU82.cjs} +2 -2
  58. package/dist/{encryption-DVCxD-gV.cjs.map → encryption-DoVnVU82.cjs.map} +1 -1
  59. package/dist/{engine-BaJGPzte.cjs → engine-CJhQb50j.cjs} +3 -3
  60. package/dist/{engine-BaJGPzte.cjs.map → engine-CJhQb50j.cjs.map} +1 -1
  61. package/dist/{engine-CfAKgr2_.mjs → engine-Db71-OZL.mjs} +3 -3
  62. package/dist/{engine-CfAKgr2_.mjs.map → engine-Db71-OZL.mjs.map} +1 -1
  63. package/dist/{github-E-ZxqFPq.mjs → github-D2eABlxM.mjs} +4 -4
  64. package/dist/{github-E-ZxqFPq.mjs.map → github-D2eABlxM.mjs.map} +1 -1
  65. package/dist/{github-D902Vwr9.cjs → github-DDOHjdS9.cjs} +4 -4
  66. package/dist/{github-D902Vwr9.cjs.map → github-DDOHjdS9.cjs.map} +1 -1
  67. package/dist/googlePlay-B6uiHi65.cjs +931 -0
  68. package/dist/googlePlay-B6uiHi65.cjs.map +1 -0
  69. package/dist/googlePlay-BYZ-J5sC.mjs +931 -0
  70. package/dist/googlePlay-BYZ-J5sC.mjs.map +1 -0
  71. package/dist/index.cjs +268 -94
  72. package/dist/index.cjs.map +1 -1
  73. package/dist/index.mjs +268 -97
  74. package/dist/index.mjs.map +1 -1
  75. package/dist/{migrate-BZ0GnSZQ.mjs → migrate-CQUGbptv.mjs} +2 -2
  76. package/dist/{migrate-BZ0GnSZQ.mjs.map → migrate-CQUGbptv.mjs.map} +1 -1
  77. package/dist/{migrate-Df81ew0k.cjs → migrate-GLBZlrlJ.cjs} +2 -2
  78. package/dist/{migrate-Df81ew0k.cjs.map → migrate-GLBZlrlJ.cjs.map} +1 -1
  79. package/dist/{migrate-CTqhWtev.cjs → migrate-bDQzFvBN.cjs} +2 -2
  80. package/dist/{migrate-CTqhWtev.cjs.map → migrate-bDQzFvBN.cjs.map} +1 -1
  81. package/dist/{migrate-DCXwHcWX.mjs → migrate-xHYaeBkd.mjs} +3 -3
  82. package/dist/{migrate-DCXwHcWX.mjs.map → migrate-xHYaeBkd.mjs.map} +1 -1
  83. package/dist/publish-CSctCNf4.mjs +123 -0
  84. package/dist/publish-CSctCNf4.mjs.map +1 -0
  85. package/dist/publish-SDG1WfYn.cjs +124 -0
  86. package/dist/publish-SDG1WfYn.cjs.map +1 -0
  87. package/dist/{resolve-BMpPd8x3.mjs → resolve-CxDqDmCD.mjs} +3 -3
  88. package/dist/{resolve-BMpPd8x3.mjs.map → resolve-CxDqDmCD.mjs.map} +1 -1
  89. package/dist/{resolve-D043YmW9.cjs → resolve-wG49Woex.cjs} +3 -3
  90. package/dist/{resolve-D043YmW9.cjs.map → resolve-wG49Woex.cjs.map} +1 -1
  91. package/dist/{rollback-CDs_XNb0.mjs → rollback-BQgEdr_p.mjs} +4 -4
  92. package/dist/{rollback-CDs_XNb0.mjs.map → rollback-BQgEdr_p.mjs.map} +1 -1
  93. package/dist/{rollback-CBiYsQ3T.cjs → rollback-Cw-Z0mWn.cjs} +4 -4
  94. package/dist/{rollback-CBiYsQ3T.cjs.map → rollback-Cw-Z0mWn.cjs.map} +1 -1
  95. package/dist/{seeds-BjcO4DDa.mjs → seeds-CIk0l4SC.mjs} +13 -10
  96. package/dist/seeds-CIk0l4SC.mjs.map +1 -0
  97. package/dist/{seeds-DNqRA1aQ.cjs → seeds-Dk8YkLkM.cjs} +18 -15
  98. package/dist/seeds-Dk8YkLkM.cjs.map +1 -0
  99. package/dist/{sniffer-DipSS8r8.cjs → sniffer-2aK7cB2u.cjs} +6 -6
  100. package/dist/{sniffer-DipSS8r8.cjs.map → sniffer-2aK7cB2u.cjs.map} +1 -1
  101. package/dist/{sniffer-b0XPmSyT.mjs → sniffer-CABMO-Bh.mjs} +6 -6
  102. package/dist/{sniffer-b0XPmSyT.mjs.map → sniffer-CABMO-Bh.mjs.map} +1 -1
  103. package/dist/{stage-DrDmZusd.mjs → stage-ClKTHQoM.mjs} +69 -33
  104. package/dist/stage-ClKTHQoM.mjs.map +1 -0
  105. package/dist/{stage-C_y2UovO.cjs → stage-DrCS0vKD.cjs} +79 -32
  106. package/dist/stage-DrCS0vKD.cjs.map +1 -0
  107. package/dist/target/public.cjs +1 -1
  108. package/dist/target/public.mjs +1 -1
  109. package/dist/{terminal-CvRLxz6g.mjs → terminal-CybB-cjk.mjs} +2 -2
  110. package/dist/{terminal-CvRLxz6g.mjs.map → terminal-CybB-cjk.mjs.map} +1 -1
  111. package/package.json +15 -15
  112. package/dist/compose-DN9zySvQ.cjs.map +0 -1
  113. package/dist/compose-Gsd1Nq7R.mjs.map +0 -1
  114. package/dist/seeds-BjcO4DDa.mjs.map +0 -1
  115. package/dist/seeds-DNqRA1aQ.cjs.map +0 -1
  116. package/dist/stage-C_y2UovO.cjs.map +0 -1
  117. package/dist/stage-DrDmZusd.mjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -4,25 +4,25 @@ const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
4
4
  const require_errors = require("./errors-DMC4Umsb.cjs");
5
5
  const require_run = require("./run-fVZ-rLnc.cjs");
6
6
  const require_credentials = require("./credentials-Zqr3QQYB.cjs");
7
- const require_compose = require("./compose-DN9zySvQ.cjs");
7
+ const require_compose = require("./compose-ByIbIrzs.cjs");
8
8
  const require_workspace = require("./workspace-BwqQnool.cjs");
9
- const require_dns = require("./dns-BdETzP10.cjs");
10
- const require_seeds = require("./seeds-DNqRA1aQ.cjs");
9
+ const require_dns = require("./dns-C2TGXUF4.cjs");
10
+ const require_seeds = require("./seeds-Dk8YkLkM.cjs");
11
11
  const require_derive = require("./derive-DAbo49sm.cjs");
12
12
  const require_SubscriberGenerator = require("./SubscriberGenerator-CeH7wbYt.cjs");
13
13
  const require_identity = require("./identity-CbLfgQNT.cjs");
14
14
  const require_EndpointGenerator = require("./EndpointGenerator-BwbYTMtB.cjs");
15
15
  const require_discover = require("./discover-Bsr7HjqJ.cjs");
16
16
  const require_config = require("./config.cjs");
17
- const require_deploy = require("./deploy-CFvq8daZ.cjs");
17
+ const require_deploy = require("./deploy-Dl_NavYE.cjs");
18
18
  const require_openapi = require("./openapi.cjs");
19
19
  const require_appPorts = require("./appPorts-IW-OZmRi.cjs");
20
20
  const require_drivers = require("./drivers-GKaA6ITM.cjs");
21
21
  const require_emit = require("./emit-Dmc1nvdS.cjs");
22
22
  const require_local = require("./local-DNhnkugT.cjs");
23
- const require_sniffer = require("./sniffer-DipSS8r8.cjs");
23
+ const require_sniffer = require("./sniffer-2aK7cB2u.cjs");
24
24
  const require_credentialSchemas = require("./credentialSchemas-D_VUCDUh.cjs");
25
- const require_LocalStateStore = require("./LocalStateStore-Bm8Vmwjb.cjs");
25
+ const require_LocalStateStore = require("./LocalStateStore-AtviUBky.cjs");
26
26
  const require_utils = require("./utils-D2Nk1Nv2.cjs");
27
27
  const require_ready = require("./ready-BMFjxBYA.cjs");
28
28
  let node_path = require("node:path");
@@ -57,7 +57,7 @@ crypto = require_rolldown_runtime.__toESM(crypto, 1);
57
57
  let _geekmidas_constructs_functions = require("@geekmidas/constructs/functions");
58
58
  let _geekmidas_constructs_topic = require("@geekmidas/constructs/topic");
59
59
  //#region package.json
60
- var version = "10.0.0-alpha.110";
60
+ var version = "10.0.0-alpha.112";
61
61
  //#endregion
62
62
  //#region src/prompt.ts
63
63
  /**
@@ -140,7 +140,7 @@ const logger$8 = console;
140
140
  * Validate Dokploy token by making a test API call
141
141
  */
142
142
  async function validateDokployToken(endpoint, token) {
143
- const { DokployApi } = await Promise.resolve().then(() => require("./sniffer-DipSS8r8.cjs")).then((n) => n.dokploy_api_exports);
143
+ const { DokployApi } = await Promise.resolve().then(() => require("./sniffer-2aK7cB2u.cjs")).then((n) => n.dokploy_api_exports);
144
144
  return new DokployApi({
145
145
  baseUrl: endpoint,
146
146
  token
@@ -2180,7 +2180,7 @@ async function execCommand(commandArgs, options = {}, stageDeps) {
2180
2180
  const cwd = options.cwd ?? process.cwd();
2181
2181
  if (!commandArgs[0]) throw new NoCommandSpecified();
2182
2182
  if (options.stage && !require_seeds.isImageBuild()) {
2183
- const { execOnStage } = await Promise.resolve().then(() => require("./stage-C_y2UovO.cjs"));
2183
+ const { execOnStage } = await Promise.resolve().then(() => require("./stage-DrCS0vKD.cjs")).then((n) => n.stage_exports);
2184
2184
  const { loadWorkspaceConfig } = await Promise.resolve().then(() => require("./config.cjs"));
2185
2185
  const { workspace } = await loadWorkspaceConfig(cwd);
2186
2186
  if (options.stage !== workspace.stages.local) {
@@ -2753,9 +2753,9 @@ async function workspaceDevCommand(configured, options) {
2753
2753
  for (const { id, port } of fakes) logger$5.log(`🎭 ${id} fake: http://localhost:${port}`);
2754
2754
  logger$5.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
2755
2755
  if (options.migrate || options.seed) {
2756
- const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs"));
2756
+ const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs"));
2757
2757
  await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
2758
- } else await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2758
+ } else await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2759
2759
  logger$5.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
2760
2760
  });
2761
2761
  const appUrls = {};
@@ -3831,7 +3831,7 @@ async function buildApp(input) {
3831
3831
  ...production,
3832
3832
  ...telemetry ? { telemetry } : {}
3833
3833
  });
3834
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-B4GDxImV.cjs"));
3834
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-NrtItVBp.cjs"));
3835
3835
  await bundleServer({
3836
3836
  entryPoint,
3837
3837
  outputDir: (0, node_path.join)(outputDir, "dist"),
@@ -4030,7 +4030,7 @@ async function buildWorkers(input) {
4030
4030
  });
4031
4031
  logger$4.log(`Generated worker ${worker.id}: ${crons.length} crons, ${queues.length} queues, ${subscribers.length} subscribers`);
4032
4032
  if (!input.bundle) continue;
4033
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-B4GDxImV.cjs"));
4033
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-NrtItVBp.cjs"));
4034
4034
  const outfile = require_seeds.workerBundleName(worker.id);
4035
4035
  await bundleServer({
4036
4036
  entryPoint,
@@ -4116,7 +4116,7 @@ async function buildForTarget(target, context, appRoot, workspaceRoot, endpointG
4116
4116
  let masterKey;
4117
4117
  if (context.production?.bundle && !skipBundle) {
4118
4118
  logger$4.log(`\n📦 Bundling production server...`);
4119
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-B4GDxImV.cjs"));
4119
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-NrtItVBp.cjs"));
4120
4120
  const allConstructs = [
4121
4121
  ...endpoints.map((e) => e.construct),
4122
4122
  ...functions.map((f) => f.construct),
@@ -5949,25 +5949,25 @@ function loadPackageJson() {
5949
5949
  * Run: pnpm --filter @geekmidas/cli sync-versions
5950
5950
  */
5951
5951
  const GEEKMIDAS_VERSIONS = {
5952
- "@geekmidas/audit": "~10.0.0-alpha.110",
5953
- "@geekmidas/auth": "~10.0.0-alpha.110",
5954
- "@geekmidas/cache": "~10.0.0-alpha.110",
5955
- "@geekmidas/client": "~10.0.0-alpha.110",
5956
- "@geekmidas/cloud": "~10.0.0-alpha.110",
5957
- "@geekmidas/constructs": "~10.0.0-alpha.110",
5958
- "@geekmidas/db": "~10.0.0-alpha.110",
5959
- "@geekmidas/emailkit": "~10.0.0-alpha.110",
5960
- "@geekmidas/envkit": "~10.0.0-alpha.110",
5961
- "@geekmidas/errors": "~10.0.0-alpha.110",
5962
- "@geekmidas/events": "~10.0.0-alpha.110",
5963
- "@geekmidas/logger": "~10.0.0-alpha.110",
5964
- "@geekmidas/manifest": "~10.0.0-alpha.110",
5965
- "@geekmidas/rate-limit": "~10.0.0-alpha.110",
5966
- "@geekmidas/schema": "~10.0.0-alpha.110",
5967
- "@geekmidas/services": "~10.0.0-alpha.110",
5968
- "@geekmidas/storage": "~10.0.0-alpha.110",
5969
- "@geekmidas/telescope": "~10.0.0-alpha.110",
5970
- "@geekmidas/testkit": "~10.0.0-alpha.110",
5952
+ "@geekmidas/audit": "~10.0.0-alpha.112",
5953
+ "@geekmidas/auth": "~10.0.0-alpha.112",
5954
+ "@geekmidas/cache": "~10.0.0-alpha.112",
5955
+ "@geekmidas/client": "~10.0.0-alpha.112",
5956
+ "@geekmidas/cloud": "~10.0.0-alpha.112",
5957
+ "@geekmidas/constructs": "~10.0.0-alpha.112",
5958
+ "@geekmidas/db": "~10.0.0-alpha.112",
5959
+ "@geekmidas/emailkit": "~10.0.0-alpha.112",
5960
+ "@geekmidas/envkit": "~10.0.0-alpha.112",
5961
+ "@geekmidas/errors": "~10.0.0-alpha.112",
5962
+ "@geekmidas/events": "~10.0.0-alpha.112",
5963
+ "@geekmidas/logger": "~10.0.0-alpha.112",
5964
+ "@geekmidas/manifest": "~10.0.0-alpha.112",
5965
+ "@geekmidas/rate-limit": "~10.0.0-alpha.112",
5966
+ "@geekmidas/schema": "~10.0.0-alpha.112",
5967
+ "@geekmidas/services": "~10.0.0-alpha.112",
5968
+ "@geekmidas/storage": "~10.0.0-alpha.112",
5969
+ "@geekmidas/telescope": "~10.0.0-alpha.112",
5970
+ "@geekmidas/testkit": "~10.0.0-alpha.112",
5971
5971
  "@geekmidas/cli": `~${loadPackageJson().version}`
5972
5972
  };
5973
5973
  //#endregion
@@ -7160,7 +7160,7 @@ const COMMIT = /^[0-9a-f]{40}$/;
7160
7160
  * The `uses:` value for the stages action, with a comment saying which CLI
7161
7161
  * release the pinned commit is.
7162
7162
  */
7163
- function stagesActionUses(commit = "1175be1a09457cf9cf3bfb9add2c61969c829df8", version = cliVersion()) {
7163
+ function stagesActionUses(commit = "4f82632d8355cb858b895c3caf36228e040d39b0", version = cliVersion()) {
7164
7164
  return commit && COMMIT.test(commit) ? `${STAGES_ACTION}@${commit} # @geekmidas/cli ${version}` : `${STAGES_ACTION}@main # pin to a commit SHA: see the action's README`;
7165
7165
  }
7166
7166
  //#endregion
@@ -7764,6 +7764,133 @@ function generateGithubFiles(options) {
7764
7764
  return files;
7765
7765
  }
7766
7766
  //#endregion
7767
+ //#region src/mobile/easWorkflow.ts
7768
+ /**
7769
+ * A stage's EAS workflow (`.eas/workflows/publish-<stage>.yml`): what
7770
+ * `gkm publish` does, run by EAS itself — so shipping the app needs no CI
7771
+ * of the project's own, no runner and no token in GitHub.
7772
+ *
7773
+ * Per platform: the native code's fingerprint, read with the stage's EAS
7774
+ * environment; a finished store build of the stage's profile with that
7775
+ * fingerprint; then an update on the stage's channel when there is one, or
7776
+ * a store build, submitted with the stage's submit profile, when there is
7777
+ * not. iOS is submitted once `submit.<stage>.ios.ascAppId` is set — until
7778
+ * then it is built and not submitted.
7779
+ *
7780
+ * It runs when the stage is deployed: the protected stage on a release tag
7781
+ * (`v*`), every other deployed stage on a push to `main` — and on demand,
7782
+ * `eas workflow:run .eas/workflows/publish-<stage>.yml`. The values a build
7783
+ * reads are the stage's EAS environment, which `gkm eas:sync` keeps.
7784
+ *
7785
+ * Generated: written by `gkm eas:sync`, and overwritten by the next one.
7786
+ */
7787
+ /** Where a stage's workflow is written, relative to the app. */
7788
+ function easWorkflowPath(stage) {
7789
+ return `.eas/workflows/publish-${stage}.yml`;
7790
+ }
7791
+ /** The stage's EAS workflow, as YAML. */
7792
+ function easWorkflow(stage, options) {
7793
+ const profile = stage.stage;
7794
+ const jobs = { fingerprint: {
7795
+ name: "Fingerprint",
7796
+ type: "fingerprint",
7797
+ environment: stage.environment
7798
+ } };
7799
+ for (const platform of ["android", "ios"]) {
7800
+ const existing = `get_${platform}_build`;
7801
+ const build = `build_${platform}`;
7802
+ const name = platform === "ios" ? "iOS" : "Android";
7803
+ jobs[existing] = {
7804
+ name: `Find an ${name} store build with this native code`,
7805
+ needs: ["fingerprint"],
7806
+ type: "get-build",
7807
+ params: {
7808
+ fingerprint_hash: `\${{ needs.fingerprint.outputs.${platform}_fingerprint_hash }}`,
7809
+ profile,
7810
+ platform,
7811
+ distribution: "store"
7812
+ }
7813
+ };
7814
+ jobs[build] = {
7815
+ name: `Build ${name}`,
7816
+ needs: [existing],
7817
+ if: `\${{ !needs.${existing}.outputs.build_id }}`,
7818
+ type: "build",
7819
+ params: {
7820
+ platform,
7821
+ profile
7822
+ }
7823
+ };
7824
+ if (platform === "android" || options.iosSubmits) jobs[`submit_${platform}`] = {
7825
+ name: `Submit ${name}`,
7826
+ needs: [build],
7827
+ type: "submit",
7828
+ params: {
7829
+ build_id: `\${{ needs.${build}.outputs.build_id }}`,
7830
+ profile
7831
+ }
7832
+ };
7833
+ jobs[`update_${platform}`] = {
7834
+ name: `Update ${name} on '${stage.channel}'`,
7835
+ needs: [existing],
7836
+ if: `\${{ needs.${existing}.outputs.build_id }}`,
7837
+ type: "update",
7838
+ environment: stage.environment,
7839
+ params: {
7840
+ platform,
7841
+ channel: stage.channel
7842
+ }
7843
+ };
7844
+ }
7845
+ return `${[
7846
+ `# Generated by \`gkm eas:sync --stage ${stage.stage}\`: run it again rather than`,
7847
+ "# editing this file. An update when a store build has this native code,",
7848
+ `# a store build submitted to the stores when none does. Run by hand:`,
7849
+ `# eas workflow:run ${easWorkflowPath(stage.stage)}`,
7850
+ ""
7851
+ ].join("\n")}${(0, yaml.stringify)({
7852
+ name: `Publish to ${stage.stage}`,
7853
+ on: options.release ? { push: { tags: ["v*"] } } : { push: { branches: ["main"] } },
7854
+ jobs
7855
+ }, { lineWidth: 0 })}`;
7856
+ }
7857
+ //#endregion
7858
+ //#region src/mobile/stage.ts
7859
+ /** A `MobileApp`'s `stages` names a stage the project does not deploy. */
7860
+ var MobileAppStageUndeclared = class extends require_errors.GkmError {
7861
+ app;
7862
+ stage;
7863
+ deployed;
7864
+ constructor(app, stage, deployed) {
7865
+ super(`'${app}' says how the stage '${stage}' ships it, and '${stage}' is not a deployed stage (gkm.config.ts deploys ${deployed.join(", ") || "nothing"}). Rename it in the MobileApp's stages, or add it to stages.deployed.`);
7866
+ this.app = app;
7867
+ this.stage = stage;
7868
+ this.deployed = deployed;
7869
+ this.name = "MobileAppStageUndeclared";
7870
+ }
7871
+ };
7872
+ /**
7873
+ * `stage`'s way of shipping `app`.
7874
+ *
7875
+ * @throws {MobileAppStageUndeclared} when the app's `stages` names a stage
7876
+ * the workspace does not deploy
7877
+ */
7878
+ function mobileStage(workspace, app, stage) {
7879
+ const { deployed } = workspace.stages;
7880
+ for (const named of Object.keys(app.stages ?? {})) if (!deployed.includes(named)) throw new MobileAppStageUndeclared(app.id, named, deployed);
7881
+ const users = workspace.stages.protected?.includes(stage) ?? false;
7882
+ const given = app.stages?.[stage];
7883
+ return {
7884
+ stage,
7885
+ environment: given?.environment ?? (users ? "production" : "preview"),
7886
+ channel: stage,
7887
+ android: {
7888
+ track: given?.android?.track ?? (users ? "production" : "internal"),
7889
+ releaseStatus: given?.android?.releaseStatus ?? "draft"
7890
+ }
7891
+ };
7892
+ }
7893
+ //#endregion
7767
7894
  //#region src/init/generators/mobile-expo.ts
7768
7895
  /**
7769
7896
  * The fullstack template's mobile app, when it has one (`mobileApp`).
@@ -7903,6 +8030,14 @@ export default function expoConfig({ config: base }: ConfigContext): ExpoConfig
7903
8030
  };
7904
8031
  }
7905
8032
  `;
8033
+ const mobile = {
8034
+ kind: "mobile-app",
8035
+ id: "App",
8036
+ variant: "expo",
8037
+ app: { path: "apps/app" },
8038
+ dependencies: []
8039
+ };
8040
+ const stages = options.stages.deployed.map((stage) => mobileStage({ stages: options.stages }, mobile, stage));
7906
8041
  const easJson = {
7907
8042
  cli: {
7908
8043
  version: ">= 10.2.1",
@@ -7914,25 +8049,16 @@ export default function expoConfig({ config: base }: ConfigContext): ExpoConfig
7914
8049
  distribution: "internal",
7915
8050
  environment: "development"
7916
8051
  },
7917
- preview: {
7918
- distribution: "internal",
7919
- environment: "preview",
7920
- env: {
7921
- APP_SCHEME: scheme,
7922
- EXPO_PUBLIC_API_URL: "https://api.example.com",
7923
- EXPO_PUBLIC_AUTH_URL: "https://auth.example.com"
7924
- }
7925
- },
7926
- production: {
8052
+ ...Object.fromEntries(stages.map((stage) => [stage.stage, {
7927
8053
  autoIncrement: true,
7928
- environment: "production",
7929
- env: {
7930
- APP_SCHEME: scheme,
7931
- EXPO_PUBLIC_API_URL: "https://api.example.com",
7932
- EXPO_PUBLIC_AUTH_URL: "https://auth.example.com"
7933
- }
7934
- }
7935
- }
8054
+ environment: stage.environment,
8055
+ channel: stage.channel
8056
+ }]))
8057
+ },
8058
+ submit: Object.fromEntries(stages.map((stage) => [stage.stage, { android: {
8059
+ track: stage.android.track,
8060
+ releaseStatus: stage.android.releaseStatus
8061
+ } }]))
7936
8062
  };
7937
8063
  const babelConfig = `module.exports = function (api) {
7938
8064
  api.cache(true);
@@ -8647,6 +8773,35 @@ export default function SigningInScreen() {
8647
8773
  </SafeAreaView>
8648
8774
  );
8649
8775
  }
8776
+ `;
8777
+ const appConstructTs = `import { MobileApp } from '@geekmidas/constructs/mobile-app';
8778
+ import { api } from './api.ts';
8779
+ import { auth } from './auth.ts';
8780
+ import { email } from './email.ts';
8781
+
8782
+ /**
8783
+ * The mobile app — a construct like a site, which is what makes it an app.
8784
+ *
8785
+ * \`.dependsOn()\` is the single fact behind what a mobile app otherwise has
8786
+ * written down by hand: its API and auth URLs, its URL scheme, the scheme in
8787
+ * the auth server's trusted origins, Better Auth's Expo plugin, sign-in links
8788
+ * a phone can open — and, on a local stage, the mailer's inbox, so a link sent
8789
+ * in development is read on the device.
8790
+ */
8791
+ export const app = new MobileApp('App', { path: 'apps/app' }).dependsOn([
8792
+ api,
8793
+ auth,
8794
+ email,
8795
+ ]);
8796
+ `;
8797
+ const gitignore = `node_modules/
8798
+ .expo/
8799
+ dist/
8800
+ *.log
8801
+ .env*.local
8802
+ ios/
8803
+ android/
8804
+ .eas/
8650
8805
  `;
8651
8806
  return [
8652
8807
  {
@@ -8661,6 +8816,13 @@ export default function SigningInScreen() {
8661
8816
  path: "apps/app/eas.json",
8662
8817
  content: `${JSON.stringify(easJson, null, 2)}\n`
8663
8818
  },
8819
+ ...stages.map((stage) => ({
8820
+ path: `apps/app/${easWorkflowPath(stage.stage)}`,
8821
+ content: easWorkflow(stage, {
8822
+ release: options.stages.protected?.includes(stage.stage) ?? false,
8823
+ iosSubmits: false
8824
+ })
8825
+ })),
8664
8826
  {
8665
8827
  path: "apps/app/babel.config.js",
8666
8828
  content: babelConfig
@@ -8751,38 +8913,11 @@ export default function SigningInScreen() {
8751
8913
  },
8752
8914
  {
8753
8915
  path: "apps/app/.gitignore",
8754
- content: `node_modules/
8755
- .expo/
8756
- dist/
8757
- *.log
8758
- .env*.local
8759
- ios/
8760
- android/
8761
- .eas/
8762
- `
8916
+ content: gitignore
8763
8917
  },
8764
8918
  {
8765
8919
  path: "constructs/app.ts",
8766
- content: `import { MobileApp } from '@geekmidas/constructs/mobile-app';
8767
- import { api } from './api.ts';
8768
- import { auth } from './auth.ts';
8769
- import { email } from './email.ts';
8770
-
8771
- /**
8772
- * The mobile app — a construct like a site, which is what makes it an app.
8773
- *
8774
- * \`.dependsOn()\` is the single fact behind what a mobile app otherwise has
8775
- * written down by hand: its API and auth URLs, its URL scheme, the scheme in
8776
- * the auth server's trusted origins, Better Auth's Expo plugin, sign-in links
8777
- * a phone can open — and, on a local stage, the mailer's inbox, so a link sent
8778
- * in development is read on the device.
8779
- */
8780
- export const app = new MobileApp('App', { path: 'apps/app' }).dependsOn([
8781
- api,
8782
- auth,
8783
- email,
8784
- ]);
8785
- `
8920
+ content: appConstructTs
8786
8921
  }
8787
8922
  ];
8788
8923
  }
@@ -15860,7 +15995,7 @@ function testDatabases(reconciled) {
15860
15995
  * starts without the reference data the app needs.
15861
15996
  */
15862
15997
  async function migrateTestStage(workspace, env) {
15863
- const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs"));
15998
+ const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs"));
15864
15999
  const { discover } = await Promise.resolve().then(() => require("./discover-Bsr7HjqJ.cjs")).then((n) => n.discover_exports);
15865
16000
  const sources = {};
15866
16001
  const manifest = await discover({
@@ -16280,6 +16415,42 @@ program.command("exec").description("Run a command with secrets injected into Cr
16280
16415
  exitWithError(error);
16281
16416
  }
16282
16417
  });
16418
+ program.command("eas:sync").description("Set up a mobile app's EAS project for a deployed stage: its eas.json profiles, and its public values in the stage's EAS environment").requiredOption("--stage <stage>", "A deployed compose stage").option("--app <app>", "The mobile app (default: the one here, or the only one)").option("--profile <profile>", "AWS profile for the stage's account").option("--dry-run", "Say what would be written, and write nothing").action(async (options) => {
16419
+ try {
16420
+ const globalOptions = program.opts();
16421
+ if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16422
+ const { easSync } = await Promise.resolve().then(() => require("./eas-Cne743nQ.cjs"));
16423
+ await easSync(options);
16424
+ } catch (error) {
16425
+ exitWithError(error);
16426
+ }
16427
+ });
16428
+ program.command("publish").description("Ship a mobile app for a deployed stage: sync its EAS project, then an update when a store build has its native code, a store build submitted to the stores when none does").requiredOption("--stage <stage>", "A deployed compose stage").option("--app <app>", "The mobile app (default: the one here, or the only one)").option("--platform <platform>", "ios, android or all", "all").option("--build", "A store build, whatever the fingerprint says").option("--update", "An update, whatever the fingerprint says").option("--wait", "Wait for a build to finish, and submit, on EAS").option("--message <message>", "An update's message (default: the commit's subject)").option("--profile <profile>", "AWS profile for the stage's account").option("--dry-run", "Say what would be released, and release nothing").action(async (options) => {
16429
+ try {
16430
+ const globalOptions = program.opts();
16431
+ if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16432
+ const { publish, PublishModeConflict } = await Promise.resolve().then(() => require("./publish-SDG1WfYn.cjs"));
16433
+ if (options.build && options.update) throw new PublishModeConflict();
16434
+ const { build, update, ...rest } = options;
16435
+ await publish({
16436
+ ...rest,
16437
+ ...build ? { mode: "build" } : {},
16438
+ ...update ? { mode: "update" } : {}
16439
+ });
16440
+ } catch (error) {
16441
+ exitWithError(error);
16442
+ }
16443
+ });
16444
+ program.command("deploy:google-play").description("Let EAS Submit publish a mobile app to Google Play: a service account with a grant on the app alone, its key in EAS, each stage's track in eas.json, and the store listing from store/play/").option("--developer <id>", "The Play developer account (the number in Play Console's address)").option("--app <app>", "The mobile app (default: the one here, or the only one)").option("--project <project>", "The Google Cloud project (default: <workspace>-play, created when absent)").option("--stage <stage>", "The stage whose values evaluate the app's Expo config (default: the protected one)").option("--profile <profile>", "AWS profile for that stage's account").action(async (options) => {
16445
+ try {
16446
+ const globalOptions = program.opts();
16447
+ if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16448
+ const { deployGooglePlay } = await Promise.resolve().then(() => require("./googlePlay-B6uiHi65.cjs"));
16449
+ await deployGooglePlay(options);
16450
+ } catch (error) {
16451
+ exitWithError(error);
16452
+ }
16453
+ });
16283
16454
  program.command("test").description("Run tests with secrets loaded from environment").option("--stage <stage>", "Stage to load secrets from (default: stages.local)").option("--run", "Run tests once without watch mode").option("--watch", "Enable watch mode").option("--coverage", "Generate coverage report").option("--ui", "Open Vitest UI").option("--auto-setup", "Generate a fresh stage (secrets + key) from the workspace config when none exists (for CI; also via GKM_AUTO_SETUP)").option("--prepare", "Write the test manifest and #test harness, then stop — for a typecheck that runs before the suite").option("--setup", "Reconcile, migrate and seed the test stage and write the harness, then stop — what @geekmidas/cli/vitest runs").option("--teardown", "Drop the test stage's databases the last setup created, then stop — what @geekmidas/cli/vitest runs when the suite ends").argument("[pattern]", "Pattern to filter tests").action(async (pattern, options) => {
16284
16455
  try {
16285
16456
  const globalOptions = program.opts();
@@ -16296,7 +16467,7 @@ program.command("migrate").description("Apply each database construct's migratio
16296
16467
  try {
16297
16468
  const globalOptions = program.opts();
16298
16469
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16299
- const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs"));
16470
+ const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs"));
16300
16471
  await migrateCommand({
16301
16472
  ...options,
16302
16473
  ...construct ? { construct } : {}
@@ -16309,7 +16480,7 @@ program.command("seed").description("Migrate, then run each database construct's
16309
16480
  try {
16310
16481
  const globalOptions = program.opts();
16311
16482
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16312
- const { seedCommand } = await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs"));
16483
+ const { seedCommand } = await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs"));
16313
16484
  await seedCommand({
16314
16485
  ...options,
16315
16486
  ...construct ? { construct } : {}
@@ -16322,7 +16493,7 @@ program.command("migration").description("Write a construct's next migration: an
16322
16493
  try {
16323
16494
  const globalOptions = program.opts();
16324
16495
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16325
- const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-CTqhWtev.cjs"));
16496
+ const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-bDQzFvBN.cjs"));
16326
16497
  await migrationCommand({
16327
16498
  construct,
16328
16499
  ...name ? { name } : {}
@@ -16422,7 +16593,7 @@ program.command("secrets:add").description("Build the keys a stage must be given
16422
16593
  try {
16423
16594
  const globalOptions = program.opts();
16424
16595
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16425
- const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-Cdg1kEqN.cjs"));
16596
+ const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-Cs8yT5iH.cjs"));
16426
16597
  await secretsAddCommand(options);
16427
16598
  } catch (error) {
16428
16599
  exitWithError(error);
@@ -16432,7 +16603,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
16432
16603
  try {
16433
16604
  const globalOptions = program.opts();
16434
16605
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16435
- const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-DVCxD-gV.cjs"));
16606
+ const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-DoVnVU82.cjs"));
16436
16607
  await encryptionRotateCommand(construct, options);
16437
16608
  } catch (error) {
16438
16609
  exitWithError(error);
@@ -16442,7 +16613,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
16442
16613
  try {
16443
16614
  const globalOptions = program.opts();
16444
16615
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16445
- const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-DVCxD-gV.cjs"));
16616
+ const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-DoVnVU82.cjs"));
16446
16617
  await encryptionRetireCommand(construct, key, options);
16447
16618
  } catch (error) {
16448
16619
  exitWithError(error);
@@ -16481,7 +16652,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
16481
16652
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16482
16653
  const { loadWorkspaceConfig } = await Promise.resolve().then(() => require("./config.cjs"));
16483
16654
  const { reconcileMissingSecrets } = await Promise.resolve().then(() => require("./reconcile-CuCQBa5-.cjs"));
16484
- const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-DNqRA1aQ.cjs")).then((n) => n.store_exports);
16655
+ const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-Dk8YkLkM.cjs")).then((n) => n.store_exports);
16485
16656
  const { workspace } = await loadWorkspaceConfig();
16486
16657
  const stage = options.stage ?? workspace.stages.local;
16487
16658
  const store = await secretsStoreFor(workspace, stage);
@@ -16490,7 +16661,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
16490
16661
  console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
16491
16662
  process.exit(1);
16492
16663
  }
16493
- const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-DNqRA1aQ.cjs")).then((n) => n.workspace_exports);
16664
+ const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-Dk8YkLkM.cjs")).then((n) => n.workspace_exports);
16494
16665
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
16495
16666
  if (!result) {
16496
16667
  console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
@@ -16507,14 +16678,14 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
16507
16678
  try {
16508
16679
  const globalOptions = program.opts();
16509
16680
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16510
- const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-Df81ew0k.cjs"));
16681
+ const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-GLBZlrlJ.cjs"));
16511
16682
  await secretsMigrateCommand(options);
16512
16683
  } catch (error) {
16513
16684
  exitWithError(error);
16514
16685
  }
16515
16686
  });
16516
16687
  program.command("deploy").description("Deploy a stage through its target").option("--target <name>", "Deploy target: dokploy, compose, sst, or one named in deploy.targets (default: deploy.default)").option("--provider <provider>", "[DEPRECATED] Use --target instead").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").option("--tag <tag>", "Image tag (default: stage-timestamp; compose: the commit). Compose pulls a given tag").option("--skip-push", "Skip pushing image to registry").option("--skip-build", "Skip build step (use existing build)").option("--json", "Write events as JSON lines instead of progress; never prompts").option("--dry-run", "Show what would be created or reused; change, build and push nothing").option("--atomic", "If the release fails, roll back every app it released, not only the failed ones").option("--allow-dev-services", "Server targets: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").option("--skip-dns", "Compose: neither write the public hosts' DNS records nor check they point at GKM_SERVER_IPV4 (a CDN or proxy in front, or records written elsewhere)").option("--rotate-keys", "Deployed stage: each provider issues its runtime keys a successor (the old one is deleted by the next deploy)").option("--retire-old-keys", "Deployed stage: delete a rotated-out key now instead of on the next deploy").action(async (options) => {
16517
- const { deployCli } = await Promise.resolve().then(() => require("./cli-BZYz55tO.cjs"));
16688
+ const { deployCli } = await Promise.resolve().then(() => require("./cli-CHzpFBh-.cjs"));
16518
16689
  const globalOptions = program.opts();
16519
16690
  const code = await deployCli({
16520
16691
  cwd: (0, node_path.resolve)(globalOptions.cwd ?? process.cwd()),
@@ -16534,7 +16705,7 @@ program.command("deploy").description("Deploy a stage through its target").optio
16534
16705
  });
16535
16706
  program.command("deploy:rollback").description("Put a stage's app back on its previous release (Dokploy): one app with --app, every app with --atomic").requiredOption("--stage <stage>", "A deployed stage").option("--app <app>", "The app to roll back").option("--atomic", "Roll back every app that has an earlier release").action(async (options) => {
16536
16707
  try {
16537
- const { rollbackStage } = await Promise.resolve().then(() => require("./rollback-CBiYsQ3T.cjs")).then((n) => n.rollback_exports);
16708
+ const { rollbackStage } = await Promise.resolve().then(() => require("./rollback-Cw-Z0mWn.cjs")).then((n) => n.rollback_exports);
16538
16709
  const { terminalCredentials } = await Promise.resolve().then(() => require("./terminal-D_NRPW4W.cjs"));
16539
16710
  const globalOptions = program.opts();
16540
16711
  await rollbackStage({
@@ -16568,7 +16739,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
16568
16739
  try {
16569
16740
  const globalOptions = program.opts();
16570
16741
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
16571
- const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-D902Vwr9.cjs"));
16742
+ const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-DDOHjdS9.cjs"));
16572
16743
  await deployGithubCommand(options);
16573
16744
  } catch (error) {
16574
16745
  exitWithError(error);
@@ -16748,8 +16919,11 @@ try {
16748
16919
  program.parse();
16749
16920
  //#endregion
16750
16921
  exports.canPrompt = canPrompt;
16922
+ exports.easWorkflow = easWorkflow;
16923
+ exports.easWorkflowPath = easWorkflowPath;
16751
16924
  exports.formatError = formatError;
16752
16925
  exports.generateFullstackCustomSecrets = generateFullstackCustomSecrets;
16926
+ exports.mobileStage = mobileStage;
16753
16927
  exports.prompt = prompt;
16754
16928
  exports.slug = slug;
16755
16929
  exports.stamp = stamp;