@friggframework/devtools 2.0.0-next.11 → 2.0.0-next.110

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 (247) 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/generate-iam.test.js +97 -0
  7. package/frigg-cli/__tests__/unit/commands/install.test.js +400 -0
  8. package/frigg-cli/__tests__/unit/commands/ui.test.js +346 -0
  9. package/frigg-cli/__tests__/unit/dependencies.test.js +74 -0
  10. package/frigg-cli/__tests__/unit/utils/database-validator.test.js +397 -0
  11. package/frigg-cli/__tests__/unit/utils/error-messages.test.js +345 -0
  12. package/frigg-cli/__tests__/unit/version-detection.test.js +171 -0
  13. package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
  14. package/frigg-cli/__tests__/utils/prisma-mock.js +194 -0
  15. package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
  16. package/frigg-cli/__tests__/utils/test-setup.js +287 -0
  17. package/frigg-cli/auth-command/CLAUDE.md +293 -0
  18. package/frigg-cli/auth-command/README.md +450 -0
  19. package/frigg-cli/auth-command/api-key-flow.js +153 -0
  20. package/frigg-cli/auth-command/auth-tester.js +344 -0
  21. package/frigg-cli/auth-command/credential-storage.js +182 -0
  22. package/frigg-cli/auth-command/index.js +256 -0
  23. package/frigg-cli/auth-command/json-schema-form.js +67 -0
  24. package/frigg-cli/auth-command/module-loader.js +172 -0
  25. package/frigg-cli/auth-command/oauth-callback-server.js +431 -0
  26. package/frigg-cli/auth-command/oauth-flow.js +195 -0
  27. package/frigg-cli/auth-command/utils/browser.js +30 -0
  28. package/frigg-cli/build-command/index.js +45 -12
  29. package/frigg-cli/db-setup-command/index.js +246 -0
  30. package/frigg-cli/deploy-command/SPEC-DEPLOY-DRY-RUN.md +981 -0
  31. package/frigg-cli/deploy-command/index.js +339 -23
  32. package/frigg-cli/doctor-command/index.js +335 -0
  33. package/frigg-cli/generate-command/__tests__/generate-command.test.js +301 -0
  34. package/frigg-cli/generate-command/azure-generator.js +43 -0
  35. package/frigg-cli/generate-command/gcp-generator.js +47 -0
  36. package/frigg-cli/generate-command/index.js +333 -0
  37. package/frigg-cli/generate-command/terraform-generator.js +555 -0
  38. package/frigg-cli/generate-iam-command.js +119 -0
  39. package/frigg-cli/index.js +189 -1
  40. package/frigg-cli/index.test.js +1 -4
  41. package/frigg-cli/init-command/backend-first-handler.js +756 -0
  42. package/frigg-cli/init-command/index.js +93 -0
  43. package/frigg-cli/init-command/template-handler.js +143 -0
  44. package/frigg-cli/install-command/index.js +1 -4
  45. package/frigg-cli/jest.config.js +124 -0
  46. package/frigg-cli/package.json +63 -0
  47. package/frigg-cli/repair-command/index.js +564 -0
  48. package/frigg-cli/ssm-command/index.js +308 -0
  49. package/frigg-cli/ssm-command/index.test.js +318 -0
  50. package/frigg-cli/start-command/index.js +118 -5
  51. package/frigg-cli/start-command/start-command.test.js +297 -0
  52. package/frigg-cli/test/init-command.test.js +180 -0
  53. package/frigg-cli/test/npm-registry.test.js +319 -0
  54. package/frigg-cli/ui-command/index.js +154 -0
  55. package/frigg-cli/utils/app-resolver.js +319 -0
  56. package/frigg-cli/utils/backend-path.js +16 -17
  57. package/frigg-cli/utils/database-validator.js +167 -0
  58. package/frigg-cli/utils/error-messages.js +329 -0
  59. package/frigg-cli/utils/npm-registry.js +167 -0
  60. package/frigg-cli/utils/process-manager.js +199 -0
  61. package/frigg-cli/utils/repo-detection.js +405 -0
  62. package/infrastructure/ARCHITECTURE.md +487 -0
  63. package/infrastructure/CLAUDE.md +481 -0
  64. package/infrastructure/HEALTH.md +468 -0
  65. package/infrastructure/README.md +540 -0
  66. package/infrastructure/__tests__/fixtures/mock-aws-resources.js +391 -0
  67. package/infrastructure/__tests__/helpers/test-utils.js +275 -0
  68. package/infrastructure/__tests__/postgres-config.test.js +914 -0
  69. package/infrastructure/__tests__/scoped-environment.test.js +126 -0
  70. package/infrastructure/__tests__/ssm-preload-node-options.test.js +79 -0
  71. package/infrastructure/__tests__/template-generation.test.js +687 -0
  72. package/infrastructure/create-frigg-infrastructure.js +129 -20
  73. package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
  74. package/infrastructure/docs/PRE-DEPLOYMENT-HEALTH-CHECK-SPEC.md +1317 -0
  75. package/infrastructure/docs/WEBSOCKET-CONFIGURATION.md +105 -0
  76. package/infrastructure/docs/deployment-instructions.md +268 -0
  77. package/infrastructure/docs/generate-iam-command.md +278 -0
  78. package/infrastructure/docs/iam-policy-templates.md +193 -0
  79. package/infrastructure/domains/admin-scripts/admin-script-builder.js +567 -0
  80. package/infrastructure/domains/admin-scripts/admin-script-builder.test.js +1017 -0
  81. package/infrastructure/domains/admin-scripts/index.js +5 -0
  82. package/infrastructure/domains/database/aurora-builder.js +857 -0
  83. package/infrastructure/domains/database/aurora-builder.test.js +960 -0
  84. package/infrastructure/domains/database/aurora-discovery.js +87 -0
  85. package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
  86. package/infrastructure/domains/database/aurora-resolver.js +210 -0
  87. package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
  88. package/infrastructure/domains/database/migration-builder.js +757 -0
  89. package/infrastructure/domains/database/migration-builder.test.js +454 -0
  90. package/infrastructure/domains/database/migration-resolver.js +163 -0
  91. package/infrastructure/domains/database/migration-resolver.test.js +337 -0
  92. package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
  93. package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
  94. package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
  95. package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
  96. package/infrastructure/domains/health/application/ports/index.js +26 -0
  97. package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
  98. package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
  99. package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
  100. package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
  101. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
  102. package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
  103. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
  104. package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
  105. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
  106. package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
  107. package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
  108. package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
  109. package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
  110. package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
  111. package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
  112. package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
  113. package/infrastructure/domains/health/domain/entities/issue.js +299 -0
  114. package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
  115. package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
  116. package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
  117. package/infrastructure/domains/health/domain/entities/resource.js +159 -0
  118. package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
  119. package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
  120. package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
  121. package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
  122. package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
  123. package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
  124. package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
  125. package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
  126. package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
  127. package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
  128. package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
  129. package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
  130. package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
  131. package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
  132. package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
  133. package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
  134. package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
  135. package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
  136. package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
  137. package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
  138. package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
  139. package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
  140. package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
  141. package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
  142. package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
  143. package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
  144. package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
  145. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
  146. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
  147. package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
  148. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
  149. package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
  150. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
  151. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
  152. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
  153. package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
  154. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
  155. package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
  156. package/infrastructure/domains/integration/integration-builder.js +656 -0
  157. package/infrastructure/domains/integration/integration-builder.test.js +1064 -0
  158. package/infrastructure/domains/integration/integration-resolver.js +170 -0
  159. package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
  160. package/infrastructure/domains/integration/websocket-builder.js +69 -0
  161. package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
  162. package/infrastructure/domains/networking/vpc-builder.js +2101 -0
  163. package/infrastructure/domains/networking/vpc-builder.test.js +2001 -0
  164. package/infrastructure/domains/networking/vpc-discovery.js +184 -0
  165. package/infrastructure/domains/networking/vpc-discovery.test.js +368 -0
  166. package/infrastructure/domains/networking/vpc-resolver.js +514 -0
  167. package/infrastructure/domains/networking/vpc-resolver.test.js +841 -0
  168. package/infrastructure/domains/parameters/offload-utils.js +190 -0
  169. package/infrastructure/domains/parameters/offload-utils.test.js +193 -0
  170. package/infrastructure/domains/parameters/ssm-builder.js +132 -0
  171. package/infrastructure/domains/parameters/ssm-builder.test.js +346 -0
  172. package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
  173. package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
  174. package/infrastructure/domains/scheduler/scheduler-builder.js +247 -0
  175. package/infrastructure/domains/scheduler/scheduler-builder.test.js +118 -0
  176. package/infrastructure/domains/security/iam-generator.js +851 -0
  177. package/infrastructure/domains/security/iam-generator.test.js +287 -0
  178. package/infrastructure/domains/security/kms-builder.js +415 -0
  179. package/infrastructure/domains/security/kms-builder.test.js +392 -0
  180. package/infrastructure/domains/security/kms-discovery.js +80 -0
  181. package/infrastructure/domains/security/kms-discovery.test.js +177 -0
  182. package/infrastructure/domains/security/kms-resolver.js +96 -0
  183. package/infrastructure/domains/security/kms-resolver.test.js +216 -0
  184. package/infrastructure/domains/security/templates/frigg-deployment-iam-stack.yaml +418 -0
  185. package/infrastructure/domains/security/templates/iam-policy-basic.json +218 -0
  186. package/infrastructure/domains/security/templates/iam-policy-full.json +293 -0
  187. package/infrastructure/domains/shared/base-builder.js +112 -0
  188. package/infrastructure/domains/shared/base-resolver.js +186 -0
  189. package/infrastructure/domains/shared/base-resolver.test.js +305 -0
  190. package/infrastructure/domains/shared/builder-orchestrator.js +226 -0
  191. package/infrastructure/domains/shared/builder-orchestrator.test.js +258 -0
  192. package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
  193. package/infrastructure/domains/shared/cloudformation-discovery.js +681 -0
  194. package/infrastructure/domains/shared/cloudformation-discovery.test.js +1320 -0
  195. package/infrastructure/domains/shared/environment-builder.js +192 -0
  196. package/infrastructure/domains/shared/environment-builder.test.js +529 -0
  197. package/infrastructure/domains/shared/function-environments.js +97 -0
  198. package/infrastructure/domains/shared/function-environments.test.js +146 -0
  199. package/infrastructure/domains/shared/providers/aws-provider-adapter.js +579 -0
  200. package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +416 -0
  201. package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
  202. package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
  203. package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
  204. package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
  205. package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
  206. package/infrastructure/domains/shared/resource-discovery.enhanced.test.js +306 -0
  207. package/infrastructure/domains/shared/resource-discovery.js +256 -0
  208. package/infrastructure/domains/shared/resource-discovery.test.js +757 -0
  209. package/infrastructure/domains/shared/types/app-definition.js +225 -0
  210. package/infrastructure/domains/shared/types/discovery-result.js +106 -0
  211. package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
  212. package/infrastructure/domains/shared/types/index.js +46 -0
  213. package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
  214. package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
  215. package/infrastructure/domains/shared/utilities/base-definition-factory.js +409 -0
  216. package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
  217. package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +319 -0
  218. package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
  219. package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
  220. package/infrastructure/domains/shared/utilities/nested-node-modules.js +53 -0
  221. package/infrastructure/domains/shared/utilities/nested-node-modules.test.js +61 -0
  222. package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +159 -0
  223. package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +444 -0
  224. package/infrastructure/domains/shared/validation/env-validator.js +78 -0
  225. package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
  226. package/infrastructure/domains/shared/validation/plugin-validator.js +187 -0
  227. package/infrastructure/domains/shared/validation/plugin-validator.test.js +323 -0
  228. package/infrastructure/esbuild.config.js +53 -0
  229. package/infrastructure/infrastructure-composer.js +168 -0
  230. package/infrastructure/infrastructure-composer.test.js +2042 -0
  231. package/infrastructure/integration.test.js +381 -0
  232. package/infrastructure/scripts/build-prisma-layer.js +701 -0
  233. package/infrastructure/scripts/build-prisma-layer.test.js +170 -0
  234. package/infrastructure/scripts/build-time-discovery.js +238 -0
  235. package/infrastructure/scripts/build-time-discovery.test.js +379 -0
  236. package/infrastructure/scripts/run-discovery.js +110 -0
  237. package/infrastructure/scripts/verify-prisma-layer.js +72 -0
  238. package/management-ui/README.md +203 -0
  239. package/package.json +48 -16
  240. package/test/index.js +2 -4
  241. package/test/mock-api.js +1 -3
  242. package/test/mock-integration.js +4 -14
  243. package/.eslintrc.json +0 -3
  244. package/CHANGELOG.md +0 -132
  245. package/infrastructure/serverless-template.js +0 -283
  246. package/infrastructure/webpack.config.js +0 -20
  247. package/test/auther-definition-tester.js +0 -125
