@geekmidas/cli 1.10.8 → 1.10.10

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 (69) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{bundler-NpfYPBUo.cjs → bundler-Bm3Az_sv.cjs} +2 -2
  3. package/dist/{bundler-NpfYPBUo.cjs.map → bundler-Bm3Az_sv.cjs.map} +1 -1
  4. package/dist/{bundler-DQYjKFPm.mjs → bundler-kk_XJTRp.mjs} +2 -2
  5. package/dist/{bundler-DQYjKFPm.mjs.map → bundler-kk_XJTRp.mjs.map} +1 -1
  6. package/dist/config.d.cts +2 -2
  7. package/dist/config.d.mts +2 -2
  8. package/dist/{fullstack-secrets-BctGaE4E.cjs → fullstack-secrets-BC9t9wWB.cjs} +27 -1
  9. package/dist/fullstack-secrets-BC9t9wWB.cjs.map +1 -0
  10. package/dist/{fullstack-secrets-ca0Kyrvt.mjs → fullstack-secrets-DmUOfLeX.mjs} +16 -2
  11. package/dist/fullstack-secrets-DmUOfLeX.mjs.map +1 -0
  12. package/dist/{index-9tjTQjFt.d.mts → index-BdJZKXCJ.d.cts} +4 -2
  13. package/dist/index-BdJZKXCJ.d.cts.map +1 -0
  14. package/dist/{index-VOKKO-lm.d.cts → index-DB9VbcCD.d.mts} +4 -2
  15. package/dist/index-DB9VbcCD.d.mts.map +1 -0
  16. package/dist/index.cjs +174 -49
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.mjs +174 -49
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/openapi-BYxAWwok.cjs.map +1 -1
  21. package/dist/openapi-DenF-okj.mjs.map +1 -1
  22. package/dist/openapi.d.cts +1 -1
  23. package/dist/openapi.d.mts +1 -1
  24. package/dist/{reconcile-TEBsryVn.cjs → reconcile-BZ8j_-0z.cjs} +2 -2
  25. package/dist/{reconcile-TEBsryVn.cjs.map → reconcile-BZ8j_-0z.cjs.map} +1 -1
  26. package/dist/{reconcile-C5OyCA7V.mjs → reconcile-C0dsg-Gq.mjs} +2 -2
  27. package/dist/{reconcile-C5OyCA7V.mjs.map → reconcile-C0dsg-Gq.mjs.map} +1 -1
  28. package/dist/{storage-DmCbr6DI.mjs → storage-B7H2PPCS.mjs} +8 -1
  29. package/dist/{storage-DmCbr6DI.mjs.map → storage-B7H2PPCS.mjs.map} +1 -1
  30. package/dist/{storage-Dx_jZbq6.mjs → storage-C1FNm2EP.mjs} +1 -1
  31. package/dist/{storage-CoCNe0Pt.cjs → storage-Cs13jkJ9.cjs} +8 -1
  32. package/dist/{storage-CoCNe0Pt.cjs.map → storage-Cs13jkJ9.cjs.map} +1 -1
  33. package/dist/{storage-C7pmBq1u.cjs → storage-D6BGLgWf.cjs} +1 -1
  34. package/dist/{sync-6FoT41G3.mjs → sync-CyGe5f1I.mjs} +1 -1
  35. package/dist/{sync-CbeKrnQV.mjs → sync-CzXruMzP.mjs} +2 -2
  36. package/dist/{sync-CbeKrnQV.mjs.map → sync-CzXruMzP.mjs.map} +1 -1
  37. package/dist/sync-DLlwsrBs.cjs +4 -0
  38. package/dist/{sync-DdkKaHqP.cjs → sync-oCqELfeA.cjs} +2 -2
  39. package/dist/{sync-DdkKaHqP.cjs.map → sync-oCqELfeA.cjs.map} +1 -1
  40. package/dist/{types-C7QJJl9f.d.cts → types-D4MLWXSL.d.cts} +2 -2
  41. package/dist/{types-C7QJJl9f.d.cts.map → types-D4MLWXSL.d.cts.map} +1 -1
  42. package/dist/{types-Iqsq_FIG.d.mts → types-DwpLq_fp.d.mts} +2 -2
  43. package/dist/{types-Iqsq_FIG.d.mts.map → types-DwpLq_fp.d.mts.map} +1 -1
  44. package/dist/workspace/index.d.cts +2 -2
  45. package/dist/workspace/index.d.mts +2 -2
  46. package/dist/workspace-4SP3Gx4Y.cjs.map +1 -1
  47. package/dist/workspace-D4z4A4cq.mjs.map +1 -1
  48. package/package.json +3 -3
  49. package/src/dev/__tests__/index.spec.ts +73 -0
  50. package/src/dev/index.ts +42 -26
  51. package/src/docker/__tests__/compose.spec.ts +145 -1
  52. package/src/docker/compose.ts +97 -5
  53. package/src/init/index.ts +1 -0
  54. package/src/init/versions.ts +1 -1
  55. package/src/secrets/__tests__/generator.spec.ts +68 -0
  56. package/src/secrets/__tests__/storage.spec.ts +30 -0
  57. package/src/secrets/generator.ts +18 -0
  58. package/src/secrets/index.ts +9 -0
  59. package/src/secrets/storage.ts +7 -0
  60. package/src/secrets/types.ts +4 -0
  61. package/src/setup/__tests__/reconcile-secrets.spec.ts +59 -0
  62. package/src/setup/index.ts +52 -16
  63. package/src/types.ts +1 -1
  64. package/src/workspace/types.ts +2 -0
  65. package/dist/fullstack-secrets-BctGaE4E.cjs.map +0 -1
  66. package/dist/fullstack-secrets-ca0Kyrvt.mjs.map +0 -1
  67. package/dist/index-9tjTQjFt.d.mts.map +0 -1
  68. package/dist/index-VOKKO-lm.d.cts.map +0 -1
  69. package/dist/sync-RsnjXYwG.cjs +0 -4
