@geekmidas/cli 10.0.0-alpha.70 → 10.0.0-alpha.72

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 (81) hide show
  1. package/dist/{OpenApiTsGenerator-CpRWM0N6.cjs → OpenApiTsGenerator-BlP53kf2.cjs} +18 -630
  2. package/dist/OpenApiTsGenerator-BlP53kf2.cjs.map +1 -0
  3. package/dist/{OpenApiTsGenerator-BYD9EcJi.mjs → OpenApiTsGenerator-Dv0gT2DL.mjs} +18 -630
  4. package/dist/OpenApiTsGenerator-Dv0gT2DL.mjs.map +1 -0
  5. package/dist/{add-DHIk61nK.cjs → add-DeC2Kyyv.cjs} +2 -2
  6. package/dist/{add-DHIk61nK.cjs.map → add-DeC2Kyyv.cjs.map} +1 -1
  7. package/dist/{add-BuviRszv.mjs → add-XTLU19_E.mjs} +2 -2
  8. package/dist/{add-BuviRszv.mjs.map → add-XTLU19_E.mjs.map} +1 -1
  9. package/dist/{bundler-D7dcJVgj.cjs → bundler-CEaR6Dpb.cjs} +6 -6
  10. package/dist/bundler-CEaR6Dpb.cjs.map +1 -0
  11. package/dist/{bundler-DJlsYzm7.mjs → bundler-CNTVLCCA.mjs} +6 -6
  12. package/dist/bundler-CNTVLCCA.mjs.map +1 -0
  13. package/dist/{cli-BjnqVnE6.mjs → cli-D1arS0p1.mjs} +3 -3
  14. package/dist/{cli-BjnqVnE6.mjs.map → cli-D1arS0p1.mjs.map} +1 -1
  15. package/dist/{cli-7zCum6uN.cjs → cli-MMgBrHx7.cjs} +3 -3
  16. package/dist/{cli-7zCum6uN.cjs.map → cli-MMgBrHx7.cjs.map} +1 -1
  17. package/dist/{compose-BJYHmuvx.cjs → compose-B-MME-4C.cjs} +2 -2
  18. package/dist/{compose-BJYHmuvx.cjs.map → compose-B-MME-4C.cjs.map} +1 -1
  19. package/dist/{compose-CByVaaeR.mjs → compose-T3hnnjKZ.mjs} +2 -2
  20. package/dist/{compose-CByVaaeR.mjs.map → compose-T3hnnjKZ.mjs.map} +1 -1
  21. package/dist/deploy/public.cjs +5 -5
  22. package/dist/deploy/public.mjs +5 -5
  23. package/dist/{deploy--ZU9gOOa.cjs → deploy-CZE0m6jd.cjs} +3 -3
  24. package/dist/{deploy--ZU9gOOa.cjs.map → deploy-CZE0m6jd.cjs.map} +1 -1
  25. package/dist/{deploy-CCSGr7be.mjs → deploy-ClC53rc6.mjs} +3 -3
  26. package/dist/{deploy-CCSGr7be.mjs.map → deploy-ClC53rc6.mjs.map} +1 -1
  27. package/dist/{dokploy-Bskfn1g5.mjs → dokploy-D1UwQKm3.mjs} +2 -2
  28. package/dist/{dokploy-Bskfn1g5.mjs.map → dokploy-D1UwQKm3.mjs.map} +1 -1
  29. package/dist/{dokploy-BOupc9PK.cjs → dokploy-lwmH05zr.cjs} +2 -2
  30. package/dist/{dokploy-BOupc9PK.cjs.map → dokploy-lwmH05zr.cjs.map} +1 -1
  31. package/dist/{encryption-D-VkoJG4.cjs → encryption-D05sNwED.cjs} +2 -2
  32. package/dist/{encryption-D-VkoJG4.cjs.map → encryption-D05sNwED.cjs.map} +1 -1
  33. package/dist/{encryption-DR-py9GX.mjs → encryption-DcrxWl1s.mjs} +2 -2
  34. package/dist/{encryption-DR-py9GX.mjs.map → encryption-DcrxWl1s.mjs.map} +1 -1
  35. package/dist/{engine-Da8dBxt5.cjs → engine-Cry1vwMz.cjs} +2 -2
  36. package/dist/{engine-Da8dBxt5.cjs.map → engine-Cry1vwMz.cjs.map} +1 -1
  37. package/dist/{engine-Xbv8NNdX.mjs → engine-DmQS3XHX.mjs} +2 -2
  38. package/dist/{engine-Xbv8NNdX.mjs.map → engine-DmQS3XHX.mjs.map} +1 -1
  39. package/dist/{github-DeXzs11c.cjs → github-BchWoiVx.cjs} +2 -2
  40. package/dist/{github-DeXzs11c.cjs.map → github-BchWoiVx.cjs.map} +1 -1
  41. package/dist/{github-D2pYzY7L.mjs → github-CqYOP8cI.mjs} +2 -2
  42. package/dist/{github-D2pYzY7L.mjs.map → github-CqYOP8cI.mjs.map} +1 -1
  43. package/dist/index.cjs +84 -54
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.mjs +84 -54
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/{migrate-DiJT84g9.mjs → migrate-guck0NJK.mjs} +2 -2
  48. package/dist/{migrate-DiJT84g9.mjs.map → migrate-guck0NJK.mjs.map} +1 -1
  49. package/dist/{migrate-BURDS8vy.cjs → migrate-qKeGYq21.cjs} +2 -2
  50. package/dist/{migrate-BURDS8vy.cjs.map → migrate-qKeGYq21.cjs.map} +1 -1
  51. package/dist/openapi.cjs +1 -1
  52. package/dist/openapi.mjs +1 -1
  53. package/dist/{ready-C-qNcux-.cjs → ready-B-7LayMF.cjs} +78 -13
  54. package/dist/ready-B-7LayMF.cjs.map +1 -0
  55. package/dist/{ready-CfIiMts4.mjs → ready-ULc5BTOb.mjs} +73 -14
  56. package/dist/ready-ULc5BTOb.mjs.map +1 -0
  57. package/dist/{resolve-Dj5TQKoD.mjs → resolve-BsXEXAUz.mjs} +3 -3
  58. package/dist/{resolve-Dj5TQKoD.mjs.map → resolve-BsXEXAUz.mjs.map} +1 -1
  59. package/dist/{resolve-B7jJQmTo.cjs → resolve-wEjEvbJ5.cjs} +3 -3
  60. package/dist/{resolve-B7jJQmTo.cjs.map → resolve-wEjEvbJ5.cjs.map} +1 -1
  61. package/dist/{rollback-Bw9kESjz.mjs → rollback-Bk91csFg.mjs} +3 -3
  62. package/dist/{rollback-Bw9kESjz.mjs.map → rollback-Bk91csFg.mjs.map} +1 -1
  63. package/dist/{rollback-DNK1HEHY.cjs → rollback-DmcU-efZ.cjs} +3 -3
  64. package/dist/{rollback-DNK1HEHY.cjs.map → rollback-DmcU-efZ.cjs.map} +1 -1
  65. package/dist/{state-527OmqvN.mjs → state-BJFherj1.mjs} +7 -2
  66. package/dist/state-BJFherj1.mjs.map +1 -0
  67. package/dist/{state-nS6I6s4u.cjs → state-CCuTJNRH.cjs} +7 -2
  68. package/dist/state-CCuTJNRH.cjs.map +1 -0
  69. package/dist/target/public.cjs +1 -1
  70. package/dist/target/public.mjs +1 -1
  71. package/dist/vitest.cjs +1 -1
  72. package/dist/vitest.mjs +1 -1
  73. package/package.json +15 -15
  74. package/dist/OpenApiTsGenerator-BYD9EcJi.mjs.map +0 -1
  75. package/dist/OpenApiTsGenerator-CpRWM0N6.cjs.map +0 -1
  76. package/dist/bundler-D7dcJVgj.cjs.map +0 -1
  77. package/dist/bundler-DJlsYzm7.mjs.map +0 -1
  78. package/dist/ready-C-qNcux-.cjs.map +0 -1
  79. package/dist/ready-CfIiMts4.mjs.map +0 -1
  80. package/dist/state-527OmqvN.mjs.map +0 -1
  81. package/dist/state-nS6I6s4u.cjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -6,15 +6,15 @@ import { l as withOwningTsconfigJsx, r as discover, u as ConstructGenerator } fr
