@geekmidas/cli 1.10.15 → 1.10.17

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 (73) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{bundler-BWsVDer6.mjs → bundler-B4AackW5.mjs} +2 -2
  3. package/dist/{bundler-BWsVDer6.mjs.map → bundler-B4AackW5.mjs.map} +1 -1
  4. package/dist/{bundler-Drh5KoN5.cjs → bundler-BhhfkI9T.cjs} +2 -2
  5. package/dist/{bundler-Drh5KoN5.cjs.map → bundler-BhhfkI9T.cjs.map} +1 -1
  6. package/dist/config.d.cts +2 -2
  7. package/dist/config.d.mts +2 -2
  8. package/dist/{fullstack-secrets-D9rjTNyx.cjs → fullstack-secrets-DOHBU4Rp.cjs} +110 -4
  9. package/dist/fullstack-secrets-DOHBU4Rp.cjs.map +1 -0
  10. package/dist/{fullstack-secrets-BIFFv4UZ.mjs → fullstack-secrets-x2Kffx7-.mjs} +99 -5
  11. package/dist/fullstack-secrets-x2Kffx7-.mjs.map +1 -0
  12. package/dist/{index-UCsZ_Vkw.d.cts → index-BkibYzso.d.cts} +15 -4
  13. package/dist/index-BkibYzso.d.cts.map +1 -0
  14. package/dist/{index-gXAGDSGu.d.mts → index-CY-ieuRp.d.mts} +15 -4
  15. package/dist/index-CY-ieuRp.d.mts.map +1 -0
  16. package/dist/index.cjs +332 -62
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.mjs +332 -62
  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-DxTEausy.mjs → reconcile-BLh6rswz.mjs} +2 -2
  25. package/dist/{reconcile-DxTEausy.mjs.map → reconcile-BLh6rswz.mjs.map} +1 -1
  26. package/dist/{reconcile-LaaJkFlO.cjs → reconcile-Ch7sIcf8.cjs} +2 -2
  27. package/dist/{reconcile-LaaJkFlO.cjs.map → reconcile-Ch7sIcf8.cjs.map} +1 -1
  28. package/dist/{storage-Bu44pwPJ.cjs → storage-B1wvztiJ.cjs} +11 -1
  29. package/dist/{storage-clMAp4sc.mjs.map → storage-B1wvztiJ.cjs.map} +1 -1
  30. package/dist/{storage-CauTheT9.mjs → storage-Cs4WBsc4.mjs} +1 -1
  31. package/dist/{storage-DpqzcjQ5.cjs → storage-DOEtT2Hr.cjs} +1 -1
  32. package/dist/{storage-clMAp4sc.mjs → storage-dbb9RyBl.mjs} +11 -1
  33. package/dist/{storage-Bu44pwPJ.cjs.map → storage-dbb9RyBl.mjs.map} +1 -1
  34. package/dist/{sync-BkalF65h.mjs → sync-COnAugP-.mjs} +1 -1
  35. package/dist/sync-D1Pa30oV.cjs +4 -0
  36. package/dist/{sync-BeiI5rFC.cjs → sync-DGXXSk2v.cjs} +2 -2
  37. package/dist/{sync-BeiI5rFC.cjs.map → sync-DGXXSk2v.cjs.map} +1 -1
  38. package/dist/{sync-CWJ6tL0s.mjs → sync-D_NowTkZ.mjs} +2 -2
  39. package/dist/{sync-CWJ6tL0s.mjs.map → sync-D_NowTkZ.mjs.map} +1 -1
  40. package/dist/{types-DiV9Mbvc.d.mts → types-DdHfUbxk.d.cts} +13 -3
  41. package/dist/types-DdHfUbxk.d.cts.map +1 -0
  42. package/dist/{types-JvWj5Ckc.d.cts → types-OszPdw9m.d.mts} +13 -3
  43. package/dist/types-OszPdw9m.d.mts.map +1 -0
  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 +4 -4
  49. package/src/dev/__tests__/entry.spec.ts +3 -5
  50. package/src/dev/__tests__/index.spec.ts +73 -5
  51. package/src/dev/index.ts +33 -25
  52. package/src/docker/compose.ts +130 -2
  53. package/src/init/__tests__/generators.spec.ts +84 -0
  54. package/src/init/generators/docker.ts +128 -16
  55. package/src/init/index.ts +26 -1
  56. package/src/init/templates/index.ts +28 -0
  57. package/src/init/versions.ts +1 -1
  58. package/src/secrets/__tests__/generator.spec.ts +183 -0
  59. package/src/secrets/generator.ts +116 -4
  60. package/src/secrets/storage.ts +12 -0
  61. package/src/secrets/types.ts +11 -1
  62. package/src/setup/__tests__/reconcile-secrets.spec.ts +86 -0
  63. package/src/setup/index.ts +64 -1
  64. package/src/test/__tests__/index.spec.ts +1 -4
  65. package/src/types.ts +13 -1
  66. package/src/workspace/types.ts +13 -2
  67. package/dist/fullstack-secrets-BIFFv4UZ.mjs.map +0 -1
  68. package/dist/fullstack-secrets-D9rjTNyx.cjs.map +0 -1
  69. package/dist/index-UCsZ_Vkw.d.cts.map +0 -1
  70. package/dist/index-gXAGDSGu.d.mts.map +0 -1
  71. package/dist/sync-Bp8xRcuQ.cjs +0 -4
  72. package/dist/types-DiV9Mbvc.d.mts.map +0 -1
  73. package/dist/types-JvWj5Ckc.d.cts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { randomBytes } from 'node:crypto';