@@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest';
2
2
  import {
3
3
  createStageSecrets,
4
4
  generateConnectionUrls,
5
+ generateMinioEndpoint,
5
6
  generatePostgresUrl,
6
7
  generateRabbitmqUrl,
7
8
  generateRedisUrl,
@@ -65,6 +66,16 @@ describe('generateServiceCredentials', () => {
65
66
  expect(creds.vhost).toBe('/');
66
67
  expect(creds.password).toHaveLength(32);
67
68
  });
69
+
70
+ it('should generate minio credentials with defaults', () => {
71
+ const creds = generateServiceCredentials('minio');
72
+
73
+ expect(creds.host).toBe('localhost');
74
+ expect(creds.port).toBe(9000);
75
+ expect(creds.username).toBe('app');
76
+ expect(creds.bucket).toBe('app');
77
+ expect(creds.password).toHaveLength(32);
78
+ });
68
79
  });
69
80
 
70
81
  describe('generateServicesCredentials', () => {
@@ -142,6 +153,33 @@ describe('generateRedisUrl', () => {
142
153
  });
143
154
  });
144
155
 
156
+ describe('generateMinioEndpoint', () => {
157
+ it('should generate valid minio endpoint URL', () => {
158
+ const creds: ServiceCredentials = {
159
+ host: 'localhost',
160
+ port: 9000,
161
+ username: 'app',
162
+ password: 'secret123',
163
+ bucket: 'my-bucket',
164
+ };
165
+
166
+ const url = generateMinioEndpoint(creds);
167
+ expect(url).toBe('http://localhost:9000');
168
+ });
169
+
170
+ it('should use custom host and port', () => {
171
+ const creds: ServiceCredentials = {
172
+ host: 'minio.example.com',
173
+ port: 9090,
174
+ username: 'app',
175
+ password: 'secret',
176
+ };
177
+
178
+ const url = generateMinioEndpoint(creds);
179
+ expect(url).toBe('http://minio.example.com:9090');
180
+ });
181
+ });
182
+
145
183
  describe('generateRabbitmqUrl', () => {
146
184
  it('should generate valid rabbitmq URL with default vhost', () => {
147
185
  const creds: ServiceCredentials = {
@@ -209,11 +247,34 @@ describe('generateConnectionUrls', () => {
209
247
  password: 'rmq-pass',
210
248
  vhost: '/',
211
249
  },
250
+ minio: {
251
+ host: 'minio',
252
+ port: 9000,
253
+ username: 'app',
254
+ password: 'minio-pass',
255
+ bucket: 'app',
256
+ },
212
257
  });
213
258
 
214
259
  expect(urls.DATABASE_URL).toBeDefined();
215
260
  expect(urls.REDIS_URL).toBeDefined();
216
261
  expect(urls.RABBITMQ_URL).toBeDefined();
262
+ expect(urls.S3_ENDPOINT).toBe('http://minio:9000');
263
+ });
264
+
265
+ it('should generate S3_ENDPOINT for minio', () => {
266
+ const urls = generateConnectionUrls({
267
+ minio: {
268
+ host: 'localhost',
269
+ port: 9000,
270
+ username: 'app',
271
+ password: 'secret',
272
+ bucket: 'my-bucket',
273
+ },
274
+ });
275
+
276
+ expect(urls.S3_ENDPOINT).toBe('http://localhost:9000');
277
+ expect(urls.DATABASE_URL).toBeUndefined();
217
278
  });
218
279
  });
219
280
 
@@ -246,6 +307,13 @@ describe('createStageSecrets', () => {
246
307
  expect(secrets.urls.REDIS_URL).toBeDefined();
247
308
  expect(secrets.urls.RABBITMQ_URL).toBeDefined();
248
309
  });
310
+
311
+ it('should generate S3_ENDPOINT for minio', () => {
312
+ const secrets = createStageSecrets('production', ['minio']);
313
+
314
+ expect(secrets.services.minio).toBeDefined();
315
+ expect(secrets.urls.S3_ENDPOINT).toBe('http://localhost:9000');
316
+ });
249
317
  });
250
318
 
