@geekmidas/cli 10.0.0-alpha.53 → 10.0.0-alpha.55

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 (90) hide show
  1. package/README.md +2 -2
  2. package/dist/{HostingerProvider-GF6NAZAK.mjs → HostingerProvider-cL-6oQ5r.mjs} +2 -2
  3. package/dist/{HostingerProvider-GF6NAZAK.mjs.map → HostingerProvider-cL-6oQ5r.mjs.map} +1 -1
  4. package/dist/LegacyStateStore-ByRWQ9s1.mjs +89 -0
  5. package/dist/LegacyStateStore-ByRWQ9s1.mjs.map +1 -0
  6. package/dist/LegacyStateStore-C_OFs1gN.cjs +89 -0
  7. package/dist/LegacyStateStore-C_OFs1gN.cjs.map +1 -0
  8. package/dist/LocalStateStore-BupdV-VN.mjs +163 -0
  9. package/dist/LocalStateStore-BupdV-VN.mjs.map +1 -0
  10. package/dist/LocalStateStore-DDDU0HkI.cjs +163 -0
  11. package/dist/LocalStateStore-DDDU0HkI.cjs.map +1 -0
  12. package/dist/{OpenApiTsGenerator-BzIGy8KE.mjs → OpenApiTsGenerator-DKmAorGX.mjs} +34 -11
  13. package/dist/{OpenApiTsGenerator-BzIGy8KE.mjs.map → OpenApiTsGenerator-DKmAorGX.mjs.map} +1 -1
  14. package/dist/{OpenApiTsGenerator-BN0PIZxd.cjs → OpenApiTsGenerator-WlUHjimW.cjs} +34 -11
  15. package/dist/{OpenApiTsGenerator-BN0PIZxd.cjs.map → OpenApiTsGenerator-WlUHjimW.cjs.map} +1 -1
  16. package/dist/S3StateStore-C7eBae0G.cjs +160 -0
  17. package/dist/S3StateStore-C7eBae0G.cjs.map +1 -0
  18. package/dist/S3StateStore-FhzyENrN.mjs +161 -0
  19. package/dist/S3StateStore-FhzyENrN.mjs.map +1 -0
  20. package/dist/SSMStateStore-DD7jKrCO.cjs +146 -0
  21. package/dist/SSMStateStore-DD7jKrCO.cjs.map +1 -0
  22. package/dist/SSMStateStore-oda9xOGc.mjs +147 -0
  23. package/dist/SSMStateStore-oda9xOGc.mjs.map +1 -0
  24. package/dist/{backends-Dfeu5Dgc.mjs → backends-BNrMPlJb.mjs} +2 -2
  25. package/dist/{backends-Dfeu5Dgc.mjs.map → backends-BNrMPlJb.mjs.map} +1 -1
  26. package/dist/{backends-D5aDWxuA.cjs → backends-nBauiBkt.cjs} +2 -2
  27. package/dist/{backends-D5aDWxuA.cjs.map → backends-nBauiBkt.cjs.map} +1 -1
  28. package/dist/{bundler--fyybf1N.mjs → bundler-URImKj-A.mjs} +2 -2
  29. package/dist/{bundler--fyybf1N.mjs.map → bundler-URImKj-A.mjs.map} +1 -1
  30. package/dist/{config-Cvr5fCbn.cjs → config-C7NZG2tr.cjs} +2 -2
  31. package/dist/{config-Cvr5fCbn.cjs.map → config-C7NZG2tr.cjs.map} +1 -1
  32. package/dist/{config-SOkDH-n1.mjs → config-XEd-dKVX.mjs} +2 -2
  33. package/dist/{config-SOkDH-n1.mjs.map → config-XEd-dKVX.mjs.map} +1 -1
  34. package/dist/config.cjs +2 -2
  35. package/dist/config.d.cts +2 -2
  36. package/dist/config.d.mts +2 -2
  37. package/dist/config.mjs +2 -2
  38. package/dist/{encryption-O-XdeNxe.mjs → encryption-Bc1cMdeY.mjs} +4 -4
  39. package/dist/{encryption-O-XdeNxe.mjs.map → encryption-Bc1cMdeY.mjs.map} +1 -1
  40. package/dist/{encryption-tB4LqLKN.cjs → encryption-DSHYN5ap.cjs} +4 -4
  41. package/dist/{encryption-tB4LqLKN.cjs.map → encryption-DSHYN5ap.cjs.map} +1 -1
  42. package/dist/{github-BGx4U61b.cjs → github-CWflxaV4.cjs} +3 -3
  43. package/dist/{github-BGx4U61b.cjs.map → github-CWflxaV4.cjs.map} +1 -1
  44. package/dist/{github-U_frvZgD.mjs → github-DWHXTcwL.mjs} +3 -3
  45. package/dist/{github-U_frvZgD.mjs.map → github-DWHXTcwL.mjs.map} +1 -1
  46. package/dist/{index-fU3qHy7c.d.cts → index-B8nraKvg.d.mts} +2 -2
  47. package/dist/{index-DYh5TrsZ.d.mts.map → index-B8nraKvg.d.mts.map} +1 -1
  48. package/dist/{index-DYh5TrsZ.d.mts → index-BvBQS89a.d.cts} +2 -2
  49. package/dist/{index-fU3qHy7c.d.cts.map → index-BvBQS89a.d.cts.map} +1 -1
  50. package/dist/index.cjs +993 -215
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.mjs +991 -221
  53. package/dist/index.mjs.map +1 -1
  54. package/dist/{migrate-SDIRUyY5.cjs → migrate-DHMRgnP6.cjs} +4 -4
  55. package/dist/{migrate-SDIRUyY5.cjs.map → migrate-DHMRgnP6.cjs.map} +1 -1
  56. package/dist/{migrate-CHQyNzj-.mjs → migrate-PcQg692O.mjs} +4 -4
  57. package/dist/{migrate-CHQyNzj-.mjs.map → migrate-PcQg692O.mjs.map} +1 -1
  58. package/dist/openapi.cjs +3 -3
  59. package/dist/openapi.d.cts +1 -1
  60. package/dist/openapi.d.mts +1 -1
  61. package/dist/openapi.mjs +3 -3
  62. package/dist/{ready-VkNwfJu7.cjs → ready-BefA4mM0.cjs} +2 -2
  63. package/dist/{ready-VkNwfJu7.cjs.map → ready-BefA4mM0.cjs.map} +1 -1
  64. package/dist/{ready-C8wG_d0v.mjs → ready-bES_Jk5v.mjs} +2 -2
  65. package/dist/{ready-C8wG_d0v.mjs.map → ready-bES_Jk5v.mjs.map} +1 -1
  66. package/dist/reconcile/public.d.cts +1 -1
  67. package/dist/reconcile/public.d.mts +1 -1
  68. package/dist/{types-DYDT4FfE.d.cts → types-Cgj-cq2m.d.mts} +136 -5
  69. package/dist/types-Cgj-cq2m.d.mts.map +1 -0
  70. package/dist/{types-CT0ymlBk.d.mts → types-CmxMhLGp.d.cts} +137 -4
  71. package/dist/types-CmxMhLGp.d.cts.map +1 -0
  72. package/dist/vitest.cjs +1 -1
  73. package/dist/vitest.mjs +1 -1
  74. package/dist/workspace/index.cjs +1 -1
  75. package/dist/workspace/index.d.cts +2 -2
  76. package/dist/workspace/index.d.mts +2 -2
  77. package/dist/workspace/index.mjs +1 -1
  78. package/dist/{workspace-qcva2dTt.mjs → workspace-BE0WHPw9.mjs} +9 -9
  79. package/dist/workspace-BE0WHPw9.mjs.map +1 -0
  80. package/dist/{workspace-P_V5t4Uk.cjs → workspace-CXvYabDJ.cjs} +7 -7
  81. package/dist/workspace-CXvYabDJ.cjs.map +1 -0
  82. package/dist/{workspace-bOsks1uk.mjs → workspace-DHK2N1mq.mjs} +22 -3
  83. package/dist/{workspace-bOsks1uk.mjs.map → workspace-DHK2N1mq.mjs.map} +1 -1
  84. package/dist/{workspace-BcCiLzTO.cjs → workspace-DL_99LJC.cjs} +22 -3
  85. package/dist/{workspace-BcCiLzTO.cjs.map → workspace-DL_99LJC.cjs.map} +1 -1
  86. package/package.json +14 -14
  87. package/dist/types-CT0ymlBk.d.mts.map +0 -1
  88. package/dist/types-DYDT4FfE.d.cts.map +0 -1
  89. package/dist/workspace-P_V5t4Uk.cjs.map +0 -1
  90. package/dist/workspace-qcva2dTt.mjs.map +0 -1
