@geekmidas/cli 10.0.0-alpha.118 → 10.0.0-alpha.119

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 (185) hide show
  1. package/dist/{EndpointGenerator-BwbYTMtB.cjs → EndpointGenerator-BDa6pPgE.cjs} +2 -2
  2. package/dist/{EndpointGenerator-BwbYTMtB.cjs.map → EndpointGenerator-BDa6pPgE.cjs.map} +1 -1
  3. package/dist/{EndpointGenerator-CvLX8bpx.mjs → EndpointGenerator-CP_z_E3e.mjs} +2 -2
  4. package/dist/{EndpointGenerator-CvLX8bpx.mjs.map → EndpointGenerator-CP_z_E3e.mjs.map} +1 -1
  5. package/dist/{GoDaddyProvider-CcjbFkLt.mjs → GoDaddyProvider-B4JKSuX-.mjs} +2 -2
  6. package/dist/{GoDaddyProvider-CcjbFkLt.mjs.map → GoDaddyProvider-B4JKSuX-.mjs.map} +1 -1
  7. package/dist/{GoDaddyProvider-B6SPHBCU.cjs → GoDaddyProvider-DMLcXGTd.cjs} +2 -2
  8. package/dist/{GoDaddyProvider-B6SPHBCU.cjs.map → GoDaddyProvider-DMLcXGTd.cjs.map} +1 -1
  9. package/dist/{LegacyStateStore-2l5jw_VI.cjs → LegacyStateStore-88Etk3M3.cjs} +3 -3
  10. package/dist/{LegacyStateStore-2l5jw_VI.cjs.map → LegacyStateStore-88Etk3M3.cjs.map} +1 -1
  11. package/dist/{LegacyStateStore-D-D6r_JT.mjs → LegacyStateStore-ByNEjBbh.mjs} +3 -3
  12. package/dist/{LegacyStateStore-D-D6r_JT.mjs.map → LegacyStateStore-ByNEjBbh.mjs.map} +1 -1
  13. package/dist/{LocalStateStore-DIAY7j1O.mjs → LocalStateStore-BoHhG3tu.mjs} +2 -2
  14. package/dist/{LocalStateStore-DIAY7j1O.mjs.map → LocalStateStore-BoHhG3tu.mjs.map} +1 -1
  15. package/dist/{LocalStateStore-Dg3rvwwe.cjs → LocalStateStore-D1I3DJu2.cjs} +2 -2
  16. package/dist/{LocalStateStore-Dg3rvwwe.cjs.map → LocalStateStore-D1I3DJu2.cjs.map} +1 -1
  17. package/dist/{OpenApiTsGenerator-DXXFXSbO.mjs → OpenApiTsGenerator-CsrukCE-.mjs} +2 -2
  18. package/dist/{OpenApiTsGenerator-DXXFXSbO.mjs.map → OpenApiTsGenerator-CsrukCE-.mjs.map} +1 -1
  19. package/dist/{OpenApiTsGenerator-BD6ZOQ51.cjs → OpenApiTsGenerator-FNhY7Ssz.cjs} +2 -2
  20. package/dist/{OpenApiTsGenerator-BD6ZOQ51.cjs.map → OpenApiTsGenerator-FNhY7Ssz.cjs.map} +1 -1
  21. package/dist/{S3StateStore-BKi1eamw.mjs → S3StateStore-BE1Fl_cm.mjs} +2 -2
  22. package/dist/{S3StateStore-BKi1eamw.mjs.map → S3StateStore-BE1Fl_cm.mjs.map} +1 -1
  23. package/dist/{S3StateStore-BdcgQNhO.cjs → S3StateStore-DTLmfO3U.cjs} +2 -2
  24. package/dist/{S3StateStore-BdcgQNhO.cjs.map → S3StateStore-DTLmfO3U.cjs.map} +1 -1
  25. package/dist/{SSMStateStore-CS-pAKT9.cjs → SSMStateStore-BaKk8zeI.cjs} +2 -2
  26. package/dist/{SSMStateStore-CS-pAKT9.cjs.map → SSMStateStore-BaKk8zeI.cjs.map} +1 -1
  27. package/dist/{SSMStateStore-DHgaNW75.mjs → SSMStateStore-kEogq4Wx.mjs} +2 -2
  28. package/dist/{SSMStateStore-DHgaNW75.mjs.map → SSMStateStore-kEogq4Wx.mjs.map} +1 -1
  29. package/dist/{SubscriberGenerator-CeH7wbYt.cjs → SubscriberGenerator-C8CPxrCK.cjs} +25 -4
  30. package/dist/SubscriberGenerator-C8CPxrCK.cjs.map +1 -0
  31. package/dist/{SubscriberGenerator-DHnIYwUU.mjs → SubscriberGenerator-y3pncae_.mjs} +20 -5
  32. package/dist/SubscriberGenerator-y3pncae_.mjs.map +1 -0
  33. package/dist/{add-BcZXHa3Z.mjs → add-BZr_o-Xm.mjs} +5 -5
  34. package/dist/{add-BcZXHa3Z.mjs.map → add-BZr_o-Xm.mjs.map} +1 -1
  35. package/dist/{add-6VPdRbRT.cjs → add-C8mRgq2x.cjs} +5 -5
  36. package/dist/{add-6VPdRbRT.cjs.map → add-C8mRgq2x.cjs.map} +1 -1
  37. package/dist/{bundler-jjWtQ882.cjs → bundler-7-pO7L0X.cjs} +5 -5
  38. package/dist/{bundler-jjWtQ882.cjs.map → bundler-7-pO7L0X.cjs.map} +1 -1
  39. package/dist/{bundler-Ciim6amq.mjs → bundler-USaMrVEO.mjs} +5 -5
  40. package/dist/{bundler-Ciim6amq.mjs.map → bundler-USaMrVEO.mjs.map} +1 -1
  41. package/dist/{cli-CQ2ij0Mi.cjs → cli-Bdf7CdQB.cjs} +3 -3
  42. package/dist/{cli-CQ2ij0Mi.cjs.map → cli-Bdf7CdQB.cjs.map} +1 -1
  43. package/dist/{cli-BkxlWYfI.mjs → cli-DWRYbsA2.mjs} +3 -3
  44. package/dist/{cli-BkxlWYfI.mjs.map → cli-DWRYbsA2.mjs.map} +1 -1
  45. package/dist/{compose-qLTNYJAY.mjs → compose-DAPoyiny.mjs} +101 -19
  46. package/dist/compose-DAPoyiny.mjs.map +1 -0
  47. package/dist/{compose-JOasAHcd.cjs → compose-tZLAZZp6.cjs} +101 -19
  48. package/dist/compose-tZLAZZp6.cjs.map +1 -0
  49. package/dist/config.cjs +1 -1
  50. package/dist/config.mjs +1 -1
  51. package/dist/{credentialSchemas-D_VUCDUh.cjs → credentialSchemas-B67WJOOm.cjs} +2 -2
  52. package/dist/{credentialSchemas-D_VUCDUh.cjs.map → credentialSchemas-B67WJOOm.cjs.map} +1 -1
  53. package/dist/{credentialSchemas-Cf5Pf8VE.mjs → credentialSchemas-DDOLRCLF.mjs} +2 -2
  54. package/dist/{credentialSchemas-Cf5Pf8VE.mjs.map → credentialSchemas-DDOLRCLF.mjs.map} +1 -1
  55. package/dist/deploy/public.cjs +7 -7
  56. package/dist/deploy/public.d.cts +2 -1
  57. package/dist/deploy/public.d.cts.map +1 -1
  58. package/dist/deploy/public.d.mts +2 -1
  59. package/dist/deploy/public.d.mts.map +1 -1
  60. package/dist/deploy/public.mjs +7 -7
  61. package/dist/{deploy-_g-2dX38.mjs → deploy-CyQ36GSx.mjs} +20 -9
  62. package/dist/deploy-CyQ36GSx.mjs.map +1 -0
  63. package/dist/{deploy-D-liNXfx.cjs → deploy-rwfdH_Uw.cjs} +20 -9
  64. package/dist/deploy-rwfdH_Uw.cjs.map +1 -0
  65. package/dist/{discover-Ca8U75dl.mjs → discover-C5roJuc9.mjs} +25 -2
  66. package/dist/discover-C5roJuc9.mjs.map +1 -0
  67. package/dist/{discover-CvTtV5ZD.d.cts → discover-CSW_BMWa.d.cts} +18 -1
  68. package/dist/discover-CSW_BMWa.d.cts.map +1 -0
  69. package/dist/{discover-Bsr7HjqJ.cjs → discover-DozUKs8f.cjs} +25 -2
  70. package/dist/discover-DozUKs8f.cjs.map +1 -0
  71. package/dist/{discover-W2kab9Lc.d.mts → discover-xtT7fgWg.d.mts} +18 -1
  72. package/dist/discover-xtT7fgWg.d.mts.map +1 -0
  73. package/dist/{dns-DGq4xkJT.mjs → dns-BHveRzd8.mjs} +2 -2
  74. package/dist/{dns-DGq4xkJT.mjs.map → dns-BHveRzd8.mjs.map} +1 -1
  75. package/dist/{dns-DfQKqAyt.cjs → dns-CJ3izGTo.cjs} +2 -2
  76. package/dist/{dns-DfQKqAyt.cjs.map → dns-CJ3izGTo.cjs.map} +1 -1
  77. package/dist/{dokploy-ClIPZaPH.mjs → dokploy-BaaNWN-B.mjs} +2 -2
  78. package/dist/{dokploy-ClIPZaPH.mjs.map → dokploy-BaaNWN-B.mjs.map} +1 -1
  79. package/dist/{dokploy-D17I2BCE.cjs → dokploy-BmlMt2Rb.cjs} +2 -2
  80. package/dist/{dokploy-D17I2BCE.cjs.map → dokploy-BmlMt2Rb.cjs.map} +1 -1
  81. package/dist/{drivers-3klmg9Sk.mjs → drivers-BjGDYfnC.mjs} +2 -2
  82. package/dist/{drivers-3klmg9Sk.mjs.map → drivers-BjGDYfnC.mjs.map} +1 -1
  83. package/dist/{drivers-CoqD5zYP.cjs → drivers-DbjiYpW6.cjs} +2 -2
  84. package/dist/{drivers-CoqD5zYP.cjs.map → drivers-DbjiYpW6.cjs.map} +1 -1
  85. package/dist/{eas-DJXhARYb.mjs → eas-CKS1YxT3.mjs} +2 -2
  86. package/dist/{eas-DJXhARYb.mjs.map → eas-CKS1YxT3.mjs.map} +1 -1
  87. package/dist/{eas-b95MCG14.cjs → eas-ClEvznV9.cjs} +2 -2
  88. package/dist/{eas-b95MCG14.cjs.map → eas-ClEvznV9.cjs.map} +1 -1
  89. package/dist/{encryption-C_NRQ9cY.cjs → encryption-CpydNX0B.cjs} +2 -2
  90. package/dist/{encryption-C_NRQ9cY.cjs.map → encryption-CpydNX0B.cjs.map} +1 -1
  91. package/dist/{encryption-CldvLtip.mjs → encryption-DxKJLlYn.mjs} +2 -2
  92. package/dist/{encryption-CldvLtip.mjs.map → encryption-DxKJLlYn.mjs.map} +1 -1
  93. package/dist/{engine-CKfdvEVt.cjs → engine-C9qO5k6r.cjs} +4 -4
  94. package/dist/{engine-CKfdvEVt.cjs.map → engine-C9qO5k6r.cjs.map} +1 -1
  95. package/dist/{engine-BBnTj8OD.mjs → engine-tmvpAPHz.mjs} +4 -4
  96. package/dist/{engine-BBnTj8OD.mjs.map → engine-tmvpAPHz.mjs.map} +1 -1
  97. package/dist/{github-D5Ck3srU.cjs → github-BdVRMNzc.cjs} +8 -6
  98. package/dist/github-BdVRMNzc.cjs.map +1 -0
  99. package/dist/{github-BMPci2wg.mjs → github-vA9jAJjI.mjs} +8 -6
  100. package/dist/github-vA9jAJjI.mjs.map +1 -0
  101. package/dist/{googlePlay-C-GBRDMp.cjs → googlePlay-BafFoF13.cjs} +3 -3
  102. package/dist/{googlePlay-C-GBRDMp.cjs.map → googlePlay-BafFoF13.cjs.map} +1 -1
  103. package/dist/{googlePlay-fw0VWly7.mjs → googlePlay-Kr2etW2y.mjs} +3 -3
  104. package/dist/{googlePlay-fw0VWly7.mjs.map → googlePlay-Kr2etW2y.mjs.map} +1 -1
  105. package/dist/index.cjs +59 -59
  106. package/dist/index.cjs.map +1 -1
  107. package/dist/index.mjs +59 -59
  108. package/dist/index.mjs.map +1 -1
  109. package/dist/{migrate-WyWhSivN.mjs → migrate-4EdfUpjQ.mjs} +3 -3
  110. package/dist/{migrate-WyWhSivN.mjs.map → migrate-4EdfUpjQ.mjs.map} +1 -1
  111. package/dist/{migrate-rke2Qvj2.cjs → migrate-BMGpVvFg.cjs} +3 -3
  112. package/dist/{migrate-rke2Qvj2.cjs.map → migrate-BMGpVvFg.cjs.map} +1 -1
  113. package/dist/{migrate-1bHqjfIe.mjs → migrate-C_IaJz8A.mjs} +2 -2
  114. package/dist/{migrate-1bHqjfIe.mjs.map → migrate-C_IaJz8A.mjs.map} +1 -1
  115. package/dist/{migrate-BndHuwqw.cjs → migrate-DeIkRsXm.cjs} +2 -2
  116. package/dist/{migrate-BndHuwqw.cjs.map → migrate-DeIkRsXm.cjs.map} +1 -1
  117. package/dist/openapi.cjs +2 -2
  118. package/dist/openapi.mjs +2 -2
  119. package/dist/{publish-BBG4zx8E.mjs → publish-AdbhYxX6.mjs} +2 -2
  120. package/dist/{publish-BBG4zx8E.mjs.map → publish-AdbhYxX6.mjs.map} +1 -1
  121. package/dist/{publish-B22IhdS9.cjs → publish-BWVQ9PZy.cjs} +2 -2
  122. package/dist/{publish-B22IhdS9.cjs.map → publish-BWVQ9PZy.cjs.map} +1 -1
  123. package/dist/{ready-gc9IFByS.cjs → ready-BFFP838V.cjs} +6 -6
  124. package/dist/{ready-gc9IFByS.cjs.map → ready-BFFP838V.cjs.map} +1 -1
  125. package/dist/{ready-4hEoQ_cr.mjs → ready-BOfogqzr.mjs} +6 -6
  126. package/dist/{ready-4hEoQ_cr.mjs.map → ready-BOfogqzr.mjs.map} +1 -1
  127. package/dist/reconcile/public.cjs +1 -1
  128. package/dist/reconcile/public.d.cts +1 -1
  129. package/dist/reconcile/public.d.mts +1 -1
  130. package/dist/reconcile/public.mjs +1 -1
  131. package/dist/{resolve-CC6ndodR.mjs → resolve-CJwadE_F.mjs} +3 -3
  132. package/dist/{resolve-CC6ndodR.mjs.map → resolve-CJwadE_F.mjs.map} +1 -1
  133. package/dist/{resolve-isFTuJp4.cjs → resolve-Dtrp53jt.cjs} +3 -3
  134. package/dist/{resolve-isFTuJp4.cjs.map → resolve-Dtrp53jt.cjs.map} +1 -1
  135. package/dist/{rollback-DaEmEC2Y.mjs → rollback-Cx89OK9S.mjs} +4 -4
  136. package/dist/{rollback-DaEmEC2Y.mjs.map → rollback-Cx89OK9S.mjs.map} +1 -1
  137. package/dist/{rollback-Lj9bQvHq.cjs → rollback-DAKtcSCy.cjs} +4 -4
  138. package/dist/{rollback-Lj9bQvHq.cjs.map → rollback-DAKtcSCy.cjs.map} +1 -1
  139. package/dist/sandbox/credentials-worker.cjs +2 -2
  140. package/dist/sandbox/credentials-worker.mjs +2 -2
  141. package/dist/sandbox/discover-worker.cjs +6 -3
  142. package/dist/sandbox/discover-worker.cjs.map +1 -1
  143. package/dist/sandbox/discover-worker.mjs +6 -3
  144. package/dist/sandbox/discover-worker.mjs.map +1 -1
  145. package/dist/sandbox/migrate-worker.cjs +1 -1
  146. package/dist/sandbox/migrate-worker.mjs +1 -1
  147. package/dist/{seeds-CYzoBDg2.mjs → seeds-BBnvSEgG.mjs} +134 -21
  148. package/dist/seeds-BBnvSEgG.mjs.map +1 -0
  149. package/dist/{seeds-CF9Nx6_g.cjs → seeds-CPFoexOv.cjs} +150 -19
  150. package/dist/seeds-CPFoexOv.cjs.map +1 -0
  151. package/dist/{serverSetup-CbuJK4zg.cjs → serverSetup-BHoXbPit.cjs} +5 -5
  152. package/dist/{serverSetup-CbuJK4zg.cjs.map → serverSetup-BHoXbPit.cjs.map} +1 -1
  153. package/dist/{serverSetup-0h1Vh5un.mjs → serverSetup-BoD9Vp4B.mjs} +5 -5
  154. package/dist/{serverSetup-0h1Vh5un.mjs.map → serverSetup-BoD9Vp4B.mjs.map} +1 -1
  155. package/dist/{sniffer-CRJHtBaK.mjs → sniffer-DDUAlVqp.mjs} +7 -7
  156. package/dist/{sniffer-CRJHtBaK.mjs.map → sniffer-DDUAlVqp.mjs.map} +1 -1
  157. package/dist/{sniffer-Dz3Va1Jo.cjs → sniffer-DIVpELrO.cjs} +7 -7
  158. package/dist/{sniffer-Dz3Va1Jo.cjs.map → sniffer-DIVpELrO.cjs.map} +1 -1
  159. package/dist/{stage-CIo8s2WT.mjs → stage-D9R5j5Xa.mjs} +5 -5
  160. package/dist/{stage-CIo8s2WT.mjs.map → stage-D9R5j5Xa.mjs.map} +1 -1
  161. package/dist/{stage-y9qFelxT.cjs → stage-ElqMbLNH.cjs} +5 -5
  162. package/dist/{stage-y9qFelxT.cjs.map → stage-ElqMbLNH.cjs.map} +1 -1
  163. package/dist/target/public.cjs +1 -1
  164. package/dist/target/public.mjs +1 -1
  165. package/dist/{terminal-CybB-cjk.mjs → terminal-CW_dWeTe.mjs} +2 -2
  166. package/dist/{terminal-CybB-cjk.mjs.map → terminal-CW_dWeTe.mjs.map} +1 -1
  167. package/dist/{terminal-D_NRPW4W.cjs → terminal-DJlqcW_U.cjs} +2 -2
  168. package/dist/{terminal-D_NRPW4W.cjs.map → terminal-DJlqcW_U.cjs.map} +1 -1
  169. package/dist/vitest.cjs +1 -1
  170. package/dist/vitest.mjs +1 -1
  171. package/package.json +15 -15
  172. package/dist/SubscriberGenerator-CeH7wbYt.cjs.map +0 -1
  173. package/dist/SubscriberGenerator-DHnIYwUU.mjs.map +0 -1
  174. package/dist/compose-JOasAHcd.cjs.map +0 -1
  175. package/dist/compose-qLTNYJAY.mjs.map +0 -1
  176. package/dist/deploy-D-liNXfx.cjs.map +0 -1
  177. package/dist/deploy-_g-2dX38.mjs.map +0 -1
  178. package/dist/discover-Bsr7HjqJ.cjs.map +0 -1
  179. package/dist/discover-Ca8U75dl.mjs.map +0 -1
  180. package/dist/discover-CvTtV5ZD.d.cts.map +0 -1
  181. package/dist/discover-W2kab9Lc.d.mts.map +0 -1
  182. package/dist/github-BMPci2wg.mjs.map +0 -1
  183. package/dist/github-D5Ck3srU.cjs.map +0 -1
  184. package/dist/seeds-CF9Nx6_g.cjs.map +0 -1
  185. package/dist/seeds-CYzoBDg2.mjs.map +0 -1