2
- import type { ComposeServiceName } from '../types';
2
+ import type { ComposeServiceName, EventsBackend } from '../types';
3
3
  import type { ServiceCredentials, StageSecrets } from './types';
4
4
 
5
5
  /**
@@ -45,6 +45,20 @@ const SERVICE_DEFAULTS: Record<
45
45
  port: 1025,
46
46
  username: 'app',
47
47
  },
48
+ localstack: {
49
+ host: 'localhost',
50
+ port: 4566,
51
+ username: 'localstack',
52
+ region: 'us-east-1',
53
+ },
54
+ };
55
+
56
+ /** Default credentials for pgboss (not a Docker service, reuses postgres) */
57
+ const PGBOSS_DEFAULTS: Omit<ServiceCredentials, 'password'> = {
58
+ host: 'localhost',
59
+ port: 5432,
60
+ username: 'pgboss',
61
+ database: 'app',
48
62
  };
49
63
 
50
64
  /**
@@ -108,11 +122,72 @@ export function generateMinioEndpoint(creds: ServiceCredentials): string {
108
122
  return `http://${host}:${port}`;
109
123
  }
110
124
 
125
+ /**
126
+ * Generate a LocalStack-compatible access key ID.
127
+ * Must start with 'LSIA' prefix and be at least 20 characters.
128
+ * @see https://docs.localstack.cloud/aws/capabilities/config/credentials/
129
+ */
130
+ export function generateLocalStackAccessKeyId(): string {
131
+ const suffix = randomBytes(12).toString('base64url').slice(0, 16);
132
+ return `LSIA${suffix}`;
133
+ }
134
+
135
+ /**
136
+ * Generate connection URL for pg-boss (uses PostgreSQL protocol).
137
+ * Format: pgboss://user:pass@host:port/db?schema=pgboss
138
+ */
139
+ export function generatePgBossUrl(creds: ServiceCredentials): string {
140
+ const { username, password, host, port, database } = creds;
141
+ return `pgboss://${username}:${encodeURIComponent(password)}@${host}:${port}/${database}?schema=pgboss`;
142
+ }
143
+
144
+ /**
145
+ * Generate event connection strings based on the events backend.
146
+ */
147
+ export function generateEventConnectionStrings(
148
+ eventsBackend: EventsBackend,
149
+ services: StageSecrets['services'],
150
+ ): { publisher: string; subscriber: string } {
151
+ switch (eventsBackend) {
152
+ case 'pgboss': {
153
+ const creds = services.pgboss;
154
+ if (!creds) {
155
+ throw new Error('pgboss credentials required for pgboss events');
156
+ }
157
+ const url = generatePgBossUrl(creds);
158
+ return { publisher: url, subscriber: url };
159
+ }
160
+ case 'sns': {
161
+ const creds = services.localstack;
162
+ if (!creds) {
163
+ throw new Error('localstack credentials required for sns events');
164
+ }
165
+ const endpoint = `http://${creds.host}:${creds.port}`;
166
+ const region = creds.region ?? 'us-east-1';
167
+ const accessKeyId = creds.accessKeyId ?? creds.username;
168
+ const secretKey = encodeURIComponent(creds.password);
169
+ return {
170
+ publisher: `sns://${accessKeyId}:${secretKey}@${creds.host}:${creds.port}?region=${region}&endpoint=${encodeURIComponent(endpoint)}`,
171
+ subscriber: `sqs://${accessKeyId}:${secretKey}@${creds.host}:${creds.port}?region=${region}&endpoint=${encodeURIComponent(endpoint)}`,
172
+ };
173
+ }
174
+ case 'rabbitmq': {
175
+ const creds = services.rabbitmq;
176
+ if (!creds) {
177
+ throw new Error('rabbitmq credentials required for rabbitmq events');
178
+ }
179
+ const url = generateRabbitmqUrl(creds);
180
+ return { publisher: url, subscriber: url };
181
+ }
182
+ }
183
+ }
184
+
111
185
  /**
112
186
  * Generate connection URLs from service credentials.
113
187
  */
