hatchkit 0.1.41 → 0.1.43

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 (120) hide show
  1. package/dist/adopt.d.ts +77 -0
  2. package/dist/adopt.d.ts.map +1 -1
  3. package/dist/adopt.js +757 -170
  4. package/dist/adopt.js.map +1 -1
  5. package/dist/config.d.ts +32 -10
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +91 -38
  8. package/dist/config.js.map +1 -1
  9. package/dist/deploy/coolify-app.d.ts.map +1 -1
  10. package/dist/deploy/coolify-app.js +0 -7
  11. package/dist/deploy/coolify-app.js.map +1 -1
  12. package/dist/deploy/coolify.d.ts.map +1 -1
  13. package/dist/deploy/coolify.js +20 -1
  14. package/dist/deploy/coolify.js.map +1 -1
  15. package/dist/deploy/ghcr.d.ts +4 -2
  16. package/dist/deploy/ghcr.d.ts.map +1 -1
  17. package/dist/deploy/ghcr.js +1 -1
  18. package/dist/deploy/ghcr.js.map +1 -1
  19. package/dist/deploy/github.d.ts +4 -3
  20. package/dist/deploy/github.d.ts.map +1 -1
  21. package/dist/deploy/github.js +5 -2
  22. package/dist/deploy/github.js.map +1 -1
  23. package/dist/deploy/pages.d.ts.map +1 -1
  24. package/dist/deploy/pages.js +8 -14
  25. package/dist/deploy/pages.js.map +1 -1
  26. package/dist/deploy/regen-infra.d.ts.map +1 -1
  27. package/dist/deploy/regen-infra.js +1 -11
  28. package/dist/deploy/regen-infra.js.map +1 -1
  29. package/dist/deploy/rollback.d.ts.map +1 -1
  30. package/dist/deploy/rollback.js +30 -6
  31. package/dist/deploy/rollback.js.map +1 -1
  32. package/dist/deploy/terraform.d.ts.map +1 -1
  33. package/dist/deploy/terraform.js +20 -37
  34. package/dist/deploy/terraform.js.map +1 -1
  35. package/dist/dns.d.ts.map +1 -1
  36. package/dist/dns.js +4 -5
  37. package/dist/dns.js.map +1 -1
  38. package/dist/doctor.d.ts +15 -0
  39. package/dist/doctor.d.ts.map +1 -1
  40. package/dist/doctor.js +110 -36
  41. package/dist/doctor.js.map +1 -1
  42. package/dist/email/index.d.ts +31 -0
  43. package/dist/email/index.d.ts.map +1 -0
  44. package/dist/email/index.js +251 -0
  45. package/dist/email/index.js.map +1 -0
  46. package/dist/email/presets.d.ts +14 -0
  47. package/dist/email/presets.d.ts.map +1 -0
  48. package/dist/email/presets.js +33 -0
  49. package/dist/email/presets.js.map +1 -0
  50. package/dist/email/setup.d.ts +93 -0
  51. package/dist/email/setup.d.ts.map +1 -0
  52. package/dist/email/setup.js +263 -0
  53. package/dist/email/setup.js.map +1 -0
  54. package/dist/email/spf.d.ts +56 -0
  55. package/dist/email/spf.d.ts.map +1 -0
  56. package/dist/email/spf.js +102 -0
  57. package/dist/email/spf.js.map +1 -0
  58. package/dist/index.js +113 -4
  59. package/dist/index.js.map +1 -1
  60. package/dist/inventory.d.ts.map +1 -1
  61. package/dist/inventory.js +34 -11
  62. package/dist/inventory.js.map +1 -1
  63. package/dist/overview.d.ts.map +1 -1
  64. package/dist/overview.js +43 -15
  65. package/dist/overview.js.map +1 -1
  66. package/dist/prompts.d.ts +5 -0
  67. package/dist/prompts.d.ts.map +1 -1
  68. package/dist/prompts.js +29 -7
  69. package/dist/prompts.js.map +1 -1
  70. package/dist/provision/index.d.ts +20 -1
  71. package/dist/provision/index.d.ts.map +1 -1
  72. package/dist/provision/index.js +115 -0
  73. package/dist/provision/index.js.map +1 -1
  74. package/dist/provision/s3-buckets.d.ts.map +1 -1
  75. package/dist/provision/s3-buckets.js +45 -25
  76. package/dist/provision/s3-buckets.js.map +1 -1
  77. package/dist/provision/write-env.d.ts +6 -0
  78. package/dist/provision/write-env.d.ts.map +1 -1
  79. package/dist/provision/write-env.js +17 -0
  80. package/dist/provision/write-env.js.map +1 -1
  81. package/dist/scaffold/app.d.ts.map +1 -1
  82. package/dist/scaffold/app.js +15 -7
  83. package/dist/scaffold/app.js.map +1 -1
  84. package/dist/scaffold/build-pipeline.d.ts +40 -0
  85. package/dist/scaffold/build-pipeline.d.ts.map +1 -1
  86. package/dist/scaffold/build-pipeline.js +201 -5
  87. package/dist/scaffold/build-pipeline.js.map +1 -1
  88. package/dist/scaffold/infra.d.ts +4 -5
  89. package/dist/scaffold/infra.d.ts.map +1 -1
  90. package/dist/scaffold/infra.js +11 -56
  91. package/dist/scaffold/infra.js.map +1 -1
  92. package/dist/scaffold/manifest.d.ts.map +1 -1
  93. package/dist/scaffold/manifest.js +1 -0
  94. package/dist/scaffold/manifest.js.map +1 -1
  95. package/dist/scaffold/pages-heuristics.d.ts.map +1 -1
  96. package/dist/scaffold/pages-heuristics.js +10 -10
  97. package/dist/scaffold/pages-heuristics.js.map +1 -1
  98. package/dist/scaffold/pages-mode.js +2 -4
  99. package/dist/scaffold/pages-mode.js.map +1 -1
  100. package/dist/scaffold/pkg-json.d.ts +4 -0
  101. package/dist/scaffold/pkg-json.d.ts.map +1 -1
  102. package/dist/scaffold/pkg-json.js +17 -0
  103. package/dist/scaffold/pkg-json.js.map +1 -1
  104. package/dist/scaffold/update.js +1 -1
  105. package/dist/scaffold/update.js.map +1 -1
  106. package/dist/templates/build-pipeline/Dockerfile.nextjs-monorepo.hbs +107 -0
  107. package/dist/templates/build-pipeline/Dockerfile.nextjs.hbs +103 -0
  108. package/dist/templates/build-pipeline/docker-compose.yml.hbs +37 -8
  109. package/dist/utils/cloudflare-api.d.ts +146 -20
  110. package/dist/utils/cloudflare-api.d.ts.map +1 -1
  111. package/dist/utils/cloudflare-api.js +203 -11
  112. package/dist/utils/cloudflare-api.js.map +1 -1
  113. package/dist/utils/run-ledger.d.ts +22 -1
  114. package/dist/utils/run-ledger.d.ts.map +1 -1
  115. package/dist/utils/run-ledger.js.map +1 -1
  116. package/dist/utils/s3-admin.d.ts +9 -0
  117. package/dist/utils/s3-admin.d.ts.map +1 -0
  118. package/dist/utils/s3-admin.js +46 -0
  119. package/dist/utils/s3-admin.js.map +1 -0
  120. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pages-mode.js","sourceRoot":"","sources":["../../src/scaffold/pages-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages-mode.js","sourceRoot":"","sources":["../../src/scaffold/pages-mode.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,10 @@ export declare function stripPackageJsonBuildBlock(outputDir: string): void;