251
319
  describe('rotateServicePassword', () => {
@@ -338,6 +338,36 @@ describe('toEmbeddableSecrets', () => {
338
338
  expect(embeddable.RABBITMQ_VHOST).toBe('/myapp');
339
339
  });
340
340
 
341
+ it('should include minio service credentials', () => {
342
+ const secrets: StageSecrets = {
343
+ stage: 'production',
344
+ createdAt: new Date().toISOString(),
345
+ updatedAt: new Date().toISOString(),
346
+ services: {
347
+ minio: {
348
+ host: 'localhost',
349
+ port: 9000,
350
+ username: 'myaccesskey',
351
+ password: 'mysecretkey',
352
+ bucket: 'my-bucket',
353
+ },
354
+ },
355
+ urls: {
356
+ S3_ENDPOINT: 'http://localhost:9000',
357
+ },
358
+ custom: {},
359
+ };
360
+
361
+ const embeddable = toEmbeddableSecrets(secrets);
362
+
363
+ expect(embeddable.S3_ENDPOINT).toBe('http://localhost:9000');
364
+ expect(embeddable.S3_ACCESS_KEY_ID).toBe('myaccesskey');
365
+ expect(embeddable.S3_SECRET_ACCESS_KEY).toBe('mysecretkey');
366
+ expect(embeddable.S3_BUCKET).toBe('my-bucket');
367
+ expect(embeddable.S3_REGION).toBe('eu-west-1');
368
+ expect(embeddable.S3_FORCE_PATH_STYLE).toBe('true');
369
+ });
370
+
341
371
  it('should handle all services and custom secrets together', () => {
342
372
  const secrets: StageSecrets = {
343
373
  stage: 'production',
@@ -34,6 +34,12 @@ const SERVICE_DEFAULTS: Record<
34
34
  username: 'app',
35
35
  vhost: '/',
36
36
  },
37
+ minio: {
38
+ host: 'localhost',
39
+ port: 9000,
40
+ username: 'app',
41
+ bucket: 'app',
42
+ },
37
43
  };
38
44
 
39
45
  /**
@@ -89,6 +95,14 @@ export function generateRabbitmqUrl(creds: ServiceCredentials): string {
89
95
  return `amqp://${username}:${encodeURIComponent(password)}@${host}:${port}/${encodedVhost}`;
90
96
  }
91
97
 
98
+ /**
99
+ * Generate endpoint URL for MinIO (S3-compatible).
100
+ */
101
+ export function generateMinioEndpoint(creds: ServiceCredentials): string {
102
+ const { host, port } = creds;
103
+ return `http://${host}:${port}`;
104
+ }
105
+
92
106
  /**
93
107
  * Generate connection URLs from service credentials.
94
108
  */
@@ -109,6 +123,10 @@ export function generateConnectionUrls(
109
123
  urls.RABBITMQ_URL = generateRabbitmqUrl(services.rabbitmq);
110
124
  }
111
125
 
126
+ if (services.minio) {
127
+ urls.S3_ENDPOINT = generateMinioEndpoint(services.minio);
128
+ }
129
+
112
130
  return urls;
113
131
  }
114
132
 
@@ -129,6 +129,9 @@ export async function secretsInitCommand(
129
129
  if (secrets.urls.RABBITMQ_URL) {
130
130
  logger.log(` RABBITMQ_URL: ${maskUrl(secrets.urls.RABBITMQ_URL)}`);
131
131
  }
132
+ if (secrets.urls.S3_ENDPOINT) {
133
+ logger.log(` S3_ENDPOINT: ${secrets.urls.S3_ENDPOINT}`);
134
+ }
132
135
 
133
136
  if (Object.keys(secrets.custom).length > 0) {
134
137
  logger.log(`\n Custom secrets: ${Object.keys(secrets.custom).length}`);
@@ -234,6 +237,9 @@ export async function secretsShowCommand(
234
237
  if (creds.vhost) {
235
238
  logger.log(` vhost: ${creds.vhost}`);
236
239
  }
240
+ if (creds.bucket) {
241
+ logger.log(` bucket: ${creds.bucket}`);
242
+ }
237
243
  }
238
244
  }
239
245
 
@@ -254,6 +260,9 @@ export async function secretsShowCommand(
254
260
  ` RABBITMQ_URL: ${reveal ? secrets.urls.RABBITMQ_URL : maskUrl(secrets.urls.RABBITMQ_URL)}`,
255
261
  );
256
262
  }
263
+ if (secrets.urls.S3_ENDPOINT) {
264
+ logger.log(` S3_ENDPOINT: ${secrets.urls.S3_ENDPOINT}`);
265
+ }
257
266
 
258
267
  // Show custom secrets
259
268
  const customKeys = Object.keys(secrets.custom);
@@ -208,6 +208,13 @@ export function toEmbeddableSecrets(secrets: StageSecrets): EmbeddableSecrets {
208
208
  RABBITMQ_PORT: String(secrets.services.rabbitmq.port),
209
209
  RABBITMQ_VHOST: secrets.services.rabbitmq.vhost ?? '/',
210
210
  }),
211
+ ...(secrets.services.minio && {
212
+ S3_ACCESS_KEY_ID: secrets.services.minio.username,
213
+ S3_SECRET_ACCESS_KEY: secrets.services.minio.password,
214
+ S3_BUCKET: secrets.services.minio.bucket ?? 'app',
215
+ S3_REGION: 'eu-west-1',
216
+ S3_FORCE_PATH_STYLE: 'true',
217
+ }),
211
218
  };
212
219
  }
213
220
 
@@ -10,6 +10,8 @@ export interface ServiceCredentials {
10
10
  database?: string;
11
11
  /** Virtual host (for rabbitmq) */
12
12
  vhost?: string;
13
+ /** Bucket name (for minio) */
14
+ bucket?: string;
13
15
  }
14
16
 
15
17
  /** Stage secrets configuration */
@@ -25,12 +27,14 @@ export interface StageSecrets {
25
27
  postgres?: ServiceCredentials;
26
28
  redis?: ServiceCredentials;
27
29
  rabbitmq?: ServiceCredentials;
30
+ minio?: ServiceCredentials;
28
31
  };
29
32
  /** Generated connection URLs */
30
33
  urls: {
31
34
  DATABASE_URL?: string;
32
35
  REDIS_URL?: string;
33
36
  RABBITMQ_URL?: string;
37
+ S3_ENDPOINT?: string;
34
38
  };
35
39
  /** Custom user-defined secrets */
36
40
  custom: Record<string, string>;
@@ -124,6 +124,65 @@ describe('reconcileSecrets', () => {
124
124
  expect(result).toBeNull();
125
125
  });
126
126
 
