@factiii/stack 0.1.181 → 0.1.183

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 (50) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +441 -441
  3. package/bin/stack +300 -300
  4. package/dist/cli/dev-sync.js +16 -16
  5. package/dist/cli/fix.d.ts.map +1 -1
  6. package/dist/cli/fix.js +18 -0
  7. package/dist/cli/fix.js.map +1 -1
  8. package/dist/plugins/addons/auth/index.js +7 -7
  9. package/dist/plugins/addons/vercel/index.js +9 -9
  10. package/dist/plugins/addons/vercel/scanfix/config.js +10 -10
  11. package/dist/plugins/addons/vercel/scanfix/token.js +15 -15
  12. package/dist/plugins/approved.json +13 -13
  13. package/dist/plugins/pipelines/aws/index.js +12 -12
  14. package/dist/plugins/pipelines/aws/policies/bootstrap-policy.json +135 -135
  15. package/dist/plugins/pipelines/aws/prod.js +1 -1
  16. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts +10 -8
  17. package/dist/plugins/pipelines/aws/scanfix/credentials.d.ts.map +1 -1
  18. package/dist/plugins/pipelines/aws/scanfix/credentials.js +267 -204
  19. package/dist/plugins/pipelines/aws/scanfix/credentials.js.map +1 -1
  20. package/dist/plugins/pipelines/aws/scanfix/iam.d.ts.map +1 -1
  21. package/dist/plugins/pipelines/aws/scanfix/iam.js +120 -38
  22. package/dist/plugins/pipelines/aws/scanfix/iam.js.map +1 -1
  23. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts +22 -1
  24. package/dist/plugins/pipelines/aws/utils/aws-helpers.d.ts.map +1 -1
  25. package/dist/plugins/pipelines/aws/utils/aws-helpers.js +110 -16
  26. package/dist/plugins/pipelines/aws/utils/aws-helpers.js.map +1 -1
  27. package/dist/plugins/pipelines/factiii/prod.js +21 -21
  28. package/dist/plugins/pipelines/factiii/scanfix/port-convention.js +6 -6
  29. package/dist/plugins/pipelines/factiii/scanfix/port-convention.js.map +1 -1
  30. package/dist/plugins/pipelines/factiii/staging.js +23 -23
  31. package/dist/plugins/pipelines/factiii/workflows/stack-ci.yml +75 -75
  32. package/dist/plugins/pipelines/factiii/workflows/stack-cicd-prod.yml +73 -73
  33. package/dist/plugins/servers/amazon-linux/index.d.ts +1 -0
  34. package/dist/plugins/servers/amazon-linux/index.d.ts.map +1 -1
  35. package/dist/plugins/servers/amazon-linux/index.js +16 -16
  36. package/dist/plugins/servers/mac/index.d.ts +1 -0
  37. package/dist/plugins/servers/mac/index.d.ts.map +1 -1
  38. package/dist/plugins/servers/mac/index.js +12 -12
  39. package/dist/plugins/servers/mac/staging.js +2 -2
  40. package/dist/plugins/servers/ubuntu/index.d.ts +1 -0
  41. package/dist/plugins/servers/ubuntu/index.d.ts.map +1 -1
  42. package/dist/plugins/servers/ubuntu/index.js +23 -23
  43. package/dist/plugins/servers/windows/index.js +15 -15
  44. package/dist/scripts/generate-all.js +73 -73
  45. package/dist/types/plugin.d.ts +6 -0
  46. package/dist/types/plugin.d.ts.map +1 -1
  47. package/dist/utils/deployment-report.js +2 -2
  48. package/dist/utils/secret-prompts.js +34 -34
  49. package/dist/utils/template-generator.js +74 -74
  50. package/package.json +93 -100
