@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,19 @@
1
+ /**
2
+ * DNS Validator
3
+ *
4
+ * Utilities for validating and resolving hostnames.
5
+ */
6
+ /**
7
+ * Check if a hostname is resolvable
8
+ */
9
+ export declare function isHostnameResolvable(hostname: string): Promise<boolean>;
10
+ /**
11
+ * Generate common hostname variations to check
12
+ * e.g., "staging-api.domain.com" -> ["api-staging.domain.com", "staging.api.domain.com"]
13
+ */
14
+ export declare function generateHostnameVariations(hostname: string): string[];
15
+ /**
16
+ * Find a resolvable alternative hostname
17
+ */
18
+ export declare function findResolvableAlternative(hostname: string): Promise<string | null>;
19
+ //# sourceMappingURL=dns-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-validator.d.ts","sourceRoot":"","sources":["../../src/utils/dns-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBrE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * DNS Validator
4
+ *
5
+ * Utilities for validating and resolving hostnames.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.isHostnameResolvable = isHostnameResolvable;
42
+ exports.generateHostnameVariations = generateHostnameVariations;
43
+ exports.findResolvableAlternative = findResolvableAlternative;
44
+ const dns = __importStar(require("dns"));
45
+ const dnsPromises = dns.promises;
46
+ /**
47
+ * Check if a hostname is resolvable
48
+ */
49
+ async function isHostnameResolvable(hostname) {
50
+ try {
51
+ await dnsPromises.lookup(hostname);
52
+ return true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Generate common hostname variations to check
60
+ * e.g., "staging-api.domain.com" -> ["api-staging.domain.com", "staging.api.domain.com"]
61
+ */
62
+ function generateHostnameVariations(hostname) {
63
+ const parts = hostname.split('.');
64
+ if (parts.length < 3)
65
+ return [];
66
+ const subdomain = parts[0];
67
+ const domain = parts.slice(1).join('.');
68
+ if (!subdomain)
69
+ return [];
70
+ const variations = [];
71
+ // Check for hyphenated subdomains
72
+ if (subdomain.includes('-')) {
73
+ const subParts = subdomain.split('-');
74
+ // Reverse order: "staging-api" -> "api-staging"
75
+ const reversed = [...subParts].reverse();
76
+ variations.push(`${reversed.join('-')}.${domain}`);
77
+ // Dot notation: "staging-api" -> "staging.api"
78
+ variations.push(`${subParts.join('.')}.${domain}`);
79
+ }
80
+ return variations;
81
+ }
82
+ /**
83
+ * Find a resolvable alternative hostname
84
+ */
85
+ async function findResolvableAlternative(hostname) {
86
+ const variations = generateHostnameVariations(hostname);
87
+ for (const variation of variations) {
88
+ if (await isHostnameResolvable(variation)) {
89
+ return variation;
90
+ }
91
+ }
92
+ return null;
93
+ }
94
+ //# sourceMappingURL=dns-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-validator.js","sourceRoot":"","sources":["../../src/utils/dns-validator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,oDAOC;AAMD,gEAsBC;AAKD,8DAYC;AA3DD,yCAA2B;AAE3B,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;AAEjC;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IACzD,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,QAAgB;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,kCAAkC;IAClC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QACnD,+CAA+C;QAC/C,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,yBAAyB,CAC7C,QAAgB;IAEhB,MAAM,UAAU,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAExD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,MAAM,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Environment File Validator
3
+ *
4
+ * Utilities for parsing and validating .env files.
5
+ */
6
+ import type { FactiiiConfig } from '../types/index.js';
7
+ interface EnvVars {
8
+ [key: string]: string;
9
+ }
10
+ interface KeyComparison {
11
+ match: boolean;
12
+ missing: string[];
13
+ extra: string[];
14
+ }
15
+ interface EmptyCheck {
16
+ allFilled: boolean;
17
+ empty: string[];
18
+ }
19
+ interface PlaceholderInfo {
20
+ key: string;
21
+ value: string;
22
+ }
23
+ interface PlaceholderCheck {
24
+ hasPlaceholders: boolean;
25
+ placeholders: PlaceholderInfo[];
26
+ }
27
+ interface ProdDifferences {
28
+ changed: string[];
29
+ onlyLocal: string[];
30
+ onlyGitHub: string[];
31
+ }
32
+ interface GitHubSecrets {
33
+ PROD_ENVS?: EnvVars;
34
+ }
35
+ interface AutoConfig {
36
+ isStagingSecret?: boolean;
37
+ allowIdenticalEnvVars?: string[];
38
+ }
39
+ interface ConfigWithAuto extends FactiiiConfig {
40
+ auto?: AutoConfig;
41
+ }
42
+ interface EnvValidationResult {
43
+ devExists: boolean;
44
+ stagingExists: boolean;
45
+ prodExists: boolean;
46
+ prodLocal: boolean;
47
+ prodGitHub: boolean;
48
+ prodGitignored: boolean;
49
+ stagingGitignored: boolean;
50
+ keysMatch: boolean;
51
+ allFilled: boolean;
52
+ warnings: string[];
53
+ errors: string[];
54
+ dev: EnvVars | null;
55
+ staging: EnvVars | null;
56
+ prod: EnvVars | null;
57
+ prodGitHubData?: EnvVars;
58
+ prodDifferences?: ProdDifferences;
59
+ }
60
+ /**
61
+ * Parse .env file into key-value object
62
+ * @param filepath - Path to .env file
63
+ * @returns Parsed key-value pairs or null if file doesn't exist
64
+ */
65
+ export declare function parseEnvFile(filepath: string): EnvVars | null;
66
+ /**
67
+ * Check if value looks like a placeholder
68
+ * @param value - Environment variable value
69
+ */
70
+ export declare function looksLikePlaceholder(value: string): boolean;
71
+ /**
72
+ * Check if file is in .gitignore
73
+ * @param rootDir - Root directory
74
+ * @param filename - Filename to check
75
+ */
76
+ export declare function isGitignored(rootDir: string, filename: string): boolean;
77
+ /**
78
+ * Compare keys between two env objects
79
+ * @param expected - Expected keys (from .env.example)
80
+ * @param actual - Actual keys to validate
81
+ */
82
+ export declare function compareEnvKeys(expected: EnvVars, actual: EnvVars): KeyComparison;
83
+ /**
84
+ * Check if env values are filled (not empty)
85
+ * @param env - Environment variables
86
+ */
87
+ export declare function checkValuesNotEmpty(env: EnvVars): EmptyCheck;
88
+ /**
89
+ * Check for placeholder values
90
+ * @param env - Environment variables
91
+ */
92
+ export declare function checkForPlaceholders(env: EnvVars): PlaceholderCheck;
93
+ /**
94
+ * Compare values between environments
95
+ * @param env1 - First environment
96
+ * @param env2 - Second environment
97
+ * @returns Keys with matching values
98
+ */
99
+ export declare function findMatchingValues(env1: EnvVars, env2: EnvVars): string[];
100
+ /**
101
+ * Validate environment file setup
102
+ * @param rootDir - Root directory
103
+ * @param config - Parsed factiii.yml config
104
+ * @param githubSecrets - Optional GitHub secrets for comparison
105
+ */
106
+ export declare function validateEnvFiles(rootDir: string, config?: ConfigWithAuto, githubSecrets?: GitHubSecrets | null): EnvValidationResult;
107
+ export {};
108
+ //# sourceMappingURL=env-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-validator.d.ts","sourceRoot":"","sources":["../../src/utils/env-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,UAAU,OAAO;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,UAAU,cAAe,SAAQ,aAAa;IAC5C,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA4B7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY3D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgCvE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAYhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAa5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAanE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAUzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,cAAqC,EAC7C,aAAa,GAAE,aAAa,GAAG,IAAW,GACzC,mBAAmB,CA6KrB"}
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ /**
3
+ * Environment File Validator
4
+ *
5
+ * Utilities for parsing and validating .env files.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.parseEnvFile = parseEnvFile;
42
+ exports.looksLikePlaceholder = looksLikePlaceholder;
43
+ exports.isGitignored = isGitignored;
44
+ exports.compareEnvKeys = compareEnvKeys;
45
+ exports.checkValuesNotEmpty = checkValuesNotEmpty;
46
+ exports.checkForPlaceholders = checkForPlaceholders;
47
+ exports.findMatchingValues = findMatchingValues;
48
+ exports.validateEnvFiles = validateEnvFiles;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ /**
52
+ * Parse .env file into key-value object
53
+ * @param filepath - Path to .env file
54
+ * @returns Parsed key-value pairs or null if file doesn't exist
55
+ */
56
+ function parseEnvFile(filepath) {
57
+ if (!fs.existsSync(filepath)) {
58
+ return null;
59
+ }
60
+ const content = fs.readFileSync(filepath, 'utf8');
61
+ const env = {};
62
+ const lines = content.split('\n');
63
+ for (const line of lines) {
64
+ // Skip empty lines and comments
65
+ const trimmed = line.trim();
66
+ if (!trimmed || trimmed.startsWith('#')) {
67
+ continue;
68
+ }
69
+ // Parse KEY=VALUE
70
+ const match = trimmed.match(/^([^=]+)=(.*)$/);
71
+ if (match) {
72
+ const key = match[1]?.trim();
73
+ const value = match[2]?.trim();
74
+ if (key) {
75
+ env[key] = value ?? '';
76
+ }
77
+ }
78
+ }
79
+ return env;
80
+ }
81
+ /**
82
+ * Check if value looks like a placeholder
83
+ * @param value - Environment variable value
84
+ */
85
+ function looksLikePlaceholder(value) {
86
+ if (!value || value === '') {
87
+ return true;
88
+ }
89
+ return (value.includes('EXAMPLE') ||
90
+ value.includes('<FILL') ||
91
+ value.includes('your-') ||
92
+ value.includes('TODO') ||
93
+ value.includes('CHANGE_ME'));
94
+ }
95
+ /**
96
+ * Check if file is in .gitignore
97
+ * @param rootDir - Root directory
98
+ * @param filename - Filename to check
99
+ */
100
+ function isGitignored(rootDir, filename) {
101
+ const gitignorePath = path.join(rootDir, '.gitignore');
102
+ if (!fs.existsSync(gitignorePath)) {
103
+ return false;
104
+ }
105
+ const gitignore = fs.readFileSync(gitignorePath, 'utf8');
106
+ const lines = gitignore.split('\n');
107
+ for (const line of lines) {
108
+ const trimmed = line.trim();
109
+ if (!trimmed || trimmed.startsWith('#')) {
110
+ continue;
111
+ }
112
+ // Check exact match or pattern match
113
+ if (trimmed === filename) {
114
+ return true;
115
+ }
116
+ // Check pattern match (e.g., .env.* matches .env.prod)
117
+ if (trimmed.includes('*')) {
118
+ const pattern = trimmed.replace(/\*/g, '.*');
119
+ const regex = new RegExp(`^${pattern}$`);
120
+ if (regex.test(filename)) {
121
+ return true;
122
+ }
123
+ }
124
+ }
125
+ return false;
126
+ }
127
+ /**
128
+ * Compare keys between two env objects
129
+ * @param expected - Expected keys (from .env.example)
130
+ * @param actual - Actual keys to validate
131
+ */
132
+ function compareEnvKeys(expected, actual) {
133
+ const expectedKeys = Object.keys(expected);
134
+ const actualKeys = Object.keys(actual);
135
+ const missing = expectedKeys.filter((key) => !actualKeys.includes(key));
136
+ const extra = actualKeys.filter((key) => !expectedKeys.includes(key));
137
+ return {
138
+ match: missing.length === 0 && extra.length === 0,
139
+ missing,
140
+ extra,
141
+ };
142
+ }
143
+ /**
144
+ * Check if env values are filled (not empty)
145
+ * @param env - Environment variables
146
+ */
147
+ function checkValuesNotEmpty(env) {
148
+ const empty = [];
149
+ for (const [key, value] of Object.entries(env)) {
150
+ if (!value || value.trim() === '') {
151
+ empty.push(key);
152
+ }
153
+ }
154
+ return {
155
+ allFilled: empty.length === 0,
156
+ empty,
157
+ };
158
+ }
159
+ /**
160
+ * Check for placeholder values
161
+ * @param env - Environment variables
162
+ */
163
+ function checkForPlaceholders(env) {
164
+ const placeholders = [];
165
+ for (const [key, value] of Object.entries(env)) {
166
+ if (looksLikePlaceholder(value)) {
167
+ placeholders.push({ key, value });
168
+ }
169
+ }
170
+ return {
171
+ hasPlaceholders: placeholders.length > 0,
172
+ placeholders,
173
+ };
174
+ }
175
+ /**
176
+ * Compare values between environments
177
+ * @param env1 - First environment
178
+ * @param env2 - Second environment
179
+ * @returns Keys with matching values
180
+ */
181
+ function findMatchingValues(env1, env2) {
182
+ const matching = [];
183
+ for (const key of Object.keys(env1)) {
184
+ if (env2[key] && env1[key] === env2[key]) {
185
+ matching.push(key);
186
+ }
187
+ }
188
+ return matching;
189
+ }
190
+ /**
191
+ * Validate environment file setup
192
+ * @param rootDir - Root directory
193
+ * @param config - Parsed factiii.yml config
194
+ * @param githubSecrets - Optional GitHub secrets for comparison
195
+ */
196
+ function validateEnvFiles(rootDir, config = {}, githubSecrets = null) {
197
+ const results = {
198
+ devExists: false,
199
+ stagingExists: false,
200
+ prodExists: false,
201
+ prodLocal: false,
202
+ prodGitHub: false,
203
+ prodGitignored: false,
204
+ stagingGitignored: false,
205
+ keysMatch: true,
206
+ allFilled: true,
207
+ warnings: [],
208
+ errors: [],
209
+ dev: null,
210
+ staging: null,
211
+ prod: null,
212
+ };
213
+ // Parse .env files
214
+ const devPath = path.join(rootDir, '.env.example');
215
+ const stagingPath = path.join(rootDir, '.env.staging');
216
+ const prodPath = path.join(rootDir, '.env.prod');
217
+ results.dev = parseEnvFile(devPath);
218
+ results.staging = parseEnvFile(stagingPath);
219
+ results.prod = parseEnvFile(prodPath);
220
+ results.devExists = results.dev !== null;
221
+ results.stagingExists = results.staging !== null;
222
+ results.prodLocal = results.prod !== null;
223
+ // Check if prod exists in GitHub
224
+ if (githubSecrets?.PROD_ENVS) {
225
+ results.prodGitHub = true;
226
+ results.prodGitHubData = githubSecrets.PROD_ENVS;
227
+ }
228
+ results.prodExists = results.prodLocal || results.prodGitHub;
229
+ // Critical: .env.example must exist
230
+ if (!results.devExists) {
231
+ results.errors.push('.env.example not found (required as template)');
232
+ return results;
233
+ }
234
+ // Critical: .env.staging must exist
235
+ if (!results.stagingExists) {
236
+ results.errors.push('.env.staging not found (required)');
237
+ }
238
+ // Warning: .env.prod missing (OK if in GitHub)
239
+ if (!results.prodExists) {
240
+ results.errors.push('.env.prod not found locally or in GitHub Secrets');
241
+ }
242
+ else if (!results.prodLocal && results.prodGitHub) {
243
+ results.warnings.push('.env.prod not local, using GitHub Secrets (OK for security)');
244
+ }
245
+ // Validate .gitignore
246
+ if (results.prodLocal) {
247
+ results.prodGitignored = isGitignored(rootDir, '.env.prod');
248
+ if (!results.prodGitignored) {
249
+ results.errors.push('.env.prod MUST be in .gitignore');
250
+ }
251
+ }
252
+ const isStagingSecret = config.auto?.isStagingSecret !== false; // default true
253
+ results.stagingGitignored = isGitignored(rootDir, '.env.staging');
254
+ if (isStagingSecret && !results.stagingGitignored) {
255
+ results.warnings.push('.env.staging not gitignored (isStagingSecret: true)');
256
+ }
257
+ // Validate staging keys match dev
258
+ if (results.stagingExists && results.dev && results.staging) {
259
+ const keyCompare = compareEnvKeys(results.dev, results.staging);
260
+ if (!keyCompare.match) {
261
+ results.keysMatch = false;
262
+ if (keyCompare.missing.length > 0) {
263
+ results.errors.push(`.env.staging missing keys: ${keyCompare.missing.join(', ')}`);
264
+ }
265
+ if (keyCompare.extra.length > 0) {
266
+ results.warnings.push(`.env.staging extra keys: ${keyCompare.extra.join(', ')}`);
267
+ }
268
+ }
269
+ // Check values not empty
270
+ const valueCheck = checkValuesNotEmpty(results.staging);
271
+ if (!valueCheck.allFilled) {
272
+ results.allFilled = false;
273
+ results.errors.push(`.env.staging empty values: ${valueCheck.empty.join(', ')}`);
274
+ }
275
+ // Check for placeholders
276
+ const placeholderCheck = checkForPlaceholders(results.staging);
277
+ if (placeholderCheck.hasPlaceholders) {
278
+ results.warnings.push(`.env.staging has placeholder values: ${placeholderCheck.placeholders.map((p) => p.key).join(', ')}`);
279
+ }
280
+ }
281
+ // Validate prod keys (local or GitHub)
282
+ const prodEnv = results.prodLocal ? results.prod : results.prodGitHubData;
283
+ if (prodEnv && results.dev) {
284
+ const keyCompare = compareEnvKeys(results.dev, prodEnv);
285
+ if (!keyCompare.match) {
286
+ results.keysMatch = false;
287
+ const source = results.prodLocal ? 'local' : 'GitHub';
288
+ if (keyCompare.missing.length > 0) {
289
+ results.errors.push(`.env.prod (${source}) missing keys: ${keyCompare.missing.join(', ')}`);
290
+ }
291
+ if (keyCompare.extra.length > 0) {
292
+ results.warnings.push(`.env.prod (${source}) extra keys: ${keyCompare.extra.join(', ')}`);
293
+ }
294
+ }
295
+ // Check values not empty
296
+ const valueCheck = checkValuesNotEmpty(prodEnv);
297
+ if (!valueCheck.allFilled) {
298
+ results.allFilled = false;
299
+ const source = results.prodLocal ? 'local' : 'GitHub';
300
+ results.errors.push(`.env.prod (${source}) empty values: ${valueCheck.empty.join(', ')}`);
301
+ }
302
+ // Check for placeholders
303
+ const placeholderCheck = checkForPlaceholders(prodEnv);
304
+ if (placeholderCheck.hasPlaceholders) {
305
+ const source = results.prodLocal ? 'local' : 'GitHub';
306
+ results.warnings.push(`.env.prod (${source}) has placeholder values: ${placeholderCheck.placeholders.map((p) => p.key).join(', ')}`);
307
+ }
308
+ }
309
+ // Compare staging vs prod values (should be different)
310
+ if (results.staging && prodEnv) {
311
+ const matching = findMatchingValues(results.staging, prodEnv);
312
+ const allowedIdentical = config.auto?.allowIdenticalEnvVars ?? [];
313
+ const actualWarnings = matching.filter((key) => !allowedIdentical.includes(key));
314
+ if (actualWarnings.length > 0) {
315
+ results.warnings.push(`Staging/prod values identical (should differ): ${actualWarnings.join(', ')}`);
316
+ }
317
+ }
318
+ // Compare local prod vs GitHub prod
319
+ if (results.prodLocal && results.prodGitHub && results.prod && results.prodGitHubData) {
320
+ const localKeys = Object.keys(results.prod);
321
+ const githubKeys = Object.keys(results.prodGitHubData);
322
+ const differences = [];
323
+ for (const key of localKeys) {
324
+ if (results.prod[key] !== results.prodGitHubData[key]) {
325
+ differences.push(key);
326
+ }
327
+ }
328
+ // Check for keys only in one or the other
329
+ const onlyLocal = localKeys.filter((k) => !githubKeys.includes(k));
330
+ const onlyGitHub = githubKeys.filter((k) => !localKeys.includes(k));
331
+ if (differences.length > 0 || onlyLocal.length > 0 || onlyGitHub.length > 0) {
332
+ results.warnings.push('Local .env.prod differs from GitHub PROD_ENVS');
333
+ results.prodDifferences = {
334
+ changed: differences,
335
+ onlyLocal,
336
+ onlyGitHub,
337
+ };
338
+ }
339
+ }
340
+ return results;
341
+ }
342
+ //# sourceMappingURL=env-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-validator.js","sourceRoot":"","sources":["../../src/utils/env-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * GitHub Workflow Monitor
3
+ *
4
+ * Utility for triggering GitHub Actions workflows and monitoring their progress.
5
+ * Uses GitHub CLI (gh) for authentication and API access.
6
+ */
7
+ interface WorkflowRunStatus {
8
+ status: string;
9
+ conclusion: string;
10
+ url: string;
11
+ }
12
+ interface TriggerAndWatchResult {
13
+ success: boolean;
14
+ url?: string;
15
+ runId?: number;
16
+ error?: string;
17
+ }
18
+ interface StreamLogsResult {
19
+ success: boolean;
20
+ exitCode?: number;
21
+ }
22
+ declare class GitHubWorkflowMonitor {
23
+ constructor();
24
+ /**
25
+ * Check if GitHub CLI is installed and authenticated
26
+ */
27
+ private checkGhCli;
28
+ /**
29
+ * Trigger a workflow and return the run ID
30
+ *
31
+ * @param workflowFile - The workflow file name (e.g., 'factiii-scan-staging.yml')
32
+ * @param environment - Optional environment name (only used for workflows that accept inputs)
33
+ */
34
+ triggerWorkflow(workflowFile: string, environment?: string): Promise<number>;
35
+ /**
36
+ * Stream logs from a workflow run
37
+ */
38
+ streamLogs(runId: number): Promise<StreamLogsResult>;
39
+ /**
40
+ * Get the status of a workflow run
41
+ */
42
+ getRunStatus(runId: number): Promise<WorkflowRunStatus>;
43
+ /**
44
+ * Trigger a workflow and wait for completion with live logs
45
+ */
46
+ triggerAndWatch(workflowFile: string, environment?: string): Promise<TriggerAndWatchResult>;
47
+ }
48
+ export default GitHubWorkflowMonitor;
49
+ //# sourceMappingURL=github-workflow-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-workflow-monitor.d.ts","sourceRoot":"","sources":["../../src/utils/github-workflow-monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,qBAAqB;;IAKzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;;;;OAKG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6ClF;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuB1D;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAe7D;;OAEG;IACG,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC;CAiClC;AAED,eAAe,qBAAqB,CAAC"}