@friggframework/devtools 2.0.0-next.7 → 2.0.0-next.70

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 (240) 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/auth-command/CLAUDE.md +293 -0
  17. package/frigg-cli/auth-command/README.md +450 -0
  18. package/frigg-cli/auth-command/api-key-flow.js +153 -0
  19. package/frigg-cli/auth-command/auth-tester.js +344 -0
  20. package/frigg-cli/auth-command/credential-storage.js +182 -0
  21. package/frigg-cli/auth-command/index.js +256 -0
  22. package/frigg-cli/auth-command/json-schema-form.js +67 -0
  23. package/frigg-cli/auth-command/module-loader.js +172 -0
  24. package/frigg-cli/auth-command/oauth-callback-server.js +431 -0
  25. package/frigg-cli/auth-command/oauth-flow.js +195 -0
  26. package/frigg-cli/auth-command/utils/browser.js +30 -0
  27. package/frigg-cli/build-command/index.js +45 -12
  28. package/frigg-cli/db-setup-command/index.js +246 -0
  29. package/frigg-cli/deploy-command/SPEC-DEPLOY-DRY-RUN.md +981 -0
  30. package/frigg-cli/deploy-command/index.js +295 -23
  31. package/frigg-cli/doctor-command/index.js +335 -0
  32. package/frigg-cli/generate-command/__tests__/generate-command.test.js +301 -0
  33. package/frigg-cli/generate-command/azure-generator.js +43 -0
  34. package/frigg-cli/generate-command/gcp-generator.js +47 -0
  35. package/frigg-cli/generate-command/index.js +332 -0
  36. package/frigg-cli/generate-command/terraform-generator.js +555 -0
  37. package/frigg-cli/generate-iam-command.js +118 -0
  38. package/frigg-cli/index.js +174 -1
  39. package/frigg-cli/index.test.js +1 -4
  40. package/frigg-cli/init-command/backend-first-handler.js +756 -0
  41. package/frigg-cli/init-command/index.js +93 -0
  42. package/frigg-cli/init-command/template-handler.js +143 -0
  43. package/frigg-cli/install-command/index.js +1 -4
  44. package/frigg-cli/jest.config.js +124 -0
  45. package/frigg-cli/package.json +63 -0
  46. package/frigg-cli/repair-command/index.js +564 -0
  47. package/frigg-cli/start-command/index.js +118 -5
  48. package/frigg-cli/start-command/start-command.test.js +297 -0
  49. package/frigg-cli/test/init-command.test.js +180 -0
  50. package/frigg-cli/test/npm-registry.test.js +319 -0
  51. package/frigg-cli/ui-command/index.js +154 -0
  52. package/frigg-cli/utils/app-resolver.js +319 -0
  53. package/frigg-cli/utils/backend-path.js +16 -17
  54. package/frigg-cli/utils/database-validator.js +167 -0
  55. package/frigg-cli/utils/error-messages.js +329 -0
  56. package/frigg-cli/utils/npm-registry.js +167 -0
  57. package/frigg-cli/utils/process-manager.js +199 -0
  58. package/frigg-cli/utils/repo-detection.js +405 -0
  59. package/infrastructure/ARCHITECTURE.md +487 -0
  60. package/infrastructure/CLAUDE.md +481 -0
  61. package/infrastructure/HEALTH.md +468 -0
  62. package/infrastructure/README.md +522 -0
  63. package/infrastructure/__tests__/fixtures/mock-aws-resources.js +391 -0
  64. package/infrastructure/__tests__/helpers/test-utils.js +277 -0
  65. package/infrastructure/__tests__/postgres-config.test.js +914 -0
  66. package/infrastructure/__tests__/template-generation.test.js +687 -0
  67. package/infrastructure/create-frigg-infrastructure.js +129 -20
  68. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
  69. package/infrastructure/docs/PRE-DEPLOYMENT-HEALTH-CHECK-SPEC.md +1317 -0
  70. package/infrastructure/docs/WEBSOCKET-CONFIGURATION.md +105 -0
  71. package/infrastructure/docs/deployment-instructions.md +268 -0
  72. package/infrastructure/docs/generate-iam-command.md +278 -0
  73. package/infrastructure/docs/iam-policy-templates.md +193 -0
  74. package/infrastructure/domains/database/aurora-builder.js +809 -0
  75. package/infrastructure/domains/database/aurora-builder.test.js +950 -0
  76. package/infrastructure/domains/database/aurora-discovery.js +87 -0
  77. package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
  78. package/infrastructure/domains/database/aurora-resolver.js +210 -0
  79. package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
  80. package/infrastructure/domains/database/migration-builder.js +701 -0
  81. package/infrastructure/domains/database/migration-builder.test.js +321 -0
  82. package/infrastructure/domains/database/migration-resolver.js +163 -0
  83. package/infrastructure/domains/database/migration-resolver.test.js +337 -0
  84. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
  85. package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
  86. package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
  87. package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
  88. package/infrastructure/domains/health/application/ports/index.js +26 -0
  89. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
  90. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
  91. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
  92. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
  93. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
  94. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
  95. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
  96. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
  97. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
  98. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
  99. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
  100. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
  101. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
  102. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
  103. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
  104. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
  105. package/infrastructure/domains/health/domain/entities/issue.js +299 -0
  106. package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
  107. package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
  108. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
  109. package/infrastructure/domains/health/domain/entities/resource.js +159 -0
  110. package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
  111. package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
  112. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
  113. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
  114. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
  115. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
  116. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
  117. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
  118. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
  119. package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
  120. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
  121. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
  122. package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
  123. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
  124. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
  125. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
  126. package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
  127. package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
  128. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
  129. package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
  130. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
  131. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
  132. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
  133. package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
  134. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
  135. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
  136. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
  137. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
  138. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
  139. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
  140. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
  141. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
  142. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
  143. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
  144. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
  145. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
  146. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
  147. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
  148. package/infrastructure/domains/integration/integration-builder.js +404 -0
  149. package/infrastructure/domains/integration/integration-builder.test.js +690 -0
  150. package/infrastructure/domains/integration/integration-resolver.js +170 -0
  151. package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
  152. package/infrastructure/domains/integration/websocket-builder.js +69 -0
  153. package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
  154. package/infrastructure/domains/networking/vpc-builder.js +2051 -0
  155. package/infrastructure/domains/networking/vpc-builder.test.js +1960 -0
  156. package/infrastructure/domains/networking/vpc-discovery.js +177 -0
  157. package/infrastructure/domains/networking/vpc-discovery.test.js +350 -0
  158. package/infrastructure/domains/networking/vpc-resolver.js +505 -0
  159. package/infrastructure/domains/networking/vpc-resolver.test.js +801 -0
  160. package/infrastructure/domains/parameters/ssm-builder.js +79 -0
  161. package/infrastructure/domains/parameters/ssm-builder.test.js +189 -0
  162. package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
  163. package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
  164. package/infrastructure/domains/scheduler/scheduler-builder.js +211 -0
  165. package/infrastructure/domains/security/iam-generator.js +816 -0
  166. package/infrastructure/domains/security/iam-generator.test.js +204 -0
  167. package/infrastructure/domains/security/kms-builder.js +415 -0
  168. package/infrastructure/domains/security/kms-builder.test.js +392 -0
  169. package/infrastructure/domains/security/kms-discovery.js +80 -0
  170. package/infrastructure/domains/security/kms-discovery.test.js +177 -0
  171. package/infrastructure/domains/security/kms-resolver.js +96 -0
  172. package/infrastructure/domains/security/kms-resolver.test.js +216 -0
  173. package/infrastructure/domains/security/templates/frigg-deployment-iam-stack.yaml +401 -0
  174. package/infrastructure/domains/security/templates/iam-policy-basic.json +218 -0
  175. package/infrastructure/domains/security/templates/iam-policy-full.json +288 -0
  176. package/infrastructure/domains/shared/base-builder.js +112 -0
  177. package/infrastructure/domains/shared/base-resolver.js +186 -0
  178. package/infrastructure/domains/shared/base-resolver.test.js +305 -0
  179. package/infrastructure/domains/shared/builder-orchestrator.js +212 -0
  180. package/infrastructure/domains/shared/builder-orchestrator.test.js +213 -0
  181. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
  182. package/infrastructure/domains/shared/cloudformation-discovery.js +672 -0
  183. package/infrastructure/domains/shared/cloudformation-discovery.test.js +985 -0
  184. package/infrastructure/domains/shared/environment-builder.js +119 -0
  185. package/infrastructure/domains/shared/environment-builder.test.js +247 -0
  186. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +579 -0
  187. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +416 -0
  188. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
  189. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
  190. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
  191. package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
  192. package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
  193. package/infrastructure/domains/shared/resource-discovery.enhanced.test.js +306 -0
  194. package/infrastructure/domains/shared/resource-discovery.js +233 -0
  195. package/infrastructure/domains/shared/resource-discovery.test.js +588 -0
  196. package/infrastructure/domains/shared/types/app-definition.js +205 -0
  197. package/infrastructure/domains/shared/types/discovery-result.js +106 -0
  198. package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
  199. package/infrastructure/domains/shared/types/index.js +46 -0
  200. package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
  201. package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
  202. package/infrastructure/domains/shared/utilities/base-definition-factory.js +408 -0
  203. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
  204. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +291 -0
  205. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
  206. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
  207. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +159 -0
  208. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +444 -0
  209. package/infrastructure/domains/shared/validation/env-validator.js +78 -0
  210. package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
  211. package/infrastructure/domains/shared/validation/plugin-validator.js +187 -0
  212. package/infrastructure/domains/shared/validation/plugin-validator.test.js +323 -0
  213. package/infrastructure/esbuild.config.js +53 -0
  214. package/infrastructure/infrastructure-composer.js +119 -0
  215. package/infrastructure/infrastructure-composer.test.js +1895 -0
  216. package/infrastructure/integration.test.js +383 -0
  217. package/infrastructure/scripts/build-prisma-layer.js +701 -0
  218. package/infrastructure/scripts/build-prisma-layer.test.js +170 -0
  219. package/infrastructure/scripts/build-time-discovery.js +238 -0
  220. package/infrastructure/scripts/build-time-discovery.test.js +379 -0
  221. package/infrastructure/scripts/run-discovery.js +110 -0
  222. package/infrastructure/scripts/verify-prisma-layer.js +72 -0
  223. package/management-ui/README.md +203 -0
  224. package/package.json +44 -14
  225. package/test/index.js +2 -4
  226. package/test/mock-api.js +1 -3
  227. package/test/mock-integration.js +4 -14
  228. package/.eslintrc.json +0 -3
  229. package/CHANGELOG.md +0 -132
  230. package/infrastructure/app-handler-helpers.js +0 -57
  231. package/infrastructure/backend-utils.js +0 -87
  232. package/infrastructure/routers/auth.js +0 -26
  233. package/infrastructure/routers/integration-defined-routers.js +0 -42
  234. package/infrastructure/routers/middleware/loadUser.js +0 -15
  235. package/infrastructure/routers/middleware/requireLoggedInUser.js +0 -12
  236. package/infrastructure/routers/user.js +0 -41
  237. package/infrastructure/routers/websocket.js +0 -55
  238. package/infrastructure/serverless-template.js +0 -291
  239. package/infrastructure/workers/integration-defined-workers.js +0 -24
  240. package/test/auther-definition-tester.js +0 -125