8
8
  * "pnpm typecheck:electron" → <script deleted entirely>
9
9
  */
10
10
  export declare function unchainTypecheckScript(outputDir: string): void;
11
+ /** Set (or clear) the `description` field on the root `package.json`.
12
+ * Passing an empty string deletes the field so we don't ship an empty
13
+ * description through to npm metadata. */
14
+ export declare function setPackageJsonDescription(outputDir: string, description: string): void;
11
15
  /** Set a specific script entry in the root `package.json`. Creates
12
16
  * `scripts` if missing. */
13
17
  export declare function setPackageJsonScript(outputDir: string, name: string, value: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-json.d.ts","sourceRoot":"","sources":["../../src/scaffold/pkg-json.ts"],"names":[],"mappings":"AAaA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAOhF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAU7E;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAkB9D;AAED;4BAC4B;AAC5B,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOzF;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASlE;AAED;;qCAEqC;AACrC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASrE"}
1
+ {"version":3,"file":"pkg-json.d.ts","sourceRoot":"","sources":["../../src/scaffold/pkg-json.ts"],"names":[],"mappings":"AAaA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAOhF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAU7E;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAkB9D;AAED;;2CAE2C;AAC3C,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAWtF;AAED;4BAC4B;AAC5B,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOzF;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASlE;AAED;;qCAEqC;AACrC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASrE"}
@@ -71,6 +71,23 @@ export function unchainTypecheckScript(outputDir) {
71
71
  }
72
72
  writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n", "utf-8");
73
73
  }