@@ -1,12 +1,103 @@
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');
89
+ const { ssmPushCommand } = require('./ssm-command');
8
90
 
9
91
  const program = new Command();
92
+
93
+ program
94
+ .command('init [templateName]')
95
+ .description('Initialize a new Frigg application')
96
+ .option('-t, --template <template>', 'template to use', 'backend-only')
97
+ .option('-n, --name <name>', 'project name')
98
+ .option('-d, --directory <directory>', 'target directory')
99
+ .action(initCommand);
100
+
10
101
  program
11
102
  .command('install [apiModuleName]')
12
103
  .description('Install an API module')
@@ -16,20 +107,117 @@ program
16
107
  .command('start')
17
108
  .description('Run the backend and optional frontend')
18
109
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
110
+ .option('-v, --verbose', 'enable verbose output')
19
111
  .action(startCommand);
20
112
 
21
113
  program
22
114
  .command('build')
23
115
  .description('Build the serverless application')
24
116
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
117
+ .option('-v, --verbose', 'enable verbose output')
118
+ .option('-p, --production', 'build for production (enables AWS discovery)')
25
119
  .action(buildCommand);
26
120
 
27
121
  program
28
122
  .command('deploy')
29
123
  .description('Deploy the serverless application')
30
124
  .option('-s, --stage <stage>', 'deployment stage', 'dev')