@@ -1,73 +1,73 @@
1
- name: Stack CI Prod
2
-
3
- # Generated by @factiii/stack v{VERSION}
4
- # Runs builds and tests on push to prod branch.
5
- # No deployment - deploy via SSH from dev machine.
6
-
7
- on:
8
- push:
9
- branches: [prod]
10
-
11
- jobs:
12
- ci:
13
- runs-on: ubuntu-latest
14
- env:
15
- CI: true
16
- ENV: test
17
- NODE_ENV: test
18
- DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
19
- TEST_DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
20
- TEST_ADMIN_IP: "::ffff:127.0.0.1"
21
- SITE_URL: http://localhost:3000
22
- ALLOWED_ORIGINS: http://localhost:3000,http://localhost:5001
23
- ACCESS_TOKEN_SECRET: test-secret-key
24
- GOOGLE_CLIENT_ID: test-google-id
25
- APPLE_CLIENT_ID: com.factiii.test
26
- NEXT_PUBLIC_SITE_URL: http://localhost:3000
27
- NEXT_PUBLIC_API_URL: http://localhost:5001
28
-
29
- steps:
30
- - name: Checkout
31
- uses: actions/checkout@v4
32
-
33
- - name: Setup pnpm
34
- uses: pnpm/action-setup@v4
35
-
36
- - name: Setup Node.js
37
- uses: actions/setup-node@v4
38
- with:
39
- node-version: '24'
40
- cache: 'pnpm'
41
-
42
- - name: Install dependencies
43
- run: pnpm install
44
-
45
- - name: Build server
46
- run: pnpm build
47
- working-directory: apps/server
48
-
49
- - name: Build client
50
- run: pnpm build
51
- working-directory: client
52
- if: hashFiles('client/package.json') != ''
53
-
54
- - name: Setup Java (for Android)
55
- uses: actions/setup-java@v4
56
- with:
57
- distribution: 'temurin'
58
- java-version: '17'
59
- if: hashFiles('apps/mobile/android/build.gradle') != ''
60
-
61
- - name: Build Android
62
- run: |
63
- cd apps/mobile/android
64
- ./gradlew assembleRelease
65
- if: hashFiles('apps/mobile/android/build.gradle') != ''
66
-
67
- - name: Start Docker containers
68
- run: |
69
- chmod +x ./start.sh
70
- ./start.sh
71
-
72
- - name: Run tests
73
- run: pnpm test:server
1
+ name: Stack CI Prod
2
+
3
+ # Generated by @factiii/stack v{VERSION}
4
+ # Runs builds and tests on push to prod branch.
5
+ # No deployment - deploy via SSH from dev machine.
6
+
7
+ on:
8
+ push:
9
+ branches: [prod]
10
+
11
+ jobs:
12
+ ci:
13
+ runs-on: ubuntu-latest
14
+ env:
15
+ CI: true
16
+ ENV: test
17
+ NODE_ENV: test
18
+ DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
19
+ TEST_DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
20
+ TEST_ADMIN_IP: "::ffff:127.0.0.1"
21
+ SITE_URL: http://localhost:3000
22
+ ALLOWED_ORIGINS: http://localhost:3000,http://localhost:5001
23
+ ACCESS_TOKEN_SECRET: test-secret-key
24
+ GOOGLE_CLIENT_ID: test-google-id
25
+ APPLE_CLIENT_ID: com.factiii.test
26
+ NEXT_PUBLIC_SITE_URL: http://localhost:3000
27
+ NEXT_PUBLIC_API_URL: http://localhost:5001
28
+
29
+ steps:
30
+ - name: Checkout
31
+ uses: actions/checkout@v4
32
+
33
+ - name: Setup pnpm
34
+ uses: pnpm/action-setup@v4
35
+
36
+ - name: Setup Node.js
37
+ uses: actions/setup-node@v4
38
+ with:
39
+ node-version: '24'
40
+ cache: 'pnpm'
41
+
42
+ - name: Install dependencies
43
+ run: pnpm install
44
+
45
+ - name: Build server
46
+ run: pnpm build
47
+ working-directory: apps/server
48
+
49
+ - name: Build client
50
+ run: pnpm build
51
+ working-directory: client
52
+ if: hashFiles('client/package.json') != ''
53
+
54
+ - name: Setup Java (for Android)
55
+ uses: actions/setup-java@v4
56
+ with:
57
+ distribution: 'temurin'
58
+ java-version: '17'
59
+ if: hashFiles('apps/mobile/android/build.gradle') != ''
60
+
61
+ - name: Build Android
62
+ run: |
63
+ cd apps/mobile/android
64
+ ./gradlew assembleRelease
65
+ if: hashFiles('apps/mobile/android/build.gradle') != ''
66
+
67
+ - name: Start Docker containers
68
+ run: |
69
+ chmod +x ./start.sh
70
+ ./start.sh
71
+
72
+ - name: Run tests
73
+ run: pnpm test:server
@@ -49,6 +49,7 @@ declare class AmazonLinuxPlugin {
49
49
  description: string;
50
50
  plugin?: string;
51
51
  targetStage?: "staging" | "prod";
52
+ blocking?: boolean;
52
53
  scan: (config: FactiiiConfig, rootDir: string) => Promise<boolean>;
53
54
  fix?: ((config: FactiiiConfig, rootDir: string) => Promise<boolean>) | null;
54
55
  manualFix: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/amazon-linux/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAcjC,cAAM,iBAAiB;IAKrB,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAkB;IACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAyB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAkB;IAC9C,qEAAqE;IACrE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAS;IACvD,uCAAuC;IACvC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAa;IAG3D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAG3D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrC;IAQF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAEkD,QAAQ;;;;;;;;;;QAc7E;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM;IAUxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAOtC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAQrC,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAKxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAWlF;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/amazon-linux/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAcjC,cAAM,iBAAiB;IAKrB,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAkB;IACpC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAyB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAkB;IAC9C,qEAAqE;IACrE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAS;IACvD,uCAAuC;IACvC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAa;IAG3D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAG3D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrC;IAQF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAEkD,QAAQ;;;;;;;;;;;QAc7E;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM;IAUxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAOtC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAQrC,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAKxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAWlF;AAED,eAAe,iBAAiB,CAAC"}
@@ -99,13 +99,13 @@ class AmazonLinuxPlugin {
99
99
  return false;
100
100
  }
101
101
  static helpText = {
102
- SSH: `
103
- SSH private key for accessing the Amazon Linux server.
104
-
105
- For AWS EC2:
106
- - Use the key pair you created when launching the instance
107
- - Download the .pem file from AWS Console
108
-
102
+ SSH: `
103
+ SSH private key for accessing the Amazon Linux server.
104
+
105
+ For AWS EC2:
106
+ - Use the key pair you created when launching the instance
107
+ - Download the .pem file from AWS Console
108
+
109
109
  Default user for Amazon Linux: ec2-user`,
110
110
  };
111
111
  // ============================================================
@@ -152,21 +152,21 @@ class AmazonLinuxPlugin {
152
152
  * Get the command to install Docker on Amazon Linux 2023
153
153
  */
154
154
  static getDockerInstallCommand() {
155
- return `
156
- sudo dnf update -y && \
157
- sudo dnf install -y docker && \
158
- sudo systemctl start docker && \
159
- sudo systemctl enable docker && \
160
- sudo usermod -aG docker $USER
155
+ return `
156
+ sudo dnf update -y && \
157
+ sudo dnf install -y docker && \
158
+ sudo systemctl start docker && \
159
+ sudo systemctl enable docker && \
160
+ sudo usermod -aG docker $USER
161
161
  `;
162
162
  }
163
163
  /**
164
164
  * Get the command to install Node.js on Amazon Linux
165
165
  */
166
166
  static getNodeInstallCommand() {
167
- return `
168
- curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - && \
169
- sudo dnf install -y nodejs
167
+ return `
168
+ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - && \
169
+ sudo dnf install -y nodejs
170
170
  `;
171
171
  }
172
172
  /**
@@ -68,6 +68,7 @@ declare class MacPlugin {
68
68
  description: string;
69
69
  plugin?: string;
70
70
  targetStage?: "staging" | "prod";
71
+ blocking?: boolean;
71
72
  scan: (config: FactiiiConfig, rootDir: string) => Promise<boolean>;
72
73
  fix?: ((config: FactiiiConfig, rootDir: string) => Promise<boolean>) | null;
73
74
  manualFix: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/mac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAuBjC,cAAM,SAAS;IAKb,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAS;IACrC,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAU;IACxD,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAe;IAG7D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGnD;IAGF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrC;IASF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAEyC,QAAQ;;;;;;;;;;QAapE;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;;OAGG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAU/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAuClF;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/mac/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAuBjC,cAAM,SAAS;IAKb,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAS;IACrC,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAU;IACxD,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAe;IAG7D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGnD;IAGF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrC;IASF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAEyC,QAAQ;;;;;;;;;;;QAapE;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;;OAGG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAU/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAuClF;AAED,eAAe,SAAS,CAAC"}
@@ -138,16 +138,16 @@ class MacPlugin {
138
138
  return Object.keys(config).length === 0;
139
139
  }
140
140
  static helpText = {
141
- SSH: `
142
- SSH private key for accessing the server.
143
-
144
- Step 1: Generate a new SSH key pair (if needed):
145
- ssh-keygen -t ed25519 -C "deploy-key" -f ~/.ssh/deploy_key
146
-
147
- Step 2: Add PUBLIC key to server:
148
- ssh-copy-id -i ~/.ssh/deploy_key.pub ubuntu@YOUR_HOST
149
-
150
- Step 3: Paste the PRIVATE key below (multi-line, end with blank line):
141
+ SSH: `
142
+ SSH private key for accessing the server.
143
+
144
+ Step 1: Generate a new SSH key pair (if needed):
145
+ ssh-keygen -t ed25519 -C "deploy-key" -f ~/.ssh/deploy_key
146
+
147
+ Step 2: Add PUBLIC key to server:
148
+ ssh-copy-id -i ~/.ssh/deploy_key.pub ubuntu@YOUR_HOST
149
+
150
+ Step 3: Paste the PRIVATE key below (multi-line, end with blank line):
151
151
  cat ~/.ssh/deploy_key`,
152
152
  };
153
153
  // ============================================================
@@ -238,8 +238,8 @@ class MacPlugin {
238
238
  }
239
239
  try {
240
240
  const repoName = config.name ?? 'app';
241
- await MacPlugin.sshExec(envConfig, `
242
- cd ~/.factiii && docker compose stop ${repoName}-staging
241
+ await MacPlugin.sshExec(envConfig, `
242
+ cd ~/.factiii && docker compose stop ${repoName}-staging
243
243
  `);
244
244
  return { success: true, message: 'Staging containers stopped' };
245
245
  }
@@ -291,7 +291,7 @@ async function writeEnvFile(envConfig, repoDir, environment, envVarsString) {
291
291
  const escapedContent = envFileContent
292
292
  .replace(/'/g, "'\\''")
293
293
  .replace(/\n/g, '\\n');
294
- await sshExecCommand(envConfig, `cat > ${repoDir}/${envFileName} << 'ENVEOF'
294
+ await sshExecCommand(envConfig, `cat > ${repoDir}/${envFileName} << 'ENVEOF'
295
295
  ${envFileContent}ENVEOF`);
296
296
  }
297
297
  }
@@ -347,7 +347,7 @@ async function createEnvFromStaging(envConfig, repoDir) {
347
347
  console.log(' 📝 Created .env from .env.staging (with host port replacement)');
348
348
  }
349
349
  else {
350
- await sshExecCommand(envConfig, `cat > ${envPath} << 'ENVEOF'
350
+ await sshExecCommand(envConfig, `cat > ${envPath} << 'ENVEOF'
351
351
  ${updatedContent}ENVEOF`);
352
352
  console.log(' 📝 Created .env from .env.staging on remote server (with host port replacement)');
353
353
  }
@@ -49,6 +49,7 @@ declare class UbuntuPlugin {
49
49
  description: string;
50
50
  plugin?: string;
51
51
  targetStage?: "staging" | "prod";
52
+ blocking?: boolean;
52
53
  scan: (config: FactiiiConfig, rootDir: string) => Promise<boolean>;
53
54
  fix?: ((config: FactiiiConfig, rootDir: string) => Promise<boolean>) | null;
54
55
  manualFix: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/ubuntu/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAcjC,cAAM,YAAY;IAKhB,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB;IACvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAY;IACxC,iCAAiC;IACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAS;IACvD,iCAAiC;IACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAa;IAG3D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAG3D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrC;IAQF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAE4C,QAAQ;;;;;;;;;;QAcvE;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM;IAcxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAOtC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAQrC,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAKxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAWlF;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/servers/ubuntu/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,yBAAyB,CAAC;AAcjC,cAAM,YAAY;IAKhB,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB;IACvC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,WAAW;IAElC,wCAAwC;IACxC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAY;IACxC,iCAAiC;IACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAS;IACvD,iCAAiC;IACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAa;IAG3D,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IAG/C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAG3D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtD;IAEF;;;OAGG;WACU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlF,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYrC;IAQF,MAAM,CAAC,QAAQ,CAAC,KAAK;YAE4C,QAAQ;;;;;;;;;;;QAcvE;IAMF;;OAEG;WACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM1E;;OAEG;WACU,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpF;;OAEG;IACH,MAAM,CAAC,uBAAuB,IAAI,MAAM;IAcxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM;IAOtC;;OAEG;IACH,MAAM,CAAC,oBAAoB,IAAI,MAAM;IAQrC,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC;IAKxB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAM/E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAWlF;AAED,eAAe,YAAY,CAAC"}
@@ -99,16 +99,16 @@ class UbuntuPlugin {
99
99
  return false;
100
100
  }
101
101
  static helpText = {
102
- SSH: `
103
- SSH private key for accessing the Ubuntu server.
104
-
105
- Step 1: Generate a new SSH key pair (if needed):
106
- ssh-keygen -t ed25519 -C "deploy-key" -f ~/.ssh/deploy_key
107
-
108
- Step 2: Add PUBLIC key to server:
109
- ssh-copy-id -i ~/.ssh/deploy_key.pub ubuntu@YOUR_HOST
110
-
111
- Step 3: Paste the PRIVATE key below (multi-line, end with blank line):
102
+ SSH: `
103
+ SSH private key for accessing the Ubuntu server.
104
+
105
+ Step 1: Generate a new SSH key pair (if needed):
106
+ ssh-keygen -t ed25519 -C "deploy-key" -f ~/.ssh/deploy_key
107
+
108
+ Step 2: Add PUBLIC key to server:
109
+ ssh-copy-id -i ~/.ssh/deploy_key.pub ubuntu@YOUR_HOST
110
+
111
+ Step 3: Paste the PRIVATE key below (multi-line, end with blank line):
112
112
  cat ~/.ssh/deploy_key`,
113
113
  };
114
114
  // ============================================================
@@ -155,25 +155,25 @@ class UbuntuPlugin {
155
155
  * Get the command to install Docker on Ubuntu
156
156
  */
157
157
  static getDockerInstallCommand() {
158
- return `
159
- sudo apt-get update && \
160
- sudo apt-get install -y ca-certificates curl gnupg && \
161
- sudo install -m 0755 -d /etc/apt/keyrings && \
162
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
163
- sudo chmod a+r /etc/apt/keyrings/docker.gpg && \
164
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \
165
- sudo apt-get update && \
166
- sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \
167
- sudo usermod -aG docker $USER
158
+ return `
159
+ sudo apt-get update && \
160
+ sudo apt-get install -y ca-certificates curl gnupg && \
161
+ sudo install -m 0755 -d /etc/apt/keyrings && \
162
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
163
+ sudo chmod a+r /etc/apt/keyrings/docker.gpg && \
164
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \
165
+ sudo apt-get update && \
166
+ sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \
167
+ sudo usermod -aG docker $USER
168
168
  `;
169
169
  }
170
170
  /**
171
171
  * Get the command to install Node.js on Ubuntu
172
172
  */
173
173
  static getNodeInstallCommand() {
174
- return `
175
- curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
176
- sudo apt-get install -y nodejs
174
+ return `
175
+ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
176
+ sudo apt-get install -y nodejs
177
177
  `;
178
178
  }
179
179
  /**
@@ -99,12 +99,12 @@ class WindowsPlugin {
99
99
  return false;
100
100
  }
101
101
  static helpText = {
102
- SSH: `
103
- SSH/RDP credentials for accessing the Windows server.
104
-
105
- For SSH access, ensure OpenSSH Server is installed on Windows:
106
- - Settings > Apps > Optional Features > Add a feature > OpenSSH Server
107
-
102
+ SSH: `
103
+ SSH/RDP credentials for accessing the Windows server.
104
+
105
+ For SSH access, ensure OpenSSH Server is installed on Windows:
106
+ - Settings > Apps > Optional Features > Add a feature > OpenSSH Server
107
+
108
108
  For RDP access, use Remote Desktop Connection.`,
109
109
  };
110
110
  // ============================================================
@@ -182,11 +182,11 @@ class WindowsPlugin {
182
182
  * Requires Docker Desktop or WSL2 with Docker
183
183
  */
184
184
  static getDockerInstallCommand() {
185
- return `
186
- # Install Docker Desktop via Chocolatey
187
- choco install docker-desktop -y
188
- # Or install via winget
189
- # winget install Docker.DockerDesktop
185
+ return `
186
+ # Install Docker Desktop via Chocolatey
187
+ choco install docker-desktop -y
188
+ # Or install via winget
189
+ # winget install Docker.DockerDesktop
190
190
  `;
191
191
  }
192
192
  /**
@@ -205,10 +205,10 @@ class WindowsPlugin {
205
205
  * Get the command to install Chocolatey (package manager)
206
206
  */
207
207
  static getChocoInstallCommand() {
208
- return `
209
- Set-ExecutionPolicy Bypass -Scope Process -Force
210
- [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
211
- iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
208
+ return `
209
+ Set-ExecutionPolicy Bypass -Scope Process -Force
210
+ [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
211
+ iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
212
212
  `;
213
213
  }
214
214
  // ============================================================
@@ -271,31 +271,31 @@ function generateNginx(allConfigs) {
271
271
  return 0;
272
272
  }
273
273
  // Generate nginx config
274
- let nginxConf = `# Auto-generated nginx configuration
275
- # Generated by: npx stack (generate-all)
276
- # Do not edit directly - modify stack.yml files and run: npx stack deploy
277
-
278
- events {
279
- worker_connections 1024;
280
- }
281
-
282
- http {
283
- include /etc/nginx/mime.types;
284
- default_type application/octet-stream;
285
-
286
- sendfile on;
287
- keepalive_timeout 65;
288
- client_max_body_size 100M;
289
-
290
- # Logging
291
- access_log /var/log/nginx/access.log;
292
- error_log /var/log/nginx/error.log;
293
-
294
- # Gzip
295
- gzip on;
296
- gzip_vary on;
297
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
298
-
274
+ let nginxConf = `# Auto-generated nginx configuration
275
+ # Generated by: npx stack (generate-all)
276
+ # Do not edit directly - modify stack.yml files and run: npx stack deploy
277
+
278
+ events {
279
+ worker_connections 1024;
280
+ }
281
+
282
+ http {
283
+ include /etc/nginx/mime.types;
284
+ default_type application/octet-stream;
285
+
286
+ sendfile on;
287
+ keepalive_timeout 65;
288
+ client_max_body_size 100M;
289
+
290
+ # Logging
291
+ access_log /var/log/nginx/access.log;
292
+ error_log /var/log/nginx/error.log;
293
+
294
+ # Gzip
295
+ gzip on;
296
+ gzip_vary on;
297
+ gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
298
+
299
299
  `;
300
300
  // ============================================================
301
301
  // CRITICAL: HTTPS Certificate Paths
@@ -308,54 +308,54 @@ http {
308
308
  for (const { domain, service, port } of routes) {
309
309
  // Always generate HTTPS-capable config
310
310
  // Certificates must exist before nginx can start (obtained via: npx stack fix --staging/--prod)
311
- nginxConf += `
312
- # ${service} - ${domain}
313
-
314
- # HTTP - ACME challenge + redirect to HTTPS
315
- server {
316
- listen 80;
317
- server_name ${domain};
318
-
319
- # Allow certbot ACME challenge (for renewals)
320
- location /.well-known/acme-challenge/ {
321
- root /var/www/certbot;
322
- }
323
-
324
- # Redirect all other traffic to HTTPS
325
- location / {
326
- return 301 https://$server_name$request_uri;
327
- }
328
- }
329
-
330
- # HTTPS - main server block
331
- server {
332
- listen 443 ssl;
333
- http2 on;
334
- server_name ${domain};
335
-
336
- # SSL certificate paths (Let's Encrypt)
337
- ssl_certificate /etc/letsencrypt/live/${domain}/fullchain.pem;
338
- ssl_certificate_key /etc/letsencrypt/live/${domain}/privkey.pem;
339
-
340
- # SSL security settings
341
- ssl_protocols TLSv1.2 TLSv1.3;
342
- ssl_prefer_server_ciphers on;
343
- ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
344
- ssl_session_cache shared:SSL:10m;
345
- ssl_session_timeout 10m;
346
-
347
- location / {
348
- proxy_pass http://${service}:${port};
349
- proxy_http_version 1.1;
350
- proxy_set_header Upgrade $http_upgrade;
351
- proxy_set_header Connection 'upgrade';
352
- proxy_set_header Host $host;
353
- proxy_cache_bypass $http_upgrade;
354
- proxy_set_header X-Real-IP $remote_addr;
355
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
356
- proxy_set_header X-Forwarded-Proto $scheme;
357
- }
358
- }
311
+ nginxConf += `
312
+ # ${service} - ${domain}
313
+
314
+ # HTTP - ACME challenge + redirect to HTTPS
315
+ server {
316
+ listen 80;
317
+ server_name ${domain};
318
+
319
+ # Allow certbot ACME challenge (for renewals)
320
+ location /.well-known/acme-challenge/ {
321
+ root /var/www/certbot;
322
+ }
323
+
324
+ # Redirect all other traffic to HTTPS
325
+ location / {
326
+ return 301 https://$server_name$request_uri;
327
+ }
328
+ }
329
+
330
+ # HTTPS - main server block
331
+ server {
332
+ listen 443 ssl;
333
+ http2 on;
334
+ server_name ${domain};
335
+
336
+ # SSL certificate paths (Let's Encrypt)
337
+ ssl_certificate /etc/letsencrypt/live/${domain}/fullchain.pem;
338
+ ssl_certificate_key /etc/letsencrypt/live/${domain}/privkey.pem;
339
+
340
+ # SSL security settings
341
+ ssl_protocols TLSv1.2 TLSv1.3;
342
+ ssl_prefer_server_ciphers on;
343
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
344
+ ssl_session_cache shared:SSL:10m;
345
+ ssl_session_timeout 10m;
346
+
347
+ location / {
348
+ proxy_pass http://${service}:${port};
349
+ proxy_http_version 1.1;
350
+ proxy_set_header Upgrade $http_upgrade;
351
+ proxy_set_header Connection 'upgrade';
352
+ proxy_set_header Host $host;
353
+ proxy_cache_bypass $http_upgrade;
354
+ proxy_set_header X-Real-IP $remote_addr;
355
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
356
+ proxy_set_header X-Forwarded-Proto $scheme;
357
+ }
358
+ }
359
359
  `;
360
360
  }
361
361
  nginxConf += `}\n`;
@@ -100,6 +100,12 @@ export interface Fix {
100
100
  * Example: A fix with targetStage: 'staging' only runs when deploying to staging
101
101
  */
102
102
  targetStage?: 'staging' | 'prod';
103
+ /**
104
+ * Optional: If true and this fix fails, skip all remaining fixes in this
105
+ * and later stages. Use for prerequisites like credential sync where
106
+ * nothing else can run without it.
107
+ */
108
+ blocking?: boolean;
103
109
  scan: (config: FactiiiConfig, rootDir: string) => Promise<boolean>;
104
110
  fix?: ((config: FactiiiConfig, rootDir: string) => Promise<boolean>) | null;
105
111
  manualFix: string;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":"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"}