@friggframework/devtools 2.0.0-next.3 → 2.0.0-next.31

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 (199) hide show
  1. package/frigg-cli/.eslintrc.js +141 -0
  2. package/frigg-cli/__tests__/jest.config.js +102 -0
  3. package/frigg-cli/__tests__/unit/commands/build.test.js +483 -0
  4. package/frigg-cli/__tests__/unit/commands/install.test.js +418 -0
  5. package/frigg-cli/__tests__/unit/commands/ui.test.js +592 -0
  6. package/frigg-cli/__tests__/utils/command-tester.js +170 -0
  7. package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
  8. package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
  9. package/frigg-cli/__tests__/utils/test-setup.js +286 -0
  10. package/frigg-cli/build-command/index.js +54 -0
  11. package/frigg-cli/deploy-command/index.js +36 -0
  12. package/frigg-cli/generate-command/__tests__/generate-command.test.js +312 -0
  13. package/frigg-cli/generate-command/azure-generator.js +43 -0
  14. package/frigg-cli/generate-command/gcp-generator.js +47 -0
  15. package/frigg-cli/generate-command/index.js +332 -0
  16. package/frigg-cli/generate-command/terraform-generator.js +555 -0
  17. package/frigg-cli/generate-iam-command.js +115 -0
  18. package/frigg-cli/index.js +47 -1
  19. package/frigg-cli/index.test.js +1 -4
  20. package/frigg-cli/init-command/backend-first-handler.js +756 -0
  21. package/frigg-cli/init-command/index.js +93 -0
  22. package/frigg-cli/init-command/template-handler.js +143 -0
  23. package/frigg-cli/install-command/index.js +1 -4
  24. package/frigg-cli/package.json +51 -0
  25. package/frigg-cli/start-command/index.js +24 -4
  26. package/frigg-cli/test/init-command.test.js +180 -0
  27. package/frigg-cli/test/npm-registry.test.js +319 -0
  28. package/frigg-cli/ui-command/index.js +154 -0
  29. package/frigg-cli/utils/app-resolver.js +319 -0
  30. package/frigg-cli/utils/backend-path.js +16 -17
  31. package/frigg-cli/utils/npm-registry.js +167 -0
  32. package/frigg-cli/utils/process-manager.js +199 -0
  33. package/frigg-cli/utils/repo-detection.js +405 -0
  34. package/infrastructure/AWS-DISCOVERY-TROUBLESHOOTING.md +245 -0
  35. package/infrastructure/AWS-IAM-CREDENTIAL-NEEDS.md +596 -0
  36. package/infrastructure/DEPLOYMENT-INSTRUCTIONS.md +268 -0
  37. package/infrastructure/GENERATE-IAM-DOCS.md +253 -0
  38. package/infrastructure/IAM-POLICY-TEMPLATES.md +176 -0
  39. package/infrastructure/README-TESTING.md +332 -0
  40. package/infrastructure/README.md +421 -0
  41. package/infrastructure/WEBSOCKET-CONFIGURATION.md +105 -0
  42. package/infrastructure/__tests__/fixtures/mock-aws-resources.js +391 -0
  43. package/infrastructure/__tests__/helpers/test-utils.js +277 -0
  44. package/infrastructure/aws-discovery.js +568 -0
  45. package/infrastructure/aws-discovery.test.js +373 -0
  46. package/infrastructure/build-time-discovery.js +206 -0
  47. package/infrastructure/build-time-discovery.test.js +375 -0
  48. package/infrastructure/create-frigg-infrastructure.js +3 -5
  49. package/infrastructure/frigg-deployment-iam-stack.yaml +379 -0
  50. package/infrastructure/iam-generator.js +687 -0
  51. package/infrastructure/iam-generator.test.js +169 -0
  52. package/infrastructure/iam-policy-basic.json +212 -0
  53. package/infrastructure/iam-policy-full.json +282 -0
  54. package/infrastructure/integration.test.js +383 -0
  55. package/infrastructure/run-discovery.js +110 -0
  56. package/infrastructure/serverless-template.js +923 -113
  57. package/infrastructure/serverless-template.test.js +541 -0
  58. package/management-ui/.eslintrc.js +22 -0
  59. package/management-ui/README.md +203 -0
  60. package/management-ui/components.json +21 -0
  61. package/management-ui/docs/phase2-integration-guide.md +320 -0
  62. package/management-ui/index.html +13 -0
  63. package/management-ui/package-lock.json +16517 -0
  64. package/management-ui/package.json +76 -0
  65. package/management-ui/packages/devtools/frigg-cli/ui-command/index.js +302 -0
  66. package/management-ui/postcss.config.js +6 -0
  67. package/management-ui/server/api/backend.js +256 -0
  68. package/management-ui/server/api/cli.js +315 -0
  69. package/management-ui/server/api/codegen.js +663 -0
  70. package/management-ui/server/api/connections.js +857 -0
  71. package/management-ui/server/api/discovery.js +185 -0
  72. package/management-ui/server/api/environment/index.js +1 -0
  73. package/management-ui/server/api/environment/router.js +378 -0
  74. package/management-ui/server/api/environment.js +328 -0
  75. package/management-ui/server/api/integrations.js +876 -0
  76. package/management-ui/server/api/logs.js +248 -0
  77. package/management-ui/server/api/monitoring.js +282 -0
  78. package/management-ui/server/api/open-ide.js +31 -0
  79. package/management-ui/server/api/project.js +1029 -0
  80. package/management-ui/server/api/users/sessions.js +371 -0
  81. package/management-ui/server/api/users/simulation.js +254 -0
  82. package/management-ui/server/api/users.js +362 -0
  83. package/management-ui/server/api-contract.md +275 -0
  84. package/management-ui/server/index.js +873 -0
  85. package/management-ui/server/middleware/errorHandler.js +93 -0
  86. package/management-ui/server/middleware/security.js +32 -0
  87. package/management-ui/server/processManager.js +296 -0
  88. package/management-ui/server/server.js +346 -0
  89. package/management-ui/server/services/aws-monitor.js +413 -0
  90. package/management-ui/server/services/npm-registry.js +347 -0
  91. package/management-ui/server/services/template-engine.js +538 -0
  92. package/management-ui/server/utils/cliIntegration.js +220 -0
  93. package/management-ui/server/utils/environment/auditLogger.js +471 -0
  94. package/management-ui/server/utils/environment/awsParameterStore.js +264 -0
  95. package/management-ui/server/utils/environment/encryption.js +278 -0
  96. package/management-ui/server/utils/environment/envFileManager.js +286 -0
  97. package/management-ui/server/utils/import-commonjs.js +28 -0
  98. package/management-ui/server/utils/response.js +83 -0
  99. package/management-ui/server/websocket/handler.js +325 -0
  100. package/management-ui/src/App.jsx +109 -0
  101. package/management-ui/src/assets/FriggLogo.svg +1 -0
  102. package/management-ui/src/components/AppRouter.jsx +65 -0
  103. package/management-ui/src/components/Button.jsx +70 -0
  104. package/management-ui/src/components/Card.jsx +97 -0
  105. package/management-ui/src/components/EnvironmentCompare.jsx +400 -0
  106. package/management-ui/src/components/EnvironmentEditor.jsx +372 -0
  107. package/management-ui/src/components/EnvironmentImportExport.jsx +469 -0
  108. package/management-ui/src/components/EnvironmentSchema.jsx +491 -0
  109. package/management-ui/src/components/EnvironmentSecurity.jsx +463 -0
  110. package/management-ui/src/components/ErrorBoundary.jsx +73 -0
  111. package/management-ui/src/components/IntegrationCard.jsx +481 -0
  112. package/management-ui/src/components/IntegrationCardEnhanced.jsx +770 -0
  113. package/management-ui/src/components/IntegrationExplorer.jsx +379 -0
  114. package/management-ui/src/components/IntegrationStatus.jsx +336 -0
  115. package/management-ui/src/components/Layout.jsx +716 -0
  116. package/management-ui/src/components/LoadingSpinner.jsx +113 -0
  117. package/management-ui/src/components/RepositoryPicker.jsx +248 -0
  118. package/management-ui/src/components/SessionMonitor.jsx +350 -0
  119. package/management-ui/src/components/StatusBadge.jsx +208 -0
  120. package/management-ui/src/components/UserContextSwitcher.jsx +212 -0
  121. package/management-ui/src/components/UserSimulation.jsx +327 -0
  122. package/management-ui/src/components/Welcome.jsx +434 -0
  123. package/management-ui/src/components/codegen/APIEndpointGenerator.jsx +637 -0
  124. package/management-ui/src/components/codegen/APIModuleSelector.jsx +227 -0
  125. package/management-ui/src/components/codegen/CodeGenerationWizard.jsx +247 -0
  126. package/management-ui/src/components/codegen/CodePreviewEditor.jsx +316 -0
  127. package/management-ui/src/components/codegen/DynamicModuleForm.jsx +271 -0
  128. package/management-ui/src/components/codegen/FormBuilder.jsx +737 -0
  129. package/management-ui/src/components/codegen/IntegrationGenerator.jsx +855 -0
  130. package/management-ui/src/components/codegen/ProjectScaffoldWizard.jsx +797 -0
  131. package/management-ui/src/components/codegen/SchemaBuilder.jsx +303 -0
  132. package/management-ui/src/components/codegen/TemplateSelector.jsx +586 -0
  133. package/management-ui/src/components/codegen/index.js +10 -0
  134. package/management-ui/src/components/connections/ConnectionConfigForm.jsx +362 -0
  135. package/management-ui/src/components/connections/ConnectionHealthMonitor.jsx +182 -0
  136. package/management-ui/src/components/connections/ConnectionTester.jsx +200 -0
  137. package/management-ui/src/components/connections/EntityRelationshipMapper.jsx +292 -0
  138. package/management-ui/src/components/connections/OAuthFlow.jsx +204 -0
  139. package/management-ui/src/components/connections/index.js +5 -0
  140. package/management-ui/src/components/index.js +21 -0
  141. package/management-ui/src/components/monitoring/APIGatewayMetrics.jsx +222 -0
  142. package/management-ui/src/components/monitoring/LambdaMetrics.jsx +169 -0
  143. package/management-ui/src/components/monitoring/MetricsChart.jsx +197 -0
  144. package/management-ui/src/components/monitoring/MonitoringDashboard.jsx +393 -0
  145. package/management-ui/src/components/monitoring/SQSMetrics.jsx +246 -0
  146. package/management-ui/src/components/monitoring/index.js +6 -0
  147. package/management-ui/src/components/monitoring/monitoring.css +218 -0
  148. package/management-ui/src/components/theme-provider.jsx +52 -0
  149. package/management-ui/src/components/theme-toggle.jsx +39 -0
  150. package/management-ui/src/components/ui/badge.tsx +36 -0
  151. package/management-ui/src/components/ui/button.test.jsx +56 -0
  152. package/management-ui/src/components/ui/button.tsx +57 -0
  153. package/management-ui/src/components/ui/card.tsx +76 -0
  154. package/management-ui/src/components/ui/dropdown-menu.tsx +199 -0
  155. package/management-ui/src/components/ui/select.tsx +157 -0
  156. package/management-ui/src/components/ui/skeleton.jsx +15 -0
  157. package/management-ui/src/hooks/useFrigg.jsx +601 -0
  158. package/management-ui/src/hooks/useSocket.jsx +58 -0
  159. package/management-ui/src/index.css +193 -0
  160. package/management-ui/src/lib/utils.ts +6 -0
  161. package/management-ui/src/main.jsx +10 -0
  162. package/management-ui/src/pages/CodeGeneration.jsx +14 -0
  163. package/management-ui/src/pages/Connections.jsx +252 -0
  164. package/management-ui/src/pages/ConnectionsEnhanced.jsx +633 -0
  165. package/management-ui/src/pages/Dashboard.jsx +311 -0
  166. package/management-ui/src/pages/Environment.jsx +314 -0
  167. package/management-ui/src/pages/IntegrationConfigure.jsx +669 -0
  168. package/management-ui/src/pages/IntegrationDiscovery.jsx +567 -0
  169. package/management-ui/src/pages/IntegrationTest.jsx +742 -0
  170. package/management-ui/src/pages/Integrations.jsx +253 -0
  171. package/management-ui/src/pages/Monitoring.jsx +17 -0
  172. package/management-ui/src/pages/Simulation.jsx +155 -0
  173. package/management-ui/src/pages/Users.jsx +492 -0
  174. package/management-ui/src/services/api.js +41 -0
  175. package/management-ui/src/services/apiModuleService.js +193 -0
  176. package/management-ui/src/services/websocket-handlers.js +120 -0
  177. package/management-ui/src/test/api/project.test.js +273 -0
  178. package/management-ui/src/test/components/Welcome.test.jsx +378 -0
  179. package/management-ui/src/test/mocks/server.js +178 -0
  180. package/management-ui/src/test/setup.js +61 -0
  181. package/management-ui/src/test/utils/test-utils.jsx +134 -0
  182. package/management-ui/src/utils/repository.js +98 -0
  183. package/management-ui/src/utils/repository.test.js +118 -0
  184. package/management-ui/src/workflows/phase2-integration-workflows.js +884 -0
  185. package/management-ui/tailwind.config.js +63 -0
  186. package/management-ui/tsconfig.json +37 -0
  187. package/management-ui/tsconfig.node.json +10 -0
  188. package/management-ui/vite.config.js +26 -0
  189. package/management-ui/vitest.config.js +38 -0
  190. package/package.json +17 -9
  191. package/infrastructure/app-handler-helpers.js +0 -57
  192. package/infrastructure/backend-utils.js +0 -90
  193. package/infrastructure/routers/auth.js +0 -26
  194. package/infrastructure/routers/integration-defined-routers.js +0 -37
  195. package/infrastructure/routers/middleware/loadUser.js +0 -15
  196. package/infrastructure/routers/middleware/requireLoggedInUser.js +0 -12
  197. package/infrastructure/routers/user.js +0 -41
  198. package/infrastructure/routers/websocket.js +0 -55
  199. package/infrastructure/workers/integration-defined-workers.js +0 -24