@@ -2,14 +2,14 @@ const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
2
2
  const require_errors = require("./errors-DMC4Umsb.cjs");
3
3
  const require_run = require("./run-fVZ-rLnc.cjs");
4
4
  const require_workspace = require("./workspace-BwqQnool.cjs");
5
- const require_dns = require("./dns-DfQKqAyt.cjs");
5
+ const require_dns = require("./dns-CJ3izGTo.cjs");
6
6
  const require_define = require("./define-crmMcXFS.cjs");
7
- const require_seeds = require("./seeds-CF9Nx6_g.cjs");
7
+ const require_seeds = require("./seeds-CPFoexOv.cjs");
8
8
  const require_derive = require("./derive-DAbo49sm.cjs");
9
- const require_SubscriberGenerator = require("./SubscriberGenerator-CeH7wbYt.cjs");
9
+ const require_SubscriberGenerator = require("./SubscriberGenerator-C8CPxrCK.cjs");
10
10
  const require_identity = require("./identity-CbLfgQNT.cjs");
11
- const require_discover = require("./discover-Bsr7HjqJ.cjs");
12
- const require_drivers = require("./drivers-CoqD5zYP.cjs");
11
+ const require_discover = require("./discover-DozUKs8f.cjs");
12
+ const require_drivers = require("./drivers-DbjiYpW6.cjs");
13
13
  const require_databases = require("./databases-DGALFDG3.cjs");
