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

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 (357) hide show
  1. package/frigg-cli/README.md +1289 -0
  2. package/frigg-cli/__tests__/unit/commands/build.test.js +279 -0
  3. package/frigg-cli/__tests__/unit/commands/db-setup.test.js +649 -0
  4. package/frigg-cli/__tests__/unit/commands/deploy.test.js +320 -0
  5. package/frigg-cli/__tests__/unit/commands/doctor.test.js +309 -0
  6. package/frigg-cli/__tests__/unit/commands/install.test.js +400 -0
  7. package/frigg-cli/__tests__/unit/commands/ui.test.js +346 -0
  8. package/frigg-cli/__tests__/unit/dependencies.test.js +74 -0
  9. package/frigg-cli/__tests__/unit/utils/database-validator.test.js +397 -0
  10. package/frigg-cli/__tests__/unit/utils/error-messages.test.js +345 -0
  11. package/frigg-cli/__tests__/unit/version-detection.test.js +171 -0
  12. package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
  13. package/frigg-cli/__tests__/utils/prisma-mock.js +194 -0
  14. package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
  15. package/frigg-cli/__tests__/utils/test-setup.js +287 -0
  16. package/frigg-cli/build-command/index.js +53 -14
  17. package/frigg-cli/db-setup-command/index.js +246 -0
  18. package/frigg-cli/deploy-command/SPEC-DEPLOY-DRY-RUN.md +981 -0
  19. package/frigg-cli/deploy-command/index.js +295 -17
  20. package/frigg-cli/doctor-command/index.js +335 -0
  21. package/frigg-cli/generate-command/__tests__/generate-command.test.js +301 -0
  22. package/frigg-cli/generate-command/azure-generator.js +43 -0
  23. package/frigg-cli/generate-command/gcp-generator.js +47 -0
  24. package/frigg-cli/generate-command/index.js +332 -0
  25. package/frigg-cli/generate-command/terraform-generator.js +555 -0
  26. package/frigg-cli/generate-iam-command.js +118 -0
  27. package/frigg-cli/index.js +142 -1
  28. package/frigg-cli/index.test.js +1 -4
  29. package/frigg-cli/init-command/backend-first-handler.js +756 -0
  30. package/frigg-cli/init-command/index.js +93 -0
  31. package/frigg-cli/init-command/template-handler.js +143 -0
  32. package/frigg-cli/install-command/index.js +1 -4
  33. package/frigg-cli/jest.config.js +124 -0
  34. package/frigg-cli/package.json +63 -0
  35. package/frigg-cli/repair-command/index.js +564 -0
  36. package/frigg-cli/start-command/index.js +125 -6
  37. package/frigg-cli/start-command/start-command.test.js +297 -0
  38. package/frigg-cli/test/init-command.test.js +180 -0
  39. package/frigg-cli/test/npm-registry.test.js +319 -0
  40. package/frigg-cli/ui-command/index.js +154 -0
  41. package/frigg-cli/utils/app-resolver.js +319 -0
  42. package/frigg-cli/utils/backend-path.js +16 -17
  43. package/frigg-cli/utils/database-validator.js +167 -0
  44. package/frigg-cli/utils/error-messages.js +329 -0
  45. package/frigg-cli/utils/npm-registry.js +167 -0
  46. package/frigg-cli/utils/process-manager.js +199 -0
  47. package/frigg-cli/utils/repo-detection.js +405 -0
  48. package/infrastructure/ARCHITECTURE.md +487 -0
  49. package/infrastructure/CLAUDE.md +481 -0
  50. package/infrastructure/HEALTH.md +468 -0
  51. package/infrastructure/README.md +522 -0
  52. package/infrastructure/__tests__/fixtures/mock-aws-resources.js +391 -0
  53. package/infrastructure/__tests__/helpers/test-utils.js +277 -0
  54. package/infrastructure/__tests__/postgres-config.test.js +914 -0
  55. package/infrastructure/__tests__/template-generation.test.js +687 -0
  56. package/infrastructure/create-frigg-infrastructure.js +129 -20
  57. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
  58. package/infrastructure/docs/PRE-DEPLOYMENT-HEALTH-CHECK-SPEC.md +1317 -0
  59. package/infrastructure/docs/WEBSOCKET-CONFIGURATION.md +105 -0
  60. package/infrastructure/docs/deployment-instructions.md +268 -0
  61. package/infrastructure/docs/generate-iam-command.md +278 -0
  62. package/infrastructure/docs/iam-policy-templates.md +193 -0
  63. package/infrastructure/domains/database/aurora-builder.js +809 -0
  64. package/infrastructure/domains/database/aurora-builder.test.js +950 -0
  65. package/infrastructure/domains/database/aurora-discovery.js +87 -0
  66. package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
  67. package/infrastructure/domains/database/aurora-resolver.js +210 -0
  68. package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
  69. package/infrastructure/domains/database/migration-builder.js +701 -0
  70. package/infrastructure/domains/database/migration-builder.test.js +321 -0
  71. package/infrastructure/domains/database/migration-resolver.js +163 -0
  72. package/infrastructure/domains/database/migration-resolver.test.js +337 -0
  73. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
  74. package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
  75. package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
  76. package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
  77. package/infrastructure/domains/health/application/ports/index.js +26 -0
  78. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
  79. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
  80. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
  81. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
  82. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
  83. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
  84. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
  85. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
  86. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
  87. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
  88. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
  89. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
  90. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
  91. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
  92. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
  93. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
  94. package/infrastructure/domains/health/domain/entities/issue.js +299 -0
  95. package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
  96. package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
  97. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
  98. package/infrastructure/domains/health/domain/entities/resource.js +159 -0
  99. package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
  100. package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
  101. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
  102. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
  103. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
  104. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
  105. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
  106. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
  107. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
  108. package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
  109. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
  110. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
  111. package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
  112. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
  113. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
  114. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
  115. package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
  116. package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
  117. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
  118. package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
  119. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
  120. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
  121. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
  122. package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
  123. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
  124. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
  125. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
  126. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
  127. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
  128. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
  129. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
  130. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
  131. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
  132. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
  133. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
  134. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
  135. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
  136. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
  137. package/infrastructure/domains/integration/integration-builder.js +404 -0
  138. package/infrastructure/domains/integration/integration-builder.test.js +690 -0
  139. package/infrastructure/domains/integration/integration-resolver.js +170 -0
  140. package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
  141. package/infrastructure/domains/integration/websocket-builder.js +69 -0
  142. package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
  143. package/infrastructure/domains/networking/vpc-builder.js +2051 -0
  144. package/infrastructure/domains/networking/vpc-builder.test.js +1960 -0
  145. package/infrastructure/domains/networking/vpc-discovery.js +177 -0
  146. package/infrastructure/domains/networking/vpc-discovery.test.js +350 -0
  147. package/infrastructure/domains/networking/vpc-resolver.js +505 -0
  148. package/infrastructure/domains/networking/vpc-resolver.test.js +801 -0
  149. package/infrastructure/domains/parameters/ssm-builder.js +79 -0
  150. package/infrastructure/domains/parameters/ssm-builder.test.js +189 -0
  151. package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
  152. package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
  153. package/infrastructure/domains/security/iam-generator.js +816 -0
  154. package/infrastructure/domains/security/iam-generator.test.js +204 -0
  155. package/infrastructure/domains/security/kms-builder.js +415 -0
  156. package/infrastructure/domains/security/kms-builder.test.js +392 -0
  157. package/infrastructure/domains/security/kms-discovery.js +80 -0
  158. package/infrastructure/domains/security/kms-discovery.test.js +177 -0
  159. package/infrastructure/domains/security/kms-resolver.js +96 -0
  160. package/infrastructure/domains/security/kms-resolver.test.js +216 -0
  161. package/infrastructure/domains/security/templates/frigg-deployment-iam-stack.yaml +401 -0
  162. package/infrastructure/domains/security/templates/iam-policy-basic.json +218 -0
  163. package/infrastructure/domains/security/templates/iam-policy-full.json +288 -0
  164. package/infrastructure/domains/shared/base-builder.js +112 -0
  165. package/infrastructure/domains/shared/base-resolver.js +186 -0
  166. package/infrastructure/domains/shared/base-resolver.test.js +305 -0
  167. package/infrastructure/domains/shared/builder-orchestrator.js +212 -0
  168. package/infrastructure/domains/shared/builder-orchestrator.test.js +213 -0
  169. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
  170. package/infrastructure/domains/shared/cloudformation-discovery.js +672 -0
  171. package/infrastructure/domains/shared/cloudformation-discovery.test.js +985 -0
  172. package/infrastructure/domains/shared/environment-builder.js +119 -0
  173. package/infrastructure/domains/shared/environment-builder.test.js +247 -0
  174. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +579 -0
  175. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +416 -0
  176. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
  177. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
  178. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
  179. package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
  180. package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
  181. package/infrastructure/domains/shared/resource-discovery.enhanced.test.js +306 -0
  182. package/infrastructure/domains/shared/resource-discovery.js +233 -0
  183. package/infrastructure/domains/shared/resource-discovery.test.js +588 -0
  184. package/infrastructure/domains/shared/types/app-definition.js +205 -0
  185. package/infrastructure/domains/shared/types/discovery-result.js +106 -0
  186. package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
  187. package/infrastructure/domains/shared/types/index.js +46 -0
  188. package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
  189. package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
  190. package/infrastructure/domains/shared/utilities/base-definition-factory.js +394 -0
  191. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
  192. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +291 -0
  193. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
  194. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
  195. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +159 -0
  196. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +444 -0
  197. package/infrastructure/domains/shared/validation/env-validator.js +78 -0
  198. package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
  199. package/infrastructure/domains/shared/validation/plugin-validator.js +187 -0
  200. package/infrastructure/domains/shared/validation/plugin-validator.test.js +323 -0
  201. package/infrastructure/esbuild.config.js +53 -0
  202. package/infrastructure/infrastructure-composer.js +117 -0
  203. package/infrastructure/infrastructure-composer.test.js +1895 -0
  204. package/infrastructure/integration.test.js +383 -0
  205. package/infrastructure/scripts/build-prisma-layer.js +701 -0
  206. package/infrastructure/scripts/build-prisma-layer.test.js +170 -0
  207. package/infrastructure/scripts/build-time-discovery.js +238 -0
  208. package/infrastructure/scripts/build-time-discovery.test.js +379 -0
  209. package/infrastructure/scripts/run-discovery.js +110 -0
  210. package/infrastructure/scripts/verify-prisma-layer.js +72 -0
  211. package/layers/prisma/.build-complete +3 -0
  212. package/layers/prisma/nodejs/package.json +8 -0
  213. package/management-ui/.eslintrc.js +22 -0
  214. package/management-ui/README.md +203 -0
  215. package/management-ui/components.json +21 -0
  216. package/management-ui/docs/phase2-integration-guide.md +320 -0
  217. package/management-ui/index.html +13 -0
  218. package/management-ui/package.json +76 -0
  219. package/management-ui/packages/devtools/frigg-cli/ui-command/index.js +302 -0
  220. package/management-ui/postcss.config.js +6 -0
  221. package/management-ui/server/api/backend.js +256 -0
  222. package/management-ui/server/api/cli.js +315 -0
  223. package/management-ui/server/api/codegen.js +663 -0
  224. package/management-ui/server/api/connections.js +857 -0
  225. package/management-ui/server/api/discovery.js +185 -0
  226. package/management-ui/server/api/environment/index.js +1 -0
  227. package/management-ui/server/api/environment/router.js +378 -0
  228. package/management-ui/server/api/environment.js +328 -0
  229. package/management-ui/server/api/integrations.js +876 -0
  230. package/management-ui/server/api/logs.js +248 -0
  231. package/management-ui/server/api/monitoring.js +282 -0
  232. package/management-ui/server/api/open-ide.js +31 -0
  233. package/management-ui/server/api/project.js +1029 -0
  234. package/management-ui/server/api/users/sessions.js +371 -0
  235. package/management-ui/server/api/users/simulation.js +254 -0
  236. package/management-ui/server/api/users.js +362 -0
  237. package/management-ui/server/api-contract.md +275 -0
  238. package/management-ui/server/index.js +873 -0
  239. package/management-ui/server/middleware/errorHandler.js +93 -0
  240. package/management-ui/server/middleware/security.js +32 -0
  241. package/management-ui/server/processManager.js +296 -0
  242. package/management-ui/server/server.js +346 -0
  243. package/management-ui/server/services/aws-monitor.js +413 -0
  244. package/management-ui/server/services/npm-registry.js +347 -0
  245. package/management-ui/server/services/template-engine.js +538 -0
  246. package/management-ui/server/utils/cliIntegration.js +220 -0
  247. package/management-ui/server/utils/environment/auditLogger.js +471 -0
  248. package/management-ui/server/utils/environment/awsParameterStore.js +275 -0
  249. package/management-ui/server/utils/environment/encryption.js +278 -0
  250. package/management-ui/server/utils/environment/envFileManager.js +286 -0
  251. package/management-ui/server/utils/import-commonjs.js +28 -0
  252. package/management-ui/server/utils/response.js +83 -0
  253. package/management-ui/server/websocket/handler.js +325 -0
  254. package/management-ui/src/App.jsx +25 -0
  255. package/management-ui/src/assets/FriggLogo.svg +1 -0
  256. package/management-ui/src/components/AppRouter.jsx +65 -0
  257. package/management-ui/src/components/Button.jsx +70 -0
  258. package/management-ui/src/components/Card.jsx +97 -0
  259. package/management-ui/src/components/EnvironmentCompare.jsx +400 -0
  260. package/management-ui/src/components/EnvironmentEditor.jsx +372 -0
  261. package/management-ui/src/components/EnvironmentImportExport.jsx +469 -0
  262. package/management-ui/src/components/EnvironmentSchema.jsx +491 -0
  263. package/management-ui/src/components/EnvironmentSecurity.jsx +463 -0
  264. package/management-ui/src/components/ErrorBoundary.jsx +73 -0
  265. package/management-ui/src/components/IntegrationCard.jsx +481 -0
  266. package/management-ui/src/components/IntegrationCardEnhanced.jsx +770 -0
  267. package/management-ui/src/components/IntegrationExplorer.jsx +379 -0
  268. package/management-ui/src/components/IntegrationStatus.jsx +336 -0
  269. package/management-ui/src/components/Layout.jsx +716 -0
  270. package/management-ui/src/components/LoadingSpinner.jsx +113 -0
  271. package/management-ui/src/components/RepositoryPicker.jsx +248 -0
  272. package/management-ui/src/components/SessionMonitor.jsx +350 -0
  273. package/management-ui/src/components/StatusBadge.jsx +208 -0
  274. package/management-ui/src/components/UserContextSwitcher.jsx +212 -0
  275. package/management-ui/src/components/UserSimulation.jsx +327 -0
  276. package/management-ui/src/components/Welcome.jsx +434 -0
  277. package/management-ui/src/components/codegen/APIEndpointGenerator.jsx +637 -0
  278. package/management-ui/src/components/codegen/APIModuleSelector.jsx +227 -0
  279. package/management-ui/src/components/codegen/CodeGenerationWizard.jsx +247 -0
  280. package/management-ui/src/components/codegen/CodePreviewEditor.jsx +316 -0
  281. package/management-ui/src/components/codegen/DynamicModuleForm.jsx +271 -0
  282. package/management-ui/src/components/codegen/FormBuilder.jsx +737 -0
  283. package/management-ui/src/components/codegen/IntegrationGenerator.jsx +855 -0
  284. package/management-ui/src/components/codegen/ProjectScaffoldWizard.jsx +797 -0
  285. package/management-ui/src/components/codegen/SchemaBuilder.jsx +303 -0
  286. package/management-ui/src/components/codegen/TemplateSelector.jsx +586 -0
  287. package/management-ui/src/components/codegen/index.js +10 -0
  288. package/management-ui/src/components/connections/ConnectionConfigForm.jsx +362 -0
  289. package/management-ui/src/components/connections/ConnectionHealthMonitor.jsx +182 -0
  290. package/management-ui/src/components/connections/ConnectionTester.jsx +200 -0
  291. package/management-ui/src/components/connections/EntityRelationshipMapper.jsx +292 -0
  292. package/management-ui/src/components/connections/OAuthFlow.jsx +204 -0
  293. package/management-ui/src/components/connections/index.js +5 -0
  294. package/management-ui/src/components/index.js +21 -0
  295. package/management-ui/src/components/monitoring/APIGatewayMetrics.jsx +222 -0
  296. package/management-ui/src/components/monitoring/LambdaMetrics.jsx +169 -0
  297. package/management-ui/src/components/monitoring/MetricsChart.jsx +197 -0
  298. package/management-ui/src/components/monitoring/MonitoringDashboard.jsx +393 -0
  299. package/management-ui/src/components/monitoring/SQSMetrics.jsx +246 -0
  300. package/management-ui/src/components/monitoring/index.js +6 -0
  301. package/management-ui/src/components/monitoring/monitoring.css +218 -0
  302. package/management-ui/src/components/theme-provider.jsx +52 -0
  303. package/management-ui/src/components/theme-toggle.jsx +39 -0
  304. package/management-ui/src/components/ui/badge.tsx +36 -0
  305. package/management-ui/src/components/ui/button.test.jsx +56 -0
  306. package/management-ui/src/components/ui/button.tsx +57 -0
  307. package/management-ui/src/components/ui/card.tsx +76 -0
  308. package/management-ui/src/components/ui/dropdown-menu.tsx +199 -0
  309. package/management-ui/src/components/ui/select.tsx +157 -0
  310. package/management-ui/src/components/ui/skeleton.jsx +15 -0
  311. package/management-ui/src/hooks/useFrigg.jsx +387 -0
  312. package/management-ui/src/hooks/useSocket.jsx +58 -0
  313. package/management-ui/src/index.css +193 -0
  314. package/management-ui/src/lib/utils.ts +6 -0
  315. package/management-ui/src/main.jsx +10 -0
  316. package/management-ui/src/pages/CodeGeneration.jsx +14 -0
  317. package/management-ui/src/pages/Connections.jsx +252 -0
  318. package/management-ui/src/pages/ConnectionsEnhanced.jsx +633 -0
  319. package/management-ui/src/pages/Dashboard.jsx +311 -0
  320. package/management-ui/src/pages/Environment.jsx +314 -0
  321. package/management-ui/src/pages/IntegrationConfigure.jsx +669 -0
  322. package/management-ui/src/pages/IntegrationDiscovery.jsx +567 -0
  323. package/management-ui/src/pages/IntegrationTest.jsx +742 -0
  324. package/management-ui/src/pages/Integrations.jsx +253 -0
  325. package/management-ui/src/pages/Monitoring.jsx +17 -0
  326. package/management-ui/src/pages/Simulation.jsx +155 -0
  327. package/management-ui/src/pages/Users.jsx +492 -0
  328. package/management-ui/src/services/api.js +41 -0
  329. package/management-ui/src/services/apiModuleService.js +193 -0
  330. package/management-ui/src/services/websocket-handlers.js +120 -0
  331. package/management-ui/src/test/api/project.test.js +273 -0
  332. package/management-ui/src/test/components/Welcome.test.jsx +378 -0
  333. package/management-ui/src/test/mocks/server.js +178 -0
  334. package/management-ui/src/test/setup.js +61 -0
  335. package/management-ui/src/test/utils/test-utils.jsx +134 -0
  336. package/management-ui/src/utils/repository.js +98 -0
  337. package/management-ui/src/utils/repository.test.js +118 -0
  338. package/management-ui/src/workflows/phase2-integration-workflows.js +884 -0
  339. package/management-ui/tailwind.config.js +63 -0
  340. package/management-ui/tsconfig.json +37 -0
  341. package/management-ui/tsconfig.node.json +10 -0
  342. package/management-ui/vite.config.js +26 -0
  343. package/management-ui/vitest.config.js +38 -0
  344. package/package.json +35 -14
  345. package/test/index.js +2 -4
  346. package/test/mock-integration.js +4 -14
  347. package/infrastructure/app-handler-helpers.js +0 -57
  348. package/infrastructure/backend-utils.js +0 -87
  349. package/infrastructure/routers/auth.js +0 -26
  350. package/infrastructure/routers/integration-defined-routers.js +0 -42
  351. package/infrastructure/routers/middleware/loadUser.js +0 -15
  352. package/infrastructure/routers/middleware/requireLoggedInUser.js +0 -12
  353. package/infrastructure/routers/user.js +0 -41
  354. package/infrastructure/routers/websocket.js +0 -55
  355. package/infrastructure/serverless-template.js +0 -291
  356. package/infrastructure/workers/integration-defined-workers.js +0 -24
  357. package/test/auther-definition-tester.js +0 -125