127
+ it('should add missing service credentials when workspace config adds a new service', () => {
128
+ const workspace = createWorkspace({
129
+ services: { db: true, storage: true },
130
+ });
131
+ // Secrets only have postgres, not minio
132
+ const secrets = createSecrets({
133
+ NODE_ENV: 'development',
134
+ PORT: '3000',
135
+ API_DATABASE_URL: 'postgresql://api:pass@localhost:5432/test_dev',
136
+ API_DB_PASSWORD: 'pass',
137
+ AUTH_DATABASE_URL: 'postgresql://auth:pass@localhost:5432/test_dev',
138
+ AUTH_DB_PASSWORD: 'pass',
139
+ WEB_URL: 'http://localhost:3002',
140
+ BETTER_AUTH_SECRET: 'existing',
141
+ BETTER_AUTH_URL: 'http://localhost:3001',
142
+ BETTER_AUTH_TRUSTED_ORIGINS:
143
+ 'http://localhost:3000,http://localhost:3001,http://localhost:3002',
144
+ AUTH_PORT: '3001',
145
+ AUTH_URL: 'http://localhost:3001',
146
+ });
147
+
148
+ const result = reconcileSecrets(secrets, workspace);
149
+
150
+ expect(result).not.toBeNull();
151
+ expect(result!.services.minio).toBeDefined();
152
+ expect(result!.services.minio!.host).toBe('localhost');
153
+ expect(result!.services.minio!.port).toBe(9000);
154
+ expect(result!.services.minio!.bucket).toBe('app');
155
+ expect(result!.services.minio!.password).toHaveLength(32);
156
+ expect(result!.urls.S3_ENDPOINT).toBe('http://localhost:9000');
157
+ // Existing postgres should be preserved
158
+ expect(result!.services.postgres).toEqual(secrets.services.postgres);
159
+ });
160
+
161
+ it('should not regenerate credentials for existing services', () => {
162
+ const workspace = createWorkspace({
163
+ services: { db: true, storage: true },
164
+ });
165
+ // Include ALL expected custom keys so reconcile has nothing to add
166
+ const expected = generateFullstackCustomSecrets(
167
+ createWorkspace({ services: { db: true, storage: true } }),
168
+ );
169
+ const secrets = createSecrets(expected);
170
+ // Add existing minio creds
171
+ secrets.services.minio = {
172
+ host: 'localhost',
173
+ port: 9000,
174
+ username: 'mykey',
175
+ password: 'mysecret',
176
+ bucket: 'my-bucket',
177
+ };
178
+ secrets.urls.S3_ENDPOINT = 'http://localhost:9000';
179
+
180
+ const result = reconcileSecrets(secrets, workspace);
181
+
182
+ // No changes needed — all services and custom keys present
183
+ expect(result).toBeNull();
184
+ });
185
+
127
186
  it('should return null for single-app workspaces', () => {
128
187
  const workspace = createWorkspace({
129
188
  apps: {
@@ -3,7 +3,11 @@ import { join } from 'node:path';
3
3
  import prompts from 'prompts';
4
4
  import { loadWorkspaceConfig } from '../config.js';
5
5
  import { resolveServicePorts, startWorkspaceServices } from '../dev/index.js';
6
- import { createStageSecrets } from '../secrets/generator.js';
6
+ import {
7
+ createStageSecrets,
8
+ generateConnectionUrls,
9
+ generateServiceCredentials,
10
+ } from '../secrets/generator.js';
7
11
  import {
8
12
  readStageSecrets,
9
13
  secretsExist,
@@ -153,32 +157,63 @@ export function reconcileSecrets(
153
157
  secrets: StageSecrets,
154
158
  workspace: NormalizedWorkspace,
155
159
  ): StageSecrets | null {
156
- const isMultiApp = Object.keys(workspace.apps).length > 1;
157
- if (!isMultiApp) {
158
- return null;
160
+ let changed = false;
161
+ let result = { ...secrets };
162
+
163
+ // Reconcile service credentials: add missing services
164
+ const serviceMap: {
165
+ key: keyof typeof workspace.services;
166
+ name: ComposeServiceName;
167
+ }[] = [
168
+ { key: 'db', name: 'postgres' },
169
+ { key: 'cache', name: 'redis' },
170
+ { key: 'storage', name: 'minio' },
171
+ ];
172
+
173
+ for (const { key, name } of serviceMap) {
174
+ if (workspace.services[key] && !result.services[name]) {
175
+ const creds = generateServiceCredentials(name);
176
+ result = {
177
+ ...result,
178
+ services: { ...result.services, [name]: creds },
179
+ };
180
+ result.urls = generateConnectionUrls(result.services);
181
+ logger.log(` 🔄 Adding missing service credentials: ${name}`);
182
+ changed = true;
183
+ }
159
184
  }
160
185
 
161
- const expected = generateFullstackCustomSecrets(workspace);
162
- const missing: Record<string, string> = {};
186
+ // Reconcile custom secrets for multi-app workspaces
187
+ const isMultiApp = Object.keys(workspace.apps).length > 1;
188
+ if (isMultiApp) {
189
+ const expected = generateFullstackCustomSecrets(workspace);
190
+ const missing: Record<string, string> = {};
191
+
192
+ for (const [key, value] of Object.entries(expected)) {
193
+ if (!(key in result.custom)) {
194
+ missing[key] = value;
195
+ }
196
+ }
163
197
 
164
- for (const [key, value] of Object.entries(expected)) {
165
- if (!(key in secrets.custom)) {
166
- missing[key] = value;
198
+ if (Object.keys(missing).length > 0) {
199
+ logger.log(
200
+ ` 🔄 Adding missing secrets: ${Object.keys(missing).join(', ')}`,
201
+ );
202
+ result = {
203
+ ...result,
204
+ custom: { ...result.custom, ...missing },
205
+ };
206
+ changed = true;
167
207
  }
168
208
  }
169
209
 
170
- if (Object.keys(missing).length === 0) {
210
+ if (!changed) {
171
211
  return null;
172
212
  }
173
213
 
174
- logger.log(
175
- ` 🔄 Adding missing secrets: ${Object.keys(missing).join(', ')}`,
176
- );
177
-
178
214
  return {
179
- ...secrets,
215
+ ...result,
180
216
  updatedAt: new Date().toISOString(),
181
- custom: { ...secrets.custom, ...missing },
182
217
  };
183
218
  }
184
219
 
@@ -194,6 +229,7 @@ async function generateFreshSecrets(
194
229
  const serviceNames: ComposeServiceName[] = [];
195
230
  if (workspace.services.db) serviceNames.push('postgres');
196
231
  if (workspace.services.cache) serviceNames.push('redis');
232
+ if (workspace.services.storage) serviceNames.push('minio');
197
233
 
198
234
  // Create base secrets with service credentials
199
235
  const secrets = createStageSecrets(stage, serviceNames, {
package/src/types.ts CHANGED
@@ -78,7 +78,7 @@ export interface ServiceConfig {
78
78
  }
79
79
 
80
80
  /** Supported docker-compose service names */
81
- export type ComposeServiceName = 'postgres' | 'redis' | 'rabbitmq';
81
+ export type ComposeServiceName = 'postgres' | 'redis' | 'rabbitmq' | 'minio';
82
82
 
83
83
  /** Services configuration - can be boolean (use defaults) or object with version */
84
84
  export type ComposeServicesConfig = {
@@ -168,6 +168,8 @@ export interface ServicesConfig {
168
168
  cache?: boolean | ServiceImageConfig;
169
169
  /** Mail service (mailpit for dev) */
170
170
  mail?: boolean | MailServiceConfig;
171
+ /** MinIO S3-compatible object storage (default: minio/minio:latest) */
172
+ storage?: boolean | ServiceImageConfig;
171
173
  }
172
174
 
173
175
  /**
@@ -1 +0,0 @@
1
- {"version":3,"file":"fullstack-secrets-BctGaE4E.cjs","names":["SERVICE_DEFAULTS: Record<\n\tComposeServiceName,\n\tOmit<ServiceCredentials, 'password'>\n>","service: ComposeServiceName","services: ComposeServiceName[]","result: StageSecrets['services']","creds: ServiceCredentials","services: StageSecrets['services']","urls: StageSecrets['urls']","stage: string","options?: { projectName?: string }","secrets: StageSecrets","newCreds: ServiceCredentials","appName: string","password: string","projectName: string","workspace: NormalizedWorkspace","customs: Record<string, string>","frontendPorts: number[]","upperName","secrets: StageSecrets","workspaceRoot: string"],"sources":["../src/secrets/generator.ts","../src/setup/fullstack-secrets.ts"],"sourcesContent":["import { randomBytes } from 'node:crypto';\nimport type { ComposeServiceName } from '../types';\nimport type { ServiceCredentials, StageSecrets } from './types';\n\n/**\n * Generate a secure random password using URL-safe base64 characters.\n * @param length Password length (default: 32)\n */\nexport function generateSecurePassword(length = 32): string {\n\treturn randomBytes(Math.ceil((length * 3) / 4))\n\t\t.toString('base64url')\n\t\t.slice(0, length);\n}\n\n/** Default service configurations (localhost for local dev via Docker port mapping) */\nconst SERVICE_DEFAULTS: Record<\n\tComposeServiceName,\n\tOmit<ServiceCredentials, 'password'>\n> = {\n\tpostgres: {\n\t\thost: 'localhost',\n\t\tport: 5432,\n\t\tusername: 'app',\n\t\tdatabase: 'app',\n\t},\n\tredis: {\n\t\thost: 'localhost',\n\t\tport: 6379,\n\t\tusername: 'default',\n\t},\n\trabbitmq: {\n\t\thost: 'localhost',\n\t\tport: 5672,\n\t\tusername: 'app',\n\t\tvhost: '/',\n\t},\n};\n\n/**\n * Generate credentials for a specific service.\n */\nexport function generateServiceCredentials(\n\tservice: ComposeServiceName,\n): ServiceCredentials {\n\tconst defaults = SERVICE_DEFAULTS[service];\n\treturn {\n\t\t...defaults,\n\t\tpassword: generateSecurePassword(),\n\t};\n}\n\n/**\n * Generate credentials for multiple services.\n */\nexport function generateServicesCredentials(\n\tservices: ComposeServiceName[],\n): StageSecrets['services'] {\n\tconst result: StageSecrets['services'] = {};\n\n\tfor (const service of services) {\n\t\tresult[service] = generateServiceCredentials(service);\n\t}\n\n\treturn result;\n}\n\n/**\n * Generate connection URL for PostgreSQL.\n */\nexport function generatePostgresUrl(creds: ServiceCredentials): string {\n\tconst { username, password, host, port, database } = creds;\n\treturn `postgresql://${username}:${encodeURIComponent(password)}@${host}:${port}/${database}`;\n}\n\n/**\n * Generate connection URL for Redis.\n */\nexport function generateRedisUrl(creds: ServiceCredentials): string {\n\tconst { password, host, port } = creds;\n\treturn `redis://:${encodeURIComponent(password)}@${host}:${port}`;\n}\n\n/**\n * Generate connection URL for RabbitMQ.\n */\nexport function generateRabbitmqUrl(creds: ServiceCredentials): string {\n\tconst { username, password, host, port, vhost } = creds;\n\tconst encodedVhost = encodeURIComponent(vhost ?? '/');\n\treturn `amqp://${username}:${encodeURIComponent(password)}@${host}:${port}/${encodedVhost}`;\n}\n\n/**\n * Generate connection URLs from service credentials.\n */\nexport function generateConnectionUrls(\n\tservices: StageSecrets['services'],\n): StageSecrets['urls'] {\n\tconst urls: StageSecrets['urls'] = {};\n\n\tif (services.postgres) {\n\t\turls.DATABASE_URL = generatePostgresUrl(services.postgres);\n\t}\n\n\tif (services.redis) {\n\t\turls.REDIS_URL = generateRedisUrl(services.redis);\n\t}\n\n\tif (services.rabbitmq) {\n\t\turls.RABBITMQ_URL = generateRabbitmqUrl(services.rabbitmq);\n\t}\n\n\treturn urls;\n}\n\n/**\n * Create a new StageSecrets object with generated credentials.\n * @param stage - The deployment stage (e.g., 'development', 'production')\n * @param services - List of services to generate credentials for\n * @param options - Optional configuration\n * @param options.projectName - Project name used to derive the database name (e.g., 'myapp' → 'myapp_dev')\n */\nexport function createStageSecrets(\n\tstage: string,\n\tservices: ComposeServiceName[],\n\toptions?: { projectName?: string },\n): StageSecrets {\n\tconst now = new Date().toISOString();\n\tconst serviceCredentials = generateServicesCredentials(services);\n\n\t// Override postgres database name with project-derived name if provided\n\tif (options?.projectName && serviceCredentials.postgres) {\n\t\tserviceCredentials.postgres.database = `${options.projectName.replace(/-/g, '_')}_dev`;\n\t}\n\n\tconst urls = generateConnectionUrls(serviceCredentials);\n\n\treturn {\n\t\tstage,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t\tservices: serviceCredentials,\n\t\turls,\n\t\tcustom: {},\n\t};\n}\n\n/**\n * Rotate password for a specific service.\n */\nexport function rotateServicePassword(\n\tsecrets: StageSecrets,\n\tservice: ComposeServiceName,\n): StageSecrets {\n\tconst currentCreds = secrets.services[service];\n\tif (!currentCreds) {\n\t\tthrow new Error(`Service \"${service}\" not configured in secrets`);\n\t}\n\n\tconst newCreds: ServiceCredentials = {\n\t\t...currentCreds,\n\t\tpassword: generateSecurePassword(),\n\t};\n\n\tconst newServices = {\n\t\t...secrets.services,\n\t\t[service]: newCreds,\n\t};\n\n\treturn {\n\t\t...secrets,\n\t\tupdatedAt: new Date().toISOString(),\n\t\tservices: newServices,\n\t\turls: generateConnectionUrls(newServices),\n\t};\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { generateSecurePassword } from '../secrets/generator.js';\nimport type { StageSecrets } from '../secrets/types.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\n\n/**\n * Generate a secure random password for database users.\n * Uses a combination of timestamp and random bytes for uniqueness.\n */\nexport function generateDbPassword(): string {\n\treturn `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Generate database URL for an app.\n * All apps connect to the same database, but use different users/schemas.\n */\nexport function generateDbUrl(\n\tappName: string,\n\tpassword: string,\n\tprojectName: string,\n\thost = 'localhost',\n\tport = 5432,\n): string {\n\tconst userName = appName.replace(/-/g, '_');\n\tconst dbName = `${projectName.replace(/-/g, '_')}_dev`;\n\treturn `postgresql://${userName}:${password}@${host}:${port}/${dbName}`;\n}\n\n/**\n * Generate fullstack-aware custom secrets for a workspace.\n *\n * Generates:\n * - Common secrets: NODE_ENV, PORT, LOG_LEVEL, JWT_SECRET\n * - Per-app database passwords and URLs for backend apps with db service\n * - Better-auth secrets for apps using the better-auth framework\n */\nexport function generateFullstackCustomSecrets(\n\tworkspace: NormalizedWorkspace,\n): Record<string, string> {\n\tconst hasDb = !!workspace.services.db;\n\tconst customs: Record<string, string> = {\n\t\tNODE_ENV: 'development',\n\t\tPORT: '3000',\n\t\tLOG_LEVEL: 'debug',\n\t\tJWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n\t};\n\n\tif (!hasDb) {\n\t\treturn customs;\n\t}\n\n\t// Collect all frontend ports for trusted origins\n\tconst frontendPorts: number[] = [];\n\n\tfor (const [appName, appConfig] of Object.entries(workspace.apps)) {\n\t\tif (appConfig.type === 'frontend') {\n\t\t\tfrontendPorts.push(appConfig.port);\n\t\t\tconst upperName = appName.toUpperCase();\n\t\t\tcustoms[`${upperName}_URL`] = `http://localhost:${appConfig.port}`;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Backend apps with database: generate per-app DB passwords and URLs\n\t\tconst password = generateDbPassword();\n\t\tconst upperName = appName.toUpperCase();\n\n\t\tcustoms[`${upperName}_DATABASE_URL`] = generateDbUrl(\n\t\t\tappName,\n\t\t\tpassword,\n\t\t\tworkspace.name,\n\t\t);\n\t\tcustoms[`${upperName}_DB_PASSWORD`] = password;\n\n\t\t// Better-auth framework secrets\n\t\tif (appConfig.framework === 'better-auth') {\n\t\t\tcustoms.AUTH_PORT = String(appConfig.port);\n\t\t\tcustoms.AUTH_URL = `http://localhost:${appConfig.port}`;\n\t\t\tcustoms.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${generateSecurePassword(16)}`;\n\t\t\tcustoms.BETTER_AUTH_URL = `http://localhost:${appConfig.port}`;\n\t\t}\n\t}\n\n\t// Generate trusted origins for better-auth (all app ports)\n\tif (customs.BETTER_AUTH_SECRET) {\n\t\tconst allPorts = Object.values(workspace.apps).map((a) => a.port);\n\t\tcustoms.BETTER_AUTH_TRUSTED_ORIGINS = allPorts\n\t\t\t.map((p) => `http://localhost:${p}`)\n\t\t\t.join(',');\n\t}\n\n\treturn customs;\n}\n\n/**\n * Extract *_DB_PASSWORD keys from secrets and write docker/.env.\n *\n * The docker/.env file contains database passwords that the PostgreSQL\n * init script reads to create per-app database users.\n */\nexport async function writeDockerEnvFromSecrets(\n\tsecrets: StageSecrets,\n\tworkspaceRoot: string,\n): Promise<void> {\n\tconst dbPasswordEntries = Object.entries(secrets.custom).filter(([key]) =>\n\t\tkey.endsWith('_DB_PASSWORD'),\n\t);\n\n\tif (dbPasswordEntries.length === 0) {\n\t\treturn;\n\t}\n\n\tconst envContent = `# Auto-generated docker environment file\n# Contains database passwords for docker-compose postgres init\n# This file is gitignored - do not commit to version control\n${dbPasswordEntries.map(([key, value]) => `${key}=${value}`).join('\\n')}\n`;\n\n\tconst envPath = join(workspaceRoot, 'docker', '.env');\n\tawait mkdir(dirname(envPath), { recursive: true });\n\tawait writeFile(envPath, envContent);\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fullstack-secrets-ca0Kyrvt.mjs","names":["SERVICE_DEFAULTS: Record<\n\tComposeServiceName,\n\tOmit<ServiceCredentials, 'password'>\n>","service: ComposeServiceName","services: ComposeServiceName[]","result: StageSecrets['services']","creds: ServiceCredentials","services: StageSecrets['services']","urls: StageSecrets['urls']","stage: string","options?: { projectName?: string }","secrets: StageSecrets","newCreds: ServiceCredentials","appName: string","password: string","projectName: string","workspace: NormalizedWorkspace","customs: Record<string, string>","frontendPorts: number[]","upperName","secrets: StageSecrets","workspaceRoot: string"],"sources":["../src/secrets/generator.ts","../src/setup/fullstack-secrets.ts"],"sourcesContent":["import { randomBytes } from 'node:crypto';\nimport type { ComposeServiceName } from '../types';\nimport type { ServiceCredentials, StageSecrets } from './types';\n\n/**\n * Generate a secure random password using URL-safe base64 characters.\n * @param length Password length (default: 32)\n */\nexport function generateSecurePassword(length = 32): string {\n\treturn randomBytes(Math.ceil((length * 3) / 4))\n\t\t.toString('base64url')\n\t\t.slice(0, length);\n}\n\n/** Default service configurations (localhost for local dev via Docker port mapping) */\nconst SERVICE_DEFAULTS: Record<\n\tComposeServiceName,\n\tOmit<ServiceCredentials, 'password'>\n> = {\n\tpostgres: {\n\t\thost: 'localhost',\n\t\tport: 5432,\n\t\tusername: 'app',\n\t\tdatabase: 'app',\n\t},\n\tredis: {\n\t\thost: 'localhost',\n\t\tport: 6379,\n\t\tusername: 'default',\n\t},\n\trabbitmq: {\n\t\thost: 'localhost',\n\t\tport: 5672,\n\t\tusername: 'app',\n\t\tvhost: '/',\n\t},\n};\n\n/**\n * Generate credentials for a specific service.\n */\nexport function generateServiceCredentials(\n\tservice: ComposeServiceName,\n): ServiceCredentials {\n\tconst defaults = SERVICE_DEFAULTS[service];\n\treturn {\n\t\t...defaults,\n\t\tpassword: generateSecurePassword(),\n\t};\n}\n\n/**\n * Generate credentials for multiple services.\n */\nexport function generateServicesCredentials(\n\tservices: ComposeServiceName[],\n): StageSecrets['services'] {\n\tconst result: StageSecrets['services'] = {};\n\n\tfor (const service of services) {\n\t\tresult[service] = generateServiceCredentials(service);\n\t}\n\n\treturn result;\n}\n\n/**\n * Generate connection URL for PostgreSQL.\n */\nexport function generatePostgresUrl(creds: ServiceCredentials): string {\n\tconst { username, password, host, port, database } = creds;\n\treturn `postgresql://${username}:${encodeURIComponent(password)}@${host}:${port}/${database}`;\n}\n\n/**\n * Generate connection URL for Redis.\n */\nexport function generateRedisUrl(creds: ServiceCredentials): string {\n\tconst { password, host, port } = creds;\n\treturn `redis://:${encodeURIComponent(password)}@${host}:${port}`;\n}\n\n/**\n * Generate connection URL for RabbitMQ.\n */\nexport function generateRabbitmqUrl(creds: ServiceCredentials): string {\n\tconst { username, password, host, port, vhost } = creds;\n\tconst encodedVhost = encodeURIComponent(vhost ?? '/');\n\treturn `amqp://${username}:${encodeURIComponent(password)}@${host}:${port}/${encodedVhost}`;\n}\n\n/**\n * Generate connection URLs from service credentials.\n */\nexport function generateConnectionUrls(\n\tservices: StageSecrets['services'],\n): StageSecrets['urls'] {\n\tconst urls: StageSecrets['urls'] = {};\n\n\tif (services.postgres) {\n\t\turls.DATABASE_URL = generatePostgresUrl(services.postgres);\n\t}\n\n\tif (services.redis) {\n\t\turls.REDIS_URL = generateRedisUrl(services.redis);\n\t}\n\n\tif (services.rabbitmq) {\n\t\turls.RABBITMQ_URL = generateRabbitmqUrl(services.rabbitmq);\n\t}\n\n\treturn urls;\n}\n\n/**\n * Create a new StageSecrets object with generated credentials.\n * @param stage - The deployment stage (e.g., 'development', 'production')\n * @param services - List of services to generate credentials for\n * @param options - Optional configuration\n * @param options.projectName - Project name used to derive the database name (e.g., 'myapp' → 'myapp_dev')\n */\nexport function createStageSecrets(\n\tstage: string,\n\tservices: ComposeServiceName[],\n\toptions?: { projectName?: string },\n): StageSecrets {\n\tconst now = new Date().toISOString();\n\tconst serviceCredentials = generateServicesCredentials(services);\n\n\t// Override postgres database name with project-derived name if provided\n\tif (options?.projectName && serviceCredentials.postgres) {\n\t\tserviceCredentials.postgres.database = `${options.projectName.replace(/-/g, '_')}_dev`;\n\t}\n\n\tconst urls = generateConnectionUrls(serviceCredentials);\n\n\treturn {\n\t\tstage,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t\tservices: serviceCredentials,\n\t\turls,\n\t\tcustom: {},\n\t};\n}\n\n/**\n * Rotate password for a specific service.\n */\nexport function rotateServicePassword(\n\tsecrets: StageSecrets,\n\tservice: ComposeServiceName,\n): StageSecrets {\n\tconst currentCreds = secrets.services[service];\n\tif (!currentCreds) {\n\t\tthrow new Error(`Service \"${service}\" not configured in secrets`);\n\t}\n\n\tconst newCreds: ServiceCredentials = {\n\t\t...currentCreds,\n\t\tpassword: generateSecurePassword(),\n\t};\n\n\tconst newServices = {\n\t\t...secrets.services,\n\t\t[service]: newCreds,\n\t};\n\n\treturn {\n\t\t...secrets,\n\t\tupdatedAt: new Date().toISOString(),\n\t\tservices: newServices,\n\t\turls: generateConnectionUrls(newServices),\n\t};\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { generateSecurePassword } from '../secrets/generator.js';\nimport type { StageSecrets } from '../secrets/types.js';\nimport type { NormalizedWorkspace } from '../workspace/types.js';\n\n/**\n * Generate a secure random password for database users.\n * Uses a combination of timestamp and random bytes for uniqueness.\n */\nexport function generateDbPassword(): string {\n\treturn `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Generate database URL for an app.\n * All apps connect to the same database, but use different users/schemas.\n */\nexport function generateDbUrl(\n\tappName: string,\n\tpassword: string,\n\tprojectName: string,\n\thost = 'localhost',\n\tport = 5432,\n): string {\n\tconst userName = appName.replace(/-/g, '_');\n\tconst dbName = `${projectName.replace(/-/g, '_')}_dev`;\n\treturn `postgresql://${userName}:${password}@${host}:${port}/${dbName}`;\n}\n\n/**\n * Generate fullstack-aware custom secrets for a workspace.\n *\n * Generates:\n * - Common secrets: NODE_ENV, PORT, LOG_LEVEL, JWT_SECRET\n * - Per-app database passwords and URLs for backend apps with db service\n * - Better-auth secrets for apps using the better-auth framework\n */\nexport function generateFullstackCustomSecrets(\n\tworkspace: NormalizedWorkspace,\n): Record<string, string> {\n\tconst hasDb = !!workspace.services.db;\n\tconst customs: Record<string, string> = {\n\t\tNODE_ENV: 'development',\n\t\tPORT: '3000',\n\t\tLOG_LEVEL: 'debug',\n\t\tJWT_SECRET: `dev-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n\t};\n\n\tif (!hasDb) {\n\t\treturn customs;\n\t}\n\n\t// Collect all frontend ports for trusted origins\n\tconst frontendPorts: number[] = [];\n\n\tfor (const [appName, appConfig] of Object.entries(workspace.apps)) {\n\t\tif (appConfig.type === 'frontend') {\n\t\t\tfrontendPorts.push(appConfig.port);\n\t\t\tconst upperName = appName.toUpperCase();\n\t\t\tcustoms[`${upperName}_URL`] = `http://localhost:${appConfig.port}`;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Backend apps with database: generate per-app DB passwords and URLs\n\t\tconst password = generateDbPassword();\n\t\tconst upperName = appName.toUpperCase();\n\n\t\tcustoms[`${upperName}_DATABASE_URL`] = generateDbUrl(\n\t\t\tappName,\n\t\t\tpassword,\n\t\t\tworkspace.name,\n\t\t);\n\t\tcustoms[`${upperName}_DB_PASSWORD`] = password;\n\n\t\t// Better-auth framework secrets\n\t\tif (appConfig.framework === 'better-auth') {\n\t\t\tcustoms.AUTH_PORT = String(appConfig.port);\n\t\t\tcustoms.AUTH_URL = `http://localhost:${appConfig.port}`;\n\t\t\tcustoms.BETTER_AUTH_SECRET = `better-auth-${Date.now()}-${generateSecurePassword(16)}`;\n\t\t\tcustoms.BETTER_AUTH_URL = `http://localhost:${appConfig.port}`;\n\t\t}\n\t}\n\n\t// Generate trusted origins for better-auth (all app ports)\n\tif (customs.BETTER_AUTH_SECRET) {\n\t\tconst allPorts = Object.values(workspace.apps).map((a) => a.port);\n\t\tcustoms.BETTER_AUTH_TRUSTED_ORIGINS = allPorts\n\t\t\t.map((p) => `http://localhost:${p}`)\n\t\t\t.join(',');\n\t}\n\n\treturn customs;\n}\n\n/**\n * Extract *_DB_PASSWORD keys from secrets and write docker/.env.\n *\n * The docker/.env file contains database passwords that the PostgreSQL\n * init script reads to create per-app database users.\n */\nexport async function writeDockerEnvFromSecrets(\n\tsecrets: StageSecrets,\n\tworkspaceRoot: string,\n): Promise<void> {\n\tconst dbPasswordEntries = Object.entries(secrets.custom).filter(([key]) =>\n\t\tkey.endsWith('_DB_PASSWORD'),\n\t);\n\n\tif (dbPasswordEntries.length === 0) {\n\t\treturn;\n\t}\n\n\tconst envContent = `# Auto-generated docker environment file\n# Contains database passwords for docker-compose postgres init\n# This file is gitignored - do not commit to version control\n${dbPasswordEntries.map(([key, value]) => `${key}=${value}`).join('\\n')}\n`;\n\n\tconst envPath = join(workspaceRoot, 'docker', '.env');\n\tawait mkdir(dirname(envPath), { recursive: true });\n\tawait writeFile(envPath, envContent);\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-9tjTQjFt.d.mts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-VOKKO-lm.d.cts","names":[],"sources":["../src/deploy/state.ts","../src/deploy/StateProvider.ts","../src/workspace/schema.ts","../src/workspace/types.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- const require_sync = require('./sync-DdkKaHqP.cjs');
2
-
3
- exports.pullSecrets = require_sync.pullSecrets;
4
- exports.pushSecrets = require_sync.pushSecrets;