@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.
Files changed (400) hide show
  1. package/.dist/bin/vibe-runtime.js +26 -22
  2. package/.dist/bin/vibe-runtime.js.map +5 -5
  3. package/.dist/oxlint-plugins/i18n.js +4 -0
  4. package/.dist/oxlint-plugins/i18n.js.map +1 -0
  5. package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
  6. package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
  7. package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
  8. package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
  9. package/check.config.ts +4 -12
  10. package/package.json +2 -9
  11. package/src/app/api/[locale]/LICENSE +674 -0
  12. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  13. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  14. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  15. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  16. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  17. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  18. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  19. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  20. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  21. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  22. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  23. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  24. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  25. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  26. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  27. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  28. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  29. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  30. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  31. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  32. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  33. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  34. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  35. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  36. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  37. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  38. package/src/app/api/[locale]/system/builder/enum.ts +78 -0
  39. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  40. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  41. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  42. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  43. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  44. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  45. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  46. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  47. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  48. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  49. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  50. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  51. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  52. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  53. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  54. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  55. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  56. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  57. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  58. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  59. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  60. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  61. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  62. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  67. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  68. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  69. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  70. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  72. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  73. package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
  74. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  75. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  76. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  77. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  78. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  79. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  80. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  81. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  82. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  83. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  84. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  85. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  86. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  87. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  88. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  89. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  90. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  91. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  92. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  93. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  94. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  95. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  96. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  97. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  98. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  99. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  100. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  101. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  102. package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
  103. package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
  104. package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  112. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  113. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  114. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  115. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  116. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  117. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  118. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
  119. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  120. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  121. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  122. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  123. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  124. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  125. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  126. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  127. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  130. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  131. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  132. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  133. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  134. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  135. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  136. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  137. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  138. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  139. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  140. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  141. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  142. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  143. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  144. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  146. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  147. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  148. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  149. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  150. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  151. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  153. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  154. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  155. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  156. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  157. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  158. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  159. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  160. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  161. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  162. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  163. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  164. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  165. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  166. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  167. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  168. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  169. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  170. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  171. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  172. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  173. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  174. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  175. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  176. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  177. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  178. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  179. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  180. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  181. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  182. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  183. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  184. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  185. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  186. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  187. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  188. package/src/app/api/[locale]/system/help/route.ts +16 -0
  189. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  190. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  191. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  192. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  193. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  194. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  195. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  209. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  210. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  211. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  212. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  213. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  214. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  215. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  216. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  294. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  295. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  296. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  304. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  305. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  306. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  307. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  308. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  309. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  380. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  381. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  382. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  383. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  384. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  385. package/src/app/api/[locale]/user/enum.ts +64 -0
  386. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  387. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  388. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  389. package/src/app/api/[locale]/user/types.ts +118 -0
  390. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  391. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  392. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  393. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  394. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  395. package/src/app/api/i18n/de/index.ts +6 -0
  396. package/src/app/api/i18n/en/index.ts +5 -0
  397. package/src/app/api/i18n/pl/index.ts +5 -0
  398. package/src/app/i18n/de/index.ts +6 -0
  399. package/src/app/i18n/en/index.ts +5 -0
  400. 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
+ }