74
+ /** Set (or clear) the `description` field on the root `package.json`.
75
+ * Passing an empty string deletes the field so we don't ship an empty
76
+ * description through to npm metadata. */
77
+ export function setPackageJsonDescription(outputDir, description) {
78
+ const path = join(outputDir, "package.json");
79
+ if (!existsSync(path))
80
+ return;
81
+ const pkg = JSON.parse(readFileSync(path, "utf-8"));
82
+ const trimmed = description.trim();
83
+ if (trimmed) {
84
+ pkg.description = trimmed;
85
+ }
86
+ else {
87
+ delete pkg.description;
88
+ }
89
+ writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n", "utf-8");
90
+ }
74
91
  /** Set a specific script entry in the root `package.json`. Creates
75
92
  * `scripts` if missing. */
76
93
  export function setPackageJsonScript(outputDir, name, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-json.js","sourceRoot":"","sources":["../../src/scaffold/pkg-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkg-json.js","sourceRoot":"","sources":["../../src/scaffold/pkg-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,KAAe;IACxE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,KAAe;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,YAAY;YAAE,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,eAAe;YAAE,OAAO,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,GAAG,CAAC,oBAAoB;YAAE,OAAO,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,KAAK,CAAC;IACjB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS;QAAE,OAAO;IACpC,MAAM,YAAY,GAAG,iCAAiC,CAAC;IACvD,IAAI,MAAM,GAAW,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3C,MAAM,GAAG,MAAM;SACZ,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;SACnD,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC;SACnD,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,IAAI,EAAE,CAAC;IACV,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/B,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;2CAE2C;AAC3C,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,WAAmB;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,WAAW,CAAC;IACzB,CAAC;IACD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;4BAC4B;AAC5B,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAa;IACjF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAChC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC1B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;qCAEqC;AACrC,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -139,7 +139,7 @@ async function addDesktop(projectDir, resolvedStarter, manifest) {
139
139
  "itch:push:win",
140
140
  "itch:push:linux",
141
141
  ];
142
- const DESKTOP_DEPS = ["electron", "electron-builder", "electron-icon-builder", "wait-on"];
142
+ const DESKTOP_DEPS = ["electron", "electron-builder", "icon-gen", "wait-on"];
143
143
  projectPkg.scripts = projectPkg.scripts ?? {};
144
144
  for (const name of DESKTOP_SCRIPTS) {
145
145
  if (starterPkg.scripts?.[name])
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/scaffold/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/scaffold/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ # syntax=docker/dockerfile:1
2
+ #
3
+ # Next.js + Coolify image for {{name}} (pnpm/yarn workspace monorepo
4
+ # variant). The Next app lives at `{{monorepoPackage}}/` and is built
5
+ # from the workspace root so the lockfile / hoisted node_modules stay
6
+ # coherent with what `pnpm install` produces on the developer's machine.
7
+ #
8
+ # Why a separate template from Dockerfile.nextjs.hbs:
9
+ # - `pnpm install --frozen-lockfile` must run at the WORKSPACE ROOT,
10
+ # not inside the sub-package, or pnpm refuses to resolve the lockfile.
11
+ # - `pnpm --filter <name> build` keys off the package `name` field
12
+ # (not the directory), which is why we pass `packageName` separately
13
+ # from `monorepoPackage`.
14
+ # - `next start` needs WORKDIR to be the sub-package so it can find
15
+ # `.next/` and `next.config.*` where Next.js expects them on disk.
16
+ #
17
+ # dotenvx decrypts the committed encrypted .env.production at TWO points:
18
+ #
19
+ # 1. Build stage — uses the dotenvx_private_key BuildKit secret
20
+ # (passed by the workflow from the GH Actions secret
21
+ # DOTENV_PRIVATE_KEY_PRODUCTION) to decrypt in-memory before
22
+ # running the build. Required so NEXT_PUBLIC_* values get inlined
23
+ # into the static client bundle. The secret is mounted as tmpfs
24
+ # and never lands in `docker history` or any image layer.
25
+ #
26
+ # 2. Runtime CMD — `dotenvx run` reads the same .env.production and
27
+ # decrypts again, this time using DOTENV_PRIVATE_KEY_PRODUCTION
28
+ # from the container env (forwarded by docker-compose.yml from
29
+ # Coolify's app env). This covers server-side values the runtime
30
+ # reads with `process.env.X` — Server Action handlers, route
31
+ # handlers, etc.
32
+ #
33
+ # Image base is bookworm-slim (not alpine) because Next's optional
34
+ # native deps (sharp for image optimisation) ship glibc binaries that
35
+ # don't run on Alpine's musl without a rebuild.
36
+ ARG NODE_VERSION={{nodeMajor}}
37
+
38
+ # ---------------------------------------------------------------------------
39
+ # Build
40
+ # ---------------------------------------------------------------------------
41
+ FROM node:${NODE_VERSION}-bookworm-slim AS build
42
+ WORKDIR /app
43
+
44
+ RUN corepack enable
45
+
46
+ # Bring in the workspace manifests first so `pnpm install` can hit the
47
+ # Docker layer cache when only source files (not deps) change.
48
+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
49
+ COPY {{monorepoPackage}}/package.json ./{{monorepoPackage}}/package.json
50
+ RUN pnpm install --frozen-lockfile
51
+
52
+ COPY . .
53
+
54
+ # Two separate RUN steps on purpose: BuildKit echoes the entire RUN
55
+ # body into any failure log, so splitting the secret-presence check
56
+ # off means the "secret not supplied" message only surfaces when
57
+ # that's actually what failed — a downstream `next build` error
58
+ # won't drag the misleading echo into its context.
59
+ RUN --mount=type=secret,id=dotenvx_private_key,env=DOTENV_PRIVATE_KEY_PRODUCTION \
60
+ test -n "$DOTENV_PRIVATE_KEY_PRODUCTION" || { \
61
+ echo "ERROR: dotenvx_private_key build secret not supplied. The workflow at .github/workflows/deploy.yml should pass it via 'secrets:' from the GH Actions secret DOTENV_PRIVATE_KEY_PRODUCTION." >&2; \
62
+ exit 1; \
63
+ }
64
+
65
+ # dotenvx decrypts .env.production in memory and re-exports each
66
+ # KEY=VALUE for `pnpm build`. next build sees the plain values and
67
+ # bakes NEXT_PUBLIC_* into the static client bundle. The --filter
68
+ # targets the package by its `name` field, not its directory.
69
+ RUN --mount=type=secret,id=dotenvx_private_key,env=DOTENV_PRIVATE_KEY_PRODUCTION \
70
+ pnpm dlx @dotenvx/dotenvx run -- pnpm --filter {{packageName}} build
71
+
72
+ # ---------------------------------------------------------------------------
73
+ # Runtime — `next start` on PORT={{port}}, WORKDIR'd into the sub-package.
74
+ # ---------------------------------------------------------------------------
75
+ FROM node:${NODE_VERSION}-bookworm-slim AS runtime
76
+ WORKDIR /app
77
+
78
+ ENV NODE_ENV=production
79
+ ENV PORT={{port}}
80
+
81
+ # dotenvx is rarely a direct dep of the Next sub-package; install it
82
+ # globally in the runtime stage so the CMD always finds it.
83
+ RUN npm install -g @dotenvx/dotenvx@latest && npm cache clean --force
84
+
85
+ # Workspace skeleton: pnpm refuses to resolve when the lockfile or
86
+ # workspace manifest is missing, and `next start` walks up looking for
87
+ # `next.config.*` so the sub-package manifest has to be in place too.
88
+ COPY --from=build /app/package.json /app/pnpm-lock.yaml /app/pnpm-workspace.yaml ./
89
+ COPY --from=build /app/node_modules ./node_modules
90
+ COPY --from=build /app/.env.production ./
91
+ COPY --from=build /app/{{monorepoPackage}}/package.json ./{{monorepoPackage}}/package.json
92
+ COPY --from=build /app/{{monorepoPackage}}/next.config.* ./{{monorepoPackage}}/
93
+ COPY --from=build /app/{{monorepoPackage}}/node_modules ./{{monorepoPackage}}/node_modules
94
+ COPY --from=build /app/{{monorepoPackage}}/.next ./{{monorepoPackage}}/.next
95
+
96
+ WORKDIR /app/{{monorepoPackage}}
97
+
98
+ EXPOSE {{port}}
99
+
100
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=5 \
101
+ CMD node -e "require('http').get('http://127.0.0.1:{{port}}/',r=>{process.exit(r.statusCode<400?0:1)}).on('error',()=>process.exit(1))"
102
+
103
+ # dotenvx decrypts /app/.env.production at startup using
104
+ # DOTENV_PRIVATE_KEY_PRODUCTION from the container env (forwarded by
105
+ # Coolify via docker-compose.yml). The -f flag is required because
106
+ # WORKDIR is the sub-package, not the workspace root.
107
+ CMD ["dotenvx", "run", "-f", "/app/.env.production", "--", "./node_modules/.bin/next", "start", "--port", "{{port}}"]
@@ -0,0 +1,103 @@
1
+ # syntax=docker/dockerfile:1
2
+ #
3
+ # Next.js + Coolify image for {{name}}.
4
+ # Built by .github/workflows/deploy.yml, pushed to GHCR, pulled by
5
+ # Coolify via docker-compose.yml.
6
+ #
7
+ # Runtime: node + `next start`. NOT nginx + static export — Next.js
8
+ # apps with any of the following features won't compile under
9
+ # `output: "export"` and need a Node runtime:
10
+ #
11
+ # - Server Actions ("use server")
12
+ # - Route handlers that read Request / cookies / use non-GET verbs
13
+ # - Dynamic routes without generateStaticParams
14
+ # - Server-side env vars without NEXT_PUBLIC_* prefixes
15
+ #
16
+ # dotenvx decrypts the committed encrypted .env.production at TWO points:
17
+ #
18
+ # 1. Build stage — uses the dotenvx_private_key BuildKit secret
19
+ # (passed by the workflow from the GH Actions secret
20
+ # DOTENV_PRIVATE_KEY_PRODUCTION) to decrypt in-memory before
21
+ # running `pnpm build`. Required so NEXT_PUBLIC_* values get
22
+ # inlined into the static client bundle. The secret is mounted
23
+ # as tmpfs and never lands in `docker history` or any image layer.
24
+ #
25
+ # 2. Runtime CMD — `dotenvx run` reads the same .env.production and
26
+ # decrypts again, this time using DOTENV_PRIVATE_KEY_PRODUCTION
27
+ # from the container env (forwarded by docker-compose.yml from
28
+ # Coolify's app env). This covers server-side values the runtime
29
+ # reads with `process.env.X` — Server Action handlers, route
30
+ # handlers, etc.
31
+ #
32
+ # Image base is bookworm-slim (not alpine) because Next's optional
33
+ # native deps (sharp for image optimisation) ship glibc binaries that
34
+ # don't run on Alpine's musl without a rebuild — avoiding the rebuild
35
+ # is faster and one less moving part.
36
+ ARG NODE_VERSION={{nodeMajor}}
37
+
38
+ # ---------------------------------------------------------------------------
39
+ # Build
40
+ # ---------------------------------------------------------------------------
41
+ FROM node:${NODE_VERSION}-bookworm-slim AS build
42
+ WORKDIR /app
43
+
44
+ RUN corepack enable
45
+
46
+ # Install deps first (layer cache) before copying source.
47
+ COPY package.json pnpm-lock.yaml* ./
48
+ RUN pnpm install --frozen-lockfile
49
+
50
+ COPY . .
51
+
52
+ # Two separate RUN steps on purpose: BuildKit echoes the entire RUN
53
+ # body into any failure log, so splitting the secret-presence check
54
+ # off means the "secret not supplied" message only surfaces when
55
+ # that's actually what failed — a downstream `next build` error
56
+ # won't drag the misleading echo into its context.
57
+ RUN --mount=type=secret,id=dotenvx_private_key,env=DOTENV_PRIVATE_KEY_PRODUCTION \
58
+ test -n "$DOTENV_PRIVATE_KEY_PRODUCTION" || { \
59
+ echo "ERROR: dotenvx_private_key build secret not supplied. The workflow at .github/workflows/deploy.yml should pass it via 'secrets:' from the GH Actions secret DOTENV_PRIVATE_KEY_PRODUCTION." >&2; \
60
+ exit 1; \
61
+ }
62
+
63
+ # dotenvx decrypts .env.production in memory and re-exports each
64
+ # KEY=VALUE for `pnpm build`. next build sees the plain values and
65
+ # bakes NEXT_PUBLIC_* into the static client bundle.
66
+ RUN --mount=type=secret,id=dotenvx_private_key,env=DOTENV_PRIVATE_KEY_PRODUCTION \
67
+ pnpm dlx @dotenvx/dotenvx run -- pnpm build
68
+
69
+ # ---------------------------------------------------------------------------
70
+ # Runtime — `next start` on PORT={{port}}.
71
+ # ---------------------------------------------------------------------------
72
+ FROM node:${NODE_VERSION}-bookworm-slim AS runtime
73
+ WORKDIR /app
74
+
75
+ ENV NODE_ENV=production
76
+ ENV PORT={{port}}
77
+
78
+ # Bring across everything `next start` needs to serve the app. The
79
+ # encrypted .env.production travels with the image so dotenvx can
80
+ # decrypt at startup; the matching private key arrives via the
81
+ # container env (set by Coolify, see docker-compose.yml).
82
+ #
83
+ # Glob-matches both `next.config.ts` and `next.config.{js,mjs,cjs}`.
84
+ # The build leaves `.env.production` in /app because the build context
85
+ # copied it in at `COPY . .` above.
86
+ COPY --from=build /app/.next ./.next
87
+ COPY --from=build /app/public ./public
88
+ COPY --from=build /app/package.json ./
89
+ COPY --from=build /app/pnpm-lock.yaml ./
90
+ COPY --from=build /app/next.config.* ./
91
+ COPY --from=build /app/.env.production ./
92
+ COPY --from=build /app/node_modules ./node_modules
93
+
94
+ EXPOSE {{port}}
95
+
96
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=5 \
97
+ CMD node -e "require('http').get('http://127.0.0.1:{{port}}/',r=>{process.exit(r.statusCode<400?0:1)}).on('error',()=>process.exit(1))"
98
+
99
+ # dotenvx decrypts .env.production at startup using
100
+ # DOTENV_PRIVATE_KEY_PRODUCTION from the container env (forwarded by
101
+ # Coolify via docker-compose.yml). next start then sees XAI_API_KEY,
102
+ # NEXT_PUBLIC_*, etc. and binds to PORT={{port}} from the ENV above.
103
+ CMD ["./node_modules/.bin/dotenvx", "run", "--", "./node_modules/.bin/next", "start"]
@@ -8,9 +8,21 @@
8
8
  services:
9
9
  app:
10
10
  image: ghcr.io/{{owner}}/{{name}}:latest
11
+ # Force a registry pull on every `docker compose up`. Without this,
12
+ # Compose happily reuses whichever digest the local engine cached the
13
+ # last time it saw the `:latest` tag, so Coolify's redeploy webhook
14
+ # fires after each CI build but the running container keeps serving
15
+ # stale code. `always` makes the floating tag actually float.
16
+ pull_policy: always
11
17
  restart: unless-stopped
12
- ports:
13
- - "{{port}}:{{port}}"
18
+ # Coolify's Traefik reverse-proxy already owns host ports 80/443 and
19
+ # routes to this container via its internal Docker network. Use
20
+ # `expose` (not `ports`) so we declare the container port without
21
+ # trying to bind it on the host — binding the host port collides with
22
+ # Traefik and the deploy fails with
23
+ # "Bind for 0.0.0.0:{{port}} failed: port is already allocated".
24
+ expose:
25
+ - "{{port}}"
14
26
  environment:
15
27
  - NODE_ENV=production
16
28
  # Forwarded from Coolify's app env. dotenvx inside the
@@ -19,17 +31,34 @@ services:
19
31
  # Coolify reads this and gates Traefik/Caddy routing on it.
20
32
  # Without a healthcheck Coolify shows "No health check configured"
21
33
  # and routes blind — traffic can hit the container before it's
22
- # ready. busybox (bundled in both nginx:alpine and node:alpine
23
- # base images) ships `wget`, so no extra deps are needed.
34
+ # ready.
24
35
  #
36
+ # If your app's `/` legitimately returns a non-2xx (common for
37
+ # API-only servers that 404 the root), point this at a known-good
38
+ # path instead — e.g. replace `/` with `/health` or whatever your
39
+ # framework exposes.
40
+ {{#if isNextjs}}
41
+ # node-based probe: the Next.js runtime image is node:slim, which
42
+ # ships neither wget nor curl. `node -e` is the universal fallback
43
+ # — exits 0 on <400 responses, 1 otherwise.
44
+ healthcheck:
45
+ test:
46
+ - "CMD"
47
+ - "node"
48
+ - "-e"
49
+ - "require('http').get('http://127.0.0.1:{{port}}/',r=>{process.exit(r.statusCode<400?0:1)}).on('error',()=>process.exit(1))"
50
+ interval: 30s
51
+ timeout: 10s
52
+ retries: 5
53
+ start_period: 60s
54
+ {{else}}
25
55
  # `wget --spider` issues a HEAD-style request and exits non-zero
26
- # on any 4xx/5xx. If your app's `/` legitimately returns a non-2xx
27
- # (common for API-only servers that 404 the root), point this at a
28
- # known-good path instead — e.g. replace `/` with `/health` or
29
- # whatever your framework exposes.
56
+ # on any 4xx/5xx. busybox (bundled in nginx:alpine and node:alpine
57
+ # base images) ships `wget`, so no extra deps are needed.
30
58
  healthcheck:
31
59
  test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://127.0.0.1:{{port}}/ || exit 1"]
32
60
  interval: 30s
33
61
  timeout: 10s
34
62
  retries: 5
35
63
  start_period: 60s
64
+ {{/if}}
@@ -3,6 +3,70 @@ export interface CloudflareZone {
3
3
  name: string;
4
4
  name_servers: string[];
5
5
  status: string;
6
+ account?: {
7
+ id: string;
8
+ name?: string;
9
+ };
10
+ }
11
+ /** DNS record types hatchkit knows how to upsert. The original code only
12
+ * supported A/AAAA/CNAME; MX and TXT were added for the email feature
13
+ * (MX servers for Cloudflare Email Routing + SPF/DMARC/DKIM TXT). */
14
+ export type CfDnsRecordType = "A" | "AAAA" | "CNAME" | "MX" | "TXT";
15
+ export interface CfDnsRecord {
16
+ id: string;
17
+ name: string;
18
+ type: string;
19
+ content: string;
20
+ proxied: boolean;
21
+ priority?: number;
22
+ ttl?: number;
23
+ }
24
+ /** A single record in Cloudflare's "recommended DNS for Email Routing"
25
+ * response (`GET /zones/{id}/email/routing/dns`). MX entries carry a
26
+ * priority; TXT entries don't. */
27
+ export interface CfEmailRoutingDnsRecord {
28
+ type: "MX" | "TXT";
29
+ name: string;
30
+ content: string;
31
+ ttl?: number;
32
+ priority?: number;
33
+ }
34
+ export interface CfEmailRoutingSettings {
35
+ /** Email Routing enabled on this zone. */
36
+ enabled: boolean;
37
+ /** Routing service hostname assigned by Cloudflare. */
38
+ name?: string;
39
+ /** "ready" | "unconfigured" | "misconfigured" | "locked" (CF docs). */
40
+ status?: string;
41
+ skip_wizard?: boolean;
42
+ tag?: string;
43
+ }
44
+ export interface CfEmailDestination {
45
+ id: string;
46
+ /** Destination email address. */
47
+ email: string;
48
+ /** "pending" until the user clicks the verify link, "active" after. */
49
+ verified?: string | null;
50
+ created?: string;
51
+ modified?: string;
52
+ }
53
+ export interface CfEmailRoutingMatcher {
54
+ type: "literal" | "all";
55
+ field?: "to";
56
+ value?: string;
57
+ }
58
+ export interface CfEmailRoutingAction {
59
+ type: "forward" | "worker" | "drop";
60
+ value?: string[];
61
+ }
62
+ export interface CfEmailRoutingRule {
63
+ id?: string;
64
+ tag?: string;
65
+ name?: string;
66
+ enabled?: boolean;
67
+ priority?: number;
68
+ matchers: CfEmailRoutingMatcher[];
69
+ actions: CfEmailRoutingAction[];
6
70
  }
7
71
  /** A single Cloudflare R2 CORS rule. Mirrors the shape Cloudflare's
8
72
  * PUT/GET `/r2/buckets/<bucket>/cors` endpoint accepts and returns —
@@ -39,34 +103,34 @@ export declare class CloudflareApi {
39
103
  listZones(): Promise<CloudflareZone[]>;
40
104
  /** Look up a single zone by name. Returns null if not found. */
41
105
  getZoneByName(name: string): Promise<CloudflareZone | null>;
42
- /** Find an exact name+type DNS record in a zone, or null. */
43
- findRecord(zoneId: string, name: string, type: "A" | "AAAA" | "CNAME"): Promise<{
44
- id: string;
45
- name: string;
46
- type: string;
47
- content: string;
48
- proxied: boolean;
49
- } | null>;
106
+ /** Find an exact name+type DNS record in a zone, or null. MX/TXT
107
+ * records are uniquely identified by (name, type, content) multiple
108
+ * TXT records can coexist at the same name (e.g. SPF + DMARC siblings)
109
+ * and a host can have several MX records at different priorities.
110
+ * Pass `content` for those types so we resolve the right one. */
111
+ findRecord(zoneId: string, name: string, type: CfDnsRecordType, content?: string): Promise<CfDnsRecord | null>;
50
112
  /** List every DNS record at a name (optionally filtered by type).
51
113
  * Distinct from {@link findRecord} because apex Pages setups create
52
114
  * four A records sharing the same name — `findRecord` only returns one. */
53
- findRecordsByName(zoneId: string, name: string, type?: "A" | "AAAA" | "CNAME"): Promise<Array<{
54
- id: string;
55
- name: string;
56
- type: string;
57
- content: string;
58
- proxied: boolean;
59
- }>>;
60
- /** Upsert a DNS record by name+type. Idempotent re-runs on the same
61
- * inputs return without changes if the record already matches.
62
- * `proxied: true` enables the orange-cloud Cloudflare proxy for the
63
- * record (TLS termination + DDoS, recommended for a webapp). */
115
+ findRecordsByName(zoneId: string, name: string, type?: CfDnsRecordType): Promise<CfDnsRecord[]>;
116
+ /** Upsert a DNS record by name+type (+content for TXT/MX). Idempotent —
117
+ * re-runs on the same inputs return without changes if the record
118
+ * already matches. `proxied: true` enables the orange-cloud Cloudflare
119
+ * proxy (only valid for A/AAAA/CNAME; ignored for MX/TXT).
120
+ *
121
+ * TXT/MX semantics: TXT and MX records are identified by (name, type,
122
+ * content) the caller may want SPF and DMARC TXT siblings at the
123
+ * same name without one overwriting the other, and MX records use
124
+ * priority + mail-host content as their identity. We pass `content`
125
+ * to `findRecord` so each upsert targets the right sibling. */
64
126
  upsertRecord(zoneId: string, params: {
65
- type: "A" | "AAAA" | "CNAME";
127
+ type: CfDnsRecordType;
66
128
  name: string;
67
129
  content: string;
68
130
  proxied?: boolean;
69
131
  ttl?: number;
132
+ /** Required for MX. Ignored for other types. */
133
+ priority?: number;
70
134
  }): Promise<{
71
135
  id: string;
72
136
  created: boolean;
@@ -289,5 +353,67 @@ export declare class CloudflareApi {
289
353
  error: string;
290
354
  }>;
291
355
  }>;
356
+ /** Read the zone's Email Routing status (enabled, name, status). */
357
+ getEmailRouting(zoneId: string): Promise<CfEmailRoutingSettings | null>;
358
+ /** Enable Email Routing on a zone. Idempotent — CF returns the current
359
+ * settings on re-enable. Does NOT add MX records itself (we use the
360
+ * generic dns_records API so all hatchkit-managed records flow through
361
+ * one code path). */
362
+ enableEmailRouting(zoneId: string): Promise<CfEmailRoutingSettings>;
363
+ /** Cloudflare's recommendation for the MX + SPF records that should
364
+ * exist on the zone for Email Routing to receive mail. We don't blindly
365
+ * apply these — the email module merges them with any Resend SPF
366
+ * includes before writing — but we still call this to surface the
367
+ * canonical MX hostnames (which change every few years). */
368
+ getEmailRoutingDnsRecords(zoneId: string): Promise<CfEmailRoutingDnsRecord[]>;
369
+ /** List Email Routing destinations on an account. */
370
+ listEmailDestinations(accountId: string): Promise<CfEmailDestination[]>;
371
+ /** Create a destination address. CF sends a verification email to the
372
+ * address. If the destination already exists (any verification state),
373
+ * returns the existing record with `existed: true` instead of erroring. */
374
+ addEmailDestination(accountId: string, email: string): Promise<CfEmailDestination & {
375
+ existed: boolean;
376
+ }>;
377
+ /** Delete a destination by id. Idempotent: 404 → "not-found". */
378
+ deleteEmailDestination(accountId: string, destinationId: string): Promise<"deleted" | "not-found">;
379
+ /** List forwarding rules on a zone (excluding the catch-all, which has
380
+ * its own endpoint). */
381
+ listEmailRoutingRules(zoneId: string): Promise<CfEmailRoutingRule[]>;
382
+ /** Upsert a forwarding rule keyed on the rule's literal `to` matcher.
383
+ * If a rule already targets the same `localPart@zone` address, its
384
+ * forward destination is patched to the new value (no-op if equal);
385
+ * otherwise a fresh rule is created. */
386
+ upsertEmailRoutingRule(zoneId: string, params: {
387
+ /** Full email address on this zone, e.g. "hello@example.com". */
388
+ address: string;
389
+ /** One or more verified destination addresses to forward to. */
390
+ forwardTo: string[];
391
+ /** Human-readable label shown in the dashboard. */
392
+ name?: string;
393
+ enabled?: boolean;
394
+ priority?: number;
395
+ }): Promise<{
396
+ id: string;
397
+ created: boolean;
398
+ updated: boolean;
399
+ }>;
400
+ /** Delete a rule by id. Idempotent: 404 → "not-found". */
401
+ deleteEmailRoutingRule(zoneId: string, ruleId: string): Promise<"deleted" | "not-found">;
402
+ /** Read the catch-all rule for a zone. Returns null if Email Routing
403
+ * isn't enabled (404). The catch-all is a singleton; the GET always
404
+ * returns the same record (matchers `[{type:"all"}]`), but the action
405
+ * forward list and `enabled` flag reflect whether it's actually
406
+ * forwarding mail. */
407
+ getEmailCatchAll(zoneId: string): Promise<CfEmailRoutingRule | null>;
408
+ /** Set the catch-all rule for a zone. CF allows exactly one catch-all
409
+ * per zone (PUT semantics). Pass `enabled: false` to disable without
410
+ * removing it. */
411
+ setEmailCatchAll(zoneId: string, params: {
412
+ forwardTo: string[];
413
+ enabled?: boolean;
414
+ name?: string;
415
+ }): Promise<{
416
+ enabled: boolean;
417
+ }>;
292
418
  }
293
419
  //# sourceMappingURL=cloudflare-api.d.ts.map