@@ -0,0 +1,268 @@
1
+ # Frigg IAM Deployment Instructions
2
+
3
+ This guide explains how to deploy the IAM CloudFormation stack to create the necessary AWS credentials for your Frigg deployment pipeline.
4
+
5
+ ## Prerequisites
6
+
7
+ - AWS CLI installed and configured with administrator privileges
8
+ - AWS account ID
9
+ - Appropriate permissions to create IAM resources
10
+
11
+ ## Deployment Steps
12
+
13
+ You can deploy the stack using either the AWS Management Console (UI) or AWS CLI.
14
+
15
+ ### Option A: Deploy via AWS Management Console (UI)
16
+
17
+ #### 1. Upload and Create Stack
18
+
19
+ 1. Log in to the [AWS Management Console](https://console.aws.amazon.com/)
20
+ 2. Navigate to **CloudFormation** service
21
+ 3. Click **Create stack** → **With new resources (standard)**
22
+ 4. In the **Specify template** section:
23
+ - Select **Upload a template file**
24
+ - Click **Choose file** and select `frigg-deployment-iam-stack.yaml`
25
+ - Click **Next**
26
+
27
+ #### 2. Configure Stack Details
28
+
29
+ 1. **Stack name**: Enter `frigg-deployment-iam`
30
+ 2. **Parameters**:
31
+ - **DeploymentUserName**: `frigg-deployment-user` (or customize)
32
+ - **EnableVPCSupport**: `true`
33
+ - **EnableKMSSupport**: `true`
34
+ - **EnableSSMSupport**: `true`
35
+ 3. Click **Next**
36
+
37
+ #### 3. Configure Stack Options
38
+
39
+ 1. Leave all options as default (or configure tags if needed)
40
+ 2. Click **Next**
41
+
42
+ #### 4. Review and Create
43
+
44
+ 1. Review all settings
45
+ 2. **Important**: Check the box that says **"I acknowledge that AWS CloudFormation might create IAM resources with custom names"**
46
+ 3. Click **Submit**
47
+ 4. Wait for the stack to reach **CREATE_COMPLETE** status (usually 2-3 minutes)
48
+
49
+ #### 5. Retrieve Credentials from Console
50
+
51
+ 1. Once the stack is created, click on the stack name
52
+ 2. Go to the **Outputs** tab
53
+ 3. Note the **AccessKeyId** value
54
+ 4. To get the Secret Access Key:
55
+ - Click on the **Resources** tab
56
+ - Find **FriggDeploymentCredentials** and click on its Physical ID link
57
+ - This will take you to AWS Secrets Manager
58
+ - Click **Retrieve secret value**
59
+ - Copy the **SecretAccessKey** value
60
+
61
+ ### Option B: Deploy via AWS CLI
62
+
63
+ #### 1. Deploy the CloudFormation Stack
64
+
65
+ ```bash
66
+ aws cloudformation deploy \
67
+ --template-file frigg-deployment-iam-stack.yaml \
68
+ --stack-name frigg-deployment-iam \
69
+ --capabilities CAPABILITY_NAMED_IAM \
70
+ --parameter-overrides \
71
+ DeploymentUserName=frigg-deployment-user \
72
+ EnableVPCSupport=true \
73
+ EnableKMSSupport=true \
74
+ EnableSSMSupport=true
75
+ ```
76
+
77
+ #### 2. Retrieve Deployment Credentials
78
+
79
+ After successful deployment, retrieve the credentials:
80
+
81
+ ```bash
82
+ # Get the Access Key ID
83
+ aws cloudformation describe-stacks \
84
+ --stack-name frigg-deployment-iam \
85
+ --query 'Stacks[0].Outputs[?OutputKey==`AccessKeyId`].OutputValue' \
86
+ --output text
87
+
88
+ # Get the Secret Access Key from Secrets Manager
89
+ aws secretsmanager get-secret-value \
90
+ --secret-id frigg-deployment-credentials \
91
+ --query SecretString \
92
+ --output text | jq -r .SecretAccessKey
93
+ ```
94
+
95
+ ### 3. Configure CI/CD Environment
96
+
97
+ #### GitHub Actions
98
+
99
+ Add these secrets to your GitHub repository:
100
+
101
+ 1. Go to Settings → Secrets and variables → Actions
102
+ 2. Add new repository secrets:
103
+ - `AWS_ACCESS_KEY_ID`: The Access Key ID from step 2
104
+ - `AWS_SECRET_ACCESS_KEY`: The Secret Access Key from step 2
105
+
106
+ Example GitHub Actions workflow:
107
+
108
+ ```yaml
109
+ name: Deploy Frigg Application
110
+ on:
111
+ push:
112
+ branches: [main]
113
+
114
+ jobs:
115
+ deploy:
116
+ runs-on: ubuntu-latest
117
+ steps:
118
+ - uses: actions/checkout@v3
119
+
120
+ - name: Configure AWS credentials
121
+ uses: aws-actions/configure-aws-credentials@v2
122
+ with:
123
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
124
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
125
+ aws-region: us-east-1
126
+
127
+ - name: Install dependencies
128
+ run: npm install
129
+
130
+ - name: Deploy Frigg application
131
+ run: npx frigg deploy
132
+ ```
133
+
134
+ #### GitLab CI/CD
135
+
136
+ Add variables in Settings → CI/CD → Variables:
137
+
138
+ ```yaml
139
+ deploy:
140
+ image: node:18
141
+ before_script:
142
+ - npm install
143
+ script:
144
+ - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
145
+ - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
146
+ - export AWS_REGION=us-east-1
147
+ - npx frigg deploy
148
+ only:
149
+ - main
150
+ ```
151
+
152
+ #### Jenkins
153
+
154
+ Store credentials in Jenkins Credentials Manager and use in pipeline:
155
+
156
+ ```groovy
157
+ pipeline {
158
+ agent any
159
+ environment {
160
+ AWS_ACCESS_KEY_ID = credentials('frigg-aws-access-key-id')
161
+ AWS_SECRET_ACCESS_KEY = credentials('frigg-aws-secret-access-key')
162
+ AWS_REGION = 'us-east-1'
163
+ }
164
+ stages {
165
+ stage('Deploy') {
166
+ steps {
167
+ sh 'npm install'
168
+ sh 'npx frigg deploy'
169
+ }
170
+ }
171
+ }
172
+ }
173
+ ```
174
+
175
+ ### 4. Local Development Setup
176
+
177
+ For local development, configure AWS CLI profile:
178
+
179
+ ```bash
180
+ # Option 1: Use AWS CLI configure
181
+ aws configure --profile frigg-deployment
182
+ # Enter the Access Key ID and Secret Access Key when prompted
183
+
184
+ # Option 2: Add to ~/.aws/credentials manually
185
+ [frigg-deployment]
186
+ aws_access_key_id = YOUR_ACCESS_KEY_ID
187
+ aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
188
+ ```
189
+
190
+ Use the profile in your deployment:
191
+
192
+ ```bash
193
+ export AWS_PROFILE=frigg-deployment
194
+ npx frigg deploy
195
+ ```
196
+
197
+ ## Stack Parameters
198
+
199
+ - **DeploymentUserName**: Name of the IAM user (default: `frigg-deployment-user`)
200
+ - **EnableVPCSupport**: Enable VPC-related permissions (default: `true`)
201
+ - **EnableKMSSupport**: Enable KMS encryption permissions (default: `true`)
202
+ - **EnableSSMSupport**: Enable SSM Parameter Store permissions (default: `true`)
203
+
204
+ ## Security Best Practices
205
+
206
+ 1. **Rotate Credentials Regularly**: Create a new access key periodically and update your CI/CD systems
207
+ 2. **Use Separate Stacks**: Deploy separate stacks for dev, staging, and production environments
208
+ 3. **Enable MFA**: For production deployments, consider using IAM roles with MFA requirements
209
+ 4. **Audit Access**: Regularly review CloudTrail logs for deployment activities
210
+
211
+ ## Updating the Stack
212
+
213
+ To update permissions or parameters:
214
+
215
+ ```bash
216
+ aws cloudformation update-stack \
217
+ --stack-name frigg-deployment-iam \
218
+ --template-body file://frigg-deployment-iam-stack.yaml \
219
+ --capabilities CAPABILITY_NAMED_IAM \
220
+ --parameter-overrides \
221
+ EnableVPCSupport=false # Example: disable VPC support
222
+ ```
223
+
224
+ ## Deleting the Stack
225
+
226
+ ⚠️ **Warning**: This will delete the IAM user and all associated access keys!
227
+
228
+ ```bash
229
+ # First, delete any access keys manually
230
+ aws iam delete-access-key \
231
+ --user-name frigg-deployment-user \
232
+ --access-key-id YOUR_ACCESS_KEY_ID
233
+
234
+ # Then delete the stack
235
+ aws cloudformation delete-stack --stack-name frigg-deployment-iam
236
+ ```
237
+
238
+ ## Troubleshooting
239
+
240
+ ### Permission Denied Errors
241
+
242
+ If you encounter permission errors during deployment:
243
+
244
+ 1. Check that the IAM user name follows the pattern `*frigg*`
245
+ 2. Ensure your resources (Lambda functions, stacks) include "frigg" in their names
246
+ 3. Verify the correct AWS region is configured
247
+
248
+ ### Discovery Failures
249
+
250
+ If AWS resource discovery fails during build:
251
+
252
+ 1. Verify the deployment user has the discovery permissions
253
+ 2. Check that default VPC and subnets exist in your region
254
+ 3. Review build logs for specific error messages
255
+
256
+ ### Stack Creation Failures
257
+
258
+ Common issues:
259
+
260
+ - **CAPABILITY_NAMED_IAM required**: Add `--capabilities CAPABILITY_NAMED_IAM` to deploy command
261
+ - **User already exists**: Choose a different `DeploymentUserName` parameter
262
+ - **Policy limit exceeded**: AWS accounts have limits on managed policies; consider consolidating
263
+
264
+ ## Additional Resources
265
+
266
+ - [AWS IAM Best Practices](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
267
+ - [Frigg Documentation](https://github.com/friggframework/frigg)
268
+ - [AWS CloudFormation Documentation](https://docs.aws.amazon.com/cloudformation/)
@@ -0,0 +1,253 @@
1
+ # Generate IAM Command
2
+
3
+ The `frigg generate-iam` command creates a customized IAM CloudFormation template based on your specific Frigg application configuration.
4
+
5
+ ## Overview
6
+
7
+ Instead of using a generic IAM policy that includes all possible permissions, this command analyzes your AppDefinition and generates an IAM stack that only includes the permissions your application actually needs.
8
+
9
+ ## Usage
10
+
11
+ ```bash
12
+ npx frigg generate-iam [options]
13
+ ```
14
+
15
+ ### Options
16
+
17
+ - `-o, --output <path>` - Output directory (default: `backend/infrastructure`)
18
+ - `-u, --user <name>` - Deployment user name (default: `frigg-deployment-user`)
19
+ - `-s, --stack-name <name>` - CloudFormation stack name (default: `frigg-deployment-iam`)
20
+ - `-v, --verbose` - Enable verbose output
21
+
22
+ ### Examples
23
+
24
+ ```bash
25
+ # Generate with defaults
26
+ npx frigg generate-iam
27
+
28
+ # Specify custom output directory
29
+ npx frigg generate-iam --output ./aws-infrastructure
30
+
31
+ # Custom user name and stack name
32
+ npx frigg generate-iam --user my-app-deployer --stack-name my-app-iam
33
+
34
+ # Verbose output
35
+ npx frigg generate-iam --verbose
36
+ ```
37
+
38
+ ## What Gets Generated
39
+
40
+ The command analyzes your `backend/index.js` AppDefinition and generates IAM policies based on:
41
+
42
+ ### Always Included (Core Features)
43
+ - **CloudFormation** - Stack management permissions
44
+ - **Lambda** - Function deployment and management
45
+ - **IAM** - Role creation and management for Lambda functions
46
+ - **S3** - Deployment bucket access
47
+ - **SQS/SNS** - Messaging services
48
+ - **CloudWatch/Logs** - Monitoring and logging
49
+ - **API Gateway** - REST API management
50
+
51
+ ### Conditionally Included (Based on AppDefinition)
52
+
53
+ #### VPC Support (`vpc.enable: true`)
54
+ - VPC endpoint creation and management
55
+ - NAT Gateway creation and management
56
+ - Route table and security group management
57
+ - Elastic IP allocation
58
+
59
+ #### KMS Encryption (`encryption.useDefaultKMSForFieldLevelEncryption: true`)
60
+ - KMS key usage for Lambda and S3
61
+ - Data encryption and decryption permissions
62
+
63
+ #### SSM Parameter Store (`ssm.enable: true`)
64
+ - Parameter retrieval permissions
65
+ - Scoped to parameters containing "frigg" in the path
66
+
67
+ #### WebSocket Support (`websockets.enable: true`)
68
+ - Currently included in core permissions
69
+ - API Gateway WebSocket management
70
+
71
+ ## Sample AppDefinition Analysis
72
+
73
+ Given this AppDefinition:
74
+
75
+ ```javascript
76
+ const appDefinition = {
77
+ name: 'my-integration-app',
78
+ integrations: [AsanaIntegration, SlackIntegration],
79
+ vpc: {
80
+ enable: true
81
+ },
82
+ encryption: {
83
+ useDefaultKMSForFieldLevelEncryption: true
84
+ },
85
+ ssm: {
86
+ enable: false
87
+ },
88
+ websockets: {
89
+ enable: true
90
+ }
91
+ };
92
+ ```
93
+
94
+ The command will generate:
95
+ - ✅ Core deployment permissions
96
+ - ✅ VPC management permissions
97
+ - ✅ KMS encryption permissions
98
+ - ❌ SSM Parameter Store permissions (disabled)
99
+ - ✅ WebSocket permissions (via core)
100
+
101
+ ## Generated File Structure
102
+
103
+ The command creates:
104
+
105
+ ```
106
+ backend/infrastructure/
107
+ ├── frigg-deployment-iam.yaml # Main CloudFormation template
108
+ ```
109
+
110
+ ## Security Benefits
111
+
112
+ ### Principle of Least Privilege
113
+ - Only includes permissions your app actually uses
114
+ - Scoped resource patterns (e.g., only resources containing "frigg")
115
+ - No unnecessary cloud service permissions
116
+
117
+ ### Resource Scoping
118
+ All permissions are scoped to resources following naming patterns:
119
+ - `*frigg*` - General Frigg resources
120
+ - `*serverless*` - Deployment buckets
121
+ - `internal-error-queue-*` - Error handling queues
122
+
123
+ ### Conditional Policies
124
+ Feature-specific policies are only created when:
125
+ - The feature is enabled in your AppDefinition
126
+ - CloudFormation conditions control policy attachment
127
+
128
+ ## Deployment Workflow
129
+
130
+ After generating the template:
131
+
132
+ ### 1. Deploy the Stack
133
+ ```bash
134
+ aws cloudformation deploy \
135
+ --template-file backend/infrastructure/frigg-deployment-iam.yaml \
136
+ --stack-name frigg-deployment-iam \
137
+ --capabilities CAPABILITY_NAMED_IAM \
138
+ --parameter-overrides DeploymentUserName=frigg-deployment-user
139
+ ```
140
+
141
+ ### 2. Retrieve Access Key
142
+ ```bash
143
+ aws cloudformation describe-stacks \
144
+ --stack-name frigg-deployment-iam \
145
+ --query 'Stacks[0].Outputs[?OutputKey==`AccessKeyId`].OutputValue' \
146
+ --output text
147
+ ```
148
+
149
+ ### 3. Get Secret Access Key
150
+ ```bash
151
+ aws secretsmanager get-secret-value \
152
+ --secret-id frigg-deployment-credentials \
153
+ --query SecretString \
154
+ --output text | jq -r .SecretAccessKey
155
+ ```
156
+
157
+ ### 4. Configure CI/CD
158
+ Add the credentials to your deployment environment:
159
+ - GitHub Actions: Repository secrets
160
+ - GitLab CI: Environment variables
161
+ - Jenkins: Credentials manager
162
+ - Local: AWS credentials file
163
+
164
+ ## Troubleshooting
165
+
166
+ ### Command Not Found
167
+ ```bash
168
+ # Install dependencies
169
+ npm install
170
+
171
+ # Ensure you're in a Frigg project
172
+ ls backend/index.js
173
+ ```
174
+
175
+ ### No AppDefinition Found
176
+ - Ensure `backend/index.js` exports a `Definition` object
177
+ - Check that the Definition follows the correct structure
178
+
179
+ ### Permission Errors During Deployment
180
+ - Ensure your AWS CLI is configured with admin permissions
181
+ - Add `--capabilities CAPABILITY_NAMED_IAM` to deployment commands
182
+
183
+ ### Generated Policy Too Restrictive
184
+ - Check that your resources follow naming conventions (contain "frigg")
185
+ - Enable additional features in your AppDefinition if needed
186
+ - Review the generated template for resource patterns
187
+
188
+ ## Comparison with Generic Template
189
+
190
+ | Aspect | Generic Template | Generated Template |
191
+ |--------|-----------------|-------------------|
192
+ | Size | ~15KB | ~8-12KB (varies) |
193
+ | Permissions | All features | Only enabled features |
194
+ | Security | Broad access | Scoped access |
195
+ | Maintenance | Manual updates | Auto-generated |
196
+ | Deployment Risk | Over-privileged | Least privilege |
197
+
198
+ ## Integration with Development Workflow
199
+
200
+ ### Local Development
201
+ 1. Update AppDefinition
202
+ 2. Run `npx frigg generate-iam`
203
+ 3. Deploy updated IAM stack
204
+ 4. Test deployment with new permissions
205
+
206
+ ### CI/CD Pipeline
207
+ ```yaml
208
+ # GitHub Actions example
209
+ - name: Generate IAM Template
210
+ run: npx frigg generate-iam
211
+
212
+ - name: Deploy IAM Stack
213
+ run: |
214
+ aws cloudformation deploy \
215
+ --template-file backend/infrastructure/frigg-deployment-iam.yaml \
216
+ --stack-name ${{ env.STACK_NAME }} \
217
+ --capabilities CAPABILITY_NAMED_IAM
218
+ ```
219
+
220
+ ### Version Control
221
+ - Commit generated templates to version control
222
+ - Review changes in pull requests
223
+ - Track permission changes over time
224
+
225
+ ## Best Practices
226
+
227
+ 1. **Regenerate After Changes** - Run the command whenever you modify your AppDefinition
228
+ 2. **Review Generated Templates** - Check the generated YAML before deployment
229
+ 3. **Test Deployments** - Verify your app can deploy with the generated permissions
230
+ 4. **Environment Separation** - Use different stack names for dev/staging/prod
231
+ 5. **Regular Audits** - Periodically review and minimize permissions
232
+
233
+ ## Advanced Usage
234
+
235
+ ### Custom Parameter Values
236
+ ```bash
237
+ # Enable all features regardless of AppDefinition
238
+ npx frigg generate-iam --verbose
239
+
240
+ # Then manually edit the generated template to set:
241
+ # EnableVPCSupport: true
242
+ # EnableKMSSupport: true
243
+ # EnableSSMSupport: true
244
+ ```
245
+
246
+ ### Multiple Environments
247
+ ```bash
248
+ # Generate for different environments
249
+ npx frigg generate-iam --stack-name my-app-dev-iam --output ./aws/dev
250
+ npx frigg generate-iam --stack-name my-app-prod-iam --output ./aws/prod
251
+ ```
252
+
253
+ This command helps you maintain secure, minimal IAM policies that evolve with your application requirements.
@@ -0,0 +1,176 @@
1
+ # Frigg IAM Policy Templates
2
+
3
+ This directory contains IAM policy templates for deploying Frigg applications with the appropriate permissions.
4
+
5
+ ## Quick Start
6
+
7
+ For immediate deployment, you have two ready-to-use IAM policy options:
8
+
9
+ ### Option 1: Basic Policy (Recommended for getting started)
10
+ ```bash
11
+ # Use the basic policy for core Frigg functionality
12
+ aws iam put-user-policy \
13
+ --user-name frigg-deployment-user \
14
+ --policy-name FriggBasicDeploymentPolicy \
15
+ --policy-document file://iam-policy-basic.json
16
+ ```
17
+
18
+ **Includes permissions for:**
19
+ - ✅ AWS Discovery (finding your VPC, subnets, security groups)
20
+ - ✅ CloudFormation stacks (deploy/update Frigg applications)
21
+ - ✅ Lambda functions (create and manage serverless functions)
22
+ - ✅ Lambda EventSourceMappings (connect Lambda to SQS, SNS, Kinesis)
23
+ - ✅ API Gateway (HTTP endpoints for your integrations)
24
+ - ✅ SQS/SNS (message queues and notifications)
25
+ - ✅ S3 (deployment artifacts, including bucket tagging)
26
+ - ✅ CloudWatch/Logs (monitoring and logging)
27
+ - ✅ IAM roles (Lambda execution roles)
28
+
29
+ ### Option 2: Full Policy (All features enabled)
30
+ ```bash
31
+ # Use the full policy for advanced Frigg features
32
+ aws iam put-user-policy \
33
+ --user-name frigg-deployment-user \
34
+ --policy-name FriggFullDeploymentPolicy \
35
+ --policy-document file://iam-policy-full.json
36
+ ```
37
+
38
+ **Includes everything from Basic Policy PLUS:**
39
+ - ✅ **VPC Management** - Create route tables, NAT gateways, VPC endpoints
40
+ - ✅ **KMS Encryption** - Field-level encryption for sensitive data
41
+ - ✅ **SSM Parameter Store** - Secure configuration management
42
+
43
+ ## When to Use Which Policy
44
+
45
+ ### Use Basic Policy When:
46
+ - Getting started with Frigg
47
+ - Building simple integrations without VPC requirements
48
+ - You want minimal AWS permissions
49
+ - You're not handling sensitive data requiring encryption
50
+
51
+ ### Use Full Policy When:
52
+ - You need VPC isolation for security/compliance
53
+ - You're handling sensitive data requiring KMS encryption
54
+ - You want to use SSM Parameter Store for configuration
55
+ - You're deploying production applications
56
+
57
+ ## Current Issue Resolution
58
+
59
+ **If you're seeing the error:** `User is not authorized to perform: ec2:CreateRouteTable`
60
+
61
+ This means your current deployment user doesn't have VPC permissions. You have two options:
62
+
63
+ ### Quick Fix: Apply Full Policy
64
+ ```bash
65
+ aws iam put-user-policy \
66
+ --user-name frigg-deployment-user \
67
+ --policy-name FriggFullDeploymentPolicy \
68
+ --policy-document file://iam-policy-full.json
69
+ ```
70
+
71
+ ### Alternative: Update CloudFormation Stack
72
+ If you deployed using the CloudFormation template, update it with VPC support:
73
+ ```bash
74
+ aws cloudformation update-stack \
75
+ --stack-name frigg-deployment-iam \
76
+ --template-body file://frigg-deployment-iam-stack.yaml \
77
+ --parameters ParameterKey=EnableVPCSupport,ParameterValue=true \
78
+ --capabilities CAPABILITY_IAM
79
+ ```
80
+
81
+ ## Using the IAM Generator
82
+
83
+ For custom policy generation based on your app definition:
84
+
85
+ ```javascript
86
+ const { generateIAMPolicy, generateIAMCloudFormation } = require('./iam-generator');
87
+
88
+ // Generate basic JSON policy
89
+ const basicPolicy = generateIAMPolicy('basic');
90
+
91
+ // Generate full JSON policy
92
+ const fullPolicy = generateIAMPolicy('full');
93
+
94
+ // Generate CloudFormation template with auto-detection
95
+ const autoTemplate = generateIAMCloudFormation(appDefinition, { mode: 'auto' });
96
+
97
+ // Generate CloudFormation template with specific mode
98
+ const basicTemplate = generateIAMCloudFormation(appDefinition, { mode: 'basic' });
99
+ const fullTemplate = generateIAMCloudFormation(appDefinition, { mode: 'full' });
100
+ ```
101
+
102
+ ### Generator Modes
103
+
104
+ - **`basic`** - Core permissions only, ignores app definition features
105
+ - **`full`** - All features enabled, ignores app definition features
106
+ - **`auto`** - Analyzes app definition and enables features as needed (default)
107
+
108
+ ## Security Best Practices
109
+
110
+ ### Resource Scoping
111
+ Both policies are scoped to resources containing "frigg" in their names:
112
+ - ✅ `my-frigg-app-prod` (will work)
113
+ - ❌ `my-integration-app` (won't work - missing "frigg")
114
+
115
+ ### Account-Specific Resources
116
+ Replace `*` with your AWS account ID for tighter security:
117
+ ```json
118
+ {
119
+ "Resource": [
120
+ "arn:aws:lambda:us-east-1:123456789012:function:*frigg*"
121
+ ]
122
+ }
123
+ ```
124
+
125
+ ### Environment-Specific Policies
126
+ Consider separate policies for different environments:
127
+ - `frigg-dev-policy` (full permissions for development)
128
+ - `frigg-prod-policy` (restricted permissions for production)
129
+
130
+ ## Troubleshooting
131
+
132
+ ### Common Permission Errors
133
+
134
+ 1. **"ec2:CreateRouteTable" error** → Use Full Policy
135
+ 2. **"kms:GenerateDataKey" error** → Enable KMS in your policy
136
+ 3. **"ssm:GetParameter" error** → Enable SSM in your policy
137
+ 4. **Lambda VPC errors** → Ensure VPC permissions are enabled
138
+ 5. **"lambda:DeleteEventSourceMapping" error** → Update to latest policy (includes EventSourceMapping permissions)
139
+ 6. **"ec2:DeleteVpcEndpoints" error** → Update IAM policy to use `ec2:DeleteVpcEndpoints` (plural) instead of `ec2:DeleteVpcEndpoint`
140
+ 7. **"s3:PutBucketTagging" error** → Update to latest policy (includes S3 bucket tagging permissions)
141
+
142
+ ### Validation
143
+ Test your policy by deploying a simple Frigg app:
144
+ ```bash
145
+ npx create-frigg-app test-deployment
146
+ cd test-deployment
147
+ frigg deploy
148
+ ```
149
+
150
+ ### Policy Comparison
151
+
152
+ | Feature | Basic Policy | Full Policy | CloudFormation Template |
153
+ |---------|--------------|-------------|-------------------------|
154
+ | Core Deployment | ✅ | ✅ | ✅ |
155
+ | VPC Management | ❌ | ✅ | ✅ (conditional) |
156
+ | KMS Encryption | ❌ | ✅ | ✅ (conditional) |
157
+ | SSM Parameters | ❌ | ✅ | ✅ (conditional) |
158
+ | Format | JSON | JSON | YAML with parameters |
159
+ | Use Case | Getting started | Production ready | Infrastructure as Code |
160
+
161
+ ## Files in this Directory
162
+
163
+ - `iam-policy-basic.json` - Core Frigg permissions only (JSON format)
164
+ - `iam-policy-full.json` - All features enabled (JSON format)
165
+ - `frigg-deployment-iam-stack.yaml` - CloudFormation template with conditional parameters
166
+ - `iam-generator.js` - Programmatic policy generation with basic/full/auto modes
167
+ - `AWS-IAM-CREDENTIAL-NEEDS.md` - Detailed permission explanations and troubleshooting
168
+ - `IAM-POLICY-TEMPLATES.md` - This file - Quick start guide and usage examples
169
+
170
+ ## Support
171
+
172
+ If you encounter permission issues:
173
+ 1. Check the error message for the specific missing permission
174
+ 2. Verify your resource names contain "frigg"
175
+ 3. Consider upgrading from Basic to Full policy
176
+ 4. Review the AWS-IAM-CREDENTIAL-NEEDS.md for detailed explanations