6
6
  import { t as appKey } from "./derive-B4vDpzgP.mjs";
7
7
  import { A as deployedProblems, D as InvalidStages, O as TEST_STAGE, c as getAppGkmConfig, j as stageProblems, n as allConstructGlobs, s as getAppBuildOrder } from "./workspace-C7NqCsQF.mjs";
8
8
  import { ConfigNotFound, NotABackendApp, NotInAnApp, loadAppConfig, loadConfig, loadWorkspaceConfig, loadWorkspaceSettings, parseModuleConfig } from "./config.mjs";
9
- import { At as findAvailablePort, Dt as primaryPortKey, G as constructGlobs, H as keyFingerprint, I as parseDevServices, It as secretsStoreFor, K as derivedContainers, Mt as loadEnvFiles, Nt as loadSecretsForApp, Ot as createCredentialsPreload, Pt as prepareEntryCredentials, Qt as maskPassword, Rt as FileSecretsStore, Tt as fakeKey, U as FAKE_ENV, Vt as projectKey, W as backendsOf$1, Wt as deployIdentity, X as forgetState, Y as LOCAL_CA_PATH, en as toEmbeddableSecrets, jt as isPortAvailable, kt as createEntryWrapper, ot as pgClient, q as reconcileWorkspace, rt as quoteIdentifier, tn as withCustomSecret, tt as postgresDatabaseNames, wt as describeServices, xt as providerOf, y as dockerCommand, yt as cacheBackendFor, zt as getKeyPath } from "./state-527OmqvN.mjs";
10
- import { i as telemetryFor, n as EndpointGenerator, r as runtimeFor } from "./OpenApiTsGenerator-BYD9EcJi.mjs";
9
+ import { At as findAvailablePort, Dt as primaryPortKey, G as constructGlobs, H as keyFingerprint, I as parseDevServices, It as secretsStoreFor, K as derivedContainers, Mt as loadEnvFiles, Nt as loadSecretsForApp, Ot as createCredentialsPreload, Pt as prepareEntryCredentials, Qt as maskPassword, Rt as FileSecretsStore, Tt as fakeKey, U as FAKE_ENV, Vt as projectKey, W as backendsOf$1, Wt as deployIdentity, X as forgetState, Y as LOCAL_CA_PATH, bt as eventsBackendFor, en as toEmbeddableSecrets, jt as isPortAvailable, kt as createEntryWrapper, ot as pgClient, q as reconcileWorkspace, rt as quoteIdentifier, tn as withCustomSecret, tt as postgresDatabaseNames, wt as describeServices, xt as providerOf, y as dockerCommand, yt as cacheBackendFor, zt as getKeyPath } from "./state-BJFherj1.mjs";
10
+ import { i as telemetryFor, n as EndpointGenerator, r as runtimeFor } from "./OpenApiTsGenerator-Dv0gT2DL.mjs";
11
11
  import { g as createStateStore, n as sniffAppEnvironment, o as DokployApi } from "./sniffer-vAXsU_4G.mjs";
