@geekmidas/cli 0.54.0 → 1.0.0

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 (152) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +26 -5
  3. package/dist/CachedStateProvider-D73dCqfH.cjs +60 -0
  4. package/dist/CachedStateProvider-D73dCqfH.cjs.map +1 -0
  5. package/dist/CachedStateProvider-DVyKfaMm.mjs +54 -0
  6. package/dist/CachedStateProvider-DVyKfaMm.mjs.map +1 -0
  7. package/dist/CachedStateProvider-D_uISMmJ.cjs +3 -0
  8. package/dist/CachedStateProvider-OiFUGr7p.mjs +3 -0
  9. package/dist/HostingerProvider-DUV9-Tzg.cjs +210 -0
  10. package/dist/HostingerProvider-DUV9-Tzg.cjs.map +1 -0
  11. package/dist/HostingerProvider-DqUq6e9i.mjs +210 -0
  12. package/dist/HostingerProvider-DqUq6e9i.mjs.map +1 -0
  13. package/dist/LocalStateProvider-CdspeSVL.cjs +43 -0
  14. package/dist/LocalStateProvider-CdspeSVL.cjs.map +1 -0
  15. package/dist/LocalStateProvider-DxoSaWUV.mjs +42 -0
  16. package/dist/LocalStateProvider-DxoSaWUV.mjs.map +1 -0
  17. package/dist/Route53Provider-CpRIqu69.cjs +157 -0
  18. package/dist/Route53Provider-CpRIqu69.cjs.map +1 -0
  19. package/dist/Route53Provider-KUAX3vz9.mjs +156 -0
  20. package/dist/Route53Provider-KUAX3vz9.mjs.map +1 -0
  21. package/dist/SSMStateProvider-BxAPU99a.cjs +53 -0
  22. package/dist/SSMStateProvider-BxAPU99a.cjs.map +1 -0
  23. package/dist/SSMStateProvider-C4wp4AZe.mjs +52 -0
  24. package/dist/SSMStateProvider-C4wp4AZe.mjs.map +1 -0
  25. package/dist/{bundler-DGry2vaR.mjs → bundler-BqTN5Dj5.mjs} +3 -3
  26. package/dist/{bundler-DGry2vaR.mjs.map → bundler-BqTN5Dj5.mjs.map} +1 -1
  27. package/dist/{bundler-BB-kETMd.cjs → bundler-tHLLwYuU.cjs} +3 -3
  28. package/dist/{bundler-BB-kETMd.cjs.map → bundler-tHLLwYuU.cjs.map} +1 -1
  29. package/dist/{config-HYiM3iQJ.cjs → config-BGeJsW1r.cjs} +2 -2
  30. package/dist/{config-HYiM3iQJ.cjs.map → config-BGeJsW1r.cjs.map} +1 -1
  31. package/dist/{config-C3LSBNSl.mjs → config-C6awcFBx.mjs} +2 -2
  32. package/dist/{config-C3LSBNSl.mjs.map → config-C6awcFBx.mjs.map} +1 -1
  33. package/dist/config.cjs +2 -2
  34. package/dist/config.d.cts +1 -1
  35. package/dist/config.d.mts +2 -2
  36. package/dist/config.mjs +2 -2
  37. package/dist/credentials-C8DWtnMY.cjs +174 -0
  38. package/dist/credentials-C8DWtnMY.cjs.map +1 -0
  39. package/dist/credentials-DT1dSxIx.mjs +126 -0
  40. package/dist/credentials-DT1dSxIx.mjs.map +1 -0
  41. package/dist/deploy/sniffer-envkit-patch.cjs.map +1 -1
  42. package/dist/deploy/sniffer-envkit-patch.mjs.map +1 -1
  43. package/dist/deploy/sniffer-loader.cjs +1 -1
  44. package/dist/{dokploy-api-94KzmTVf.mjs → dokploy-api-7k3t7_zd.mjs} +1 -1
  45. package/dist/{dokploy-api-94KzmTVf.mjs.map → dokploy-api-7k3t7_zd.mjs.map} +1 -1
  46. package/dist/dokploy-api-CHa8G51l.mjs +3 -0
  47. package/dist/{dokploy-api-YD8WCQfW.cjs → dokploy-api-CQvhV6Hd.cjs} +1 -1
  48. package/dist/{dokploy-api-YD8WCQfW.cjs.map → dokploy-api-CQvhV6Hd.cjs.map} +1 -1
  49. package/dist/dokploy-api-CWc02yyg.cjs +3 -0
  50. package/dist/{encryption-DaCB_NmS.cjs → encryption-BE0UOb8j.cjs} +1 -1
  51. package/dist/{encryption-DaCB_NmS.cjs.map → encryption-BE0UOb8j.cjs.map} +1 -1
  52. package/dist/{encryption-Biq0EZ4m.cjs → encryption-Cv3zips0.cjs} +1 -1
  53. package/dist/{encryption-BC4MAODn.mjs → encryption-JtMsiGNp.mjs} +1 -1
  54. package/dist/{encryption-BC4MAODn.mjs.map → encryption-JtMsiGNp.mjs.map} +1 -1
  55. package/dist/encryption-UUmaWAmz.mjs +3 -0
  56. package/dist/{index-pOA56MWT.d.cts → index-B5rGIc4g.d.cts} +553 -196
  57. package/dist/index-B5rGIc4g.d.cts.map +1 -0
  58. package/dist/{index-A70abJ1m.d.mts → index-KFEbMIRa.d.mts} +554 -197
  59. package/dist/index-KFEbMIRa.d.mts.map +1 -0
  60. package/dist/index.cjs +2223 -606
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.mjs +2200 -583
  63. package/dist/index.mjs.map +1 -1
  64. package/dist/{openapi-C3C-BzIZ.mjs → openapi-BMFmLnX6.mjs} +51 -7
  65. package/dist/openapi-BMFmLnX6.mjs.map +1 -0
  66. package/dist/{openapi-D7WwlpPF.cjs → openapi-D1KXv2Ml.cjs} +51 -7
  67. package/dist/openapi-D1KXv2Ml.cjs.map +1 -0
  68. package/dist/{openapi-react-query-C_MxpBgF.cjs → openapi-react-query-BeXvk-wa.cjs} +1 -1
  69. package/dist/{openapi-react-query-C_MxpBgF.cjs.map → openapi-react-query-BeXvk-wa.cjs.map} +1 -1
  70. package/dist/{openapi-react-query-ZoP9DPbY.mjs → openapi-react-query-DGEkD39r.mjs} +1 -1
  71. package/dist/{openapi-react-query-ZoP9DPbY.mjs.map → openapi-react-query-DGEkD39r.mjs.map} +1 -1
  72. package/dist/openapi-react-query.cjs +1 -1
  73. package/dist/openapi-react-query.mjs +1 -1
  74. package/dist/openapi.cjs +3 -3
  75. package/dist/openapi.d.cts +1 -1
  76. package/dist/openapi.d.mts +2 -2
  77. package/dist/openapi.mjs +3 -3
  78. package/dist/{storage-Dhst7BhI.mjs → storage-BMW6yLu3.mjs} +1 -1
  79. package/dist/{storage-Dhst7BhI.mjs.map → storage-BMW6yLu3.mjs.map} +1 -1
  80. package/dist/{storage-fOR8dMu5.cjs → storage-C7pmBq1u.cjs} +1 -1
  81. package/dist/{storage-BPRgh3DU.cjs → storage-CoCNe0Pt.cjs} +1 -1
  82. package/dist/{storage-BPRgh3DU.cjs.map → storage-CoCNe0Pt.cjs.map} +1 -1
  83. package/dist/{storage-DNj_I11J.mjs → storage-D8XzjVaO.mjs} +1 -1
  84. package/dist/{types-BtGL-8QS.d.mts → types-BldpmqQX.d.mts} +1 -1
  85. package/dist/{types-BtGL-8QS.d.mts.map → types-BldpmqQX.d.mts.map} +1 -1
  86. package/dist/workspace/index.cjs +1 -1
  87. package/dist/workspace/index.d.cts +1 -1
  88. package/dist/workspace/index.d.mts +2 -2
  89. package/dist/workspace/index.mjs +1 -1
  90. package/dist/{workspace-CaVW6j2q.cjs → workspace-BFRUOOrh.cjs} +309 -25
  91. package/dist/workspace-BFRUOOrh.cjs.map +1 -0
  92. package/dist/{workspace-DLFRaDc-.mjs → workspace-DAxG3_H2.mjs} +309 -25
  93. package/dist/workspace-DAxG3_H2.mjs.map +1 -0
  94. package/package.json +12 -8
  95. package/src/build/__tests__/handler-templates.spec.ts +115 -47
  96. package/src/deploy/CachedStateProvider.ts +86 -0
  97. package/src/deploy/LocalStateProvider.ts +57 -0
  98. package/src/deploy/SSMStateProvider.ts +93 -0
  99. package/src/deploy/StateProvider.ts +171 -0
  100. package/src/deploy/__tests__/CachedStateProvider.spec.ts +228 -0
  101. package/src/deploy/__tests__/HostingerProvider.spec.ts +347 -0
  102. package/src/deploy/__tests__/LocalStateProvider.spec.ts +126 -0
  103. package/src/deploy/__tests__/Route53Provider.spec.ts +402 -0
  104. package/src/deploy/__tests__/SSMStateProvider.spec.ts +177 -0
  105. package/src/deploy/__tests__/__fixtures__/env-parsers/throwing-env-parser.ts +1 -3
  106. package/src/deploy/__tests__/__fixtures__/route-apps/services.ts +28 -19
  107. package/src/deploy/__tests__/createDnsProvider.spec.ts +172 -0
  108. package/src/deploy/__tests__/createStateProvider.spec.ts +116 -0
  109. package/src/deploy/__tests__/dns-orchestration.spec.ts +192 -0
  110. package/src/deploy/__tests__/dns-verification.spec.ts +2 -2
  111. package/src/deploy/__tests__/env-resolver.spec.ts +37 -15
  112. package/src/deploy/__tests__/sniffer.spec.ts +4 -20
  113. package/src/deploy/__tests__/state.spec.ts +13 -5
  114. package/src/deploy/dns/DnsProvider.ts +163 -0
  115. package/src/deploy/dns/HostingerProvider.ts +100 -0
  116. package/src/deploy/dns/Route53Provider.ts +256 -0
  117. package/src/deploy/dns/index.ts +257 -165
  118. package/src/deploy/env-resolver.ts +12 -5
  119. package/src/deploy/index.ts +16 -13
  120. package/src/deploy/sniffer-envkit-patch.ts +3 -1
  121. package/src/deploy/sniffer-routes-worker.ts +104 -0
  122. package/src/deploy/sniffer.ts +77 -55
  123. package/src/deploy/state-commands.ts +274 -0
  124. package/src/dev/__tests__/entry.spec.ts +8 -2
  125. package/src/dev/__tests__/index.spec.ts +1 -3
  126. package/src/dev/index.ts +9 -3
  127. package/src/docker/__tests__/templates.spec.ts +3 -1
  128. package/src/index.ts +88 -0
  129. package/src/init/__tests__/generators.spec.ts +273 -0
  130. package/src/init/__tests__/init.spec.ts +3 -3
  131. package/src/init/generators/auth.ts +1 -0
  132. package/src/init/generators/config.ts +2 -0
  133. package/src/init/generators/models.ts +6 -1
  134. package/src/init/generators/monorepo.ts +3 -0
  135. package/src/init/generators/ui.ts +1472 -0
  136. package/src/init/generators/web.ts +134 -87
  137. package/src/init/index.ts +22 -3
  138. package/src/init/templates/api.ts +109 -3
  139. package/src/openapi.ts +99 -13
  140. package/src/workspace/__tests__/schema.spec.ts +107 -0
  141. package/src/workspace/schema.ts +314 -4
  142. package/src/workspace/types.ts +22 -36
  143. package/dist/dokploy-api-CItuaWTq.mjs +0 -3
  144. package/dist/dokploy-api-DBNE8MDt.cjs +0 -3
  145. package/dist/encryption-CQXBZGkt.mjs +0 -3
  146. package/dist/index-A70abJ1m.d.mts.map +0 -1
  147. package/dist/index-pOA56MWT.d.cts.map +0 -1
  148. package/dist/openapi-C3C-BzIZ.mjs.map +0 -1
  149. package/dist/openapi-D7WwlpPF.cjs.map +0 -1
  150. package/dist/workspace-CaVW6j2q.cjs.map +0 -1
  151. package/dist/workspace-DLFRaDc-.mjs.map +0 -1
  152. package/tsconfig.tsbuildinfo +0 -1
