@geekmidas/cli 10.0.0-alpha.124 → 10.0.0-alpha.125

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 (228) hide show
  1. package/dist/{EndpointGenerator-B2MUa4M2.cjs → EndpointGenerator-BGxf9jWE.cjs} +8 -4
  2. package/dist/{EndpointGenerator-B2MUa4M2.cjs.map → EndpointGenerator-BGxf9jWE.cjs.map} +1 -1
  3. package/dist/{EndpointGenerator-Z_BUTocT.mjs → EndpointGenerator-errMeldx.mjs} +8 -4
  4. package/dist/{EndpointGenerator-Z_BUTocT.mjs.map → EndpointGenerator-errMeldx.mjs.map} +1 -1
  5. package/dist/{GoDaddyProvider-55x4o-4z.mjs → GoDaddyProvider-BN1dODm9.mjs} +2 -2
  6. package/dist/{GoDaddyProvider-55x4o-4z.mjs.map → GoDaddyProvider-BN1dODm9.mjs.map} +1 -1
  7. package/dist/{GoDaddyProvider-0z5RAN1k.cjs → GoDaddyProvider-BTdtqhI_.cjs} +2 -2
  8. package/dist/{GoDaddyProvider-0z5RAN1k.cjs.map → GoDaddyProvider-BTdtqhI_.cjs.map} +1 -1
  9. package/dist/{LegacyStateStore-DRpB-yC5.cjs → LegacyStateStore-C2S8TGwx.cjs} +3 -3
  10. package/dist/{LegacyStateStore-DRpB-yC5.cjs.map → LegacyStateStore-C2S8TGwx.cjs.map} +1 -1
  11. package/dist/{LegacyStateStore-C-vumKSN.mjs → LegacyStateStore-DgXmuG87.mjs} +3 -3
  12. package/dist/{LegacyStateStore-C-vumKSN.mjs.map → LegacyStateStore-DgXmuG87.mjs.map} +1 -1
  13. package/dist/{LocalStateStore-C3ummuDT.cjs → LocalStateStore-CaJw9H-3.cjs} +2 -2
  14. package/dist/{LocalStateStore-C3ummuDT.cjs.map → LocalStateStore-CaJw9H-3.cjs.map} +1 -1
  15. package/dist/{LocalStateStore-CtOjpV1w.mjs → LocalStateStore-ojY_BiMK.mjs} +2 -2
  16. package/dist/{LocalStateStore-CtOjpV1w.mjs.map → LocalStateStore-ojY_BiMK.mjs.map} +1 -1
  17. package/dist/{OpenApiTsGenerator-MtnMQL_g.mjs → OpenApiTsGenerator-W_HRXH1X.mjs} +2 -2
  18. package/dist/{OpenApiTsGenerator-MtnMQL_g.mjs.map → OpenApiTsGenerator-W_HRXH1X.mjs.map} +1 -1
  19. package/dist/{OpenApiTsGenerator-t3_E98Fi.cjs → OpenApiTsGenerator-cQgtxWQo.cjs} +2 -2
  20. package/dist/{OpenApiTsGenerator-t3_E98Fi.cjs.map → OpenApiTsGenerator-cQgtxWQo.cjs.map} +1 -1
  21. package/dist/{S3StateStore-BC4Jm3Tw.mjs → S3StateStore-BSPkxhrx.mjs} +2 -2
  22. package/dist/{S3StateStore-BC4Jm3Tw.mjs.map → S3StateStore-BSPkxhrx.mjs.map} +1 -1
  23. package/dist/{S3StateStore-BeArp0aF.cjs → S3StateStore-BqugXIcb.cjs} +2 -2
  24. package/dist/{S3StateStore-BeArp0aF.cjs.map → S3StateStore-BqugXIcb.cjs.map} +1 -1
  25. package/dist/{SSMStateStore-DcstR6cW.cjs → SSMStateStore-B0OsuT_k.cjs} +2 -2
  26. package/dist/{SSMStateStore-DcstR6cW.cjs.map → SSMStateStore-B0OsuT_k.cjs.map} +1 -1
  27. package/dist/{SSMStateStore-Crl76aYZ.mjs → SSMStateStore-DM85OiH0.mjs} +2 -2
  28. package/dist/{SSMStateStore-Crl76aYZ.mjs.map → SSMStateStore-DM85OiH0.mjs.map} +1 -1
  29. package/dist/{SubscriberGenerator-C3QTae-R.cjs → SubscriberGenerator-BDUp7OeY.cjs} +3 -3
  30. package/dist/SubscriberGenerator-BDUp7OeY.cjs.map +1 -0
  31. package/dist/{SubscriberGenerator-COAVPgM-.mjs → SubscriberGenerator-ocQ2yj0K.mjs} +3 -3
  32. package/dist/{SubscriberGenerator-C3QTae-R.cjs.map → SubscriberGenerator-ocQ2yj0K.mjs.map} +1 -1
  33. package/dist/{add-CIjmgzkb.mjs → add-C7ZBXIzM.mjs} +6 -6
  34. package/dist/{add-CIjmgzkb.mjs.map → add-C7ZBXIzM.mjs.map} +1 -1
  35. package/dist/{add-BFjb6mMq.cjs → add-CrxvmSpq.cjs} +6 -6
  36. package/dist/{add-BFjb6mMq.cjs.map → add-CrxvmSpq.cjs.map} +1 -1
  37. package/dist/{bundler-CiUoIsku.cjs → bundler-DVUXW95p.cjs} +5 -5
  38. package/dist/{bundler-CiUoIsku.cjs.map → bundler-DVUXW95p.cjs.map} +1 -1
  39. package/dist/{bundler-D6KFNpQk.mjs → bundler-DpZ9uBGN.mjs} +5 -5
  40. package/dist/{bundler-D6KFNpQk.mjs.map → bundler-DpZ9uBGN.mjs.map} +1 -1
  41. package/dist/{cli-r4eUr98C.cjs → cli-BMRhE6cZ.cjs} +3 -3
  42. package/dist/{cli-r4eUr98C.cjs.map → cli-BMRhE6cZ.cjs.map} +1 -1
  43. package/dist/{cli-DNtSTtMc.mjs → cli-BWfYyy1k.mjs} +3 -3
  44. package/dist/{cli-DNtSTtMc.mjs.map → cli-BWfYyy1k.mjs.map} +1 -1
  45. package/dist/{compose-DJvvmF3X.mjs → compose-BFmdLig3.mjs} +232 -36
  46. package/dist/compose-BFmdLig3.mjs.map +1 -0
  47. package/dist/{compose-BfXXWJSp.cjs → compose-Bqcy0lqo.cjs} +232 -36
  48. package/dist/compose-Bqcy0lqo.cjs.map +1 -0
  49. package/dist/{config-IgK6YaGp.d.cts → config-CdytFgSR.d.cts} +3 -3
  50. package/dist/{config-IgK6YaGp.d.cts.map → config-CdytFgSR.d.cts.map} +1 -1
  51. package/dist/{config-kE-p5hxq.d.mts → config-_y1FGBWR.d.mts} +3 -3
  52. package/dist/{config-kE-p5hxq.d.mts.map → config-_y1FGBWR.d.mts.map} +1 -1
  53. package/dist/config.cjs +2 -2
  54. package/dist/config.d.cts +3 -3
  55. package/dist/config.d.mts +3 -3
  56. package/dist/config.mjs +2 -2
  57. package/dist/{credentialSchemas-AhIBuQxQ.cjs → credentialSchemas-DFxvGEwa.cjs} +2 -2
  58. package/dist/{credentialSchemas-AhIBuQxQ.cjs.map → credentialSchemas-DFxvGEwa.cjs.map} +1 -1
  59. package/dist/{credentialSchemas-DLKbxYBy.mjs → credentialSchemas-DaMpt-Dx.mjs} +2 -2
  60. package/dist/{credentialSchemas-DLKbxYBy.mjs.map → credentialSchemas-DaMpt-Dx.mjs.map} +1 -1
  61. package/dist/deploy/public.cjs +8 -8
  62. package/dist/deploy/public.d.cts +3 -3
  63. package/dist/deploy/public.d.cts.map +1 -1
  64. package/dist/deploy/public.d.mts +3 -3
  65. package/dist/deploy/public.d.mts.map +1 -1
  66. package/dist/deploy/public.mjs +8 -8
  67. package/dist/{deploy-CiRYwFmr.mjs → deploy-D8pUA9Y0.mjs} +797 -25
  68. package/dist/deploy-D8pUA9Y0.mjs.map +1 -0
  69. package/dist/{deploy-BbI1UMh3.cjs → deploy-DVrNjX1X.cjs} +796 -24
  70. package/dist/deploy-DVrNjX1X.cjs.map +1 -0
  71. package/dist/{discover-BvJOVsYG.mjs → discover-CzGM5P3p.mjs} +71 -1
  72. package/dist/discover-CzGM5P3p.mjs.map +1 -0
  73. package/dist/{discover-ojkcbxHw.cjs → discover-DL6h-J97.cjs} +71 -1
  74. package/dist/discover-DL6h-J97.cjs.map +1 -0
  75. package/dist/{dokploy-MM7c3IE0.mjs → dokploy-CzDGNB6A.mjs} +2 -2
  76. package/dist/{dokploy-MM7c3IE0.mjs.map → dokploy-CzDGNB6A.mjs.map} +1 -1
  77. package/dist/{dokploy-C0aQrCgs.cjs → dokploy-TtK6Zyl3.cjs} +2 -2
  78. package/dist/{dokploy-C0aQrCgs.cjs.map → dokploy-TtK6Zyl3.cjs.map} +1 -1
  79. package/dist/{drivers-Chb5Akov.mjs → drivers-C-VqMtld.mjs} +2 -2
  80. package/dist/{drivers-Chb5Akov.mjs.map → drivers-C-VqMtld.mjs.map} +1 -1
  81. package/dist/{drivers-CQ32PB5w.cjs → drivers-L29WvE95.cjs} +2 -2
  82. package/dist/{drivers-CQ32PB5w.cjs.map → drivers-L29WvE95.cjs.map} +1 -1
  83. package/dist/{eas-CJoys9yh.cjs → eas-D3clzkni.cjs} +2 -2
  84. package/dist/{eas-CJoys9yh.cjs.map → eas-D3clzkni.cjs.map} +1 -1
  85. package/dist/{eas-1Ee6kql0.mjs → eas-DaobzDks.mjs} +2 -2
  86. package/dist/{eas-1Ee6kql0.mjs.map → eas-DaobzDks.mjs.map} +1 -1
  87. package/dist/{emit-qvHxMV9b.cjs → emit-CYloptRS.cjs} +18 -1
  88. package/dist/emit-CYloptRS.cjs.map +1 -0
  89. package/dist/{emit-CNpuV_6Q.mjs → emit-CiJGdy_f.mjs} +18 -1
  90. package/dist/emit-CiJGdy_f.mjs.map +1 -0
  91. package/dist/{encryption-Bo9VlRnl.cjs → encryption-DBkIFiR2.cjs} +3 -3
  92. package/dist/{encryption-Bo9VlRnl.cjs.map → encryption-DBkIFiR2.cjs.map} +1 -1
  93. package/dist/{encryption-B8Bk1Mvu.mjs → encryption-DV31gEY8.mjs} +3 -3
  94. package/dist/{encryption-B8Bk1Mvu.mjs.map → encryption-DV31gEY8.mjs.map} +1 -1
  95. package/dist/{engine-BuinpJfS.mjs → engine-CFOR9h6X.mjs} +138 -13
  96. package/dist/engine-CFOR9h6X.mjs.map +1 -0
  97. package/dist/{engine-esxTxcIx.cjs → engine-CuZUGbEh.cjs} +138 -13
  98. package/dist/engine-CuZUGbEh.cjs.map +1 -0
  99. package/dist/{github-BEA4K3_X.cjs → github-CsvtWSBW.cjs} +41 -6
  100. package/dist/github-CsvtWSBW.cjs.map +1 -0
  101. package/dist/{github-BUlKJfOV.mjs → github-Nep8pI4_.mjs} +41 -6
  102. package/dist/github-Nep8pI4_.mjs.map +1 -0
  103. package/dist/{googlePlay-CiqAS2ma.cjs → googlePlay-C-UfBXJU.cjs} +3 -3
  104. package/dist/{googlePlay-CiqAS2ma.cjs.map → googlePlay-C-UfBXJU.cjs.map} +1 -1
  105. package/dist/{googlePlay-CK05QiTq.mjs → googlePlay-lF7Atm_N.mjs} +3 -3
  106. package/dist/{googlePlay-CK05QiTq.mjs.map → googlePlay-lF7Atm_N.mjs.map} +1 -1
  107. package/dist/{index-DhUf0B0m.d.mts → index-DrkV7N5w.d.mts} +2 -2
  108. package/dist/{index-4CO0HD27.d.cts.map → index-DrkV7N5w.d.mts.map} +1 -1
  109. package/dist/{index-4CO0HD27.d.cts → index-yaXZ9m-J.d.cts} +2 -2
  110. package/dist/{index-DhUf0B0m.d.mts.map → index-yaXZ9m-J.d.cts.map} +1 -1
  111. package/dist/index.cjs +147 -65
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.mjs +147 -65
  114. package/dist/index.mjs.map +1 -1
  115. package/dist/{migrate-DeQJBexh.cjs → migrate-Dp3GhFnf.cjs} +4 -4
  116. package/dist/{migrate-DeQJBexh.cjs.map → migrate-Dp3GhFnf.cjs.map} +1 -1
  117. package/dist/{migrate-CnbvrVag.mjs → migrate-NfbPVhi9.mjs} +4 -4
  118. package/dist/{migrate-CnbvrVag.mjs.map → migrate-NfbPVhi9.mjs.map} +1 -1
  119. package/dist/{migrate-BzCHT9qs.mjs → migrate-_sBX0pve.mjs} +3 -3
  120. package/dist/{migrate-BzCHT9qs.mjs.map → migrate-_sBX0pve.mjs.map} +1 -1
  121. package/dist/{migrate-C-hmbjpG.cjs → migrate-hlNKNWmg.cjs} +3 -3
  122. package/dist/{migrate-C-hmbjpG.cjs.map → migrate-hlNKNWmg.cjs.map} +1 -1
  123. package/dist/openapi.cjs +3 -3
  124. package/dist/openapi.d.cts +1 -1
  125. package/dist/openapi.d.mts +1 -1
  126. package/dist/openapi.mjs +3 -3
  127. package/dist/{publish-BISBrrqR.mjs → publish-BuUVaZVy.mjs} +2 -2
  128. package/dist/{publish-BISBrrqR.mjs.map → publish-BuUVaZVy.mjs.map} +1 -1
  129. package/dist/{publish-DtSIB-hZ.cjs → publish-ZOo4xEuZ.cjs} +2 -2
  130. package/dist/{publish-DtSIB-hZ.cjs.map → publish-ZOo4xEuZ.cjs.map} +1 -1
  131. package/dist/{ready-DqsyadOs.mjs → ready-Ca883OvY.mjs} +6 -6
  132. package/dist/{ready-DqsyadOs.mjs.map → ready-Ca883OvY.mjs.map} +1 -1
  133. package/dist/{ready-IVGu-q18.cjs → ready-qnqp6JAY.cjs} +6 -6
  134. package/dist/{ready-IVGu-q18.cjs.map → ready-qnqp6JAY.cjs.map} +1 -1
  135. package/dist/reconcile/public.cjs +2 -2
  136. package/dist/reconcile/public.d.cts +1 -1
  137. package/dist/reconcile/public.d.cts.map +1 -1
  138. package/dist/reconcile/public.d.mts +1 -1
  139. package/dist/reconcile/public.d.mts.map +1 -1
  140. package/dist/reconcile/public.mjs +2 -2
  141. package/dist/{resolve-BT7fkPN5.mjs → resolve-BCU9pYDx.mjs} +3 -3
  142. package/dist/{resolve-BT7fkPN5.mjs.map → resolve-BCU9pYDx.mjs.map} +1 -1
  143. package/dist/{resolve-C7GKQcE4.cjs → resolve-C9QqOl5t.cjs} +3 -3
  144. package/dist/{resolve-C7GKQcE4.cjs.map → resolve-C9QqOl5t.cjs.map} +1 -1
  145. package/dist/{rollback-BEiB-Pje.cjs → rollback-CTWdDBgB.cjs} +5 -5
  146. package/dist/{rollback-BEiB-Pje.cjs.map → rollback-CTWdDBgB.cjs.map} +1 -1
  147. package/dist/{rollback-DbP0KuDw.mjs → rollback-CWyyTQ0B.mjs} +5 -5
  148. package/dist/{rollback-DbP0KuDw.mjs.map → rollback-CWyyTQ0B.mjs.map} +1 -1
  149. package/dist/{runtime-BFJQNqwd.d.mts → runtime-DCkfI2E7.d.mts} +2 -2
  150. package/dist/{runtime-BFJQNqwd.d.mts.map → runtime-DCkfI2E7.d.mts.map} +1 -1
  151. package/dist/{runtime-BJO-FFef.d.cts → runtime-Ie4znWIB.d.cts} +2 -2
  152. package/dist/{runtime-BJO-FFef.d.cts.map → runtime-Ie4znWIB.d.cts.map} +1 -1
  153. package/dist/{s3-B4FTQQkV.mjs → s3-BZzSnker.mjs} +2 -2
  154. package/dist/{s3-B4FTQQkV.mjs.map → s3-BZzSnker.mjs.map} +1 -1
  155. package/dist/{s3-DwKLXwUT.cjs → s3-pqgmCTOq.cjs} +2 -2
  156. package/dist/{s3-DwKLXwUT.cjs.map → s3-pqgmCTOq.cjs.map} +1 -1
  157. package/dist/sandbox/credentials-worker.cjs +2 -2
  158. package/dist/sandbox/credentials-worker.mjs +2 -2
  159. package/dist/sandbox/discover-worker.cjs +1 -1
  160. package/dist/sandbox/discover-worker.mjs +1 -1
  161. package/dist/sandbox/migrate-worker.cjs +1 -1
  162. package/dist/sandbox/migrate-worker.mjs +1 -1
  163. package/dist/{seeds-rG-Evfz9.mjs → seeds-CK7w79VC.mjs} +516 -39
  164. package/dist/seeds-CK7w79VC.mjs.map +1 -0
  165. package/dist/{seeds-DOfxmDRO.cjs → seeds-CPEcmoPn.cjs} +599 -38
  166. package/dist/seeds-CPEcmoPn.cjs.map +1 -0
  167. package/dist/{serverSetup-xGw1fxuZ.mjs → serverSetup-BAPNuNEX.mjs} +6 -6
  168. package/dist/{serverSetup-xGw1fxuZ.mjs.map → serverSetup-BAPNuNEX.mjs.map} +1 -1
  169. package/dist/{serverSetup-CWWVcU6Y.cjs → serverSetup-C6t6Vtt7.cjs} +6 -6
  170. package/dist/{serverSetup-CWWVcU6Y.cjs.map → serverSetup-C6t6Vtt7.cjs.map} +1 -1
  171. package/dist/{sniffer-C7O9Pna_.cjs → sniffer-DdX_WN_-.cjs} +8 -8
  172. package/dist/{sniffer-C7O9Pna_.cjs.map → sniffer-DdX_WN_-.cjs.map} +1 -1
  173. package/dist/{sniffer-DVPgfyHr.mjs → sniffer-g9v7cqDN.mjs} +8 -8
  174. package/dist/{sniffer-DVPgfyHr.mjs.map → sniffer-g9v7cqDN.mjs.map} +1 -1
  175. package/dist/{snsSubscriptions-CSkteK2J.cjs → snsSubscriptions-5Cqww8S7.cjs} +15 -3
  176. package/dist/snsSubscriptions-5Cqww8S7.cjs.map +1 -0
  177. package/dist/{snsSubscriptions-CvBIGGp0.mjs → snsSubscriptions-BmYeeTH8.mjs} +4 -4
  178. package/dist/snsSubscriptions-BmYeeTH8.mjs.map +1 -0
  179. package/dist/{stage-2EKpzPQ1.mjs → stage-C-I2dVw1.mjs} +6 -6
  180. package/dist/{stage-2EKpzPQ1.mjs.map → stage-C-I2dVw1.mjs.map} +1 -1
  181. package/dist/{stage-fRfFtLwj.cjs → stage-CUE5pMmw.cjs} +6 -6
  182. package/dist/{stage-fRfFtLwj.cjs.map → stage-CUE5pMmw.cjs.map} +1 -1
  183. package/dist/{stages-B7mCWI_R.cjs → stages-3yUZaZeA.cjs} +2 -2
  184. package/dist/{stages-B7mCWI_R.cjs.map → stages-3yUZaZeA.cjs.map} +1 -1
  185. package/dist/{stages-DSltTW2d.mjs → stages-DTTv0NZW.mjs} +2 -2
  186. package/dist/{stages-DSltTW2d.mjs.map → stages-DTTv0NZW.mjs.map} +1 -1
  187. package/dist/target/public.cjs +1 -1
  188. package/dist/target/public.d.cts +2 -2
  189. package/dist/target/public.d.mts +2 -2
  190. package/dist/target/public.mjs +1 -1
  191. package/dist/{terminal-D1aeTkgv.cjs → terminal-PKhPAajN.cjs} +2 -2
  192. package/dist/{terminal-D1aeTkgv.cjs.map → terminal-PKhPAajN.cjs.map} +1 -1
  193. package/dist/{terminal-BAVrDhhN.mjs → terminal-bqY33lpN.mjs} +2 -2
  194. package/dist/{terminal-BAVrDhhN.mjs.map → terminal-bqY33lpN.mjs.map} +1 -1
  195. package/dist/{types-CFU2uvrz.d.cts → types-Bmjs4jZV.d.mts} +8 -2
  196. package/dist/{types-D3BeGucy.d.mts.map → types-Bmjs4jZV.d.mts.map} +1 -1
  197. package/dist/{types-D3BeGucy.d.mts → types-D0IsQxES.d.cts} +9 -1
  198. package/dist/{types-CFU2uvrz.d.cts.map → types-D0IsQxES.d.cts.map} +1 -1
  199. package/dist/vitest.cjs +1 -1
  200. package/dist/vitest.mjs +1 -1
  201. package/dist/workspace/index.cjs +1 -1
  202. package/dist/workspace/index.d.cts +2 -2
  203. package/dist/workspace/index.d.mts +2 -2
  204. package/dist/workspace/index.mjs +1 -1
  205. package/dist/{workspace-DUnnVjqC.mjs → workspace-DBHF9Gba.mjs} +5 -3
  206. package/dist/workspace-DBHF9Gba.mjs.map +1 -0
  207. package/dist/{workspace-C82GLPnf.cjs → workspace-Du4Afb03.cjs} +5 -3
  208. package/dist/workspace-Du4Afb03.cjs.map +1 -0
  209. package/package.json +17 -15
  210. package/dist/SubscriberGenerator-COAVPgM-.mjs.map +0 -1
  211. package/dist/compose-BfXXWJSp.cjs.map +0 -1
  212. package/dist/compose-DJvvmF3X.mjs.map +0 -1
  213. package/dist/deploy-BbI1UMh3.cjs.map +0 -1
  214. package/dist/deploy-CiRYwFmr.mjs.map +0 -1
  215. package/dist/discover-BvJOVsYG.mjs.map +0 -1
  216. package/dist/discover-ojkcbxHw.cjs.map +0 -1
  217. package/dist/emit-CNpuV_6Q.mjs.map +0 -1
  218. package/dist/emit-qvHxMV9b.cjs.map +0 -1
  219. package/dist/engine-BuinpJfS.mjs.map +0 -1
  220. package/dist/engine-esxTxcIx.cjs.map +0 -1
  221. package/dist/github-BEA4K3_X.cjs.map +0 -1
  222. package/dist/github-BUlKJfOV.mjs.map +0 -1
  223. package/dist/seeds-DOfxmDRO.cjs.map +0 -1
  224. package/dist/seeds-rG-Evfz9.mjs.map +0 -1
  225. package/dist/snsSubscriptions-CSkteK2J.cjs.map +0 -1
  226. package/dist/snsSubscriptions-CvBIGGp0.mjs.map +0 -1
  227. package/dist/workspace-C82GLPnf.cjs.map +0 -1
  228. package/dist/workspace-DUnnVjqC.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
