@geekmidas/cli 9.0.2 → 10.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/README.md +71 -120
  2. package/dist/{CachedStateProvider-BdX7klRc.cjs → CachedStateProvider-BLo7zv7S.cjs} +1 -1
  3. package/dist/CachedStateProvider-BxoAm-B2.mjs +3 -0
  4. package/dist/{CachedStateProvider-klLWZXWF.cjs → CachedStateProvider-CqPdW7CB.cjs} +1 -1
  5. package/dist/{CachedStateProvider-klLWZXWF.cjs.map → CachedStateProvider-CqPdW7CB.cjs.map} +1 -1
  6. package/dist/{CachedStateProvider-CzyFct42.mjs → CachedStateProvider-DTniehMP.mjs} +1 -1
  7. package/dist/{CachedStateProvider-CzyFct42.mjs.map → CachedStateProvider-DTniehMP.mjs.map} +1 -1
  8. package/dist/{HostingerProvider-B2ZYz7Yc.mjs → HostingerProvider-Cft7lEYr.mjs} +4 -3
  9. package/dist/HostingerProvider-Cft7lEYr.mjs.map +1 -0
  10. package/dist/{HostingerProvider-CrHfsgz9.cjs → HostingerProvider-h3EbEp-Z.cjs} +4 -3
  11. package/dist/HostingerProvider-h3EbEp-Z.cjs.map +1 -0
  12. package/dist/{LocalStateProvider-CP49rjzt.mjs → LocalStateProvider-Bn6tS-oL.mjs} +1 -1
  13. package/dist/{LocalStateProvider-CP49rjzt.mjs.map → LocalStateProvider-Bn6tS-oL.mjs.map} +1 -1
  14. package/dist/{LocalStateProvider-CalzNfNA.cjs → LocalStateProvider-Db9SEjyH.cjs} +1 -1
  15. package/dist/{LocalStateProvider-CalzNfNA.cjs.map → LocalStateProvider-Db9SEjyH.cjs.map} +1 -1
  16. package/dist/{Route53Provider-tlgBzrRQ.mjs → Route53Provider-RdpUDJQk.mjs} +1 -1
  17. package/dist/{Route53Provider-tlgBzrRQ.mjs.map → Route53Provider-RdpUDJQk.mjs.map} +1 -1
  18. package/dist/{Route53Provider-DwgXiLxt.cjs → Route53Provider-di2fMM5N.cjs} +1 -1
  19. package/dist/{Route53Provider-DwgXiLxt.cjs.map → Route53Provider-di2fMM5N.cjs.map} +1 -1
  20. package/dist/{SSMStateProvider-BlrTiV5m.mjs → SSMStateProvider-BRt2py-A.mjs} +1 -1
  21. package/dist/{SSMStateProvider-BlrTiV5m.mjs.map → SSMStateProvider-BRt2py-A.mjs.map} +1 -1
  22. package/dist/{SSMStateProvider-Bt6r8CTL.cjs → SSMStateProvider-DyX8s9HI.cjs} +1 -1
  23. package/dist/{SSMStateProvider-Bt6r8CTL.cjs.map → SSMStateProvider-DyX8s9HI.cjs.map} +1 -1
  24. package/dist/{backup-provisioner-Xunq-p_8.mjs → backup-provisioner-Bgj5Vi_L.mjs} +2 -2
  25. package/dist/{backup-provisioner-Xunq-p_8.mjs.map → backup-provisioner-Bgj5Vi_L.mjs.map} +1 -1
  26. package/dist/{backup-provisioner-B3HBN-2k.cjs → backup-provisioner-BrsHwYG0.cjs} +2 -2
  27. package/dist/{backup-provisioner-B3HBN-2k.cjs.map → backup-provisioner-BrsHwYG0.cjs.map} +1 -1
  28. package/dist/{bundler-Dufq3uvI.cjs → bundler-BY1OmV1e.cjs} +44 -14
  29. package/dist/bundler-BY1OmV1e.cjs.map +1 -0
  30. package/dist/{bundler-DkA4qzUD.mjs → bundler-Be8Zg4Wd.mjs} +45 -15
  31. package/dist/bundler-Be8Zg4Wd.mjs.map +1 -0
  32. package/dist/config-D8o6I_7Z.mjs +469 -0
  33. package/dist/config-D8o6I_7Z.mjs.map +1 -0
  34. package/dist/config-DbPE1KXF.cjs +535 -0
  35. package/dist/config-DbPE1KXF.cjs.map +1 -0
  36. package/dist/config.cjs +3 -2
  37. package/dist/config.d.cts +2 -2
  38. package/dist/config.d.cts.map +1 -1
  39. package/dist/config.d.mts +2 -2
  40. package/dist/config.d.mts.map +1 -1
  41. package/dist/config.mjs +3 -2
  42. package/dist/{credentials-s1kLcIzK.mjs → credentials-B5zRHdAl.mjs} +21 -6
  43. package/dist/credentials-B5zRHdAl.mjs.map +1 -0
  44. package/dist/{credentials-C8DWtnMY.cjs → credentials-BapzjyV5.cjs} +26 -5
  45. package/dist/credentials-BapzjyV5.cjs.map +1 -0
  46. package/dist/credentials-Dh0Q6HzY.mjs +2548 -0
  47. package/dist/credentials-Dh0Q6HzY.mjs.map +1 -0
  48. package/dist/credentials-K961ThG3.cjs +2680 -0
  49. package/dist/credentials-K961ThG3.cjs.map +1 -0
  50. package/dist/deploy/sniffer-routes-worker.cjs +6 -2
  51. package/dist/deploy/sniffer-routes-worker.cjs.map +1 -1
  52. package/dist/deploy/sniffer-routes-worker.mjs +6 -2
  53. package/dist/deploy/sniffer-routes-worker.mjs.map +1 -1
  54. package/dist/discover-CAlFgYec.mjs +229 -0
  55. package/dist/discover-CAlFgYec.mjs.map +1 -0
  56. package/dist/discover-DTmFeloL.cjs +271 -0
  57. package/dist/discover-DTmFeloL.cjs.map +1 -0
  58. package/dist/dokploy-api-BS2xnJLZ.mjs +3 -0
  59. package/dist/{dokploy-api-CqOIKHme.cjs → dokploy-api-BsVH0y_s.cjs} +141 -32
  60. package/dist/dokploy-api-BsVH0y_s.cjs.map +1 -0
  61. package/dist/dokploy-api-BuxDRo3l.cjs +3 -0
  62. package/dist/{dokploy-api-sfZFlWuE.mjs → dokploy-api-aTFPz7_4.mjs} +141 -32
  63. package/dist/dokploy-api-aTFPz7_4.mjs.map +1 -0
  64. package/dist/emit-CbcRolsa.cjs +236 -0
  65. package/dist/emit-CbcRolsa.cjs.map +1 -0
  66. package/dist/emit-CiZS_5Ub.mjs +206 -0
  67. package/dist/emit-CiZS_5Ub.mjs.map +1 -0
  68. package/dist/{encryption-MfXAiFTm.cjs → encryption-C6jaU0hE.cjs} +1 -1
  69. package/dist/{encryption-MfXAiFTm.cjs.map → encryption-C6jaU0hE.cjs.map} +1 -1
  70. package/dist/{encryption-BVS7Vmzs.cjs → encryption-CHzzeR8a.cjs} +1 -1
  71. package/dist/encryption-CQUncu7v.mjs +3 -0
  72. package/dist/{encryption-CO5Q4Bhf.mjs → encryption-D-abyhZx.mjs} +1 -1
  73. package/dist/{encryption-CO5Q4Bhf.mjs.map → encryption-D-abyhZx.mjs.map} +1 -1
  74. package/dist/fullstack-secrets-C-GGohke.cjs +111 -0
  75. package/dist/fullstack-secrets-C-GGohke.cjs.map +1 -0
  76. package/dist/fullstack-secrets-D1o9-G5l.mjs +87 -0
  77. package/dist/fullstack-secrets-D1o9-G5l.mjs.map +1 -0
  78. package/dist/{fullstack-secrets-BYzi6Hwl.cjs → generator-CNzBw7g5.cjs} +1 -114
  79. package/dist/generator-CNzBw7g5.cjs.map +1 -0
  80. package/dist/{fullstack-secrets-l8s3II_H.mjs → generator-VE2JrFlY.mjs} +2 -85
  81. package/dist/generator-VE2JrFlY.mjs.map +1 -0
  82. package/dist/index-BThUzEIp.d.mts +175 -0
  83. package/dist/index-BThUzEIp.d.mts.map +1 -0
  84. package/dist/index-CHB4tSzX.d.cts +175 -0
  85. package/dist/index-CHB4tSzX.d.cts.map +1 -0
  86. package/dist/index.cjs +2329 -1584
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.mjs +2306 -1561
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/{openapi-Cfwi0fqF.mjs → openapi-CgpMWMmM.mjs} +174 -95
  91. package/dist/openapi-CgpMWMmM.mjs.map +1 -0
  92. package/dist/{openapi-BzNOC7_i.cjs → openapi-CljONd_M.cjs} +175 -108
  93. package/dist/openapi-CljONd_M.cjs.map +1 -0
  94. package/dist/{openapi-react-query-C4iIvpPf.mjs → openapi-react-query-Byltvm_7.mjs} +2 -2
  95. package/dist/openapi-react-query-Byltvm_7.mjs.map +1 -0
  96. package/dist/{openapi-react-query-CYWik72n.cjs → openapi-react-query-CmJ1xDbn.cjs} +2 -2
  97. package/dist/openapi-react-query-CmJ1xDbn.cjs.map +1 -0
  98. package/dist/openapi-react-query.cjs +1 -1
  99. package/dist/openapi-react-query.mjs +1 -1
  100. package/dist/openapi.cjs +4 -3
  101. package/dist/openapi.d.cts +1 -1
  102. package/dist/openapi.d.mts +1 -1
  103. package/dist/openapi.mjs +4 -3
  104. package/dist/reconcile/public.cjs +9 -0
  105. package/dist/reconcile/public.d.cts +125 -0
  106. package/dist/reconcile/public.d.cts.map +1 -0
  107. package/dist/reconcile/public.d.mts +125 -0
  108. package/dist/reconcile/public.d.mts.map +1 -0
  109. package/dist/reconcile/public.mjs +4 -0
  110. package/dist/{reconcile-B2FoJE0a.mjs → reconcile-CFs8C_1a.mjs} +5 -4
  111. package/dist/reconcile-CFs8C_1a.mjs.map +1 -0
  112. package/dist/{reconcile-BzqKJ2Rt.cjs → reconcile-D0pimNiy.cjs} +5 -4
  113. package/dist/reconcile-D0pimNiy.cjs.map +1 -0
  114. package/dist/setup-CJiQM2pX.cjs +473 -0
  115. package/dist/setup-CJiQM2pX.cjs.map +1 -0
  116. package/dist/setup-DMtU3p41.cjs +11 -0
  117. package/dist/setup-DOsYueeQ.mjs +443 -0
  118. package/dist/setup-DOsYueeQ.mjs.map +1 -0
  119. package/dist/setup-DSutDAlt.mjs +11 -0
  120. package/dist/{storage-B1wvztiJ.cjs → storage-BJmzYxt8.cjs} +1 -1
  121. package/dist/{storage-B1wvztiJ.cjs.map → storage-BJmzYxt8.cjs.map} +1 -1
  122. package/dist/{storage-DOEtT2Hr.cjs → storage-BM9hGpgv.cjs} +1 -1
  123. package/dist/{storage-dbb9RyBl.mjs → storage-Bi24WfoW.mjs} +1 -1
  124. package/dist/{storage-dbb9RyBl.mjs.map → storage-Bi24WfoW.mjs.map} +1 -1
  125. package/dist/{storage-Cs4WBsc4.mjs → storage-CYlGwWTj.mjs} +1 -1
  126. package/dist/{sync-CSooqRQ8.mjs → sync-CmEuNZsB.mjs} +2 -2
  127. package/dist/{sync-CSooqRQ8.mjs.map → sync-CmEuNZsB.mjs.map} +1 -1
  128. package/dist/sync-D306yOWu.cjs +4 -0
  129. package/dist/{sync-o_CtEbvR.cjs → sync-SizaChmC.cjs} +2 -2
  130. package/dist/{sync-o_CtEbvR.cjs.map → sync-SizaChmC.cjs.map} +1 -1
  131. package/dist/{sync-B5UHXwRM.mjs → sync-hOqAWHR6.mjs} +1 -1
  132. package/dist/{index-Bw548Bta.d.mts → types-C-arnQ1r.d.mts} +590 -143
  133. package/dist/types-C-arnQ1r.d.mts.map +1 -0
  134. package/dist/{index-DTpkeFb8.d.cts → types-abJQuk7m.d.cts} +590 -143
  135. package/dist/types-abJQuk7m.d.cts.map +1 -0
  136. package/dist/workspace/index.cjs +5 -1
  137. package/dist/workspace/index.d.cts +3 -3
  138. package/dist/workspace/index.d.mts +3 -3
  139. package/dist/workspace/index.mjs +2 -2
  140. package/dist/{workspace-D-37Ylqo.mjs → workspace-7FqprxuJ.mjs} +117 -30
  141. package/dist/workspace-7FqprxuJ.mjs.map +1 -0
  142. package/dist/workspace-8acupeaI.cjs +9 -0
  143. package/dist/{workspace-CQTT7HJQ.cjs → workspace-XvqO9jIv.cjs} +139 -28
  144. package/dist/workspace-XvqO9jIv.cjs.map +1 -0
  145. package/dist/workspace-yP5AHnrn.mjs +8 -0
  146. package/package.json +26 -9
  147. package/CHANGELOG.md +0 -650
  148. package/FUNCTION_CRON_SUPPORT.md +0 -266
  149. package/dist/CachedStateProvider-GcGziXh1.mjs +0 -3
  150. package/dist/HostingerProvider-B2ZYz7Yc.mjs.map +0 -1
  151. package/dist/HostingerProvider-CrHfsgz9.cjs.map +0 -1
  152. package/dist/bundler-DkA4qzUD.mjs.map +0 -1
  153. package/dist/bundler-Dufq3uvI.cjs.map +0 -1
  154. package/dist/config-Bbu1JKvf.mjs +0 -211
  155. package/dist/config-Bbu1JKvf.mjs.map +0 -1
  156. package/dist/config-DujV8DbR.cjs +0 -253
  157. package/dist/config-DujV8DbR.cjs.map +0 -1
  158. package/dist/credentials-C8DWtnMY.cjs.map +0 -1
  159. package/dist/credentials-s1kLcIzK.mjs.map +0 -1
  160. package/dist/dokploy-api-BPYkG-ZZ.cjs +0 -3
  161. package/dist/dokploy-api-BiSzWM4v.mjs +0 -3
  162. package/dist/dokploy-api-CqOIKHme.cjs.map +0 -1
  163. package/dist/dokploy-api-sfZFlWuE.mjs.map +0 -1
  164. package/dist/encryption-Bd_m4q3g.mjs +0 -3
  165. package/dist/fullstack-secrets-BYzi6Hwl.cjs.map +0 -1
  166. package/dist/fullstack-secrets-l8s3II_H.mjs.map +0 -1
  167. package/dist/index-Bw548Bta.d.mts.map +0 -1
  168. package/dist/index-DTpkeFb8.d.cts.map +0 -1
  169. package/dist/openapi-BzNOC7_i.cjs.map +0 -1
  170. package/dist/openapi-Cfwi0fqF.mjs.map +0 -1
  171. package/dist/openapi-react-query-C4iIvpPf.mjs.map +0 -1
  172. package/dist/openapi-react-query-CYWik72n.cjs.map +0 -1
  173. package/dist/reconcile-B2FoJE0a.mjs.map +0 -1
  174. package/dist/reconcile-BzqKJ2Rt.cjs.map +0 -1
  175. package/dist/setup-DDXUXzzl.mjs +0 -765
  176. package/dist/setup-DDXUXzzl.mjs.map +0 -1
  177. package/dist/setup-DLwhfyt-.cjs +0 -8
  178. package/dist/setup-Dh-B7YTX.mjs +0 -8
  179. package/dist/setup-WZ-xqAQO.cjs +0 -849
  180. package/dist/setup-WZ-xqAQO.cjs.map +0 -1
  181. package/dist/sync-BLA94rgC.cjs +0 -4
  182. package/dist/types-B3GQUg3k.d.mts +0 -280
  183. package/dist/types-B3GQUg3k.d.mts.map +0 -1
  184. package/dist/types-BWQDiooe.d.cts +0 -280
  185. package/dist/types-BWQDiooe.d.cts.map +0 -1
  186. package/dist/workspace-CQTT7HJQ.cjs.map +0 -1
  187. package/dist/workspace-D-37Ylqo.mjs.map +0 -1
  188. package/docs/OPENAPI_TYPESCRIPT_DESIGN.md +0 -408
  189. package/docs/dev-server-resilience-design.md +0 -189
  190. package/docs/manifest-refactor-design.md +0 -287
  191. package/examples/cron-example.ts +0 -45
  192. package/examples/env.ts +0 -33
  193. package/examples/function-example.ts +0 -40
  194. package/examples/gkm.config.json +0 -22
  195. package/examples/gkm.config.ts +0 -14
  196. package/examples/gkm.minimal.config.json +0 -7
  197. package/examples/gkm.production.config.json +0 -27
  198. package/examples/logger.ts +0 -10
  199. package/scripts/sync-versions.ts +0 -108
  200. package/src/__tests__/EndpointGenerator.hooks.spec.ts +0 -204
  201. package/src/__tests__/config.spec.ts +0 -422
  202. package/src/__tests__/loadEnvFiles.spec.ts +0 -131
  203. package/src/__tests__/normalizeHooksConfig.spec.ts +0 -63
  204. package/src/__tests__/openapi-react-query.spec.ts +0 -506
  205. package/src/__tests__/openapi.spec.ts +0 -625
  206. package/src/__tests__/test-helpers.ts +0 -181
  207. package/src/auth/__tests__/credentials.spec.ts +0 -331
  208. package/src/auth/__tests__/index.spec.ts +0 -237
  209. package/src/auth/credentials.ts +0 -286
  210. package/src/auth/index.ts +0 -233
  211. package/src/build/__tests__/bundler.spec.ts +0 -446
  212. package/src/build/__tests__/endpoint-analyzer.spec.ts +0 -623
  213. package/src/build/__tests__/handler-templates.spec.ts +0 -1287
  214. package/src/build/__tests__/index-new.spec.ts +0 -550
  215. package/src/build/__tests__/manifests.spec.ts +0 -583
  216. package/src/build/__tests__/partitions.spec.ts +0 -110
  217. package/src/build/__tests__/workspace-build.spec.ts +0 -215
  218. package/src/build/bundler.ts +0 -256
  219. package/src/build/endpoint-analyzer.ts +0 -236
  220. package/src/build/handler-templates.ts +0 -1253
  221. package/src/build/index.ts +0 -616
  222. package/src/build/manifests.ts +0 -285
  223. package/src/build/partitions.ts +0 -58
  224. package/src/build/providerResolver.ts +0 -184
  225. package/src/build/types.ts +0 -104
  226. package/src/config.ts +0 -330
  227. package/src/credentials/__tests__/fullDockerPorts.spec.ts +0 -144
  228. package/src/credentials/__tests__/helpers.ts +0 -112
  229. package/src/credentials/__tests__/prepareEntryCredentials.spec.ts +0 -125
  230. package/src/credentials/__tests__/readonlyDockerPorts.spec.ts +0 -190
  231. package/src/credentials/__tests__/workspaceCredentials.spec.ts +0 -209
  232. package/src/credentials/index.ts +0 -843
  233. package/src/debug.ts +0 -68
  234. package/src/deploy/CachedStateProvider.ts +0 -86
  235. package/src/deploy/LocalStateProvider.ts +0 -57
  236. package/src/deploy/SSMStateProvider.ts +0 -117
  237. package/src/deploy/StateProvider.ts +0 -175
  238. package/src/deploy/__tests__/CachedStateProvider.spec.ts +0 -235
  239. package/src/deploy/__tests__/HostingerProvider.spec.ts +0 -347
  240. package/src/deploy/__tests__/LocalStateProvider.spec.ts +0 -130
  241. package/src/deploy/__tests__/Route53Provider.spec.ts +0 -425
  242. package/src/deploy/__tests__/SSMStateProvider.spec.ts +0 -201
  243. package/src/deploy/__tests__/__fixtures__/entry-apps/async-entry.ts +0 -24
  244. package/src/deploy/__tests__/__fixtures__/entry-apps/nested-config-entry.ts +0 -24
  245. package/src/deploy/__tests__/__fixtures__/entry-apps/no-env-entry.ts +0 -12
  246. package/src/deploy/__tests__/__fixtures__/entry-apps/simple-entry.ts +0 -14
  247. package/src/deploy/__tests__/__fixtures__/entry-apps/throwing-entry.ts +0 -16
  248. package/src/deploy/__tests__/__fixtures__/env-parsers/non-function-export.ts +0 -10
  249. package/src/deploy/__tests__/__fixtures__/env-parsers/optional-env-parser.ts +0 -21
  250. package/src/deploy/__tests__/__fixtures__/env-parsers/parseable-env-parser.ts +0 -18
  251. package/src/deploy/__tests__/__fixtures__/env-parsers/throwing-env-parser.ts +0 -16
  252. package/src/deploy/__tests__/__fixtures__/env-parsers/valid-env-parser.ts +0 -16
  253. package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/auth.ts +0 -16
  254. package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/health.ts +0 -13
  255. package/src/deploy/__tests__/__fixtures__/route-apps/endpoints/users.ts +0 -15
  256. package/src/deploy/__tests__/__fixtures__/route-apps/services.ts +0 -55
  257. package/src/deploy/__tests__/backup-provisioner.spec.ts +0 -428
  258. package/src/deploy/__tests__/createDnsProvider.spec.ts +0 -195
  259. package/src/deploy/__tests__/createStateProvider.spec.ts +0 -126
  260. package/src/deploy/__tests__/dns-orchestration.spec.ts +0 -192
  261. package/src/deploy/__tests__/dns-verification.spec.ts +0 -229
  262. package/src/deploy/__tests__/docker.spec.ts +0 -149
  263. package/src/deploy/__tests__/dokploy-api.spec.ts +0 -697
  264. package/src/deploy/__tests__/dokploy.spec.ts +0 -435
  265. package/src/deploy/__tests__/domain.spec.ts +0 -235
  266. package/src/deploy/__tests__/env-resolver.spec.ts +0 -903
  267. package/src/deploy/__tests__/index.spec.ts +0 -1091
  268. package/src/deploy/__tests__/init.spec.ts +0 -793
  269. package/src/deploy/__tests__/secrets.spec.ts +0 -303
  270. package/src/deploy/__tests__/sniffer.spec.ts +0 -838
  271. package/src/deploy/__tests__/state-e2e.spec.ts +0 -387
  272. package/src/deploy/__tests__/state.spec.ts +0 -876
  273. package/src/deploy/__tests__/undeploy.spec.ts +0 -758
  274. package/src/deploy/backup-provisioner.ts +0 -316
  275. package/src/deploy/dns/DnsProvider.ts +0 -201
  276. package/src/deploy/dns/HostingerProvider.ts +0 -174
  277. package/src/deploy/dns/Route53Provider.ts +0 -340
  278. package/src/deploy/dns/hostinger-api.ts +0 -261
  279. package/src/deploy/dns/index.ts +0 -627
  280. package/src/deploy/docker.ts +0 -260
  281. package/src/deploy/dokploy-api.ts +0 -1101
  282. package/src/deploy/dokploy.ts +0 -177
  283. package/src/deploy/domain.ts +0 -134
  284. package/src/deploy/env-resolver.ts +0 -305
  285. package/src/deploy/index.ts +0 -2094
  286. package/src/deploy/init.ts +0 -427
  287. package/src/deploy/secrets.ts +0 -187
  288. package/src/deploy/sniffer-envkit-patch.ts +0 -61
  289. package/src/deploy/sniffer-hooks.ts +0 -57
  290. package/src/deploy/sniffer-loader.ts +0 -28
  291. package/src/deploy/sniffer-routes-worker.ts +0 -104
  292. package/src/deploy/sniffer-worker.ts +0 -75
  293. package/src/deploy/sniffer.ts +0 -578
  294. package/src/deploy/state-commands.ts +0 -274
  295. package/src/deploy/state.ts +0 -482
  296. package/src/deploy/types.ts +0 -102
  297. package/src/deploy/undeploy.ts +0 -407
  298. package/src/dev/__tests__/entry-integration.spec.ts +0 -347
  299. package/src/dev/__tests__/entry.spec.ts +0 -144
  300. package/src/dev/__tests__/index.spec.ts +0 -2084
  301. package/src/dev/index.ts +0 -1649
  302. package/src/docker/__tests__/compose.spec.ts +0 -1142
  303. package/src/docker/__tests__/templates.spec.ts +0 -694
  304. package/src/docker/compose.ts +0 -808
  305. package/src/docker/index.ts +0 -523
  306. package/src/docker/templates.ts +0 -1067
  307. package/src/exec/index.ts +0 -118
  308. package/src/generators/CronGenerator.ts +0 -105
  309. package/src/generators/EndpointGenerator.ts +0 -954
  310. package/src/generators/FunctionGenerator.ts +0 -117
  311. package/src/generators/Generator.ts +0 -147
  312. package/src/generators/OpenApiTsGenerator.ts +0 -821
  313. package/src/generators/QueueGenerator.ts +0 -245
  314. package/src/generators/SubscriberGenerator.ts +0 -282
  315. package/src/generators/TopicGenerator.ts +0 -45
  316. package/src/generators/__tests__/CronGenerator.spec.ts +0 -445
  317. package/src/generators/__tests__/EndpointGenerator.spec.ts +0 -544
  318. package/src/generators/__tests__/FunctionGenerator.spec.ts +0 -256
  319. package/src/generators/__tests__/Generator.bustCache.spec.ts +0 -72
  320. package/src/generators/__tests__/OpenApiTsGenerator.registry.spec.ts +0 -98
  321. package/src/generators/__tests__/OpenApiTsGenerator.responseType.spec.ts +0 -56
  322. package/src/generators/__tests__/QueueGenerator.spec.ts +0 -141
  323. package/src/generators/__tests__/SubscriberGenerator.spec.ts +0 -410
  324. package/src/generators/index.ts +0 -11
  325. package/src/index.ts +0 -972
  326. package/src/init/__tests__/generators.spec.ts +0 -1070
  327. package/src/init/__tests__/init.spec.ts +0 -577
  328. package/src/init/__tests__/utils.spec.ts +0 -104
  329. package/src/init/generators/auth.ts +0 -225
  330. package/src/init/generators/config.ts +0 -316
  331. package/src/init/generators/docker.ts +0 -388
  332. package/src/init/generators/env.ts +0 -62
  333. package/src/init/generators/index.ts +0 -6
  334. package/src/init/generators/mobile-expo.ts +0 -576
  335. package/src/init/generators/models.ts +0 -153
  336. package/src/init/generators/monorepo.ts +0 -475
  337. package/src/init/generators/package.ts +0 -95
  338. package/src/init/generators/source.ts +0 -15
  339. package/src/init/generators/test.ts +0 -178
  340. package/src/init/generators/ui.ts +0 -1473
  341. package/src/init/generators/web-tanstack.ts +0 -348
  342. package/src/init/generators/web.ts +0 -363
  343. package/src/init/index.ts +0 -542
  344. package/src/init/templates/api.ts +0 -404
  345. package/src/init/templates/index.ts +0 -342
  346. package/src/init/templates/minimal.ts +0 -207
  347. package/src/init/templates/serverless.ts +0 -148
  348. package/src/init/templates/worker.ts +0 -216
  349. package/src/init/utils.ts +0 -197
  350. package/src/init/versions.ts +0 -52
  351. package/src/openapi-react-query.ts +0 -288
  352. package/src/openapi.ts +0 -259
  353. package/src/secrets/__tests__/encryption.spec.ts +0 -226
  354. package/src/secrets/__tests__/generator.spec.ts +0 -575
  355. package/src/secrets/__tests__/index.spec.ts +0 -91
  356. package/src/secrets/__tests__/reconcile.spec.ts +0 -123
  357. package/src/secrets/__tests__/storage.spec.ts +0 -645
  358. package/src/secrets/encryption.ts +0 -91
  359. package/src/secrets/generator.ts +0 -329
  360. package/src/secrets/index.ts +0 -417
  361. package/src/secrets/keystore.ts +0 -144
  362. package/src/secrets/reconcile.ts +0 -53
  363. package/src/secrets/storage.ts +0 -337
  364. package/src/secrets/sync.ts +0 -136
  365. package/src/secrets/types.ts +0 -70
  366. package/src/setup/__tests__/auto-setup.spec.ts +0 -147
  367. package/src/setup/__tests__/reconcile-secrets.spec.ts +0 -439
  368. package/src/setup/fullstack-secrets.ts +0 -140
  369. package/src/setup/index.ts +0 -411
  370. package/src/test/__tests__/__fixtures__/workspace.ts +0 -104
  371. package/src/test/__tests__/api.spec.ts +0 -199
  372. package/src/test/__tests__/auth.spec.ts +0 -162
  373. package/src/test/__tests__/index.spec.ts +0 -502
  374. package/src/test/__tests__/web.spec.ts +0 -210
  375. package/src/test/index.ts +0 -198
  376. package/src/types.ts +0 -363
  377. package/src/upgrade/__tests__/index.spec.ts +0 -354
  378. package/src/upgrade/index.ts +0 -253
  379. package/src/workspace/__tests__/client-generator.spec.ts +0 -326
  380. package/src/workspace/__tests__/index.spec.ts +0 -766
  381. package/src/workspace/__tests__/publicEnv.spec.ts +0 -64
  382. package/src/workspace/__tests__/schema.spec.ts +0 -737
  383. package/src/workspace/__tests__/type-inference.spec.ts +0 -251
  384. package/src/workspace/client-generator.ts +0 -109
  385. package/src/workspace/index.ts +0 -433
  386. package/src/workspace/publicEnv.ts +0 -57
  387. package/src/workspace/schema.ts +0 -861
  388. package/src/workspace/types.ts +0 -943
  389. package/tsconfig.json +0 -9
  390. package/tsdown.config.ts +0 -22