14
14
  let node_path = require("node:path");
15
15
  let node_fs = require("node:fs");
@@ -684,7 +684,7 @@ function edgeCaddyfile(routes, options) {
684
684
  ` : tls.kind === "files" ? `
685
685
  tls ${tls.certFile} ${tls.keyFile}
686
686
  ` : "";
687
- const blocks = routes.map(({ host, upstreams, prefix, allow, streaming }) => `https://${host} {${certificate}
687
+ const blocks = routes.map(({ host, upstreams, prefix, allow, paths, streaming }) => `https://${host} {${certificate}
688
688
  # gkm's own header, which only a service of this stack may send: the auth
689
689
  # server rate-limits by the client address it carries.
690
690
  request_header -${_geekmidas_manifest.CLIENT_IP_HEADER}
@@ -693,6 +693,11 @@ ${allow ? `
693
693
  # could set. Everything else is refused before it reaches the upstream.
694
694
  @denied not remote_ip ${allow.join(" ")}
695
695
  respond @denied 403
696
+ ` : ""}${paths ? `
697
+ # Only these paths answer. Everything else on this host is refused before
698
+ # it reaches the upstream.
699
+ @elsewhere not path ${paths.join(" ")}
700
+ respond @elsewhere 404
696
701
  ` : ""}${prefix ? `
697
702
  # A bucket, served at a host of its own: the bucket is a prefix on MinIO,
698
703
  # which routes and signs on the Host header — so it is sent the upstream's.
@@ -713,8 +718,9 @@ ${allow ? `
713
718
  const HEADER = `# Generated by gkm compose from the construct manifest — do not edit.
714
719
  #
715
720
  # One host per API and site, each in front of its own container, one per
716
- # file server in front of the stack's MinIO, and — when its logs are served
717
- # publicly — one for OpenObserve, to the addresses it allows.
721
+ # file server in front of the stack's MinIO, one per worker SNS pushes to,
722
+ # answering only those routes, and — when its logs are served publicly — one
723
+ # for OpenObserve, to the addresses it allows.
718
724
  `;
719
725
  //#endregion
720
726
  //#region src/compose/images.ts
@@ -1013,8 +1019,9 @@ function traefikDynamic(routes, options) {
1013
1019
  middlewares[name(route, "prefix")] = { addPrefix: { prefix: route.prefix } };
1014
1020
  chain.push(name(route, "prefix"));
1015
1021
  }
1022
+ const paths = route.paths ? ` && (${route.paths.map((path) => `Path(\`${path}\`)`).join(" || ")})` : "";
1016
1023
  routers[name(route)] = {
1017
- rule: `Host(\`${route.host}\`)`,
1024
+ rule: `Host(\`${route.host}\`)${paths}`,
1018
1025
  entryPoints: ["websecure"],
1019
1026
  service: name(route),
1020
1027
  middlewares: chain,
@@ -1425,7 +1432,8 @@ function composeStack(input) {
1425
1432
  return {
1426
1433
  ...credential.containers.minio,
1427
1434
  buckets,
1428
- policies: require_seeds.bucketPolicies(plan).filter((p) => buckets.includes(p.bucket))
1435
+ policies: require_seeds.bucketPolicies(plan).filter((p) => buckets.includes(p.bucket)),
1436
+ lifecycles: require_seeds.bucketLifecycles(plan).filter((l) => buckets.includes(l.bucket))
1429
1437
  };
1430
1438
  })() : void 0;
1431
1439
  const fileServers = /* @__PURE__ */ new Map();
@@ -1572,16 +1580,26 @@ function composeStack(input) {
1572
1580
  }
1573
1581
  for (const worker of input.buildOnly ? [] : workers) {
1574
1582
  const keys = require_seeds.workerEnvKeys(manifest, worker.id, input.runnables) ?? /* @__PURE__ */ new Set();
1583
+ const resolved = valuesFor({
1584
+ name: worker.name,
1585
+ id: worker.id,
1586
+ kind: "rest-api"
1587
+ }, keys);
1588
+ const push = local ? void 0 : workerPush(worker, input.subscribers?.[worker.id] ?? [], resolved, {
1589
+ stage,
1590
+ ...domain ? { domain } : {}
1591
+ });
1592
+ if (push) {
1593
+ worker.push = push;
1594
+ if (proxy === "traefik") edgeServices.add(worker.name);
1595
+ }
1575
1596
  worker.env = {
1576
- ...require_seeds.scopeTelemetryEnv(valuesFor({
1577
- name: worker.name,
1578
- id: worker.id,
1579
- kind: "rest-api"
1580
- }, keys), {
1597
+ ...require_seeds.scopeTelemetryEnv(resolved, {
1581
1598
  uses: require_seeds.telemetryOf(manifest, worker.id) !== void 0,
1582
1599
  serviceName: worker.name,
1583
1600
  ...telemetryValues ? { telemetry: telemetryValues } : {}
1584
1601
  }),
1602
+ ...push ? { [SUBSCRIBER_PUSH_URL_KEY]: push.url } : {},
1585
1603
  NODE_ENV: "production",
1586
1604
  PORT: String(worker.port),
1587
1605
  STAGE: stage
@@ -1641,6 +1659,17 @@ function composeStack(input) {
1641
1659
  health: app.kind === "site" ? "/" : "/health"
1642
1660
  })),
1643
1661
  ...[...fileServers.values()].map(({ route }) => route),
1662
+ ...workers.flatMap(({ name, port, push }) => push ? [{
1663
+ name,
1664
+ host: push.host,
1665
+ upstreams: [{
1666
+ service: name,
1667
+ port
1668
+ }],
1669
+ streaming: false,
1670
+ paths: push.paths,
1671
+ health: "/health"
1672
+ }] : []),
1644
1673
  ...logs?.host && logs.public ? [{
1645
1674
  name: require_seeds.LOGS_SERVICE,
1646
1675
  host: logs.host,
@@ -1652,6 +1681,7 @@ function composeStack(input) {
1652
1681
  allow: logs.public.allow
1653
1682
  }] : []
1654
1683
  ];
1684
+ assertHostsUnique(routes);
1655
1685
  const dockerfiles = {};
1656
1686
  for (const app of apps) {
1657
1687
  if (!app.build) continue;
@@ -1746,6 +1776,51 @@ function stackApps(workspace, manifest, plan, options) {
1746
1776
  }
1747
1777
  return apps.sort((a, b) => a.name.localeCompare(b.name));
1748
1778
  }
1779
+ /** What the worker reads the public base of its push routes from. */
1780
+ const SUBSCRIBER_PUSH_URL_KEY = "GKM_SUBSCRIBER_PUSH_URL";
1781
+ /**
1782
+ * Where SNS pushes to a worker on a deployed stage, or nothing when it pushes
1783
+ * to none of its subscribers.
1784
+ *
1785
+ * A subscriber is pushed to when its topic's connection string, as this stage
1786
+ * resolved it for the worker, is an SNS one — the same test the worker's own
1787
+ * startup makes, so the edge exposes a route exactly when the worker mounts
1788
+ * it. Each such route, and nothing else the worker serves, answers on
1789
+ * `<worker>.<domain>`.
1790
+ */
1791
+ function workerPush(worker, subscribers, env, options) {
1792
+ const paths = subscribers.filter(({ topic }) => env[(0, _geekmidas_manifest.provideKey)(topic, "publisherConnectionString")]?.startsWith("sns:")).map(({ name }) => require_SubscriberGenerator.subscriberRoute(name)).sort();
1793
+ if (paths.length === 0) return void 0;
1794
+ if (!options.domain) throw new require_seeds.NoDomainForStage(options.stage);
1795
+ const host = `${worker.name}.${options.domain}`;
1796
+ return {
1797
+ host,
1798
+ url: `https://${host}`,
1799
+ paths: [...new Set(paths)]
1800
+ };
1801
+ }
1802
+ /** Two constructs the edge would answer on one host. */
1803
+ var EdgeHostTaken = class extends require_errors.GkmError {
1804
+ host;
1805
+ first;
1806
+ second;
1807
+ constructor(host, first, second) {
1808
+ super(`'${first}' and '${second}' would both answer on ${host}, and the edge can send a host to only one of them. Give one a subdomain of its own, or rename it.`);
1809
+ this.host = host;
1810
+ this.first = first;
1811
+ this.second = second;
1812
+ this.name = "EdgeHostTaken";
1813
+ }
1814
+ };
1815
+ /** Refuse a stack where one host would be routed to two services. */
1816
+ function assertHostsUnique(routes) {
1817
+ const claimed = /* @__PURE__ */ new Map();
1818
+ for (const { host, name } of routes) {
1819
+ const first = claimed.get(host);
1820
+ if (first !== void 0) throw new EdgeHostTaken(host, first, name);
1821
+ claimed.set(host, name);
1822
+ }
1823
+ }
1749
1824
  /** Each worker's image, and where it is built from. */
1750
1825
  function stackWorkers(units, options) {
1751
1826
  return units.map((unit) => ({
@@ -1852,7 +1927,7 @@ function stackFile(options) {
1852
1927
  restart: "unless-stopped",
1853
1928
  ports: [`${options.https}:443`, `${options.http}:80`],
1854
1929
  volumes: ["caddy-data:/data", "caddy-config:/config"],
1855
- depends_on: Object.fromEntries(apps.map((app) => [app.name, HEALTHY])),
1930
+ depends_on: Object.fromEntries([...apps.map((app) => app.name), ...options.workers.filter((w) => w.push).map((w) => w.name)].map((name) => [name, HEALTHY])),
1856
1931
  healthcheck: {
1857
1932
  test: [
1858
1933
  "CMD",
@@ -2307,11 +2382,13 @@ async function validateCompose(ctx, deps, options = {}) {
2307
2382
  if (!registry && (push || mode === "pull")) throw new RegistryRequired(push ? "push" : "pull", require_identity.imageRef(identity, ctx.apps[0] ?? workspace.name, void 0, tag));
2308
2383
  const runnables = {};
2309
2384
  const background = {};
2385
+ const subscribers = {};
2310
2386
  const manifest = await require_discover.discover({
2311
2387
  patterns: require_seeds.constructGlobs(workspace),
2312
2388
  cwd: root,
2313
2389
  runnables,
2314
- background
2390
+ background,
2391
+ subscribers
2315
2392
  });
2316
2393
  const { secrets, generated } = await stageSecrets(ctx, manifest);
2317
2394
  const layout = mode === "build" ? require_seeds.imageLayout(workspace) : void 0;
@@ -2320,6 +2397,7 @@ async function validateCompose(ctx, deps, options = {}) {
2320
2397
  manifest,
2321
2398
  runnables,
2322
2399
  background,
2400
+ subscribers,
2323
2401
  stage,
2324
2402
  identity,
2325
2403
  images: {
@@ -2652,7 +2730,11 @@ async function prepareBuckets(ctx, run, deps) {
2652
2730
  let done;
2653
2731
  try {
2654
2732
  const client = deps.buckets(tunnel.port, storage);
2655
- done = [...await require_seeds.applyBuckets(client, storage.buckets), ...await require_seeds.applyPolicies(client, storage.policies)];
2733
+ done = [
2734
+ ...await require_seeds.applyBuckets(client, storage.buckets),
2735
+ ...await require_seeds.applyPolicies(client, storage.policies),
2736
+ ...await require_seeds.applyLifecycles(client, storage.lifecycles)
2737
+ ];
2656
2738
  } finally {
2657
2739
  await tunnel.close();
2658
2740
  }
@@ -3342,4 +3424,4 @@ Object.defineProperty(exports, "stackPlan", {
3342
3424
  }
3343
3425
  });
3344
3426
 
3345
- //# sourceMappingURL=compose-JOasAHcd.cjs.map
3427
+ //# sourceMappingURL=compose-tZLAZZp6.cjs.map