12
12
  import { generateOpenApi, openapiCommand, resolveOpenApiConfig } from "./openapi.mjs";
13
13
  import { a as describeHolder, i as assignAppPorts, o as holderOf, r as appTag, s as withAppPorts, t as APP_TAG_ENV } from "./appPorts-C9z9Pzn9.mjs";
14
- import { a as writeTestHarness, c as driversFor, i as TEST_MANIFEST_ENV, n as TEST_READY_FILE, o as SubscriberGenerator, s as cacheBackendsIn, t as TEST_READY_ENV } from "./ready-CfIiMts4.mjs";
14
+ import { a as writeTestHarness, c as driversFor, i as TEST_MANIFEST_ENV, l as eventsBackendsIn, n as TEST_READY_FILE, o as SubscriberGenerator, s as cacheBackendsIn, t as TEST_READY_ENV } from "./ready-ULc5BTOb.mjs";
15
15
  import { n as withCompute, r as withRoutes, t as manifestModule } from "./emit-C1e8qD08.mjs";
16
- import { t as deploy$1 } from "./deploy-CCSGr7be.mjs";
17
- import { a as stackDir, i as composeProject, o as dockerCompose, r as stackOverrideFile, t as composeTarget } from "./compose-CByVaaeR.mjs";
16
+ import { t as deploy$1 } from "./deploy-ClC53rc6.mjs";
17
+ import { a as stackDir, i as composeProject, o as dockerCompose, r as stackOverrideFile, t as composeTarget } from "./compose-T3hnnjKZ.mjs";
18
18
  import { o as loadCredentialSchemas, t as CredentialsInvalid } from "./credentialSchemas-BmYxnEz_.mjs";
19
19
  import { t as LocalStateStore } from "./LocalStateStore-DUoG2wA_.mjs";
20
20
  import { a as getExecCommand, c as validateProjectName, i as findWorkspaceRoot, n as detectPackageManager$1, o as getInstallCommand, r as findWorkspacePackages, s as getRunCommand, t as checkDirectoryExists } from "./utils-D_fxUqvU.mjs";