2
2
  const require_errors = require("./errors-DMC4Umsb.cjs");
3
3
  const require_credentials = require("./credentials-D7XJypNd.cjs");
4
- const require_workspace = require("./workspace-C82GLPnf.cjs");
4
+ const require_workspace = require("./workspace-Du4Afb03.cjs");
5
5
  const require_derive = require("./derive-DAbo49sm.cjs");
6
- const require_SubscriberGenerator = require("./SubscriberGenerator-C3QTae-R.cjs");
6
+ const require_SubscriberGenerator = require("./SubscriberGenerator-BDUp7OeY.cjs");
7
7
  const require_identity = require("./identity-CbLfgQNT.cjs");
8
- const require_EndpointGenerator = require("./EndpointGenerator-B2MUa4M2.cjs");
9
- const require_discover = require("./discover-ojkcbxHw.cjs");
8
+ const require_EndpointGenerator = require("./EndpointGenerator-BGxf9jWE.cjs");
9
+ const require_discover = require("./discover-DL6h-J97.cjs");
10
10
  const require_config = require("./config.cjs");
11
- const require_resolve = require("./resolve-C7GKQcE4.cjs");
11
+ const require_resolve = require("./resolve-C9QqOl5t.cjs");
12
12
  let node_path = require("node:path");