114
188
  export function generateConnectionUrls(
115
189
  services: StageSecrets['services'],
190
+ eventsBackend?: EventsBackend,
116
191
  ): StageSecrets['urls'] {
117
192
  const urls: StageSecrets['urls'] = {};
118
193
 
@@ -132,6 +207,12 @@ export function generateConnectionUrls(
132
207
  urls.STORAGE_ENDPOINT = generateMinioEndpoint(services.minio);
133
208
  }
134
209
 
210
+ if (eventsBackend) {
211
+ const eventUrls = generateEventConnectionStrings(eventsBackend, services);
212
+ urls.EVENT_PUBLISHER_CONNECTION_STRING = eventUrls.publisher;
213
+ urls.EVENT_SUBSCRIBER_CONNECTION_STRING = eventUrls.subscriber;
214
+ }
215
+
135
216
  if (services.mailpit) {
136
217
  urls.SMTP_HOST = services.mailpit.host;
137
218
  urls.SMTP_PORT = String(services.mailpit.port);
@@ -140,17 +221,30 @@ export function generateConnectionUrls(
140
221
  return urls;
141
222
  }
142
223
 
224
+ /**
225
+ * Generate LocalStack service credentials with LSIA-prefixed access key.
226
+ */
227
+ export function generateLocalStackCredentials(): ServiceCredentials {
228
+ const defaults = SERVICE_DEFAULTS.localstack;
229
+ return {
230
+ ...defaults,
231
+ password: generateSecurePassword(),
232
+ accessKeyId: generateLocalStackAccessKeyId(),
233
+ };
234
+ }
235
+
143
236
  /**
144
237
  * Create a new StageSecrets object with generated credentials.
145
238
  * @param stage - The deployment stage (e.g., 'development', 'production')
146
239
  * @param services - List of services to generate credentials for
147
240
  * @param options - Optional configuration
148
241
  * @param options.projectName - Project name used to derive the database name (e.g., 'myapp' → 'myapp_dev')
242
+ * @param options.eventsBackend - Event backend type (pgboss, sns, rabbitmq)
149
243
  */
150
244
  export function createStageSecrets(
151
245
  stage: string,
152
246
  services: ComposeServiceName[],
153
- options?: { projectName?: string },
247
+ options?: { projectName?: string; eventsBackend?: EventsBackend },
154
248
  ): StageSecrets {
155
249
  const now = new Date().toISOString();
156
250
  const serviceCredentials = generateServicesCredentials(services);
@@ -166,12 +260,30 @@ export function createStageSecrets(
166
260
  }
167
261
  }
168
262
 
169
- const urls = generateConnectionUrls(serviceCredentials);
263
+ // Generate event-specific credentials
264
+ const eventsBackend = options?.eventsBackend;
265
+ if (eventsBackend === 'pgboss' && serviceCredentials.postgres) {
266
+ // pgboss reuses postgres host/port/database but with dedicated user
267
+ serviceCredentials.pgboss = {
268
+ ...PGBOSS_DEFAULTS,
269
+ password: generateSecurePassword(),
270
+ host: serviceCredentials.postgres.host,
271
+ port: serviceCredentials.postgres.port,
272
+ database: serviceCredentials.postgres.database,
273
+ };
274
+ }
275
+ if (eventsBackend === 'sns') {
276
+ // LocalStack credentials with LSIA-prefixed access key
277
+ serviceCredentials.localstack = generateLocalStackCredentials();
278
+ }
279
+
280
+ const urls = generateConnectionUrls(serviceCredentials, eventsBackend);
170
281
 
171
282
  return {
172
283
  stage,
173
284
  createdAt: now,
174
285
  updatedAt: now,
286
+ eventsBackend,
175
287
  services: serviceCredentials,
176
288
  urls,
177
289
  custom: {},
@@ -204,6 +316,6 @@ export function rotateServicePassword(
204
316
  ...secrets,
205
317
  updatedAt: new Date().toISOString(),
206
318
  services: newServices,
207
- urls: generateConnectionUrls(newServices),
319
+ urls: generateConnectionUrls(newServices, secrets.eventsBackend),
208
320
  };
209
321
  }
@@ -223,6 +223,18 @@ export function toEmbeddableSecrets(secrets: StageSecrets): EmbeddableSecrets {
223
223
  SMTP_SECURE: 'false',
224
224
  MAIL_FROM: 'noreply@localhost',
225
225
  }),
226
+ ...(secrets.services.localstack && {
227
+ AWS_ACCESS_KEY_ID:
228
+ secrets.services.localstack.accessKeyId ??
229
+ secrets.services.localstack.username,
230
+ AWS_SECRET_ACCESS_KEY: secrets.services.localstack.password,
231
+ AWS_REGION: secrets.services.localstack.region ?? 'us-east-1',
232
+ AWS_ENDPOINT_URL: `http://${secrets.services.localstack.host}:${secrets.services.localstack.port}`,
233
+ }),
234
+ ...(secrets.services.pgboss && {
235
+ PGBOSS_DB_USER: secrets.services.pgboss.username,
236
+ PGBOSS_DB_PASSWORD: secrets.services.pgboss.password,
237
+ }),
226
238
  };