@@ -1,12 +1,102 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // Version Detection Wrapper
4
+ // This code runs when frigg-cli is installed globally
5
+ // It checks for a local installation and prefers it if newer
6
+ (function versionDetection() {
7
+ // Skip version detection if explicitly disabled (prevents recursion)
8
+ if (process.env.FRIGG_CLI_SKIP_VERSION_CHECK === 'true') {
9
+ return;
10
+ }
11
+
12
+ const path = require('path');
13
+ const fs = require('fs');
14
+ const semver = require('semver');
15
+ const { spawn } = require('child_process');
16
+
17
+ // Get the directory from which the command was invoked
18
+ const cwd = process.cwd();
19
+
20
+ // Try to find local frigg-cli installation
21
+ const localCliPath = path.join(cwd, 'node_modules', '@friggframework', 'frigg-cli');
22
+ const localCliPackageJson = path.join(localCliPath, 'package.json');
23
+ const localCliIndex = path.join(localCliPath, 'index.js');
24
+
25
+ // Get global version (this package)
26
+ const globalVersion = require('./package.json').version;
27
+
28
+ // Check if local installation exists
29
+ if (fs.existsSync(localCliPackageJson) && fs.existsSync(localCliIndex)) {
30
+ try {
31
+ const localPackage = JSON.parse(fs.readFileSync(localCliPackageJson, 'utf8'));
32
+ const localVersion = localPackage.version;
33
+
34
+ // Compare versions
35
+ const comparison = semver.compare(localVersion, globalVersion);
36
+
37
+ if (comparison >= 0) {
38
+ // Local version is newer or equal - use it
39
+ console.log(`Using local frigg-cli@${localVersion} (global: ${globalVersion})`);
40
+
41
+ // Execute local CLI as subprocess to avoid module resolution issues
42
+ const args = process.argv.slice(2); // Remove 'node' and script path
43
+ const child = spawn(process.execPath, [localCliIndex, ...args], {
44
+ stdio: 'inherit',
45
+ env: {
46
+ ...process.env,
47
+ FRIGG_CLI_SKIP_VERSION_CHECK: 'true', // Prevent recursion
48
+ },
49
+ });
50
+
51
+ child.on('exit', (code) => {
52
+ process.exit(code || 0);
53
+ });
54
+
55
+ // Signal that we've delegated to local CLI
56
+ process.on('SIGINT', () => {
57
+ child.kill('SIGINT');
58
+ });
59
+
60
+ // Prevent further execution
61
+ return true; // Indicates we've delegated
62
+ } else {
63
+ // Global version is newer - warn user
64
+ console.warn(`⚠️ Version mismatch: global frigg-cli@${globalVersion} is newer than local frigg-cli@${localVersion}`);
65
+ console.warn(` Consider updating local version: npm install @friggframework/frigg-cli@latest`);
66
+ }
67
+ } catch (error) {
68
+ // Failed to read local package.json or compare versions
69
+ // Continue with global version silently
70
+ }
71
+ }
72
+
73
+ // Return false to indicate we should continue with global version
74
+ return false;
75
+ })();
76
+
3
77
  const { Command } = require('commander');