@@ -47,7 +47,7 @@ import { Function } from "@geekmidas/constructs/functions";
47
47
  import { Queue } from "@geekmidas/constructs/queue";
48
48
  import { Topic } from "@geekmidas/constructs/topic";
49
49
  //#region package.json
50
- var version = "10.0.0-alpha.70";
50
+ var version = "10.0.0-alpha.72";
51
51
  //#endregion
52
52
  //#region src/prompt.ts
53
53
  /**
@@ -1618,8 +1618,7 @@ function normalizeProductionConfig(cliProduction) {
1618
1618
  gracefulShutdown: true,
1619
1619
  external: [],
1620
1620
  subscribers: "include",
1621
- openapi: false,
1622
- optimizedHandlers: true
1621
+ openapi: false
1623
1622
  };
1624
1623
  }
1625
1624
  /** Read by the generated server: no subscriber is subscribed or polled. */
@@ -1675,6 +1674,7 @@ async function devCommand(options) {
1675
1674
  target: "server",
1676
1675
  enableOpenApi,
1677
1676
  cacheBackend: cacheBackendFor(providerOf(workspace ?? config)),
1677
+ eventsBackend: eventsBackendFor(providerOf(workspace ?? config)),
1678
1678
  telescope,
1679
1679
  databaseApi: true,
1680
1680
  hooks,
@@ -2036,9 +2036,9 @@ async function workspaceDevCommand(configured, options) {
2036
2036
  for (const { id, port } of fakes) logger$5.log(`🎭 ${id} fake: http://localhost:${port}`);
2037
2037
  logger$5.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
2038
2038
  if (options.migrate || options.seed) {
2039
- const { prepareDevDatabases } = await import("./migrate-DiJT84g9.mjs");
2039
+ const { prepareDevDatabases } = await import("./migrate-guck0NJK.mjs");
2040
2040
  await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
2041
- } else await import("./migrate-DiJT84g9.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2041
+ } else await import("./migrate-guck0NJK.mjs").then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2042
2042
  logger$5.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
2043
2043
  });
2044
2044
  const appUrls = {};