227
239
  }
228
240
 
@@ -1,4 +1,4 @@
1
- import type { ComposeServiceName } from '../types';
1
+ import type { ComposeServiceName, EventsBackend } from '../types';
2
2
 
3
3
  /** Credentials for a specific service */
4
4
  export interface ServiceCredentials {
@@ -12,6 +12,10 @@ export interface ServiceCredentials {
12
12
  vhost?: string;
13
13
  /** Bucket name (for minio) */
14
14
  bucket?: string;
15
+ /** Access key ID (for localstack) */
16
+ accessKeyId?: string;
17
+ /** Region (for localstack) */
18
+ region?: string;
15
19
  }
16
20
 
17
21
  /** Stage secrets configuration */
@@ -22,6 +26,8 @@ export interface StageSecrets {
22
26
  createdAt: string;
23
27
  /** ISO timestamp when secrets were last updated */
24
28
  updatedAt: string;
29
+ /** Event backend type (if events are enabled) */
30
+ eventsBackend?: EventsBackend;
25
31
  /** Service-specific credentials */
26
32
  services: {
27
33
  postgres?: ServiceCredentials;
@@ -29,6 +35,8 @@ export interface StageSecrets {
29
35
  rabbitmq?: ServiceCredentials;
30
36
  minio?: ServiceCredentials;
31
37
  mailpit?: ServiceCredentials;
38
+ localstack?: ServiceCredentials;
39
+ pgboss?: ServiceCredentials;
32
40
  };
33
41
  /** Generated connection URLs */
34
42
  urls: {
@@ -38,6 +46,8 @@ export interface StageSecrets {
38
46
  STORAGE_ENDPOINT?: string;
39
47
  SMTP_HOST?: string;
40
48
  SMTP_PORT?: string;
49
+ EVENT_PUBLISHER_CONNECTION_STRING?: string;
50
+ EVENT_SUBSCRIBER_CONNECTION_STRING?: string;
41
51
  };
42
52
  /** Custom user-defined secrets */
43
53
  custom: Record<string, string>;
@@ -340,3 +340,89 @@ describe('generateFullstackCustomSecrets', () => {
340
340
  expect(result.BETTER_AUTH_TRUSTED_ORIGINS).toBeUndefined();
341
341
  });
342
342
  });
343
+
344
+ describe('reconcileSecrets - events', () => {
345
+ it('should add pgboss credentials when events is pgboss', () => {
346
+ const workspace = createWorkspace({
347
+ services: { db: true, cache: false, events: 'pgboss' },
348
+ });
349
+ const secrets = createSecrets();
350
+
351
+ const result = reconcileSecrets(secrets, workspace);
352
+
353
+ expect(result).not.toBeNull();
354
+ expect(result!.eventsBackend).toBe('pgboss');
355
+ expect(result!.services.pgboss).toBeDefined();
356
+ expect(result!.services.pgboss!.username).toBe('pgboss');
357
+ expect(result!.services.pgboss!.host).toBe('localhost');
358
+ expect(result!.services.pgboss!.database).toBe('test_dev');
359
+ expect(result!.urls.EVENT_PUBLISHER_CONNECTION_STRING).toContain(
360
+ 'pgboss://',
361
+ );
362
+ expect(result!.urls.EVENT_SUBSCRIBER_CONNECTION_STRING).toContain(
363
+ 'pgboss://',
364
+ );
365
+ });
366
+
367
+ it('should add localstack credentials when events is sns', () => {
368
+ const workspace = createWorkspace({
369
+ services: { db: true, cache: false, events: 'sns' },
370
+ });
371
+ const secrets = createSecrets();
372
+
373
+ const result = reconcileSecrets(secrets, workspace);
374
+
375
+ expect(result).not.toBeNull();
376
+ expect(result!.eventsBackend).toBe('sns');
377
+ expect(result!.services.localstack).toBeDefined();
378
+ expect(result!.services.localstack!.accessKeyId).toMatch(/^LSIA/);
379
+ expect(result!.urls.EVENT_PUBLISHER_CONNECTION_STRING).toContain('sns://');
380
+ expect(result!.urls.EVENT_SUBSCRIBER_CONNECTION_STRING).toContain('sqs://');
381
+ });
382
+
383
+ it('should add rabbitmq credentials when events is rabbitmq', () => {
384
+ const workspace = createWorkspace({
385
+ services: { db: true, cache: false, events: 'rabbitmq' },
386
+ });
387
+ const secrets = createSecrets();
388
+
389
+ const result = reconcileSecrets(secrets, workspace);
390
+
391
+ expect(result).not.toBeNull();
392
+ expect(result!.eventsBackend).toBe('rabbitmq');
393
+ expect(result!.services.rabbitmq).toBeDefined();
394
+ expect(result!.urls.EVENT_PUBLISHER_CONNECTION_STRING).toContain('amqp://');
395
+ });
396
+
397
+ it('should not add duplicate pgboss credentials when already present', () => {
398
+ const workspace = createWorkspace({
399
+ services: { db: true, cache: false, events: 'pgboss' },
400
+ });
401
+ const secrets: StageSecrets = {
402
+ ...createSecrets(),
403
+ eventsBackend: 'pgboss',
404
+ services: {
405
+ ...createSecrets().services,
406
+ pgboss: {
407
+ host: 'localhost',
408
+ port: 5432,
409
+ username: 'pgboss',
410
+ password: 'existing-pass',
411
+ database: 'test_dev',
412
+ },
413
+ },
414
+ urls: {
415
+ ...createSecrets().urls,
416
+ EVENT_PUBLISHER_CONNECTION_STRING: 'pgboss://existing',
417
+ EVENT_SUBSCRIBER_CONNECTION_STRING: 'pgboss://existing',
418
+ },
419
+ };
420
+
421
+ const result = reconcileSecrets(secrets, workspace);
422
+
423
+ // pgboss credentials should be preserved (not regenerated)
424
+ if (result) {
425
+ expect(result.services.pgboss!.password).toBe('existing-pass');
426
+ }
427
+ });
428
+ });
@@ -6,6 +6,8 @@ import { resolveServicePorts, startWorkspaceServices } from '../dev/index.js';
6
6
  import {
7
7
  createStageSecrets,
8
8
  generateConnectionUrls,
9
+ generateLocalStackCredentials,
10
+ generateSecurePassword,
9
11
  generateServiceCredentials,
10
12
  } from '../secrets/generator.js';
11
13
  import {
@@ -183,12 +185,70 @@ export function reconcileSecrets(
183
185
  ...result,
184
186
  services: { ...result.services, [name]: creds },
185
187
  };
186
- result.urls = generateConnectionUrls(result.services);
188
+ result.urls = generateConnectionUrls(
189
+ result.services,
190
+ result.eventsBackend,
191
+ );
187
192
  logger.log(` 🔄 Adding missing service credentials: ${name}`);
188
193
  changed = true;
189
194
  }
190
195
  }
191
196
 
197
+ // Reconcile events backend
198
+ const eventsBackend = workspace.services.events;
199
+ if (eventsBackend && result.eventsBackend !== eventsBackend) {
200
+ result.eventsBackend = eventsBackend;
201
+
202
+ // Add pgboss credentials if needed
203
+ if (eventsBackend === 'pgboss' && !result.services.pgboss) {
204
+ result = {
205
+ ...result,
206
+ services: {
207
+ ...result.services,
208
+ pgboss: {
209
+ host: result.services.postgres?.host ?? 'localhost',
210
+ port: result.services.postgres?.port ?? 5432,
211
+ username: 'pgboss',
212
+ password: generateSecurePassword(),
213
+ database: result.services.postgres?.database ?? 'app',
214
+ },
215
+ },
216
+ };
217
+ logger.log(' 🔄 Adding missing service credentials: pgboss');
218
+ changed = true;
219
+ }
220
+
221
+ // Add localstack credentials if needed
222
+ if (eventsBackend === 'sns' && !result.services.localstack) {
223
+ result = {
224
+ ...result,
225
+ services: {
226
+ ...result.services,
227
+ localstack: generateLocalStackCredentials(),
228
+ },
229
+ };
230
+ logger.log(' 🔄 Adding missing service credentials: localstack');
231
+ changed = true;
232
+ }
233
+
234
+ // Add rabbitmq credentials if needed (for rabbitmq events)
235
+ if (eventsBackend === 'rabbitmq' && !result.services.rabbitmq) {
236
+ result = {
237
+ ...result,
238
+ services: {
239
+ ...result.services,
240
+ rabbitmq: generateServiceCredentials('rabbitmq'),
241
+ },
242
+ };
243
+ logger.log(' 🔄 Adding missing service credentials: rabbitmq');
244
+ changed = true;
245
+ }
246
+
247
+ // Regenerate URLs with new events backend
248
+ result.urls = generateConnectionUrls(result.services, eventsBackend);
249
+ changed = true;
250
+ }
251
+
192
252
  // Reconcile custom secrets for multi-app workspaces
193
253
  const isMultiApp = Object.keys(workspace.apps).length > 1;
194
254
  if (isMultiApp) {
@@ -237,10 +297,13 @@ async function generateFreshSecrets(
237
297
  if (workspace.services.cache) serviceNames.push('redis');
238
298
  if (workspace.services.storage) serviceNames.push('minio');
239
299
  if (workspace.services.mail) serviceNames.push('mailpit');
300
+ if (workspace.services.events === 'sns') serviceNames.push('localstack');
301
+ if (workspace.services.events === 'rabbitmq') serviceNames.push('rabbitmq');
240
302
 
241
303
  // Create base secrets with service credentials
242
304
  const secrets = createStageSecrets(stage, serviceNames, {
243
305
  projectName: workspace.name,
306
+ eventsBackend: workspace.services.events,
244
307
  });
245
308
 
246
309
  // Generate fullstack-aware custom secrets
@@ -274,10 +274,7 @@ services:
274
274
  // Verify preload script was created with correct content
275
275
  expect(existsSync(preloadPath)).toBe(true);
276
276
  const preloadContent = readFileSync(preloadPath, 'utf-8');
277
- expect(preloadContent).toContain(
278
- "import { Credentials } from '@geekmidas/envkit/credentials'",
279
- );
280
- expect(preloadContent).toContain('Object.assign(Credentials');
277
+ expect(preloadContent).toContain('__gkm_credentials__');
281
278
  expect(preloadContent).toContain('Object.assign(process.env');
282
279
  expect(preloadContent).toContain(secretsJsonPath);
283
280
  });
package/src/types.ts CHANGED
@@ -77,13 +77,25 @@ export interface ServiceConfig {
77
77
  version?: string;
78
78
  }
79
79
 
80
+ /**
81
+ * Supported event backend types.
82
+ *
83
+ * - `pgboss`: Reuses PostgreSQL with a dedicated user/schema. Auto-enables db service.
84
+ * - `sns`: Adds LocalStack container with SNS+SQS services.
85
+ * - `rabbitmq`: Adds RabbitMQ container.
86
+ *
87
+ * All backends generate EVENT_PUBLISHER_CONNECTION_STRING and EVENT_SUBSCRIBER_CONNECTION_STRING.
88
+ */
89
+ export type EventsBackend = 'pgboss' | 'sns' | 'rabbitmq';
90
+
80
91
  /** Supported docker-compose service names */
81
92
  export type ComposeServiceName =
82
93
  | 'postgres'
83
94
  | 'redis'
84
95
  | 'rabbitmq'
85
96
  | 'minio'
86
- | 'mailpit';
97
+ | 'mailpit'
98
+ | 'localstack';
87
99
 
88
100
  /** Services configuration - can be boolean (use defaults) or object with version */
89
101
  export type ComposeServicesConfig = {
@@ -159,6 +159,15 @@ export interface MailServiceConfig extends ServiceImageConfig {
159
159
  * cache: true,
160
160
  * mail: true, // Mailpit in dev
161
161
  * }
162
+ *
163
+ * // With event backend
164
+ * services: {
165
+ * db: true,
166
+ * cache: true,
167
+ * events: 'pgboss', // reuses postgres (auto-enables db)
168
+ * // events: 'sns', // adds LocalStack container
169
+ * // events: 'rabbitmq', // adds RabbitMQ container
170
+ * }
162
171
  * ```
163
172
  */
164
173
  export interface ServicesConfig {
@@ -170,6 +179,8 @@ export interface ServicesConfig {
170
179
  mail?: boolean | MailServiceConfig;
171
180
  /** MinIO S3-compatible object storage (default: minio/minio:latest) */
172
181
  storage?: boolean | ServiceImageConfig;
182
+ /** Event backend: pgboss (reuses postgres), sns (LocalStack), or rabbitmq */
183
+ events?: import('../types.js').EventsBackend;
173
184
  }
174
185
 
175
186
  /**
@@ -752,7 +763,7 @@ export type WorkspaceInput<TApps extends AppsRecord> = {
752
763
  shared?: SharedConfig;
753
764
  /** Deployment configuration */
754
765
  deploy?: DeployConfig;
755
- /** Development services (db, cache, mail) */
766
+ /** Development services (db, cache, mail, storage, events) */
756
767
  services?: ServicesConfig;
757
768
  /** Encrypted secrets configuration */
758
769
  secrets?: SecretsConfig;
@@ -887,7 +898,7 @@ export interface WorkspaceConfig {
887
898
  /** Default deployment configuration */
888
899
  deploy?: DeployConfig;
889
900
 
890
- /** Development services (db, cache, mail) */
901
+ /** Development services (db, cache, mail, storage, events) */
891
902
  services?: ServicesConfig;
892
903
 
893
904
  /** Encrypted secrets configuration */
@@ -1 +0,0 @@
1
- {"version":3,"file":"fullstack-secrets-BIFFv4UZ.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\tminio: {\n\t\thost: 'localhost',\n\t\tport: 9000,\n\t\tusername: 'app',\n\t\tbucket: 'app',\n\t},\n\tmailpit: {\n\t\thost: 'localhost',\n\t\tport: 1025,\n\t\tusername: 'app',\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 endpoint URL for MinIO (S3-compatible).\n */\nexport function generateMinioEndpoint(creds: ServiceCredentials): string {\n\tconst { host, port } = creds;\n\treturn `http://${host}:${port}`;\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\tif (services.minio) {\n\t\turls.STORAGE_ENDPOINT = generateMinioEndpoint(services.minio);\n\t}\n\n\tif (services.mailpit) {\n\t\turls.SMTP_HOST = services.mailpit.host;\n\t\turls.SMTP_PORT = String(services.mailpit.port);\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 service defaults with project-derived names if provided\n\tif (options?.projectName) {\n\t\tif (serviceCredentials.postgres) {\n\t\t\tserviceCredentials.postgres.database = `${options.projectName.replace(/-/g, '_')}_dev`;\n\t\t}\n\t\tif (serviceCredentials.minio) {\n\t\t\tserviceCredentials.minio.bucket = options.projectName;\n\t\t\tserviceCredentials.minio.username = options.projectName;\n\t\t}\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-D9rjTNyx.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\tminio: {\n\t\thost: 'localhost',\n\t\tport: 9000,\n\t\tusername: 'app',\n\t\tbucket: 'app',\n\t},\n\tmailpit: {\n\t\thost: 'localhost',\n\t\tport: 1025,\n\t\tusername: 'app',\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 endpoint URL for MinIO (S3-compatible).\n */\nexport function generateMinioEndpoint(creds: ServiceCredentials): string {\n\tconst { host, port } = creds;\n\treturn `http://${host}:${port}`;\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\tif (services.minio) {\n\t\turls.STORAGE_ENDPOINT = generateMinioEndpoint(services.minio);\n\t}\n\n\tif (services.mailpit) {\n\t\turls.SMTP_HOST = services.mailpit.host;\n\t\turls.SMTP_PORT = String(services.mailpit.port);\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 service defaults with project-derived names if provided\n\tif (options?.projectName) {\n\t\tif (serviceCredentials.postgres) {\n\t\t\tserviceCredentials.postgres.database = `${options.projectName.replace(/-/g, '_')}_dev`;\n\t\t}\n\t\tif (serviceCredentials.minio) {\n\t\t\tserviceCredentials.minio.bucket = options.projectName;\n\t\t\tserviceCredentials.minio.username = options.projectName;\n\t\t}\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-UCsZ_Vkw.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 +0,0 @@
1
- {"version":3,"file":"index-gXAGDSGu.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,4 +0,0 @@
1
- const require_sync = require('./sync-BeiI5rFC.cjs');
2
-
3
- exports.pullSecrets = require_sync.pullSecrets;
4
- exports.pushSecrets = require_sync.pushSecrets;
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-DiV9Mbvc.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;AAYY,UALK,iBAAA,CAKwB;EAaxB,KAAA,EAAA,MAAA,GAAA,MAAc,EAAA;EAKd,SAAA,EAAA,CAAA,QAAA,EAAoB,MAAA,EAAA,GAAQ,MAAA;AAI7C;AAIiB,KA1BL,MAAA,GA0BK,MAAgB,GAAA,MAAA,EAAA,GA1BQ,iBA0BR;AA0CrB,UAvDK,cAAA,CAuDa;EAQlB,OAAA,CAAA,EAAA,OAAA;EAAqB,SAAA,CAAA,EAAA,MAAA;;AACM,UA3DtB,mBAAA,SAA4B,cA2DN,CAAA,CAAa;AAGnC,UA1DA,eAAA,SAAwB,cA0DZ,CAAA;AAwBhB,UA9EI,gBAAA,CA8EJ;EAAqB;EAAqB,OAAA,CAAA,EAAA,OAAA;EAItC;EAAa,MAAA,CAAA,EAAA,OAAA;EAAA;EAIA,MAJQ,CAAA,EAAA,OAAA;EAAc;EAOxC,WAAO,CAAA,EAAA,MAAA;EAEF;EAiBA,gBAAY,CAAA,EAAA,OAAA;EASZ;EAWA,QAAA,CAAA,EAAA,MAAW,EAAA;EA6BX;EAaA,WAAA,CAAA,EAAA,SAAe,GAAA,SAAA;EAAA;EAAA,OAGd,CAAA,EAAA,OAAA;EAAmB;;;;;AAUK;AAG1C;EAA0B,iBAAA,CAAA,EAAA,OAAA;;;AAGjB,UAjKQ,aAAA,CAiKR;EAAM;;;;EAsBgC,KAUlB,CAAA,EAAA,MAAA;EAAY;;;AAiDnB;;;;KApOV,kBAAA;;KAQA,qBAAA,WACL,gCAAgC;UAGtB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;eAwBJ,wBAAwB;;;UAIpB,YAAA,SAAqB;;;;eAIxB;;KAGF,OAAA;UAEK,eAAA;;;;;;;;;;;;;;;;UAiBA,YAAA;;;;;;;;UASA,aAAA;;;;;;;;;;UAWA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BA,qBAAA;;;;;;;;;;;;UAaA,eAAA;;;qBAGC;qBACA;;;4BAGO;wBACJ;;;qBAGD;;sBAEC;;UAGJ,SAAA;UACR;cACI;UACJ;gBACM;;;cAGF;;;;;;;;;;UAUJ;;;;;;;;iCAQuB;;;;;;;;;;8BAUH;;;;;;;;;;;;;;;;;;;sBAmBR;;YAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA4BD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-JvWj5Ckc.d.cts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;AAYY,UALK,iBAAA,CAKwB;EAaxB,KAAA,EAAA,MAAA,GAAA,MAAc,EAAA;EAKd,SAAA,EAAA,CAAA,QAAA,EAAoB,MAAA,EAAA,GAAQ,MAAA;AAI7C;AAIiB,KA1BL,MAAA,GA0BK,MAAgB,GAAA,MAAA,EAAA,GA1BQ,iBA0BR;AA0CrB,UAvDK,cAAA,CAuDa;EAQlB,OAAA,CAAA,EAAA,OAAA;EAAqB,SAAA,CAAA,EAAA,MAAA;;AACM,UA3DtB,mBAAA,SAA4B,cA2DN,CAAA,CAAa;AAGnC,UA1DA,eAAA,SAAwB,cA0DZ,CAAA;AAwBhB,UA9EI,gBAAA,CA8EJ;EAAqB;EAAqB,OAAA,CAAA,EAAA,OAAA;EAItC;EAAa,MAAA,CAAA,EAAA,OAAA;EAAA;EAIA,MAJQ,CAAA,EAAA,OAAA;EAAc;EAOxC,WAAO,CAAA,EAAA,MAAA;EAEF;EAiBA,gBAAY,CAAA,EAAA,OAAA;EASZ;EAWA,QAAA,CAAA,EAAA,MAAW,EAAA;EA6BX;EAaA,WAAA,CAAA,EAAA,SAAe,GAAA,SAAA;EAAA;EAAA,OAGd,CAAA,EAAA,OAAA;EAAmB;;;;;AAUK;AAG1C;EAA0B,iBAAA,CAAA,EAAA,OAAA;;;AAGjB,UAjKQ,aAAA,CAiKR;EAAM;;;;EAsBgC,KAUlB,CAAA,EAAA,MAAA;EAAY;;;AAiDnB;;;;KApOV,kBAAA;;KAQA,qBAAA,WACL,gCAAgC;UAGtB,YAAA;;;;;;;;;;;;;;;;;;;;;;;;eAwBJ,wBAAwB;;;UAIpB,YAAA,SAAqB;;;;eAIxB;;KAGF,OAAA;UAEK,eAAA;;;;;;;;;;;;;;;;UAiBA,YAAA;;;;;;;;UASA,aAAA;;;;;;;;;;UAWA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BA,qBAAA;;;;;;;;;;;;UAaA,eAAA;;;qBAGC;qBACA;;;4BAGO;wBACJ;;;qBAGD;;sBAEC;;UAGJ,SAAA;UACR;cACI;UACJ;gBACM;;;cAGF;;;;;;;;;;UAUJ;;;;;;;;iCAQuB;;;;;;;;;;8BAUH;;;;;;;;;;;;;;;;;;;sBAmBR;;YAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA4BD"}