78
+ const { initCommand } = require('./init-command');
4
79
  const { installCommand } = require('./install-command');
5
80
  const { startCommand } = require('./start-command'); // Assuming you have a startCommand module
6
81
  const { buildCommand } = require('./build-command');
7
82
  const { deployCommand } = require('./deploy-command');
83
+ const { generateIamCommand } = require('./generate-iam-command');
84
+ const { uiCommand } = require('./ui-command');
85
+ const { dbSetupCommand } = require('./db-setup-command');
86
+ const { doctorCommand } = require('./doctor-command');
87
+ const { repairCommand } = require('./repair-command');
88
+ const { authCommand } = require('./auth-command');
8
89
 
9
90
  const program = new Command();
91
+
92
+ program
93
+ .command('init [templateName]')
94
+ .description('Initialize a new Frigg application')
95
+ .option('-t, --template <template>', 'template to use', 'backend-only')
96
+ .option('-n, --name <name>', 'project name')
97
+ .option('-d, --directory <directory>', 'target directory')
98
+ .action(initCommand);
99
+
10
100
  program
11
101
  .command('install [apiModuleName]')
12
102
  .description('Install an API module')
@@ -16,20 +106,103 @@ program
16
106
  .command('start')
17
107
  .description('Run the backend and optional frontend')