@@ -2644,6 +2644,22 @@ var CronGenerator = class extends ConstructGenerator {
2644
2644
  async generateServerCronsFile(outputDir, crons) {
2645
2645
  await mkdir(outputDir, { recursive: true });
2646
2646
  const cronsPath = join(outputDir, "crons.ts");
2647
+ if (crons.length === 0) {
2648
+ await writeFile(cronsPath, `/**
2649
+ * Generated cron setup — this app declares none.
2650
+ */
2651
+ import type { EnvironmentParser } from '@geekmidas/envkit';
2652
+ import type { Logger } from '@geekmidas/logger';
2653
+
2654
+ export async function setupCrons(
2655
+ _envParser: EnvironmentParser<any>,
2656
+ _logger: Logger,
2657
+ ): Promise<void> {}
2658
+
2659
+ export async function stopCrons(): Promise<void> {}
2660
+ `);
2661
+ return cronsPath;
2662
+ }
2647
2663
  const importsByFile = /* @__PURE__ */ new Map();
2648
2664
  for (const { path, key } of crons) {
2649
2665
  const importPath = relative(dirname(cronsPath), path.relative).replace(/\.ts$/, ".js");
@@ -2701,7 +2717,7 @@ export async function setupCrons(
2701
2717
  } catch (error) {
2702
2718
  // An unrepresentable schedule is a build-time mistake, and failing the
2703
2719
  // process for it would take the HTTP server down with it.
2704
- logger.error({ error, cron: name }, 'Cron has no runnable schedule, skipping');
2720
+ logger.error({ err: error, cron: name }, 'Cron has no runnable schedule, skipping');
2705
2721
  }
2706
2722
  }
2707
2723
 
@@ -2712,7 +2728,7 @@ export async function setupCrons(
2712
2728
  // \`handler\` a Cron does not have, so every firing logged a failure.
2713
2729
  await runCron(entry.cron, serviceDiscovery);
2714
2730
  } catch (error) {
2715
- logger.error({ error, cron: entry.name }, 'Cron failed');
2731
+ logger.error({ err: error, cron: entry.name }, 'Cron failed');
2716
2732
  }
2717
2733
  };
2718
2734
 
@@ -2753,8 +2769,13 @@ export async function setupCrons(
2753
2769
  return;
2754
2770
  }
2755
2771
 
2756
- const { PgBossConnection } = await import('@geekmidas/events/pgboss');
2757
- const connection = await PgBossConnection.fromConnectionString(url);
2772
+ // Through the registered pg-boss driver, which the entry registers for a
2773
+ // server whose broker is pg-boss. Naming \`@geekmidas/events/pgboss\` here
2774
+ // made every bundle with a cron resolve pg-boss, whatever its broker.
2775
+ const { EventConnectionFactory } = await import('@geekmidas/events');
2776
+ const connection = (await EventConnectionFactory.fromConnectionString(
2777
+ url,
2778
+ )) as import('@geekmidas/events').EventConnection & { instance?: any };
2758
2779
  const boss = connection.instance!;
2759
2780
 
2760
2781
  // What this app declares now. Anything else under the prefix belonged to a
@@ -2802,8 +2823,9 @@ export async function stopCrons(): Promise<void> {
2802
2823
  const content = `import { AWSScheduledFunction } from '@geekmidas/constructs/aws';
2803
2824
  import { ${exportName} } from '${importPath}';
2804
2825
  ${runtime.imports}
2826
+ ${context.storageDrivers?.imports ?? ""}
2805
2827
  ${runtime.bindings}
2806
-
2828
+ ${context.storageDrivers?.setup ? `\n// The handler registers the drivers its target needs.\n${context.storageDrivers.setup}\n` : ""}
2807
2829
  const adapter = new AWSScheduledFunction(envParser, ${exportName});
2808
2830
 
2809
2831
  export const handler = adapter.handler;
@@ -2847,8 +2869,9 @@ var FunctionGenerator = class extends ConstructGenerator {
2847
2869
  const content = `import { AWSLambdaFunction } from '@geekmidas/constructs/aws';
2848
2870
  import { ${exportName} } from '${importPath}';
2849
2871
  ${runtime.imports}
2872
+ ${context.storageDrivers?.imports ?? ""}
2850
2873
  ${runtime.bindings}
2851
-
2874
+ ${context.storageDrivers?.setup ? `\n// The handler registers the drivers its target needs.\n${context.storageDrivers.setup}\n` : ""}
2852
2875
  const adapter = new AWSLambdaFunction(envParser, ${exportName});
2853
2876
 
2854
2877
  export const handler = adapter.handler;
@@ -2906,8 +2929,9 @@ var QueueGenerator = class extends ConstructGenerator {
2906
2929
  const content = `import { AWSLambdaQueue } from '@geekmidas/constructs/aws';
2907
2930
  import { ${exportName} } from '${importPath}';
2908
2931
  ${runtime.imports}
2932
+ ${context.storageDrivers?.imports ?? ""}
2909
2933
  ${runtime.bindings}
2910
-
2934
+ ${context.storageDrivers?.setup ? `\n// The handler registers the drivers its target needs.\n${context.storageDrivers.setup}\n` : ""}
2911
2935
  const adapter = new AWSLambdaQueue(envParser, ${exportName});
2912
2936
 
2913
2937
  export const handler = adapter.handler;
@@ -3006,14 +3030,14 @@ export async function setupQueues(
3006
3030
  db,
3007
3031
  } as any);
3008
3032
  } catch (error) {
3009
- logger.error({ error, queue: queue.name }, 'Failed to process queue message');
3033
+ logger.error({ err: error, queue: queue.name }, 'Failed to process queue message');
3010
3034
  // Rethrown so the transport keeps the message for a retry.
3011
3035
  throw error;
3012
3036
  }
3013
3037
  });
3014
3038
  logger.info({ queue: queue.name }, 'Queue consumer started polling');
3015
3039
  } catch (error) {
3016
- logger.error({ error, queue: queue.name }, 'Failed to set up queue consumer');
3040
+ logger.error({ err: error, queue: queue.name }, 'Failed to set up queue consumer');
3017
3041
  }
3018
3042
  }
3019
3043
 
