@friggframework/devtools 2.0.0-next.60 → 2.0.0-next.62

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 (305) hide show
  1. package/package.json +14 -7
  2. package/.eslintrc.json +0 -3
  3. package/CHANGELOG.md +0 -132
  4. package/infrastructure/ARCHITECTURE.md +0 -487
  5. package/infrastructure/CLAUDE.md +0 -481
  6. package/infrastructure/HEALTH.md +0 -468
  7. package/infrastructure/README.md +0 -522
  8. package/infrastructure/__tests__/fixtures/mock-aws-resources.js +0 -391
  9. package/infrastructure/__tests__/helpers/test-utils.js +0 -277
  10. package/infrastructure/__tests__/postgres-config.test.js +0 -914
  11. package/infrastructure/__tests__/template-generation.test.js +0 -687
  12. package/infrastructure/create-frigg-infrastructure.js +0 -147
  13. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +0 -630
  14. package/infrastructure/docs/PRE-DEPLOYMENT-HEALTH-CHECK-SPEC.md +0 -1317
  15. package/infrastructure/docs/WEBSOCKET-CONFIGURATION.md +0 -105
  16. package/infrastructure/docs/deployment-instructions.md +0 -268
  17. package/infrastructure/docs/generate-iam-command.md +0 -278
  18. package/infrastructure/docs/iam-policy-templates.md +0 -193
  19. package/infrastructure/domains/database/aurora-builder.js +0 -809
  20. package/infrastructure/domains/database/aurora-builder.test.js +0 -950
  21. package/infrastructure/domains/database/aurora-discovery.js +0 -87
  22. package/infrastructure/domains/database/aurora-discovery.test.js +0 -188
  23. package/infrastructure/domains/database/aurora-resolver.js +0 -210
  24. package/infrastructure/domains/database/aurora-resolver.test.js +0 -347
  25. package/infrastructure/domains/database/migration-builder.js +0 -701
  26. package/infrastructure/domains/database/migration-builder.test.js +0 -321
  27. package/infrastructure/domains/database/migration-resolver.js +0 -163
  28. package/infrastructure/domains/database/migration-resolver.test.js +0 -337
  29. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +0 -164
  30. package/infrastructure/domains/health/application/ports/IResourceDetector.js +0 -129
  31. package/infrastructure/domains/health/application/ports/IResourceImporter.js +0 -142
  32. package/infrastructure/domains/health/application/ports/IStackRepository.js +0 -131
  33. package/infrastructure/domains/health/application/ports/index.js +0 -26
  34. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +0 -679
  35. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +0 -167
  36. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +0 -1130
  37. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +0 -221
  38. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +0 -152
  39. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +0 -343
  40. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +0 -535
  41. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +0 -376
  42. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +0 -213
  43. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +0 -441
  44. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +0 -267
  45. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +0 -324
  46. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +0 -386
  47. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +0 -1419
  48. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +0 -391
  49. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +0 -551
  50. package/infrastructure/domains/health/domain/entities/issue.js +0 -299
  51. package/infrastructure/domains/health/domain/entities/issue.test.js +0 -528
  52. package/infrastructure/domains/health/domain/entities/property-mismatch.js +0 -108
  53. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +0 -275
  54. package/infrastructure/domains/health/domain/entities/resource.js +0 -159
  55. package/infrastructure/domains/health/domain/entities/resource.test.js +0 -432
  56. package/infrastructure/domains/health/domain/entities/stack-health-report.js +0 -306
  57. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +0 -601
  58. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +0 -380
  59. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +0 -971
  60. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +0 -1150
  61. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +0 -672
  62. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +0 -496
  63. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +0 -419
  64. package/infrastructure/domains/health/domain/services/health-score-calculator.js +0 -248
  65. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +0 -504
  66. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +0 -195
  67. package/infrastructure/domains/health/domain/services/import-template-generator.js +0 -435
  68. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +0 -345
  69. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +0 -234
  70. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +0 -431
  71. package/infrastructure/domains/health/domain/services/property-mutability-config.js +0 -382
  72. package/infrastructure/domains/health/domain/services/template-parser.js +0 -245
  73. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +0 -192
  74. package/infrastructure/domains/health/domain/value-objects/health-score.js +0 -138
  75. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +0 -267
  76. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +0 -161
  77. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +0 -198
  78. package/infrastructure/domains/health/domain/value-objects/resource-state.js +0 -167
  79. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +0 -196
  80. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +0 -192
  81. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +0 -262
  82. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +0 -312
  83. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +0 -367
  84. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +0 -432
  85. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +0 -784
  86. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +0 -1133
  87. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +0 -565
  88. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +0 -554
  89. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +0 -318
  90. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +0 -398
  91. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +0 -777
  92. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +0 -580
  93. package/infrastructure/domains/integration/integration-builder.js +0 -404
  94. package/infrastructure/domains/integration/integration-builder.test.js +0 -690
  95. package/infrastructure/domains/integration/integration-resolver.js +0 -170
  96. package/infrastructure/domains/integration/integration-resolver.test.js +0 -369
  97. package/infrastructure/domains/integration/websocket-builder.js +0 -69
  98. package/infrastructure/domains/integration/websocket-builder.test.js +0 -195
  99. package/infrastructure/domains/networking/vpc-builder.js +0 -2051
  100. package/infrastructure/domains/networking/vpc-builder.test.js +0 -1960
  101. package/infrastructure/domains/networking/vpc-discovery.js +0 -177
  102. package/infrastructure/domains/networking/vpc-discovery.test.js +0 -350
  103. package/infrastructure/domains/networking/vpc-resolver.js +0 -505
  104. package/infrastructure/domains/networking/vpc-resolver.test.js +0 -801
  105. package/infrastructure/domains/parameters/ssm-builder.js +0 -79
  106. package/infrastructure/domains/parameters/ssm-builder.test.js +0 -189
  107. package/infrastructure/domains/parameters/ssm-discovery.js +0 -84
  108. package/infrastructure/domains/parameters/ssm-discovery.test.js +0 -210
  109. package/infrastructure/domains/security/iam-generator.js +0 -816
  110. package/infrastructure/domains/security/iam-generator.test.js +0 -204
  111. package/infrastructure/domains/security/kms-builder.js +0 -415
  112. package/infrastructure/domains/security/kms-builder.test.js +0 -392
  113. package/infrastructure/domains/security/kms-discovery.js +0 -80
  114. package/infrastructure/domains/security/kms-discovery.test.js +0 -177
  115. package/infrastructure/domains/security/kms-resolver.js +0 -96
  116. package/infrastructure/domains/security/kms-resolver.test.js +0 -216
  117. package/infrastructure/domains/security/templates/frigg-deployment-iam-stack.yaml +0 -401
  118. package/infrastructure/domains/security/templates/iam-policy-basic.json +0 -218
  119. package/infrastructure/domains/security/templates/iam-policy-full.json +0 -288
  120. package/infrastructure/domains/shared/base-builder.js +0 -112
  121. package/infrastructure/domains/shared/base-resolver.js +0 -186
  122. package/infrastructure/domains/shared/base-resolver.test.js +0 -305
  123. package/infrastructure/domains/shared/builder-orchestrator.js +0 -212
  124. package/infrastructure/domains/shared/builder-orchestrator.test.js +0 -213
  125. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +0 -334
  126. package/infrastructure/domains/shared/cloudformation-discovery.js +0 -672
  127. package/infrastructure/domains/shared/cloudformation-discovery.test.js +0 -985
  128. package/infrastructure/domains/shared/environment-builder.js +0 -119
  129. package/infrastructure/domains/shared/environment-builder.test.js +0 -247
  130. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +0 -579
  131. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +0 -416
  132. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +0 -93
  133. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +0 -136
  134. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +0 -82
  135. package/infrastructure/domains/shared/providers/provider-factory.js +0 -108
  136. package/infrastructure/domains/shared/providers/provider-factory.test.js +0 -170
  137. package/infrastructure/domains/shared/resource-discovery.enhanced.test.js +0 -306
  138. package/infrastructure/domains/shared/resource-discovery.js +0 -233
  139. package/infrastructure/domains/shared/resource-discovery.test.js +0 -588
  140. package/infrastructure/domains/shared/types/app-definition.js +0 -205
  141. package/infrastructure/domains/shared/types/discovery-result.js +0 -106
  142. package/infrastructure/domains/shared/types/discovery-result.test.js +0 -258
  143. package/infrastructure/domains/shared/types/index.js +0 -46
  144. package/infrastructure/domains/shared/types/resource-ownership.js +0 -108
  145. package/infrastructure/domains/shared/types/resource-ownership.test.js +0 -101
  146. package/infrastructure/domains/shared/utilities/base-definition-factory.js +0 -394
  147. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +0 -338
  148. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +0 -291
  149. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +0 -134
  150. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +0 -268
  151. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +0 -159
  152. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +0 -444
  153. package/infrastructure/domains/shared/validation/env-validator.js +0 -78
  154. package/infrastructure/domains/shared/validation/env-validator.test.js +0 -173
  155. package/infrastructure/domains/shared/validation/plugin-validator.js +0 -187
  156. package/infrastructure/domains/shared/validation/plugin-validator.test.js +0 -323
  157. package/infrastructure/esbuild.config.js +0 -53
  158. package/infrastructure/index.js +0 -4
  159. package/infrastructure/infrastructure-composer.js +0 -117
  160. package/infrastructure/infrastructure-composer.test.js +0 -1895
  161. package/infrastructure/integration.test.js +0 -383
  162. package/infrastructure/scripts/build-prisma-layer.js +0 -701
  163. package/infrastructure/scripts/build-prisma-layer.test.js +0 -170
  164. package/infrastructure/scripts/build-time-discovery.js +0 -238
  165. package/infrastructure/scripts/build-time-discovery.test.js +0 -379
  166. package/infrastructure/scripts/run-discovery.js +0 -110
  167. package/infrastructure/scripts/verify-prisma-layer.js +0 -72
  168. package/layers/prisma/.build-complete +0 -3
  169. package/layers/prisma/nodejs/package.json +0 -8
  170. package/management-ui/.eslintrc.js +0 -22
  171. package/management-ui/components.json +0 -21
  172. package/management-ui/docs/phase2-integration-guide.md +0 -320
  173. package/management-ui/index.html +0 -13
  174. package/management-ui/package.json +0 -76
  175. package/management-ui/packages/devtools/frigg-cli/ui-command/index.js +0 -302
  176. package/management-ui/postcss.config.js +0 -6
  177. package/management-ui/server/api/backend.js +0 -256
  178. package/management-ui/server/api/cli.js +0 -315
  179. package/management-ui/server/api/codegen.js +0 -663
  180. package/management-ui/server/api/connections.js +0 -857
  181. package/management-ui/server/api/discovery.js +0 -185
  182. package/management-ui/server/api/environment/index.js +0 -1
  183. package/management-ui/server/api/environment/router.js +0 -378
  184. package/management-ui/server/api/environment.js +0 -328
  185. package/management-ui/server/api/integrations.js +0 -876
  186. package/management-ui/server/api/logs.js +0 -248
  187. package/management-ui/server/api/monitoring.js +0 -282
  188. package/management-ui/server/api/open-ide.js +0 -31
  189. package/management-ui/server/api/project.js +0 -1029
  190. package/management-ui/server/api/users/sessions.js +0 -371
  191. package/management-ui/server/api/users/simulation.js +0 -254
  192. package/management-ui/server/api/users.js +0 -362
  193. package/management-ui/server/api-contract.md +0 -275
  194. package/management-ui/server/index.js +0 -873
  195. package/management-ui/server/middleware/errorHandler.js +0 -93
  196. package/management-ui/server/middleware/security.js +0 -32
  197. package/management-ui/server/processManager.js +0 -296
  198. package/management-ui/server/server.js +0 -346
  199. package/management-ui/server/services/aws-monitor.js +0 -413
  200. package/management-ui/server/services/npm-registry.js +0 -347
  201. package/management-ui/server/services/template-engine.js +0 -538
  202. package/management-ui/server/utils/cliIntegration.js +0 -220
  203. package/management-ui/server/utils/environment/auditLogger.js +0 -471
  204. package/management-ui/server/utils/environment/awsParameterStore.js +0 -275
  205. package/management-ui/server/utils/environment/encryption.js +0 -278
  206. package/management-ui/server/utils/environment/envFileManager.js +0 -286
  207. package/management-ui/server/utils/import-commonjs.js +0 -28
  208. package/management-ui/server/utils/response.js +0 -83
  209. package/management-ui/server/websocket/handler.js +0 -325
  210. package/management-ui/src/App.jsx +0 -25
  211. package/management-ui/src/assets/FriggLogo.svg +0 -1
  212. package/management-ui/src/components/AppRouter.jsx +0 -65
  213. package/management-ui/src/components/Button.jsx +0 -70
  214. package/management-ui/src/components/Card.jsx +0 -97
  215. package/management-ui/src/components/EnvironmentCompare.jsx +0 -400
  216. package/management-ui/src/components/EnvironmentEditor.jsx +0 -372
  217. package/management-ui/src/components/EnvironmentImportExport.jsx +0 -469
  218. package/management-ui/src/components/EnvironmentSchema.jsx +0 -491
  219. package/management-ui/src/components/EnvironmentSecurity.jsx +0 -463
  220. package/management-ui/src/components/ErrorBoundary.jsx +0 -73
  221. package/management-ui/src/components/IntegrationCard.jsx +0 -481
  222. package/management-ui/src/components/IntegrationCardEnhanced.jsx +0 -770
  223. package/management-ui/src/components/IntegrationExplorer.jsx +0 -379
  224. package/management-ui/src/components/IntegrationStatus.jsx +0 -336
  225. package/management-ui/src/components/Layout.jsx +0 -716
  226. package/management-ui/src/components/LoadingSpinner.jsx +0 -113
  227. package/management-ui/src/components/RepositoryPicker.jsx +0 -248
  228. package/management-ui/src/components/SessionMonitor.jsx +0 -350
  229. package/management-ui/src/components/StatusBadge.jsx +0 -208
  230. package/management-ui/src/components/UserContextSwitcher.jsx +0 -212
  231. package/management-ui/src/components/UserSimulation.jsx +0 -327
  232. package/management-ui/src/components/Welcome.jsx +0 -434
  233. package/management-ui/src/components/codegen/APIEndpointGenerator.jsx +0 -637
  234. package/management-ui/src/components/codegen/APIModuleSelector.jsx +0 -227
  235. package/management-ui/src/components/codegen/CodeGenerationWizard.jsx +0 -247
  236. package/management-ui/src/components/codegen/CodePreviewEditor.jsx +0 -316
  237. package/management-ui/src/components/codegen/DynamicModuleForm.jsx +0 -271
  238. package/management-ui/src/components/codegen/FormBuilder.jsx +0 -737
  239. package/management-ui/src/components/codegen/IntegrationGenerator.jsx +0 -855
  240. package/management-ui/src/components/codegen/ProjectScaffoldWizard.jsx +0 -797
  241. package/management-ui/src/components/codegen/SchemaBuilder.jsx +0 -303
  242. package/management-ui/src/components/codegen/TemplateSelector.jsx +0 -586
  243. package/management-ui/src/components/codegen/index.js +0 -10
  244. package/management-ui/src/components/connections/ConnectionConfigForm.jsx +0 -362
  245. package/management-ui/src/components/connections/ConnectionHealthMonitor.jsx +0 -182
  246. package/management-ui/src/components/connections/ConnectionTester.jsx +0 -200
  247. package/management-ui/src/components/connections/EntityRelationshipMapper.jsx +0 -292
  248. package/management-ui/src/components/connections/OAuthFlow.jsx +0 -204
  249. package/management-ui/src/components/connections/index.js +0 -5
  250. package/management-ui/src/components/index.js +0 -21
  251. package/management-ui/src/components/monitoring/APIGatewayMetrics.jsx +0 -222
  252. package/management-ui/src/components/monitoring/LambdaMetrics.jsx +0 -169
  253. package/management-ui/src/components/monitoring/MetricsChart.jsx +0 -197
  254. package/management-ui/src/components/monitoring/MonitoringDashboard.jsx +0 -393
  255. package/management-ui/src/components/monitoring/SQSMetrics.jsx +0 -246
  256. package/management-ui/src/components/monitoring/index.js +0 -6
  257. package/management-ui/src/components/monitoring/monitoring.css +0 -218
  258. package/management-ui/src/components/theme-provider.jsx +0 -52
  259. package/management-ui/src/components/theme-toggle.jsx +0 -39
  260. package/management-ui/src/components/ui/badge.tsx +0 -36
  261. package/management-ui/src/components/ui/button.test.jsx +0 -56
  262. package/management-ui/src/components/ui/button.tsx +0 -57
  263. package/management-ui/src/components/ui/card.tsx +0 -76
  264. package/management-ui/src/components/ui/dropdown-menu.tsx +0 -199
  265. package/management-ui/src/components/ui/select.tsx +0 -157
  266. package/management-ui/src/components/ui/skeleton.jsx +0 -15
  267. package/management-ui/src/hooks/useFrigg.jsx +0 -387
  268. package/management-ui/src/hooks/useSocket.jsx +0 -58
  269. package/management-ui/src/index.css +0 -193
  270. package/management-ui/src/lib/utils.ts +0 -6
  271. package/management-ui/src/main.jsx +0 -10
  272. package/management-ui/src/pages/CodeGeneration.jsx +0 -14
  273. package/management-ui/src/pages/Connections.jsx +0 -252
  274. package/management-ui/src/pages/ConnectionsEnhanced.jsx +0 -633
  275. package/management-ui/src/pages/Dashboard.jsx +0 -311
  276. package/management-ui/src/pages/Environment.jsx +0 -314
  277. package/management-ui/src/pages/IntegrationConfigure.jsx +0 -669
  278. package/management-ui/src/pages/IntegrationDiscovery.jsx +0 -567
  279. package/management-ui/src/pages/IntegrationTest.jsx +0 -742
  280. package/management-ui/src/pages/Integrations.jsx +0 -253
  281. package/management-ui/src/pages/Monitoring.jsx +0 -17
  282. package/management-ui/src/pages/Simulation.jsx +0 -155
  283. package/management-ui/src/pages/Users.jsx +0 -492
  284. package/management-ui/src/services/api.js +0 -41
  285. package/management-ui/src/services/apiModuleService.js +0 -193
  286. package/management-ui/src/services/websocket-handlers.js +0 -120
  287. package/management-ui/src/test/api/project.test.js +0 -273
  288. package/management-ui/src/test/components/Welcome.test.jsx +0 -378
  289. package/management-ui/src/test/mocks/server.js +0 -178
  290. package/management-ui/src/test/setup.js +0 -61
  291. package/management-ui/src/test/utils/test-utils.jsx +0 -134
  292. package/management-ui/src/utils/repository.js +0 -98
  293. package/management-ui/src/utils/repository.test.js +0 -118
  294. package/management-ui/src/workflows/phase2-integration-workflows.js +0 -884
  295. package/management-ui/tailwind.config.js +0 -63
  296. package/management-ui/tsconfig.json +0 -37
  297. package/management-ui/tsconfig.node.json +0 -10
  298. package/management-ui/vite.config.js +0 -26
  299. package/management-ui/vitest.config.js +0 -38
  300. package/test/auther-definition-method-tester.js +0 -45
  301. package/test/index.js +0 -9
  302. package/test/integration-validator.js +0 -2
  303. package/test/mock-api-readme.md +0 -102
  304. package/test/mock-api.js +0 -284
  305. package/test/mock-integration.js +0 -78