@@ -592,6 +592,113 @@ describe('WorkspaceConfigSchema', () => {
592
592
  });
593
593
  });
594
594
 
595
+ describe('DNS configuration', () => {
596
+ it('should accept multi-domain DNS config', () => {
597
+ const config = {
598
+ apps: {
599
+ api: {
600
+ type: 'backend' as const,
601
+ path: 'apps/api',
602
+ port: 3000,
603
+ routes: './src/**/*.ts',
604
+ },
605
+ },
606
+ deploy: {
607
+ default: 'dokploy' as const,
608
+ dns: {
609
+ 'geekmidas.dev': { provider: 'hostinger' as const },
610
+ 'geekmidas.com': {
611
+ provider: 'route53' as const,
612
+ region: 'us-east-1' as const,
613
+ },
614
+ },
615
+ },
616
+ };
617
+
618
+ const result = validateWorkspaceConfig(config);
619
+
620
+ expect(result.deploy?.dns).toEqual({
621
+ 'geekmidas.dev': { provider: 'hostinger' },
622
+ 'geekmidas.com': { provider: 'route53', region: 'us-east-1' },
623
+ });
624
+ });
625
+
626
+ it('should accept legacy single-domain DNS config', () => {
627
+ const config = {
628
+ apps: {
629
+ api: {
630
+ type: 'backend' as const,
631
+ path: 'apps/api',
632
+ port: 3000,
633
+ routes: './src/**/*.ts',
634
+ },
635
+ },
636
+ deploy: {
637
+ default: 'dokploy' as const,
638
+ dns: {
639
+ provider: 'hostinger' as const,
640
+ domain: 'example.com',
641
+ },
642
+ },
643
+ };
644
+
645
+ const result = validateWorkspaceConfig(config);
646
+
647
+ expect(result.deploy?.dns).toEqual({
648
+ provider: 'hostinger',
649
+ domain: 'example.com',
650
+ });
651
+ });
652
+
653
+ it('should accept DNS config with manual provider', () => {
654
+ const config = {
655
+ apps: {
656
+ api: {
657
+ type: 'backend' as const,
658
+ path: 'apps/api',
659
+ port: 3000,
660
+ routes: './src/**/*.ts',
661
+ },
662
+ },
663
+ deploy: {
664
+ default: 'dokploy' as const,
665
+ dns: {
666
+ 'example.com': { provider: 'manual' as const },
667
+ },
668
+ },
669
+ };
670
+
671
+ const result = validateWorkspaceConfig(config);
672
+
673
+ expect(result.deploy?.dns).toEqual({
674
+ 'example.com': { provider: 'manual' },
675
+ });
676
+ });
677
+
678
+ it('should accept DNS config with TTL', () => {
679
+ const config = {
680
+ apps: {
681
+ api: {
682
+ type: 'backend' as const,
683
+ path: 'apps/api',
684
+ port: 3000,
685
+ routes: './src/**/*.ts',
686
+ },
687
+ },
688
+ deploy: {
689
+ default: 'dokploy' as const,
690
+ dns: {
691
+ 'example.com': { provider: 'hostinger' as const, ttl: 600 },
692
+ },
693
+ },
694
+ };
695
+
696
+ const result = validateWorkspaceConfig(config);
697
+
698
+ expect((result.deploy?.dns as any)['example.com'].ttl).toBe(600);
699
+ });
700
+ });
701
+
595
702
  describe('deploy target helpers', () => {
596
703
  it('isDeployTargetSupported should return true for dokploy', () => {
597
704
  expect(isDeployTargetSupported('dokploy')).toBe(true);
@@ -75,7 +75,10 @@ const FrontendFrameworkSchema = z.enum(['nextjs', 'remix', 'vite']);
75
75
  /**
76
76
  * Combined framework schema (backend or frontend).
77
77
  */
78
- const FrameworkSchema = z.union([BackendFrameworkSchema, FrontendFrameworkSchema]);
78
+ const FrameworkSchema = z.union([
79
+ BackendFrameworkSchema,
80
+ FrontendFrameworkSchema,
81
+ ]);
79
82
 
80
83
  /**
81
84
  * Deploy target schema.
@@ -164,12 +167,251 @@ const DokployWorkspaceConfigSchema = z.object({
164
167
  registryId: z.string().optional(),
165
168
  });
166
169
 
170
+ // =============================================================================
171
+ // AWS Regions (needed by DNS and State providers)
172
+ // =============================================================================
173
+
174
+ /**
175
+ * Valid AWS regions.
176
+ */
177
+ const AwsRegionSchema = z.enum([
178
+ 'us-east-1',
179
+ 'us-east-2',
180
+ 'us-west-1',
181
+ 'us-west-2',
182
+ 'af-south-1',
183
+ 'ap-east-1',
184
+ 'ap-south-1',
185
+ 'ap-south-2',
186
+ 'ap-southeast-1',
187
+ 'ap-southeast-2',
188
+ 'ap-southeast-3',
189
+ 'ap-southeast-4',
190
+ 'ap-northeast-1',
191
+ 'ap-northeast-2',
192
+ 'ap-northeast-3',
193
+ 'ca-central-1',
194
+ 'eu-central-1',
195
+ 'eu-central-2',
196
+ 'eu-west-1',
197
+ 'eu-west-2',
198
+ 'eu-west-3',
199
+ 'eu-south-1',
200
+ 'eu-south-2',
201
+ 'eu-north-1',
202
+ 'me-south-1',
203
+ 'me-central-1',
204
+ 'sa-east-1',
205
+ ]);
206
+
207
+ // =============================================================================
208
+ // DNS Record Types (used by DnsProvider interface)
209
+ // =============================================================================
210
+
211
+ /**
212
+ * DNS record types supported across providers.
213
+ */
214
+ export const DnsRecordTypeSchema = z.enum([
215
+ 'A',
216
+ 'AAAA',
217
+ 'CNAME',
218
+ 'MX',
219
+ 'TXT',
220
+ 'NS',
221
+ 'SRV',
222
+ 'CAA',
223
+ ]);
224
+
225
+ /**
226
+ * A DNS record as returned by the provider.
227
+ */
228
+ export const DnsRecordSchema = z.object({
229
+ /** Subdomain name (e.g., 'api' for api.example.com, '@' for root) */
230
+ name: z.string(),
231
+ /** Record type */
232
+ type: DnsRecordTypeSchema,
233
+ /** TTL in seconds */
234
+ ttl: z.number().int().positive(),
235
+ /** Record values */
236
+ values: z.array(z.string()),
237
+ });
238
+
239
+ /**
240
+ * A DNS record to create or update.
241
+ */
242
+ export const UpsertDnsRecordSchema = z.object({
243
+ /** Subdomain name (e.g., 'api' for api.example.com, '@' for root) */
244
+ name: z.string(),
245
+ /** Record type */
246
+ type: DnsRecordTypeSchema,
247
+ /** TTL in seconds */
248
+ ttl: z.number().int().positive(),
249
+ /** Record value (IP address, hostname, etc.) */
250
+ value: z.string(),
251
+ });
252
+
253
+ /**
254
+ * Result of an upsert operation.
255
+ */
256
+ export const UpsertResultSchema = z.object({
257
+ /** The record that was upserted */
258
+ record: UpsertDnsRecordSchema,
259
+ /** Whether the record was created (true) or updated (false) */
260
+ created: z.boolean(),
261
+ /** Whether the record already existed with the same value */
262
+ unchanged: z.boolean(),
263
+ });
264
+
265
+ // =============================================================================
266
+ // DNS Provider Configuration
267
+ // =============================================================================
268
+
269
+ /**
270
+ * Hostinger DNS provider config (without domain - domain is the record key).
271
+ */
272
+ export const HostingerDnsProviderSchema = z.object({
273
+ provider: z.literal('hostinger'),
274
+ /** TTL in seconds (default: 300) */
275
+ ttl: z.number().int().positive().optional(),
276
+ });
277
+
278
+ /**
279
+ * Route53 DNS provider config (without domain - domain is the record key).
280
+ */
281
+ export const Route53DnsProviderSchema = z.object({
282
+ provider: z.literal('route53'),
283
+ /** AWS region (optional - uses AWS_REGION env var if not provided) */
284
+ region: AwsRegionSchema.optional(),
285
+ /** AWS profile name (optional - uses default credential chain if not provided) */
286
+ profile: z.string().optional(),
287
+ /** Hosted zone ID (optional - auto-detected from domain if not provided) */
288
+ hostedZoneId: z.string().optional(),
289
+ /** TTL in seconds (default: 300) */
290
+ ttl: z.number().int().positive().optional(),
291
+ });
292
+
293
+ /**
294
+ * Cloudflare DNS provider config (placeholder for future).
295
+ */
296
+ export const CloudflareDnsProviderSchema = z.object({
297
+ provider: z.literal('cloudflare'),
298
+ /** TTL in seconds (default: 300) */
299
+ ttl: z.number().int().positive().optional(),
300
+ });
301
+
302
+ /**
303
+ * Manual DNS configuration (user handles DNS themselves).
304
+ */
305
+ export const ManualDnsProviderSchema = z.object({
306
+ provider: z.literal('manual'),
307
+ });
308
+
309
+ /**
310
+ * Custom DNS provider config (user-provided implementation).
311
+ */
312
+ export const CustomDnsProviderSchema = z.object({
313
+ /** Custom DnsProvider implementation */
314
+ provider: z.custom<{
315
+ name: string;
316
+ getRecords: Function;
317
+ upsertRecords: Function;
318
+ }>(
319
+ (val) =>
320
+ typeof val === 'object' &&
321
+ val !== null &&
322
+ typeof (val as any).name === 'string' &&
323
+ typeof (val as any).getRecords === 'function' &&
324
+ typeof (val as any).upsertRecords === 'function',
325
+ {
326
+ message:
327
+ 'Custom DNS provider must implement name, getRecords(), and upsertRecords() methods',
328
+ },
329
+ ),
330
+ /** TTL in seconds (default: 300) */
331
+ ttl: z.number().int().positive().optional(),
332
+ });
333
+
334
+ /**
335
+ * Built-in DNS provider config (discriminated union).
336
+ */
337
+ export const BuiltInDnsProviderSchema = z.discriminatedUnion('provider', [
338
+ HostingerDnsProviderSchema,
339
+ Route53DnsProviderSchema,
340
+ CloudflareDnsProviderSchema,
341
+ ManualDnsProviderSchema,
342
+ ]);
343
+
344
+ /**
345
+ * Single DNS provider config (for one domain).
346
+ */
347
+ export const DnsProviderSchema = z.union([
348
+ BuiltInDnsProviderSchema,
349
+ CustomDnsProviderSchema,
350
+ ]);
351
+
352
+ /**
353
+ * DNS configuration schema.
354
+ *
355
+ * Maps root domains to their DNS provider configuration.
356
+ * Example:
357
+ * ```
358
+ * dns: {
359
+ * 'geekmidas.dev': { provider: 'hostinger' },
360
+ * 'geekmidas.com': { provider: 'route53' },
361
+ * }
362
+ * ```
363
+ *
364
+ * Supported providers:
365
+ * - 'hostinger': Use Hostinger DNS API
366
+ * - 'route53': Use AWS Route53
367
+ * - 'cloudflare': Use Cloudflare DNS API (future)
368
+ * - 'manual': Don't create records, just print required records
369
+ * - Custom: Provide a DnsProvider implementation
370
+ */
371
+ export const DnsConfigSchema = z.record(z.string(), DnsProviderSchema);
372
+
373
+ // Legacy single-domain config schemas (for backwards compatibility)
374
+ export const HostingerDnsConfigSchema = HostingerDnsProviderSchema.extend({
375
+ domain: z.string().min(1, 'Domain is required'),
376
+ });
377
+ export const Route53DnsConfigSchema = Route53DnsProviderSchema.extend({
378
+ domain: z.string().min(1, 'Domain is required'),
379
+ });
380
+ export const CloudflareDnsConfigSchema = CloudflareDnsProviderSchema.extend({
381
+ domain: z.string().min(1, 'Domain is required'),
382
+ });
383
+ export const ManualDnsConfigSchema = ManualDnsProviderSchema.extend({
384
+ domain: z.string().min(1, 'Domain is required'),
385
+ });
386
+ export const CustomDnsConfigSchema = CustomDnsProviderSchema.extend({
387
+ domain: z.string().min(1, 'Domain is required'),
388
+ });
389
+ export const BuiltInDnsConfigSchema = z.discriminatedUnion('provider', [
390
+ HostingerDnsConfigSchema,
391
+ Route53DnsConfigSchema,
392
+ CloudflareDnsConfigSchema,
393
+ ManualDnsConfigSchema,
394
+ ]);
395
+ export const LegacyDnsConfigSchema = z.union([
396
+ BuiltInDnsConfigSchema,
397
+ CustomDnsConfigSchema,
398
+ ]);
399
+
400
+ /**
401
+ * Combined DNS config that supports both new multi-domain and legacy single-domain formats.
402
+ */
403
+ export const DnsConfigWithLegacySchema = z.union([
404
+ DnsConfigSchema,
405
+ LegacyDnsConfigSchema,
406
+ ]);
407
+
167
408
  /**
168
409
  * Deploy configuration schema.
169
410
  */
170
411
  const DeployConfigSchema = z.object({
171
412
  default: DeployTargetSchema.optional(),
172
413
  dokploy: DokployWorkspaceConfigSchema.optional(),
414
+ dns: DnsConfigWithLegacySchema.optional(),
173
415
  });
174
416
 
175
417
  /**
@@ -197,6 +439,62 @@ const SecretsConfigSchema = z.object({
197
439
  kdf: z.enum(['scrypt', 'pbkdf2']).optional(),
198
440
  });
199
441
 
442
+ // =============================================================================
443
+ // State Provider Configuration
444
+ // =============================================================================
445
+
446
+ /**
447
+ * Local state provider config.
448
+ */
449
+ const LocalStateConfigSchema = z.object({
450
+ provider: z.literal('local'),
451
+ });
452
+
453
+ /**
454
+ * SSM state provider config (requires region).
455
+ */
456
+ const SSMStateConfigSchema = z.object({
457
+ provider: z.literal('ssm'),
458
+ /** AWS region (required for SSM provider) */
459
+ region: AwsRegionSchema,
460
+ });
461
+
462
+ /**
463
+ * Custom state provider config (user-provided implementation).
464
+ */
465
+ const CustomStateConfigSchema = z.object({
466
+ /** Custom StateProvider implementation */
467
+ provider: z.custom<{ read: Function; write: Function }>(
468
+ (val) =>
469
+ typeof val === 'object' &&
470
+ val !== null &&
471
+ typeof (val as any).read === 'function' &&
472
+ typeof (val as any).write === 'function',
473
+ { message: 'Custom provider must implement read() and write() methods' },
474
+ ),
475
+ });
476
+
477
+ /**
478
+ * Built-in state provider config (discriminated union).
479
+ */
480
+ const BuiltInStateConfigSchema = z.discriminatedUnion('provider', [
481
+ LocalStateConfigSchema,
482
+ SSMStateConfigSchema,
483
+ ]);
484
+
485
+ /**
486
+ * State configuration schema.
487
+ *
488
+ * Configures how deployment state is stored.
489
+ * - 'local': Store in .gkm/deploy-{stage}.json (default)
490
+ * - 'ssm': Store in AWS SSM Parameter Store (requires region)
491
+ * - Custom: Provide a StateProvider implementation with read/write methods
492
+ */
493
+ const StateConfigSchema = z.union([
494
+ BuiltInStateConfigSchema,
495
+ CustomStateConfigSchema,
496
+ ]);
497
+
200
498
  /**
201
499
  * App configuration schema.
202
500
  */
@@ -248,7 +546,8 @@ const AppConfigSchema = z
248
546
  return true;
249
547
  },
250
548
  {
251
- message: 'Frontend apps must have a valid frontend framework (nextjs, remix, vite)',
549
+ message:
550
+ 'Frontend apps must have a valid frontend framework (nextjs, remix, vite)',
252
551
  path: ['framework'],
253
552
  },
254
553
  )
@@ -281,6 +580,7 @@ export const WorkspaceConfigSchema = z
281
580
  deploy: DeployConfigSchema.optional(),
282
581
  services: ServicesConfigSchema.optional(),
283
582
  secrets: SecretsConfigSchema.optional(),
583
+ state: StateConfigSchema.optional(),
284
584
  })