@@ -1,427 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { readFile, writeFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
4
- import {
5
- getDokployCredentials,
6
- getDokployRegistryId,
7
- getDokployToken,
8
- storeDokployRegistryId,
9
- } from '../auth';
10
- import { DokployApi } from './dokploy-api';
11
- import type { DokployDeployConfig } from './types';
12
-
13
- const logger = console;
14
-
15
- export interface DeployInitOptions {
16
- /** Dokploy endpoint URL (optional if logged in) */
17
- endpoint?: string;
18
- /** Project name (creates new or uses existing) */
19
- projectName: string;
20
- /** Application name */
21
- appName: string;
22
- /** Use existing project ID instead of creating/finding */
23
- projectId?: string;
24
- /** Registry ID in Dokploy (optional, uses stored if available) */
25
- registryId?: string;
26
- }
27
-
28
- export interface RegistrySetupOptions {
29
- /** Dokploy endpoint URL (optional if logged in) */
30
- endpoint?: string;
31
- /** Registry name (for display in Dokploy) */
32
- registryName: string;
33
- /** Registry URL (e.g., ghcr.io, docker.io) */
34
- registryUrl: string;
35
- /** Registry username */
36
- username: string;
37
- /** Registry password or token */
38
- password: string;
39
- /** Image prefix (optional, e.g., org-name) */
40
- imagePrefix?: string;
41
- }
42
-
43
- /**
44
- * Get the Dokploy API token from stored credentials or environment
45
- */
46
- async function getApiToken(): Promise<string> {
47
- const token = await getDokployToken();
48
- if (!token) {
49
- throw new Error(
50
- 'Dokploy credentials not found.\n' +
51
- 'Run "gkm login --service dokploy" to authenticate, or set DOKPLOY_API_TOKEN.',
52
- );
53
- }
54
- return token;
55
- }
56
-
57
- /**
58
- * Get Dokploy endpoint from options or stored credentials
59
- */
60
- async function getEndpoint(providedEndpoint?: string): Promise<string> {
61
- if (providedEndpoint) {
62
- return providedEndpoint;
63
- }
64
-
65
- const stored = await getDokployCredentials();
66
- if (stored) {
67
- return stored.endpoint;
68
- }
69
-
70
- throw new Error(
71
- 'Dokploy endpoint not specified.\n' +
72
- 'Either run "gkm login --service dokploy" first, or provide --endpoint.',
73
- );
74
- }
75
-
76
- /**
77
- * Create a Dokploy API client
78
- */
79
- async function createApi(endpoint: string): Promise<DokployApi> {
80
- const token = await getApiToken();
81
- return new DokployApi({ baseUrl: endpoint, token });
82
- }
83
-
84
- /**
85
- * Update gkm.config.ts with Dokploy configuration
86
- */
87
- export async function updateConfig(
88
- config: DokployDeployConfig,
89
- cwd: string = process.cwd(),
90
- ): Promise<void> {
91
- const configPath = join(cwd, 'gkm.config.ts');
92
-
93
- if (!existsSync(configPath)) {
94
- logger.warn(
95
- '\n gkm.config.ts not found. Add this configuration manually:\n',
96
- );
97
- logger.log(` providers: {`);
98
- logger.log(` dokploy: {`);
99
- logger.log(` endpoint: '${config.endpoint}',`);
100
- logger.log(` projectId: '${config.projectId}',`);
101
- logger.log(` applicationId: '${config.applicationId}',`);
102
- logger.log(` },`);
103
- logger.log(` },`);
104
- return;
105
- }
106
-
107
- const content = await readFile(configPath, 'utf-8');
108
-
109
- // Check if providers.dokploy already exists
110
- if (content.includes('dokploy:') && content.includes('applicationId:')) {
111
- logger.log('\n Dokploy config already exists in gkm.config.ts');
112
- logger.log(' Updating with new values...');
113
- }
114
-
115
- // Build the dokploy config string
116
- const registryLine = config.registryId
117
- ? `\n\t\t\tregistryId: '${config.registryId}',`
118
- : '';
119
- const dokployConfigStr = `dokploy: {
120
- endpoint: '${config.endpoint}',
121
- projectId: '${config.projectId}',
122
- applicationId: '${config.applicationId}',${registryLine}
123
- }`;
124
-
125
- // Try to add or update the dokploy config
126
- let newContent: string;
127
-
128
- if (content.includes('providers:')) {
129
- // Add dokploy to existing providers
130
- if (content.includes('dokploy:')) {
131
- // Update existing dokploy config (handle multi-line with registryId)
132
- newContent = content.replace(/dokploy:\s*\{[^}]*\}/s, dokployConfigStr);
133
- } else {
134
- // Add dokploy to providers
135
- newContent = content.replace(
136
- /providers:\s*\{/,
137
- `providers: {\n\t\t${dokployConfigStr},`,
138
- );
139
- }
140
- } else {
141
- // Add providers section before the closing of defineConfig
142
- newContent = content.replace(
143
- /}\s*\)\s*;?\s*$/,
144
- `
145
- providers: {
146
- ${dokployConfigStr},
147
- },
148
- });`,
149
- );
150
- }
151
-
152
- await writeFile(configPath, newContent);
153
- logger.log('\n ✓ Updated gkm.config.ts with Dokploy configuration');
154
- }
155
-
156
- /**
157
- * Initialize Dokploy deployment configuration
158
- */
159
- export async function deployInitCommand(
160
- options: DeployInitOptions,
161
- ): Promise<DokployDeployConfig> {
162
- const {
163
- projectName,
164
- appName,
165
- projectId: existingProjectId,
166
- registryId,
167
- } = options;
168
-
169
- const endpoint = await getEndpoint(options.endpoint);
170
- const api = await createApi(endpoint);
171
-
172
- logger.log(`\n🚀 Initializing Dokploy deployment...`);
173
- logger.log(` Endpoint: ${endpoint}`);
174
-
175
- // Step 1: Find or create project
176
- let projectId: string;
177
-
178
- if (existingProjectId) {
179
- projectId = existingProjectId;
180
- logger.log(`\n📁 Using existing project: ${projectId}`);
181
- } else {
182
- logger.log(`\n📁 Looking for project: ${projectName}`);
183
-
184
- const projects = await api.listProjects();
185
- const existingProject = projects.find(
186
- (p) => p.name.toLowerCase() === projectName.toLowerCase(),
187
- );
188
-
189
- if (existingProject) {
190
- projectId = existingProject.projectId;
191
- logger.log(` Found existing project: ${projectId}`);
192
- } else {
193
- logger.log(` Creating new project...`);
194
- const result = await api.createProject(projectName);
195
- projectId = result.project.projectId;
196
- logger.log(` ✓ Created project: ${projectId}`);
197
- }
198
- }
199
-
200
- // Step 2: Get project to find environment
201
- const project = await api.getProject(projectId);
202
- let environmentId: string;
203
-
204
- const firstEnv = project.environments?.[0];
205
- if (firstEnv) {
206
- environmentId = firstEnv.environmentId;
207
- } else {
208
- // Create a default environment
209
- logger.log(` Creating production environment...`);
210
- const env = await api.createEnvironment(projectId, 'production');
211
- environmentId = env.environmentId;
212
- }
213
-
214
- // Step 3: Create application
215
- logger.log(`\n📦 Creating application: ${appName}`);
216
- const application = await api.createApplication(
217
- appName,
218
- projectId,
219
- environmentId,
220
- );
221
- logger.log(` ✓ Created application: ${application.applicationId}`);
222
-
223
- // Step 4: Configure registry if provided
224
- if (registryId) {
225
- logger.log(`\n🔧 Configuring registry: ${registryId}`);
226
- await api.updateApplication(application.applicationId, { registryId });
227
- logger.log(` ✓ Registry configured`);
228
- } else {
229
- // List available registries
230
- try {
231
- const registries = await api.listRegistries();
232
- if (registries.length > 0) {
233
- logger.log(`\n📋 Available registries:`);
234
- for (const reg of registries) {
235
- logger.log(
236
- ` - ${reg.registryName}: ${reg.registryUrl} (${reg.registryId})`,
237
- );
238
- }
239
- logger.log(`\n To use a registry, run with --registry-id <id>`);
240
- }
241
- } catch {
242
- // Ignore registry listing errors
243
- }
244
- }
245
-
246
- // Step 5: Build config
247
- const config: DokployDeployConfig = {
248
- endpoint,
249
- projectId,
250
- applicationId: application.applicationId,
251
- };
252
-
253
- // Step 6: Update gkm.config.ts
254
- await updateConfig(config);
255
-
256
- logger.log(`\n✅ Dokploy deployment initialized!`);
257
- logger.log(`\n📋 Configuration:`);
258
- logger.log(` Project ID: ${projectId}`);
259
- logger.log(` Application ID: ${application.applicationId}`);
260
- logger.log(`\n🔗 View in Dokploy: ${endpoint}/project/${projectId}`);
261
- logger.log(`\n📝 Next steps:`);
262
- logger.log(` 1. Initialize secrets: gkm secrets:init --stage production`);
263
- logger.log(` 2. Deploy: gkm deploy --provider dokploy --stage production`);
264
-
265
- return config;
266
- }
267
-
268
- /**
269
- * List available Dokploy resources
270
- */
271
- export async function deployListCommand(options: {
272
- endpoint?: string;
273
- resource: 'projects' | 'registries';
274
- }): Promise<void> {
275
- const endpoint = await getEndpoint(options.endpoint);
276
- const api = await createApi(endpoint);
277
-
278
- const { resource } = options;
279
-
280
- if (resource === 'projects') {
281
- logger.log(`\n📁 Projects in ${endpoint}:`);
282
- const projects = await api.listProjects();
283
-
284
- if (projects.length === 0) {
285
- logger.log(' No projects found');
286
- return;
287
- }
288
-
289
- for (const project of projects) {
290
- logger.log(`\n ${project.name} (${project.projectId})`);
291
- if (project.description) {
292
- logger.log(` ${project.description}`);
293
- }
294
- }
295
- } else if (resource === 'registries') {
296
- logger.log(`\n🐳 Registries in ${endpoint}:`);
297
- const registries = await api.listRegistries();
298
-
299
- if (registries.length === 0) {
300
- logger.log(' No registries configured');
301
- logger.log(' Run "gkm registry:setup" to configure a registry');
302
- return;
303
- }
304
-
305
- const storedRegistryId = await getDokployRegistryId();
306
-
307
- for (const registry of registries) {
308
- const isDefault = registry.registryId === storedRegistryId;
309
- const marker = isDefault ? ' (default)' : '';
310
- logger.log(
311
- `\n ${registry.registryName}${marker} (${registry.registryId})`,
312
- );
313
- logger.log(` URL: ${registry.registryUrl}`);
314
- logger.log(` Username: ${registry.username}`);
315
- if (registry.imagePrefix) {
316
- logger.log(` Prefix: ${registry.imagePrefix}`);
317
- }
318
- }
319
- }
320
- }
321
-
322
- /**
323
- * Setup a Docker registry in Dokploy
324
- */
325
- export async function registrySetupCommand(
326
- options: RegistrySetupOptions,
327
- ): Promise<string> {
328
- const { registryName, registryUrl, username, password, imagePrefix } =
329
- options;
330
-
331
- const endpoint = await getEndpoint(options.endpoint);
332
- const api = await createApi(endpoint);
333
-
334
- logger.log(`\n🐳 Setting up Docker registry in Dokploy...`);
335
- logger.log(` Endpoint: ${endpoint}`);
336
-
337
- // Check if registry with same URL already exists
338
- const existingRegistries = await api.listRegistries();
339
- const existing = existingRegistries.find(
340
- (r) =>
341
- r.registryUrl === registryUrl ||
342
- r.registryName.toLowerCase() === registryName.toLowerCase(),
343
- );
344
-
345
- let registryId: string;
346
-
347
- if (existing) {
348
- logger.log(`\n📋 Found existing registry: ${existing.registryName}`);
349
- logger.log(` Updating credentials...`);
350
-
351
- await api.updateRegistry(existing.registryId, {
352
- registryName,
353
- username,
354
- password,
355
- imagePrefix,
356
- });
357
-
358
- registryId = existing.registryId;
359
- logger.log(` ✓ Registry updated: ${registryId}`);
360
- } else {
361
- logger.log(`\n📦 Creating registry: ${registryName}`);
362
-
363
- const registry = await api.createRegistry(
364
- registryName,
365
- registryUrl,
366
- username,
367
- password,
368
- { imagePrefix },
369
- );
370
-
371
- registryId = registry.registryId;
372
- logger.log(` ✓ Registry created: ${registryId}`);
373
- }
374
-
375
- // Store registry ID in credentials
376
- await storeDokployRegistryId(registryId);
377
- logger.log(`\n💾 Saved registry ID to ~/.gkm/credentials.json`);
378
-
379
- logger.log(`\n✅ Registry setup complete!`);
380
- logger.log(`\n📋 Registry Details:`);
381
- logger.log(` ID: ${registryId}`);
382
- logger.log(` Name: ${registryName}`);
383
- logger.log(` URL: ${registryUrl}`);
384
- logger.log(` Username: ${username}`);
385
- if (imagePrefix) {
386
- logger.log(` Prefix: ${imagePrefix}`);
387
- }
388
-
389
- logger.log(
390
- `\n📝 The registry ID is now stored and will be used automatically`,
391
- );
392
- logger.log(` when deploying with "gkm deploy --provider dokploy"`);
393
-
394
- return registryId;
395
- }
396
-
397
- /**
398
- * Use an existing registry (set as default)
399
- */
400
- export async function registryUseCommand(options: {
401
- endpoint?: string;
402
- registryId: string;
403
- }): Promise<void> {
404
- const { registryId } = options;
405
-
406
- const endpoint = await getEndpoint(options.endpoint);
407
- const api = await createApi(endpoint);
408
-
409
- logger.log(`\n🔧 Setting default registry...`);
410
-
411
- // Verify the registry exists
412
- try {
413
- const registry = await api.getRegistry(registryId);
414
- logger.log(` Found registry: ${registry.registryName}`);
415
- } catch {
416
- throw new Error(
417
- `Registry not found: ${registryId}\n` +
418
- 'Run "gkm deploy:list registries" to see available registries.',
419
- );
420
- }
421
-
422
- // Store registry ID in credentials
423
- await storeDokployRegistryId(registryId);
424
-
425
- logger.log(`\n✅ Default registry set: ${registryId}`);
426
- logger.log(` This registry will be used for future deployments.`);
427
- }
@@ -1,187 +0,0 @@
1
- import { encryptSecrets } from '../secrets/encryption.js';
2
- import { toEmbeddableSecrets } from '../secrets/storage.js';
3
- import type {
4
- EmbeddableSecrets,
5
- EncryptedPayload,
6
- StageSecrets,
7
- } from '../secrets/types.js';
8
- import type { SniffedEnvironment } from './sniffer.js';
9
-
10
- /**
11
- * Result of filtering secrets for an app.
12
- */
13
- export interface FilteredAppSecrets {
14
- appName: string;
15
- /** Secrets filtered to only include what the app needs */
16
- secrets: EmbeddableSecrets;
17
- /** List of required env vars that were found in secrets */
18
- found: string[];
19
- /** List of required env vars that were NOT found in secrets */
20
- missing: string[];
21
- }
22
-
23
- /**
24
- * Filter secrets to only include the env vars that an app requires.
25
- *
26
- * @param stageSecrets - All secrets for the stage
27
- * @param sniffedEnv - The sniffed environment requirements for the app
28
- * @returns Filtered secrets with found/missing tracking
29
- */
30
- export function filterSecretsForApp(
31
- stageSecrets: StageSecrets,
32
- sniffedEnv: SniffedEnvironment,
33
- ): FilteredAppSecrets {
34
- // Convert stage secrets to flat embeddable format
35
- const allSecrets = toEmbeddableSecrets(stageSecrets);
36
- const filtered: EmbeddableSecrets = {};
37
- const found: string[] = [];
38
- const missing: string[] = [];
39
-
40
- // Filter to only required env vars
41
- for (const key of sniffedEnv.requiredEnvVars) {
42
- if (key in allSecrets) {
43
- filtered[key] = allSecrets[key]!;
44
- found.push(key);
45
- } else {
46
- missing.push(key);
47
- }
48
- }
49
-
50
- return {
51
- appName: sniffedEnv.appName,
52
- secrets: filtered,
53
- found: found.sort(),
54
- missing: missing.sort(),
55
- };
56
- }
57
-
58
- /**
59
- * Result of encrypting secrets for an app.
60
- */
61
- export interface EncryptedAppSecrets {
62
- appName: string;
63
- /** Encrypted payload with credentials and IV */
64
- payload: EncryptedPayload;
65
- /** Master key for runtime decryption (hex encoded) */
66
- masterKey: string;
67
- /** Number of secrets encrypted */
68
- secretCount: number;
69
- /** List of required env vars that were NOT found in secrets */
70
- missingSecrets: string[];
71
- }
72
-
73
- /**
74
- * Encrypt filtered secrets for an app.
75
- * Generates an ephemeral master key that should be injected into Dokploy.
76
- *
77
- * @param filteredSecrets - The filtered secrets for the app
78
- * @returns Encrypted payload with master key
79
- */
80
- export function encryptSecretsForApp(
81
- filteredSecrets: FilteredAppSecrets,
82
- ): EncryptedAppSecrets {
83
- const payload = encryptSecrets(filteredSecrets.secrets);
84
-
85
- return {
86
- appName: filteredSecrets.appName,
87
- payload,
88
- masterKey: payload.masterKey,
89
- secretCount: Object.keys(filteredSecrets.secrets).length,
90
- missingSecrets: filteredSecrets.missing,
91
- };
92
- }
93
-
94
- /**
95
- * Filter and encrypt secrets for an app in one step.
96
- *
97
- * @param stageSecrets - All secrets for the stage
98
- * @param sniffedEnv - The sniffed environment requirements for the app
99
- * @returns Encrypted secrets with master key
100
- */
101
- export function prepareSecretsForApp(
102
- stageSecrets: StageSecrets,
103
- sniffedEnv: SniffedEnvironment,
104
- ): EncryptedAppSecrets {
105
- const filtered = filterSecretsForApp(stageSecrets, sniffedEnv);
106
- return encryptSecretsForApp(filtered);
107
- }
108
-
109
- /**
110
- * Prepare secrets for multiple apps.
111
- *
112
- * @param stageSecrets - All secrets for the stage
113
- * @param sniffedApps - Map of app name to sniffed environment
114
- * @returns Map of app name to encrypted secrets
115
- */
116
- export function prepareSecretsForAllApps(
117
- stageSecrets: StageSecrets,
118
- sniffedApps: Map<string, SniffedEnvironment>,
119
- ): Map<string, EncryptedAppSecrets> {
120
- const results = new Map<string, EncryptedAppSecrets>();
121
-
122
- for (const [appName, sniffedEnv] of sniffedApps) {
123
- // Only prepare secrets for apps that have required env vars
124
- if (sniffedEnv.requiredEnvVars.length > 0) {
125
- const encrypted = prepareSecretsForApp(stageSecrets, sniffedEnv);
126
- results.set(appName, encrypted);
127
- }
128
- }
129
-
130
- return results;
131
- }
132
-
133
- /**
134
- * Report on secrets preparation status for all apps.
135
- */
136
- export interface SecretsReport {
137
- /** Total number of apps processed */
138
- totalApps: number;
139
- /** Apps with encrypted secrets */
140
- appsWithSecrets: string[];
141
- /** Apps without secrets (frontends or no env requirements) */
142
- appsWithoutSecrets: string[];
143
- /** Apps with missing secrets (warnings) */
144
- appsWithMissingSecrets: Array<{
145
- appName: string;
146
- missing: string[];
147
- }>;
148
- }
149
-
150
- /**
151
- * Generate a report on secrets preparation.
152
- */
153
- export function generateSecretsReport(
154
- encryptedApps: Map<string, EncryptedAppSecrets>,
155
- sniffedApps: Map<string, SniffedEnvironment>,
156
- ): SecretsReport {
157
- const appsWithSecrets: string[] = [];
158
- const appsWithoutSecrets: string[] = [];
159
- const appsWithMissingSecrets: Array<{ appName: string; missing: string[] }> =
160
- [];
161
-
162
- for (const [appName, sniffedEnv] of sniffedApps) {
163
- if (sniffedEnv.requiredEnvVars.length === 0) {
164
- appsWithoutSecrets.push(appName);
165
- continue;
166
- }
167
-
168
- const encrypted = encryptedApps.get(appName);
169
- if (encrypted) {
170
- appsWithSecrets.push(appName);
171
-
172
- if (encrypted.missingSecrets.length > 0) {
173
- appsWithMissingSecrets.push({
174
- appName,
175
- missing: encrypted.missingSecrets,
176
- });
177
- }
178
- }
179
- }
180
-
181
- return {
182
- totalApps: sniffedApps.size,
183
- appsWithSecrets: appsWithSecrets.sort(),
184
- appsWithoutSecrets: appsWithoutSecrets.sort(),
185
- appsWithMissingSecrets,
186
- };
187
- }
@@ -1,61 +0,0 @@
1
- /**
2
- * Patched @geekmidas/envkit module for entry app sniffing.
3
- *
4
- * This module re-exports the SnifferEnvironmentParser as EnvironmentParser,
5
- * allowing entry apps to be imported while capturing their env var usage.
6
- *
7
- * The actual sniffer instance is stored in globalThis.__envSniffer
8
- * so the worker script can retrieve the captured variables.
9
- */
10
-
11
- import { SnifferEnvironmentParser } from '@geekmidas/envkit/sniffer';
12
-
13
- // Extend globalThis type for the sniffer instance
14
- declare global {
15
- // eslint-disable-next-line no-var
16
- var __envSniffer: SnifferEnvironmentParser | undefined;
17
- }
18
-
19
- // Create a shared sniffer instance that will be used by all imports
20
- // This is stored globally so the worker script can access it
21
- if (!globalThis.__envSniffer) {
22
- globalThis.__envSniffer = new SnifferEnvironmentParser();
23
- }
24
-
25
- // Type for the config parser returned by create()
26
- interface ConfigParser<T> {
27
- parse(): T;
28
- safeParse(): { success: true; data: T } | { success: false; error: Error };
29
- }
30
-
31
- // Type for the env fetcher function
32
- type EnvFetcher = (name: string) => {
33
- string(): { parse(): string; safeParse(): unknown };
34
- number(): { parse(): number; safeParse(): unknown };
35
- boolean(): { parse(): boolean; safeParse(): unknown };
36
- optional(): EnvFetcher;
37
- default(value: unknown): EnvFetcher;
38
- };
39
-
40
- /**
41
- * Patched EnvironmentParser that uses the global sniffer instance.
42
- *
43
- * This class wraps the global sniffer to maintain API compatibility
44
- * with the real EnvironmentParser. The constructor accepts an env
45
- * parameter for API compatibility but ignores it since we're sniffing.
46
- */
47
- class PatchedEnvironmentParser {
48
- create<TReturn extends Record<string, unknown>>(
49
- builder: (get: EnvFetcher) => TReturn,
50
- ): ConfigParser<TReturn> {
51
- return globalThis.__envSniffer!.create(
52
- builder as any,
53
- ) as unknown as ConfigParser<TReturn>;
54
- }
55
- }
56
-
57
- // Export the patched parser as EnvironmentParser
58
- export { PatchedEnvironmentParser as EnvironmentParser };
59
-
60
- // Re-export other envkit exports that entry apps might use
61
- export { SnifferEnvironmentParser } from '@geekmidas/envkit/sniffer';