13
13
  let node_fs = require("node:fs");
14
14
  let node_fs_promises = require("node:fs/promises");
@@ -27,6 +27,7 @@ let _geekmidas_cache_postgres = require("@geekmidas/cache/postgres");
27
27
  let dotenv = require("dotenv");
28
28
  let node_util = require("node:util");
29
29
  let _geekmidas_constructs_crons = require("@geekmidas/constructs/crons");
30
+ let _geekmidas_constructs_processors = require("@geekmidas/constructs/processors");
30
31
  let _geekmidas_constructs_queue = require("@geekmidas/constructs/queue");
31
32
  let _aws_sdk_client_s3 = require("@aws-sdk/client-s3");
32
33
  let _aws_sdk_client_sns = require("@aws-sdk/client-sns");
@@ -488,6 +489,21 @@ function volumeOf(container) {
488
489
  }[container];
489
490
  }
490
491
  //#endregion
492
+ //#region src/generators/processorRoute.ts
493
+ /**
494
+ * Where `gkm dev` serves a file server's processors, on the dev server of the
495
+ * app holding them: named after the file server.
496
+ *
497
+ * One definition for both sides — the dev server mounts it, and the local
498
+ * edge rewrites each processor pattern on the file server's host onto it — so
499
+ * the path the edge sends and the path the server answers cannot drift.
500
+ */
501
+ const PROCESSORS_DEV_PREFIX = "/__gkm/processors/";
502
+ /** The base a file server's processors answer under, in `gkm dev`. */
503
+ function processorsDevRoute(fileServerId) {
504
+ return `${PROCESSORS_DEV_PREFIX}${fileServerId}`;
505
+ }
506
+ //#endregion
491
507
  //#region src/reconcile/caddyfile.ts