@@ -976,11 +976,15 @@ ${context.storageDrivers?.setup ? `// Which storage drivers exist is the entry p
976
976
  // a provider.
977
977
  ${context.storageDrivers.setup}
978
978
  ` : ""}
979
- export interface ServerApp {
979
+ ${context.surface ? `// Who this server is to Postgres: application_name on every connection.
980
+ process.env.GKM_APP_NAME ??= ${JSON.stringify(context.surface.id)};
981
+
982
+ ` : ""}export interface ServerApp {
980
983
  app: HonoType;
981
984
  start: (options?: {
982
985
  port?: number;
983
- serve: (app: HonoType, port: number) => void | Promise<void>;
986
+ /** Returns the server, so a shutdown can stop it taking requests. */
987
+ serve: (app: HonoType, port: number) => unknown;
984
988
  }) => Promise<void>;
985
989
  }
986
990
 
@@ -1148,20 +1152,35 @@ export const handler = adapter.handler;
1148
1152
  import { setupQueues } from './queues.js';
1149
1153
  import { setupCrons } from './crons.js';` : "";
1150
1154
  const gracefulShutdownCode = enableGracefulShutdown ? `
1151
- // Graceful shutdown handling
1155
+ // Graceful shutdown: stop taking requests, let in-flight ones finish, then
1156
+ // close what constructs opened (database pools) — so a rolling deploy does
1157
+ // not leave the old task holding connections. Bounded by
1158
+ // GKM_SHUTDOWN_TIMEOUT_MS, 8s by default: under Docker's 10s stop timeout,
1159
+ // so the process exits on its own terms rather than being killed mid-drain.
1152
1160
  let isShuttingDown = false;
1153
1161
 
1154
1162
  const shutdown = async () => {
1155
1163
  if (isShuttingDown) return;
1156
1164
  isShuttingDown = true;
1157
- logger.info('Graceful shutdown initiated');
1158
- // Allow in-flight requests to complete (30s timeout)
1159
- setTimeout(() => process.exit(0), 30000);
1165
+ const deadline = Number(process.env.GKM_SHUTDOWN_TIMEOUT_MS) || 8000;
1166
+ logger.info({ deadline }, 'Graceful shutdown initiated');
1167
+ setTimeout(() => {
1168
+ logger.warn({ deadline }, 'Shutdown deadline reached, exiting');
1169
+ process.exit(1);
1170
+ }, deadline).unref();
1171
+ await new Promise<void>((resolve) => {
1172
+ const close = (server as { close?: (done: () => void) => void } | undefined)?.close;
1173
+ if (typeof close === 'function') close.call(server, () => resolve());
1174
+ else resolve();
1175
+ });
1176
+ await runShutdownHooks((error) => logger.error({ error }, 'Shutdown hook failed'));
1177
+ process.exit(0);
1160
1178
  };
1161
1179
 
1162
1180
  process.on('SIGTERM', shutdown);
1163
1181
  process.on('SIGINT', shutdown);
1164
1182
  ` : "";
1183
+ const endpointsImportPath = production.optimizedHandlers ? "./endpoints/index.js" : "./endpoints.js";
1165
1184
  const content = `/**
1166
1185
  * Generated production server application
1167
1186
  *
@@ -1173,7 +1192,7 @@ import { setupCrons } from './crons.js';` : "";
1173
1192
  */
1174
1193
  import { Hono } from 'hono';
1175
1194
  import type { Hono as HonoType } from 'hono';
1176
- import { setupEndpoints } from '${production.optimizedHandlers ? "./endpoints/index.js" : "./endpoints.js"}';
1195
+ ${enableGracefulShutdown ? "import { runShutdownHooks } from '@geekmidas/constructs';\n" : ""}import { setupEndpoints } from '${endpointsImportPath}';
1177
1196
  ${subscriberImport}
1178
1197
  ${runtime.imports}
1179
1198
  ${runtime.bindings}
@@ -1184,7 +1203,10 @@ ${context.storageDrivers?.imports ?? ""}
1184
1203
  ${context.storageDrivers?.setup ? `// The entry point registers the drivers its target needs.
1185
1204
  ${context.storageDrivers.setup}
1186
1205
  ` : ""}
1187
- export interface ServerApp {
1206
+ ${context.surface ? `// Who this server is to Postgres: application_name on every connection.
1207
+ process.env.GKM_APP_NAME ??= ${JSON.stringify(context.surface.id)};
1208
+
1209
+ ` : ""}export interface ServerApp {
1188
1210
  app: HonoType;
1189
1211
  start: (options?: {
1190
1212
  port?: number;
@@ -1217,11 +1239,12 @@ ${afterSetupCall}
1217
1239
  }
1218
1240
 
1219
1241
  const port = options.port ?? Number(process.env.PORT) ?? 3000;
1242
+ let server: unknown;
1220
1243
  ${gracefulShutdownCode}${subscriberSetup}
1221
1244
  logger.info({ port }, 'Starting production server');
1222
1245
 
1223
1246
  // Start HTTP server using provided serve function
1224
- await options.serve(honoApp, port);
1247
+ server = await options.serve(honoApp, port);
1225
1248
 
1226
1249
  logger.info({ port }, 'Production server started');
1227
1250
  ${includeSubscribers ? "\n await subscribeForPush(port);" : ""}
@@ -1255,7 +1278,7 @@ const { start } = await createApp();
1255
1278
 
1256
1279
  await start({
1257
1280
  port,
1258
- serve: (app, port) => { serve({ fetch: app.fetch, port }); },
1281
+ serve: (app, port) => serve({ fetch: app.fetch, port }),
1259
1282
  });
1260
1283
  `);
1261
1284
  }
@@ -1785,4 +1808,4 @@ Object.defineProperty(exports, "runtimeFor", {
1785
1808
  }
1786
1809
  });
1787
1810
 
1788
- //# sourceMappingURL=OpenApiTsGenerator-BN0PIZxd.cjs.map
1811
+ //# sourceMappingURL=OpenApiTsGenerator-WlUHjimW.cjs.map