@@ -1,205 +0,0 @@
1
- /**
2
- * @fileoverview App definition types
3
- *
4
- * Defines the structure of the application definition with new ownership-based schema.
5
- * This replaces the old 'management' mode system.
6
- */
7
-
8
- /**
9
- * VPC configuration
10
- * @typedef {Object} VpcDefinition
11
- * @property {boolean} enable - Whether VPC is enabled
12
- *
13
- * @property {Object} [ownership] - Resource ownership configuration
14
- * @property {'stack'|'external'|'auto'} [ownership.vpc] - VPC ownership
15
- * @property {'stack'|'external'|'auto'} [ownership.securityGroup] - Security group ownership
16
- * @property {'stack'|'external'|'auto'} [ownership.subnets] - Subnets ownership
17
- * @property {'stack'|'external'|'auto'} [ownership.natGateway] - NAT gateway ownership
18
- * @property {'stack'|'external'|'auto'} [ownership.vpcEndpoints] - VPC endpoints ownership
19
- *
20
- * @property {Object} [external] - External resource references (required if ownership='external')
21
- * @property {string} [external.vpcId] - External VPC ID
22
- * @property {string[]} [external.securityGroupIds] - External security group IDs
23
- * @property {string[]} [external.subnetIds] - External subnet IDs
24
- * @property {string} [external.natGatewayId] - External NAT gateway ID
25
- * @property {Object} [external.vpcEndpointIds] - External VPC endpoint IDs
26
- * @property {string} [external.vpcEndpointIds.s3] - S3 endpoint ID
27
- * @property {string} [external.vpcEndpointIds.dynamodb] - DynamoDB endpoint ID
28
- * @property {string} [external.vpcEndpointIds.kms] - KMS endpoint ID
29
- * @property {string} [external.vpcEndpointIds.secretsManager] - Secrets Manager endpoint ID
30
- * @property {string} [external.vpcEndpointIds.sqs] - SQS endpoint ID
31
- *
32
- * @property {Object} [config] - Configuration preferences
33
- * @property {boolean} [config.selfHeal] - Auto-configure NAT/routes/etc (default: false)
34
- * @property {string} [config.cidrBlock] - CIDR block for stack-owned VPC (default: '10.0.0.0/16')
35
- * @property {boolean} [config.enableVpcEndpoints] - Enable VPC endpoints (default: true)
36
- * @property {Object} [config.natGateway] - NAT Gateway configuration
37
- * @property {boolean} [config.natGateway.enable] - Enable NAT Gateway (default: true)
38
- */
39
-
40
- /**
41
- * Aurora PostgreSQL configuration
42
- * @typedef {Object} AuroraDefinition
43
- * @property {boolean} enable - Whether Aurora is enabled
44
- *
45
- * @property {Object} [ownership] - Resource ownership configuration
46
- * @property {'stack'|'external'|'auto'} [ownership.cluster] - Aurora cluster ownership
47
- * @property {'stack'|'external'|'auto'} [ownership.subnetGroup] - DB subnet group ownership
48
- * @property {'stack'|'external'|'auto'} [ownership.secret] - Secrets Manager secret ownership
49
- *
50
- * @property {Object} [external] - External resource references
51
- * @property {string} [external.clusterId] - External cluster identifier
52
- * @property {string} [external.clusterEndpoint] - External cluster endpoint
53
- * @property {number} [external.port] - External cluster port
54
- * @property {string} [external.secretArn] - External Secrets Manager ARN
55
- *
56
- * @property {Object} [config] - Configuration preferences
57
- * @property {'aurora-postgresql'|'aurora-mysql'} [config.engine] - Database engine
58
- * @property {number} [config.minCapacity] - Min serverless capacity (default: 0.5)
59
- * @property {number} [config.maxCapacity] - Max serverless capacity (default: 1)
60
- * @property {string} [config.database] - Database name (default: 'frigg')
61
- * @property {boolean} [config.publiclyAccessible] - Public access (default: false)
62
- * @property {boolean} [config.autoCreateCredentials] - Auto-create credentials in Secrets Manager
63
- */
64
-
65
- /**
66
- * KMS encryption configuration
67
- * @typedef {Object} KmsDefinition
68
- * @property {boolean} enable - Whether KMS is enabled
69
- *
70
- * @property {Object} [ownership] - Resource ownership configuration
71
- * @property {'stack'|'external'|'auto'} [ownership.key] - KMS key ownership
72
- *
73
- * @property {Object} [external] - External resource references
74
- * @property {string} [external.keyId] - External KMS key ID or ARN
75
- * @property {string} [external.keyAlias] - External KMS key alias
76
- *
77
- * @property {Object} [config] - Configuration preferences
78
- * @property {boolean} [config.enableKeyRotation] - Enable automatic key rotation
79
- * @property {string} [config.description] - Key description
80
- */
81
-
82
- /**
83
- * SSM Parameter Store configuration
84
- * @typedef {Object} SsmDefinition
85
- * @property {boolean} enable - Whether SSM is enabled
86
- * @property {string[]} [parameterPaths] - Parameter paths to grant access to
87
- */
88
-
89
- /**
90
- * Database migration configuration
91
- * @typedef {Object} MigrationDefinition
92
- * @property {boolean} enable - Whether migrations are enabled
93
- * @property {string} [migrationPath] - Path to migration files
94
- */
95
-
96
- /**
97
- * WebSocket configuration
98
- * @typedef {Object} WebsocketDefinition
99
- * @property {boolean} enable - Whether WebSocket API is enabled
100
- */
101
-
102
- /**
103
- * Integration configuration
104
- * @typedef {Object} IntegrationDefinition
105
- * @property {Object} Definition - Integration definition object
106
- * @property {string} Definition.name - Integration name
107
- */
108
-
109
- /**
110
- * Complete application definition
111
- * @typedef {Object} AppDefinition
112
- * @property {string} name - Application name
113
- * @property {string} stage - Deployment stage (e.g., 'dev', 'production')
114
- * @property {string} provider - Cloud provider (e.g., 'aws')
115
- * @property {string} region - AWS region
116
- *
117
- * @property {VpcDefinition} [vpc] - VPC configuration
118
- * @property {Object} [database] - Database configuration
119
- * @property {AuroraDefinition} [database.postgres] - PostgreSQL configuration
120
- * @property {KmsDefinition} [encryption] - KMS encryption configuration
121
- * @property {SsmDefinition} [ssm] - SSM Parameter Store configuration
122
- * @property {MigrationDefinition} [migrations] - Database migration configuration
123
- * @property {WebsocketDefinition} [websockets] - WebSocket API configuration
124
- * @property {IntegrationDefinition[]} [integrations] - Integration definitions
125
- *
126
- * @property {Object} [environment] - Environment variables
127
- */
128
-
129
- /**
130
- * Validate app definition has required fields
131
- * @param {AppDefinition} appDefinition - App definition to validate
132
- * @throws {Error} If required fields are missing
133
- */
134
- function validateAppDefinition(appDefinition) {
135
- if (!appDefinition) {
136
- throw new Error('App definition is required');
137
- }
138
-
139
- if (!appDefinition.name) {
140
- throw new Error('App definition must have a name');
141
- }
142
-
143
- if (!appDefinition.provider) {
144
- throw new Error('App definition must have a provider');
145
- }
146
-
147
- if (!appDefinition.region) {
148
- throw new Error('App definition must have a region');
149
- }
150
- }
151
-
152
- /**
153
- * Get stack name from app definition
154
- * @param {AppDefinition} appDefinition - App definition
155
- * @returns {string} Stack name
156
- */
157
- function getStackName(appDefinition) {
158
- const stage = appDefinition.stage || 'dev';
159
- return `${appDefinition.name}-${stage}`;
160
- }
161
-
162
- /**
163
- * Check if VPC is enabled
164
- * @param {AppDefinition} appDefinition - App definition
165
- * @returns {boolean}
166
- */
167
- function isVpcEnabled(appDefinition) {
168
- return appDefinition.vpc?.enable === true;
169
- }
170
-
171
- /**
172
- * Check if Aurora is enabled
173
- * @param {AppDefinition} appDefinition - App definition
174
- * @returns {boolean}
175
- */
176
- function isAuroraEnabled(appDefinition) {
177
- return appDefinition.database?.postgres?.enable === true;
178
- }
179
-
180
- /**
181
- * Check if KMS is enabled
182
- * @param {AppDefinition} appDefinition - App definition
183
- * @returns {boolean}
184
- */
185
- function isKmsEnabled(appDefinition) {
186
- return appDefinition.encryption?.enable === true;
187
- }
188
-
189
- /**
190
- * Check if SSM is enabled
191
- * @param {AppDefinition} appDefinition - App definition
192
- * @returns {boolean}
193
- */
194
- function isSsmEnabled(appDefinition) {
195
- return appDefinition.ssm?.enable === true;
196
- }
197
-
198
- module.exports = {
199
- validateAppDefinition,
200
- getStackName,
201
- isVpcEnabled,
202
- isAuroraEnabled,
203
- isKmsEnabled,
204
- isSsmEnabled
205
- };
@@ -1,106 +0,0 @@
1
- /**
2
- * @fileoverview Discovery result types
3
- *
4
- * Defines the structure of resource discovery results.
5
- * Discovery reports FACTS - it doesn't make ownership decisions.
6
- */
7
-
8
- /**
9
- * Resource that exists in our CloudFormation stack
10
- * @typedef {Object} StackManagedResource
11
- * @property {string} logicalId - CloudFormation logical resource ID (e.g., 'FriggLambdaSecurityGroup')
12
- * @property {string} physicalId - AWS physical resource ID (e.g., 'sg-069629001ade41c9a')
13
- * @property {string} resourceType - CloudFormation resource type (e.g., 'AWS::EC2::SecurityGroup')
14
- * @property {Object} [properties] - Resource properties (optional, for detailed info)
15
- */
16
-
17
- /**
18
- * Resource that exists outside our CloudFormation stack
19
- * @typedef {Object} ExternalResource
20
- * @property {string} physicalId - AWS physical resource ID
21
- * @property {string} resourceType - CloudFormation resource type
22
- * @property {'tag-search' | 'name-search' | 'aws-api' | 'user-provided'} source - How it was discovered
23
- * @property {Object} [properties] - Resource properties (optional)
24
- * @property {Object} [tags] - Resource tags (if available)
25
- */
26
-
27
- /**
28
- * Complete discovery result
29
- * @typedef {Object} DiscoveryResult
30
- * @property {StackManagedResource[]} stackManaged - Resources in OUR CloudFormation stack
31
- * @property {ExternalResource[]} external - Resources outside our stack
32
- * @property {string} [stackName] - Name of our CloudFormation stack (if exists)
33
- * @property {boolean} fromCloudFormation - Whether stack was found in CloudFormation
34
- * @property {string} [region] - AWS region
35
- * @property {Object} [metadata] - Additional discovery metadata
36
- */
37
-
38
- /**
39
- * Create empty discovery result
40
- * @returns {DiscoveryResult}
41
- */
42
- function createEmptyDiscoveryResult() {
43
- return {
44
- stackManaged: [],
45
- external: [],
46
- fromCloudFormation: false
47
- };
48
- }
49
-
50
- /**
51
- * Find stack-managed resource by logical ID
52
- * @param {DiscoveryResult} discovery - Discovery result
53
- * @param {string} logicalId - Logical resource ID to find
54
- * @returns {StackManagedResource|null}
55
- */
56
- function findStackResource(discovery, logicalId) {
57
- return discovery.stackManaged.find(r => r.logicalId === logicalId) || null;
58
- }
59
-
60
- /**
61
- * Find external resource by type
62
- * @param {DiscoveryResult} discovery - Discovery result
63
- * @param {string} resourceType - CloudFormation resource type
64
- * @returns {ExternalResource|null}
65
- */
66
- function findExternalResource(discovery, resourceType) {
67
- return discovery.external.find(r => r.resourceType === resourceType) || null;
68
- }
69
-
70
- /**
71
- * Find all external resources by type
72
- * @param {DiscoveryResult} discovery - Discovery result
73
- * @param {string} resourceType - CloudFormation resource type
74
- * @returns {ExternalResource[]}
75
- */
76
- function findAllExternalResources(discovery, resourceType) {
77
- return discovery.external.filter(r => r.resourceType === resourceType);
78
- }
79
-
80
- /**
81
- * Check if specific resource exists in stack
82
- * @param {DiscoveryResult} discovery - Discovery result
83
- * @param {string} logicalId - Logical resource ID
84
- * @returns {boolean}
85
- */
86
- function isResourceInStack(discovery, logicalId) {
87
- return discovery.stackManaged.some(r => r.logicalId === logicalId);
88
- }
89
-
90
- /**
91
- * Get all stack logical IDs
92
- * @param {DiscoveryResult} discovery - Discovery result
93
- * @returns {string[]}
94
- */
95
- function getStackLogicalIds(discovery) {
96
- return discovery.stackManaged.map(r => r.logicalId);
97
- }
98
-
99
- module.exports = {
100
- createEmptyDiscoveryResult,
101
- findStackResource,
102
- findExternalResource,
103
- findAllExternalResources,
104
- isResourceInStack,
105
- getStackLogicalIds
106
- };
@@ -1,258 +0,0 @@
1
- const {
2
- createEmptyDiscoveryResult,
3
- findStackResource,
4
- findExternalResource,
5
- findAllExternalResources,
6
- isResourceInStack,
7
- getStackLogicalIds
8
- } = require('./discovery-result');
9
-
10
- describe('Discovery Result Utilities', () => {
11
- describe('createEmptyDiscoveryResult', () => {
12
- it('should create empty discovery result with correct structure', () => {
13
- const result = createEmptyDiscoveryResult();
14
-
15
- expect(result).toEqual({
16
- stackManaged: [],
17
- external: [],
18
- fromCloudFormation: false
19
- });
20
- });
21
- });
22
-
23
- describe('findStackResource', () => {
24
- it('should find resource by logical ID', () => {
25
- const discovery = {
26
- stackManaged: [
27
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' },
28
- { logicalId: 'FriggLambdaSecurityGroup', physicalId: 'sg-456', resourceType: 'AWS::EC2::SecurityGroup' }
29
- ],
30
- external: [],
31
- fromCloudFormation: true
32
- };
33
-
34
- const found = findStackResource(discovery, 'FriggLambdaSecurityGroup');
35
-
36
- expect(found).toEqual({
37
- logicalId: 'FriggLambdaSecurityGroup',
38
- physicalId: 'sg-456',
39
- resourceType: 'AWS::EC2::SecurityGroup'
40
- });
41
- });
42
-
43
- it('should return null if resource not found', () => {
44
- const discovery = {
45
- stackManaged: [
46
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' }
47
- ],
48
- external: [],
49
- fromCloudFormation: true
50
- };
51
-
52
- const found = findStackResource(discovery, 'NonExistent');
53
-
54
- expect(found).toBeNull();
55
- });
56
-
57
- it('should return null for empty stack managed resources', () => {
58
- const discovery = createEmptyDiscoveryResult();
59
- const found = findStackResource(discovery, 'FriggVPC');
60
-
61
- expect(found).toBeNull();
62
- });
63
- });
64
-
65
- describe('findExternalResource', () => {
66
- it('should find external resource by type', () => {
67
- const discovery = {
68
- stackManaged: [],
69
- external: [
70
- { physicalId: 'vpc-external', resourceType: 'AWS::EC2::VPC', source: 'tag-search' },
71
- { physicalId: 'sg-external', resourceType: 'AWS::EC2::SecurityGroup', source: 'tag-search' }
72
- ],
73
- fromCloudFormation: false
74
- };
75
-
76
- const found = findExternalResource(discovery, 'AWS::EC2::SecurityGroup');
77
-
78
- expect(found).toEqual({
79
- physicalId: 'sg-external',
80
- resourceType: 'AWS::EC2::SecurityGroup',
81
- source: 'tag-search'
82
- });
83
- });
84
-
85
- it('should return null if external resource not found', () => {
86
- const discovery = createEmptyDiscoveryResult();
87
- const found = findExternalResource(discovery, 'AWS::EC2::VPC');
88
-
89
- expect(found).toBeNull();
90
- });
91
-
92
- it('should return first match if multiple resources of same type', () => {
93
- const discovery = {
94
- stackManaged: [],
95
- external: [
96
- { physicalId: 'subnet-1', resourceType: 'AWS::EC2::Subnet', source: 'tag-search' },
97
- { physicalId: 'subnet-2', resourceType: 'AWS::EC2::Subnet', source: 'tag-search' }
98
- ],
99
- fromCloudFormation: false
100
- };
101
-
102
- const found = findExternalResource(discovery, 'AWS::EC2::Subnet');
103
-
104
- expect(found.physicalId).toBe('subnet-1');
105
- });
106
- });
107
-
108
- describe('findAllExternalResources', () => {
109
- it('should find all external resources of given type', () => {
110
- const discovery = {
111
- stackManaged: [],
112
- external: [
113
- { physicalId: 'subnet-1', resourceType: 'AWS::EC2::Subnet', source: 'tag-search' },
114
- { physicalId: 'subnet-2', resourceType: 'AWS::EC2::Subnet', source: 'tag-search' },
115
- { physicalId: 'sg-1', resourceType: 'AWS::EC2::SecurityGroup', source: 'tag-search' }
116
- ],
117
- fromCloudFormation: false
118
- };
119
-
120
- const found = findAllExternalResources(discovery, 'AWS::EC2::Subnet');
121
-
122
- expect(found).toHaveLength(2);
123
- expect(found[0].physicalId).toBe('subnet-1');
124
- expect(found[1].physicalId).toBe('subnet-2');
125
- });
126
-
127
- it('should return empty array if no resources found', () => {
128
- const discovery = createEmptyDiscoveryResult();
129
- const found = findAllExternalResources(discovery, 'AWS::EC2::VPC');
130
-
131
- expect(found).toEqual([]);
132
- });
133
- });
134
-
135
- describe('isResourceInStack', () => {
136
- it('should return true if resource is in stack', () => {
137
- const discovery = {
138
- stackManaged: [
139
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' },
140
- { logicalId: 'FriggLambdaSecurityGroup', physicalId: 'sg-456', resourceType: 'AWS::EC2::SecurityGroup' }
141
- ],
142
- external: [],
143
- fromCloudFormation: true
144
- };
145
-
146
- expect(isResourceInStack(discovery, 'FriggVPC')).toBe(true);
147
- expect(isResourceInStack(discovery, 'FriggLambdaSecurityGroup')).toBe(true);
148
- });
149
-
150
- it('should return false if resource is not in stack', () => {
151
- const discovery = {
152
- stackManaged: [
153
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' }
154
- ],
155
- external: [],
156
- fromCloudFormation: true
157
- };
158
-
159
- expect(isResourceInStack(discovery, 'NonExistent')).toBe(false);
160
- });
161
-
162
- it('should return false for empty stack', () => {
163
- const discovery = createEmptyDiscoveryResult();
164
-
165
- expect(isResourceInStack(discovery, 'FriggVPC')).toBe(false);
166
- });
167
- });
168
-
169
- describe('getStackLogicalIds', () => {
170
- it('should return all logical IDs from stack', () => {
171
- const discovery = {
172
- stackManaged: [
173
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' },
174
- { logicalId: 'FriggLambdaSecurityGroup', physicalId: 'sg-456', resourceType: 'AWS::EC2::SecurityGroup' },
175
- { logicalId: 'FriggAuroraCluster', physicalId: 'cluster-789', resourceType: 'AWS::RDS::DBCluster' }
176
- ],
177
- external: [],
178
- fromCloudFormation: true
179
- };
180
-
181
- const ids = getStackLogicalIds(discovery);
182
-
183
- expect(ids).toEqual([
184
- 'FriggVPC',
185
- 'FriggLambdaSecurityGroup',
186
- 'FriggAuroraCluster'
187
- ]);
188
- });
189
-
190
- it('should return empty array for empty stack', () => {
191
- const discovery = createEmptyDiscoveryResult();
192
- const ids = getStackLogicalIds(discovery);
193
-
194
- expect(ids).toEqual([]);
195
- });
196
- });
197
-
198
- describe('real-world scenarios', () => {
199
- it('scenario: fresh deploy, no stack exists', () => {
200
- const discovery = createEmptyDiscoveryResult();
201
-
202
- expect(discovery.fromCloudFormation).toBe(false);
203
- expect(discovery.stackManaged).toHaveLength(0);
204
- expect(discovery.external).toHaveLength(0);
205
-
206
- expect(isResourceInStack(discovery, 'FriggVPC')).toBe(false);
207
- expect(findStackResource(discovery, 'FriggVPC')).toBeNull();
208
- });
209
-
210
- it('scenario: redeploy existing stack', () => {
211
- const discovery = {
212
- stackManaged: [
213
- { logicalId: 'FriggVPC', physicalId: 'vpc-123', resourceType: 'AWS::EC2::VPC' },
214
- { logicalId: 'FriggLambdaSecurityGroup', physicalId: 'sg-069629001ade41c9a', resourceType: 'AWS::EC2::SecurityGroup' },
215
- { logicalId: 'FriggPrivateSubnet1', physicalId: 'subnet-1', resourceType: 'AWS::EC2::Subnet' },
216
- { logicalId: 'FriggPrivateSubnet2', physicalId: 'subnet-2', resourceType: 'AWS::EC2::Subnet' },
217
- { logicalId: 'FriggAuroraCluster', physicalId: 'cluster-abc', resourceType: 'AWS::RDS::DBCluster' },
218
- { logicalId: 'FriggKMSKey', physicalId: 'key-xyz', resourceType: 'AWS::KMS::Key' }
219
- ],
220
- external: [],
221
- fromCloudFormation: true,
222
- stackName: 'create-frigg-app-production'
223
- };
224
-
225
- expect(discovery.fromCloudFormation).toBe(true);
226
- expect(discovery.stackManaged).toHaveLength(6);
227
-
228
- // All these resources are in stack - MUST be kept in template
229
- expect(isResourceInStack(discovery, 'FriggLambdaSecurityGroup')).toBe(true);
230
- expect(isResourceInStack(discovery, 'FriggAuroraCluster')).toBe(true);
231
-
232
- const sg = findStackResource(discovery, 'FriggLambdaSecurityGroup');
233
- expect(sg.physicalId).toBe('sg-069629001ade41c9a');
234
- });
235
-
236
- it('scenario: use external VPC with stack-managed resources', () => {
237
- const discovery = {
238
- stackManaged: [
239
- { logicalId: 'FriggLambdaSecurityGroup', physicalId: 'sg-456', resourceType: 'AWS::EC2::SecurityGroup' },
240
- { logicalId: 'FriggPrivateSubnet1', physicalId: 'subnet-1', resourceType: 'AWS::EC2::Subnet' }
241
- ],
242
- external: [
243
- { physicalId: 'vpc-external', resourceType: 'AWS::EC2::VPC', source: 'user-provided' }
244
- ],
245
- fromCloudFormation: true,
246
- stackName: 'my-app-dev'
247
- };
248
-
249
- // VPC is external - should NOT be in template
250
- expect(isResourceInStack(discovery, 'FriggVPC')).toBe(false);
251
- const externalVpc = findExternalResource(discovery, 'AWS::EC2::VPC');
252
- expect(externalVpc.physicalId).toBe('vpc-external');
253
-
254
- // But security group IS in stack - MUST be in template
255
- expect(isResourceInStack(discovery, 'FriggLambdaSecurityGroup')).toBe(true);
256
- });
257
- });
258
- });
@@ -1,46 +0,0 @@
1
- /**
2
- * @fileoverview Central export for all infrastructure types
3
- */
4
-
5
- const { ResourceOwnership, validateOwnership, resolveOwnership } = require('./resource-ownership');
6
-
7
- const {
8
- createEmptyDiscoveryResult,
9
- findStackResource,
10
- findExternalResource,
11
- findAllExternalResources,
12
- isResourceInStack,
13
- getStackLogicalIds
14
- } = require('./discovery-result');
15
-
16
- const {
17
- validateAppDefinition,
18
- getStackName,
19
- isVpcEnabled,
20
- isAuroraEnabled,
21
- isKmsEnabled,
22
- isSsmEnabled
23
- } = require('./app-definition');
24
-
25
- module.exports = {
26
- // Resource Ownership
27
- ResourceOwnership,
28
- validateOwnership,
29
- resolveOwnership,
30
-
31
- // Discovery Result
32
- createEmptyDiscoveryResult,
33
- findStackResource,
34
- findExternalResource,
35
- findAllExternalResources,
36
- isResourceInStack,
37
- getStackLogicalIds,
38
-
39
- // App Definition
40
- validateAppDefinition,
41
- getStackName,
42
- isVpcEnabled,
43
- isAuroraEnabled,
44
- isKmsEnabled,
45
- isSsmEnabled
46
- };