125
+ .option('-v, --verbose', 'enable verbose output')
126
+ .option('-f, --force', 'force deployment (bypasses caching for layers and functions)')
127
+ .option('--skip-doctor', 'skip post-deployment health check')
31
128
  .action(deployCommand);
32
129
 
130
+ program
131
+ .command('generate-iam')
132
+ .description('Generate IAM CloudFormation template based on app definition')
133
+ .option('-o, --output <path>', 'output directory', 'backend/infrastructure')
134
+ .option('-u, --user <name>', 'deployment user name', 'frigg-deployment-user')
135
+ .option('-s, --stack-name <name>', 'CloudFormation stack name', 'frigg-deployment-iam')
136
+ .option('-v, --verbose', 'enable verbose output')
137
+ .action(generateIamCommand);
138
+
139
+ program
140
+ .command('ui')
141
+ .description('Launch the Frigg Management UI')
142
+ .option('-p, --port <port>', 'port to run the UI on', '3210')
143
+ .option('--no-open', 'do not open browser automatically')
144
+ .action(uiCommand);
145
+
146
+ program
147
+ .command('db:setup')
148
+ .description('Set up database schema and generate Prisma client')
149
+ .option('-s, --stage <stage>', 'deployment stage', 'development')
150
+ .option('-v, --verbose', 'enable verbose output')
151
+ .action(dbSetupCommand);
152
+
153
+ program
154
+ .command('doctor [stackName]')
155
+ .description('Run health check on deployed CloudFormation stack')
156
+ .option('-r, --region <region>', 'AWS region (defaults to AWS_REGION env var or us-east-1)')
157
+ .option('-f, --format <format>', 'output format (console or json)', 'console')
158
+ .option('-o, --output <path>', 'save report to file')
159
+ .option('-v, --verbose', 'enable verbose output')
160
+ .action(doctorCommand);
161
+
162
+ program
163
+ .command('repair <stackName>')
164
+ .description('Repair infrastructure issues (import orphaned resources, reconcile property drift)')
165
+ .option('-r, --region <region>', 'AWS region (defaults to AWS_REGION env var or us-east-1)')
166
+ .option('--import', 'import orphaned resources into stack')
167
+ .option('--reconcile', 'reconcile property drift')
168
+ .option('--mode <mode>', 'reconciliation mode (template or resource)', 'template')
169
+ .option('-y, --yes', 'skip confirmation prompts')
170
+ .option('-v, --verbose', 'enable verbose output')
171
+ .action(repairCommand);
172
+
173
+ // SSM command group for the parameter offload feature (ADR-027)
174
+ const ssmProgram = program
175
+ .command('ssm')
176
+ .description('Manage SSM Parameter Store offloaded configuration');
177
+
178
+ ssmProgram
179
+ .command('push')
180
+ .description('Push SSM-offloaded environment values to Parameter Store')
181
+ .option('-s, --stage <stage>', 'deployment stage', 'dev')
182
+ .option('-r, --region <region>', 'AWS region (defaults to AWS_REGION env var or us-east-1)')
183
+ .option('--allow-empty', 'skip (instead of fail on) keys with missing or empty values')
184
+ .option('--tier <tier>', 'override tier for all keys: standard (4KB values) or advanced (8KB, billed)')
185
+ .action(ssmPushCommand);
186
+
187
+ // Auth command group for testing API module authentication
188
+ const authProgram = program
189
+ .command('auth')
190
+ .description('Test API module authentication');
191
+
192
+ authProgram
193
+ .command('test <module>')
194
+ .description('Test authentication for an API module')
195
+ .option('--api-key <key>', 'API key for API-Key authentication')
196
+ .option('--port <port>', 'Callback server port', '3333')
197
+ .option('--timeout <seconds>', 'OAuth callback timeout', '300')
198
+ .option('-v, --verbose', 'Enable verbose output')
199
+ .action(authCommand.test);
200
+
201
+ authProgram
202
+ .command('list')
203
+ .description('List saved credentials')
204
+ .option('--json', 'Output as JSON')
205
+ .action(authCommand.list);
206
+
207
+ authProgram
208
+ .command('get <module>')
209
+ .description('Get credentials for a module')
210
+ .option('--json', 'Output as JSON')
211
+ .option('--export', 'Export as environment variables')
212
+ .action(authCommand.get);
213
+
214
+ authProgram
215
+ .command('delete [module]')
216
+ .description('Delete saved credentials')
217
+ .option('--all', 'Delete all credentials')
218
+ .option('-y, --yes', 'Skip confirmation')
219
+ .action(authCommand.delete);
220
+
33
221
  program.parse(process.argv);
34
222
 
35
- module.exports = { installCommand, startCommand, buildCommand, deployCommand };
223
+ module.exports = { initCommand, installCommand, startCommand, buildCommand, deployCommand, generateIamCommand, uiCommand, dbSetupCommand, doctorCommand, repairCommand, authCommand, ssmPushCommand };
@@ -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');