@@ -0,0 +1,416 @@
1
+ /**
2
+ * Tests for AWS Provider Adapter
3
+ *
4
+ * Tests AWS-specific cloud resource discovery
5
+ */
6
+
7
+ const { AWSProviderAdapter } = require('./aws-provider-adapter');
8
+
9
+ // Mock AWS SDK v3 clients
10
+ jest.mock('@aws-sdk/client-ec2');
11
+ jest.mock('@aws-sdk/client-kms');
12
+ jest.mock('@aws-sdk/client-rds');
13
+ jest.mock('@aws-sdk/client-ssm');
14
+ jest.mock('@aws-sdk/client-secrets-manager');
15
+
16
+ describe('AWSProviderAdapter', () => {
17
+ describe('listStackResources', () => {
18
+ it.skip('should handle pagination and return all resources across multiple pages', async () => {
19
+ const mockCfClient = {
20
+ send: jest.fn()
21
+ .mockResolvedValueOnce({
22
+ StackResourceSummaries: [
23
+ { LogicalResourceId: 'Resource1', PhysicalResourceId: 'res-1', ResourceType: 'AWS::EC2::VPC' },
24
+ { LogicalResourceId: 'Resource2', PhysicalResourceId: 'res-2', ResourceType: 'AWS::EC2::Subnet' }
25
+ ],
26
+ NextToken: 'token-page-2' // More pages available
27
+ })
28
+ .mockResolvedValueOnce({
29
+ StackResourceSummaries: [
30
+ { LogicalResourceId: 'VPCEndpointS3', PhysicalResourceId: 'vpce-s3', ResourceType: 'AWS::EC2::VPCEndpoint' },
31
+ { LogicalResourceId: 'VPCEndpointDynamoDB', PhysicalResourceId: 'vpce-ddb', ResourceType: 'AWS::EC2::VPCEndpoint' }
32
+ ],
33
+ NextToken: null // Last page
34
+ })
35
+ };
36
+
37
+ const provider = new AWSProviderAdapter('us-east-1');
38
+ provider.getCloudFormationClient = jest.fn().mockReturnValue(mockCfClient);
39
+
40
+ const resources = await provider.listStackResources('test-stack');
41
+
42
+ // Should have ALL resources from ALL pages
43
+ expect(resources).toHaveLength(4);
44
+ expect(resources.map(r => r.LogicalResourceId)).toEqual([
45
+ 'Resource1',
46
+ 'Resource2',
47
+ 'VPCEndpointS3',
48
+ 'VPCEndpointDynamoDB'
49
+ ]);
50
+
51
+ // Should have called CloudFormation twice (once for each page)
52
+ expect(mockCfClient.send).toHaveBeenCalledTimes(2);
53
+ });
54
+ });
55
+
56
+ let provider;
57
+
58
+ beforeEach(() => {
59
+ jest.clearAllMocks();
60
+ delete process.env.AWS_REGION;
61
+ });
62
+
63
+ describe('constructor()', () => {
64
+ it('should initialize with provided region', () => {
65
+ provider = new AWSProviderAdapter('eu-west-1');
66
+
67
+ expect(provider.region).toBe('eu-west-1');
68
+ });
69
+
70
+ it('should default to us-east-1 if no region provided', () => {
71
+ provider = new AWSProviderAdapter();
72
+
73
+ expect(provider.region).toBe('us-east-1');
74
+ });
75
+
76
+ it('should use AWS_REGION environment variable', () => {
77
+ process.env.AWS_REGION = 'ap-southeast-1';
78
+ provider = new AWSProviderAdapter();
79
+
80
+ expect(provider.region).toBe('ap-southeast-1');
81
+ });
82
+
83
+ it('should prefer provided region over environment variable', () => {
84
+ process.env.AWS_REGION = 'us-west-2';
85
+ provider = new AWSProviderAdapter('eu-central-1');
86
+
87
+ expect(provider.region).toBe('eu-central-1');
88
+ });
89
+
90
+ it('should store credentials if provided', () => {
91
+ const credentials = {
92
+ accessKeyId: 'test-key',
93
+ secretAccessKey: 'test-secret',
94
+ };
95
+
96
+ provider = new AWSProviderAdapter('us-east-1', credentials);
97
+
98
+ expect(provider.credentials).toEqual(credentials);
99
+ });
100
+
101
+ it('should lazy-load clients (not instantiated on construction)', () => {
102
+ provider = new AWSProviderAdapter('us-east-1');
103
+
104
+ expect(provider.ec2).toBeNull();
105
+ expect(provider.kms).toBeNull();
106
+ expect(provider.rds).toBeNull();
107
+ expect(provider.ssm).toBeNull();
108
+ expect(provider.secretsManager).toBeNull();
109
+ });
110
+ });
111
+
112
+ describe('getName()', () => {
113
+ it('should return "aws"', () => {
114
+ provider = new AWSProviderAdapter();
115
+
116
+ expect(provider.getName()).toBe('aws');
117
+ });
118
+ });
119
+
120
+ describe('getSupportedRegions()', () => {
121
+ it('should return array of AWS regions', () => {
122
+ provider = new AWSProviderAdapter();
123
+
124
+ const regions = provider.getSupportedRegions();
125
+
126
+ expect(Array.isArray(regions)).toBe(true);
127
+ expect(regions.length).toBeGreaterThan(0);
128
+ });
129
+
130
+ it('should include common US regions', () => {
131
+ provider = new AWSProviderAdapter();
132
+
133
+ const regions = provider.getSupportedRegions();
134
+
135
+ expect(regions).toContain('us-east-1');
136
+ expect(regions).toContain('us-east-2');
137
+ expect(regions).toContain('us-west-1');
138
+ expect(regions).toContain('us-west-2');
139
+ });
140
+
141
+ it('should include common EU regions', () => {
142
+ provider = new AWSProviderAdapter();
143
+
144
+ const regions = provider.getSupportedRegions();
145
+
146
+ expect(regions).toContain('eu-west-1');
147
+ expect(regions).toContain('eu-central-1');
148
+ });
149
+
150
+ it('should include common APAC regions', () => {
151
+ provider = new AWSProviderAdapter();
152
+
153
+ const regions = provider.getSupportedRegions();
154
+
155
+ expect(regions).toContain('ap-southeast-1');
156
+ expect(regions).toContain('ap-northeast-1');
157
+ });
158
+ });
159
+
160
+ describe('Lazy loading clients', () => {
161
+ beforeEach(() => {
162
+ provider = new AWSProviderAdapter('us-east-1');
163
+ });
164
+
165
+ it('should lazy-load EC2 client', () => {
166
+ expect(provider.ec2).toBeNull();
167
+
168
+ const client = provider.getEC2Client();
169
+
170
+ expect(provider.ec2).not.toBeNull();
171
+ expect(client).toBe(provider.ec2);
172
+ });
173
+
174
+ it('should lazy-load KMS client', () => {
175
+ expect(provider.kms).toBeNull();
176
+
177
+ const client = provider.getKMSClient();
178
+
179
+ expect(provider.kms).not.toBeNull();
180
+ expect(client).toBe(provider.kms);
181
+ });
182
+
183
+ it('should lazy-load RDS client', () => {
184
+ expect(provider.rds).toBeNull();
185
+
186
+ const client = provider.getRDSClient();
187
+
188
+ expect(provider.rds).not.toBeNull();
189
+ expect(client).toBe(provider.rds);
190
+ });
191
+
192
+ it('should lazy-load SSM client', () => {
193
+ expect(provider.ssm).toBeNull();
194
+
195
+ const client = provider.getSSMClient();
196
+
197
+ expect(provider.ssm).not.toBeNull();
198
+ expect(client).toBe(provider.ssm);
199
+ });
200
+
201
+ it('should lazy-load Secrets Manager client', () => {
202
+ expect(provider.secretsManager).toBeNull();
203
+
204
+ const client = provider.getSecretsManagerClient();
205
+
206
+ expect(provider.secretsManager).not.toBeNull();
207
+ expect(client).toBe(provider.secretsManager);
208
+ });
209
+
210
+ it('should lazy-load CloudFormation client', () => {
211
+ expect(provider.cloudformation).toBeNull();
212
+
213
+ const client = provider.getCloudFormationClient();
214
+
215
+ expect(provider.cloudformation).not.toBeNull();
216
+ expect(client).toBe(provider.cloudformation);
217
+ });
218
+
219
+ it('should reuse client on subsequent calls', () => {
220
+ const client1 = provider.getEC2Client();
221
+ const client2 = provider.getEC2Client();
222
+
223
+ expect(client1).toBe(client2);
224
+ });
225
+ });
226
+
227
+ describe('discoverVpc()', () => {
228
+ beforeEach(() => {
229
+ provider = new AWSProviderAdapter('us-east-1');
230
+ const { EC2Client } = require('@aws-sdk/client-ec2');
231
+ EC2Client.mockImplementation(() => ({
232
+ send: jest.fn(),
233
+ }));
234
+ });
235
+
236
+ it('should return VPC discovery results', async () => {
237
+ const mockSend = jest.fn()
238
+ .mockResolvedValueOnce({ // VPCs
239
+ Vpcs: [
240
+ { VpcId: 'vpc-123', CidrBlock: '172.31.0.0/16' },
241
+ ],
242
+ })
243
+ .mockResolvedValueOnce({ Subnets: [] }) // Subnets
244
+ .mockResolvedValueOnce({ SecurityGroups: [] }) // Security Groups
245
+ .mockResolvedValueOnce({ RouteTables: [] }) // Route Tables
246
+ .mockResolvedValueOnce({ NatGateways: [] }) // NAT Gateways
247
+ .mockResolvedValueOnce({ InternetGateways: [] }) // Internet Gateways
248
+ .mockResolvedValueOnce({ VpcEndpoints: [] }); // VPC Endpoints
249
+
250
+ provider.getEC2Client = jest.fn().mockReturnValue({ send: mockSend });
251
+
252
+ const result = await provider.discoverVpc({});
253
+
254
+ expect(result.vpcId).toBe('vpc-123');
255
+ expect(result.vpcCidr).toBe('172.31.0.0/16');
256
+ });
257
+
258
+ it('should handle discovery errors', async () => {
259
+ provider.getEC2Client = jest.fn().mockReturnValue({
260
+ send: jest.fn().mockRejectedValue(new Error('EC2 API Error')),
261
+ });
262
+
263
+ await expect(provider.discoverVpc({})).rejects.toThrow('Failed to discover AWS VPC');
264
+ });
265
+
266
+ it('should discover default VPC when no vpcId specified', async () => {
267
+ const mockSend = jest.fn();
268
+ provider.getEC2Client = jest.fn().mockReturnValue({ send: mockSend });
269
+
270
+ await provider.discoverVpc({}).catch(() => { });
271
+
272
+ // First call should filter for default VPC
273
+ expect(mockSend).toHaveBeenCalled();
274
+ });
275
+ });
276
+
277
+ describe('discoverKmsKeys()', () => {
278
+ beforeEach(() => {
279
+ provider = new AWSProviderAdapter('us-east-1');
280
+ const { KMSClient } = require('@aws-sdk/client-kms');
281
+ KMSClient.mockImplementation(() => ({
282
+ send: jest.fn(),
283
+ }));
284
+ });
285
+
286
+ it('should return KMS discovery results', async () => {
287
+ const mockSend = jest.fn()
288
+ .mockResolvedValueOnce({ // ListKeys
289
+ Keys: [{ KeyId: 'key-123' }],
290
+ })
291
+ .mockResolvedValueOnce({ // DescribeKey
292
+ KeyMetadata: {
293
+ KeyId: 'key-123',
294
+ Arn: 'arn:aws:kms:us-east-1:123:key/abc',
295
+ Enabled: true,
296
+ },
297
+ })
298
+ .mockResolvedValueOnce({ // ListAliases
299
+ Aliases: [
300
+ { AliasName: 'alias/my-key', TargetKeyId: 'key-123' },
301
+ ],
302
+ });
303
+
304
+ provider.getKMSClient = jest.fn().mockReturnValue({ send: mockSend });
305
+
306
+ const result = await provider.discoverKmsKeys({});
307
+
308
+ expect(result.keys.length).toBeGreaterThan(0);
309
+ expect(result.defaultKey).toBeDefined();
310
+ });
311
+
312
+ it('should handle discovery errors', async () => {
313
+ provider.getKMSClient = jest.fn().mockReturnValue({
314
+ send: jest.fn().mockRejectedValue(new Error('KMS API Error')),
315
+ });
316
+
317
+ await expect(provider.discoverKmsKeys({})).rejects.toThrow('Failed to discover AWS KMS keys');
318
+ });
319
+ });
320
+
321
+ describe('discoverDatabase()', () => {
322
+ beforeEach(() => {
323
+ provider = new AWSProviderAdapter('us-east-1');
324
+ const { RDSClient } = require('@aws-sdk/client-rds');
325
+ RDSClient.mockImplementation(() => ({
326
+ send: jest.fn(),
327
+ }));
328
+ });
329
+
330
+ it('should return database discovery results', async () => {
331
+ const mockSend = jest.fn()
332
+ .mockResolvedValueOnce({ // Clusters
333
+ DBClusters: [
334
+ {
335
+ DBClusterIdentifier: 'cluster-1',
336
+ Endpoint: 'cluster-1.example.com',
337
+ Port: 5432,
338
+ Engine: 'aurora-postgresql',
339
+ },
340
+ ],
341
+ })
342
+ .mockResolvedValueOnce({ DBInstances: [] }); // Instances
343
+
344
+ provider.getRDSClient = jest.fn().mockReturnValue({ send: mockSend });
345
+
346
+ const result = await provider.discoverDatabase({});
347
+
348
+ expect(result.endpoint).toBe('cluster-1.example.com');
349
+ expect(result.port).toBe(5432);
350
+ expect(result.engine).toBe('aurora-postgresql');
351
+ });
352
+
353
+ it('should handle discovery errors', async () => {
354
+ provider.getRDSClient = jest.fn().mockReturnValue({
355
+ send: jest.fn().mockRejectedValue(new Error('RDS API Error')),
356
+ });
357
+
358
+ await expect(provider.discoverDatabase({})).rejects.toThrow('Failed to discover AWS databases');
359
+ });
360
+ });
361
+
362
+ describe('discoverParameters()', () => {
363
+ beforeEach(() => {
364
+ provider = new AWSProviderAdapter('us-east-1');
365
+ });
366
+
367
+ it('should return parameter discovery results', async () => {
368
+ const mockSSMSend = jest.fn().mockResolvedValue({
369
+ Parameters: [
370
+ { Name: '/my-app/api-key', Value: 'encrypted' },
371
+ ],
372
+ });
373
+
374
+ const mockSMSend = jest.fn().mockResolvedValue({
375
+ SecretList: [
376
+ { Name: 'my-app/secret', ARN: 'arn:aws:secretsmanager:us-east-1:123:secret:my-app/secret' },
377
+ ],
378
+ });
379
+
380
+ provider.getSSMClient = jest.fn().mockReturnValue({ send: mockSSMSend });
381
+ provider.getSecretsManagerClient = jest.fn().mockReturnValue({ send: mockSMSend });
382
+
383
+ const result = await provider.discoverParameters({
384
+ parameterPath: '/my-app',
385
+ includeSecrets: true,
386
+ });
387
+
388
+ expect(result.parameters).toHaveLength(1);
389
+ expect(result.secrets).toHaveLength(1);
390
+ });
391
+
392
+ it('should handle discovery errors', async () => {
393
+ provider.getSSMClient = jest.fn().mockReturnValue({
394
+ send: jest.fn().mockRejectedValue(new Error('SSM API Error')),
395
+ });
396
+
397
+ await expect(provider.discoverParameters({ parameterPath: '/test' })).rejects.toThrow('Failed to discover AWS parameters');
398
+ });
399
+
400
+ it('should skip secrets when includeSecrets is false', async () => {
401
+ const mockSSMSend = jest.fn().mockResolvedValue({ Parameters: [] });
402
+
403
+ provider.getSSMClient = jest.fn().mockReturnValue({ send: mockSSMSend });
404
+
405
+ const result = await provider.discoverParameters({
406
+ includeSecrets: false,
407
+ });
408
+
409
+ expect(result.parameters).toEqual([]);
410
+ expect(result.secrets).toEqual([]);
411
+ // Behavior-based test: secrets should be empty when includeSecrets is false
412
+ // (Implementation detail: getSecretsManagerClient shouldn't be called)
413
+ });
414
+ });
415
+ });
416
+
@@ -0,0 +1,93 @@
1
+ /**
2
+ * FUTURE: Microsoft Azure Provider Adapter
3
+ *
4
+ * This file serves as a placeholder for future Azure support.
5
+ *
6
+ * Implementation will use:
7
+ * - @azure/arm-network for Virtual Network discovery
8
+ * - @azure/keyvault-keys for Key Vault key management
9
+ * - @azure/arm-sql for Azure SQL database discovery
10
+ * - @azure/keyvault-secrets for secrets management
11
+ * - @azure/arm-resources for resource group management
12
+ *
13
+ * Resources:
14
+ * - Azure SDK for JavaScript: https://docs.microsoft.com/en-us/javascript/azure/
15
+ * - ARM Network API: https://docs.microsoft.com/en-us/javascript/api/@azure/arm-network
16
+ * - Key Vault API: https://docs.microsoft.com/en-us/javascript/api/@azure/keyvault-keys
17
+ * - Azure SQL API: https://docs.microsoft.com/en-us/javascript/api/@azure/arm-sql
18
+ *
19
+ * Architecture mapping:
20
+ * - AWS VPC → Azure Virtual Network (VNet)
21
+ * - AWS KMS → Azure Key Vault
22
+ * - AWS RDS Aurora → Azure SQL Database / Azure Database for PostgreSQL
23
+ * - AWS SSM Parameter Store → Azure Key Vault Secrets
24
+ * - AWS Lambda → Azure Functions
25
+ *
26
+ * Example structure:
27
+ *
28
+ * const { NetworkManagementClient } = require('@azure/arm-network');
29
+ * const { KeyClient } = require('@azure/keyvault-keys');
30
+ * const { DefaultAzureCredential } = require('@azure/identity');
31
+ * const { CloudProviderAdapter } = require('./cloud-provider-adapter');
32
+ *
33
+ * class AzureProviderAdapter extends CloudProviderAdapter {
34
+ * constructor(region, credentials = {}) {
35
+ * super();
36
+ * this.region = region || 'eastus';
37
+ * this.subscriptionId = credentials.subscriptionId || process.env.AZURE_SUBSCRIPTION_ID;
38
+ * this.credential = new DefaultAzureCredential();
39
+ *
40
+ * this.networkClient = new NetworkManagementClient(
41
+ * this.credential,
42
+ * this.subscriptionId
43
+ * );
44
+ * }
45
+ *
46
+ * getName() {
47
+ * return 'azure';
48
+ * }
49
+ *
50
+ * getSupportedRegions() {
51
+ * return [
52
+ * 'eastus', 'eastus2', 'westus', 'westus2',
53
+ * 'northeurope', 'westeurope', 'southeastasia'
54
+ * ];
55
+ * }
56
+ *
57
+ * async discoverVpc(config) {
58
+ * // Discover Azure Virtual Networks
59
+ * const vnets = [];
60
+ * for await (const vnet of this.networkClient.virtualNetworks.listAll()) {
61
+ * vnets.push(vnet);
62
+ * }
63
+ * // ... implementation
64
+ * }
65
+ *
66
+ * async discoverKmsKeys(config) {
67
+ * // Discover Azure Key Vault keys
68
+ * const keyVaultUrl = `https://${config.keyVaultName}.vault.azure.net`;
69
+ * const keyClient = new KeyClient(keyVaultUrl, this.credential);
70
+ * const keys = [];
71
+ * for await (const key of keyClient.listPropertiesOfKeys()) {
72
+ * keys.push(key);
73
+ * }
74
+ * // ... implementation
75
+ * }
76
+ *
77
+ * async discoverDatabase(config) {
78
+ * // Discover Azure SQL databases
79
+ * // ... implementation
80
+ * }
81
+ *
82
+ * async discoverParameters(config) {
83
+ * // Discover Azure Key Vault secrets
84
+ * // ... implementation
85
+ * }
86
+ * }
87
+ *
88
+ * module.exports = { AzureProviderAdapter };
89
+ */
90
+
91
+ // Placeholder export to prevent import errors
92
+ module.exports = {};
93
+
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Cloud Provider Adapter (Abstract Base Class)
3
+ *
4
+ * Port - Hexagonal Architecture
5
+ *
6
+ * Defines the contract for cloud provider implementations.
7
+ * This abstraction enables multi-cloud support by providing a consistent
8
+ * interface for AWS, GCP, Azure, and other cloud providers.
9
+ *
10
+ * Benefits:
11
+ * - Cloud-agnostic infrastructure code
12
+ * - Easy to add new providers (just implement this interface)
13
+ * - Testable with mock providers
14
+ * - Clear separation between cloud-specific and business logic
15
+ */
16
+
17
+ class CloudProviderAdapter {
18
+ /**
19
+ * Get provider name
20
+ * @returns {string} Provider name ('aws', 'gcp', 'azure', etc.)
21
+ */
22
+ getName() {
23
+ throw new Error('CloudProviderAdapter.getName() must be implemented by subclass');
24
+ }
25
+
26
+ /**
27
+ * Get supported regions for this provider
28
+ * @returns {Array<string>} List of supported region identifiers
29
+ */
30
+ getSupportedRegions() {
31
+ throw new Error('CloudProviderAdapter.getSupportedRegions() must be implemented by subclass');
32
+ }
33
+
34
+ // ==================== Discovery Methods ====================
35
+
36
+ /**
37
+ * Discover VPC/network resources
38
+ *
39
+ * @param {Object} config - Discovery configuration
40
+ * @param {string} [config.vpcId] - Specific VPC ID to discover
41
+ * @param {string} [config.vpcName] - VPC name pattern to search for
42
+ * @param {boolean} [config.includeSubnets] - Whether to include subnet details
43
+ * @returns {Promise<Object>} Discovered VPC resources
44
+ * @returns {Promise<Object>} result.vpcId - VPC identifier
45
+ * @returns {Promise<Object>} result.vpcCidr - VPC CIDR block
46
+ * @returns {Promise<Object>} result.subnets - Array of subnet objects
47
+ * @returns {Promise<Object>} result.securityGroups - Array of security group objects
48
+ * @returns {Promise<Object>} result.routeTables - Array of route table objects
49
+ */
50
+ async discoverVpc(config) {
51
+ throw new Error('CloudProviderAdapter.discoverVpc() must be implemented by subclass');
52
+ }
53
+
54
+ /**
55
+ * Discover encryption keys (KMS, Cloud KMS, Azure Key Vault, etc.)
56
+ *
57
+ * @param {Object} config - Discovery configuration
58
+ * @param {string} [config.keyId] - Specific key ID to discover
59
+ * @param {string} [config.keyAlias] - Key alias to search for
60
+ * @returns {Promise<Object>} Discovered encryption key resources
61
+ * @returns {Promise<Object>} result.keyId - Key identifier
62
+ * @returns {Promise<Object>} result.keyArn - Key ARN/resource name
63
+ * @returns {Promise<Object>} result.aliases - Array of key aliases
64
+ */
65
+ async discoverKmsKeys(config) {
66
+ throw new Error('CloudProviderAdapter.discoverKmsKeys() must be implemented by subclass');
67
+ }
68
+
69
+ /**
70
+ * Discover database resources (RDS, Cloud SQL, Azure SQL, etc.)
71
+ *
72
+ * @param {Object} config - Discovery configuration
73
+ * @param {string} [config.databaseId] - Specific database instance/cluster ID
74
+ * @param {string} [config.engine] - Database engine filter ('postgresql', 'mysql', etc.)
75
+ * @returns {Promise<Object>} Discovered database resources
76
+ * @returns {Promise<Object>} result.endpoint - Database connection endpoint
77
+ * @returns {Promise<Object>} result.port - Database port
78
+ * @returns {Promise<Object>} result.engine - Database engine type
79
+ * @returns {Promise<Object>} result.version - Database version
80
+ */
81
+ async discoverDatabase(config) {
82
+ throw new Error('CloudProviderAdapter.discoverDatabase() must be implemented by subclass');
83
+ }
84
+
85
+ /**
86
+ * Discover parameter store/secret manager resources
87
+ *
88
+ * @param {Object} config - Discovery configuration
89
+ * @param {string} [config.parameterPath] - Parameter path prefix to search
90
+ * @param {string} [config.secretName] - Specific secret name to discover
91
+ * @returns {Promise<Object>} Discovered parameter/secret resources
92
+ * @returns {Promise<Object>} result.parameters - Array of parameter objects
93
+ * @returns {Promise<Object>} result.secrets - Array of secret objects
94
+ */
95
+ async discoverParameters(config) {
96
+ throw new Error('CloudProviderAdapter.discoverParameters() must be implemented by subclass');
97
+ }
98
+
99
+ // ==================== Provisioning Methods (Future) ====================
100
+ // These will be used for Terraform/Pulumi/CloudFormation generation
101
+
102
+ /**
103
+ * Generate VPC provisioning configuration
104
+ *
105
+ * @param {Object} config - VPC configuration
106
+ * @returns {Promise<Object>} Infrastructure-as-code configuration
107
+ */
108
+ async provisionVpc(config) {
109
+ throw new Error('CloudProviderAdapter.provisionVpc() not yet implemented. Future feature for IaC generation.');
110
+ }
111
+
112
+ /**
113
+ * Generate encryption key provisioning configuration
114
+ *
115
+ * @param {Object} config - Key configuration
116
+ * @returns {Promise<Object>} Infrastructure-as-code configuration
117
+ */
118
+ async provisionKmsKey(config) {
119
+ throw new Error('CloudProviderAdapter.provisionKmsKey() not yet implemented. Future feature for IaC generation.');
120
+ }
121
+
122
+ /**
123
+ * Generate database provisioning configuration
124
+ *
125
+ * @param {Object} config - Database configuration
126
+ * @returns {Promise<Object>} Infrastructure-as-code configuration
127
+ */
128
+ async provisionDatabase(config) {
129
+ throw new Error('CloudProviderAdapter.provisionDatabase() not yet implemented. Future feature for IaC generation.');
130
+ }
131
+ }
132
+
133
+ module.exports = {
134
+ CloudProviderAdapter,
135
+ };
136
+