@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.
- package/README.md +420 -0
- package/bin/factiii +229 -0
- package/dist/cli/check-config.d.ts +9 -0
- package/dist/cli/check-config.d.ts.map +1 -0
- package/dist/cli/check-config.js +19 -0
- package/dist/cli/check-config.js.map +1 -0
- package/dist/cli/deploy-secrets.d.ts +16 -0
- package/dist/cli/deploy-secrets.d.ts.map +1 -0
- package/dist/cli/deploy-secrets.js +227 -0
- package/dist/cli/deploy-secrets.js.map +1 -0
- package/dist/cli/deploy.d.ts +30 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +306 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/deployer.d.ts +13 -0
- package/dist/cli/deployer.d.ts.map +1 -0
- package/dist/cli/deployer.js +21 -0
- package/dist/cli/deployer.js.map +1 -0
- package/dist/cli/dev-sync.d.ts +30 -0
- package/dist/cli/dev-sync.d.ts.map +1 -0
- package/dist/cli/dev-sync.js +500 -0
- package/dist/cli/dev-sync.js.map +1 -0
- package/dist/cli/execute-plugin-command.d.ts +25 -0
- package/dist/cli/execute-plugin-command.d.ts.map +1 -0
- package/dist/cli/execute-plugin-command.js +237 -0
- package/dist/cli/execute-plugin-command.js.map +1 -0
- package/dist/cli/fix.d.ts +22 -0
- package/dist/cli/fix.d.ts.map +1 -0
- package/dist/cli/fix.js +267 -0
- package/dist/cli/fix.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +9 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +190 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/plugin-commands.d.ts +22 -0
- package/dist/cli/plugin-commands.d.ts.map +1 -0
- package/dist/cli/plugin-commands.js +121 -0
- package/dist/cli/plugin-commands.js.map +1 -0
- package/dist/cli/scan.d.ts +66 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +511 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/secrets.d.ts +19 -0
- package/dist/cli/secrets.d.ts.map +1 -0
- package/dist/cli/secrets.js +318 -0
- package/dist/cli/secrets.js.map +1 -0
- package/dist/cli/undeploy.d.ts +9 -0
- package/dist/cli/undeploy.d.ts.map +1 -0
- package/dist/cli/undeploy.js +95 -0
- package/dist/cli/undeploy.js.map +1 -0
- package/dist/cli/upgrade.d.ts +9 -0
- package/dist/cli/upgrade.d.ts.map +1 -0
- package/dist/cli/upgrade.js +24 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/cli/validate.d.ts +9 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +20 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/generators/generate-factiii-auto.d.ts +31 -0
- package/dist/generators/generate-factiii-auto.d.ts.map +1 -0
- package/dist/generators/generate-factiii-auto.js +251 -0
- package/dist/generators/generate-factiii-auto.js.map +1 -0
- package/dist/generators/generate-factiii-yml.d.ts +23 -0
- package/dist/generators/generate-factiii-yml.d.ts.map +1 -0
- package/dist/generators/generate-factiii-yml.js +228 -0
- package/dist/generators/generate-factiii-yml.js.map +1 -0
- package/dist/generators/index.d.ts +8 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +14 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/addons/server-mode/index.d.ts +57 -0
- package/dist/plugins/addons/server-mode/index.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/index.js +136 -0
- package/dist/plugins/addons/server-mode/index.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.d.ts +17 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.js +461 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts +12 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.js +246 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.d.ts +14 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.js +113 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.js.map +1 -0
- package/dist/plugins/approved.json +13 -0
- package/dist/plugins/frameworks/prisma-trpc/index.d.ts +65 -0
- package/dist/plugins/frameworks/prisma-trpc/index.d.ts.map +1 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js +668 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -0
- package/dist/plugins/index.d.ts +101 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +411 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/interfaces/addon.d.ts +43 -0
- package/dist/plugins/interfaces/addon.d.ts.map +1 -0
- package/dist/plugins/interfaces/addon.js +53 -0
- package/dist/plugins/interfaces/addon.js.map +1 -0
- package/dist/plugins/interfaces/framework.d.ts +43 -0
- package/dist/plugins/interfaces/framework.d.ts.map +1 -0
- package/dist/plugins/interfaces/framework.js +53 -0
- package/dist/plugins/interfaces/framework.js.map +1 -0
- package/dist/plugins/interfaces/index.d.ts +10 -0
- package/dist/plugins/interfaces/index.d.ts.map +1 -0
- package/dist/plugins/interfaces/index.js +17 -0
- package/dist/plugins/interfaces/index.js.map +1 -0
- package/dist/plugins/interfaces/pipeline.d.ts +78 -0
- package/dist/plugins/interfaces/pipeline.d.ts.map +1 -0
- package/dist/plugins/interfaces/pipeline.js +82 -0
- package/dist/plugins/interfaces/pipeline.js.map +1 -0
- package/dist/plugins/interfaces/server.d.ts +65 -0
- package/dist/plugins/interfaces/server.d.ts.map +1 -0
- package/dist/plugins/interfaces/server.js +72 -0
- package/dist/plugins/interfaces/server.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/ec2.d.ts +9 -0
- package/dist/plugins/pipelines/aws/configs/ec2.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/ec2.js +34 -0
- package/dist/plugins/pipelines/aws/configs/ec2.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.d.ts +13 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.js +86 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/index.d.ts +14 -0
- package/dist/plugins/pipelines/aws/configs/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/index.js +21 -0
- package/dist/plugins/pipelines/aws/configs/index.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/types.d.ts +36 -0
- package/dist/plugins/pipelines/aws/configs/types.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/types.js +9 -0
- package/dist/plugins/pipelines/aws/configs/types.js.map +1 -0
- package/dist/plugins/pipelines/aws/dev.d.ts +10 -0
- package/dist/plugins/pipelines/aws/dev.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/dev.js +70 -0
- package/dist/plugins/pipelines/aws/dev.js.map +1 -0
- package/dist/plugins/pipelines/aws/index.d.ts +118 -0
- package/dist/plugins/pipelines/aws/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/index.js +346 -0
- package/dist/plugins/pipelines/aws/index.js.map +1 -0
- package/dist/plugins/pipelines/aws/prod.d.ts +19 -0
- package/dist/plugins/pipelines/aws/prod.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/prod.js +362 -0
- package/dist/plugins/pipelines/aws/prod.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +7 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +31 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/config.d.ts +7 -0
- package/dist/plugins/pipelines/aws/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/config.js +134 -0
- package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts +65 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.js +221 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.js.map +1 -0
- package/dist/plugins/pipelines/factiii/index.d.ts +195 -0
- package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/index.js +862 -0
- package/dist/plugins/pipelines/factiii/index.js.map +1 -0
- package/dist/plugins/pipelines/factiii/prod.d.ts +17 -0
- package/dist/plugins/pipelines/factiii/prod.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/prod.js +282 -0
- package/dist/plugins/pipelines/factiii/prod.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.js +80 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +43 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js +237 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js +169 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -0
- package/dist/plugins/pipelines/factiii/staging.d.ts +25 -0
- package/dist/plugins/pipelines/factiii/staging.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/staging.js +223 -0
- package/dist/plugins/pipelines/factiii/staging.js.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/detection.d.ts +36 -0
- package/dist/plugins/pipelines/factiii/utils/detection.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/detection.js +140 -0
- package/dist/plugins/pipelines/factiii/utils/detection.js.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.d.ts +16 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.js +129 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.js.map +1 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-prod.yml +112 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-staging.yml +112 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-command.yml +130 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-deploy.yml +198 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-dev-sync.yml +179 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-fix.yml +176 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-scan.yml +176 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-undeploy.yml +95 -0
- package/dist/plugins/servers/amazon-linux/index.d.ts +93 -0
- package/dist/plugins/servers/amazon-linux/index.d.ts.map +1 -0
- package/dist/plugins/servers/amazon-linux/index.js +217 -0
- package/dist/plugins/servers/amazon-linux/index.js.map +1 -0
- package/dist/plugins/servers/mac/dev.d.ts +10 -0
- package/dist/plugins/servers/mac/dev.d.ts.map +1 -0
- package/dist/plugins/servers/mac/dev.js +71 -0
- package/dist/plugins/servers/mac/dev.js.map +1 -0
- package/dist/plugins/servers/mac/index.d.ts +101 -0
- package/dist/plugins/servers/mac/index.d.ts.map +1 -0
- package/dist/plugins/servers/mac/index.js +257 -0
- package/dist/plugins/servers/mac/index.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/config.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/config.js +168 -0
- package/dist/plugins/servers/mac/scanfix/config.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/containers.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/containers.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/containers.js +167 -0
- package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/system.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/system.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/system.js +144 -0
- package/dist/plugins/servers/mac/scanfix/system.js.map +1 -0
- package/dist/plugins/servers/mac/staging.d.ts +21 -0
- package/dist/plugins/servers/mac/staging.d.ts.map +1 -0
- package/dist/plugins/servers/mac/staging.js +708 -0
- package/dist/plugins/servers/mac/staging.js.map +1 -0
- package/dist/plugins/servers/ubuntu/index.d.ts +93 -0
- package/dist/plugins/servers/ubuntu/index.d.ts.map +1 -0
- package/dist/plugins/servers/ubuntu/index.js +224 -0
- package/dist/plugins/servers/ubuntu/index.js.map +1 -0
- package/dist/plugins/servers/windows/index.d.ts +90 -0
- package/dist/plugins/servers/windows/index.d.ts.map +1 -0
- package/dist/plugins/servers/windows/index.js +205 -0
- package/dist/plugins/servers/windows/index.js.map +1 -0
- package/dist/scanfix/commands/index.d.ts +27 -0
- package/dist/scanfix/commands/index.d.ts.map +1 -0
- package/dist/scanfix/commands/index.js +97 -0
- package/dist/scanfix/commands/index.js.map +1 -0
- package/dist/scanfix/commands/mac.d.ts +11 -0
- package/dist/scanfix/commands/mac.d.ts.map +1 -0
- package/dist/scanfix/commands/mac.js +31 -0
- package/dist/scanfix/commands/mac.js.map +1 -0
- package/dist/scanfix/commands/ubuntu.d.ts +11 -0
- package/dist/scanfix/commands/ubuntu.d.ts.map +1 -0
- package/dist/scanfix/commands/ubuntu.js +30 -0
- package/dist/scanfix/commands/ubuntu.js.map +1 -0
- package/dist/scanfix/fixes/certbot.d.ts +25 -0
- package/dist/scanfix/fixes/certbot.d.ts.map +1 -0
- package/dist/scanfix/fixes/certbot.js +136 -0
- package/dist/scanfix/fixes/certbot.js.map +1 -0
- package/dist/scanfix/fixes/docker.d.ts +29 -0
- package/dist/scanfix/fixes/docker.d.ts.map +1 -0
- package/dist/scanfix/fixes/docker.js +149 -0
- package/dist/scanfix/fixes/docker.js.map +1 -0
- package/dist/scanfix/fixes/git.d.ts +20 -0
- package/dist/scanfix/fixes/git.d.ts.map +1 -0
- package/dist/scanfix/fixes/git.js +71 -0
- package/dist/scanfix/fixes/git.js.map +1 -0
- package/dist/scanfix/fixes/index.d.ts +11 -0
- package/dist/scanfix/fixes/index.d.ts.map +1 -0
- package/dist/scanfix/fixes/index.js +27 -0
- package/dist/scanfix/fixes/index.js.map +1 -0
- package/dist/scanfix/fixes/node.d.ts +20 -0
- package/dist/scanfix/fixes/node.d.ts.map +1 -0
- package/dist/scanfix/fixes/node.js +71 -0
- package/dist/scanfix/fixes/node.js.map +1 -0
- package/dist/scanfix/fixes/pnpm.d.ts +20 -0
- package/dist/scanfix/fixes/pnpm.d.ts.map +1 -0
- package/dist/scanfix/fixes/pnpm.js +122 -0
- package/dist/scanfix/fixes/pnpm.js.map +1 -0
- package/dist/scanfix/index.d.ts +23 -0
- package/dist/scanfix/index.d.ts.map +1 -0
- package/dist/scanfix/index.js +44 -0
- package/dist/scanfix/index.js.map +1 -0
- package/dist/scanfix/platform.d.ts +20 -0
- package/dist/scanfix/platform.d.ts.map +1 -0
- package/dist/scanfix/platform.js +48 -0
- package/dist/scanfix/platform.js.map +1 -0
- package/dist/scanfix/ssl-cert-helper.d.ts +27 -0
- package/dist/scanfix/ssl-cert-helper.d.ts.map +1 -0
- package/dist/scanfix/ssl-cert-helper.js +117 -0
- package/dist/scanfix/ssl-cert-helper.js.map +1 -0
- package/dist/scanfix/types.d.ts +27 -0
- package/dist/scanfix/types.d.ts.map +1 -0
- package/dist/scanfix/types.js +8 -0
- package/dist/scanfix/types.js.map +1 -0
- package/dist/scripts/check-existing-secrets.d.ts +6 -0
- package/dist/scripts/check-existing-secrets.d.ts.map +1 -0
- package/dist/scripts/check-existing-secrets.js +86 -0
- package/dist/scripts/check-existing-secrets.js.map +1 -0
- package/dist/scripts/generate-all.d.ts +40 -0
- package/dist/scripts/generate-all.d.ts.map +1 -0
- package/dist/scripts/generate-all.js +373 -0
- package/dist/scripts/generate-all.js.map +1 -0
- package/dist/scripts/get-repo-name.d.ts +6 -0
- package/dist/scripts/get-repo-name.d.ts.map +1 -0
- package/dist/scripts/get-repo-name.js +54 -0
- package/dist/scripts/get-repo-name.js.map +1 -0
- package/dist/scripts/index.d.ts +7 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +14 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/validate-env-files.d.ts +6 -0
- package/dist/scripts/validate-env-files.d.ts.map +1 -0
- package/dist/scripts/validate-env-files.js +126 -0
- package/dist/scripts/validate-env-files.js.map +1 -0
- package/dist/scripts/validate-example-values.d.ts +8 -0
- package/dist/scripts/validate-example-values.d.ts.map +1 -0
- package/dist/scripts/validate-example-values.js +88 -0
- package/dist/scripts/validate-example-values.js.map +1 -0
- package/dist/scripts/validate-factiii-yml.d.ts +6 -0
- package/dist/scripts/validate-factiii-yml.d.ts.map +1 -0
- package/dist/scripts/validate-factiii-yml.js +71 -0
- package/dist/scripts/validate-factiii-yml.js.map +1 -0
- package/dist/types/cli.d.ts +138 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +8 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +113 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +8 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +25 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plugin.d.ts +352 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +8 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/utils/ansible-vault-secrets.d.ts +95 -0
- package/dist/utils/ansible-vault-secrets.d.ts.map +1 -0
- package/dist/utils/ansible-vault-secrets.js +406 -0
- package/dist/utils/ansible-vault-secrets.js.map +1 -0
- package/dist/utils/config-helpers.d.ts +72 -0
- package/dist/utils/config-helpers.d.ts.map +1 -0
- package/dist/utils/config-helpers.js +171 -0
- package/dist/utils/config-helpers.js.map +1 -0
- package/dist/utils/config-schema.d.ts +17 -0
- package/dist/utils/config-schema.d.ts.map +1 -0
- package/dist/utils/config-schema.js +100 -0
- package/dist/utils/config-schema.js.map +1 -0
- package/dist/utils/config-validator.d.ts +29 -0
- package/dist/utils/config-validator.d.ts.map +1 -0
- package/dist/utils/config-validator.js +146 -0
- package/dist/utils/config-validator.js.map +1 -0
- package/dist/utils/deployment-report.d.ts +100 -0
- package/dist/utils/deployment-report.d.ts.map +1 -0
- package/dist/utils/deployment-report.js +225 -0
- package/dist/utils/deployment-report.js.map +1 -0
- package/dist/utils/dns-validator.d.ts +19 -0
- package/dist/utils/dns-validator.d.ts.map +1 -0
- package/dist/utils/dns-validator.js +94 -0
- package/dist/utils/dns-validator.js.map +1 -0
- package/dist/utils/env-validator.d.ts +108 -0
- package/dist/utils/env-validator.d.ts.map +1 -0
- package/dist/utils/env-validator.js +342 -0
- package/dist/utils/env-validator.js.map +1 -0
- package/dist/utils/github-workflow-monitor.d.ts +49 -0
- package/dist/utils/github-workflow-monitor.d.ts.map +1 -0
- package/dist/utils/github-workflow-monitor.js +145 -0
- package/dist/utils/github-workflow-monitor.js.map +1 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +48 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/secret-prompts.d.ts +67 -0
- package/dist/utils/secret-prompts.d.ts.map +1 -0
- package/dist/utils/secret-prompts.js +369 -0
- package/dist/utils/secret-prompts.js.map +1 -0
- package/dist/utils/server-check.d.ts +43 -0
- package/dist/utils/server-check.d.ts.map +1 -0
- package/dist/utils/server-check.js +397 -0
- package/dist/utils/server-check.js.map +1 -0
- package/dist/utils/ssh-deploy.d.ts +70 -0
- package/dist/utils/ssh-deploy.d.ts.map +1 -0
- package/dist/utils/ssh-deploy.js +268 -0
- package/dist/utils/ssh-deploy.js.map +1 -0
- package/dist/utils/ssh-helper.d.ts +40 -0
- package/dist/utils/ssh-helper.d.ts.map +1 -0
- package/dist/utils/ssh-helper.js +221 -0
- package/dist/utils/ssh-helper.js.map +1 -0
- package/dist/utils/template-generator.d.ts +42 -0
- package/dist/utils/template-generator.d.ts.map +1 -0
- package/dist/utils/template-generator.js +223 -0
- package/dist/utils/template-generator.js.map +1 -0
- package/dist/utils/version-check.d.ts +69 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +211 -0
- package/dist/utils/version-check.js.map +1 -0
- 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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"}
|