285
585
  .refine(
286
586
  (data) => {
@@ -343,7 +643,7 @@ export const WorkspaceConfigSchema = z
343
643
  const defaultTarget = data.deploy?.default;
344
644
  if (defaultTarget && !isDeployTargetSupported(defaultTarget)) {
345
645
  ctx.addIssue({
346
- code: z.ZodIssueCode.custom,
646
+ code: 'custom',
347
647
  message: getDeployTargetError(defaultTarget),
348
648
  path: ['deploy', 'default'],
349
649
  });
@@ -353,13 +653,23 @@ export const WorkspaceConfigSchema = z
353
653
  for (const [appName, app] of Object.entries(data.apps)) {
354
654
  if (app.deploy && !isDeployTargetSupported(app.deploy)) {
355
655
  ctx.addIssue({
356
- code: z.ZodIssueCode.custom,
656
+ code: 'custom',
357
657
  message: getDeployTargetError(app.deploy, appName),
358
658
  path: ['apps', appName, 'deploy'],
359
659
  });
360
660
  return;
361
661
  }
362
662
  }
663
+
664
+ // Validate workspace name is required for SSM state provider
665
+ if (data.state?.provider === 'ssm' && !data.name) {
666
+ ctx.addIssue({
667
+ code: 'custom',
668
+ message:
669
+ 'Workspace name is required when using SSM state provider. Add "name" to your gkm.config.ts.',
670
+ path: ['name'],
671
+ });
672
+ }
363
673
  });
364
674
 
365
675
  /**
@@ -1,3 +1,5 @@
1
+ import type { z } from 'zod/v4';
2
+ import type { StateConfig } from '../deploy/StateProvider.js';
1
3
  import type {
2
4
  GkmConfig,
3
5
  HooksConfig,
@@ -8,6 +10,7 @@ import type {
8
10
  StudioConfig,
9
11
  TelescopeConfig,
10
12
  } from '../types.js';
13
+ import type { DnsConfigWithLegacySchema, DnsProviderSchema } from './schema.js';
11
14
 
12
15
  /**
13
16
  * Deploy target for an app.
@@ -248,58 +251,40 @@ export interface DokployWorkspaceConfig {
248
251
  /**
249
252
  * DNS provider types for automatic DNS record creation.
250
253
  */
251
- export type DnsProvider = 'hostinger' | 'cloudflare' | 'manual';
254
+ export type DnsProviderType = 'hostinger' | 'route53' | 'cloudflare' | 'manual';
255
+
256
+ /**
257
+ * DNS provider configuration for a single domain.
258
+ */
259
+ export type DnsProvider = z.infer<typeof DnsProviderSchema>;
252
260
 
253
261
  /**
254
262
  * DNS configuration for automatic record creation during deployment.
255
263
  *
264
+ * Maps root domains to their DNS provider configuration.
256
265
  * When configured, the deploy command will automatically create DNS
257
266
  * A records pointing to your Dokploy server for each app's domain.
258
267
  *
259
268
  * @example
260
269
  * ```ts
261
- * // Auto-create DNS records at Hostinger
270
+ * // Multi-domain with different providers
262
271
  * dns: {
263
- * provider: 'hostinger',
264
- * domain: 'traflabs.io',
265
- * autoCreate: true,
272
+ * 'geekmidas.dev': { provider: 'hostinger' },
273
+ * 'geekmidas.com': { provider: 'route53' },
274
+ * }
275
+ *
276
+ * // Single domain
277
+ * dns: {
278
+ * 'traflabs.io': { provider: 'hostinger', ttl: 300 },
266
279
  * }
267
280
  *
268
281
  * // Manual mode - just print required records
269
282
  * dns: {
270
- * provider: 'manual',
271
- * domain: 'traflabs.io',
283
+ * 'myapp.com': { provider: 'manual' },
272
284
  * }
273
285
  * ```
274
286
  */
275
- export interface DnsConfig {
276
- /**
277
- * DNS provider for automatic record creation.
278
- * - 'hostinger': Use Hostinger DNS API
279
- * - 'cloudflare': Use Cloudflare DNS API (future)
280
- * - 'manual': Don't create records, just print required records
281
- */
282
- provider: DnsProvider;
283
-
284
- /**
285
- * Root domain where records will be created.
286
- * @example 'traflabs.io', 'example.com'
287
- */
288
- domain: string;
289
-
290
- /**
291
- * Automatically create DNS records during deploy.
292
- * If false, only prints required records for manual setup.
293
- * @default true
294
- */
295
- autoCreate?: boolean;
296
-
297
- /**
298
- * TTL for created DNS records in seconds.
299
- * @default 300 (5 minutes)
300
- */
301
- ttl?: number;
302
- }
287
+ export type DnsConfig = z.infer<typeof DnsConfigWithLegacySchema>;
303
288
 
304
289
  /**
305
290
  * Deployment configuration for the workspace.
@@ -325,7 +310,6 @@ export interface DnsConfig {
325
310
  * dns: {
326
311
  * provider: 'hostinger',
327
312
  * domain: 'myapp.com',
328
- * autoCreate: true,
329
313
  * },
330
314
  * }
331
315
  * ```
@@ -942,6 +926,8 @@ export interface NormalizedWorkspace {
942
926
  shared: SharedConfig;
943
927
  /** Secrets configuration (empty object if not specified) */
944
928
  secrets: SecretsConfig;
929
+ /** State provider configuration (undefined = local filesystem) */
930
+ state?: StateConfig;
945
931
  }
946
932
 
947
933
  /**
@@ -1,3 +0,0 @@
1
- import { DokployApi, DokployApiError } from "./dokploy-api-94KzmTVf.mjs";
2
-
3
- export { DokployApi };
@@ -1,3 +0,0 @@
1
- const require_dokploy_api = require('./dokploy-api-YD8WCQfW.cjs');
2
-
3
- exports.DokployApi = require_dokploy_api.DokployApi;
@@ -1,3 +0,0 @@
1
- import { encryptSecrets, generateDefineOptions } from "./encryption-BC4MAODn.mjs";
2
-
3
- export { encryptSecrets, generateDefineOptions };
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-A70abJ1m.d.mts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-pOA56MWT.d.cts","names":[],"sources":["../src/workspace/types.ts","../src/workspace/schema.ts","../src/workspace/index.ts"],"sourcesContent":[],"mappings":"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"}