@next-vibe/checker 1.0.11 → 1.0.13
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.
- package/.dist/bin/vibe-runtime.js +26 -22
- package/.dist/bin/vibe-runtime.js.map +5 -5
- package/.dist/oxlint-plugins/i18n.js +4 -0
- package/.dist/oxlint-plugins/i18n.js.map +1 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
- package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
- package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
- package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
- package/check.config.ts +4 -12
- package/package.json +2 -9
- package/src/app/api/[locale]/LICENSE +674 -0
- package/src/app/api/[locale]/i18n/de/index.ts +13 -0
- package/src/app/api/[locale]/i18n/en/index.ts +12 -0
- package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
- package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
- package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
- package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
- package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
- package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
- package/src/app/api/[locale]/shared/types/utils.ts +190 -0
- package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
- package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
- package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
- package/src/app/api/[locale]/shared/utils/index.ts +11 -0
- package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
- package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
- package/src/app/api/[locale]/shared/utils/object.ts +75 -0
- package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
- package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
- package/src/app/api/[locale]/shared/utils/time.ts +53 -0
- package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
- package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
- package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
- package/src/app/api/[locale]/system/builder/enum.ts +78 -0
- package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
- package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
- package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
- package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
- package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
- package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
- package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
- package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
- package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
- package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
- package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
- package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
- package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
- package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
- package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
- package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
- package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
- package/src/app/api/[locale]/system/builder/route.ts +21 -0
- package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
- package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
- package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
- package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
- package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
- package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
- package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
- package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
- package/src/app/api/[locale]/system/check/config/types.ts +616 -0
- package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
- package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
- package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
- package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
- package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
- package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
- package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
- package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
- package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
- package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
- package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
- package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
- package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
- package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
- package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
- package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
- package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
- package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
- package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
- package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
- package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
- package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
- package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
- package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
- package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
- package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
- package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
- package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
- package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
- package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
- package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
- package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
- package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
- package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
- package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
- package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
- package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
- package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
- package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
- package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
- package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
- package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
- package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
- package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
- package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
- package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
- package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
- package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
- package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
- package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
- package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
- package/src/app/api/[locale]/system/help/definition.ts +445 -0
- package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
- package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
- package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
- package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
- package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
- package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
- package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
- package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
- package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
- package/src/app/api/[locale]/system/help/list/route.ts +21 -0
- package/src/app/api/[locale]/system/help/repository.ts +212 -0
- package/src/app/api/[locale]/system/help/route.ts +16 -0
- package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
- package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
- package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
- package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
- package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
- package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
- package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
- package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
- package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
- package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
- package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
- package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
- package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
- package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
- package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
- package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
- package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
- package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
- package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
- package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
- package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
- package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
- package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
- package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
- package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
- package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
- package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
- package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
- package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
- package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
- package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
- package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
- package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
- package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
- package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
- package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
- package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
- package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
- package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
- package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
- package/src/app/api/[locale]/user/auth/enum.ts +16 -0
- package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
- package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
- package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
- package/src/app/api/[locale]/user/auth/types.ts +110 -0
- package/src/app/api/[locale]/user/enum.ts +64 -0
- package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
- package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
- package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
- package/src/app/api/[locale]/user/types.ts +118 -0
- package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
- package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
- package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
- package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
- package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
- package/src/app/api/i18n/de/index.ts +6 -0
- package/src/app/api/i18n/en/index.ts +5 -0
- package/src/app/api/i18n/pl/index.ts +5 -0
- package/src/app/i18n/de/index.ts +6 -0
- package/src/app/i18n/en/index.ts +5 -0
- package/src/app/i18n/pl/index.ts +5 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Execution Executor
|
|
3
|
+
* Single source for ALL route execution logic
|
|
4
|
+
* Consolidates route loading, handler extraction, and execution
|
|
5
|
+
* Uses shared permission filtering logic from permissions/registry
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import "server-only";
|
|
9
|
+
|
|
10
|
+
import type { ResponseType } from "next-vibe/shared/types/response.schema";
|
|
11
|
+
import {
|
|
12
|
+
fail,
|
|
13
|
+
isStreamingResponse,
|
|
14
|
+
success,
|
|
15
|
+
} from "next-vibe/shared/types/response.schema";
|
|
16
|
+
import { ErrorResponseTypes } from "next-vibe/shared/types/response.schema";
|
|
17
|
+
import { parseError } from "next-vibe/shared/utils/parse-error";
|
|
18
|
+
import type { z } from "zod";
|
|
19
|
+
|
|
20
|
+
import { getRouteHandler } from "@/app/api/[locale]/system/generated/route-handlers";
|
|
21
|
+
import type { JwtPayloadType } from "@/app/api/[locale]/user/auth/types";
|
|
22
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
23
|
+
|
|
24
|
+
import type { CliCompatiblePlatform } from "../../../cli/runtime/route-executor";
|
|
25
|
+
import type { EndpointLogger } from "../../logger/endpoint";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Base execution context
|
|
29
|
+
*/
|
|
30
|
+
export interface BaseExecutionContext<TData> {
|
|
31
|
+
toolName: string;
|
|
32
|
+
data: TData;
|
|
33
|
+
user: JwtPayloadType;
|
|
34
|
+
platform: CliCompatiblePlatform;
|
|
35
|
+
locale: CountryLanguage;
|
|
36
|
+
logger: EndpointLogger;
|
|
37
|
+
timestamp: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Base execution options
|
|
42
|
+
*/
|
|
43
|
+
export interface BaseExecutionOptions {
|
|
44
|
+
verbose?: boolean;
|
|
45
|
+
dryRun?: boolean;
|
|
46
|
+
interactive?: boolean;
|
|
47
|
+
output?: "json" | "table" | "pretty";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Interface for Route Execution Executor
|
|
52
|
+
* Single unified interface for ALL platforms
|
|
53
|
+
*/
|
|
54
|
+
export interface IRouteExecutionExecutor {
|
|
55
|
+
/**
|
|
56
|
+
* Execute generic handler - THE method ALL platforms use
|
|
57
|
+
* Standard handler signature: { data, urlPathParams, user, locale, logger, platform }
|
|
58
|
+
* Handles: permission checking, route loading, handler execution
|
|
59
|
+
*/
|
|
60
|
+
executeGenericHandler<TData, TUrlPathParams, TResult>(params: {
|
|
61
|
+
toolName: string;
|
|
62
|
+
data: TData;
|
|
63
|
+
urlPathParams?: TUrlPathParams;
|
|
64
|
+
user: JwtPayloadType;
|
|
65
|
+
locale: CountryLanguage;
|
|
66
|
+
logger: EndpointLogger;
|
|
67
|
+
platform: CliCompatiblePlatform;
|
|
68
|
+
}): Promise<ResponseType<TResult>>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* CLI-specific: Get missing required fields from schema (for interactive forms)
|
|
72
|
+
*/
|
|
73
|
+
getMissingRequiredFields<TData>(
|
|
74
|
+
data: TData,
|
|
75
|
+
schema: z.ZodTypeAny | null | undefined,
|
|
76
|
+
logger: EndpointLogger,
|
|
77
|
+
): string[];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Merge data from multiple sources (for arg parsing)
|
|
81
|
+
*/
|
|
82
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Data merging: Input data from CLI arguments, environment vars, etc. can have any object structure, so unknown is correct for the generic merge utility.
|
|
83
|
+
mergeData<TData extends Record<string, unknown>>(
|
|
84
|
+
...sources: Array<TData | null | undefined>
|
|
85
|
+
): Partial<TData>;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export class RouteExecutionExecutor implements IRouteExecutionExecutor {
|
|
89
|
+
/**
|
|
90
|
+
* Get missing required fields from schema
|
|
91
|
+
* Platform-agnostic field validation
|
|
92
|
+
*/
|
|
93
|
+
getMissingRequiredFields<TData>(
|
|
94
|
+
data: TData,
|
|
95
|
+
schema: z.ZodTypeAny | null | undefined,
|
|
96
|
+
logger: EndpointLogger,
|
|
97
|
+
): string[] {
|
|
98
|
+
if (!schema) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const result = schema.safeParse(data);
|
|
104
|
+
|
|
105
|
+
if (!result.success) {
|
|
106
|
+
// Extract only "required" errors (invalid_type with received: "undefined")
|
|
107
|
+
return result.error.issues
|
|
108
|
+
.filter(
|
|
109
|
+
(issue) =>
|
|
110
|
+
issue.code === "invalid_type" &&
|
|
111
|
+
"received" in issue &&
|
|
112
|
+
issue.received === "undefined",
|
|
113
|
+
)
|
|
114
|
+
.map((issue) => [...issue.path].join("."));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return [];
|
|
118
|
+
} catch (error) {
|
|
119
|
+
logger.warn(
|
|
120
|
+
"[Route Execution Executor] Failed to check required fields",
|
|
121
|
+
{
|
|
122
|
+
error: parseError(error).message,
|
|
123
|
+
},
|
|
124
|
+
);
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Merge data from multiple sources
|
|
131
|
+
* Platform-agnostic data merging (CLI args, provided data, defaults, etc.)
|
|
132
|
+
*/
|
|
133
|
+
// eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Data merging: Input data from CLI arguments, environment vars, etc. can have any object structure, so unknown is correct for the generic merge utility.
|
|
134
|
+
mergeData<TData extends Record<string, unknown>>(
|
|
135
|
+
...sources: Array<TData | null | undefined>
|
|
136
|
+
): Partial<TData> {
|
|
137
|
+
return sources.reduce<Partial<TData>>((acc, source) => {
|
|
138
|
+
if (source && typeof source === "object") {
|
|
139
|
+
return { ...acc, ...source };
|
|
140
|
+
}
|
|
141
|
+
return acc;
|
|
142
|
+
}, {});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Execute generic handler - THE method ALL platforms use
|
|
147
|
+
* toolName is the full path with method or alias - no parsing needed
|
|
148
|
+
*
|
|
149
|
+
* Standard handler signature: { data, urlPathParams, user, locale, logger, platform }
|
|
150
|
+
*/
|
|
151
|
+
async executeGenericHandler<TData, TUrlPathParams, TResult>(params: {
|
|
152
|
+
toolName: string;
|
|
153
|
+
data: TData;
|
|
154
|
+
urlPathParams?: TUrlPathParams;
|
|
155
|
+
user: JwtPayloadType;
|
|
156
|
+
locale: CountryLanguage;
|
|
157
|
+
logger: EndpointLogger;
|
|
158
|
+
platform: CliCompatiblePlatform;
|
|
159
|
+
}): Promise<ResponseType<TResult>> {
|
|
160
|
+
try {
|
|
161
|
+
const handlerResult = await getRouteHandler(params.toolName);
|
|
162
|
+
|
|
163
|
+
if (!handlerResult) {
|
|
164
|
+
return fail({
|
|
165
|
+
message:
|
|
166
|
+
"app.api.system.unifiedInterface.cli.vibe.errors.routeNotFound",
|
|
167
|
+
errorType: ErrorResponseTypes.INTERNAL_ERROR,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Execute handler
|
|
172
|
+
const result = await handlerResult({
|
|
173
|
+
data: params.data,
|
|
174
|
+
urlPathParams: params.urlPathParams ?? {},
|
|
175
|
+
user: params.user,
|
|
176
|
+
locale: params.locale,
|
|
177
|
+
logger: params.logger,
|
|
178
|
+
platform: params.platform,
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// Streaming responses are not supported in CLI/AI/MCP platforms
|
|
182
|
+
if (isStreamingResponse(result)) {
|
|
183
|
+
return fail({
|
|
184
|
+
message:
|
|
185
|
+
"app.api.system.unifiedInterface.cli.vibe.errors.executionFailed",
|
|
186
|
+
errorType: ErrorResponseTypes.INTERNAL_ERROR,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (result.success) {
|
|
191
|
+
return success(result.data, {
|
|
192
|
+
...(result.isErrorResponse && { isErrorResponse: true }),
|
|
193
|
+
...(result.performance && { performance: result.performance }),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Return the original error from the handler
|
|
198
|
+
return result;
|
|
199
|
+
} catch (error) {
|
|
200
|
+
const parsedError = parseError(error);
|
|
201
|
+
params.logger.error(
|
|
202
|
+
"[Route Execution Executor] Handler execution failed",
|
|
203
|
+
parsedError,
|
|
204
|
+
{
|
|
205
|
+
toolName: params.toolName,
|
|
206
|
+
error: parsedError.message,
|
|
207
|
+
},
|
|
208
|
+
);
|
|
209
|
+
return fail({
|
|
210
|
+
message: "app.api.system.unifiedInterface.cli.vibe.errors.unknownError",
|
|
211
|
+
errorType: ErrorResponseTypes.INTERNAL_ERROR,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Singleton instance
|
|
219
|
+
*/
|
|
220
|
+
export const routeExecutionExecutor = new RouteExecutionExecutor();
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Handler Utilities
|
|
3
|
+
* Functions for creating generic handlers from endpoint configurations using unified core logic
|
|
4
|
+
* Handles validation, handler execution, email handling for ALL platforms
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import "server-only";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
ErrorResponseTypes,
|
|
11
|
+
isStreamingResponse,
|
|
12
|
+
type ResponseType,
|
|
13
|
+
type StreamingResponse,
|
|
14
|
+
} from "next-vibe/shared/types/response.schema";
|
|
15
|
+
import type { z } from "zod";
|
|
16
|
+
|
|
17
|
+
import type {
|
|
18
|
+
JwtPayloadType,
|
|
19
|
+
JwtPrivatePayloadType,
|
|
20
|
+
JWTPublicPayloadType,
|
|
21
|
+
} from "@/app/api/[locale]/user/auth/types";
|
|
22
|
+
import type { UserRoleValue } from "@/app/api/[locale]/user/user-roles/enum";
|
|
23
|
+
import type { UserRole } from "@/app/api/[locale]/user/user-roles/enum";
|
|
24
|
+
import type { CountryLanguage } from "@/i18n/core/config";
|
|
25
|
+
import { simpleT } from "@/i18n/core/shared";
|
|
26
|
+
import type { TFunction } from "@/i18n/core/static-types";
|
|
27
|
+
|
|
28
|
+
import type { EndpointLogger } from "../../logger/endpoint";
|
|
29
|
+
import type { CreateApiEndpointAny } from "../../types/endpoint";
|
|
30
|
+
import type { Platform } from "../../types/platform";
|
|
31
|
+
import { permissionsRegistry } from "../permissions/registry";
|
|
32
|
+
import {
|
|
33
|
+
validateHandlerRequestData,
|
|
34
|
+
validateResponseData,
|
|
35
|
+
} from "./request-validator";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type helper to infer JWT payload type based on user roles
|
|
39
|
+
* - Only PUBLIC role in roles → JWTPublicPayloadType
|
|
40
|
+
* - No PUBLIC role in roles → JwtPayloadType
|
|
41
|
+
* - Mixed roles (includes PUBLIC + others) → JwtPayloadType (union)
|
|
42
|
+
*/
|
|
43
|
+
export type InferJwtPayloadType<TUserRoleValue extends UserRoleValue> =
|
|
44
|
+
TUserRoleValue extends typeof UserRole.PUBLIC
|
|
45
|
+
? JWTPublicPayloadType
|
|
46
|
+
: JwtPayloadType;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Type helper for arrays of user roles
|
|
50
|
+
*
|
|
51
|
+
* Logic:
|
|
52
|
+
* - Exclude<TRoles[number], "PUBLIC"> removes "PUBLIC" from the union
|
|
53
|
+
* - If the result is never, then ONLY PUBLIC was in the array → JWTPublicPayloadType
|
|
54
|
+
* - If TRoles[number] includes "PUBLIC" (check with Extract) → JwtPayloadType (mixed)
|
|
55
|
+
* - Otherwise → JwtPrivatePayloadType (no PUBLIC, guaranteed authenticated)
|
|
56
|
+
*/
|
|
57
|
+
export type InferJwtPayloadTypeFromRoles<
|
|
58
|
+
TRoles extends readonly UserRoleValue[],
|
|
59
|
+
> =
|
|
60
|
+
Exclude<TRoles[number], typeof UserRole.PUBLIC> extends never
|
|
61
|
+
? JWTPublicPayloadType
|
|
62
|
+
: Extract<TRoles[number], typeof UserRole.PUBLIC> extends never
|
|
63
|
+
? JwtPrivatePayloadType
|
|
64
|
+
: JwtPayloadType;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* API handler props - handlers receive OUTPUT types (validated data)
|
|
68
|
+
*/
|
|
69
|
+
export interface ApiHandlerProps<
|
|
70
|
+
TRequestOutput,
|
|
71
|
+
TUrlVariablesOutput,
|
|
72
|
+
TUserRoleValue extends readonly UserRoleValue[],
|
|
73
|
+
TPlatform extends Platform = Platform,
|
|
74
|
+
> {
|
|
75
|
+
/** Request data (validated by Zod schema) */
|
|
76
|
+
data: TRequestOutput;
|
|
77
|
+
|
|
78
|
+
/** URL variables (validated by Zod schema) */
|
|
79
|
+
urlPathParams: TUrlVariablesOutput;
|
|
80
|
+
|
|
81
|
+
/** Authenticated user - type inferred from endpoint roles */
|
|
82
|
+
user: InferJwtPayloadTypeFromRoles<TUserRoleValue>;
|
|
83
|
+
|
|
84
|
+
/** Server translation function */
|
|
85
|
+
t: TFunction;
|
|
86
|
+
|
|
87
|
+
/** Locale */
|
|
88
|
+
locale: CountryLanguage;
|
|
89
|
+
|
|
90
|
+
/** Platform where the request originated */
|
|
91
|
+
platform: TPlatform;
|
|
92
|
+
|
|
93
|
+
/** Logger instance */
|
|
94
|
+
logger: EndpointLogger;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* API handler function type - receives validated data and returns validated response
|
|
99
|
+
* Note: In our schema system, TRequestInput is the validated data (what handlers should receive)
|
|
100
|
+
* but the current interface uses TRequestOutput for backward compatibility
|
|
101
|
+
*
|
|
102
|
+
* Can return either:
|
|
103
|
+
* - ResponseType<TResponseOutput> for standard JSON responses
|
|
104
|
+
* - StreamingResponse for streaming endpoints (e.g., AI chat)
|
|
105
|
+
*/
|
|
106
|
+
export type ApiHandlerFunction<
|
|
107
|
+
TRequestOutput,
|
|
108
|
+
TResponseOutput,
|
|
109
|
+
TUrlVariablesOutput,
|
|
110
|
+
TUserRoleValue extends readonly UserRoleValue[],
|
|
111
|
+
TPlatform extends Platform,
|
|
112
|
+
> = (
|
|
113
|
+
props: ApiHandlerProps<
|
|
114
|
+
TRequestOutput,
|
|
115
|
+
TUrlVariablesOutput,
|
|
116
|
+
TUserRoleValue,
|
|
117
|
+
TPlatform
|
|
118
|
+
>,
|
|
119
|
+
) =>
|
|
120
|
+
| Promise<ResponseType<TResponseOutput> | StreamingResponse>
|
|
121
|
+
| ResponseType<TResponseOutput>
|
|
122
|
+
| StreamingResponse;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Handler configuration for a single method with proper typing
|
|
126
|
+
* Handlers receive validated data (OUTPUT types) from Zod
|
|
127
|
+
* and return validated response data (OUTPUT types)
|
|
128
|
+
*/
|
|
129
|
+
export interface MethodHandlerConfig<
|
|
130
|
+
TRequestOutput,
|
|
131
|
+
TResponseOutput,
|
|
132
|
+
TUrlVariablesOutput,
|
|
133
|
+
TUserRoleValue extends readonly UserRoleValue[],
|
|
134
|
+
TPlatform extends Platform = Platform,
|
|
135
|
+
> {
|
|
136
|
+
handler: ApiHandlerFunction<
|
|
137
|
+
TRequestOutput,
|
|
138
|
+
TResponseOutput,
|
|
139
|
+
TUrlVariablesOutput,
|
|
140
|
+
TUserRoleValue,
|
|
141
|
+
TPlatform
|
|
142
|
+
>;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface ApiHandlerOptions<
|
|
146
|
+
TRequestOutput,
|
|
147
|
+
TResponseOutput,
|
|
148
|
+
TUrlVariablesOutput,
|
|
149
|
+
TUserRoleValue extends readonly UserRoleValue[],
|
|
150
|
+
TEndpoint extends CreateApiEndpointAny,
|
|
151
|
+
TPlatform extends Platform = Platform,
|
|
152
|
+
> {
|
|
153
|
+
endpoint: TEndpoint;
|
|
154
|
+
handler: ApiHandlerFunction<
|
|
155
|
+
TRequestOutput,
|
|
156
|
+
TResponseOutput,
|
|
157
|
+
TUrlVariablesOutput,
|
|
158
|
+
TUserRoleValue,
|
|
159
|
+
TPlatform
|
|
160
|
+
>;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export type GenericHandlerReturnType<
|
|
164
|
+
TRequestOutput,
|
|
165
|
+
TResponseOutput,
|
|
166
|
+
TUrlVariablesOutput,
|
|
167
|
+
TUserRoleValue extends readonly UserRoleValue[],
|
|
168
|
+
> = (props: {
|
|
169
|
+
data: TRequestOutput;
|
|
170
|
+
urlPathParams: TUrlVariablesOutput;
|
|
171
|
+
user?: InferJwtPayloadTypeFromRoles<TUserRoleValue>; // Optional: if provided, skip auth; if not, do auth
|
|
172
|
+
locale: CountryLanguage;
|
|
173
|
+
logger: EndpointLogger;
|
|
174
|
+
platform: Platform;
|
|
175
|
+
request?: NextRequest; // Optional NextRequest for Next.js platform
|
|
176
|
+
}) => Promise<ResponseType<TResponseOutput> | StreamingResponse>;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Base type for generic handlers when exact types are not known
|
|
180
|
+
* Used for dynamic handler loading where specific types cannot be inferred
|
|
181
|
+
*
|
|
182
|
+
* This type represents the structural shape of a handler function without
|
|
183
|
+
* constraining the specific types, allowing handlers with different specific
|
|
184
|
+
* types to be stored together while maintaining type safety at the call site.
|
|
185
|
+
*/
|
|
186
|
+
export type GenericHandlerBase = GenericHandlerReturnType<
|
|
187
|
+
// oxlint-disable-next-line no-explicit-any
|
|
188
|
+
any,
|
|
189
|
+
// oxlint-disable-next-line no-explicit-any
|
|
190
|
+
any,
|
|
191
|
+
// oxlint-disable-next-line no-explicit-any
|
|
192
|
+
any,
|
|
193
|
+
// oxlint-disable-next-line no-explicit-any
|
|
194
|
+
readonly any[]
|
|
195
|
+
>;
|
|
196
|
+
|
|
197
|
+
export function createGenericHandler<T extends CreateApiEndpointAny>(
|
|
198
|
+
options: ApiHandlerOptions<
|
|
199
|
+
T["types"]["RequestOutput"],
|
|
200
|
+
T["types"]["ResponseOutput"],
|
|
201
|
+
T["types"]["UrlVariablesOutput"],
|
|
202
|
+
T["allowedRoles"],
|
|
203
|
+
T
|
|
204
|
+
>,
|
|
205
|
+
): GenericHandlerReturnType<
|
|
206
|
+
T["types"]["RequestOutput"],
|
|
207
|
+
T["types"]["ResponseOutput"],
|
|
208
|
+
T["types"]["UrlVariablesOutput"],
|
|
209
|
+
T["allowedRoles"]
|
|
210
|
+
> {
|
|
211
|
+
const { endpoint, handler } = options;
|
|
212
|
+
|
|
213
|
+
return async ({
|
|
214
|
+
data,
|
|
215
|
+
urlPathParams,
|
|
216
|
+
user: providedUser,
|
|
217
|
+
locale,
|
|
218
|
+
logger,
|
|
219
|
+
platform,
|
|
220
|
+
request,
|
|
221
|
+
}): Promise<
|
|
222
|
+
ResponseType<T["types"]["ResponseOutput"]> | StreamingResponse
|
|
223
|
+
> => {
|
|
224
|
+
const { t } = simpleT(locale);
|
|
225
|
+
|
|
226
|
+
// 1. Authenticate user - call authRepository directly if user not provided
|
|
227
|
+
let user: InferJwtPayloadTypeFromRoles<T["allowedRoles"]>;
|
|
228
|
+
if (providedUser) {
|
|
229
|
+
user = providedUser as InferJwtPayloadTypeFromRoles<T["allowedRoles"]>;
|
|
230
|
+
} else {
|
|
231
|
+
const authUser = null;
|
|
232
|
+
|
|
233
|
+
if (!authUser) {
|
|
234
|
+
return {
|
|
235
|
+
success: false,
|
|
236
|
+
message: ErrorResponseTypes.UNAUTHORIZED.errorKey,
|
|
237
|
+
errorType: ErrorResponseTypes.UNAUTHORIZED,
|
|
238
|
+
messageParams: { error: "User authentication failed" },
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
user = authUser as InferJwtPayloadTypeFromRoles<T["allowedRoles"]>;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// 2. Validate endpoint access (platform + permissions)
|
|
246
|
+
const accessValidation = permissionsRegistry.validateEndpointAccess(
|
|
247
|
+
endpoint,
|
|
248
|
+
user,
|
|
249
|
+
platform,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
if (!accessValidation.success) {
|
|
253
|
+
logger.warn(`[Generic Handler] Endpoint access denied`, {
|
|
254
|
+
routePath: `${endpoint.path.join("/")}/${endpoint.method}`,
|
|
255
|
+
userId: user.isPublic ? "public" : user.id,
|
|
256
|
+
reason: accessValidation.message,
|
|
257
|
+
});
|
|
258
|
+
return accessValidation;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// 3. Validate request data using request validator
|
|
262
|
+
const validationResult = validateHandlerRequestData(
|
|
263
|
+
endpoint,
|
|
264
|
+
{
|
|
265
|
+
method: endpoint.method,
|
|
266
|
+
requestData: data as z.input<typeof endpoint.requestSchema>,
|
|
267
|
+
urlParameters: urlPathParams as z.input<
|
|
268
|
+
typeof endpoint.requestUrlPathParamsSchema
|
|
269
|
+
>,
|
|
270
|
+
locale,
|
|
271
|
+
},
|
|
272
|
+
logger,
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
if (!validationResult.success) {
|
|
276
|
+
return validationResult;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Credit checking disabled in minimal checker package
|
|
280
|
+
|
|
281
|
+
const result = await handler({
|
|
282
|
+
data: validationResult.data.requestData as T["types"]["RequestOutput"],
|
|
283
|
+
urlPathParams: validationResult.data
|
|
284
|
+
.urlPathParams as T["types"]["UrlVariablesOutput"],
|
|
285
|
+
user,
|
|
286
|
+
t,
|
|
287
|
+
locale: validationResult.data.locale,
|
|
288
|
+
logger,
|
|
289
|
+
request,
|
|
290
|
+
platform,
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
// 5. Handle streaming responses - return immediately without email/SMS processing
|
|
294
|
+
if (isStreamingResponse(result)) {
|
|
295
|
+
logger.info("Streaming response detected - returning immediately");
|
|
296
|
+
return result;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// 6. Return errors without validation (errors are already validated)
|
|
300
|
+
if (!result.success) {
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// 7. Validate response data using request validator
|
|
305
|
+
const responseValidation = validateResponseData<
|
|
306
|
+
T["types"]["ResponseOutput"]
|
|
307
|
+
>(result.data, endpoint.responseSchema, logger);
|
|
308
|
+
|
|
309
|
+
if (!responseValidation.success) {
|
|
310
|
+
return responseValidation;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Email handling disabled in minimal checker package
|
|
314
|
+
|
|
315
|
+
// SMS handling disabled in minimal checker package
|
|
316
|
+
|
|
317
|
+
// Preserve isErrorResponse flag and performance metadata from handler result
|
|
318
|
+
return {
|
|
319
|
+
success: true,
|
|
320
|
+
data: responseValidation.data as T["types"]["ResponseOutput"],
|
|
321
|
+
...(result.isErrorResponse && { isErrorResponse: true as const }),
|
|
322
|
+
...(result.performance && { performance: result.performance }),
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
}
|