@factiii/stack 0.1.2

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 (400) hide show
  1. package/README.md +420 -0
  2. package/bin/factiii +229 -0
  3. package/dist/cli/check-config.d.ts +9 -0
  4. package/dist/cli/check-config.d.ts.map +1 -0
  5. package/dist/cli/check-config.js +19 -0
  6. package/dist/cli/check-config.js.map +1 -0
  7. package/dist/cli/deploy-secrets.d.ts +16 -0
  8. package/dist/cli/deploy-secrets.d.ts.map +1 -0
  9. package/dist/cli/deploy-secrets.js +227 -0
  10. package/dist/cli/deploy-secrets.js.map +1 -0
  11. package/dist/cli/deploy.d.ts +30 -0
  12. package/dist/cli/deploy.d.ts.map +1 -0
  13. package/dist/cli/deploy.js +306 -0
  14. package/dist/cli/deploy.js.map +1 -0
  15. package/dist/cli/deployer.d.ts +13 -0
  16. package/dist/cli/deployer.d.ts.map +1 -0
  17. package/dist/cli/deployer.js +21 -0
  18. package/dist/cli/deployer.js.map +1 -0
  19. package/dist/cli/dev-sync.d.ts +30 -0
  20. package/dist/cli/dev-sync.d.ts.map +1 -0
  21. package/dist/cli/dev-sync.js +500 -0
  22. package/dist/cli/dev-sync.js.map +1 -0
  23. package/dist/cli/execute-plugin-command.d.ts +25 -0
  24. package/dist/cli/execute-plugin-command.d.ts.map +1 -0
  25. package/dist/cli/execute-plugin-command.js +237 -0
  26. package/dist/cli/execute-plugin-command.js.map +1 -0
  27. package/dist/cli/fix.d.ts +22 -0
  28. package/dist/cli/fix.d.ts.map +1 -0
  29. package/dist/cli/fix.js +267 -0
  30. package/dist/cli/fix.js.map +1 -0
  31. package/dist/cli/index.d.ts +17 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +31 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/cli/init.d.ts +9 -0
  36. package/dist/cli/init.d.ts.map +1 -0
  37. package/dist/cli/init.js +190 -0
  38. package/dist/cli/init.js.map +1 -0
  39. package/dist/cli/plugin-commands.d.ts +22 -0
  40. package/dist/cli/plugin-commands.d.ts.map +1 -0
  41. package/dist/cli/plugin-commands.js +121 -0
  42. package/dist/cli/plugin-commands.js.map +1 -0
  43. package/dist/cli/scan.d.ts +66 -0
  44. package/dist/cli/scan.d.ts.map +1 -0
  45. package/dist/cli/scan.js +511 -0
  46. package/dist/cli/scan.js.map +1 -0
  47. package/dist/cli/secrets.d.ts +19 -0
  48. package/dist/cli/secrets.d.ts.map +1 -0
  49. package/dist/cli/secrets.js +318 -0
  50. package/dist/cli/secrets.js.map +1 -0
  51. package/dist/cli/undeploy.d.ts +9 -0
  52. package/dist/cli/undeploy.d.ts.map +1 -0
  53. package/dist/cli/undeploy.js +95 -0
  54. package/dist/cli/undeploy.js.map +1 -0
  55. package/dist/cli/upgrade.d.ts +9 -0
  56. package/dist/cli/upgrade.d.ts.map +1 -0
  57. package/dist/cli/upgrade.js +24 -0
  58. package/dist/cli/upgrade.js.map +1 -0
  59. package/dist/cli/validate.d.ts +9 -0
  60. package/dist/cli/validate.d.ts.map +1 -0
  61. package/dist/cli/validate.js +20 -0
  62. package/dist/cli/validate.js.map +1 -0
  63. package/dist/generators/generate-factiii-auto.d.ts +31 -0
  64. package/dist/generators/generate-factiii-auto.d.ts.map +1 -0
  65. package/dist/generators/generate-factiii-auto.js +251 -0
  66. package/dist/generators/generate-factiii-auto.js.map +1 -0
  67. package/dist/generators/generate-factiii-yml.d.ts +23 -0
  68. package/dist/generators/generate-factiii-yml.d.ts.map +1 -0
  69. package/dist/generators/generate-factiii-yml.js +228 -0
  70. package/dist/generators/generate-factiii-yml.js.map +1 -0
  71. package/dist/generators/index.d.ts +8 -0
  72. package/dist/generators/index.d.ts.map +1 -0
  73. package/dist/generators/index.js +14 -0
  74. package/dist/generators/index.js.map +1 -0
  75. package/dist/index.d.ts +39 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +90 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/plugins/addons/server-mode/index.d.ts +57 -0
  80. package/dist/plugins/addons/server-mode/index.d.ts.map +1 -0
  81. package/dist/plugins/addons/server-mode/index.js +136 -0
  82. package/dist/plugins/addons/server-mode/index.js.map +1 -0
  83. package/dist/plugins/addons/server-mode/scanfix/mac.d.ts +17 -0
  84. package/dist/plugins/addons/server-mode/scanfix/mac.d.ts.map +1 -0
  85. package/dist/plugins/addons/server-mode/scanfix/mac.js +461 -0
  86. package/dist/plugins/addons/server-mode/scanfix/mac.js.map +1 -0
  87. package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts +12 -0
  88. package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts.map +1 -0
  89. package/dist/plugins/addons/server-mode/scanfix/ubuntu.js +246 -0
  90. package/dist/plugins/addons/server-mode/scanfix/ubuntu.js.map +1 -0
  91. package/dist/plugins/addons/server-mode/scanfix/windows.d.ts +14 -0
  92. package/dist/plugins/addons/server-mode/scanfix/windows.d.ts.map +1 -0
  93. package/dist/plugins/addons/server-mode/scanfix/windows.js +113 -0
  94. package/dist/plugins/addons/server-mode/scanfix/windows.js.map +1 -0
  95. package/dist/plugins/approved.json +13 -0
  96. package/dist/plugins/frameworks/prisma-trpc/index.d.ts +65 -0
  97. package/dist/plugins/frameworks/prisma-trpc/index.d.ts.map +1 -0
  98. package/dist/plugins/frameworks/prisma-trpc/index.js +668 -0
  99. package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -0
  100. package/dist/plugins/index.d.ts +101 -0
  101. package/dist/plugins/index.d.ts.map +1 -0
  102. package/dist/plugins/index.js +411 -0
  103. package/dist/plugins/index.js.map +1 -0
  104. package/dist/plugins/interfaces/addon.d.ts +43 -0
  105. package/dist/plugins/interfaces/addon.d.ts.map +1 -0
  106. package/dist/plugins/interfaces/addon.js +53 -0
  107. package/dist/plugins/interfaces/addon.js.map +1 -0
  108. package/dist/plugins/interfaces/framework.d.ts +43 -0
  109. package/dist/plugins/interfaces/framework.d.ts.map +1 -0
  110. package/dist/plugins/interfaces/framework.js +53 -0
  111. package/dist/plugins/interfaces/framework.js.map +1 -0
  112. package/dist/plugins/interfaces/index.d.ts +10 -0
  113. package/dist/plugins/interfaces/index.d.ts.map +1 -0
  114. package/dist/plugins/interfaces/index.js +17 -0
  115. package/dist/plugins/interfaces/index.js.map +1 -0
  116. package/dist/plugins/interfaces/pipeline.d.ts +78 -0
  117. package/dist/plugins/interfaces/pipeline.d.ts.map +1 -0
  118. package/dist/plugins/interfaces/pipeline.js +82 -0
  119. package/dist/plugins/interfaces/pipeline.js.map +1 -0
  120. package/dist/plugins/interfaces/server.d.ts +65 -0
  121. package/dist/plugins/interfaces/server.d.ts.map +1 -0
  122. package/dist/plugins/interfaces/server.js +72 -0
  123. package/dist/plugins/interfaces/server.js.map +1 -0
  124. package/dist/plugins/pipelines/aws/configs/ec2.d.ts +9 -0
  125. package/dist/plugins/pipelines/aws/configs/ec2.d.ts.map +1 -0
  126. package/dist/plugins/pipelines/aws/configs/ec2.js +34 -0
  127. package/dist/plugins/pipelines/aws/configs/ec2.js.map +1 -0
  128. package/dist/plugins/pipelines/aws/configs/free-tier.d.ts +13 -0
  129. package/dist/plugins/pipelines/aws/configs/free-tier.d.ts.map +1 -0
  130. package/dist/plugins/pipelines/aws/configs/free-tier.js +86 -0
  131. package/dist/plugins/pipelines/aws/configs/free-tier.js.map +1 -0
  132. package/dist/plugins/pipelines/aws/configs/index.d.ts +14 -0
  133. package/dist/plugins/pipelines/aws/configs/index.d.ts.map +1 -0
  134. package/dist/plugins/pipelines/aws/configs/index.js +21 -0
  135. package/dist/plugins/pipelines/aws/configs/index.js.map +1 -0
  136. package/dist/plugins/pipelines/aws/configs/types.d.ts +36 -0
  137. package/dist/plugins/pipelines/aws/configs/types.d.ts.map +1 -0
  138. package/dist/plugins/pipelines/aws/configs/types.js +9 -0
  139. package/dist/plugins/pipelines/aws/configs/types.js.map +1 -0
  140. package/dist/plugins/pipelines/aws/dev.d.ts +10 -0
  141. package/dist/plugins/pipelines/aws/dev.d.ts.map +1 -0
  142. package/dist/plugins/pipelines/aws/dev.js +70 -0
  143. package/dist/plugins/pipelines/aws/dev.js.map +1 -0
  144. package/dist/plugins/pipelines/aws/index.d.ts +118 -0
  145. package/dist/plugins/pipelines/aws/index.d.ts.map +1 -0
  146. package/dist/plugins/pipelines/aws/index.js +346 -0
  147. package/dist/plugins/pipelines/aws/index.js.map +1 -0
  148. package/dist/plugins/pipelines/aws/prod.d.ts +19 -0
  149. package/dist/plugins/pipelines/aws/prod.d.ts.map +1 -0
  150. package/dist/plugins/pipelines/aws/prod.js +362 -0
  151. package/dist/plugins/pipelines/aws/prod.js.map +1 -0
  152. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +7 -0
  153. package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -0
  154. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +31 -0
  155. package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -0
  156. package/dist/plugins/pipelines/aws/scanfix/config.d.ts +7 -0
  157. package/dist/plugins/pipelines/aws/scanfix/config.d.ts.map +1 -0
  158. package/dist/plugins/pipelines/aws/scanfix/config.js +134 -0
  159. package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -0
  160. package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts +65 -0
  161. package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts.map +1 -0
  162. package/dist/plugins/pipelines/factiii/github-secrets-store.js +221 -0
  163. package/dist/plugins/pipelines/factiii/github-secrets-store.js.map +1 -0
  164. package/dist/plugins/pipelines/factiii/index.d.ts +195 -0
  165. package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -0
  166. package/dist/plugins/pipelines/factiii/index.js +862 -0
  167. package/dist/plugins/pipelines/factiii/index.js.map +1 -0
  168. package/dist/plugins/pipelines/factiii/prod.d.ts +17 -0
  169. package/dist/plugins/pipelines/factiii/prod.d.ts.map +1 -0
  170. package/dist/plugins/pipelines/factiii/prod.js +282 -0
  171. package/dist/plugins/pipelines/factiii/prod.js.map +1 -0
  172. package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +7 -0
  173. package/dist/plugins/pipelines/factiii/scanfix/config.d.ts.map +1 -0
  174. package/dist/plugins/pipelines/factiii/scanfix/config.js +80 -0
  175. package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -0
  176. package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts +7 -0
  177. package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts.map +1 -0
  178. package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +43 -0
  179. package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -0
  180. package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts +7 -0
  181. package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -0
  182. package/dist/plugins/pipelines/factiii/scanfix/secrets.js +237 -0
  183. package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -0
  184. package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts +7 -0
  185. package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -0
  186. package/dist/plugins/pipelines/factiii/scanfix/workflows.js +169 -0
  187. package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -0
  188. package/dist/plugins/pipelines/factiii/staging.d.ts +25 -0
  189. package/dist/plugins/pipelines/factiii/staging.d.ts.map +1 -0
  190. package/dist/plugins/pipelines/factiii/staging.js +223 -0
  191. package/dist/plugins/pipelines/factiii/staging.js.map +1 -0
  192. package/dist/plugins/pipelines/factiii/utils/detection.d.ts +36 -0
  193. package/dist/plugins/pipelines/factiii/utils/detection.d.ts.map +1 -0
  194. package/dist/plugins/pipelines/factiii/utils/detection.js +140 -0
  195. package/dist/plugins/pipelines/factiii/utils/detection.js.map +1 -0
  196. package/dist/plugins/pipelines/factiii/utils/workflows.d.ts +16 -0
  197. package/dist/plugins/pipelines/factiii/utils/workflows.d.ts.map +1 -0
  198. package/dist/plugins/pipelines/factiii/utils/workflows.js +129 -0
  199. package/dist/plugins/pipelines/factiii/utils/workflows.js.map +1 -0
  200. package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-prod.yml +112 -0
  201. package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-staging.yml +112 -0
  202. package/dist/plugins/pipelines/factiii/workflows/factiii-command.yml +130 -0
  203. package/dist/plugins/pipelines/factiii/workflows/factiii-deploy.yml +198 -0
  204. package/dist/plugins/pipelines/factiii/workflows/factiii-dev-sync.yml +179 -0
  205. package/dist/plugins/pipelines/factiii/workflows/factiii-fix.yml +176 -0
  206. package/dist/plugins/pipelines/factiii/workflows/factiii-scan.yml +176 -0
  207. package/dist/plugins/pipelines/factiii/workflows/factiii-undeploy.yml +95 -0
  208. package/dist/plugins/servers/amazon-linux/index.d.ts +93 -0
  209. package/dist/plugins/servers/amazon-linux/index.d.ts.map +1 -0
  210. package/dist/plugins/servers/amazon-linux/index.js +217 -0
  211. package/dist/plugins/servers/amazon-linux/index.js.map +1 -0
  212. package/dist/plugins/servers/mac/dev.d.ts +10 -0
  213. package/dist/plugins/servers/mac/dev.d.ts.map +1 -0
  214. package/dist/plugins/servers/mac/dev.js +71 -0
  215. package/dist/plugins/servers/mac/dev.js.map +1 -0
  216. package/dist/plugins/servers/mac/index.d.ts +101 -0
  217. package/dist/plugins/servers/mac/index.d.ts.map +1 -0
  218. package/dist/plugins/servers/mac/index.js +257 -0
  219. package/dist/plugins/servers/mac/index.js.map +1 -0
  220. package/dist/plugins/servers/mac/scanfix/config.d.ts +7 -0
  221. package/dist/plugins/servers/mac/scanfix/config.d.ts.map +1 -0
  222. package/dist/plugins/servers/mac/scanfix/config.js +168 -0
  223. package/dist/plugins/servers/mac/scanfix/config.js.map +1 -0
  224. package/dist/plugins/servers/mac/scanfix/containers.d.ts +7 -0
  225. package/dist/plugins/servers/mac/scanfix/containers.d.ts.map +1 -0
  226. package/dist/plugins/servers/mac/scanfix/containers.js +167 -0
  227. package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -0
  228. package/dist/plugins/servers/mac/scanfix/system.d.ts +7 -0
  229. package/dist/plugins/servers/mac/scanfix/system.d.ts.map +1 -0
  230. package/dist/plugins/servers/mac/scanfix/system.js +144 -0
  231. package/dist/plugins/servers/mac/scanfix/system.js.map +1 -0
  232. package/dist/plugins/servers/mac/staging.d.ts +21 -0
  233. package/dist/plugins/servers/mac/staging.d.ts.map +1 -0
  234. package/dist/plugins/servers/mac/staging.js +708 -0
  235. package/dist/plugins/servers/mac/staging.js.map +1 -0
  236. package/dist/plugins/servers/ubuntu/index.d.ts +93 -0
  237. package/dist/plugins/servers/ubuntu/index.d.ts.map +1 -0
  238. package/dist/plugins/servers/ubuntu/index.js +224 -0
  239. package/dist/plugins/servers/ubuntu/index.js.map +1 -0
  240. package/dist/plugins/servers/windows/index.d.ts +90 -0
  241. package/dist/plugins/servers/windows/index.d.ts.map +1 -0
  242. package/dist/plugins/servers/windows/index.js +205 -0
  243. package/dist/plugins/servers/windows/index.js.map +1 -0
  244. package/dist/scanfix/commands/index.d.ts +27 -0
  245. package/dist/scanfix/commands/index.d.ts.map +1 -0
  246. package/dist/scanfix/commands/index.js +97 -0
  247. package/dist/scanfix/commands/index.js.map +1 -0
  248. package/dist/scanfix/commands/mac.d.ts +11 -0
  249. package/dist/scanfix/commands/mac.d.ts.map +1 -0
  250. package/dist/scanfix/commands/mac.js +31 -0
  251. package/dist/scanfix/commands/mac.js.map +1 -0
  252. package/dist/scanfix/commands/ubuntu.d.ts +11 -0
  253. package/dist/scanfix/commands/ubuntu.d.ts.map +1 -0
  254. package/dist/scanfix/commands/ubuntu.js +30 -0
  255. package/dist/scanfix/commands/ubuntu.js.map +1 -0
  256. package/dist/scanfix/fixes/certbot.d.ts +25 -0
  257. package/dist/scanfix/fixes/certbot.d.ts.map +1 -0
  258. package/dist/scanfix/fixes/certbot.js +136 -0
  259. package/dist/scanfix/fixes/certbot.js.map +1 -0
  260. package/dist/scanfix/fixes/docker.d.ts +29 -0
  261. package/dist/scanfix/fixes/docker.d.ts.map +1 -0
  262. package/dist/scanfix/fixes/docker.js +149 -0
  263. package/dist/scanfix/fixes/docker.js.map +1 -0
  264. package/dist/scanfix/fixes/git.d.ts +20 -0
  265. package/dist/scanfix/fixes/git.d.ts.map +1 -0
  266. package/dist/scanfix/fixes/git.js +71 -0
  267. package/dist/scanfix/fixes/git.js.map +1 -0
  268. package/dist/scanfix/fixes/index.d.ts +11 -0
  269. package/dist/scanfix/fixes/index.d.ts.map +1 -0
  270. package/dist/scanfix/fixes/index.js +27 -0
  271. package/dist/scanfix/fixes/index.js.map +1 -0
  272. package/dist/scanfix/fixes/node.d.ts +20 -0
  273. package/dist/scanfix/fixes/node.d.ts.map +1 -0
  274. package/dist/scanfix/fixes/node.js +71 -0
  275. package/dist/scanfix/fixes/node.js.map +1 -0
  276. package/dist/scanfix/fixes/pnpm.d.ts +20 -0
  277. package/dist/scanfix/fixes/pnpm.d.ts.map +1 -0
  278. package/dist/scanfix/fixes/pnpm.js +122 -0
  279. package/dist/scanfix/fixes/pnpm.js.map +1 -0
  280. package/dist/scanfix/index.d.ts +23 -0
  281. package/dist/scanfix/index.d.ts.map +1 -0
  282. package/dist/scanfix/index.js +44 -0
  283. package/dist/scanfix/index.js.map +1 -0
  284. package/dist/scanfix/platform.d.ts +20 -0
  285. package/dist/scanfix/platform.d.ts.map +1 -0
  286. package/dist/scanfix/platform.js +48 -0
  287. package/dist/scanfix/platform.js.map +1 -0
  288. package/dist/scanfix/ssl-cert-helper.d.ts +27 -0
  289. package/dist/scanfix/ssl-cert-helper.d.ts.map +1 -0
  290. package/dist/scanfix/ssl-cert-helper.js +117 -0
  291. package/dist/scanfix/ssl-cert-helper.js.map +1 -0
  292. package/dist/scanfix/types.d.ts +27 -0
  293. package/dist/scanfix/types.d.ts.map +1 -0
  294. package/dist/scanfix/types.js +8 -0
  295. package/dist/scanfix/types.js.map +1 -0
  296. package/dist/scripts/check-existing-secrets.d.ts +6 -0
  297. package/dist/scripts/check-existing-secrets.d.ts.map +1 -0
  298. package/dist/scripts/check-existing-secrets.js +86 -0
  299. package/dist/scripts/check-existing-secrets.js.map +1 -0
  300. package/dist/scripts/generate-all.d.ts +40 -0
  301. package/dist/scripts/generate-all.d.ts.map +1 -0
  302. package/dist/scripts/generate-all.js +373 -0
  303. package/dist/scripts/generate-all.js.map +1 -0
  304. package/dist/scripts/get-repo-name.d.ts +6 -0
  305. package/dist/scripts/get-repo-name.d.ts.map +1 -0
  306. package/dist/scripts/get-repo-name.js +54 -0
  307. package/dist/scripts/get-repo-name.js.map +1 -0
  308. package/dist/scripts/index.d.ts +7 -0
  309. package/dist/scripts/index.d.ts.map +1 -0
  310. package/dist/scripts/index.js +14 -0
  311. package/dist/scripts/index.js.map +1 -0
  312. package/dist/scripts/validate-env-files.d.ts +6 -0
  313. package/dist/scripts/validate-env-files.d.ts.map +1 -0
  314. package/dist/scripts/validate-env-files.js +126 -0
  315. package/dist/scripts/validate-env-files.js.map +1 -0
  316. package/dist/scripts/validate-example-values.d.ts +8 -0
  317. package/dist/scripts/validate-example-values.d.ts.map +1 -0
  318. package/dist/scripts/validate-example-values.js +88 -0
  319. package/dist/scripts/validate-example-values.js.map +1 -0
  320. package/dist/scripts/validate-factiii-yml.d.ts +6 -0
  321. package/dist/scripts/validate-factiii-yml.d.ts.map +1 -0
  322. package/dist/scripts/validate-factiii-yml.js +71 -0
  323. package/dist/scripts/validate-factiii-yml.js.map +1 -0
  324. package/dist/types/cli.d.ts +138 -0
  325. package/dist/types/cli.d.ts.map +1 -0
  326. package/dist/types/cli.js +8 -0
  327. package/dist/types/cli.js.map +1 -0
  328. package/dist/types/config.d.ts +113 -0
  329. package/dist/types/config.d.ts.map +1 -0
  330. package/dist/types/config.js +8 -0
  331. package/dist/types/config.js.map +1 -0
  332. package/dist/types/index.d.ts +9 -0
  333. package/dist/types/index.d.ts.map +1 -0
  334. package/dist/types/index.js +25 -0
  335. package/dist/types/index.js.map +1 -0
  336. package/dist/types/plugin.d.ts +352 -0
  337. package/dist/types/plugin.d.ts.map +1 -0
  338. package/dist/types/plugin.js +8 -0
  339. package/dist/types/plugin.js.map +1 -0
  340. package/dist/utils/ansible-vault-secrets.d.ts +95 -0
  341. package/dist/utils/ansible-vault-secrets.d.ts.map +1 -0
  342. package/dist/utils/ansible-vault-secrets.js +406 -0
  343. package/dist/utils/ansible-vault-secrets.js.map +1 -0
  344. package/dist/utils/config-helpers.d.ts +72 -0
  345. package/dist/utils/config-helpers.d.ts.map +1 -0
  346. package/dist/utils/config-helpers.js +171 -0
  347. package/dist/utils/config-helpers.js.map +1 -0
  348. package/dist/utils/config-schema.d.ts +17 -0
  349. package/dist/utils/config-schema.d.ts.map +1 -0
  350. package/dist/utils/config-schema.js +100 -0
  351. package/dist/utils/config-schema.js.map +1 -0
  352. package/dist/utils/config-validator.d.ts +29 -0
  353. package/dist/utils/config-validator.d.ts.map +1 -0
  354. package/dist/utils/config-validator.js +146 -0
  355. package/dist/utils/config-validator.js.map +1 -0
  356. package/dist/utils/deployment-report.d.ts +100 -0
  357. package/dist/utils/deployment-report.d.ts.map +1 -0
  358. package/dist/utils/deployment-report.js +225 -0
  359. package/dist/utils/deployment-report.js.map +1 -0
  360. package/dist/utils/dns-validator.d.ts +19 -0
  361. package/dist/utils/dns-validator.d.ts.map +1 -0
  362. package/dist/utils/dns-validator.js +94 -0
  363. package/dist/utils/dns-validator.js.map +1 -0
  364. package/dist/utils/env-validator.d.ts +108 -0
  365. package/dist/utils/env-validator.d.ts.map +1 -0
  366. package/dist/utils/env-validator.js +342 -0
  367. package/dist/utils/env-validator.js.map +1 -0
  368. package/dist/utils/github-workflow-monitor.d.ts +49 -0
  369. package/dist/utils/github-workflow-monitor.d.ts.map +1 -0
  370. package/dist/utils/github-workflow-monitor.js +145 -0
  371. package/dist/utils/github-workflow-monitor.js.map +1 -0
  372. package/dist/utils/index.d.ts +18 -0
  373. package/dist/utils/index.d.ts.map +1 -0
  374. package/dist/utils/index.js +48 -0
  375. package/dist/utils/index.js.map +1 -0
  376. package/dist/utils/secret-prompts.d.ts +67 -0
  377. package/dist/utils/secret-prompts.d.ts.map +1 -0
  378. package/dist/utils/secret-prompts.js +369 -0
  379. package/dist/utils/secret-prompts.js.map +1 -0
  380. package/dist/utils/server-check.d.ts +43 -0
  381. package/dist/utils/server-check.d.ts.map +1 -0
  382. package/dist/utils/server-check.js +397 -0
  383. package/dist/utils/server-check.js.map +1 -0
  384. package/dist/utils/ssh-deploy.d.ts +70 -0
  385. package/dist/utils/ssh-deploy.d.ts.map +1 -0
  386. package/dist/utils/ssh-deploy.js +268 -0
  387. package/dist/utils/ssh-deploy.js.map +1 -0
  388. package/dist/utils/ssh-helper.d.ts +40 -0
  389. package/dist/utils/ssh-helper.d.ts.map +1 -0
  390. package/dist/utils/ssh-helper.js +221 -0
  391. package/dist/utils/ssh-helper.js.map +1 -0
  392. package/dist/utils/template-generator.d.ts +42 -0
  393. package/dist/utils/template-generator.d.ts.map +1 -0
  394. package/dist/utils/template-generator.js +223 -0
  395. package/dist/utils/template-generator.js.map +1 -0
  396. package/dist/utils/version-check.d.ts +69 -0
  397. package/dist/utils/version-check.d.ts.map +1 -0
  398. package/dist/utils/version-check.js +211 -0
  399. package/dist/utils/version-check.js.map +1 -0
  400. package/package.json +82 -0
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ /**
3
+ * Ansible Vault Secrets
4
+ *
5
+ * Read, write, and check secrets stored in an Ansible Vault–encrypted YAML file.
6
+ * Used by the secrets CLI and pipeline secrets stage. Requires ansible-vault on PATH.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.AnsibleVaultSecrets = void 0;
46
+ const child_process_1 = require("child_process");
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const os = __importStar(require("os"));
50
+ const js_yaml_1 = __importDefault(require("js-yaml"));
51
+ function getVaultPasswordFile(config) {
52
+ if (config.vault_password_file) {
53
+ const expanded = config.vault_password_file.replace(/^~/, os.homedir());
54
+ if (fs.existsSync(expanded))
55
+ return expanded;
56
+ }
57
+ const envFile = process.env.ANSIBLE_VAULT_PASSWORD_FILE;
58
+ if (envFile) {
59
+ const expanded = envFile.replace(/^~/, os.homedir());
60
+ if (fs.existsSync(expanded))
61
+ return expanded;
62
+ }
63
+ return undefined;
64
+ }
65
+ function getVaultPassword() {
66
+ return process.env.ANSIBLE_VAULT_PASSWORD ?? undefined;
67
+ }
68
+ /**
69
+ * Resolve vault file path (absolute)
70
+ */
71
+ function resolveVaultPath(config) {
72
+ const p = config.vault_path.replace(/^~/, os.homedir());
73
+ if (path.isAbsolute(p))
74
+ return p;
75
+ const root = config.rootDir ?? process.cwd();
76
+ return path.join(root, p);
77
+ }
78
+ /**
79
+ * Get path to vault password (file or temp file with env password)
80
+ */
81
+ function getVaultPasswordFileForExec(config) {
82
+ const file = getVaultPasswordFile(config);
83
+ if (file)
84
+ return file;
85
+ const pass = getVaultPassword();
86
+ if (pass) {
87
+ const tmp = path.join(os.tmpdir(), `factiii-vault-pass-${Date.now()}`);
88
+ fs.writeFileSync(tmp, pass, 'utf8');
89
+ return tmp;
90
+ }
91
+ throw new Error('Vault password required. Set ansible.vault_password_file in factiii.yml, or ANSIBLE_VAULT_PASSWORD_FILE / ANSIBLE_VAULT_PASSWORD env.');
92
+ }
93
+ /**
94
+ * Run ansible-vault view to get decrypted content
95
+ */
96
+ function vaultView(vaultPath, config) {
97
+ const passFile = getVaultPasswordFileForExec(config);
98
+ const isTempFile = passFile.startsWith(os.tmpdir());
99
+ try {
100
+ // Escape path for shell (handle spaces and special chars)
101
+ const escapedVaultPath = vaultPath.replace(/"/g, '\\"');
102
+ const escapedPassFile = passFile.replace(/"/g, '\\"');
103
+ const result = (0, child_process_1.execSync)(`ansible-vault view "${escapedVaultPath}" --vault-password-file "${escapedPassFile}"`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
104
+ // Cleanup temp password file if we created it
105
+ if (isTempFile && fs.existsSync(passFile)) {
106
+ try {
107
+ fs.unlinkSync(passFile);
108
+ }
109
+ catch {
110
+ // ignore cleanup errors
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ catch (e) {
116
+ // Cleanup temp password file on error
117
+ if (isTempFile && fs.existsSync(passFile)) {
118
+ try {
119
+ fs.unlinkSync(passFile);
120
+ }
121
+ catch {
122
+ // ignore cleanup errors
123
+ }
124
+ }
125
+ const msg = e instanceof Error ? e.message : String(e);
126
+ throw new Error(`Ansible Vault view failed: ${msg}`);
127
+ }
128
+ }
129
+ /**
130
+ * Run ansible-vault encrypt to encrypt a file to output path
131
+ */
132
+ function vaultEncrypt(inputPath, outputPath, config) {
133
+ const passFile = getVaultPasswordFileForExec(config);
134
+ const isTempFile = passFile.startsWith(os.tmpdir());
135
+ try {
136
+ // Escape paths for shell (handle spaces and special chars)
137
+ const escapedInputPath = inputPath.replace(/"/g, '\\"');
138
+ const escapedOutputPath = outputPath.replace(/"/g, '\\"');
139
+ const escapedPassFile = passFile.replace(/"/g, '\\"');
140
+ (0, child_process_1.execSync)(`ansible-vault encrypt "${escapedInputPath}" --output="${escapedOutputPath}" --vault-password-file "${escapedPassFile}"`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
141
+ }
142
+ catch (e) {
143
+ const msg = e instanceof Error ? e.message : String(e);
144
+ throw new Error(`Ansible Vault encrypt failed: ${msg}`);
145
+ }
146
+ finally {
147
+ // Cleanup temp password file if we created it
148
+ if (isTempFile && fs.existsSync(passFile)) {
149
+ try {
150
+ fs.unlinkSync(passFile);
151
+ }
152
+ catch {
153
+ // ignore cleanup errors
154
+ }
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * Parse decrypted vault content as YAML (flat key-value for backwards compatibility)
160
+ */
161
+ function parseVaultContent(content) {
162
+ const parsed = js_yaml_1.default.load(content);
163
+ if (parsed == null)
164
+ return {};
165
+ if (typeof parsed !== 'object' || Array.isArray(parsed))
166
+ return {};
167
+ const out = {};
168
+ for (const [k, v] of Object.entries(parsed)) {
169
+ if (typeof v === 'string')
170
+ out[k] = v;
171
+ else if (v != null && typeof v !== 'object')
172
+ out[k] = String(v);
173
+ // Skip nested objects in flat parsing
174
+ }
175
+ return out;
176
+ }
177
+ /**
178
+ * Parse decrypted vault content as full YAML structure (supports nested objects)
179
+ */
180
+ function parseVaultContentFull(content) {
181
+ const parsed = js_yaml_1.default.load(content);
182
+ if (parsed == null)
183
+ return {};
184
+ if (typeof parsed !== 'object' || Array.isArray(parsed))
185
+ return {};
186
+ return parsed;
187
+ }
188
+ /**
189
+ * Ansible Vault–backed secret operations.
190
+ * Uses ansible-vault view/encrypt; vault password from config or ANSIBLE_VAULT_PASSWORD_FILE / ANSIBLE_VAULT_PASSWORD.
191
+ */
192
+ class AnsibleVaultSecrets {
193
+ config;
194
+ constructor(config) {
195
+ this.config = {
196
+ rootDir: config.rootDir ?? process.cwd(),
197
+ ...config,
198
+ };
199
+ }
200
+ /**
201
+ * Ensure vault file exists; if not, create an empty encrypted file
202
+ */
203
+ ensureVaultExists(vaultPath) {
204
+ if (fs.existsSync(vaultPath))
205
+ return;
206
+ const dir = path.dirname(vaultPath);
207
+ if (!fs.existsSync(dir))
208
+ fs.mkdirSync(dir, { recursive: true });
209
+ const tmp = path.join(os.tmpdir(), `factiii-vault-${Date.now()}.yml`);
210
+ fs.writeFileSync(tmp, '# Factiii secrets\n{}\n', 'utf8');
211
+ vaultEncrypt(tmp, vaultPath, this.config);
212
+ try {
213
+ fs.unlinkSync(tmp);
214
+ }
215
+ catch {
216
+ // ignore
217
+ }
218
+ }
219
+ /**
220
+ * Get decrypted vault content as key-value object (flat, for backwards compatibility)
221
+ */
222
+ async getDecrypted() {
223
+ const vaultPath = resolveVaultPath(this.config);
224
+ if (!fs.existsSync(vaultPath))
225
+ return {};
226
+ const content = vaultView(vaultPath, this.config);
227
+ return parseVaultContent(content);
228
+ }
229
+ /**
230
+ * Get decrypted vault content as full structure (supports nested objects)
231
+ */
232
+ async getDecryptedFull() {
233
+ const vaultPath = resolveVaultPath(this.config);
234
+ if (!fs.existsSync(vaultPath))
235
+ return {};
236
+ const content = vaultView(vaultPath, this.config);
237
+ return parseVaultContentFull(content);
238
+ }
239
+ /**
240
+ * Save vault content (full structure)
241
+ */
242
+ async saveVault(data) {
243
+ try {
244
+ const vaultPath = resolveVaultPath(this.config);
245
+ this.ensureVaultExists(vaultPath);
246
+ const yamlContent = js_yaml_1.default.dump(data, { lineWidth: -1, noRefs: true });
247
+ const tmpPath = path.join(os.tmpdir(), `factiii-vault-edit-${Date.now()}.yml`);
248
+ fs.writeFileSync(tmpPath, yamlContent, 'utf8');
249
+ vaultEncrypt(tmpPath, vaultPath, this.config);
250
+ try {
251
+ fs.unlinkSync(tmpPath);
252
+ }
253
+ catch {
254
+ // ignore
255
+ }
256
+ return { success: true };
257
+ }
258
+ catch (e) {
259
+ return {
260
+ success: false,
261
+ error: e instanceof Error ? e.message : String(e),
262
+ };
263
+ }
264
+ }
265
+ /**
266
+ * Set a secret in the vault file
267
+ */
268
+ async setSecret(name, value) {
269
+ try {
270
+ const vaultPath = resolveVaultPath(this.config);
271
+ this.ensureVaultExists(vaultPath);
272
+ const data = await this.getDecryptedFull();
273
+ data[name] = value;
274
+ return this.saveVault(data);
275
+ }
276
+ catch (e) {
277
+ return {
278
+ success: false,
279
+ error: e instanceof Error ? e.message : String(e),
280
+ };
281
+ }
282
+ }
283
+ /**
284
+ * Get a secret value from the vault
285
+ */
286
+ async getSecret(name) {
287
+ try {
288
+ const data = await this.getDecrypted();
289
+ const v = data[name];
290
+ return v ?? null;
291
+ }
292
+ catch {
293
+ return null;
294
+ }
295
+ }
296
+ /**
297
+ * Check which of the given secret names exist in the vault
298
+ */
299
+ async checkSecrets(names) {
300
+ try {
301
+ const data = await this.getDecrypted();
302
+ const status = {};
303
+ const missing = [];
304
+ for (const name of names) {
305
+ const exists = name in data && String(data[name] ?? '').trim().length > 0;
306
+ status[name] = exists;
307
+ if (!exists)
308
+ missing.push(name);
309
+ }
310
+ return { status, missing };
311
+ }
312
+ catch (e) {
313
+ return {
314
+ error: e instanceof Error ? e.message : String(e),
315
+ status: {},
316
+ missing: names,
317
+ };
318
+ }
319
+ }
320
+ // ============================================================
321
+ // ENVIRONMENT SECRETS - For deploy secrets feature
322
+ // ============================================================
323
+ /**
324
+ * Get SSH key for a stage
325
+ */
326
+ async getSSHKey(stage) {
327
+ const keyName = stage === 'staging' ? 'STAGING_SSH' : 'PROD_SSH';
328
+ return this.getSecret(keyName);
329
+ }
330
+ /**
331
+ * Get all environment secrets for a stage
332
+ */
333
+ async getEnvironmentSecrets(stage) {
334
+ try {
335
+ const data = await this.getDecryptedFull();
336
+ const envKey = `${stage}_envs`;
337
+ const envs = data[envKey];
338
+ if (typeof envs === 'object' && envs !== null && !Array.isArray(envs)) {
339
+ return envs;
340
+ }
341
+ return {};
342
+ }
343
+ catch {
344
+ return {};
345
+ }
346
+ }
347
+ /**
348
+ * Set an environment secret for a stage
349
+ */
350
+ async setEnvironmentSecret(stage, name, value) {
351
+ try {
352
+ const data = await this.getDecryptedFull();
353
+ const envKey = `${stage}_envs`;
354
+ // Initialize if not exists
355
+ if (!data[envKey] || typeof data[envKey] !== 'object') {
356
+ data[envKey] = {};
357
+ }
358
+ data[envKey][name] = value;
359
+ return this.saveVault(data);
360
+ }
361
+ catch (e) {
362
+ return {
363
+ success: false,
364
+ error: e instanceof Error ? e.message : String(e),
365
+ };
366
+ }
367
+ }
368
+ /**
369
+ * Set multiple environment secrets for a stage at once
370
+ */
371
+ async setEnvironmentSecrets(stage, secrets) {
372
+ try {
373
+ const data = await this.getDecryptedFull();
374
+ const envKey = `${stage}_envs`;
375
+ // Initialize if not exists
376
+ if (!data[envKey] || typeof data[envKey] !== 'object') {
377
+ data[envKey] = {};
378
+ }
379
+ // Merge secrets
380
+ Object.assign(data[envKey], secrets);
381
+ return this.saveVault(data);
382
+ }
383
+ catch (e) {
384
+ return {
385
+ success: false,
386
+ error: e instanceof Error ? e.message : String(e),
387
+ };
388
+ }
389
+ }
390
+ /**
391
+ * List all environment secret keys for a stage (not values)
392
+ */
393
+ async listEnvironmentSecretKeys(stage) {
394
+ const envs = await this.getEnvironmentSecrets(stage);
395
+ return Object.keys(envs);
396
+ }
397
+ /**
398
+ * Check if environment secrets exist for a stage
399
+ */
400
+ async hasEnvironmentSecrets(stage) {
401
+ const keys = await this.listEnvironmentSecretKeys(stage);
402
+ return keys.length > 0;
403
+ }
404
+ }
405
+ exports.AnsibleVaultSecrets = AnsibleVaultSecrets;
406
+ //# sourceMappingURL=ansible-vault-secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansible-vault-secrets.js","sourceRoot":"","sources":["../../src/utils/ansible-vault-secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Config Helpers
3
+ *
4
+ * Helper functions for working with factiii.yml config where
5
+ * environments are stored as top-level keys.
6
+ */
7
+ import type { FactiiiConfig, EnvironmentConfig } from '../types/index.js';
8
+ /**
9
+ * Reserved top-level config keys that are NOT environments
10
+ * Everything else at the top level is treated as an environment
11
+ */
12
+ export declare const RESERVED_CONFIG_KEYS: readonly ["name", "config_version", "github_repo", "ssl_email", "pipeline", "prisma_schema", "prisma_version", "container_exclusions", "trusted_plugins", "ansible"];
13
+ /**
14
+ * Stage type definition
15
+ */
16
+ export type Stage = 'dev' | 'secrets' | 'staging' | 'prod';
17
+ /**
18
+ * Extract environment configs from config object
19
+ * Environments = any top-level key NOT in reserved list
20
+ *
21
+ * @param config - The factiii.yml config object
22
+ * @returns Record of environment name to environment config
23
+ */
24
+ export declare function extractEnvironments(config: FactiiiConfig): Record<string, EnvironmentConfig>;
25
+ /**
26
+ * Map environment name to stage
27
+ *
28
+ * Rules:
29
+ * - 'dev' → 'dev'
30
+ * - 'secrets' → 'secrets'
31
+ * - starts with 'staging' or 'stage-' → 'staging'
32
+ * - starts with 'prod' or equals 'production' → 'prod'
33
+ *
34
+ * @param envName - Environment name (e.g., 'staging2', 'prod')
35
+ * @returns Stage name ('dev' | 'secrets' | 'staging' | 'prod')
36
+ * @throws Error if environment name doesn't match any pattern
37
+ */
38
+ export declare function getStageFromEnvironment(envName: string): Stage;
39
+ /**
40
+ * Get all environments that match a specific stage
41
+ *
42
+ * @param config - The factiii.yml config object
43
+ * @param stage - Stage to filter by ('staging' | 'prod')
44
+ * @returns Record of environment name to environment config for matching stage
45
+ */
46
+ export declare function getEnvironmentsForStage(config: FactiiiConfig, stage: Stage): Record<string, EnvironmentConfig>;
47
+ /**
48
+ * Get used server plugins from config
49
+ * Looks at all environments and returns unique server plugin names
50
+ *
51
+ * @param config - The factiii.yml config object
52
+ * @returns Set of server plugin names used across all environments
53
+ */
54
+ export declare function getUsedServerPlugins(config: FactiiiConfig): Set<string>;
55
+ /**
56
+ * Get used plugins from config
57
+ * Looks at all environment plugin configs and returns unique plugin names
58
+ *
59
+ * @param config - The factiii.yml config object
60
+ * @returns Set of plugin names used across all environments
61
+ */
62
+ export declare function getUsedPlugins(config: FactiiiConfig): Set<string>;
63
+ /**
64
+ * Validate environment name
65
+ * Checks that environment name doesn't conflict with reserved keys
66
+ * and follows naming conventions
67
+ *
68
+ * @param name - Environment name to validate
69
+ * @returns Error message if invalid, null if valid
70
+ */
71
+ export declare function validateEnvironmentName(name: string): string | null;
72
+ //# sourceMappingURL=config-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/config-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAU1E;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sKAWvB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAgBnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAU9D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,GACX,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAgBnC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAWvE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBnE"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ /**
3
+ * Config Helpers
4
+ *
5
+ * Helper functions for working with factiii.yml config where
6
+ * environments are stored as top-level keys.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RESERVED_CONFIG_KEYS = void 0;
10
+ exports.extractEnvironments = extractEnvironments;
11
+ exports.getStageFromEnvironment = getStageFromEnvironment;
12
+ exports.getEnvironmentsForStage = getEnvironmentsForStage;
13
+ exports.getUsedServerPlugins = getUsedServerPlugins;
14
+ exports.getUsedPlugins = getUsedPlugins;
15
+ exports.validateEnvironmentName = validateEnvironmentName;
16
+ // ============================================================
17
+ // CRITICAL: Config Environment Extraction
18
+ // ============================================================
19
+ // Why this exists: Environments are stored as top-level keys
20
+ // What breaks if changed: All environment iteration, plugin loading
21
+ // Dependencies: All CLI commands, plugins, generators
22
+ // ============================================================
23
+ /**
24
+ * Reserved top-level config keys that are NOT environments
25
+ * Everything else at the top level is treated as an environment
26
+ */
27
+ exports.RESERVED_CONFIG_KEYS = [
28
+ 'name',
29
+ 'config_version',
30
+ 'github_repo',
31
+ 'ssl_email',
32
+ 'pipeline',
33
+ 'prisma_schema',
34
+ 'prisma_version',
35
+ 'container_exclusions',
36
+ 'trusted_plugins',
37
+ 'ansible', // Ansible Vault configuration (not an environment)
38
+ ];
39
+ /**
40
+ * Extract environment configs from config object
41
+ * Environments = any top-level key NOT in reserved list
42
+ *
43
+ * @param config - The factiii.yml config object
44
+ * @returns Record of environment name to environment config
45
+ */
46
+ function extractEnvironments(config) {
47
+ const environments = {};
48
+ for (const [key, value] of Object.entries(config)) {
49
+ // Skip reserved keys
50
+ if (exports.RESERVED_CONFIG_KEYS.includes(key)) {
51
+ continue;
52
+ }
53
+ // Only include objects (not strings, arrays, or nulls)
54
+ if (typeof value === 'object' && !Array.isArray(value) && value !== null) {
55
+ environments[key] = value;
56
+ }
57
+ }
58
+ return environments;
59
+ }
60
+ /**
61
+ * Map environment name to stage
62
+ *
63
+ * Rules:
64
+ * - 'dev' → 'dev'
65
+ * - 'secrets' → 'secrets'
66
+ * - starts with 'staging' or 'stage-' → 'staging'
67
+ * - starts with 'prod' or equals 'production' → 'prod'
68
+ *
69
+ * @param envName - Environment name (e.g., 'staging2', 'prod')
70
+ * @returns Stage name ('dev' | 'secrets' | 'staging' | 'prod')
71
+ * @throws Error if environment name doesn't match any pattern
72
+ */
73
+ function getStageFromEnvironment(envName) {
74
+ if (envName === 'dev')
75
+ return 'dev';
76
+ if (envName === 'secrets')
77
+ return 'secrets';
78
+ if (envName.startsWith('staging') || envName.startsWith('stage-'))
79
+ return 'staging';
80
+ if (envName.startsWith('prod') || envName === 'production')
81
+ return 'prod';
82
+ throw new Error(`Cannot determine stage for environment: ${envName}. ` +
83
+ `Environment names must start with 'staging', 'prod', or be 'dev'/'secrets'.`);
84
+ }
85
+ /**
86
+ * Get all environments that match a specific stage
87
+ *
88
+ * @param config - The factiii.yml config object
89
+ * @param stage - Stage to filter by ('staging' | 'prod')
90
+ * @returns Record of environment name to environment config for matching stage
91
+ */
92
+ function getEnvironmentsForStage(config, stage) {
93
+ const allEnvs = extractEnvironments(config);
94
+ const filtered = {};
95
+ for (const [name, env] of Object.entries(allEnvs)) {
96
+ try {
97
+ if (getStageFromEnvironment(name) === stage) {
98
+ filtered[name] = env;
99
+ }
100
+ }
101
+ catch {
102
+ // Skip environments that don't match any stage pattern
103
+ continue;
104
+ }
105
+ }
106
+ return filtered;
107
+ }
108
+ /**
109
+ * Get used server plugins from config
110
+ * Looks at all environments and returns unique server plugin names
111
+ *
112
+ * @param config - The factiii.yml config object
113
+ * @returns Set of server plugin names used across all environments
114
+ */
115
+ function getUsedServerPlugins(config) {
116
+ const servers = new Set();
117
+ const environments = extractEnvironments(config);
118
+ for (const env of Object.values(environments)) {
119
+ if (env.server) {
120
+ servers.add(env.server);
121
+ }
122
+ }
123
+ return servers;
124
+ }
125
+ /**
126
+ * Get used plugins from config
127
+ * Looks at all environment plugin configs and returns unique plugin names
128
+ *
129
+ * @param config - The factiii.yml config object
130
+ * @returns Set of plugin names used across all environments
131
+ */
132
+ function getUsedPlugins(config) {
133
+ const plugins = new Set();
134
+ const environments = extractEnvironments(config);
135
+ for (const env of Object.values(environments)) {
136
+ if (env.plugins) {
137
+ for (const pluginName of Object.keys(env.plugins)) {
138
+ plugins.add(pluginName);
139
+ }
140
+ }
141
+ }
142
+ return plugins;
143
+ }
144
+ /**
145
+ * Validate environment name
146
+ * Checks that environment name doesn't conflict with reserved keys
147
+ * and follows naming conventions
148
+ *
149
+ * @param name - Environment name to validate
150
+ * @returns Error message if invalid, null if valid
151
+ */
152
+ function validateEnvironmentName(name) {
153
+ // Check for reserved key conflicts
154
+ if (exports.RESERVED_CONFIG_KEYS.includes(name)) {
155
+ return `Invalid environment name '${name}' - this is a reserved config field. Please use a different name (e.g., '${name}-env', 'staging', 'prod').`;
156
+ }
157
+ // Check for valid characters
158
+ if (!/^[a-z0-9-]+$/.test(name)) {
159
+ return `Invalid environment name '${name}' - must contain only lowercase letters, numbers, and hyphens.`;
160
+ }
161
+ // Must match a stage pattern
162
+ try {
163
+ getStageFromEnvironment(name);
164
+ }
165
+ catch (e) {
166
+ const message = e instanceof Error ? e.message : String(e);
167
+ return message;
168
+ }
169
+ return null;
170
+ }
171
+ //# sourceMappingURL=config-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-helpers.js","sourceRoot":"","sources":["../../src/utils/config-helpers.ts"],"names":[],"mappings":"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"}