492
508
  /**
493
509
  * The Caddy configuration a plan implies.
@@ -554,19 +570,26 @@ const LOCAL_TLD = "localhost";
554
570
  * are a legitimate arrangement — two cache behaviours, one origin — and naming
555
571
  * the host after the bucket would make them collide.
556
572
  */
557
- function sitesFor(plan, project, addresses = {}) {
573
+ function sitesFor(plan, project, addresses = {}, processorAddresses = {}) {
558
574
  const byId = new Map(plan.resources.map((r) => [r.id, r]));
559
575
  const sites = [];
560
576
  for (const resource of plan.resources) {
561
577
  if (!EDGE_KINDS[resource.kind]) continue;
562
- const host = hostFor(resource, project);
578
+ const host = hostFor$1(resource, project);
563
579
  if (resource.kind === "file-server") {
564
580
  const origin = resource.of ? byId.get(resource.of) : void 0;
565
581
  if (!origin) continue;
582
+ const address = processorAddresses[resource.id];
583
+ const port = address ? portOf(address) : void 0;
566
584
  sites.push({
567
585
  host,
568
586
  upstream: "http://minio:9000",
569
- rewrite: `/${origin.name}{uri}`
587
+ rewrite: `/${origin.name}{uri}`,
588
+ ...resource.processors?.length && port ? { processors: {
589
+ prefixes: resource.processors,
590
+ upstream: `http://${HOST_GATEWAY$1}:${port}`,
591
+ under: processorsDevRoute(resource.id)
592
+ } } : {}
570
593
  });
571
594
  continue;
572
595
  }
@@ -598,7 +621,7 @@ function portOf(address) {
598
621
  * name, because an empty label makes `uploads..localhost` — a host nothing
599
622
  * resolves and no certificate can be issued for.
600
623
  */
601
- function hostFor(resource, project) {
624
+ function hostFor$1(resource, project) {
602
625
  return [
603
626
  resource.root && project ? stageOf(resource) : labelOf(resource),
604
627
  project,
@@ -656,14 +679,24 @@ function toCaddyfile(sites) {
656
679
  if (sites.length === 0) return `${GENERATED}
657
680
  # No file server is declared in this stage, so it routes nothing.
658
681
  `;
659
- const blocks = sites.map(({ host, upstream, rewrite }) => `
682
+ const blocks = sites.map(({ host, upstream, rewrite, processors }) => `
660
683
  https://${host} {
661
684
  tls internal
662
685
 
663
686
  # gkm's own header, which only a service of this stack may send: the auth
664
687
  # server rate-limits by the client address it carries.
665
688
  request_header -${_geekmidas_manifest.CLIENT_IP_HEADER}
666
-
689
+ ${processors ? `
690
+ # Its processors' patterns, to the dev server holding them — under the
691
+ # route it mounts them on. Answered there, so the bucket below never is.
692
+ @processors path ${processors.prefixes.map((prefix) => `${prefix}*`).join(" ")}
693
+ handle @processors {
694
+ reverse_proxy ${processors.upstream} {
695
+ rewrite ${processors.under}{uri}
696
+ header_up Host {host}
697
+ }
698
+ }
699
+ ` : ""}
667
700
  reverse_proxy ${upstream} {${rewrite ? `
668
701
  rewrite ${rewrite}
669
702
  # MinIO routes and signs on the Host header, so forwarding the requested
@@ -848,13 +881,14 @@ function nodeOf(manifest, id) {
848
881
  return node?.kind === "telemetry" ? node : void 0;
849
882
  }
850
883
  /**
851
- * The `Telemetry` node the process for `id` — a surface or a worker, by
852
- * construct id — emits through, or undefined when it has no edge to one.
884
+ * The `Telemetry` node the process for `id` — a surface, a worker, or a file
885
+ * server's processor unit, by construct id — emits through, or undefined
886
+ * when it has no edge to one.
853
887
  */
854
888
  function telemetryOf(manifest, id) {
855
889
  const declaration = manifest[id];
856
890
  if (!declaration) return void 0;
857
- if (declaration.kind === "worker") return nodeOf(manifest, declaration.telemetry);
891
+ if (declaration.kind === "worker" || declaration.kind === "file-server") return nodeOf(manifest, declaration.telemetry);
858
892
  if (declaration.kind !== "rest-api") return void 0;
859
893
  return nodeOf(manifest, declaration.telemetry);
860
894
  }
@@ -868,7 +902,7 @@ function appTelemetry(manifest, appName) {
868
902
  }
869
903
  /** Whether any process in the manifest emits through a `Telemetry` node. */
870
904
  function usesTelemetry(manifest) {
871
- return Object.entries(manifest).some(([id, d]) => (d.kind === "rest-api" || d.kind === "worker") && telemetryOf(manifest, id) !== void 0);
905
+ return Object.entries(manifest).some(([id, d]) => (d.kind === "rest-api" || d.kind === "worker" || d.kind === "file-server") && telemetryOf(manifest, id) !== void 0);
872
906
  }
873
907
  /**
874
908
  * One process's share of the telemetry keys a stage resolved: all of them,
@@ -1129,7 +1163,8 @@ function planFor(manifest, stage, order, options = {}) {
1129
1163
  ...declaration.scheme ? { scheme: declaration.scheme } : {}
1130
1164
  } : {},
1131
1165
  ...declaration.kind === "file-server" && declaration.open?.length ? { open: declaration.open } : {},
1132
- ...declaration.kind === "objects" && declaration.expire ? { expire: declaration.expire } : {},
1166
+ ...declaration.kind === "file-server" && declaration.processors?.length ? { processors: [...new Set(declaration.processors.map((p) => p.prefix))].sort() } : {},
1167
+ ...declaration.kind === "objects" && (0, _geekmidas_manifest.bucketExpiry)(manifest, id) ? { expire: (0, _geekmidas_manifest.bucketExpiry)(manifest, id) } : {},
1133
1168
  ...(declaration.kind === "rest-api" || declaration.kind === "site") && declaration.subdomain ? { subdomain: declaration.subdomain } : {},
1134
1169
  ...fake ? { fake: {
1135
1170
  key: fake.key,
@@ -1478,7 +1513,7 @@ function urlFor(resource, plan, ports, project, addresses, credential) {
1478
1513
  if (resource.kind === "rest-api" || resource.kind === "site") {
1479
1514
  const address = addresses?.[resource.id];
1480
1515
  const edge = plan.containers.includes("caddy") ? ports[primaryPortKey("caddy")] : void 0;
1481
- return address && edge !== void 0 ? `https://${hostFor(resource, project)}:${edge}` : address;
1516
+ return address && edge !== void 0 ? `https://${hostFor$1(resource, project)}:${edge}` : address;
1482
1517
  }
1483
1518
  if (!resource.container) return void 0;
1484
1519
  const port = ports[primaryPortKey(resource.container)];
@@ -1505,7 +1540,7 @@ function urlFor(resource, plan, ports, project, addresses, credential) {
1505
1540
  case "file-server": {
1506
1541
  const origin = plan.resources.find((r) => r.id === resource.of);
1507
1542
  if (!origin) return void 0;
1508
- return plan.containers.includes("caddy") ? `https://${hostFor(resource, project)}:${port}` : `http://${LOCAL_HOST}:${port}/${origin.name}`;
1543
+ return plan.containers.includes("caddy") ? `https://${hostFor$1(resource, project)}:${port}` : `http://${LOCAL_HOST}:${port}/${origin.name}`;
1509
1544
  }
1510
1545
  case "cache":
1511
1546
  if (resource.of) {
@@ -2865,14 +2900,7 @@ var WorkerNameTaken = class extends require_errors.GkmError {
2865
2900
  * @param background Each worker's files, from discovery's `background`.
2866
2901
  */
2867
2902
  function workerUnits(workspace, manifest, background) {
2868
- const hosts = Object.entries(workspace.apps).filter(([, app]) => app.type === "backend" && !app.entry).map(([name, app]) => {
2869
- const surface = Object.entries(manifest).find(([id, d]) => d.kind === "rest-api" && require_derive.appKey(id) === name)?.[1];
2870
- return {
2871
- name,
2872
- root: (0, node_path.isAbsolute)(app.path) ? app.path : (0, node_path.join)(workspace.root, app.path),
2873
- generated: !(surface?.kind === "rest-api" && surface.endpoints.length > 0)
2874
- };
2875
- }).sort((a, b) => a.name.localeCompare(b.name));
2903
+ const hosts = hostApps(workspace, manifest);
2876
2904
  const units = [];
2877
2905
  for (const [id, declaration] of Object.entries(manifest)) {
2878
2906
  if (declaration.kind !== "worker") continue;
@@ -2880,12 +2908,8 @@ function workerUnits(workspace, manifest, background) {
2880
2908
  if (files.length === 0) continue;
2881
2909
  const name = require_derive.appKey(id);
2882
2910
  if (workspace.apps[name]) throw new WorkerNameTaken(id, name);
2883
- const ranked = hosts.map((host) => ({
2884
- host,
2885
- holds: files.filter((file) => isUnder(file, host.root)).length
2886
- })).sort((a, b) => b.holds - a.holds || Number(b.host.generated) - Number(a.host.generated));
2887
- const host = ranked[0]?.host;
2888
- if (!host || ranked[0].holds === 0 && !host.generated) throw new WorkerHasNoApp(id);
2911
+ const host = hostFor(hosts, files);
2912
+ if (!host) throw new WorkerHasNoApp(id);
2889
2913
  units.push({
2890
2914
  id,
2891
2915
  name,
@@ -2894,6 +2918,70 @@ function workerUnits(workspace, manifest, background) {
2894
2918
  }
2895
2919
  return units.sort((a, b) => a.name.localeCompare(b.name));
2896
2920
  }
2921
+ /** The service and image name of a file server's processors: `assets-processors`. */
2922
+ function processorUnitName(fileServerId) {
2923
+ return `${require_derive.appKey(fileServerId.replace(/Server$/, ""))}-processors`;
2924
+ }
2925
+ /** A file server with processors and no backend app to build them from. */
2926
+ var ProcessorsHaveNoApp = class extends require_errors.GkmError {
2927
+ fileServer;
2928
+ constructor(fileServer) {
2929
+ super(`The file server '${fileServer}' has processors, and the workspace has no backend app that builds a server to carry their entry. Declare a RestApi whose app holds the processors' code.`);
2930
+ this.fileServer = fileServer;
2931
+ this.name = "ProcessorsHaveNoApp";
2932
+ }
2933
+ };
2934
+ /**
2935
+ * The processor units a workspace deploys — each file server with processors
2936
+ * — and the app each is built from, chosen as a worker's is: the backend app
2937
+ * holding the most of its processors' files.
2938
+ */
2939
+ function processorUnits(workspace, manifest) {
2940
+ const hosts = hostApps(workspace, manifest);
2941
+ const units = [];
2942
+ for (const declaration of Object.values(manifest)) {
2943
+ if (declaration.kind !== "file-server") continue;
2944
+ const processors = declaration.processors ?? [];
2945
+ if (processors.length === 0) continue;
2946
+ const host = hostFor(hosts, processors.map(({ handler }) => {
2947
+ const file = handler.split("#")[0] ?? handler;
2948
+ return (0, node_path.isAbsolute)(file) ? file : (0, node_path.join)(workspace.root, file);
2949
+ }));
2950
+ if (!host) throw new ProcessorsHaveNoApp(declaration.id);
2951
+ const name = processorUnitName(declaration.id);
2952
+ if (workspace.apps[name]) throw new WorkerNameTaken(declaration.id, name);
2953
+ units.push({
2954
+ id: declaration.id,
2955
+ name,
2956
+ app: host.name
2957
+ });
2958
+ }
2959
+ return units.sort((a, b) => a.name.localeCompare(b.name));
2960
+ }
2961
+ /** The backend apps whose builds generate a server, each where it lives. */
2962
+ function hostApps(workspace, manifest) {
2963
+ return Object.entries(workspace.apps).filter(([, app]) => app.type === "backend" && !app.entry).map(([name, app]) => {
2964
+ const surface = Object.entries(manifest).find(([id, d]) => d.kind === "rest-api" && require_derive.appKey(id) === name)?.[1];
2965
+ return {
2966
+ name,
2967
+ root: (0, node_path.isAbsolute)(app.path) ? app.path : (0, node_path.join)(workspace.root, app.path),
2968
+ generated: !(surface?.kind === "rest-api" && surface.endpoints.length > 0)
2969
+ };
2970
+ }).sort((a, b) => a.name.localeCompare(b.name));
2971
+ }
2972
+ /**
2973
+ * The app holding the most of these files; then one that generates a server;
2974
+ * then by name. None when no app holds any and none generates a server.
2975
+ */
2976
+ function hostFor(hosts, files) {
2977
+ const ranked = hosts.map((host) => ({
2978
+ host,
2979
+ holds: files.filter((file) => isUnder(file, host.root)).length
2980
+ })).sort((a, b) => b.holds - a.holds || Number(b.host.generated) - Number(a.host.generated));
2981
+ const host = ranked[0]?.host;
2982
+ if (!host || ranked[0].holds === 0 && !host.generated) return void 0;
2983
+ return host;
2984
+ }
2897
2985
  /** Whether `file` is inside `dir`. */
2898
2986
  function isUnder(file, dir) {
2899
2987
  const rel = (0, node_path.relative)(dir, file);
@@ -3543,6 +3631,8 @@ function generateBackendDockerfile(options) {
3543
3631
  }
3544
3632
  /** The port a worker answers its health check on, inside its container. */
3545
3633
  const WORKER_PORT = 3e3;
3634
+ /** The port a processor unit answers on, inside its container. */
3635
+ const PROCESSOR_PORT = 3e3;
3546
3636
  /**
3547
3637
  * A Worker's image: the same build as its host app's backend — a pruned
3548
3638
  * slice, `gkm build --provider server --production` in the image, with the
@@ -3559,6 +3649,19 @@ function generateWorkerDockerfile(options) {
3559
3649
  expose: false
3560
3650
  });
3561
3651
  }
3652
+ /**
3653
+ * A file server's processor unit: its host app's build, and the unit's bundle
3654
+ * as the runner. Its native packages — `sharp` — are installed for the image's
3655
+ * platform beside the bundle, at the versions the build resolved.
3656
+ */
3657
+ function generateProcessorDockerfile(options) {
3658
+ return gkmBundleDockerfile(options, {
3659
+ title: `Processors Dockerfile (${options.fileServer})`,
3660
+ bundle: options.bundle,
3661
+ as: "processors.mjs",
3662
+ expose: true
3663
+ });
3664
+ }
3562
3665
  function gkmBundleDockerfile(options, runner) {
3563
3666
  const { port, healthCheckPath = "/health" } = options;
3564
3667
  const { app } = layout(options);
@@ -3585,7 +3688,7 @@ RUN apk add --no-cache tini
3585
3688
  RUN addgroup --system --gid 1001 nodejs && \\
3586
3689
  adduser --system --uid 1001 hono
3587
3690
 
3588
- # The bundled ${runner.as === "server.mjs" ? "server" : "worker"}
3691
+ # The bundled ${runner.as.replace(/\.mjs$/, "")}
3589
3692
  COPY --from=builder --chown=hono:nodejs ${app}/.gkm/server/dist/${runner.bundle} ./${runner.as === runner.bundle ? "" : runner.as}${externals.copy}
3590
3693
 
3591
3694
  ENV NODE_ENV=production
@@ -4077,7 +4180,7 @@ async function storeFromConfig(workspace, config, options = {}) {
4077
4180
  const profile = options.profile ? { profile: options.profile } : {};
4078
4181
  switch (config.provider) {
4079
4182
  case "s3": {
4080
- const { S3SecretsStore } = await Promise.resolve().then(() => require("./s3-DwKLXwUT.cjs"));
4183
+ const { S3SecretsStore } = await Promise.resolve().then(() => require("./s3-pqgmCTOq.cjs"));
4081
4184
  const { deployIdentity } = await Promise.resolve().then(() => require("./identity-CbLfgQNT.cjs")).then((n) => n.identity_exports);
4082
4185
  const location = require_workspace.s3SecretsLocation(config, workspace.state);
4083
4186
  return new S3SecretsStore({
@@ -5681,7 +5784,7 @@ async function reconcile(options) {
5681
5784
  ...options.apps ? { apps: options.apps(plan.containers) } : {},
5682
5785
  ...options.objectWebhooks?.length ? { objectWebhooks: options.objectWebhooks } : {}
5683
5786
  });
5684
- const caddyfile = toCaddyfile(sitesFor(plan, project, options.addresses));
5787
+ const caddyfile = toCaddyfile(sitesFor(plan, project, options.addresses, options.processorAddresses));
5685
5788
  const hash = planHash(plan, compose, {
5686
5789
  caddyfile,
5687
5790
  postgres: postgresStatements(plan, project, seed).map((statement) => statement.create).join(";\n")
@@ -5860,6 +5963,7 @@ var workspace_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
5860
5963
  fakesApply: () => fakesApply,
5861
5964
  localObjectWebhooks: () => localObjectWebhooks,
5862
5965
  metroPorts: () => metroPorts,
5966
+ processorAddresses: () => processorAddresses,
5863
5967
  reconcileWorkspace: () => reconcileWorkspace,
5864
5968
  surfaceAddresses: () => surfaceAddresses
5865
5969
  });
@@ -5951,6 +6055,7 @@ async function reconcileWorkspace(workspace, options) {
5951
6055
  ...backendsOf(workspace),
5952
6056
  saved: await loadPortState(workspace.root),
5953
6057
  addresses: surfaceAddresses(workspace, manifest),
6058
+ processorAddresses: processorAddresses(workspace, manifest),
5954
6059
  metroPorts: metroPorts(workspace, manifest),
5955
6060
  fakes,
5956
6061
  credentialFakes,
@@ -6017,6 +6122,19 @@ function metroPorts(workspace, manifest) {
6017
6122
  return ports;
6018
6123
  }
6019
6124
  /**
6125
+ * Where each file server's processors answer locally: the dev server of the
6126
+ * app holding them, which `gkm dev` mounts them on — the same app whose build
6127
+ * writes their unit deployed.
6128
+ */
6129
+ function processorAddresses(workspace, manifest) {
6130
+ const addresses = {};
6131
+ for (const unit of processorUnits(workspace, manifest)) {
6132
+ const port = workspace.apps[unit.app]?.port;
6133
+ if (port) addresses[unit.id] = localAddress(port);
6134
+ }
6135
+ return addresses;
6136
+ }
6137
+ /**
6020
6138
  * Where each declared surface and site answers locally.
6021
6139
  *
6022
6140
  * The addresses come from the ports the workspace already assigns; which
@@ -6195,6 +6313,21 @@ function workerEnvKeys(manifest, workerId, runnables = {}) {
6195
6313
  return keys;
6196
6314
  }
6197
6315
  /** What each construct an edge reaches hands the process that reaches it. */
6316
+ /**
6317
+ * The keys a file server's processor unit reads: its bucket's, and what each
6318
+ * of its processors depends on. `undefined` for a file server with none.
6319
+ */
6320
+ function processorEnvKeys(manifest, fileServerId, runnables = {}) {
6321
+ const server = manifest[fileServerId];
6322
+ if (server?.kind !== "file-server" || !server.processors?.length) return;
6323
+ const keys = /* @__PURE__ */ new Set();
6324
+ addEdgeKeys(manifest, [
6325
+ server.of,
6326
+ ...server.processors.flatMap((p) => p.dependencies.map((d) => d.target)),
6327
+ ...runnables[fileServerId] ?? []
6328
+ ], keys);
6329
+ return keys;
6330
+ }
6198
6331
  function addEdgeKeys(manifest, edges, keys) {
6199
6332
  for (const id of edges) {
6200
6333
  const bucket = require_discover.eventsEdgeBucket(id);
@@ -6662,6 +6795,308 @@ function validateImageRef(ref) {
6662
6795
  return ref;
6663
6796
  }
6664
6797
  //#endregion
6798
+ //#region src/providers/processorOrigin.ts
6799
+ /**
6800
+ * A file server's processors as a CDN origin: the names both sides agree on.
6801
+ *
6802
+ * On a compose stage whose bucket is on S3, the CDN serves the bucket and
6803
+ * sends each processor pattern to the stack's processor unit, at a host of
6804
+ * its own. That host is public — a CDN reaches its origin over the internet —
6805
+ * so the CDN adds a secret header and the edge refuses any request without
6806
+ * it. One definition, read by the CDN that sends the header and by the stack
6807
+ * whose edge checks it, so the two cannot drift.
6808
+ */
6809
+ /** The header the CDN adds to every request it sends a processor. */
6810
+ const ORIGIN_VERIFY_HEADER = "X-Gkm-Origin-Verify";
6811
+ /** Where a file server's processors answer the CDN: `<fileserver>-processors.<domain>`. */
6812
+ function processorOriginHost(serverId, domain) {
6813
+ return `${require_derive.appKey(serverId)}-processors.${domain}`.toLowerCase();
6814
+ }
6815
+ /** The stage secret holding the header's value: `ASSETS_SERVER_ORIGIN_SECRET`. */
6816
+ function originSecretKey(serverId) {
6817
+ return (0, _geekmidas_manifest.provideKey)(serverId, "originSecret");
6818
+ }
6819
+ /**
6820
+ * What the processor unit reads that secret from. Set wherever the CDN fronts
6821
+ * it, so the unit refuses a request without the header itself — on Dokploy,
6822
+ * whose edge cannot match a header, the only check; behind the stack's own
6823
+ * edge, a second one.
6824
+ */
6825
+ const PROCESSOR_ORIGIN_SECRET_ENV = "GKM_PROCESSOR_ORIGIN_SECRET";
6826
+ /** A new value for that secret: random, generated once, kept in the stage. */
6827
+ function newOriginSecret() {
6828
+ return (0, node_crypto.randomBytes)(32).toString("base64url");
6829
+ }
6830
+ //#endregion
6831
+ //#region src/generators/ProcessorGenerator.ts
6832
+ /** Where a file server's processor entry lives, under an app's `.gkm/server`. */
6833
+ function processorEntryDir(serverDir, fileServerId) {
6834
+ return (0, node_path.join)(serverDir, "processors", processorUnitName(fileServerId));
6835
+ }
6836
+ /** The file its bundle is written to, beside the server's. */
6837
+ function processorBundleName(fileServerId) {
6838
+ return `${processorUnitName(fileServerId)}.mjs`;
6839
+ }
6840
+ /**
6841
+ * A file server's processors, as the build generates them.
6842
+ *
6843
+ * On AWS each is a Lambda behind a function URL — the CDN's origin for its
6844
+ * pattern. On a server they are one process per file server, the processor
6845
+ * unit (see {@link ProcessorGenerator.buildEntry}), so the `server` target
6846
+ * generates nothing per processor here.
6847
+ */
6848
+ var ProcessorGenerator = class extends require_discover.ConstructGenerator {
6849
+ isConstruct(value) {
6850
+ return _geekmidas_constructs_processors.Processor.isProcessor(value);
6851
+ }
6852
+ async build(context, constructs, outputDir, options) {
6853
+ if ((options?.target ?? "aws") !== "aws" || constructs.length === 0) return [];
6854
+ const dir = (0, node_path.join)(outputDir, "processors");
6855
+ await (0, node_fs_promises.mkdir)(dir, { recursive: true });
6856
+ const infos = [];
6857
+ for (const { key, construct, path } of constructs) {
6858
+ const file = (0, node_path.join)(dir, `${key}.ts`);
6859
+ const importPath = (0, node_path.relative)((0, node_path.dirname)(file), path.relative).replace(/\.ts$/, ".js");
6860
+ await (0, node_fs_promises.writeFile)(file, `import { AWSLambdaProcessor } from '@geekmidas/constructs/processors';
6861
+ import { ${key} } from '${importPath}';
6862
+ ${context.storageDrivers?.imports ?? ""}
6863
+ ${context.storageDrivers?.setup ? `\n// The handler registers the drivers its target needs.\n${context.storageDrivers.setup}\n` : ""}
6864
+ const adapter = new AWSLambdaProcessor(${key});
6865
+
6866
+ export const handler = adapter.handler;
6867
+ `);
6868
+ infos.push(await processorInfo(key, construct, (0, node_path.relative)(options?.root ?? process.cwd(), file).replace(/\.ts$/, ".handler"), context));
6869
+ }
6870
+ return infos;
6871
+ }
6872
+ /**
6873
+ * `gkm dev`'s half: `processors.ts` beside the dev server's app, mounting
6874
+ * each file server's processors under `/__gkm/processors/<FileServer>`.
6875
+ * The local edge sends each pattern on the file server's host there, so
6876
+ * `processedUrl()` answers locally as it does deployed.
6877
+ *
6878
+ * In the dev server's own process rather than a unit of its own: locally
6879
+ * there is no CPU to protect, and the dev server already reloads on change.
6880
+ */
6881
+ async buildDev(outputDir, processors) {
6882
+ await (0, node_fs_promises.mkdir)(outputDir, { recursive: true });
6883
+ const file = (0, node_path.join)(outputDir, "processors.ts");
6884
+ const imports = processors.map(({ key, path }) => {
6885
+ const specifier = (0, node_path.relative)(outputDir, path.absolute).replace(/\.ts$/, ".js");
6886
+ return `import { ${key} } from '${specifier.startsWith(".") ? specifier : `./${specifier}`}';`;
6887
+ }).join("\n");
6888
+ const byServer = /* @__PURE__ */ new Map();
6889
+ for (const { key, construct } of processors) byServer.set(construct.surfaceId, [...byServer.get(construct.surfaceId) ?? [], key]);
6890
+ const units = [...byServer.entries()].map(([id, keys]) => ` ${JSON.stringify(id)}: [${keys.join(", ")}],`).join("\n");
6891
+ await (0, node_fs_promises.writeFile)(file, `/**
6892
+ * Generated processors setup for \`gkm dev\`.
6893
+ *
6894
+ * Each file server's processors, under ${PROCESSORS_DEV_PREFIX}<FileServer>: the
6895
+ * local edge rewrites each processor pattern on the file server's host here.
6896
+ */
6897
+ import type { EnvironmentParser } from '@geekmidas/envkit';
6898
+ import { processorServer } from '@geekmidas/constructs/processors';
6899
+ ${imports}
6900
+
6901
+ export function setupProcessors(
6902
+ app: { all: (path: string, handler: (c: any) => unknown) => unknown },
6903
+ envParser: EnvironmentParser<any>,
6904
+ ): void {
6905
+ const units: Record<string, ReturnType<typeof processorServer>> = Object.fromEntries(
6906
+ Object.entries({
6907
+ ${units}
6908
+ }).map(([id, processors]) => [id, processorServer(processors, envParser)]),
6909
+ );
6910
+
6911
+ app.all('${PROCESSORS_DEV_PREFIX}:server/*', async (c: any) => {
6912
+ const server = c.req.param('server') as string;
6913
+ const serve = units[server];
6914
+ if (!serve) return c.notFound();
6915
+ const path = c.req.path.slice(\`${PROCESSORS_DEV_PREFIX}\${server}\`.length) || '/';
6916
+ const response = await serve({ method: c.req.method, path });
6917
+ if (!response) {
6918
+ return new Response(null, {
6919
+ status: 404,
6920
+ headers: { 'cache-control': 'public, max-age=60' },
6921
+ });
6922
+ }
6923
+ return new Response(c.req.method === 'HEAD' ? null : response.body, {
6924
+ status: response.status,
6925
+ headers: response.headers,
6926
+ });
6927
+ });
6928
+ }
6929
+ `);
6930
+ return file;
6931
+ }
6932
+ /**
6933
+ * A file server's processor unit: one process answering each of its
6934
+ * processors' patterns, and `/health`. Returns its entry, `processors.ts`.
6935
+ *
6936
+ * Its own process because making a derivative is CPU-bound — a resize
6937
+ * spike in the API's process would be every request's latency.
6938
+ */
6939
+ async buildEntry(input) {
6940
+ const { context, outputDir, processors } = input;
6941
+ await (0, node_fs_promises.mkdir)(outputDir, { recursive: true });
6942
+ await require_EndpointGenerator.writeTelemetryModule(outputDir, input.telemetry);
6943
+ const healthCheck = context.production?.healthCheck ?? "/health";
6944
+ const imports = processors.map(({ key, path }) => {
6945
+ const specifier = (0, node_path.relative)(outputDir, path.absolute).replace(/\.ts$/, ".js");
6946
+ return `import { ${key} } from '${specifier.startsWith(".") ? specifier : `./${specifier}`}';`;
6947
+ }).join("\n");
6948
+ const entry = (0, node_path.join)(outputDir, "processors.ts");
6949
+ await (0, node_fs_promises.writeFile)(entry, `#!/usr/bin/env node
6950
+ /**
6951
+ * Production entry for ${input.fileServerId}'s processors.
6952
+ * Generated by 'gkm build --production'.
6953
+ *
6954
+ * Answers each processor's pattern, and ${healthCheck} on PORT. The edge
6955
+ * routes only those patterns here; everything else on the file server's
6956
+ * domain is the bucket.
6957
+ */
6958
+ import { timingSafeEqual } from 'node:crypto';
6959
+ import { createServer } from 'node:http';
6960
+ import { runShutdownHooks } from '@geekmidas/constructs';
6961
+ import { processorServer } from '@geekmidas/constructs/processors';
6962
+ ${context.storageDrivers?.imports ?? ""}
6963
+ ${imports}
6964
+
6965
+ ${require_EndpointGenerator.startTelemetryCode([healthCheck])}
6966
+ ${context.storageDrivers?.setup ? `// The entry point registers the drivers its target needs.\n${context.storageDrivers.setup}\n` : ""}
6967
+ process.env.GKM_APP_NAME ??= ${JSON.stringify(processorUnitName(input.fileServerId))};
6968
+
6969
+ const processors = [${processors.map(({ key }) => key).join(", ")}];
6970
+ const serve = processorServer(processors);
6971
+ const port = Number(process.env.PORT) || 3000;
6972
+ let stopping = false;
6973
+
6974
+ ${input.telemetry ? REQUEST_SPANS : NO_REQUEST_SPANS}
6975
+ // Where the CDN fronts this unit, the secret it adds to every request: one
6976
+ // without it is refused here, whatever the edge in front did or could not.
6977
+ const originSecret = process.env.${PROCESSOR_ORIGIN_SECRET_ENV}
6978
+ ? Buffer.from(process.env.${PROCESSOR_ORIGIN_SECRET_ENV})
6979
+ : undefined;
6980
+ const fromOrigin = (header: string | string[] | undefined) => {
6981
+ if (!originSecret) return true;
6982
+ const given = Buffer.from(typeof header === 'string' ? header : '');
6983
+ return given.length === originSecret.length && timingSafeEqual(given, originSecret);
6984
+ };
6985
+
6986
+ const server = createServer(async (req, res) => {
6987
+ const method = req.method ?? 'GET';
6988
+ const path = (req.url ?? '/').split('?')[0] ?? '/';
6989
+ if (path === ${JSON.stringify(healthCheck)}) {
6990
+ res.writeHead(stopping ? 503 : 200, { 'content-type': 'application/json' });
6991
+ res.end(JSON.stringify({ status: stopping ? 'stopping' : 'ok' }));
6992
+ return;
6993
+ }
6994
+ if (!fromOrigin(req.headers[${JSON.stringify(ORIGIN_VERIFY_HEADER.toLowerCase())}])) {
6995
+ res.writeHead(403, { 'cache-control': 'no-store' }).end();
6996
+ return;
6997
+ }
6998
+ await traced(method, path, async () => {
6999
+ try {
7000
+ const response = await serve({ method, path });
7001
+ if (!response) {
7002
+ res.writeHead(404, { 'cache-control': 'public, max-age=60' }).end();
7003
+ return 404;
7004
+ }
7005
+ res.writeHead(response.status, response.headers);
7006
+ res.end(method === 'HEAD' ? undefined : response.body);
7007
+ return response.status;
7008
+ } catch (error) {
7009
+ console.error(error);
7010
+ res.writeHead(500, { 'cache-control': 'no-store' }).end();
7011
+ return 500;
7012
+ }
7013
+ });
7014
+ });
7015
+ server.listen(port);
7016
+
7017
+ const shutdown = async () => {
7018
+ if (stopping) return;
7019
+ stopping = true;
7020
+ setTimeout(() => process.exit(1), Number(process.env.GKM_SHUTDOWN_TIMEOUT_MS) || 8000).unref();
7021
+ server.close();
7022
+ await runShutdownHooks((error) => console.error(error));
7023
+ process.exit(0);
7024
+ };
7025
+ process.on('SIGTERM', shutdown);
7026
+ process.on('SIGINT', shutdown);
7027
+ `);
7028
+ return entry;
7029
+ }
7030
+ };
7031
+ /**
7032
+ * A SERVER span per request, once telemetry has started — opened by the unit
7033
+ * rather than by hooking node:http, which sees nothing inside a bundle. Named
7034
+ * after the processor's pattern, never the key, which has no bound.
7035
+ *
7036
+ * Only in an entry whose file server has a `Telemetry` node: the bundle
7037
+ * follows the import, and an app without one need not install the API.
7038
+ */
7039
+ const REQUEST_SPANS = `const tracing = requestSpans ? await import('@opentelemetry/api') : undefined;
7040
+ const routeOf = (path: string) =>
7041
+ processors.find((processor) => path.startsWith(processor.prefix))?.pattern;
7042
+
7043
+ async function traced(
7044
+ method: string,
7045
+ path: string,
7046
+ run: () => Promise<number>,
7047
+ ): Promise<void> {
7048
+ if (!tracing) {
7049
+ await run();
7050
+ return;
7051
+ }
7052
+ const route = routeOf(path);
7053
+ await tracing.trace.getTracer('@geekmidas/processors').startActiveSpan(
7054
+ route ? \`\${method} \${route}\` : method,
7055
+ {
7056
+ kind: tracing.SpanKind.SERVER,
7057
+ attributes: {
7058
+ 'http.request.method': method,
7059
+ 'url.path': path,
7060
+ ...(route ? { 'http.route': route } : {}),
7061
+ },
7062
+ },
7063
+ async (span) => {
7064
+ try {
7065
+ const status = await run();
7066
+ span.setAttribute('http.response.status_code', status);
7067
+ if (status >= 500) span.setStatus({ code: tracing.SpanStatusCode.ERROR });
7068
+ } finally {
7069
+ span.end();
7070
+ }
7071
+ },
7072
+ );
7073
+ }
7074
+ `;
7075
+ /** The same shape without telemetry: each request just runs. */
7076
+ const NO_REQUEST_SPANS = `async function traced(
7077
+ _method: string,
7078
+ _path: string,
7079
+ run: () => Promise<number>,
7080
+ ): Promise<void> {
7081
+ await run();
7082
+ }
7083
+ `;
7084
+ /** What the manifest records of one processor. */
7085
+ async function processorInfo(name, processor, handler, context) {
7086
+ return {
7087
+ name,
7088
+ handler,
7089
+ fileServer: processor.surfaceId,
7090
+ path: processor.pattern,
7091
+ prefix: processor.prefix,
7092
+ ...processor.native.length ? { native: [...processor.native] } : {},
7093
+ ...processor.timeout !== void 0 ? { timeout: processor.timeout } : {},
7094
+ ...processor.memorySize !== void 0 ? { memorySize: processor.memorySize } : {},
7095
+ environment: await processor.getEnvironment({ markOptional: context.markOptional }),
7096
+ dependencies: processor.constructs
7097
+ };
7098
+ }
7099
+ //#endregion
6665
7100
  //#region src/generators/CronGenerator.ts
6666
7101
  var CronGenerator = class extends require_discover.ConstructGenerator {
6667
7102
  async build(context, constructs, outputDir, options) {
@@ -7572,6 +8007,25 @@ async function workspaceDockerCommand(workspace, manifest, imageNames = {}, back
7572
8007
  imageName: imageNames[worker.name] ?? worker.name
7573
8008
  });
7574
8009
  }
8010
+ for (const unit of manifest ? processorUnits(workspace, manifest) : []) {
8011
+ logger$1.log(`\n 📄 Generating Dockerfile for ${unit.name} (processors of ${unit.id}, built from ${unit.app})`);
8012
+ const dockerfile = processorDockerfile(unit, workspace.apps[unit.app], {
8013
+ layout,
8014
+ workspaceRoot: workspace.root,
8015
+ native: processorNative(manifest, unit.id)
8016
+ });
8017
+ const path = workerDockerfileOf(unit.name);
8018
+ const dockerfilePath = (0, node_path.join)(workspace.root, path);
8019
+ await (0, node_fs_promises.mkdir)((0, node_path.dirname)(dockerfilePath), { recursive: true });
8020
+ await (0, node_fs_promises.writeFile)(dockerfilePath, dockerfile);
8021
+ logger$1.log(` Generated: ${path}`);
8022
+ results.push({
8023
+ appName: unit.name,
8024
+ type: "backend",
8025
+ dockerfile: dockerfilePath,
8026
+ imageName: imageNames[unit.name] ?? unit.name
8027
+ });
8028
+ }
7575
8029
  const dockerignorePath = await ensureDockerignore(layout.buildRoot);
7576
8030
  logger$1.log(`\n Ensured: ${dockerignorePath}`);
7577
8031
  const composePath = await writeConstructsCompose(workspace);
@@ -7631,6 +8085,29 @@ function workerDockerfile(worker, host, options) {
7631
8085
  ...options.cache ? { cache: options.cache } : {}
7632
8086
  });
7633
8087
  }
8088
+ /** The native packages a file server's processors named, once each. */
8089
+ function processorNative(manifest, fileServerId) {
8090
+ const server = manifest[fileServerId];
8091
+ if (server?.kind !== "file-server") return [];
8092
+ return [...new Set((server.processors ?? []).flatMap((p) => p.native ?? []))].sort();
8093
+ }
8094
+ /**
8095
+ * A file server's processor unit's Dockerfile: its host app's build, and the
8096
+ * unit's bundle as the runner, with its processors' native packages
8097
+ * installed beside it — see `generateProcessorDockerfile`.
8098
+ */
8099
+ function processorDockerfile(unit, host, options) {
8100
+ return generateProcessorDockerfile({
8101
+ ...appImageOptions(options.layout, unit.app, host, options.workspaceRoot),
8102
+ imageName: unit.name,
8103
+ port: PROCESSOR_PORT,
8104
+ fileServer: unit.id,
8105
+ bundle: processorBundleName(unit.id),
8106
+ healthCheckPath: "/health",
8107
+ ...options.native.length ? { external: [...options.native] } : {},
8108
+ ...options.cache ? { cache: options.cache } : {}
8109
+ });
8110
+ }
7634
8111
  /**
7635
8112
  * A site's Dockerfile, with an `ARG` for every key its bundler inlines.
7636
8113
  *
@@ -7808,7 +8285,7 @@ async function createDnsProvider(options) {
7808
8285
  });
7809
8286
  }
7810
8287
  if (provider === "godaddy") {
7811
- const { GoDaddyProvider } = await Promise.resolve().then(() => require("./GoDaddyProvider-0z5RAN1k.cjs"));
8288
+ const { GoDaddyProvider } = await Promise.resolve().then(() => require("./GoDaddyProvider-BTdtqhI_.cjs"));
7812
8289
  return new GoDaddyProvider(options.godaddy ?? {});
7813
8290
  }
7814
8291
  if (provider === "cloudflare") throw new DnsProviderNotImplemented("cloudflare");
@@ -8795,12 +9272,36 @@ Object.defineProperty(exports, "NoDomainForStage", {
8795
9272
  return NoDomainForStage;
8796
9273
  }
8797
9274
  });
9275
+ Object.defineProperty(exports, "ORIGIN_VERIFY_HEADER", {
9276
+ enumerable: true,
9277
+ get: function() {
9278
+ return ORIGIN_VERIFY_HEADER;
9279
+ }
9280
+ });
9281
+ Object.defineProperty(exports, "PROCESSOR_ORIGIN_SECRET_ENV", {
9282
+ enumerable: true,
9283
+ get: function() {
9284
+ return PROCESSOR_ORIGIN_SECRET_ENV;
9285
+ }
9286
+ });
9287
+ Object.defineProperty(exports, "PROCESSOR_PORT", {
9288
+ enumerable: true,
9289
+ get: function() {
9290
+ return PROCESSOR_PORT;
9291
+ }
9292
+ });
8798
9293
  Object.defineProperty(exports, "PROVIDER_KINDS", {
8799
9294
  enumerable: true,
8800
9295
  get: function() {
8801
9296
  return PROVIDER_KINDS;
8802
9297
  }
8803
9298
  });
9299
+ Object.defineProperty(exports, "ProcessorGenerator", {
9300
+ enumerable: true,
9301
+ get: function() {
9302
+ return ProcessorGenerator;
9303
+ }
9304
+ });
8804
9305
  Object.defineProperty(exports, "QueueGenerator", {
8805
9306
  enumerable: true,
8806
9307
  get: function() {
@@ -9152,7 +9653,7 @@ Object.defineProperty(exports, "getKeyPath", {
9152
9653
  Object.defineProperty(exports, "hostFor", {
9153
9654
  enumerable: true,
9154
9655
  get: function() {
9155
- return hostFor;
9656
+ return hostFor$1;
9156
9657
  }
9157
9658
  });
9158
9659
  Object.defineProperty(exports, "imageBuildCredentials", {
@@ -9287,6 +9788,12 @@ Object.defineProperty(exports, "networkEnv", {
9287
9788
  return networkEnv;
9288
9789
  }
9289
9790
  });
9791
+ Object.defineProperty(exports, "newOriginSecret", {
9792
+ enumerable: true,
9793
+ get: function() {
9794
+ return newOriginSecret;
9795
+ }
9796
+ });
9290
9797
  Object.defineProperty(exports, "normalizeDnsConfig", {
9291
9798
  enumerable: true,
9292
9799
  get: function() {
@@ -9299,6 +9806,12 @@ Object.defineProperty(exports, "orchestrateDns", {
9299
9806
  return orchestrateDns;
9300
9807
  }
9301
9808
  });
9809
+ Object.defineProperty(exports, "originSecretKey", {
9810
+ enumerable: true,
9811
+ get: function() {
9812
+ return originSecretKey;
9813
+ }
9814
+ });
9302
9815
  Object.defineProperty(exports, "pgClient", {
9303
9816
  enumerable: true,
9304
9817
  get: function() {
@@ -9365,6 +9878,54 @@ Object.defineProperty(exports, "primaryPortKey", {
9365
9878
  return primaryPortKey;
9366
9879
  }
9367
9880
  });
9881
+ Object.defineProperty(exports, "processorBundleName", {
9882
+ enumerable: true,
9883
+ get: function() {
9884
+ return processorBundleName;
9885
+ }
9886
+ });
9887
+ Object.defineProperty(exports, "processorDockerfile", {
9888
+ enumerable: true,
9889
+ get: function() {
9890
+ return processorDockerfile;
9891
+ }
9892
+ });
9893
+ Object.defineProperty(exports, "processorEntryDir", {
9894
+ enumerable: true,
9895
+ get: function() {
9896
+ return processorEntryDir;
9897
+ }
9898
+ });
9899
+ Object.defineProperty(exports, "processorEnvKeys", {
9900
+ enumerable: true,
9901
+ get: function() {
9902
+ return processorEnvKeys;
9903
+ }
9904
+ });
9905
+ Object.defineProperty(exports, "processorInfo", {
9906
+ enumerable: true,
9907
+ get: function() {
9908
+ return processorInfo;
9909
+ }
9910
+ });
9911
+ Object.defineProperty(exports, "processorNative", {
9912
+ enumerable: true,
9913
+ get: function() {
9914
+ return processorNative;
9915
+ }
9916
+ });
9917
+ Object.defineProperty(exports, "processorOriginHost", {
9918
+ enumerable: true,
9919
+ get: function() {
9920
+ return processorOriginHost;
9921
+ }
9922
+ });
9923
+ Object.defineProperty(exports, "processorUnits", {
9924
+ enumerable: true,
9925
+ get: function() {
9926
+ return processorUnits;
9927
+ }
9928
+ });
9368
9929
  Object.defineProperty(exports, "projectKey", {
9369
9930
  enumerable: true,
9370
9931
  get: function() {
@@ -9678,4 +10239,4 @@ Object.defineProperty(exports, "workspace_exports", {
9678
10239
  }
9679
10240
  });
9680
10241
 
9681
- //# sourceMappingURL=seeds-DOfxmDRO.cjs.map
10242
+ //# sourceMappingURL=seeds-CPEcmoPn.cjs.map