@geekmidas/cli 1.10.10 → 1.10.11

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 (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{bundler-kk_XJTRp.mjs → bundler-BvByD6tt.mjs} +2 -2
  3. package/dist/{bundler-kk_XJTRp.mjs.map → bundler-BvByD6tt.mjs.map} +1 -1
  4. package/dist/{bundler-Bm3Az_sv.cjs → bundler-wY-XZDl9.cjs} +2 -2
  5. package/dist/{bundler-Bm3Az_sv.cjs.map → bundler-wY-XZDl9.cjs.map} +1 -1
  6. package/dist/{fullstack-secrets-BC9t9wWB.cjs → fullstack-secrets-AUkUyeW0.cjs} +9 -3
  7. package/dist/fullstack-secrets-AUkUyeW0.cjs.map +1 -0
  8. package/dist/{fullstack-secrets-DmUOfLeX.mjs → fullstack-secrets-Bnm_QeZr.mjs} +9 -3
  9. package/dist/fullstack-secrets-Bnm_QeZr.mjs.map +1 -0
  10. package/dist/index.cjs +45 -38
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.mjs +45 -38
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/{reconcile-C0dsg-Gq.mjs → reconcile--yaWO052.mjs} +2 -2
  15. package/dist/{reconcile-C0dsg-Gq.mjs.map → reconcile--yaWO052.mjs.map} +1 -1
  16. package/dist/{reconcile-BZ8j_-0z.cjs → reconcile-oktp4i_4.cjs} +2 -2
  17. package/dist/{reconcile-BZ8j_-0z.cjs.map → reconcile-oktp4i_4.cjs.map} +1 -1
  18. package/dist/{storage-D6BGLgWf.cjs → storage-B3aXQBpI.cjs} +1 -1
  19. package/dist/{storage-Cs13jkJ9.cjs → storage-CEisMvif.cjs} +6 -6
  20. package/dist/{storage-B7H2PPCS.mjs.map → storage-CEisMvif.cjs.map} +1 -1
  21. package/dist/{storage-C1FNm2EP.mjs → storage-D3lh8Xpq.mjs} +1 -1
  22. package/dist/{storage-B7H2PPCS.mjs → storage-Df-NFMY9.mjs} +6 -6
  23. package/dist/{storage-Cs13jkJ9.cjs.map → storage-Df-NFMY9.mjs.map} +1 -1
  24. package/dist/{sync-CyGe5f1I.mjs → sync-CIzj1CQe.mjs} +1 -1
  25. package/dist/{sync-oCqELfeA.cjs → sync-CcDvBUu4.cjs} +2 -2
  26. package/dist/{sync-oCqELfeA.cjs.map → sync-CcDvBUu4.cjs.map} +1 -1
  27. package/dist/{sync-CzXruMzP.mjs → sync-D-7NTKvV.mjs} +2 -2
  28. package/dist/{sync-CzXruMzP.mjs.map → sync-D-7NTKvV.mjs.map} +1 -1
  29. package/dist/sync-QNXT8x13.cjs +4 -0
  30. package/package.json +3 -3
  31. package/src/dev/index.ts +6 -1
  32. package/src/docker/__tests__/compose.spec.ts +24 -11
  33. package/src/docker/compose.ts +25 -21
  34. package/src/secrets/__tests__/generator.spec.ts +5 -5
  35. package/src/secrets/__tests__/storage.spec.ts +7 -7
  36. package/src/secrets/generator.ts +10 -4
  37. package/src/secrets/index.ts +4 -4
  38. package/src/secrets/storage.ts +5 -5
  39. package/src/secrets/types.ts +1 -1
  40. package/src/setup/__tests__/reconcile-secrets.spec.ts +3 -3
  41. package/src/setup/index.ts +5 -0
  42. package/dist/fullstack-secrets-BC9t9wWB.cjs.map +0 -1
  43. package/dist/fullstack-secrets-DmUOfLeX.mjs.map +0 -1
  44. package/dist/sync-DLlwsrBs.cjs +0 -4
package/dist/index.mjs CHANGED
@@ -4,13 +4,13 @@ import { getAppBuildOrder, getDependencyEnvVars, getDeployTargetError, isDeployT
4
4
  import { getAppNameFromCwd, loadAppConfig, loadConfig, loadWorkspaceAppInfo, loadWorkspaceConfig, parseModuleConfig } from "./config-jsRYHOHU.mjs";
5
5
  import { getCredentialsPath, getDokployCredentials, getDokployRegistryId, getDokployToken, removeDokployCredentials, storeDokployCredentials, storeDokployRegistryId } from "./credentials-s1kLcIzK.mjs";
6
6
  import { ConstructGenerator, EndpointGenerator, OPENAPI_OUTPUT_PATH, copyAllClients, copyClientToFrontends, generateOpenApi, getBackendOpenApiPath, isPartitionedRoutes, normalizeRoutes, openapiCommand, resolveOpenApiConfig } from "./openapi-DenF-okj.mjs";
7
- import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-B7H2PPCS.mjs";
7
+ import { getKeyPath, maskPassword, readStageSecrets, secretsExist, setCustomSecret, toEmbeddableSecrets, writeStageSecrets } from "./storage-Df-NFMY9.mjs";
8
8
  import { DokployApi } from "./dokploy-api-2ldYoN3i.mjs";
9
9
  import { encryptSecrets } from "./encryption-BOH5M-f-.mjs";
10
10
  import { CachedStateProvider } from "./CachedStateProvider-BDq5WqSy.mjs";
11
- import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-DmUOfLeX.mjs";
11
+ import { createStageSecrets, generateConnectionUrls, generateDbPassword, generateDbUrl, generateFullstackCustomSecrets, generateServiceCredentials, rotateServicePassword, writeDockerEnvFromSecrets } from "./fullstack-secrets-Bnm_QeZr.mjs";
12
12
  import { generateReactQueryCommand } from "./openapi-react-query-C4UdILaI.mjs";
13
- import { isSSMConfigured, pullSecrets, pushSecrets } from "./sync-CzXruMzP.mjs";
13
+ import { isSSMConfigured, pullSecrets, pushSecrets } from "./sync-D-7NTKvV.mjs";
14
14
  import { createRequire } from "node:module";
15
15
  import { copyFileSync, existsSync, readFileSync, unlinkSync } from "node:fs";
16
16
  import { basename, dirname, join, parse, relative, resolve } from "node:path";
@@ -35,7 +35,7 @@ import prompts from "prompts";
35
35
 
36
36
  //#region package.json
37
37
  var name = "@geekmidas/cli";
38
- var version = "1.10.9";
38
+ var version = "1.10.10";
39
39
  var description = "CLI tools for building Lambda handlers, server applications, and generating OpenAPI specs";
40
40
  var private$1 = false;
41
41
  var type = "module";
@@ -838,7 +838,7 @@ function rewriteUrlsWithPorts(secrets, resolvedPorts) {
838
838
  for (const { defaultPort, resolvedPort } of portReplacements) if (value === String(defaultPort)) result[key] = String(resolvedPort);
839
839
  }
840
840
  for (const [key, value] of Object.entries(result)) {
841
- if (!key.endsWith("_URL") && key !== "DATABASE_URL") continue;
841
+ if (!key.endsWith("_URL") && !key.endsWith("_ENDPOINT") && key !== "DATABASE_URL") continue;
842
842
  let rewritten = value;
843
843
  for (const name$1 of serviceNames) rewritten = rewritten.replace(new RegExp(`@${name$1}:`, "g"), "@localhost:");
844
844
  for (const { defaultPort, resolvedPort } of portReplacements) rewritten = replacePortInUrl(rewritten, defaultPort, resolvedPort);
@@ -2198,7 +2198,7 @@ async function buildForProvider(provider, context, rootOutputDir, endpointGenera
2198
2198
  let masterKey;
2199
2199
  if (context.production?.bundle && !skipBundle) {
2200
2200
  logger$9.log(`\n📦 Bundling production server...`);
2201
- const { bundleServer } = await import("./bundler-kk_XJTRp.mjs");
2201
+ const { bundleServer } = await import("./bundler-BvByD6tt.mjs");
2202
2202
  const allConstructs = [
2203
2203
  ...endpoints.map((e) => e.construct),
2204
2204
  ...functions.map((f) => f.construct),
@@ -2922,12 +2922,12 @@ services:
2922
2922
  `;
2923
2923
  if (serviceMap.has("rabbitmq")) yaml += ` - RABBITMQ_URL=\${RABBITMQ_URL:-amqp://rabbitmq:5672}
2924
2924
  `;
2925
- if (serviceMap.has("minio")) yaml += ` - S3_ENDPOINT=\${S3_ENDPOINT:-http://minio:9000}
2926
- - S3_ACCESS_KEY_ID=\${MINIO_ACCESS_KEY:-app}
2927
- - S3_SECRET_ACCESS_KEY=\${MINIO_SECRET_KEY:-app}
2928
- - S3_BUCKET=\${MINIO_BUCKET:-app}
2929
- - S3_REGION=\${S3_REGION:-eu-west-1}
2930
- - S3_FORCE_PATH_STYLE=true
2925
+ if (serviceMap.has("minio")) yaml += ` - STORAGE_ENDPOINT=\${STORAGE_ENDPOINT:-http://minio:9000}
2926
+ - STORAGE_ACCESS_KEY_ID=\${STORAGE_ACCESS_KEY_ID:-${imageName}}
2927
+ - STORAGE_SECRET_ACCESS_KEY=\${STORAGE_SECRET_ACCESS_KEY:-${imageName}}
2928
+ - STORAGE_BUCKET=\${STORAGE_BUCKET:-${imageName}}
2929
+ - STORAGE_REGION=\${STORAGE_REGION:-eu-west-1}
2930
+ - STORAGE_FORCE_PATH_STYLE=true
2931
2931
  `;
2932
2932
  yaml += ` healthcheck:
2933
2933
  test: ["CMD", "wget", "-q", "--spider", "http://localhost:${port}${healthCheckPath}"]
@@ -3009,12 +3009,13 @@ services:
3009
3009
  container_name: minio
3010
3010
  restart: unless-stopped
3011
3011
  entrypoint: sh
3012
- command: -c 'mkdir -p /data/\${MINIO_BUCKET:-app} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
3012
+ command: -c 'mkdir -p /data/\${STORAGE_BUCKET:-${imageName}} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
3013
3013
  environment:
3014
- MINIO_ROOT_USER: \${MINIO_ACCESS_KEY:-app}
3015
- MINIO_ROOT_PASSWORD: \${MINIO_SECRET_KEY:-app}
3014
+ MINIO_ROOT_USER: \${STORAGE_ACCESS_KEY_ID:-${imageName}}
3015
+ MINIO_ROOT_PASSWORD: \${STORAGE_SECRET_ACCESS_KEY:-${imageName}}
3016
3016
  ports:
3017
- - "9001:9001" # Console UI
3017
+ - "\${MINIO_API_PORT:-9000}:9000"
3018
+ - "\${MINIO_CONSOLE_PORT:-9001}:9001"
3018
3019
  volumes:
3019
3020
  - minio_data:/data
3020
3021
  healthcheck:
@@ -3102,6 +3103,7 @@ services:
3102
3103
  `;
3103
3104
  for (const [appName, app] of apps) yaml += generateAppService(appName, app, apps, {
3104
3105
  registry,
3106
+ projectName: workspace.name,
3105
3107
  hasPostgres,
3106
3108
  hasRedis,
3107
3109
  hasMinio
@@ -3157,12 +3159,13 @@ services:
3157
3159
  container_name: ${workspace.name}-minio
3158
3160
  restart: unless-stopped
3159
3161
  entrypoint: sh
3160
- command: -c 'mkdir -p /data/\${MINIO_BUCKET:-app} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
3162
+ command: -c 'mkdir -p /data/\${STORAGE_BUCKET:-${workspace.name}} && /usr/bin/docker-entrypoint.sh server --console-address ":9001" /data'
3161
3163
  environment:
3162
- MINIO_ROOT_USER: \${MINIO_ACCESS_KEY:-app}
3163
- MINIO_ROOT_PASSWORD: \${MINIO_SECRET_KEY:-app}
3164
+ MINIO_ROOT_USER: \${STORAGE_ACCESS_KEY_ID:-${workspace.name}}
3165
+ MINIO_ROOT_PASSWORD: \${STORAGE_SECRET_ACCESS_KEY:-${workspace.name}}
3164
3166
  ports:
3165
- - "9001:9001" # Console UI
3167
+ - "\${MINIO_API_PORT:-9000}:9000"
3168
+ - "\${MINIO_CONSOLE_PORT:-9001}:9001"
3166
3169
  volumes:
3167
3170
  - minio_data:/data
3168
3171
  healthcheck:
@@ -3216,7 +3219,7 @@ function getInfraServiceImage(serviceName, config$1) {
3216
3219
  * Generate a service definition for an app.
3217
3220
  */
3218
3221
  function generateAppService(appName, app, allApps, options) {
3219
- const { registry, hasPostgres, hasRedis, hasMinio } = options;
3222
+ const { registry, projectName, hasPostgres, hasRedis, hasMinio } = options;
3220
3223
  const imageRef = registry ? `\${REGISTRY:-${registry}}/` : "";
3221
3224
  const healthCheckPath = app.type === "frontend" ? "/" : "/health";
3222
3225
  const healthCheckCmd = app.type === "frontend" ? `["CMD", "wget", "-q", "--spider", "http://localhost:${app.port}/"]` : `["CMD", "wget", "-q", "--spider", "http://localhost:${app.port}${healthCheckPath}"]`;
@@ -3244,12 +3247,12 @@ function generateAppService(appName, app, allApps, options) {
3244
3247
  `;
3245
3248
  if (hasRedis) yaml += ` - REDIS_URL=\${REDIS_URL:-redis://redis:6379}
3246
3249
  `;
3247
- if (hasMinio) yaml += ` - S3_ENDPOINT=\${S3_ENDPOINT:-http://minio:9000}
3248
- - S3_ACCESS_KEY_ID=\${MINIO_ACCESS_KEY:-app}
3249
- - S3_SECRET_ACCESS_KEY=\${MINIO_SECRET_KEY:-app}
3250
- - S3_BUCKET=\${MINIO_BUCKET:-app}
3251
- - S3_REGION=\${S3_REGION:-eu-west-1}
3252
- - S3_FORCE_PATH_STYLE=true
3250
+ if (hasMinio) yaml += ` - STORAGE_ENDPOINT=\${STORAGE_ENDPOINT:-http://minio:9000}
3251
+ - STORAGE_ACCESS_KEY_ID=\${STORAGE_ACCESS_KEY_ID:-${projectName}}
3252
+ - STORAGE_SECRET_ACCESS_KEY=\${STORAGE_SECRET_ACCESS_KEY:-${projectName}}
3253
+ - STORAGE_BUCKET=\${STORAGE_BUCKET:-${projectName}}
3254
+ - STORAGE_REGION=\${STORAGE_REGION:-eu-west-1}
3255
+ - STORAGE_FORCE_PATH_STYLE=true
3253
3256
  `;
3254
3257
  }
3255
3258
  yaml += ` healthcheck:
@@ -6307,7 +6310,7 @@ async function deployCommand(options) {
6307
6310
  dokployConfig = setupResult.config;
6308
6311
  finalRegistry = dokployConfig.registry ?? dockerConfig.registry;
6309
6312
  if (setupResult.serviceUrls) {
6310
- const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1, initStageSecrets } = await import("./storage-C1FNm2EP.mjs");
6313
+ const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1, initStageSecrets } = await import("./storage-D3lh8Xpq.mjs");
6311
6314
  let secrets = await readStageSecrets$1(stage);
6312
6315
  if (!secrets) {
6313
6316
  logger$3.log(` Creating secrets file for stage "${stage}"...`);
@@ -11131,7 +11134,7 @@ async function secretsInitCommand(options) {
11131
11134
  if (secrets.urls.DATABASE_URL) logger$2.log(`\n DATABASE_URL: ${maskUrl(secrets.urls.DATABASE_URL)}`);
11132
11135
  if (secrets.urls.REDIS_URL) logger$2.log(` REDIS_URL: ${maskUrl(secrets.urls.REDIS_URL)}`);
11133
11136
  if (secrets.urls.RABBITMQ_URL) logger$2.log(` RABBITMQ_URL: ${maskUrl(secrets.urls.RABBITMQ_URL)}`);
11134
- if (secrets.urls.S3_ENDPOINT) logger$2.log(` S3_ENDPOINT: ${secrets.urls.S3_ENDPOINT}`);
11137
+ if (secrets.urls.STORAGE_ENDPOINT) logger$2.log(` STORAGE_ENDPOINT: ${secrets.urls.STORAGE_ENDPOINT}`);
11135
11138
  if (Object.keys(secrets.custom).length > 0) logger$2.log(`\n Custom secrets: ${Object.keys(secrets.custom).length}`);
11136
11139
  logger$2.log(`\n Use "gkm secrets:show --stage ${stage}" to view secrets`);
11137
11140
  logger$2.log(" Use \"gkm secrets:set <KEY> <VALUE> --stage " + stage + "\" to add custom secrets");
@@ -11199,7 +11202,7 @@ async function secretsShowCommand(options) {
11199
11202
  if (secrets.urls.DATABASE_URL) logger$2.log(` DATABASE_URL: ${reveal ? secrets.urls.DATABASE_URL : maskUrl(secrets.urls.DATABASE_URL)}`);
11200
11203
  if (secrets.urls.REDIS_URL) logger$2.log(` REDIS_URL: ${reveal ? secrets.urls.REDIS_URL : maskUrl(secrets.urls.REDIS_URL)}`);
11201
11204
  if (secrets.urls.RABBITMQ_URL) logger$2.log(` RABBITMQ_URL: ${reveal ? secrets.urls.RABBITMQ_URL : maskUrl(secrets.urls.RABBITMQ_URL)}`);
11202
- if (secrets.urls.S3_ENDPOINT) logger$2.log(` S3_ENDPOINT: ${secrets.urls.S3_ENDPOINT}`);
11205
+ if (secrets.urls.STORAGE_ENDPOINT) logger$2.log(` STORAGE_ENDPOINT: ${secrets.urls.STORAGE_ENDPOINT}`);
11203
11206
  const customKeys = Object.keys(secrets.custom);
11204
11207
  if (customKeys.length > 0) {
11205
11208
  logger$2.log("\nCustom Secrets:");
@@ -11398,6 +11401,10 @@ function reconcileSecrets(secrets, workspace) {
11398
11401
  ];
11399
11402
  for (const { key, name: name$1 } of serviceMap) if (workspace.services[key] && !result.services[name$1]) {
11400
11403
  const creds = generateServiceCredentials(name$1);
11404
+ if (name$1 === "minio") {
11405
+ creds.bucket = workspace.name;
11406
+ creds.username = workspace.name;
11407
+ }
11401
11408
  result = {
11402
11409
  ...result,
11403
11410
  services: {
@@ -11983,9 +11990,9 @@ program.command("secrets:push").description("Push secrets to remote provider (SS
11983
11990
  const globalOptions = program.opts();
11984
11991
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
11985
11992
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
11986
- const { pushSecrets: pushSecrets$1 } = await import("./sync-CyGe5f1I.mjs");
11987
- const { reconcileMissingSecrets } = await import("./reconcile-C0dsg-Gq.mjs");
11988
- const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-C1FNm2EP.mjs");
11993
+ const { pushSecrets: pushSecrets$1 } = await import("./sync-CIzj1CQe.mjs");
11994
+ const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
11995
+ const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
11989
11996
  const { workspace } = await loadWorkspaceConfig$1();
11990
11997
  const secrets = await readStageSecrets$1(options.stage, workspace.root);
11991
11998
  if (secrets) {
@@ -12008,9 +12015,9 @@ program.command("secrets:pull").description("Pull secrets from remote provider (
12008
12015
  const globalOptions = program.opts();
12009
12016
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12010
12017
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
12011
- const { pullSecrets: pullSecrets$1 } = await import("./sync-CyGe5f1I.mjs");
12012
- const { writeStageSecrets: writeStageSecrets$1 } = await import("./storage-C1FNm2EP.mjs");
12013
- const { reconcileMissingSecrets } = await import("./reconcile-C0dsg-Gq.mjs");
12018
+ const { pullSecrets: pullSecrets$1 } = await import("./sync-CIzj1CQe.mjs");
12019
+ const { writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
12020
+ const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
12014
12021
  const { workspace } = await loadWorkspaceConfig$1();
12015
12022
  let secrets = await pullSecrets$1(options.stage, workspace);
12016
12023
  if (!secrets) {
@@ -12035,8 +12042,8 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
12035
12042
  const globalOptions = program.opts();
12036
12043
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12037
12044
  const { loadWorkspaceConfig: loadWorkspaceConfig$1 } = await import("./config.mjs");
12038
- const { reconcileMissingSecrets } = await import("./reconcile-C0dsg-Gq.mjs");
12039
- const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-C1FNm2EP.mjs");
12045
+ const { reconcileMissingSecrets } = await import("./reconcile--yaWO052.mjs");
12046
+ const { readStageSecrets: readStageSecrets$1, writeStageSecrets: writeStageSecrets$1 } = await import("./storage-D3lh8Xpq.mjs");
12040
12047
  const { workspace } = await loadWorkspaceConfig$1();
12041
12048
  const secrets = await readStageSecrets$1(options.stage, workspace.root);
12042
12049
  if (!secrets) {