@@ -3337,6 +3361,7 @@ function backendsOf(workspace) {
3337
3361
  async function buildOneApp(input) {
3338
3362
  const { config, options, workspace, appRoot, target } = input;
3339
3363
  const cacheBackend = cacheBackendFor(providerOf(workspace));
3364
+ const eventsBackend = eventsBackendFor(providerOf(workspace));
3340
3365
  const production = normalizeProductionConfig(options.production ?? false);
3341
3366
  if (production) logger$4.log(`🏭 Building for PRODUCTION`);
3342
3367
  logger$4.log(`Building for ${target}`);
@@ -3352,6 +3377,7 @@ async function buildOneApp(input) {
3352
3377
  target,
3353
3378
  enableOpenApi: options.enableOpenApi ?? false,
3354
3379
  cacheBackend,
3380
+ eventsBackend,
3355
3381
  production,
3356
3382
  telescope,
3357
3383
  hooks,
@@ -3397,7 +3423,7 @@ async function writeManifest(input) {
3397
3423
  * dev did not, and failed on exactly the apps the build had learned to handle.
3398
3424
  */
3399
3425
  async function buildApp(input) {
3400
- const { config, workspaceRoot, appRoot, target, enableOpenApi, cacheBackend, production, telescope, databaseApi, hooks, bustCache = false } = input;
3426
+ const { config, workspaceRoot, appRoot, target, enableOpenApi, cacheBackend, eventsBackend, production, telescope, databaseApi, hooks, bustCache = false } = input;
3401
3427
  const constructGlobs = config.constructs;
3402
3428
  const constructSources = {};
3403
3429
  const declared = constructGlobs ? await discover({
@@ -3418,7 +3444,7 @@ async function buildApp(input) {
3418
3444
  if (production?.bundle && !input.skipBundle) {
3419
3445
  const outputDir = join(appRoot, ".gkm", "server");
3420
3446
  const entryPoint = await writeSurfaceServer(outputDir, production);
3421
- const { bundleServer } = await import("./bundler-DJlsYzm7.mjs");
3447
+ const { bundleServer } = await import("./bundler-CNTVLCCA.mjs");
3422
3448
  await bundleServer({
3423
3449
  entryPoint,
3424
3450
  outputDir: join(outputDir, "dist"),
@@ -3438,6 +3464,7 @@ async function buildApp(input) {
3438
3464
  appRoot,
3439
3465
  databaseApi
3440
3466
  });
3467
+ const eventsBackends = eventsBackendsIn(declared, eventsBackend);
3441
3468
  const buildContext = {
3442
3469
  ...derived,
3443
3470
  telescope,
@@ -3448,8 +3475,10 @@ async function buildApp(input) {
3448
3475
  emailBackend: "ses",
3449
3476
  storageDrivers: driversFor({
3450
3477
  appRoot,
3451
- cache: cacheBackendsIn(declared, cacheBackend)
3478
+ cache: cacheBackendsIn(declared, cacheBackend),
3479
+ events: eventsBackends
3452
3480
  }),
3481
+ eventsBackends,
3453
3482
  markOptional: input.markOptional ?? false,
3454
3483
  ...production && { telemetry: telemetryFor({
3455
3484
  appRoot,
@@ -3556,7 +3585,7 @@ async function buildForTarget(target, context, appRoot, workspaceRoot, endpointG
3556
3585
  let masterKey;
3557
3586
  if (context.production?.bundle && !skipBundle) {
3558
3587
  logger$4.log(`\n📦 Bundling production server...`);
3559
- const { bundleServer } = await import("./bundler-DJlsYzm7.mjs");
3588
+ const { bundleServer } = await import("./bundler-CNTVLCCA.mjs");
3560
3589
  const allConstructs = [
3561
3590
  ...endpoints.map((e) => e.construct),
3562
3591
  ...functions.map((f) => f.construct),
@@ -5255,25 +5284,25 @@ function loadPackageJson() {
5255
5284
  * Run: pnpm --filter @geekmidas/cli sync-versions
5256
5285
  */
5257
5286
  const GEEKMIDAS_VERSIONS = {
5258
- "@geekmidas/audit": "~10.0.0-alpha.70",
5259
- "@geekmidas/auth": "~10.0.0-alpha.70",
5260
- "@geekmidas/cache": "~10.0.0-alpha.70",
5261
- "@geekmidas/client": "~10.0.0-alpha.70",
5262
- "@geekmidas/cloud": "~10.0.0-alpha.70",
5263
- "@geekmidas/constructs": "~10.0.0-alpha.70",
5264
- "@geekmidas/db": "~10.0.0-alpha.70",
5265
- "@geekmidas/emailkit": "~10.0.0-alpha.70",
5266
- "@geekmidas/envkit": "~10.0.0-alpha.70",
5267
- "@geekmidas/errors": "~10.0.0-alpha.70",
5268
- "@geekmidas/events": "~10.0.0-alpha.70",
5269
- "@geekmidas/logger": "~10.0.0-alpha.70",
5270
- "@geekmidas/manifest": "~10.0.0-alpha.70",
5271
- "@geekmidas/rate-limit": "~10.0.0-alpha.70",
5272
- "@geekmidas/schema": "~10.0.0-alpha.70",
5273
- "@geekmidas/services": "~10.0.0-alpha.70",
5274
- "@geekmidas/storage": "~10.0.0-alpha.70",
5275
- "@geekmidas/telescope": "~10.0.0-alpha.70",
5276
- "@geekmidas/testkit": "~10.0.0-alpha.70",
5287
+ "@geekmidas/audit": "~10.0.0-alpha.72",
5288
+ "@geekmidas/auth": "~10.0.0-alpha.72",
5289
+ "@geekmidas/cache": "~10.0.0-alpha.72",
5290
+ "@geekmidas/client": "~10.0.0-alpha.72",
5291
+ "@geekmidas/cloud": "~10.0.0-alpha.72",
5292
+ "@geekmidas/constructs": "~10.0.0-alpha.72",
5293
+ "@geekmidas/db": "~10.0.0-alpha.72",
5294
+ "@geekmidas/emailkit": "~10.0.0-alpha.72",
5295
+ "@geekmidas/envkit": "~10.0.0-alpha.72",
5296
+ "@geekmidas/errors": "~10.0.0-alpha.72",
5297
+ "@geekmidas/events": "~10.0.0-alpha.72",
5298
+ "@geekmidas/logger": "~10.0.0-alpha.72",
5299
+ "@geekmidas/manifest": "~10.0.0-alpha.72",
5300
+ "@geekmidas/rate-limit": "~10.0.0-alpha.72",
5301
+ "@geekmidas/schema": "~10.0.0-alpha.72",
5302
+ "@geekmidas/services": "~10.0.0-alpha.72",
5303
+ "@geekmidas/storage": "~10.0.0-alpha.72",
5304
+ "@geekmidas/telescope": "~10.0.0-alpha.72",
5305
+ "@geekmidas/testkit": "~10.0.0-alpha.72",
5277
5306
  "@geekmidas/cli": `~${loadPackageJson().version}`
5278
5307
  };
5279
5308
  //#endregion
@@ -10989,6 +11018,7 @@ async function testCommand(options = {}) {
10989
11018
  targets: [workspace.root, ...Object.values(workspace.apps).map((app) => isAbsolute(app.path) ? app.path : join(workspace.root, app.path))],
10990
11019
  patterns: constructGlobs(workspace),
10991
11020
  cacheBackend: backendsOf$1(workspace).cache,
11021
+ eventsBackend: backendsOf$1(workspace).events,
10992
11022
  stage: TEST_STAGE,
10993
11023
  env: finalCredentials,
10994
11024
  factories: join(workspace.root, workspace.test.factories ?? "test/factories")
@@ -11063,7 +11093,7 @@ function testDatabases(reconciled) {
11063
11093
  * starts without the reference data the app needs.
11064
11094
  */
11065
11095
  async function migrateTestStage(workspace, env) {
11066
- const { migrateAndSeed } = await import("./migrate-DiJT84g9.mjs");
11096
+ const { migrateAndSeed } = await import("./migrate-guck0NJK.mjs");
11067
11097
  const { discover } = await import("./discover-Buwf1z4P.mjs").then((n) => n.i);
11068
11098
  const sources = {};
11069
11099
  const manifest = await discover({
@@ -11494,7 +11524,7 @@ program.command("migrate").description("Apply each database construct's migratio
11494
11524
  try {
11495
11525
  const globalOptions = program.opts();
11496
11526
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11497
- const { migrateCommand } = await import("./migrate-DiJT84g9.mjs");
11527
+ const { migrateCommand } = await import("./migrate-guck0NJK.mjs");
11498
11528
  await migrateCommand({
11499
11529
  ...options,
11500
11530
  ...construct ? { construct } : {}
@@ -11508,7 +11538,7 @@ program.command("seed").description("Migrate, then run each database construct's
11508
11538
  try {
11509
11539
  const globalOptions = program.opts();
11510
11540
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11511
- const { seedCommand } = await import("./migrate-DiJT84g9.mjs");
11541
+ const { seedCommand } = await import("./migrate-guck0NJK.mjs");
11512
11542
  await seedCommand({
11513
11543
  ...options,
11514
11544
  ...construct ? { construct } : {}
@@ -11522,7 +11552,7 @@ program.command("migration").description("Write a construct's next migration: an
11522
11552
  try {
11523
11553
  const globalOptions = program.opts();
11524
11554
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11525
- const { migrationCommand } = await import("./migrate-DiJT84g9.mjs");
11555
+ const { migrationCommand } = await import("./migrate-guck0NJK.mjs");
11526
11556
  await migrationCommand({
11527
11557
  construct,
11528
11558
  ...name ? { name } : {}
@@ -11616,7 +11646,7 @@ program.command("secrets:add").description("Build the keys a stage must be given
11616
11646
  try {
11617
11647
  const globalOptions = program.opts();
11618
11648
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11619
- const { secretsAddCommand } = await import("./add-BuviRszv.mjs");
11649
+ const { secretsAddCommand } = await import("./add-XTLU19_E.mjs");
11620
11650
  await secretsAddCommand(options);
11621
11651
  } catch (error) {
11622
11652
  console.error(formatError(error));
@@ -11627,7 +11657,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
11627
11657
  try {
11628
11658
  const globalOptions = program.opts();
11629
11659
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11630
- const { encryptionRotateCommand } = await import("./encryption-DR-py9GX.mjs");
11660
+ const { encryptionRotateCommand } = await import("./encryption-DcrxWl1s.mjs");
11631
11661
  await encryptionRotateCommand(construct, options);
11632
11662
  } catch (error) {
11633
11663
  console.error(formatError(error));
@@ -11638,7 +11668,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
11638
11668
  try {
11639
11669
  const globalOptions = program.opts();
11640
11670
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11641
- const { encryptionRetireCommand } = await import("./encryption-DR-py9GX.mjs");
11671
+ const { encryptionRetireCommand } = await import("./encryption-DcrxWl1s.mjs");
11642
11672
  await encryptionRetireCommand(construct, key, options);
11643
11673
  } catch (error) {
11644
11674
  console.error(formatError(error));
@@ -11681,7 +11711,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
11681
11711
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11682
11712
  const { loadWorkspaceConfig } = await import("./config.mjs");
11683
11713
  const { reconcileMissingSecrets } = await import("./reconcile--I7V4Klj.mjs");
11684
- const { secretsStoreFor } = await import("./state-527OmqvN.mjs").then((n) => n.Lt);
11714
+ const { secretsStoreFor } = await import("./state-BJFherj1.mjs").then((n) => n.Lt);
11685
11715
  const { workspace } = await loadWorkspaceConfig();
11686
11716
  const stage = options.stage ?? workspace.stages.local;
11687
11717
  const store = await secretsStoreFor(workspace, stage);
@@ -11690,7 +11720,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
11690
11720
  console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
11691
11721
  process.exit(1);
11692
11722
  }
11693
- const { derivedContainers } = await import("./state-527OmqvN.mjs").then((n) => n.J);
11723
+ const { derivedContainers } = await import("./state-BJFherj1.mjs").then((n) => n.J);
11694
11724
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
11695
11725
  if (!result) {
11696
11726
  console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
@@ -11705,7 +11735,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
11705
11735
  }
11706
11736
  });
11707
11737
  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 <list>", "Server targets: run MinIO and/or Mailpit (minio,mailpit) for mail and buckets the stage's secrets don't configure. Not production-grade").action(async (options) => {
11708
- const { deployCli } = await import("./cli-BjnqVnE6.mjs");
11738
+ const { deployCli } = await import("./cli-D1arS0p1.mjs");
11709
11739
  const globalOptions = program.opts();
11710
11740
  const code = await deployCli({
11711
11741
  cwd: resolve(globalOptions.cwd ?? process.cwd()),
@@ -11722,7 +11752,7 @@ program.command("deploy").description("Deploy a stage through its target").optio
11722
11752
  });
11723
11753
  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) => {
11724
11754
  try {
11725
- const { rollbackStage } = await import("./rollback-Bw9kESjz.mjs").then((n) => n.a);
11755
+ const { rollbackStage } = await import("./rollback-Bk91csFg.mjs").then((n) => n.a);
11726
11756
  const { terminalCredentials } = await import("./terminal-C6TBo_SA.mjs");
11727
11757
  const globalOptions = program.opts();
11728
11758
  await rollbackStage({
@@ -11758,7 +11788,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
11758
11788
  try {
11759
11789
  const globalOptions = program.opts();
11760
11790
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11761
- const { deployGithubCommand } = await import("./github-D2pYzY7L.mjs");
11791
+ const { deployGithubCommand } = await import("./github-CqYOP8cI.mjs");
11762
11792
  await deployGithubCommand(options);
11763
11793
  } catch (error) {
11764
11794
  console.error(formatError(error));