18
108
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
109
+ .option('-v, --verbose', 'enable verbose output')
19
110
  .action(startCommand);
20
111
 
21
112
  program
22
113
  .command('build')
23
114
  .description('Build the serverless application')
24
115
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
116
+ .option('-v, --verbose', 'enable verbose output')
117
+ .option('-p, --production', 'build for production (enables AWS discovery)')
25
118
  .action(buildCommand);
26
119
 
27
120
  program
28
121
  .command('deploy')
29
122
  .description('Deploy the serverless application')
30
123
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
124
+ .option('-v, --verbose', 'enable verbose output')
125
+ .option('-f, --force', 'force deployment (bypasses caching for layers and functions)')
126
+ .option('--skip-doctor', 'skip post-deployment health check')
31
127
  .action(deployCommand);
32
128
 
129
+ program
130
+ .command('generate-iam')
131
+ .description('Generate IAM CloudFormation template based on app definition')
132
+ .option('-o, --output <path>', 'output directory', 'backend/infrastructure')
133
+ .option('-u, --user <name>', 'deployment user name', 'frigg-deployment-user')
134
+ .option('-s, --stack-name <name>', 'CloudFormation stack name', 'frigg-deployment-iam')
135
+ .option('-v, --verbose', 'enable verbose output')
136
+ .action(generateIamCommand);
137
+
138
+ program
139
+ .command('ui')
140
+ .description('Launch the Frigg Management UI')
141
+ .option('-p, --port <port>', 'port to run the UI on', '3210')
142
+ .option('--no-open', 'do not open browser automatically')
143
+ .action(uiCommand);
144
+
145
+ program
146
+ .command('db:setup')
147
+ .description('Set up database schema and generate Prisma client')
148
+ .option('-s, --stage <stage>', 'deployment stage', 'development')
149
+ .option('-v, --verbose', 'enable verbose output')
150
+ .action(dbSetupCommand);
151
+
152
+ program
153
+ .command('doctor [stackName]')
154
+ .description('Run health check on deployed CloudFormation stack')
155
+ .option('-r, --region <region>', 'AWS region (defaults to AWS_REGION env var or us-east-1)')
156
+ .option('-f, --format <format>', 'output format (console or json)', 'console')
157
+ .option('-o, --output <path>', 'save report to file')
158
+ .option('-v, --verbose', 'enable verbose output')
159
+ .action(doctorCommand);
160
+
161
+ program
162
+ .command('repair <stackName>')
163
+ .description('Repair infrastructure issues (import orphaned resources, reconcile property drift)')
164
+ .option('-r, --region <region>', 'AWS region (defaults to AWS_REGION env var or us-east-1)')
165
+ .option('--import', 'import orphaned resources into stack')
166
+ .option('--reconcile', 'reconcile property drift')
167
+ .option('--mode <mode>', 'reconciliation mode (template or resource)', 'template')
168
+ .option('-y, --yes', 'skip confirmation prompts')
169
+ .option('-v, --verbose', 'enable verbose output')
170
+ .action(repairCommand);
171
+
172
+ // Auth command group for testing API module authentication
173
+ const authProgram = program
174
+ .command('auth')
175
+ .description('Test API module authentication');
176
+
177
+ authProgram
178
+ .command('test <module>')
179
+ .description('Test authentication for an API module')
180
+ .option('--api-key <key>', 'API key for API-Key authentication')
181
+ .option('--port <port>', 'Callback server port', '3333')
182
+ .option('--timeout <seconds>', 'OAuth callback timeout', '300')
183
+ .option('-v, --verbose', 'Enable verbose output')
184
+ .action(authCommand.test);
185
+
186
+ authProgram
187
+ .command('list')
188
+ .description('List saved credentials')
189
+ .option('--json', 'Output as JSON')
190
+ .action(authCommand.list);
191
+
192
+ authProgram
193
+ .command('get <module>')
194
+ .description('Get credentials for a module')
195
+ .option('--json', 'Output as JSON')
196
+ .option('--export', 'Export as environment variables')
197
+ .action(authCommand.get);
198
+
199
+ authProgram
200
+ .command('delete [module]')
201
+ .description('Delete saved credentials')
202
+ .option('--all', 'Delete all credentials')
203
+ .option('-y, --yes', 'Skip confirmation')
204
+ .action(authCommand.delete);
205
+
33
206
  program.parse(process.argv);
34
207
 
35
- module.exports = { installCommand, startCommand, buildCommand, deployCommand };
208
+ module.exports = { initCommand, installCommand, startCommand, buildCommand, deployCommand, generateIamCommand, uiCommand, dbSetupCommand, doctorCommand, repairCommand, authCommand };
@@ -1,10 +1,7 @@
1
1
  const { Command } = require('commander');
2
2
  const { installCommand } = require('./index');
3
3
  const { validatePackageExists } = require('./install-command/validate-package');
4
- const {
5
- findNearestBackendPackageJson,
6
- validateBackendPath,
7
- } = require('./utils/backend-path');
4
+ const { findNearestBackendPackageJson, validateBackendPath } = require('@friggframework/core');
8
5
  const { installPackage } = require('./install-command/install-package');
9
6
  const { createIntegrationFile } = require('./install-command/integration-file');
10
7
  const { updateBackendJsFile } = require('./install-command/backend-js');