wrong-notebook 2026.10.22-2 → 2026.10.22-4

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 (587) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +8 -8
  3. package/.next/prerender-manifest.json +4 -4
  4. package/.next/server/app/_global-error/page/build-manifest.json +5 -5
  5. package/.next/server/app/_global-error/page.js +2 -2
  6. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +8 -8
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +7 -7
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page/build-manifest.json +5 -5
  14. package/.next/server/app/_not-found/page.js +2 -2
  15. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/admin/page/build-manifest.json +5 -5
  18. package/.next/server/app/admin/page.js +2 -2
  19. package/.next/server/app/admin/page.js.nft.json +1 -1
  20. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/admin/user/[id]/page/build-manifest.json +5 -5
  22. package/.next/server/app/admin/user/[id]/page.js +2 -2
  23. package/.next/server/app/admin/user/[id]/page.js.nft.json +1 -1
  24. package/.next/server/app/admin/user/[id]/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/admin/dashboard/route.js +2 -2
  26. package/.next/server/app/api/admin/dashboard/route.js.nft.json +1 -1
  27. package/.next/server/app/api/admin/migrate-tags/route.js +2 -2
  28. package/.next/server/app/api/admin/migrate-tags/route.js.nft.json +1 -1
  29. package/.next/server/app/api/admin/system-reset/route.js +2 -2
  30. package/.next/server/app/api/admin/system-reset/route.js.nft.json +1 -1
  31. package/.next/server/app/api/admin/users/[id]/detail/route.js +2 -2
  32. package/.next/server/app/api/admin/users/[id]/detail/route.js.nft.json +1 -1
  33. package/.next/server/app/api/admin/users/[id]/route.js +2 -2
  34. package/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/admin/users/route.js +2 -2
  36. package/.next/server/app/api/admin/users/route.js.nft.json +1 -1
  37. package/.next/server/app/api/ai/models/route.js +2 -2
  38. package/.next/server/app/api/ai/models/route.js.nft.json +1 -1
  39. package/.next/server/app/api/ai/test/route.js +2 -2
  40. package/.next/server/app/api/ai/test/route.js.nft.json +1 -1
  41. package/.next/server/app/api/analytics/route.js +2 -2
  42. package/.next/server/app/api/analytics/route.js.nft.json +1 -1
  43. package/.next/server/app/api/analyze/route.js +2 -2
  44. package/.next/server/app/api/analyze/route.js.nft.json +1 -1
  45. package/.next/server/app/api/auth/[...nextauth]/route.js +2 -2
  46. package/.next/server/app/api/auth/[...nextauth]/route.js.nft.json +1 -1
  47. package/.next/server/app/api/error-items/[id]/delete/route.js +2 -2
  48. package/.next/server/app/api/error-items/[id]/delete/route.js.nft.json +1 -1
  49. package/.next/server/app/api/error-items/[id]/figure/route.js +2 -2
  50. package/.next/server/app/api/error-items/[id]/figure/route.js.nft.json +1 -1
  51. package/.next/server/app/api/error-items/[id]/fix-latex/route.js +2 -2
  52. package/.next/server/app/api/error-items/[id]/fix-latex/route.js.nft.json +1 -1
  53. package/.next/server/app/api/error-items/[id]/geogebra/route.js.nft.json +1 -1
  54. package/.next/server/app/api/error-items/[id]/image/route.js +2 -2
  55. package/.next/server/app/api/error-items/[id]/image/route.js.nft.json +1 -1
  56. package/.next/server/app/api/error-items/[id]/mastery/route.js +2 -2
  57. package/.next/server/app/api/error-items/[id]/mastery/route.js.nft.json +1 -1
  58. package/.next/server/app/api/error-items/[id]/notes/route.js +2 -2
  59. package/.next/server/app/api/error-items/[id]/notes/route.js.nft.json +1 -1
  60. package/.next/server/app/api/error-items/[id]/practice-records/route.js +2 -2
  61. package/.next/server/app/api/error-items/[id]/practice-records/route.js.nft.json +1 -1
  62. package/.next/server/app/api/error-items/[id]/reanswer/route.js +2 -2
  63. package/.next/server/app/api/error-items/[id]/reanswer/route.js.nft.json +1 -1
  64. package/.next/server/app/api/error-items/[id]/retag/route.js +2 -2
  65. package/.next/server/app/api/error-items/[id]/retag/route.js.nft.json +1 -1
  66. package/.next/server/app/api/error-items/[id]/route.js.nft.json +1 -1
  67. package/.next/server/app/api/error-items/[id]/svg-animation/route.js +2 -2
  68. package/.next/server/app/api/error-items/[id]/svg-animation/route.js.nft.json +1 -1
  69. package/.next/server/app/api/error-items/batch-delete/route.js +2 -2
  70. package/.next/server/app/api/error-items/batch-delete/route.js.nft.json +1 -1
  71. package/.next/server/app/api/error-items/clear/route.js +2 -2
  72. package/.next/server/app/api/error-items/clear/route.js.nft.json +1 -1
  73. package/.next/server/app/api/error-items/list/route.js +2 -2
  74. package/.next/server/app/api/error-items/list/route.js.nft.json +1 -1
  75. package/.next/server/app/api/error-items/route.js +2 -2
  76. package/.next/server/app/api/error-items/route.js.nft.json +1 -1
  77. package/.next/server/app/api/error-items/short/[shortId]/route.js +2 -2
  78. package/.next/server/app/api/error-items/short/[shortId]/route.js.nft.json +1 -1
  79. package/.next/server/app/api/error-items/similarity/route.js +2 -2
  80. package/.next/server/app/api/error-items/similarity/route.js.nft.json +1 -1
  81. package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route.js +2 -2
  82. package/.next/server/app/api/exams/[id]/questions/[questionId]/regenerate/route.js.nft.json +1 -1
  83. package/.next/server/app/api/exams/[id]/results/route.js +4 -4
  84. package/.next/server/app/api/exams/[id]/results/route.js.nft.json +1 -1
  85. package/.next/server/app/api/exams/[id]/retry/route.js +2 -2
  86. package/.next/server/app/api/exams/[id]/retry/route.js.nft.json +1 -1
  87. package/.next/server/app/api/exams/[id]/route.js.nft.json +1 -1
  88. package/.next/server/app/api/exams/route.js +2 -2
  89. package/.next/server/app/api/exams/route.js.nft.json +1 -1
  90. package/.next/server/app/api/export/route.js +2 -2
  91. package/.next/server/app/api/export/route.js.nft.json +1 -1
  92. package/.next/server/app/api/geogebra-analyze/route.js +2 -2
  93. package/.next/server/app/api/geogebra-analyze/route.js.nft.json +1 -1
  94. package/.next/server/app/api/health/route.js +2 -2
  95. package/.next/server/app/api/health/route.js.nft.json +1 -1
  96. package/.next/server/app/api/import/route.js +2 -2
  97. package/.next/server/app/api/import/route.js.nft.json +1 -1
  98. package/.next/server/app/api/logs/frontend/route.js +2 -2
  99. package/.next/server/app/api/logs/frontend/route.js.nft.json +1 -1
  100. package/.next/server/app/api/notebooks/[id]/retag/route.js +2 -2
  101. package/.next/server/app/api/notebooks/[id]/retag/route.js.nft.json +1 -1
  102. package/.next/server/app/api/notebooks/[id]/route.js +2 -2
  103. package/.next/server/app/api/notebooks/[id]/route.js.nft.json +1 -1
  104. package/.next/server/app/api/notebooks/route.js +2 -2
  105. package/.next/server/app/api/notebooks/route.js.nft.json +1 -1
  106. package/.next/server/app/api/openclaw/batch-upload/route.js +2 -2
  107. package/.next/server/app/api/openclaw/batch-upload/route.js.nft.json +1 -1
  108. package/.next/server/app/api/practice/generate/route.js +2 -2
  109. package/.next/server/app/api/practice/generate/route.js.nft.json +1 -1
  110. package/.next/server/app/api/practice/record/[id]/route.js +2 -2
  111. package/.next/server/app/api/practice/record/[id]/route.js.nft.json +1 -1
  112. package/.next/server/app/api/practice/record/route.js +2 -2
  113. package/.next/server/app/api/practice/record/route.js.nft.json +1 -1
  114. package/.next/server/app/api/reanswer/route.js +2 -2
  115. package/.next/server/app/api/reanswer/route.js.nft.json +1 -1
  116. package/.next/server/app/api/register/route.js.nft.json +1 -1
  117. package/.next/server/app/api/register/status/route.js +2 -2
  118. package/.next/server/app/api/register/status/route.js.nft.json +1 -1
  119. package/.next/server/app/api/settings/route.js +2 -2
  120. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  121. package/.next/server/app/api/stats/practice/clear/route.js +2 -2
  122. package/.next/server/app/api/stats/practice/clear/route.js.nft.json +1 -1
  123. package/.next/server/app/api/stats/practice/route.js +2 -2
  124. package/.next/server/app/api/stats/practice/route.js.nft.json +1 -1
  125. package/.next/server/app/api/tags/route.js +2 -2
  126. package/.next/server/app/api/tags/route.js.nft.json +1 -1
  127. package/.next/server/app/api/tags/stats/route.js +2 -2
  128. package/.next/server/app/api/tags/stats/route.js.nft.json +1 -1
  129. package/.next/server/app/api/tags/suggestions/route.js +2 -2
  130. package/.next/server/app/api/tags/suggestions/route.js.nft.json +1 -1
  131. package/.next/server/app/api/tasks/route.js +2 -2
  132. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  133. package/.next/server/app/api/user/route.js +2 -2
  134. package/.next/server/app/api/user/route.js.nft.json +1 -1
  135. package/.next/server/app/api/version/route.js +2 -2
  136. package/.next/server/app/api/version/route.js.nft.json +1 -1
  137. package/.next/server/app/error-items/[id]/page/build-manifest.json +5 -5
  138. package/.next/server/app/error-items/[id]/page.js +2 -2
  139. package/.next/server/app/error-items/[id]/page.js.nft.json +1 -1
  140. package/.next/server/app/error-items/[id]/page_client-reference-manifest.js +1 -1
  141. package/.next/server/app/exams/[id]/page/build-manifest.json +5 -5
  142. package/.next/server/app/exams/[id]/page.js +2 -2
  143. package/.next/server/app/exams/[id]/page.js.nft.json +1 -1
  144. package/.next/server/app/exams/[id]/page_client-reference-manifest.js +1 -1
  145. package/.next/server/app/exams/[id]/print/page/build-manifest.json +5 -5
  146. package/.next/server/app/exams/[id]/print/page.js +2 -2
  147. package/.next/server/app/exams/[id]/print/page.js.nft.json +1 -1
  148. package/.next/server/app/exams/[id]/print/page_client-reference-manifest.js +1 -1
  149. package/.next/server/app/exams/page/build-manifest.json +5 -5
  150. package/.next/server/app/exams/page.js +2 -2
  151. package/.next/server/app/exams/page.js.nft.json +1 -1
  152. package/.next/server/app/exams/page_client-reference-manifest.js +1 -1
  153. package/.next/server/app/favicon.ico/route.js +2 -2
  154. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  155. package/.next/server/app/latex-test/page/build-manifest.json +5 -5
  156. package/.next/server/app/latex-test/page.js +2 -2
  157. package/.next/server/app/latex-test/page.js.nft.json +1 -1
  158. package/.next/server/app/latex-test/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/login/page/build-manifest.json +5 -5
  160. package/.next/server/app/login/page.js +2 -2
  161. package/.next/server/app/login/page.js.nft.json +1 -1
  162. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  164. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  165. package/.next/server/app/manifest.webmanifest.body +1 -1
  166. package/.next/server/app/notebooks/[id]/add/page/build-manifest.json +5 -5
  167. package/.next/server/app/notebooks/[id]/add/page.js +2 -2
  168. package/.next/server/app/notebooks/[id]/add/page.js.nft.json +1 -1
  169. package/.next/server/app/notebooks/[id]/add/page_client-reference-manifest.js +1 -1
  170. package/.next/server/app/notebooks/[id]/page/build-manifest.json +5 -5
  171. package/.next/server/app/notebooks/[id]/page.js +2 -2
  172. package/.next/server/app/notebooks/[id]/page.js.nft.json +1 -1
  173. package/.next/server/app/notebooks/[id]/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/notebooks/page/build-manifest.json +5 -5
  175. package/.next/server/app/notebooks/page.js +2 -2
  176. package/.next/server/app/notebooks/page.js.nft.json +1 -1
  177. package/.next/server/app/notebooks/page_client-reference-manifest.js +1 -1
  178. package/.next/server/app/page/build-manifest.json +5 -5
  179. package/.next/server/app/page.js +2 -2
  180. package/.next/server/app/page.js.nft.json +1 -1
  181. package/.next/server/app/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/practice/page/build-manifest.json +5 -5
  183. package/.next/server/app/practice/page.js +2 -2
  184. package/.next/server/app/practice/page.js.nft.json +1 -1
  185. package/.next/server/app/practice/page_client-reference-manifest.js +1 -1
  186. package/.next/server/app/print-preview/page/build-manifest.json +5 -5
  187. package/.next/server/app/print-preview/page.js +2 -2
  188. package/.next/server/app/print-preview/page.js.nft.json +1 -1
  189. package/.next/server/app/print-preview/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/register/page/build-manifest.json +5 -5
  191. package/.next/server/app/register/page.js.nft.json +1 -1
  192. package/.next/server/app/register/page_client-reference-manifest.js +1 -1
  193. package/.next/server/app/stats/page/build-manifest.json +5 -5
  194. package/.next/server/app/stats/page.js +2 -2
  195. package/.next/server/app/stats/page.js.nft.json +1 -1
  196. package/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  197. package/.next/server/app/tags/page/build-manifest.json +5 -5
  198. package/.next/server/app/tags/page.js +2 -2
  199. package/.next/server/app/tags/page.js.nft.json +1 -1
  200. package/.next/server/app/tags/page_client-reference-manifest.js +1 -1
  201. package/.next/server/chunks/1jng_app_api_exams_[id]_questions_[questionId]_regenerate_route_actions_1ggead3.js +1 -1
  202. package/.next/server/chunks/1oeh_server_app_api_error-items_[id]_practice-records_route_actions_0z2zuf1.js +1 -1
  203. package/.next/server/chunks/1oeh_server_app_api_error-items_[id]_svg-animation_route_actions_17gckf3.js +1 -1
  204. package/.next/server/chunks/[externals]__04n7qbr._.js +1 -1
  205. package/.next/server/chunks/[externals]__0pot68n._.js +1 -1
  206. package/.next/server/chunks/[externals]__1735khz._.js +1 -1
  207. package/.next/server/chunks/[externals]_assert_1pwe1ri._.js +1 -1
  208. package/.next/server/chunks/[root-of-the-server]__00_hq9v._.js +6 -6
  209. package/.next/server/chunks/[root-of-the-server]__01bzczj._.js +1 -1
  210. package/.next/server/chunks/[root-of-the-server]__02j1w81._.js +1 -1
  211. package/.next/server/chunks/[root-of-the-server]__03nfvnm._.js +1 -1
  212. package/.next/server/chunks/[root-of-the-server]__04tyyvs._.js +1 -1
  213. package/.next/server/chunks/[root-of-the-server]__05s4wut._.js +1 -1
  214. package/.next/server/chunks/[root-of-the-server]__06_nln5._.js +1 -1
  215. package/.next/server/chunks/[root-of-the-server]__06h5afw._.js +1 -1
  216. package/.next/server/chunks/[root-of-the-server]__07jl92a._.js +1 -1
  217. package/.next/server/chunks/[root-of-the-server]__0_t7bbz._.js +1 -1
  218. package/.next/server/chunks/[root-of-the-server]__0akadps._.js +1 -1
  219. package/.next/server/chunks/[root-of-the-server]__0be5c5r._.js +1 -1
  220. package/.next/server/chunks/[root-of-the-server]__0bqawi0._.js +1 -1
  221. package/.next/server/chunks/[root-of-the-server]__0bsw5c9._.js +1 -1
  222. package/.next/server/chunks/[root-of-the-server]__0c59gc3._.js +1 -1
  223. package/.next/server/chunks/[root-of-the-server]__0cmxmwt._.js +1 -1
  224. package/.next/server/chunks/[root-of-the-server]__0d5dpu4._.js +1 -1
  225. package/.next/server/chunks/[root-of-the-server]__0d9ijed._.js +1 -1
  226. package/.next/server/chunks/[root-of-the-server]__0e22a4y._.js +10 -10
  227. package/.next/server/chunks/[root-of-the-server]__0fnyu4s._.js +1 -1
  228. package/.next/server/chunks/[root-of-the-server]__0gp88gz._.js +1 -1
  229. package/.next/server/chunks/[root-of-the-server]__0inxsnu._.js +1 -1
  230. package/.next/server/chunks/[root-of-the-server]__0j5231l._.js +1 -1
  231. package/.next/server/chunks/[root-of-the-server]__0jaawra._.js +1 -1
  232. package/.next/server/chunks/[root-of-the-server]__0k-nf6a._.js +1 -1
  233. package/.next/server/chunks/[root-of-the-server]__0k-p1pj._.js +1 -1
  234. package/.next/server/chunks/[root-of-the-server]__0lrdm1u._.js +1 -1
  235. package/.next/server/chunks/[root-of-the-server]__0lro5a7._.js +1 -1
  236. package/.next/server/chunks/[root-of-the-server]__0m8p-6f._.js +1 -1
  237. package/.next/server/chunks/[root-of-the-server]__0mfjf2y._.js +1 -1
  238. package/.next/server/chunks/[root-of-the-server]__0mqorxb._.js +1 -1
  239. package/.next/server/chunks/[root-of-the-server]__0no6umu._.js +1 -1
  240. package/.next/server/chunks/[root-of-the-server]__0nqbham._.js +1 -1
  241. package/.next/server/chunks/[root-of-the-server]__0o9gtvd._.js +1 -1
  242. package/.next/server/chunks/[root-of-the-server]__0obb4y-._.js +1 -1
  243. package/.next/server/chunks/[root-of-the-server]__0p3u6_q._.js +1 -1
  244. package/.next/server/chunks/[root-of-the-server]__0rk_yxy._.js +3 -3
  245. package/.next/server/chunks/[root-of-the-server]__0rmrkd_._.js +1 -1
  246. package/.next/server/chunks/[root-of-the-server]__0tdibjz._.js +1 -1
  247. package/.next/server/chunks/[root-of-the-server]__0u58zap._.js +1 -1
  248. package/.next/server/chunks/[root-of-the-server]__0vhjihq._.js +1 -1
  249. package/.next/server/chunks/[root-of-the-server]__0vz88er._.js +1 -1
  250. package/.next/server/chunks/[root-of-the-server]__0wf9znr._.js +1 -1
  251. package/.next/server/chunks/[root-of-the-server]__0yc8r2x._.js +1 -1
  252. package/.next/server/chunks/[root-of-the-server]__0zv7jom._.js +1 -1
  253. package/.next/server/chunks/[root-of-the-server]__11_-ncy._.js +1 -1
  254. package/.next/server/chunks/[root-of-the-server]__11_1z7m._.js +1 -1
  255. package/.next/server/chunks/[root-of-the-server]__11n87go._.js +1 -1
  256. package/.next/server/chunks/[root-of-the-server]__11p4ahb._.js +1 -1
  257. package/.next/server/chunks/[root-of-the-server]__122xu-0._.js +9 -9
  258. package/.next/server/chunks/[root-of-the-server]__131taws._.js +1 -1
  259. package/.next/server/chunks/[root-of-the-server]__13ebiit._.js +1 -1
  260. package/.next/server/chunks/[root-of-the-server]__1413v0e._.js +1 -1
  261. package/.next/server/chunks/[root-of-the-server]__14dnbrn._.js +1 -1
  262. package/.next/server/chunks/[root-of-the-server]__14jqm9_._.js +1 -1
  263. package/.next/server/chunks/[root-of-the-server]__152lbaw._.js +1 -1
  264. package/.next/server/chunks/[root-of-the-server]__15tkoe6._.js +1 -1
  265. package/.next/server/chunks/[root-of-the-server]__16begv4._.js +1 -1
  266. package/.next/server/chunks/[root-of-the-server]__17duis5._.js +1 -1
  267. package/.next/server/chunks/[root-of-the-server]__17q3k-v._.js +1 -1
  268. package/.next/server/chunks/[root-of-the-server]__184u6de._.js +1 -1
  269. package/.next/server/chunks/[root-of-the-server]__18atlj8._.js +1 -1
  270. package/.next/server/chunks/[root-of-the-server]__18c7l6u._.js +1 -1
  271. package/.next/server/chunks/[root-of-the-server]__18zrkky._.js +1 -1
  272. package/.next/server/chunks/[root-of-the-server]__19vj8qy._.js +1 -1
  273. package/.next/server/chunks/[root-of-the-server]__1_gkx5x._.js +1 -1
  274. package/.next/server/chunks/[root-of-the-server]__1aaux7e._.js +1 -1
  275. package/.next/server/chunks/[root-of-the-server]__1cceu4b._.js +1 -1
  276. package/.next/server/chunks/[root-of-the-server]__1cn6rlb._.js +1 -1
  277. package/.next/server/chunks/[root-of-the-server]__1csfdxc._.js +1 -1
  278. package/.next/server/chunks/[root-of-the-server]__1ezwxao._.js +1 -1
  279. package/.next/server/chunks/[root-of-the-server]__1g1wi9i._.js +1 -1
  280. package/.next/server/chunks/[root-of-the-server]__1gmc_uw._.js +1 -1
  281. package/.next/server/chunks/[root-of-the-server]__1h09r50._.js +1 -1
  282. package/.next/server/chunks/[root-of-the-server]__1hpwwxw._.js +1 -1
  283. package/.next/server/chunks/[root-of-the-server]__1j6mx-v._.js +1 -1
  284. package/.next/server/chunks/[root-of-the-server]__1jdi-1f._.js +1 -1
  285. package/.next/server/chunks/[root-of-the-server]__1jtd2ar._.js +2 -2
  286. package/.next/server/chunks/[root-of-the-server]__1ju8z29._.js +1 -1
  287. package/.next/server/chunks/[root-of-the-server]__1kpo44g._.js +1 -1
  288. package/.next/server/chunks/[root-of-the-server]__1kqv61m._.js +1 -1
  289. package/.next/server/chunks/[root-of-the-server]__1lct0vi._.js +1 -1
  290. package/.next/server/chunks/[root-of-the-server]__1loecue._.js +1 -1
  291. package/.next/server/chunks/[root-of-the-server]__1m4-ab6._.js +1 -1
  292. package/.next/server/chunks/[root-of-the-server]__1mkpya8._.js +1 -1
  293. package/.next/server/chunks/[root-of-the-server]__1nmtv65._.js +1 -1
  294. package/.next/server/chunks/[root-of-the-server]__1nwf3ua._.js +1 -1
  295. package/.next/server/chunks/[root-of-the-server]__1oup682._.js +1 -1
  296. package/.next/server/chunks/[root-of-the-server]__1p8hw44._.js +1 -1
  297. package/.next/server/chunks/[root-of-the-server]__1pplzr1._.js +1 -1
  298. package/.next/server/chunks/[root-of-the-server]__1rsn804._.js +1 -1
  299. package/.next/server/chunks/[root-of-the-server]__1sdtn83._.js +1 -1
  300. package/.next/server/chunks/[root-of-the-server]__1u-1vx4._.js +1 -1
  301. package/.next/server/chunks/[root-of-the-server]__1v6nwhq._.js +1 -1
  302. package/.next/server/chunks/[root-of-the-server]__1vw740y._.js +9 -9
  303. package/.next/server/chunks/[root-of-the-server]__20465pr._.js +1 -1
  304. package/.next/server/chunks/[root-of-the-server]__207mxv8._.js +1 -1
  305. package/.next/server/chunks/_0-eguqv._.js +1 -1
  306. package/.next/server/chunks/_008zx49._.js +1 -1
  307. package/.next/server/chunks/_011-ll5._.js +1 -1
  308. package/.next/server/chunks/_0389uce._.js +1 -1
  309. package/.next/server/chunks/_0431fxn._.js +1 -1
  310. package/.next/server/chunks/_0_o8yhv._.js +1 -1
  311. package/.next/server/chunks/_0c5hvv3._.js +4 -4
  312. package/.next/server/chunks/_0ekrwj-._.js +6 -6
  313. package/.next/server/chunks/_0frix22._.js +4 -4
  314. package/.next/server/chunks/_0gwg6ba._.js +1 -1
  315. package/.next/server/chunks/_0gxi3zr._.js +1 -1
  316. package/.next/server/chunks/_0lz3t4l._.js +12 -12
  317. package/.next/server/chunks/_0rdo0a4._.js +1 -1
  318. package/.next/server/chunks/_0uxp3uh._.js +1 -1
  319. package/.next/server/chunks/_0x3ltk0._.js +6 -6
  320. package/.next/server/chunks/_12w5k19._.js +1 -1
  321. package/.next/server/chunks/_13ffmxv._.js +1 -1
  322. package/.next/server/chunks/_14tz_k9._.js +1 -1
  323. package/.next/server/chunks/_167vv93._.js +1 -1
  324. package/.next/server/chunks/_16jdov0._.js +1 -1
  325. package/.next/server/chunks/_18amra5._.js +1 -1
  326. package/.next/server/chunks/_1_ns7o3._.js +1 -1
  327. package/.next/server/chunks/_1a1aqmi._.js +1 -1
  328. package/.next/server/chunks/_1a1udq0._.js +1 -1
  329. package/.next/server/chunks/_1b0269x._.js +1 -1
  330. package/.next/server/chunks/_1b7qjlv._.js +1 -1
  331. package/.next/server/chunks/_1be-y66._.js +1 -1
  332. package/.next/server/chunks/_1e1h1f1._.js +1 -1
  333. package/.next/server/chunks/_1ex6ovo._.js +1 -1
  334. package/.next/server/chunks/_1fgb9ve._.js +1 -1
  335. package/.next/server/chunks/_1flar98._.js +1 -1
  336. package/.next/server/chunks/_1m-yyz-._.js +1 -1
  337. package/.next/server/chunks/_1oj6gy_._.js +1 -1
  338. package/.next/server/chunks/_1pvqo-q._.js +1 -1
  339. package/.next/server/chunks/_1z_ujac._.js +1 -1
  340. package/.next/server/chunks/_211va-d._.js +1 -1
  341. package/.next/server/chunks/_next-internal_server_app_api_admin_dashboard_route_actions_1ispso-.js +1 -1
  342. package/.next/server/chunks/_next-internal_server_app_api_admin_users_[id]_detail_route_actions_0oe_wkt.js +1 -1
  343. package/.next/server/chunks/_next-internal_server_app_api_admin_users_route_actions_0q-rtz1.js +1 -1
  344. package/.next/server/chunks/_next-internal_server_app_api_ai_models_route_actions_0w7iwv-.js +1 -1
  345. package/.next/server/chunks/_next-internal_server_app_api_ai_test_route_actions_1p0n1q8.js +1 -1
  346. package/.next/server/chunks/_next-internal_server_app_api_analytics_route_actions_1e0ou17.js +1 -1
  347. package/.next/server/chunks/_next-internal_server_app_api_analyze_route_actions_0lx-23h.js +1 -1
  348. package/.next/server/chunks/_next-internal_server_app_api_auth_[___nextauth]_route_actions_08nexdk.js +1 -1
  349. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_figure_route_actions_0adlts0.js +1 -1
  350. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_fix-latex_route_actions_0hc7dhx.js +1 -1
  351. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_geogebra_route_actions_1-ks4uv.js +1 -1
  352. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_image_route_actions_1k9n5yl.js +1 -1
  353. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_mastery_route_actions_1l5uan6.js +1 -1
  354. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_reanswer_route_actions_1-sw0j2.js +1 -1
  355. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_retag_route_actions_0ckki4n.js +1 -1
  356. package/.next/server/chunks/_next-internal_server_app_api_error-items_[id]_route_actions_1kbs4ux.js +1 -1
  357. package/.next/server/chunks/_next-internal_server_app_api_error-items_batch-delete_route_actions_0hiq_1k.js +1 -1
  358. package/.next/server/chunks/_next-internal_server_app_api_error-items_clear_route_actions_14t_6i-.js +1 -1
  359. package/.next/server/chunks/_next-internal_server_app_api_error-items_list_route_actions_032x4ue.js +1 -1
  360. package/.next/server/chunks/_next-internal_server_app_api_error-items_route_actions_1zdvz0p.js +1 -1
  361. package/.next/server/chunks/_next-internal_server_app_api_error-items_similarity_route_actions_1i26if9.js +1 -1
  362. package/.next/server/chunks/_next-internal_server_app_api_exams_[id]_retry_route_actions_1fdi39f.js +1 -1
  363. package/.next/server/chunks/_next-internal_server_app_api_exams_[id]_route_actions_1wuidrq.js +1 -1
  364. package/.next/server/chunks/_next-internal_server_app_api_exams_route_actions_1c_zhtj.js +1 -1
  365. package/.next/server/chunks/_next-internal_server_app_api_export_route_actions_0lpcnjc.js +1 -1
  366. package/.next/server/chunks/_next-internal_server_app_api_geogebra-analyze_route_actions_1xng0_c.js +1 -1
  367. package/.next/server/chunks/_next-internal_server_app_api_health_route_actions_1ryftkb.js +1 -1
  368. package/.next/server/chunks/_next-internal_server_app_api_import_route_actions_20ko04x.js +1 -1
  369. package/.next/server/chunks/_next-internal_server_app_api_logs_frontend_route_actions_0nxepty.js +1 -1
  370. package/.next/server/chunks/_next-internal_server_app_api_notebooks_[id]_retag_route_actions_00su_t8.js +1 -1
  371. package/.next/server/chunks/_next-internal_server_app_api_notebooks_[id]_route_actions_11j3vxg.js +1 -1
  372. package/.next/server/chunks/_next-internal_server_app_api_notebooks_route_actions_02cy45r.js +1 -1
  373. package/.next/server/chunks/_next-internal_server_app_api_openclaw_batch-upload_route_actions_1zz3oen.js +1 -1
  374. package/.next/server/chunks/_next-internal_server_app_api_practice_generate_route_actions_1krr9n_.js +1 -1
  375. package/.next/server/chunks/_next-internal_server_app_api_practice_record_[id]_route_actions_0zreiom.js +1 -1
  376. package/.next/server/chunks/_next-internal_server_app_api_practice_record_route_actions_0py9z__.js +1 -1
  377. package/.next/server/chunks/_next-internal_server_app_api_reanswer_route_actions_04xweh_.js +1 -1
  378. package/.next/server/chunks/_next-internal_server_app_api_register_route_actions_0vlzh_c.js +1 -1
  379. package/.next/server/chunks/_next-internal_server_app_api_register_status_route_actions_0b52_sj.js +1 -1
  380. package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +1 -1
  381. package/.next/server/chunks/_next-internal_server_app_api_stats_practice_clear_route_actions_1iz6iz0.js +1 -1
  382. package/.next/server/chunks/_next-internal_server_app_api_stats_practice_route_actions_1tfoxx-.js +1 -1
  383. package/.next/server/chunks/_next-internal_server_app_api_tags_route_actions_1nb9ma2.js +1 -1
  384. package/.next/server/chunks/_next-internal_server_app_api_tags_stats_route_actions_0fmeadc.js +1 -1
  385. package/.next/server/chunks/_next-internal_server_app_api_tags_suggestions_route_actions_1xpolyv.js +1 -1
  386. package/.next/server/chunks/_next-internal_server_app_api_tasks_route_actions_123tq1_.js +1 -1
  387. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +1 -1
  388. package/.next/server/chunks/_next-internal_server_app_manifest_webmanifest_route_actions_08hcpz0.js +1 -1
  389. package/.next/server/chunks/node_modules_next_1zdbrne._.js +1 -1
  390. package/.next/server/chunks/node_modules_zod_v4_classic_external_1-pw2v2.js +3 -3
  391. package/.next/server/chunks/src_0tzpy5j._.js +1 -1
  392. package/.next/server/chunks/src_lib_ai_prompts_ts_0z36zms._.js +1 -1
  393. package/.next/server/chunks/src_lib_date-time_ts_14chb27._.js +1 -1
  394. package/.next/server/chunks/src_lib_question-deduplication_ts_1p1bik-._.js +1 -1
  395. package/.next/server/chunks/ssr/[externals]_fs_0pplqgc._.js +1 -1
  396. package/.next/server/chunks/ssr/[root-of-the-server]__00gewu3._.js +2 -2
  397. package/.next/server/chunks/ssr/[root-of-the-server]__05f8wbh._.js +1 -1
  398. package/.next/server/chunks/ssr/[root-of-the-server]__0a0nty7._.js +1 -1
  399. package/.next/server/chunks/ssr/[root-of-the-server]__0ax9dog._.js +1 -1
  400. package/.next/server/chunks/ssr/[root-of-the-server]__0b8kewv._.js +1 -1
  401. package/.next/server/chunks/ssr/[root-of-the-server]__0bvtza7._.js +2 -2
  402. package/.next/server/chunks/ssr/[root-of-the-server]__0g_-bym._.js +1 -1
  403. package/.next/server/chunks/ssr/[root-of-the-server]__0gwwr7e._.js +1 -1
  404. package/.next/server/chunks/ssr/[root-of-the-server]__0hzktoi._.js +1 -1
  405. package/.next/server/chunks/ssr/[root-of-the-server]__0icjezr._.js +1 -1
  406. package/.next/server/chunks/ssr/[root-of-the-server]__0koj8h0._.js +1 -1
  407. package/.next/server/chunks/ssr/[root-of-the-server]__0s87xha._.js +1 -1
  408. package/.next/server/chunks/ssr/[root-of-the-server]__0snpjfe._.js +1 -1
  409. package/.next/server/chunks/ssr/[root-of-the-server]__0y_e9do._.js +1 -1
  410. package/.next/server/chunks/ssr/[root-of-the-server]__0ybs_4c._.js +1 -1
  411. package/.next/server/chunks/ssr/[root-of-the-server]__14l7peq._.js +1 -1
  412. package/.next/server/chunks/ssr/[root-of-the-server]__1507q8a._.js +1 -1
  413. package/.next/server/chunks/ssr/[root-of-the-server]__15ppb9j._.js +1 -1
  414. package/.next/server/chunks/ssr/[root-of-the-server]__191jn5n._.js +1 -1
  415. package/.next/server/chunks/ssr/[root-of-the-server]__1f2jx51._.js +2 -2
  416. package/.next/server/chunks/ssr/[root-of-the-server]__1gth76-._.js +1 -1
  417. package/.next/server/chunks/ssr/[root-of-the-server]__1ko_dw5._.js +1 -1
  418. package/.next/server/chunks/ssr/[root-of-the-server]__1l84pks._.js +1 -1
  419. package/.next/server/chunks/ssr/[root-of-the-server]__1m7qw-2._.js +1 -1
  420. package/.next/server/chunks/ssr/[root-of-the-server]__1ma2oml._.js +1 -1
  421. package/.next/server/chunks/ssr/[root-of-the-server]__1o8jotz._.js +1 -1
  422. package/.next/server/chunks/ssr/[root-of-the-server]__1o__w27._.js +1 -1
  423. package/.next/server/chunks/ssr/[root-of-the-server]__1p7f0va._.js +1 -1
  424. package/.next/server/chunks/ssr/[root-of-the-server]__1sg9eoj._.js +1 -1
  425. package/.next/server/chunks/ssr/[root-of-the-server]__1u74hyi._.js +1 -1
  426. package/.next/server/chunks/ssr/[root-of-the-server]__1xsovpr._.js +1 -1
  427. package/.next/server/chunks/ssr/_054yhx9._.js +1 -1
  428. package/.next/server/chunks/ssr/_062gk85._.js +3 -0
  429. package/.next/server/chunks/ssr/_07ls0n_._.js +1 -1
  430. package/.next/server/chunks/ssr/_0i9hwpv._.js +1 -1
  431. package/.next/server/chunks/ssr/_0idg05p._.js +3 -0
  432. package/.next/server/chunks/ssr/_0iqp5hs._.js +1 -1
  433. package/.next/server/chunks/ssr/_0m1-rq-._.js +1 -1
  434. package/.next/server/chunks/ssr/_0mgbe2b._.js +1 -1
  435. package/.next/server/chunks/ssr/_0nv22wt._.js +1 -1
  436. package/.next/server/chunks/ssr/_0rz2_qb._.js +5 -5
  437. package/.next/server/chunks/ssr/_0sbbx9z._.js +2 -2
  438. package/.next/server/chunks/ssr/_0sf1gd9._.js +1 -1
  439. package/.next/server/chunks/ssr/_0uemk57._.js +1 -1
  440. package/.next/server/chunks/ssr/_0zj7dlu._.js +1 -1
  441. package/.next/server/chunks/ssr/_17igtpd._.js +1 -1
  442. package/.next/server/chunks/ssr/_1gu1rou._.js +1 -1
  443. package/.next/server/chunks/ssr/_1jniqsj._.js +1 -1
  444. package/.next/server/chunks/ssr/_1kgnhmo._.js +2 -2
  445. package/.next/server/chunks/ssr/_1lt1lhz._.js +2 -2
  446. package/.next/server/chunks/ssr/_1yeu09q._.js +1 -1
  447. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +1 -1
  448. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +1 -1
  449. package/.next/server/chunks/ssr/_next-internal_server_app_admin_page_actions_1mcickz.js +1 -1
  450. package/.next/server/chunks/ssr/_next-internal_server_app_admin_user_[id]_page_actions_0baj8gs.js +1 -1
  451. package/.next/server/chunks/ssr/_next-internal_server_app_error-items_[id]_page_actions_0qla9ak.js +1 -1
  452. package/.next/server/chunks/ssr/_next-internal_server_app_exams_[id]_print_page_actions_0pxdgxq.js +1 -1
  453. package/.next/server/chunks/ssr/_next-internal_server_app_exams_page_actions_0av69f-.js +1 -1
  454. package/.next/server/chunks/ssr/_next-internal_server_app_latex-test_page_actions_19v7ka0.js +1 -1
  455. package/.next/server/chunks/ssr/_next-internal_server_app_login_page_actions_04fnjo0.js +1 -1
  456. package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_[id]_add_page_actions_0275ft2.js +1 -1
  457. package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_[id]_page_actions_1qj0i-7.js +1 -1
  458. package/.next/server/chunks/ssr/_next-internal_server_app_notebooks_page_actions_06x1kdz.js +1 -1
  459. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js +1 -1
  460. package/.next/server/chunks/ssr/_next-internal_server_app_practice_page_actions_0cy-h5n.js +1 -1
  461. package/.next/server/chunks/ssr/_next-internal_server_app_print-preview_page_actions_1jhaaln.js +1 -1
  462. package/.next/server/chunks/ssr/_next-internal_server_app_register_page_actions_1op-s-x.js +1 -1
  463. package/.next/server/chunks/ssr/_next-internal_server_app_stats_page_actions_1olf1_a.js +1 -1
  464. package/.next/server/chunks/ssr/node_modules_0o2aki7._.js +1 -1
  465. package/.next/server/chunks/ssr/node_modules_1y5ym6h._.js +1 -1
  466. package/.next/server/chunks/ssr/node_modules_next_1lnqo1a._.js +3 -3
  467. package/.next/server/chunks/ssr/node_modules_next_dist_077yo5w._.js +1 -1
  468. package/.next/server/chunks/ssr/node_modules_next_dist_0nkkbfv._.js +2 -2
  469. package/.next/server/chunks/ssr/node_modules_next_dist_1_c-t1n._.js +4 -4
  470. package/.next/server/chunks/ssr/node_modules_next_dist_1v8aef8._.js +1 -1
  471. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0bew68i._.js +2 -2
  472. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +1 -1
  473. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +1 -1
  474. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892.js +1 -1
  475. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +1 -1
  476. package/.next/server/chunks/ssr/src_1biegcg._.js +1 -1
  477. package/.next/server/chunks/ssr/src_1gayunq._.js +1 -1
  478. package/.next/server/chunks/ssr/src_1o363ao._.js +1 -1
  479. package/.next/server/chunks/ssr/src_app_admin_page_tsx_0ublbd0._.js +1 -1
  480. package/.next/server/chunks/ssr/src_app_error-items_[id]_page_tsx_04xwwdm._.js +1 -1
  481. package/.next/server/chunks/ssr/src_app_notebooks_[id]_page_tsx_08njm-5._.js +1 -1
  482. package/.next/server/chunks/ssr/src_app_notebooks_page_tsx_1p9src5._.js +1 -1
  483. package/.next/server/chunks/ssr/src_app_page_tsx_1chiuah._.js +1 -1
  484. package/.next/server/chunks/ssr/src_app_practice_page_tsx_10gnx53._.js +1 -1
  485. package/.next/server/chunks/ssr/src_app_tags_page_tsx_1h2vkk4._.js +1 -1
  486. package/.next/server/chunks/ssr/src_components_providers_tsx_09kw-mv._.js +2 -2
  487. package/.next/server/chunks/ssr/src_lib_date-time_ts_0oyqctn._.js +1 -1
  488. package/.next/server/edge/chunks/[root-of-the-server]__1osrt2u._.js +1 -1
  489. package/.next/server/edge/chunks/_1s0wgnu._.js +1 -1
  490. package/.next/server/edge/chunks/node_modules_0g4gi6f._.js +3 -3
  491. package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_1iafar9.js +1 -1
  492. package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_1x1n1fx.js +1 -1
  493. package/.next/server/instrumentation.js +2 -2
  494. package/.next/server/middleware-build-manifest.js +8 -8
  495. package/.next/server/middleware-manifest.json +7 -7
  496. package/.next/server/pages/500.html +1 -1
  497. package/.next/server/server-reference-manifest.js +1 -1
  498. package/.next/server/server-reference-manifest.json +1 -1
  499. package/.next/static/{xZpf28Jr6w9NoYOlVaWKI → 678uJSzOSzePaLyv5hUv0}/_clientMiddlewareManifest.js +2 -2
  500. package/.next/static/chunks/02d-8f2qj7j3j.js +1 -0
  501. package/.next/static/chunks/02t7qqptint2p.js +1 -0
  502. package/.next/static/chunks/090a6irxe0c6j.js +1 -0
  503. package/.next/static/chunks/0bhxyq7e2eqjc.js +5 -0
  504. package/.next/static/chunks/0if-vqkhyn-zc.js +1 -0
  505. package/.next/static/chunks/0jf31atbtr1mv.js +1 -0
  506. package/.next/static/chunks/0te6mr86gdyyi.js +191 -0
  507. package/.next/static/chunks/0vgthy7v615hq.js +1 -0
  508. package/.next/static/chunks/1e5n4cprhwujv.js +1 -0
  509. package/.next/static/chunks/1edfvwc5_eck-.js +31 -0
  510. package/.next/static/chunks/1f0u19gh5_49z.js +1 -0
  511. package/.next/static/chunks/1fdj59ys-pend.js +1 -0
  512. package/.next/static/chunks/1kerqdluzq2l0.js +1 -0
  513. package/.next/static/chunks/1r4lwlvm7m53v.js +1 -0
  514. package/.next/static/chunks/1rz1bokv9edzr.js +1 -0
  515. package/.next/static/chunks/1s-d67d-yroyw.js +1 -0
  516. package/.next/static/chunks/1tw5_upsy-qj_.js +22 -0
  517. package/.next/static/chunks/1w1xvldfmcs67.js +6 -0
  518. package/.next/static/chunks/1zdof8ylzqm8w.js +1 -0
  519. package/.next/static/chunks/2-k1hjh6ff6y4.js +1 -0
  520. package/.next/static/chunks/21qpve5q3mjly.js +1 -0
  521. package/.next/static/chunks/21v32ctwcoxqt.js +1 -0
  522. package/.next/static/chunks/27-t289uq6_ju.js +3 -0
  523. package/.next/static/chunks/293-te2b34thz.js +1 -0
  524. package/.next/static/chunks/2dgleoh5fbs83.js +1 -0
  525. package/.next/static/chunks/2di_nd6djcxwu.js +1 -0
  526. package/.next/static/chunks/2mk03owifu2m1.js +33 -0
  527. package/.next/static/chunks/2qza4p5d9fz_2.js +1 -0
  528. package/.next/static/chunks/2s4c8fcrdnew4.js +1 -0
  529. package/.next/static/chunks/2zdqnkem9n6a9.js +1 -0
  530. package/.next/static/chunks/3-wm04s--suy5.js +1 -0
  531. package/.next/static/chunks/33t46atd3n2zd.js +1 -0
  532. package/.next/static/chunks/37yx4gh09tzwc.js +1 -0
  533. package/.next/static/chunks/3gwb465dhjxo9.js +1 -0
  534. package/.next/static/chunks/3hkgw-uib19xl.js +1 -0
  535. package/.next/static/chunks/{130ch9mnvb6mp.css → 3n-yabfsiog4i.css} +1 -1
  536. package/.next/static/chunks/3umldi5zknsyi.js +1 -0
  537. package/.next/static/chunks/turbopack-1yjxh4vceobdr.js +1 -0
  538. package/LICENSE +22 -0
  539. package/package.json +3 -2
  540. package/prisma/seed.db +0 -0
  541. package/public/icons/apple-touch-icon.png +0 -0
  542. package/public/icons/icon-192.png +0 -0
  543. package/public/icons/icon-512.png +0 -0
  544. package/public/icons/icon-maskable-512.png +0 -0
  545. package/public/offline.html +61 -0
  546. package/public/sw.js +84 -0
  547. package/.next/server/chunks/ssr/_12c20v5._.js +0 -3
  548. package/.next/server/chunks/ssr/_1filpif._.js +0 -3
  549. package/.next/static/chunks/00pn0o7lymln6.js +0 -1
  550. package/.next/static/chunks/02521degnqmf0.js +0 -1
  551. package/.next/static/chunks/0_w084ms_lq25.js +0 -22
  552. package/.next/static/chunks/0dzfsm6h13fyr.js +0 -1
  553. package/.next/static/chunks/0ehjiuuxbbhq9.js +0 -1
  554. package/.next/static/chunks/0iq53qkw5hvrs.js +0 -1
  555. package/.next/static/chunks/0m81l71kojx8j.js +0 -1
  556. package/.next/static/chunks/0nckb2-62ooyq.js +0 -1
  557. package/.next/static/chunks/0snej-v5yglxr.js +0 -1
  558. package/.next/static/chunks/1-7k9gbbjkcml.js +0 -1
  559. package/.next/static/chunks/17wdtw8hml2n6.js +0 -191
  560. package/.next/static/chunks/1cd32rtomdngh.js +0 -1
  561. package/.next/static/chunks/1io3-cth_2-cd.js +0 -1
  562. package/.next/static/chunks/1oiuiyv1cv06v.js +0 -31
  563. package/.next/static/chunks/1t4-pobw0y5cf.js +0 -1
  564. package/.next/static/chunks/1xg811762s1p1.js +0 -1
  565. package/.next/static/chunks/1z_5sj1wqi06v.js +0 -1
  566. package/.next/static/chunks/2a0kgntckcbvf.js +0 -1
  567. package/.next/static/chunks/2dlme2fdlkms6.js +0 -1
  568. package/.next/static/chunks/2f37cahijtel1.js +0 -1
  569. package/.next/static/chunks/2h-exsnhkfnb8.js +0 -1
  570. package/.next/static/chunks/2pmzqbg-qabof.js +0 -1
  571. package/.next/static/chunks/2rmhba08h4qqo.js +0 -33
  572. package/.next/static/chunks/2s07soqug65hc.js +0 -1
  573. package/.next/static/chunks/2vm3br71ud51j.js +0 -1
  574. package/.next/static/chunks/2w2uo9jjxt-re.js +0 -1
  575. package/.next/static/chunks/2yl8a-gxngbuq.js +0 -1
  576. package/.next/static/chunks/32bl-oqw9oso0.js +0 -1
  577. package/.next/static/chunks/35cov9g4cgt-v.js +0 -1
  578. package/.next/static/chunks/3b-g5_r9nto3s.js +0 -6
  579. package/.next/static/chunks/3g1rm2suowncy.js +0 -3
  580. package/.next/static/chunks/3helovsg02qr4.js +0 -1
  581. package/.next/static/chunks/3jta6jrk-jubq.js +0 -1
  582. package/.next/static/chunks/3yhf6xyypekz6.js +0 -1
  583. package/.next/static/chunks/3z9gc_02gl8n9.js +0 -1
  584. package/.next/static/chunks/427wg73nuzpiz.js +0 -5
  585. package/.next/static/chunks/turbopack-1-0r7_puvz3eq.js +0 -1
  586. /package/.next/static/{xZpf28Jr6w9NoYOlVaWKI → 678uJSzOSzePaLyv5hUv0}/_buildManifest.js +0 -0
  587. /package/.next/static/{xZpf28Jr6w9NoYOlVaWKI → 678uJSzOSzePaLyv5hUv0}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[61831,e=>e.a(async(t,r)=>{try{var a=e.i(58821),n=e.i(98043),i=e.i(79832),o=e.i(13618),s=e.i(76759),l=e.i(50377),u=e.i(98003),d=e.i(76025),c=t([i]);[i]=c.then?(await c)():c;let h=(0,l.createLogger)("api:export");async function p(e){let t=await (0,o.getServerSession)(i.authOptions);if(!t?.user?.email)return(0,s.unauthorized)("Not authenticated");let r=await n.prisma.user.findUnique({where:{email:t.user.email}});if(!r)return(0,s.unauthorized)("User not found");let{searchParams:l}=new URL(e.url),c="true"===l.get("all");if(c&&"admin"!==t.user.role)return(0,s.forbidden)("Admin role required");try{let e=c?{}:{userId:r.id},t=await n.prisma.subject.findMany({where:e}),i=await n.prisma.knowledgeTag.findMany({where:{...e,isSystem:!1}}),o=await n.prisma.errorItem.findMany({where:e,include:{tags:!0}}),s=await n.prisma.reviewSchedule.findMany({where:c?{errorItem:{userId:{not:void 0}}}:{errorItem:{userId:r.id}}}),l=await n.prisma.practiceRecord.findMany({where:e}),p={version:1,exportedAt:new Date().toISOString(),scope:c?"all":"user",user:{id:r.id,email:r.email,name:r.name,educationStage:r.educationStage,enrollmentYear:r.enrollmentYear,role:r.role},subjects:t,customTags:i,errorItems:o,reviewSchedules:s,practiceRecords:l};h.info({userId:r.id,scope:c?"all":"user",subjectsCount:t.length,customTagsCount:i.length,errorItemsCount:o.length,reviewSchedulesCount:s.length,practiceRecordsCount:l.length},"Data export completed");let m=JSON.stringify(p,null,2),R=c?`wrong-notebook-export-all-${(0,d.formatDateTime)(new Date,"yyyy-MM-dd",(0,u.getAppTimeZone)())}.json`:`wrong-notebook-export-${(0,d.formatDateTime)(new Date,"yyyy-MM-dd",(0,u.getAppTimeZone)())}.json`;return new a.NextResponse(m,{headers:{"Content-Type":"application/json; charset=utf-8","Content-Disposition":`attachment; filename="${R}"`}})}catch(e){return h.error({error:e,userId:r.id},"Export failed"),(0,s.internalError)("Failed to export data")}}e.s(["GET",0,p]),r()}catch(e){r(e)}},!1),51908,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),i=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),m=e.i(74838),R=e.i(10372),g=e.i(93695),w=e.i(9580);e.i(52474);var f=e.i(220);let v=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/export/route",pathname:"/api/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/export/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(61831),...{}}),{workAsyncStorage:C,workUnitAsyncStorage:y,serverHooks:x}=v;async function E(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let C="/api/export/route";C=C.replace(/\/index$/,"")||"/";let y=await v.prepare(e,t,{srcPage:C,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:x,deploymentId:E,params:T,nextConfig:A,parsedUrl:S,isDraftMode:b,prerenderManifest:I,routerServerContext:N,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:M,clientReferenceManifest:_,serverActionsManifest:q}=y,D=(0,s.normalizeAppPath)(C),H=!!I.routes[M]&&(v.isDev||(0,w.isRouteCacheOwner)(M,v.cacheOwner,I.routes[M])),U=!!(I.dynamicRoutes[D]||H),k=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,S,!1):t.end("This page could not be found"),null);if(U&&!b){let e=I.dynamicRoutes[D];if(e&&!1===e.fallback&&!H){if(A.adapterPath)return await k();throw new g.NoFallbackError}}let j=null;!U||v.isDev||b||(j="/index"===(j=M)?"/":j);let $=!0===v.isDev||!U,F=U&&!$;q&&_&&(0,o.setManifestsSingleton)({page:C,clientReferenceManifest:_,serverActionsManifest:q});let L=e.method||"GET",K=(0,i.getTracer)(),B=K.getActiveScopeSpan(),G=!!(null==N?void 0:N.isWrappedByNextServer),z=!!(0,n.getRequestMeta)(e,"minimalMode"),V=(0,n.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,A,I,z);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:T,previewProps:I.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:b,supportsDynamicResponse:$,incrementalCache:V,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>v.onRequestError(e,t,a,n,N)},sharedContext:{buildId:x,deploymentId:E}},Z=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),Y=u.NextRequestAdapter.fromNodeNextRequest(Z,(0,u.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!z&&O&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await v.handle(Y,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let i=X.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let o=X.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(Z,W,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:C,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,N),t}},Q=async(n,o)=>{try{var s,l;let n=await v.handleResponse({req:e,nextConfig:A,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:z});if(!U)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",O?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);z&&U||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(Z,W,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,N),U)throw t;await (0,p.sendResponse)(Z,W,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||D,s=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",a),o.updateName(s))})()}};if(G&&B)await Q(B,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${C}`,kind:i.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,E,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:y})},"routeModule",0,v,"serverHooks",0,x,"workAsyncStorage",0,C,"workUnitAsyncStorage",0,y])}];
1
+ module.exports=[5390,e=>e.a(async(t,r)=>{try{var a=e.i(89171),n=e.i(698043),i=e.i(79832),o=e.i(757660),s=e.i(181912),l=e.i(50377),u=e.i(798003),d=e.i(376025),c=t([i]);[i]=c.then?(await c)():c;let h=(0,l.createLogger)("api:export");async function p(e){let t=await (0,o.getServerSession)(i.authOptions);if(!t?.user?.email)return(0,s.unauthorized)("Not authenticated");let r=await n.prisma.user.findUnique({where:{email:t.user.email}});if(!r)return(0,s.unauthorized)("User not found");let{searchParams:l}=new URL(e.url),c="true"===l.get("all");if(c&&"admin"!==t.user.role)return(0,s.forbidden)("Admin role required");try{let e=c?{}:{userId:r.id},t=await n.prisma.subject.findMany({where:e}),i=await n.prisma.knowledgeTag.findMany({where:{...e,isSystem:!1}}),o=await n.prisma.errorItem.findMany({where:e,include:{tags:!0}}),s=await n.prisma.reviewSchedule.findMany({where:c?{errorItem:{userId:{not:void 0}}}:{errorItem:{userId:r.id}}}),l=await n.prisma.practiceRecord.findMany({where:e}),p={version:1,exportedAt:new Date().toISOString(),scope:c?"all":"user",user:{id:r.id,email:r.email,name:r.name,educationStage:r.educationStage,enrollmentYear:r.enrollmentYear,role:r.role},subjects:t,customTags:i,errorItems:o,reviewSchedules:s,practiceRecords:l};h.info({userId:r.id,scope:c?"all":"user",subjectsCount:t.length,customTagsCount:i.length,errorItemsCount:o.length,reviewSchedulesCount:s.length,practiceRecordsCount:l.length},"Data export completed");let m=JSON.stringify(p,null,2),R=c?`wrong-notebook-export-all-${(0,d.formatDateTime)(new Date,"yyyy-MM-dd",(0,u.getAppTimeZone)())}.json`:`wrong-notebook-export-${(0,d.formatDateTime)(new Date,"yyyy-MM-dd",(0,u.getAppTimeZone)())}.json`;return new a.NextResponse(m,{headers:{"Content-Type":"application/json; charset=utf-8","Content-Disposition":`attachment; filename="${R}"`}})}catch(e){return h.error({error:e,userId:r.id},"Export failed"),(0,s.internalError)("Failed to export data")}}e.s(["GET",0,p]),r()}catch(e){r(e)}},!1),851908,e=>{"use strict";var t=e.i(747909),r=e.i(174017),a=e.i(996250),n=e.i(759756),i=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),u=e.i(487718),d=e.i(995169),c=e.i(47587),p=e.i(666012),h=e.i(570101),m=e.i(626937),R=e.i(10372),g=e.i(193695),w=e.i(509580);e.i(52474);var f=e.i(600220);let v=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/export/route",pathname:"/api/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/export/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(5390),...{}}),{workAsyncStorage:C,workUnitAsyncStorage:y,serverHooks:x}=v;async function E(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),v.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let C="/api/export/route";C=C.replace(/\/index$/,"")||"/";let y=await v.prepare(e,t,{srcPage:C,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:x,deploymentId:E,params:T,nextConfig:A,parsedUrl:S,isDraftMode:b,prerenderManifest:I,routerServerContext:N,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:M,clientReferenceManifest:_,serverActionsManifest:q}=y,D=(0,s.normalizeAppPath)(C),H=!!I.routes[M]&&(v.isDev||(0,w.isRouteCacheOwner)(M,v.cacheOwner,I.routes[M])),U=!!(I.dynamicRoutes[D]||H),k=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,S,!1):t.end("This page could not be found"),null);if(U&&!b){let e=I.dynamicRoutes[D];if(e&&!1===e.fallback&&!H){if(A.adapterPath)return await k();throw new g.NoFallbackError}}let j=null;!U||v.isDev||b||(j="/index"===(j=M)?"/":j);let $=!0===v.isDev||!U,F=U&&!$;q&&_&&(0,o.setManifestsSingleton)({page:C,clientReferenceManifest:_,serverActionsManifest:q});let L=e.method||"GET",K=(0,i.getTracer)(),B=K.getActiveScopeSpan(),G=!!(null==N?void 0:N.isWrappedByNextServer),z=!!(0,n.getRequestMeta)(e,"minimalMode"),V=(0,n.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,A,I,z);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:T,previewProps:I.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:b,supportsDynamicResponse:$,incrementalCache:V,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>v.onRequestError(e,t,a,n,N)},sharedContext:{buildId:x,deploymentId:E}},Z=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),Y=u.NextRequestAdapter.fromNodeNextRequest(Z,(0,u.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!z&&O&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await v.handle(Y,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let i=X.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let o=X.renderOpts.collectedTags;if(!U)return await (0,p.sendResponse)(Z,W,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:C,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,N),t}},Q=async(n,o)=>{try{var s,l;let n=await v.handleResponse({req:e,nextConfig:A,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:I,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:z});if(!U)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});z||t.setHeader("x-nextjs-cache",O?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);z&&U||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(Z,W,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:F,isOnDemandRevalidate:O})},!1,N),U)throw t;await (0,p.sendResponse)(Z,W,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=K.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||D,s=`${L} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",a),o.updateName(s))})()}};if(G&&B)await Q(B,void 0);else{let t=K.getActiveScopeSpan();await K.withPropagatedContext(e.headers,()=>K.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${C}`,kind:i.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>Q(e,t)),void 0,!G)}}e.s(["handler",0,E,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:y})},"routeModule",0,v,"serverHooks",0,x,"workAsyncStorage",0,C,"workUnitAsyncStorage",0,y])}];
2
2
 
3
3
  //# sourceMappingURL=_12w5k19._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[19464,e=>e.a(async(t,i)=>{try{var o=e.i(58821),n=e.i(13618),r=e.i(79832),a=e.i(92938),s=e.i(93963),A=e.i(29236),l=e.i(90604),u=e.i(98876),d=e.i(58078),c=e.i(50377),E=t([r]);[r]=E.then?(await E)():E;let R=(0,c.createLogger)("api:ai:test"),g="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABkAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobu5js7SW5lDFIkLsEXJIA6AdzU1QXpuxZTfYVha62HyhOxCbu24gE4+lAEOm6kmorPiCa3ltpfKmhm27kbarfwkg5VlPBPWrAuYXgeaOQSohYMY/n5UkMOO4IIx1yMVQ0XT57XS3tr1EWaRmaWSK4Z2lZurltqkEnPAHAAx04ZpegnR9MurW0vJjNPJNIksrvIIy7u6/KzHpu5P8WMnk0ATabrEeozz25tbi1ngRJGinC7tr52n5WOM7W4OCMcjpVy5uEtbWW5k3bIULttUscAZOAOprL0fS7m2vL+7uobS2a9Cb4bUlkLjdukJKj5m3AHjog5NS6NoNtonnfZ33edt3fuIY+mf+eaLnr3z7d6AJ9N1NNSSbEE1vLby+VLDMF3I21WH3SR91lPB71dqpYWYtEmyoDzTySud27dluOcD+EKMdsYycZNugAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q==",h="image/jpeg";function p(e){let t=e instanceof Error?e.message:String(e),i=t.toLowerCase();for(let e of["AI_CONNECTION_FAILED","AI_TIMEOUT_ERROR","AI_QUOTA_EXCEEDED","AI_PERMISSION_DENIED","AI_NOT_FOUND","AI_RESPONSE_ERROR","AI_AUTH_ERROR","AI_SERVICE_UNAVAILABLE","AI_UNKNOWN_ERROR"])if(t.includes(e))return e;return i.includes("401")||i.includes("unauthorized")||i.includes("api key")?"AI_AUTH_ERROR":i.includes("403")||i.includes("forbidden")?"AI_PERMISSION_DENIED":i.includes("404")||i.includes("not found")?"AI_NOT_FOUND":i.includes("429")||i.includes("rate limit")||i.includes("too many")||i.includes("quota")||i.includes("额度")?"AI_QUOTA_EXCEEDED":i.includes("fetch failed")||i.includes("network")||i.includes("connect")||i.includes("enotfound")||i.includes("econnrefused")||i.includes("etimedout")||i.includes("econnreset")?"AI_CONNECTION_FAILED":i.includes("timeout")||i.includes("timed out")||i.includes("aborted")||i.includes("408")?"AI_TIMEOUT_ERROR":i.includes("500")||i.includes("502")||i.includes("503")||i.includes("504")||i.includes("overloaded")?"AI_UNKNOWN_ERROR":i.includes("invalid json")||i.includes("parse")||i.includes("missing critical xml")?"AI_RESPONSE_ERROR":"AI_UNKNOWN_ERROR"}async function K(e){try{let t,i,c,E=await (0,n.getServerSession)(r.authOptions);if(!E?.user)return o.NextResponse.json({error:"Unauthorized"},{status:401});if(!(0,d.requireAdmin)(E))return o.NextResponse.json({error:"Admin access required"},{status:403});let{provider:K,apiKey:I,baseUrl:O,model:C,endpoint:m,deploymentName:f,apiVersion:N,language:w="zh"}=await e.json();if(!K||!I)return o.NextResponse.json({error:"Missing provider or apiKey"},{status:400});R.info({provider:K,model:C,baseUrl:O||m},"AI 连接测试开始");let v=!1,_=!1;try{if("openai"===K){let e=new a.OpenAIProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||a.DEFAULT_OPENAI_MODEL)}else if("gemini"===K){let e=new s.GeminiProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||"gemini-2.0-flash")}else if("anthropic"===K){let e=new l.AnthropicProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||l.DEFAULT_ANTHROPIC_MODEL)}else if((0,u.isVendorProvider)(K)){let e=(0,u.resolveVendorConfig)(K,{apiKey:I,baseUrl:O,model:C}),t=await new a.OpenAIProvider(e).analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=e.model)}else if("azure"===K){if(!m||!f)return o.NextResponse.json({error:"Azure 需要 endpoint 和 deploymentName"},{status:400});let e=new A.AzureOpenAIProvider({apiKey:I,endpoint:m,deploymentName:f,apiVersion:N,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||f)}}catch(n){let e=p(n),o=n instanceof Error?n.message:String(n);R.info({error:o,errorCode:e,provider:K},"视觉测试失败"),["AI_AUTH_ERROR","AI_CONNECTION_FAILED","AI_TIMEOUT_ERROR","AI_QUOTA_EXCEEDED","AI_PERMISSION_DENIED","AI_SERVICE_UNAVAILABLE"].includes(e)?(t=e,i=e,R.warn({errorCode:e,provider:K},"配置错误,跳过文本测试")):i="VISION_NOT_SUPPORTED"}if(!v&&!t)try{if("openai"===K){let e=new a.OpenAIProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||a.DEFAULT_OPENAI_MODEL)}else if("gemini"===K){let e=new s.GeminiProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||"gemini-2.0-flash")}else if("anthropic"===K){let e=new l.AnthropicProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||l.DEFAULT_ANTHROPIC_MODEL)}else if((0,u.isVendorProvider)(K)){let e=(0,u.resolveVendorConfig)(K,{apiKey:I,baseUrl:O,model:C});(await new a.OpenAIProvider(e).generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=e.model)}else if("azure"===K){let e=new A.AzureOpenAIProvider({apiKey:I,endpoint:m,deploymentName:f,apiVersion:N,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||f)}}catch(e){t=p(e),R.warn({error:e,provider:K},"文本生成测试失败")}let T={success:v,textSupport:v,visionSupport:_,textError:t,visionError:i,modelInfo:c};return R.info({response:T},"AI 连接测试完成"),o.NextResponse.json(T)}catch(e){return R.error({error:e},"AI 测试 API 异常"),o.NextResponse.json({error:e instanceof Error?e.message:"Internal server error"},{status:500})}}e.s(["POST",0,K]),i()}catch(e){i(e)}},!1),23684,e=>{"use strict";var t=e.i(47909),i=e.i(74017),o=e.i(96250),n=e.i(59756),r=e.i(61916),a=e.i(74677),s=e.i(69741),A=e.i(16795),l=e.i(87718),u=e.i(95169),d=e.i(47587),c=e.i(66012),E=e.i(70101),p=e.i(74838),K=e.i(10372),R=e.i(93695),g=e.i(9580);e.i(52474);var h=e.i(220);let I=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/ai/test/route",pathname:"/api/ai/test",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ai/test/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(19464),...{}}),{workAsyncStorage:O,workUnitAsyncStorage:C,serverHooks:m}=I;async function f(e,t,o){o.requestMeta&&(0,n.setRequestMeta)(e,o.requestMeta),I.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let O="/api/ai/test/route";O=O.replace(/\/index$/,"")||"/";let C=await I.prepare(e,t,{srcPage:O,multiZoneDraftMode:!1});if(!C)return t.statusCode=400,t.end("Bad Request"),null==o.waitUntil||o.waitUntil.call(o,Promise.resolve()),null;let{buildId:m,deploymentId:f,params:N,nextConfig:w,parsedUrl:v,isDraftMode:_,prerenderManifest:T,routerServerContext:S,isOnDemandRevalidate:P,revalidateOnlyGenerated:x,resolvedPathname:y,clientReferenceManifest:D,serverActionsManifest:U}=C,M=(0,s.normalizeAppPath)(O),b=!!T.routes[y]&&(I.isDev||(0,g.isRouteCacheOwner)(y,I.cacheOwner,T.routes[y])),q=!!(T.dynamicRoutes[M]||b),L=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,v,!1):t.end("This page could not be found"),null);if(q&&!_){let e=T.dynamicRoutes[M];if(e&&!1===e.fallback&&!b){if(w.adapterPath)return await L();throw new R.NoFallbackError}}let k=null;!q||I.isDev||_||(k="/index"===(k=y)?"/":k);let z=!0===I.isDev||!q,Q=q&&!z;U&&D&&(0,a.setManifestsSingleton)({page:O,clientReferenceManifest:D,serverActionsManifest:U});let B=e.method||"GET",H=(0,r.getTracer)(),F=H.getActiveScopeSpan(),j=!!(null==S?void 0:S.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await I.getIncrementalCache(e,w,T,V);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let J={params:N,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts,useCacheTimeout:w.experimental.useCacheTimeout},cacheComponents:!!w.cacheComponents,validationLevel:w.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:z,incrementalCache:W,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:w.cacheLife,staticPageGenerationTimeout:w.staticPageGenerationTimeout,waitUntil:o.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,o,n)=>I.onRequestError(e,t,o,n,S)},sharedContext:{buildId:m,deploymentId:f}},Z=new A.NodeNextRequest(e),X=new A.NodeNextResponse(t),Y=l.NextRequestAdapter.fromNodeNextRequest(Z,(0,l.signalFromNodeResponse)(t)),G=async({previousCacheEntry:i})=>{try{if(!V&&P&&x&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await I.handle(Y,J);e.fetchMetrics=J.renderOpts.fetchMetrics;let r=J.renderOpts.pendingWaitUntil;r&&o.waitUntil&&(o.waitUntil(r),r=void 0);let a=J.renderOpts.collectedTags;if(!q)return await (0,c.sendResponse)(Z,X,n,r),null;{let e=await n.blob(),t=(0,E.toNodeOutgoingHttpHeaders)(n.headers);a&&(t[K.NEXT_CACHE_TAGS_HEADER]=a),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=K.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,o=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=K.INFINITE_CACHE?!1!==i&&i>0?w.expireTime:void 0:J.renderOpts.collectedExpire;return{value:{kind:h.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:o}}}}catch(t){throw(null==i?void 0:i.isStale)&&await I.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,S),t}},$=async(n,a)=>{try{var s,A;let n=await I.handleResponse({req:e,nextConfig:w,cacheKey:k,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:x,responseGenerator:G,waitUntil:o.waitUntil,isMinimalMode:V});if(!q)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==h.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(A=n.value)?void 0:A.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",P?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let r=(0,E.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&q||r.delete(K.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||r.get("Cache-Control")||r.set("Cache-Control",(0,p.getCacheControlHeader)(n.cacheControl)),await (0,c.sendResponse)(Z,X,new Response(n.value.body,{headers:r,status:n.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await I.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,S),q)throw t;await (0,c.sendResponse)(Z,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:r.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let i=H.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let o=i.get("next.route")||M,s=`${B} ${o}`;n.setAttributes({"next.route":o,"http.route":o,"next.span_name":s}),n.updateName(s),a&&a!==n&&(a.setAttribute("http.route",o),a.updateName(s))})()}};if(j&&F)await $(F,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${O}`,kind:r.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},e=>$(e,t)),void 0,!j)}}e.s(["handler",0,f,"patchFetch",0,function(){return(0,o.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:C})},"routeModule",0,I,"serverHooks",0,m,"workAsyncStorage",0,O,"workUnitAsyncStorage",0,C])}];
1
+ module.exports=[319464,e=>e.a(async(t,i)=>{try{var o=e.i(89171),n=e.i(757660),r=e.i(79832),a=e.i(592938),s=e.i(893963),A=e.i(229236),l=e.i(690604),u=e.i(298876),d=e.i(258078),c=e.i(50377),E=t([r]);[r]=E.then?(await E)():E;let R=(0,c.createLogger)("api:ai:test"),g="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABkAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobu5js7SW5lDFIkLsEXJIA6AdzU1QXpuxZTfYVha62HyhOxCbu24gE4+lAEOm6kmorPiCa3ltpfKmhm27kbarfwkg5VlPBPWrAuYXgeaOQSohYMY/n5UkMOO4IIx1yMVQ0XT57XS3tr1EWaRmaWSK4Z2lZurltqkEnPAHAAx04ZpegnR9MurW0vJjNPJNIksrvIIy7u6/KzHpu5P8WMnk0ATabrEeozz25tbi1ngRJGinC7tr52n5WOM7W4OCMcjpVy5uEtbWW5k3bIULttUscAZOAOprL0fS7m2vL+7uobS2a9Cb4bUlkLjdukJKj5m3AHjog5NS6NoNtonnfZ33edt3fuIY+mf+eaLnr3z7d6AJ9N1NNSSbEE1vLby+VLDMF3I21WH3SR91lPB71dqpYWYtEmyoDzTySud27dluOcD+EKMdsYycZNugAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q==",h="image/jpeg";function p(e){let t=e instanceof Error?e.message:String(e),i=t.toLowerCase();for(let e of["AI_CONNECTION_FAILED","AI_TIMEOUT_ERROR","AI_QUOTA_EXCEEDED","AI_PERMISSION_DENIED","AI_NOT_FOUND","AI_RESPONSE_ERROR","AI_AUTH_ERROR","AI_SERVICE_UNAVAILABLE","AI_UNKNOWN_ERROR"])if(t.includes(e))return e;return i.includes("401")||i.includes("unauthorized")||i.includes("api key")?"AI_AUTH_ERROR":i.includes("403")||i.includes("forbidden")?"AI_PERMISSION_DENIED":i.includes("404")||i.includes("not found")?"AI_NOT_FOUND":i.includes("429")||i.includes("rate limit")||i.includes("too many")||i.includes("quota")||i.includes("额度")?"AI_QUOTA_EXCEEDED":i.includes("fetch failed")||i.includes("network")||i.includes("connect")||i.includes("enotfound")||i.includes("econnrefused")||i.includes("etimedout")||i.includes("econnreset")?"AI_CONNECTION_FAILED":i.includes("timeout")||i.includes("timed out")||i.includes("aborted")||i.includes("408")?"AI_TIMEOUT_ERROR":i.includes("500")||i.includes("502")||i.includes("503")||i.includes("504")||i.includes("overloaded")?"AI_UNKNOWN_ERROR":i.includes("invalid json")||i.includes("parse")||i.includes("missing critical xml")?"AI_RESPONSE_ERROR":"AI_UNKNOWN_ERROR"}async function K(e){try{let t,i,c,E=await (0,n.getServerSession)(r.authOptions);if(!E?.user)return o.NextResponse.json({error:"Unauthorized"},{status:401});if(!(0,d.requireAdmin)(E))return o.NextResponse.json({error:"Admin access required"},{status:403});let{provider:K,apiKey:I,baseUrl:O,model:C,endpoint:m,deploymentName:f,apiVersion:N,language:w="zh"}=await e.json();if(!K||!I)return o.NextResponse.json({error:"Missing provider or apiKey"},{status:400});R.info({provider:K,model:C,baseUrl:O||m},"AI 连接测试开始");let v=!1,_=!1;try{if("openai"===K){let e=new a.OpenAIProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||a.DEFAULT_OPENAI_MODEL)}else if("gemini"===K){let e=new s.GeminiProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||"gemini-2.0-flash")}else if("anthropic"===K){let e=new l.AnthropicProvider({apiKey:I,baseUrl:O,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||l.DEFAULT_ANTHROPIC_MODEL)}else if((0,u.isVendorProvider)(K)){let e=(0,u.resolveVendorConfig)(K,{apiKey:I,baseUrl:O,model:C}),t=await new a.OpenAIProvider(e).analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=e.model)}else if("azure"===K){if(!m||!f)return o.NextResponse.json({error:"Azure 需要 endpoint 和 deploymentName"},{status:400});let e=new A.AzureOpenAIProvider({apiKey:I,endpoint:m,deploymentName:f,apiVersion:N,model:C}),t=await e.analyzeImage(g,h,w);(t.questionText||t.analysis)&&(v=!0,_=!0,c=C||f)}}catch(n){let e=p(n),o=n instanceof Error?n.message:String(n);R.info({error:o,errorCode:e,provider:K},"视觉测试失败"),["AI_AUTH_ERROR","AI_CONNECTION_FAILED","AI_TIMEOUT_ERROR","AI_QUOTA_EXCEEDED","AI_PERMISSION_DENIED","AI_SERVICE_UNAVAILABLE"].includes(e)?(t=e,i=e,R.warn({errorCode:e,provider:K},"配置错误,跳过文本测试")):i="VISION_NOT_SUPPORTED"}if(!v&&!t)try{if("openai"===K){let e=new a.OpenAIProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||a.DEFAULT_OPENAI_MODEL)}else if("gemini"===K){let e=new s.GeminiProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||"gemini-2.0-flash")}else if("anthropic"===K){let e=new l.AnthropicProvider({apiKey:I,baseUrl:O,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||l.DEFAULT_ANTHROPIC_MODEL)}else if((0,u.isVendorProvider)(K)){let e=(0,u.resolveVendorConfig)(K,{apiKey:I,baseUrl:O,model:C});(await new a.OpenAIProvider(e).generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=e.model)}else if("azure"===K){let e=new A.AzureOpenAIProvider({apiKey:I,endpoint:m,deploymentName:f,apiVersion:N,model:C});(await e.generateSimilarQuestion("1+1=?",["基础算术"],w,"easy")).questionText&&(v=!0,c=C||f)}}catch(e){t=p(e),R.warn({error:e,provider:K},"文本生成测试失败")}let T={success:v,textSupport:v,visionSupport:_,textError:t,visionError:i,modelInfo:c};return R.info({response:T},"AI 连接测试完成"),o.NextResponse.json(T)}catch(e){return R.error({error:e},"AI 测试 API 异常"),o.NextResponse.json({error:e instanceof Error?e.message:"Internal server error"},{status:500})}}e.s(["POST",0,K]),i()}catch(e){i(e)}},!1),223684,e=>{"use strict";var t=e.i(747909),i=e.i(174017),o=e.i(996250),n=e.i(759756),r=e.i(561916),a=e.i(174677),s=e.i(869741),A=e.i(316795),l=e.i(487718),u=e.i(995169),d=e.i(47587),c=e.i(666012),E=e.i(570101),p=e.i(626937),K=e.i(10372),R=e.i(193695),g=e.i(509580);e.i(52474);var h=e.i(600220);let I=new t.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/ai/test/route",pathname:"/api/ai/test",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ai/test/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(319464),...{}}),{workAsyncStorage:O,workUnitAsyncStorage:C,serverHooks:m}=I;async function f(e,t,o){o.requestMeta&&(0,n.setRequestMeta)(e,o.requestMeta),I.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let O="/api/ai/test/route";O=O.replace(/\/index$/,"")||"/";let C=await I.prepare(e,t,{srcPage:O,multiZoneDraftMode:!1});if(!C)return t.statusCode=400,t.end("Bad Request"),null==o.waitUntil||o.waitUntil.call(o,Promise.resolve()),null;let{buildId:m,deploymentId:f,params:N,nextConfig:w,parsedUrl:v,isDraftMode:_,prerenderManifest:T,routerServerContext:S,isOnDemandRevalidate:P,revalidateOnlyGenerated:x,resolvedPathname:y,clientReferenceManifest:D,serverActionsManifest:U}=C,M=(0,s.normalizeAppPath)(O),b=!!T.routes[y]&&(I.isDev||(0,g.isRouteCacheOwner)(y,I.cacheOwner,T.routes[y])),q=!!(T.dynamicRoutes[M]||b),L=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,v,!1):t.end("This page could not be found"),null);if(q&&!_){let e=T.dynamicRoutes[M];if(e&&!1===e.fallback&&!b){if(w.adapterPath)return await L();throw new R.NoFallbackError}}let k=null;!q||I.isDev||_||(k="/index"===(k=y)?"/":k);let z=!0===I.isDev||!q,Q=q&&!z;U&&D&&(0,a.setManifestsSingleton)({page:O,clientReferenceManifest:D,serverActionsManifest:U});let B=e.method||"GET",H=(0,r.getTracer)(),F=H.getActiveScopeSpan(),j=!!(null==S?void 0:S.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),W=(0,n.getRequestMeta)(e,"incrementalCache")||await I.getIncrementalCache(e,w,T,V);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let J={params:N,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts,useCacheTimeout:w.experimental.useCacheTimeout},cacheComponents:!!w.cacheComponents,validationLevel:w.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:z,incrementalCache:W,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:w.cacheLife,staticPageGenerationTimeout:w.staticPageGenerationTimeout,waitUntil:o.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,i,o,n)=>I.onRequestError(e,t,o,n,S)},sharedContext:{buildId:m,deploymentId:f}},Z=new A.NodeNextRequest(e),X=new A.NodeNextResponse(t),Y=l.NextRequestAdapter.fromNodeNextRequest(Z,(0,l.signalFromNodeResponse)(t)),G=async({previousCacheEntry:i})=>{try{if(!V&&P&&x&&!i)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await I.handle(Y,J);e.fetchMetrics=J.renderOpts.fetchMetrics;let r=J.renderOpts.pendingWaitUntil;r&&o.waitUntil&&(o.waitUntil(r),r=void 0);let a=J.renderOpts.collectedTags;if(!q)return await (0,c.sendResponse)(Z,X,n,r),null;{let e=await n.blob(),t=(0,E.toNodeOutgoingHttpHeaders)(n.headers);a&&(t[K.NEXT_CACHE_TAGS_HEADER]=a),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let i=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=K.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,o=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=K.INFINITE_CACHE?!1!==i&&i>0?w.expireTime:void 0:J.renderOpts.collectedExpire;return{value:{kind:h.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:i,expire:o}}}}catch(t){throw(null==i?void 0:i.isStale)&&await I.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,S),t}},$=async(n,a)=>{try{var s,A;let n=await I.handleResponse({req:e,nextConfig:w,cacheKey:k,routeKind:i.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:x,responseGenerator:G,waitUntil:o.waitUntil,isMinimalMode:V});if(!q)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==h.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(A=n.value)?void 0:A.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",P?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let r=(0,E.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&q||r.delete(K.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||r.get("Cache-Control")||r.set("Cache-Control",(0,p.getCacheControlHeader)(n.cacheControl)),await (0,c.sendResponse)(Z,X,new Response(n.value.body,{headers:r,status:n.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await I.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,S),q)throw t;await (0,c.sendResponse)(Z,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:r.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let i=H.getRootSpanAttributes();if(!i)return;if(i.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${i.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let o=i.get("next.route")||M,s=`${B} ${o}`;n.setAttributes({"next.route":o,"http.route":o,"next.span_name":s}),n.updateName(s),a&&a!==n&&(a.setAttribute("http.route",o),a.updateName(s))})()}};if(j&&F)await $(F,void 0);else{let t=H.getActiveScopeSpan();await H.withPropagatedContext(e.headers,()=>H.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${O}`,kind:r.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},e=>$(e,t)),void 0,!j)}}e.s(["handler",0,f,"patchFetch",0,function(){return(0,o.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:C})},"routeModule",0,I,"serverHooks",0,m,"workAsyncStorage",0,O,"workUnitAsyncStorage",0,C])}];
2
2
 
3
3
  //# sourceMappingURL=_13ffmxv._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[11052,e=>e.a(async(t,a)=>{try{var r=e.i(58821),i=e.i(98043),n=e.i(79832),s=e.i(13618),o=e.i(76759),l=e.i(50377),u=e.i(98003),d=e.i(76025),c=e.i(2633);e.i(92366);var p=e.i(41070),h=t([n]);[n]=h.then?(await h)():h;let R=(0,l.createLogger)("api:error-items:list");async function g(e){let t=await (0,s.getServerSession)(n.authOptions),{searchParams:a}=new URL(e.url),l=a.get("subjectId"),h=a.get("query"),g=a.get("mastery"),f=a.get("timeRange"),w=a.get("tag"),v=Math.max(1,parseInt(a.get("page")||"1",10)),E=Math.min(c.MAX_PAGE_SIZE,Math.max(c.MIN_PAGE_SIZE,parseInt(a.get("pageSize")||String(c.DEFAULT_PAGE_SIZE),10)));try{let e;if(t?.user?.email&&(e=await i.prisma.user.findUnique({where:{email:t.user.email}})),!e)return(0,o.unauthorized)("Authentication required");let n={userId:e.id};l&&(n.subjectId=l);let s=[];if(h&&s.push({OR:[{questionText:{contains:h}},{analysis:{contains:h}},{wrongAnswerText:{contains:h}},{mistakeAnalysis:{contains:h}},{knowledgePoints:{contains:h}},...(0,p.isShortId)(h.trim())?[{shortId:h.trim()}]:[]]}),null!==g&&(n.masteryLevel="1"===g?{gt:0}:0),f&&"all"!==f){let e=new Date,t=(0,u.getAppTimeZone)(),a=e;"week"===f?a=(0,d.shiftCalendarDate)(e,t,-7):"month"===f&&(a=(0,d.shiftCalendarDate)(e,t,0,-1)),n.createdAt={gte:a}}let c=a.get("chapter");if(c){let t=await m(c,e.id);t.length>0?n.tags={some:{id:{in:t}}}:n.id="__IMPOSSIBLE_ID__"}w&&!c?n.knowledgePoints={contains:w}:w&&c&&(n.tags={some:{name:w}});let R=a.get("gradeSemester");if(R){let e=function(e){let t=[e],a="",r="";if(e.includes("七年级")||e.includes("初一"))r="七年级";else if(e.includes("八年级")||e.includes("初二"))r="八年级";else if(e.includes("九年级")||e.includes("初三"))r="九年级";else if(e.includes("高一"))r="高一";else if(e.includes("高二"))r="高二";else if(e.includes("高三"))r="高三";else{let a=e.match(/^(.+?)[上下]/);if(!a)return{gradeSemester:{contains:e}};t=[a[1]]}r&&(t=({七年级:["七年级","初一","7年级","七"],八年级:["八年级","初二","8年级","八"],九年级:["九年级","初三","9年级","九"],高一:["高一","10年级"],高二:["高二","11年级"],高三:["高三","12年级"]})[r]),e.includes("上")?a="上":e.includes("下")&&(a="下");let i=[];return(t.forEach(e=>{if(a){i.push({gradeSemester:{contains:`${e}${a}`}}),i.push({gradeSemester:{contains:`${e},${a}`}}),i.push({gradeSemester:{contains:`${e},${a}`}}),i.push({gradeSemester:{contains:`${e} ${a}`}});let t="上"===a?"上期":"下期";i.push({gradeSemester:{contains:`${e},${t}`}})}else i.push({gradeSemester:{contains:e}})}),0===i.length)?{gradeSemester:{contains:e}}:{OR:i}}(R);Object.assign(n,e)}let A=a.get("paperLevel");A&&"all"!==A&&(n.paperLevel=A),s.length>0&&(n.AND=s);let S=await i.prisma.errorItem.count({where:n}),C=await i.prisma.errorItem.findMany({where:n,orderBy:{createdAt:"desc"},include:{subject:!0,tags:!0},skip:(v-1)*E,take:E}),y=Math.ceil(S/E);return r.NextResponse.json({items:C,total:S,page:v,pageSize:E,totalPages:y})}catch(e){return R.error({error:e},"Error fetching items"),(0,o.internalError)("Failed to fetch error items")}}async function m(e,t){let a=await i.prisma.knowledgeTag.findFirst({where:{name:e,OR:[{isSystem:!0},{userId:t}]},select:{id:!0}});if(!a)return[];let r=[a.id],n=[a.id];for(;n.length>0;){let e=n.shift();for(let t of(await i.prisma.knowledgeTag.findMany({where:{parentId:e},select:{id:!0}})))r.push(t.id),n.push(t.id)}return r}e.s(["GET",0,g]),a()}catch(e){a(e)}},!1),21178,e=>{"use strict";var t=e.i(47909),a=e.i(74017),r=e.i(96250),i=e.i(59756),n=e.i(61916),s=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),g=e.i(74838),m=e.i(10372),R=e.i(93695),f=e.i(9580);e.i(52474);var w=e.i(220);let v=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/error-items/list/route",pathname:"/api/error-items/list",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/error-items/list/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(11052),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:A,serverHooks:S}=v;async function C(e,t,r){r.requestMeta&&(0,i.setRequestMeta)(e,r.requestMeta),v.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/error-items/list/route";E=E.replace(/\/index$/,"")||"/";let A=await v.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!A)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:S,deploymentId:C,params:y,nextConfig:x,parsedUrl:I,isDraftMode:_,prerenderManifest:T,routerServerContext:P,isOnDemandRevalidate:O,revalidateOnlyGenerated:b,resolvedPathname:N,clientReferenceManifest:M,serverActionsManifest:q}=A,k=(0,o.normalizeAppPath)(E),D=!!T.routes[N]&&(v.isDev||(0,f.isRouteCacheOwner)(N,v.cacheOwner,T.routes[N])),H=!!(T.dynamicRoutes[k]||D),U=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,I,!1):t.end("This page could not be found"),null);if(H&&!_){let e=T.dynamicRoutes[k];if(e&&!1===e.fallback&&!D){if(x.adapterPath)return await U();throw new R.NoFallbackError}}let $=null;!H||v.isDev||_||($="/index"===($=N)?"/":$);let L=!0===v.isDev||!H,j=H&&!L;q&&M&&(0,s.setManifestsSingleton)({page:E,clientReferenceManifest:M,serverActionsManifest:q});let F=e.method||"GET",G=(0,n.getTracer)(),B=G.getActiveScopeSpan(),K=!!(null==P?void 0:P.isWrappedByNextServer),Z=!!(0,i.getRequestMeta)(e,"minimalMode"),X=(0,i.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,x,T,Z);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:y,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:L,incrementalCache:X,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,i)=>v.onRequestError(e,t,r,i,P)},sharedContext:{buildId:S,deploymentId:C}},V=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:a})=>{try{if(!Z&&O&&b&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await v.handle(J,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let n=z.renderOpts.pendingWaitUntil;n&&r.waitUntil&&(r.waitUntil(n),n=void 0);let s=z.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(V,W,i,n),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);s&&(t[m.NEXT_CACHE_TAGS_HEADER]=s),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,r=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==a&&a>0?x.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,P),t}},Y=async(i,s)=>{try{var o,l;let i=await v.handleResponse({req:e,nextConfig:x,cacheKey:$,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:b,responseGenerator:Q,waitUntil:r.waitUntil,isMinimalMode:Z});if(!H)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Z||t.setHeader("x-nextjs-cache",O?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);Z&&H||n.delete(m.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,g.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(V,W,new Response(i.value.body,{headers:n,status:i.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,P),H)throw t;await (0,p.sendResponse)(V,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:n.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let a=G.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||k,o=`${F} ${r}`;i.setAttributes({"next.route":r,"http.route":r,"next.span_name":o}),i.updateName(o),s&&s!==i&&(s.setAttribute("http.route",r),s.updateName(o))})()}};if(K&&B)await Y(B,void 0);else{let t=G.getActiveScopeSpan();await G.withPropagatedContext(e.headers,()=>G.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Y(e,t)),void 0,!K)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:A})},"routeModule",0,v,"serverHooks",0,S,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,A])},2633,e=>{"use strict";e.s(["DEFAULT_PAGE_SIZE",0,18,"MAX_PAGE_SIZE",0,1e3,"MIN_PAGE_SIZE",0,1])}];
1
+ module.exports=[711052,e=>e.a(async(t,a)=>{try{var r=e.i(89171),i=e.i(698043),n=e.i(79832),s=e.i(757660),o=e.i(181912),l=e.i(50377),u=e.i(798003),d=e.i(376025),c=e.i(602633);e.i(92366);var p=e.i(141070),h=t([n]);[n]=h.then?(await h)():h;let R=(0,l.createLogger)("api:error-items:list");async function g(e){let t=await (0,s.getServerSession)(n.authOptions),{searchParams:a}=new URL(e.url),l=a.get("subjectId"),h=a.get("query"),g=a.get("mastery"),f=a.get("timeRange"),w=a.get("tag"),v=Math.max(1,parseInt(a.get("page")||"1",10)),E=Math.min(c.MAX_PAGE_SIZE,Math.max(c.MIN_PAGE_SIZE,parseInt(a.get("pageSize")||String(c.DEFAULT_PAGE_SIZE),10)));try{let e;if(t?.user?.email&&(e=await i.prisma.user.findUnique({where:{email:t.user.email}})),!e)return(0,o.unauthorized)("Authentication required");let n={userId:e.id};l&&(n.subjectId=l);let s=[];if(h&&s.push({OR:[{questionText:{contains:h}},{analysis:{contains:h}},{wrongAnswerText:{contains:h}},{mistakeAnalysis:{contains:h}},{knowledgePoints:{contains:h}},...(0,p.isShortId)(h.trim())?[{shortId:h.trim()}]:[]]}),null!==g&&(n.masteryLevel="1"===g?{gt:0}:0),f&&"all"!==f){let e=new Date,t=(0,u.getAppTimeZone)(),a=e;"week"===f?a=(0,d.shiftCalendarDate)(e,t,-7):"month"===f&&(a=(0,d.shiftCalendarDate)(e,t,0,-1)),n.createdAt={gte:a}}let c=a.get("chapter");if(c){let t=await m(c,e.id);t.length>0?n.tags={some:{id:{in:t}}}:n.id="__IMPOSSIBLE_ID__"}w&&!c?n.knowledgePoints={contains:w}:w&&c&&(n.tags={some:{name:w}});let R=a.get("gradeSemester");if(R){let e=function(e){let t=[e],a="",r="";if(e.includes("七年级")||e.includes("初一"))r="七年级";else if(e.includes("八年级")||e.includes("初二"))r="八年级";else if(e.includes("九年级")||e.includes("初三"))r="九年级";else if(e.includes("高一"))r="高一";else if(e.includes("高二"))r="高二";else if(e.includes("高三"))r="高三";else{let a=e.match(/^(.+?)[上下]/);if(!a)return{gradeSemester:{contains:e}};t=[a[1]]}r&&(t=({七年级:["七年级","初一","7年级","七"],八年级:["八年级","初二","8年级","八"],九年级:["九年级","初三","9年级","九"],高一:["高一","10年级"],高二:["高二","11年级"],高三:["高三","12年级"]})[r]),e.includes("上")?a="上":e.includes("下")&&(a="下");let i=[];return(t.forEach(e=>{if(a){i.push({gradeSemester:{contains:`${e}${a}`}}),i.push({gradeSemester:{contains:`${e},${a}`}}),i.push({gradeSemester:{contains:`${e},${a}`}}),i.push({gradeSemester:{contains:`${e} ${a}`}});let t="上"===a?"上期":"下期";i.push({gradeSemester:{contains:`${e},${t}`}})}else i.push({gradeSemester:{contains:e}})}),0===i.length)?{gradeSemester:{contains:e}}:{OR:i}}(R);Object.assign(n,e)}let A=a.get("paperLevel");A&&"all"!==A&&(n.paperLevel=A),s.length>0&&(n.AND=s);let S=await i.prisma.errorItem.count({where:n}),C=await i.prisma.errorItem.findMany({where:n,orderBy:{createdAt:"desc"},include:{subject:!0,tags:!0},skip:(v-1)*E,take:E}),y=Math.ceil(S/E);return r.NextResponse.json({items:C,total:S,page:v,pageSize:E,totalPages:y})}catch(e){return R.error({error:e},"Error fetching items"),(0,o.internalError)("Failed to fetch error items")}}async function m(e,t){let a=await i.prisma.knowledgeTag.findFirst({where:{name:e,OR:[{isSystem:!0},{userId:t}]},select:{id:!0}});if(!a)return[];let r=[a.id],n=[a.id];for(;n.length>0;){let e=n.shift();for(let t of(await i.prisma.knowledgeTag.findMany({where:{parentId:e},select:{id:!0}})))r.push(t.id),n.push(t.id)}return r}e.s(["GET",0,g]),a()}catch(e){a(e)}},!1),521178,e=>{"use strict";var t=e.i(747909),a=e.i(174017),r=e.i(996250),i=e.i(759756),n=e.i(561916),s=e.i(174677),o=e.i(869741),l=e.i(316795),u=e.i(487718),d=e.i(995169),c=e.i(47587),p=e.i(666012),h=e.i(570101),g=e.i(626937),m=e.i(10372),R=e.i(193695),f=e.i(509580);e.i(52474);var w=e.i(600220);let v=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/error-items/list/route",pathname:"/api/error-items/list",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/error-items/list/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(711052),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:A,serverHooks:S}=v;async function C(e,t,r){r.requestMeta&&(0,i.setRequestMeta)(e,r.requestMeta),v.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/error-items/list/route";E=E.replace(/\/index$/,"")||"/";let A=await v.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!A)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:S,deploymentId:C,params:y,nextConfig:x,parsedUrl:I,isDraftMode:_,prerenderManifest:T,routerServerContext:P,isOnDemandRevalidate:O,revalidateOnlyGenerated:b,resolvedPathname:N,clientReferenceManifest:M,serverActionsManifest:q}=A,k=(0,o.normalizeAppPath)(E),D=!!T.routes[N]&&(v.isDev||(0,f.isRouteCacheOwner)(N,v.cacheOwner,T.routes[N])),H=!!(T.dynamicRoutes[k]||D),U=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,I,!1):t.end("This page could not be found"),null);if(H&&!_){let e=T.dynamicRoutes[k];if(e&&!1===e.fallback&&!D){if(x.adapterPath)return await U();throw new R.NoFallbackError}}let $=null;!H||v.isDev||_||($="/index"===($=N)?"/":$);let L=!0===v.isDev||!H,j=H&&!L;q&&M&&(0,s.setManifestsSingleton)({page:E,clientReferenceManifest:M,serverActionsManifest:q});let F=e.method||"GET",G=(0,n.getTracer)(),B=G.getActiveScopeSpan(),K=!!(null==P?void 0:P.isWrappedByNextServer),Z=!!(0,i.getRequestMeta)(e,"minimalMode"),X=(0,i.getRequestMeta)(e,"incrementalCache")||await v.getIncrementalCache(e,x,T,Z);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:y,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:L,incrementalCache:X,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,i)=>v.onRequestError(e,t,r,i,P)},sharedContext:{buildId:S,deploymentId:C}},V=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:a})=>{try{if(!Z&&O&&b&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await v.handle(J,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let n=z.renderOpts.pendingWaitUntil;n&&r.waitUntil&&(r.waitUntil(n),n=void 0);let s=z.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(V,W,i,n),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);s&&(t[m.NEXT_CACHE_TAGS_HEADER]=s),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,r=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==a&&a>0?x.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await v.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,P),t}},Y=async(i,s)=>{try{var o,l;let i=await v.handleResponse({req:e,nextConfig:x,cacheKey:$,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:b,responseGenerator:Q,waitUntil:r.waitUntil,isMinimalMode:Z});if(!H)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});Z||t.setHeader("x-nextjs-cache",O?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);Z&&H||n.delete(m.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,g.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(V,W,new Response(i.value.body,{headers:n,status:i.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await v.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:O})},!1,P),H)throw t;await (0,p.sendResponse)(V,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:n.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let a=G.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||k,o=`${F} ${r}`;i.setAttributes({"next.route":r,"http.route":r,"next.span_name":o}),i.updateName(o),s&&s!==i&&(s.setAttribute("http.route",r),s.updateName(o))})()}};if(K&&B)await Y(B,void 0);else{let t=G.getActiveScopeSpan();await G.withPropagatedContext(e.headers,()=>G.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Y(e,t)),void 0,!K)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:A})},"routeModule",0,v,"serverHooks",0,S,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,A])},602633,e=>{"use strict";e.s(["DEFAULT_PAGE_SIZE",0,18,"MAX_PAGE_SIZE",0,1e3,"MIN_PAGE_SIZE",0,1])}];
2
2
 
3
3
  //# sourceMappingURL=_14tz_k9._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[15965,e=>e.a(async(t,r)=>{try{var a=e.i(58821),i=e.i(69719),s=e.i(63856),n=e.i(76759),o=e.i(50377),u=e.i(74866),l=e.i(4752),d=t([s]);[s]=d.then?(await d)():d;let m=(0,o.createLogger)("api:exams:results"),p=i.z.object({takenAt:i.z.string().datetime({offset:!0}).optional(),results:i.z.array(i.z.object({questionId:i.z.string().min(1),result:i.z.enum(l.PRACTICE_RESULTS).nullable()})).min(1).max(100)});async function c(e,{params:t}){let{id:r}=await t;try{let t=await (0,s.getCurrentUser)();if(!t)return(0,n.unauthorized)("Authentication required");let i=p.safeParse(await e.json());if(!i.success)return(0,n.validationError)("Invalid exam results",i.error.issues);let o=i.data.takenAt?new Date(i.data.takenAt):new Date,d=await (0,u.recordExamResults)(r,t.id,o,i.data.results);return(0,l.scheduleMasteryEvaluation)(d),a.NextResponse.json({success:!0,affectedCount:d.length})}catch(e){if(e instanceof Error&&"EXAM_NOT_FOUND"===e.message)return(0,n.notFound)("Exam paper not found");return m.error({error:e},"Error recording exam results"),(0,n.internalError)("Failed to record exam results")}}e.s(["POST",0,c]),r()}catch(e){r(e)}},!1),59744,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),i=e.i(59756),s=e.i(61916),n=e.i(74677),o=e.i(69741),u=e.i(16795),l=e.i(87718),d=e.i(95169),c=e.i(47587),m=e.i(66012),p=e.i(70101),f=e.i(74838),h=e.i(10372),g=e.i(93695),w=e.i(9580);e.i(52474);var y=e.i(220);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/exams/[id]/results/route",pathname:"/api/exams/[id]/results",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/exams/[id]/results/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(15965),...{}}),{workAsyncStorage:x,workUnitAsyncStorage:R,serverHooks:v}=E;async function S(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/exams/[id]/results/route";x=x.replace(/\/index$/,"")||"/";let R=await E.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,deploymentId:S,params:I,nextConfig:T,parsedUrl:A,isDraftMode:_,prerenderManifest:C,routerServerContext:q,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,resolvedPathname:M,clientReferenceManifest:N,serverActionsManifest:O}=R,U=(0,o.normalizeAppPath)(x),k=!!C.routes[M]&&(E.isDev||(0,w.isRouteCacheOwner)(M,E.cacheOwner,C.routes[M])),D=!!(C.dynamicRoutes[U]||k),L=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,A,!1):t.end("This page could not be found"),null);if(D&&!_){let e=C.dynamicRoutes[U];if(e&&!1===e.fallback&&!k){if(T.adapterPath)return await L();throw new g.NoFallbackError}}let j=null;!D||E.isDev||_||(j="/index"===(j=M)?"/":j);let H=!0===E.isDev||!D,Q=D&&!H;O&&N&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:N,serverActionsManifest:O});let F=e.method||"GET",X=(0,s.getTracer)(),$=X.getActiveScopeSpan(),z=!!(null==q?void 0:q.isWrappedByNextServer),B=!!(0,i.getRequestMeta)(e,"minimalMode"),K=(0,i.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,T,C,B);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let G={params:I,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:H,incrementalCache:K,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>E.onRequestError(e,t,a,i,q)},sharedContext:{buildId:v,deploymentId:S}},V=new u.NodeNextRequest(e),W=new u.NodeNextResponse(t),J=l.NextRequestAdapter.fromNodeNextRequest(V,(0,l.signalFromNodeResponse)(t)),Y=async({previousCacheEntry:r})=>{try{if(!B&&P&&b&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await E.handle(J,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let s=G.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let n=G.renderOpts.collectedTags;if(!D)return await (0,m.sendResponse)(V,W,i,s),null;{let e=await i.blob(),t=(0,p.toNodeOutgoingHttpHeaders)(i.headers);n&&(t[h.NEXT_CACHE_TAGS_HEADER]=n),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=h.INFINITE_CACHE?!1!==r&&r>0?T.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,q),t}},Z=async(i,n)=>{try{var o,u;let i=await E.handleResponse({req:e,nextConfig:T,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,responseGenerator:Y,waitUntil:a.waitUntil,isMinimalMode:B});if(!D)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(u=i.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",P?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,p.fromNodeOutgoingHttpHeaders)(i.value.headers);B&&D||s.delete(h.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,m.sendResponse)(V,W,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,q),D)throw t;await (0,m.sendResponse)(V,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let r=X.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,o=`${F} ${a}`;i.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),i.updateName(o),n&&n!==i&&(n.setAttribute("http.route",a),n.updateName(o))})()}};if(z&&$)await Z($,void 0);else{let t=X.getActiveScopeSpan();await X.withPropagatedContext(e.headers,()=>X.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Z(e,t)),void 0,!z)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:R})},"routeModule",0,E,"serverHooks",0,v,"workAsyncStorage",0,x,"workUnitAsyncStorage",0,R])},63856,e=>e.a(async(t,r)=>{try{var a=e.i(13618),i=e.i(79832),s=e.i(98043),n=t([i]);async function o(){let e=await (0,a.getServerSession)(i.authOptions);return e?.user?.email?s.prisma.user.findUnique({where:{email:e.user.email}}):null}[i]=n.then?(await n)():n,e.s(["getCurrentUser",0,o]),r()}catch(e){r(e)}},!1),74866,e=>{"use strict";var t=e.i(98043),r=e.i(43911),a=e.i(50377),i=e.i(26828),s=e.i(68426);let n=(0,a.createLogger)("exam"),o="least_practiced";function u(e,t,r=Math.random){let a=[...e];for(let e=a.length-1;e>0;e--){let t=Math.floor(r()*(e+1));[a[e],a[t]]=[a[t],a[e]]}return a.slice(0,t)}async function l(e,r){let a,i=(await t.prisma.errorItem.findMany({where:(a={userId:e,subjectId:{in:r.subjectIds},shortId:{not:null}},"unmastered"===r.scope?a.masteryLevel=0:"mastered"===r.scope&&(a.masteryLevel={gt:0}),r.tagNames&&r.tagNames.length>0&&(a.tags={some:{name:{in:r.tagNames}}}),a),select:{id:!0,shortId:!0,_count:{select:{practiceRecords:!0}}}})).map(({_count:e,...t})=>({...t,practiceCount:e.practiceRecords}));return(r.pickRule??o)==="random"?u(i,r.count):function(e,t,r=Math.random){return u(e,e.length,r).sort((e,t)=>e.practiceCount-t.practiceCount).slice(0,t)}(i,r.count)}function d(e){if(e.some(e=>"pending"===e))return"generating";let t=e.filter(e=>"ready"===e).length;return t===e.length?"ready":0===t?"failed":"partial"}function c(e){if(e.tags.length>0)return e.tags.map(e=>e.name);try{let t=JSON.parse(e.knowledgePoints||"[]");return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}async function m(e,a,i){let s=await t.prisma.examQuestion.findUnique({where:{id:e},select:{errorItem:{select:{questionText:!0,knowledgePoints:!0,gradeSemester:!0,figureSvg:!0,tags:{select:{name:!0}}}}}});if(!s?.errorItem)return void await t.prisma.examQuestion.update({where:{id:e},data:{status:"failed",error:"SOURCE_DELETED"}});try{let n=await (0,r.getAIService)().generateSimilarQuestion(s.errorItem.questionText||"",c(s.errorItem),i,a,s.errorItem.gradeSemester,s.errorItem.figureSvg);await t.prisma.examQuestion.update({where:{id:e},data:{status:"ready",questionText:n.questionText,answerText:n.answerText,analysis:n.analysis,figureSvg:n.figureSvg??null,error:null}})}catch(a){let r=a instanceof Error?a.message:String(a);n.warn({questionId:e,error:r},"Exam question generation failed"),await t.prisma.examQuestion.update({where:{id:e},data:{status:"failed",error:r.slice(0,200)}})}}let p=new Set;async function f(e,r="zh"){if(p.has(e))return;p.add(e);let a=null;try{let s=await t.prisma.examPaper.findUnique({where:{id:e},select:{userId:!0,title:!0,difficulty:!0,questions:{where:{status:{not:"ready"}},select:{id:!0}}}});if(!s)return;let n=s.questions.map(e=>e.id),o=n.length,u=0;o>0&&(a=(0,i.startBackgroundTask)({userId:s.userId,kind:"exam",subject:s.title,link:`/exams/${e}`,total:o})),n.length>0&&(await t.prisma.examQuestion.updateMany({where:{id:{in:n}},data:{status:"pending",error:null}}),await t.prisma.examPaper.update({where:{id:e},data:{status:"generating"}}));let l=async()=>{for(;n.length>0;)await m(n.shift(),s.difficulty,r),a?.setProgress(++u,o)};await Promise.all(Array.from({length:Math.min(3,n.length)},l));let c=await t.prisma.examQuestion.findMany({where:{paperId:e},select:{status:!0}}),p=d(c.map(e=>e.status));await t.prisma.examPaper.update({where:{id:e},data:{status:p}}),a?.setProgress(u,o,c.filter(e=>"failed"===e.status).length),"failed"===p?a?.fail("ALL_FAILED"):a?.succeed()}catch(t){n.error({paperId:e,error:t},"Exam paper generation failed"),a?.fail(t)}finally{p.delete(e)}}let h={status:!0,questionText:!0,answerText:!0,analysis:!0,figureSvg:!0,error:!0};async function g(e,a,o,u,l="zh"){let d=await t.prisma.examQuestion.findUnique({where:{id:a},select:{paperId:!0,status:!0,questionText:!0,paper:{select:{userId:!0,title:!0,difficulty:!0}},errorItem:{select:{questionText:!0,knowledgePoints:!0,gradeSemester:!0,figureSvg:!0,tags:{select:{name:!0}},subject:{select:{name:!0,stage:!0,subjectKey:!0}}}},_count:{select:{practiceRecords:!0}}}});if(!d||d.paperId!==e||d.paper.userId!==o)throw Error("EXAM_QUESTION_NOT_FOUND");if("pending"===d.status)throw Error("QUESTION_GENERATING");let m={userId:o,subject:d.paper.title,link:`/exams/${e}`};if("question"===u){if(d._count.practiceRecords>0)throw Error("HAS_RESULTS");let s=d.errorItem;if(!s)throw Error("SOURCE_DELETED");let n=await (0,i.trackBackgroundTask)({...m,kind:"exam"},()=>(0,r.getAIService)().generateSimilarQuestion(s.questionText||"",c(s),l,d.paper.difficulty,s.gradeSemester,s.figureSvg)),{count:o}=await t.prisma.examQuestion.updateMany({where:{id:a,practiceRecords:{none:{}}},data:{status:"ready",questionText:n.questionText,answerText:n.answerText,analysis:n.analysis,figureSvg:n.figureSvg??null,error:null}});if(0===o)throw Error("HAS_RESULTS");await w(e)}else{let e=d.questionText;if("ready"!==d.status||!e?.trim())throw Error("NO_QUESTION_TEXT");let n=d.errorItem?.subject?(0,s.resolveNotebookScope)(d.errorItem.subject):null,o=n?.subject?s.SUBJECT_DISPLAY_NAMES[n.subject]:null,u=await (0,i.trackBackgroundTask)({...m,kind:"reanswer"},()=>(0,r.getAIService)().reanswerQuestion(e,l,o,void 0,d.errorItem?.gradeSemester));if(!u.answerText.trim()&&!u.analysis.trim())throw Error("EMPTY_ANSWER");let c={answerText:u.answerText,analysis:u.analysis};await t.prisma.$transaction([t.prisma.examQuestion.update({where:{id:a},data:c}),t.prisma.practiceRecord.updateMany({where:{examQuestionId:a},data:c})])}let p=await t.prisma.examQuestion.findUnique({where:{id:a},select:h});return n.info({paperId:e,questionId:a,mode:u},"Exam question regenerated"),p}async function w(e){let r=await t.prisma.examQuestion.findMany({where:{paperId:e},select:{status:!0}});await t.prisma.examPaper.update({where:{id:e},data:{status:d(r.map(e=>e.status))}})}async function y(e,r,a,i){let s=await t.prisma.examPaper.findUnique({where:{id:e},select:{userId:!0,difficulty:!0,questions:{select:{id:!0,errorItemId:!0,questionText:!0,answerText:!0,analysis:!0,figureSvg:!0,errorItem:{select:{subject:{select:{name:!0}}}}}}}});if(!s||s.userId!==r)throw Error("EXAM_NOT_FOUND");let n=new Map(s.questions.map(e=>[e.id,e])),o=new Set;return await t.prisma.$transaction(async t=>{for(let{questionId:e,result:u}of i){let i=n.get(e);i?.errorItemId&&null!==u&&(await t.practiceRecord.create({data:{userId:r,errorItemId:i.errorItemId,examQuestionId:i.id,source:"exam",result:u,isCorrect:"correct"===u,createdAt:a,difficulty:s.difficulty,subject:i.errorItem?.subject?.name??null,questionText:i.questionText,answerText:i.answerText,analysis:i.analysis,figureSvg:i.figureSvg}}),o.add(i.errorItemId))}o.size>0&&await t.examPaper.update({where:{id:e},data:{resultsRecordedAt:new Date}})}),[...o]}e.s(["DEFAULT_EXAM_PICK_RULE",0,o,"EXAM_DIFFICULTIES",0,["easy","medium","hard","harder"],"EXAM_PICK_RULES",0,["least_practiced","random"],"EXAM_REGENERATE_MODES",0,["question","answer"],"EXAM_SCOPES",0,["unmastered","mastered","all"],"MAX_EXAM_QUESTIONS",0,50,"generateExamPaper",0,f,"isPaperGenerating",0,function(e){return p.has(e)},"recordExamResults",0,y,"regenerateExamQuestion",0,g,"selectSourceItems",0,l])},4752,e=>{"use strict";var t=e.i(98043),r=e.i(43911);let a=(0,e.i(50377).createLogger)("mastery"),i=["correct","wrong","not_attempted"];function s(e){return"string"==typeof e&&i.includes(e)}let n={easy:.85,medium:.95,hard:1,harder:1},o={wrong:.1,not_attempted:0};async function u(e){let i=await t.prisma.errorItem.findUnique({where:{id:e},select:{id:!0,questionText:!0,mistakeStatus:!0,tags:{select:{name:!0}},practiceRecords:{where:{result:{not:null}},orderBy:[{createdAt:"asc"},{id:"asc"}],select:{result:!0,difficulty:!0,source:!0,createdAt:!0}}}});if(!i)return;let u=i.practiceRecords.filter(e=>s(e.result)).map(e=>({date:e.createdAt.toISOString(),difficulty:e.difficulty,result:e.result,source:e.source})),l=function(e){if(0===e.length)return null;let t=.15,r=.5;return e.forEach((a,i)=>{let s=Math.pow(.7,e.length-1-i),u="correct"===a.result?n[a.difficulty||"medium"]??n.medium:o[a.result];t+=s*u,r+=s}),Math.round(t/r*100)/100}(u);if(null===l)return void await t.prisma.errorItem.update({where:{id:i.id},data:{masteryProbability:null,masteryReason:null,masterySource:null,masteryEvaluatedAt:null}});let d=l,c="",m="rule";try{let e=await (0,r.getAIService)().evaluateMastery({questionText:i.questionText||"",knowledgePoints:i.tags.map(e=>e.name),mistakeStatus:i.mistakeStatus,history:u,ruleProbability:l});d=e.probability,c=e.reason,m="ai"}catch(r){a.warn({errorItemId:e,error:r instanceof Error?r.message:String(r)},"AI mastery evaluation failed, using rule estimate");let t=u.filter(e=>"correct"===e.result).length;c=`共练习 ${u.length} 次,做对 ${t} 次(规则估算)`}await t.prisma.errorItem.update({where:{id:i.id},data:{masteryProbability:d,masteryReason:c,masterySource:m,masteryEvaluatedAt:new Date,masteryLevel:+(d>=.8)}}),a.info({errorItemId:e,probability:d,source:m},"Mastery evaluated")}let l=new Set,d=!1;async function c(){if(!d){d=!0;try{for(;l.size>0;){let[e]=l;l.delete(e);try{await u(e)}catch(t){a.error({errorItemId:e,error:t},"Mastery evaluation failed")}}}finally{d=!1}}}e.s(["PRACTICE_RESULTS",0,i,"isPracticeResult",0,s,"scheduleMasteryEvaluation",0,function(e){e.forEach(e=>l.add(e)),c()}])}];
1
+ module.exports=[843285,e=>e.a(async(t,r)=>{try{var a=e.i(89171),i=e.i(469719),s=e.i(63856),n=e.i(181912),o=e.i(50377),u=e.i(874866),l=e.i(404752),d=t([s]);[s]=d.then?(await d)():d;let m=(0,o.createLogger)("api:exams:results"),p=i.z.object({takenAt:i.z.string().datetime({offset:!0}).optional(),results:i.z.array(i.z.object({questionId:i.z.string().min(1),result:i.z.enum(l.PRACTICE_RESULTS).nullable()})).min(1).max(100)});async function c(e,{params:t}){let{id:r}=await t;try{let t=await (0,s.getCurrentUser)();if(!t)return(0,n.unauthorized)("Authentication required");let i=p.safeParse(await e.json());if(!i.success)return(0,n.validationError)("Invalid exam results",i.error.issues);let o=i.data.takenAt?new Date(i.data.takenAt):new Date,d=await (0,u.recordExamResults)(r,t.id,o,i.data.results);return(0,l.scheduleMasteryEvaluation)(d),a.NextResponse.json({success:!0,affectedCount:d.length})}catch(e){if(e instanceof Error&&"EXAM_NOT_FOUND"===e.message)return(0,n.notFound)("Exam paper not found");return m.error({error:e},"Error recording exam results"),(0,n.internalError)("Failed to record exam results")}}e.s(["POST",0,c]),r()}catch(e){r(e)}},!1),659744,e=>{"use strict";var t=e.i(747909),r=e.i(174017),a=e.i(996250),i=e.i(759756),s=e.i(561916),n=e.i(174677),o=e.i(869741),u=e.i(316795),l=e.i(487718),d=e.i(995169),c=e.i(47587),m=e.i(666012),p=e.i(570101),f=e.i(626937),h=e.i(10372),g=e.i(193695),w=e.i(509580);e.i(52474);var y=e.i(600220);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/exams/[id]/results/route",pathname:"/api/exams/[id]/results",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/exams/[id]/results/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(843285),...{}}),{workAsyncStorage:x,workUnitAsyncStorage:R,serverHooks:v}=E;async function S(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),E.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let x="/api/exams/[id]/results/route";x=x.replace(/\/index$/,"")||"/";let R=await E.prepare(e,t,{srcPage:x,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:v,deploymentId:S,params:I,nextConfig:T,parsedUrl:A,isDraftMode:_,prerenderManifest:C,routerServerContext:q,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,resolvedPathname:M,clientReferenceManifest:N,serverActionsManifest:O}=R,U=(0,o.normalizeAppPath)(x),k=!!C.routes[M]&&(E.isDev||(0,w.isRouteCacheOwner)(M,E.cacheOwner,C.routes[M])),D=!!(C.dynamicRoutes[U]||k),L=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,A,!1):t.end("This page could not be found"),null);if(D&&!_){let e=C.dynamicRoutes[U];if(e&&!1===e.fallback&&!k){if(T.adapterPath)return await L();throw new g.NoFallbackError}}let j=null;!D||E.isDev||_||(j="/index"===(j=M)?"/":j);let H=!0===E.isDev||!D,Q=D&&!H;O&&N&&(0,n.setManifestsSingleton)({page:x,clientReferenceManifest:N,serverActionsManifest:O});let F=e.method||"GET",X=(0,s.getTracer)(),$=X.getActiveScopeSpan(),z=!!(null==q?void 0:q.isWrappedByNextServer),B=!!(0,i.getRequestMeta)(e,"minimalMode"),K=(0,i.getRequestMeta)(e,"incrementalCache")||await E.getIncrementalCache(e,T,C,B);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let G={params:I,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:_,supportsDynamicResponse:H,incrementalCache:K,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>E.onRequestError(e,t,a,i,q)},sharedContext:{buildId:v,deploymentId:S}},V=new u.NodeNextRequest(e),W=new u.NodeNextResponse(t),J=l.NextRequestAdapter.fromNodeNextRequest(V,(0,l.signalFromNodeResponse)(t)),Y=async({previousCacheEntry:r})=>{try{if(!B&&P&&b&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await E.handle(J,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let s=G.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let n=G.renderOpts.collectedTags;if(!D)return await (0,m.sendResponse)(V,W,i,s),null;{let e=await i.blob(),t=(0,p.toNodeOutgoingHttpHeaders)(i.headers);n&&(t[h.NEXT_CACHE_TAGS_HEADER]=n),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=h.INFINITE_CACHE?!1!==r&&r>0?T.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:x,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,q),t}},Z=async(i,n)=>{try{var o,u;let i=await E.handleResponse({req:e,nextConfig:T,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:b,responseGenerator:Y,waitUntil:a.waitUntil,isMinimalMode:B});if(!D)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(u=i.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",P?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),_&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,p.fromNodeOutgoingHttpHeaders)(i.value.headers);B&&D||s.delete(h.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,m.sendResponse)(V,W,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:Q,isOnDemandRevalidate:P})},!1,q),D)throw t;await (0,m.sendResponse)(V,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let r=X.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,o=`${F} ${a}`;i.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),i.updateName(o),n&&n!==i&&(n.setAttribute("http.route",a),n.updateName(o))})()}};if(z&&$)await Z($,void 0);else{let t=X.getActiveScopeSpan();await X.withPropagatedContext(e.headers,()=>X.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${x}`,kind:s.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Z(e,t)),void 0,!z)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:R})},"routeModule",0,E,"serverHooks",0,v,"workAsyncStorage",0,x,"workUnitAsyncStorage",0,R])},63856,e=>e.a(async(t,r)=>{try{var a=e.i(757660),i=e.i(79832),s=e.i(698043),n=t([i]);async function o(){let e=await (0,a.getServerSession)(i.authOptions);return e?.user?.email?s.prisma.user.findUnique({where:{email:e.user.email}}):null}[i]=n.then?(await n)():n,e.s(["getCurrentUser",0,o]),r()}catch(e){r(e)}},!1),874866,e=>{"use strict";var t=e.i(698043),r=e.i(843911),a=e.i(50377),i=e.i(926828),s=e.i(668426);let n=(0,a.createLogger)("exam"),o="least_practiced";function u(e,t,r=Math.random){let a=[...e];for(let e=a.length-1;e>0;e--){let t=Math.floor(r()*(e+1));[a[e],a[t]]=[a[t],a[e]]}return a.slice(0,t)}async function l(e,r){let a,i=(await t.prisma.errorItem.findMany({where:(a={userId:e,subjectId:{in:r.subjectIds},shortId:{not:null}},"unmastered"===r.scope?a.masteryLevel=0:"mastered"===r.scope&&(a.masteryLevel={gt:0}),r.tagNames&&r.tagNames.length>0&&(a.tags={some:{name:{in:r.tagNames}}}),a),select:{id:!0,shortId:!0,_count:{select:{practiceRecords:!0}}}})).map(({_count:e,...t})=>({...t,practiceCount:e.practiceRecords}));return(r.pickRule??o)==="random"?u(i,r.count):function(e,t,r=Math.random){return u(e,e.length,r).sort((e,t)=>e.practiceCount-t.practiceCount).slice(0,t)}(i,r.count)}function d(e){if(e.some(e=>"pending"===e))return"generating";let t=e.filter(e=>"ready"===e).length;return t===e.length?"ready":0===t?"failed":"partial"}function c(e){if(e.tags.length>0)return e.tags.map(e=>e.name);try{let t=JSON.parse(e.knowledgePoints||"[]");return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}}async function m(e,a,i){let s=await t.prisma.examQuestion.findUnique({where:{id:e},select:{errorItem:{select:{questionText:!0,knowledgePoints:!0,gradeSemester:!0,figureSvg:!0,tags:{select:{name:!0}}}}}});if(!s?.errorItem)return void await t.prisma.examQuestion.update({where:{id:e},data:{status:"failed",error:"SOURCE_DELETED"}});try{let n=await (0,r.getAIService)().generateSimilarQuestion(s.errorItem.questionText||"",c(s.errorItem),i,a,s.errorItem.gradeSemester,s.errorItem.figureSvg);await t.prisma.examQuestion.update({where:{id:e},data:{status:"ready",questionText:n.questionText,answerText:n.answerText,analysis:n.analysis,figureSvg:n.figureSvg??null,error:null}})}catch(a){let r=a instanceof Error?a.message:String(a);n.warn({questionId:e,error:r},"Exam question generation failed"),await t.prisma.examQuestion.update({where:{id:e},data:{status:"failed",error:r.slice(0,200)}})}}let p=new Set;async function f(e,r="zh"){if(p.has(e))return;p.add(e);let a=null;try{let s=await t.prisma.examPaper.findUnique({where:{id:e},select:{userId:!0,title:!0,difficulty:!0,questions:{where:{status:{not:"ready"}},select:{id:!0}}}});if(!s)return;let n=s.questions.map(e=>e.id),o=n.length,u=0;o>0&&(a=(0,i.startBackgroundTask)({userId:s.userId,kind:"exam",subject:s.title,link:`/exams/${e}`,total:o})),n.length>0&&(await t.prisma.examQuestion.updateMany({where:{id:{in:n}},data:{status:"pending",error:null}}),await t.prisma.examPaper.update({where:{id:e},data:{status:"generating"}}));let l=async()=>{for(;n.length>0;)await m(n.shift(),s.difficulty,r),a?.setProgress(++u,o)};await Promise.all(Array.from({length:Math.min(3,n.length)},l));let c=await t.prisma.examQuestion.findMany({where:{paperId:e},select:{status:!0}}),p=d(c.map(e=>e.status));await t.prisma.examPaper.update({where:{id:e},data:{status:p}}),a?.setProgress(u,o,c.filter(e=>"failed"===e.status).length),"failed"===p?a?.fail("ALL_FAILED"):a?.succeed()}catch(t){n.error({paperId:e,error:t},"Exam paper generation failed"),a?.fail(t)}finally{p.delete(e)}}let h={status:!0,questionText:!0,answerText:!0,analysis:!0,figureSvg:!0,error:!0};async function g(e,a,o,u,l="zh"){let d=await t.prisma.examQuestion.findUnique({where:{id:a},select:{paperId:!0,status:!0,questionText:!0,paper:{select:{userId:!0,title:!0,difficulty:!0}},errorItem:{select:{questionText:!0,knowledgePoints:!0,gradeSemester:!0,figureSvg:!0,tags:{select:{name:!0}},subject:{select:{name:!0,stage:!0,subjectKey:!0}}}},_count:{select:{practiceRecords:!0}}}});if(!d||d.paperId!==e||d.paper.userId!==o)throw Error("EXAM_QUESTION_NOT_FOUND");if("pending"===d.status)throw Error("QUESTION_GENERATING");let m={userId:o,subject:d.paper.title,link:`/exams/${e}`};if("question"===u){if(d._count.practiceRecords>0)throw Error("HAS_RESULTS");let s=d.errorItem;if(!s)throw Error("SOURCE_DELETED");let n=await (0,i.trackBackgroundTask)({...m,kind:"exam"},()=>(0,r.getAIService)().generateSimilarQuestion(s.questionText||"",c(s),l,d.paper.difficulty,s.gradeSemester,s.figureSvg)),{count:o}=await t.prisma.examQuestion.updateMany({where:{id:a,practiceRecords:{none:{}}},data:{status:"ready",questionText:n.questionText,answerText:n.answerText,analysis:n.analysis,figureSvg:n.figureSvg??null,error:null}});if(0===o)throw Error("HAS_RESULTS");await w(e)}else{let e=d.questionText;if("ready"!==d.status||!e?.trim())throw Error("NO_QUESTION_TEXT");let n=d.errorItem?.subject?(0,s.resolveNotebookScope)(d.errorItem.subject):null,o=n?.subject?s.SUBJECT_DISPLAY_NAMES[n.subject]:null,u=await (0,i.trackBackgroundTask)({...m,kind:"reanswer"},()=>(0,r.getAIService)().reanswerQuestion(e,l,o,void 0,d.errorItem?.gradeSemester));if(!u.answerText.trim()&&!u.analysis.trim())throw Error("EMPTY_ANSWER");let c={answerText:u.answerText,analysis:u.analysis};await t.prisma.$transaction([t.prisma.examQuestion.update({where:{id:a},data:c}),t.prisma.practiceRecord.updateMany({where:{examQuestionId:a},data:c})])}let p=await t.prisma.examQuestion.findUnique({where:{id:a},select:h});return n.info({paperId:e,questionId:a,mode:u},"Exam question regenerated"),p}async function w(e){let r=await t.prisma.examQuestion.findMany({where:{paperId:e},select:{status:!0}});await t.prisma.examPaper.update({where:{id:e},data:{status:d(r.map(e=>e.status))}})}async function y(e,r,a,i){let s=await t.prisma.examPaper.findUnique({where:{id:e},select:{userId:!0,difficulty:!0,questions:{select:{id:!0,errorItemId:!0,questionText:!0,answerText:!0,analysis:!0,figureSvg:!0,errorItem:{select:{subject:{select:{name:!0}}}}}}}});if(!s||s.userId!==r)throw Error("EXAM_NOT_FOUND");let n=new Map(s.questions.map(e=>[e.id,e])),o=new Set;return await t.prisma.$transaction(async t=>{for(let{questionId:e,result:u}of i){let i=n.get(e);i?.errorItemId&&null!==u&&(await t.practiceRecord.create({data:{userId:r,errorItemId:i.errorItemId,examQuestionId:i.id,source:"exam",result:u,isCorrect:"correct"===u,createdAt:a,difficulty:s.difficulty,subject:i.errorItem?.subject?.name??null,questionText:i.questionText,answerText:i.answerText,analysis:i.analysis,figureSvg:i.figureSvg}}),o.add(i.errorItemId))}o.size>0&&await t.examPaper.update({where:{id:e},data:{resultsRecordedAt:new Date}})}),[...o]}e.s(["DEFAULT_EXAM_PICK_RULE",0,o,"EXAM_DIFFICULTIES",0,["easy","medium","hard","harder"],"EXAM_PICK_RULES",0,["least_practiced","random"],"EXAM_REGENERATE_MODES",0,["question","answer"],"EXAM_SCOPES",0,["unmastered","mastered","all"],"MAX_EXAM_QUESTIONS",0,50,"generateExamPaper",0,f,"isPaperGenerating",0,function(e){return p.has(e)},"recordExamResults",0,y,"regenerateExamQuestion",0,g,"selectSourceItems",0,l])},404752,e=>{"use strict";var t=e.i(698043),r=e.i(843911);let a=(0,e.i(50377).createLogger)("mastery"),i=["correct","wrong","not_attempted"];function s(e){return"string"==typeof e&&i.includes(e)}let n={easy:.85,medium:.95,hard:1,harder:1},o={wrong:.1,not_attempted:0};async function u(e){let i=await t.prisma.errorItem.findUnique({where:{id:e},select:{id:!0,questionText:!0,mistakeStatus:!0,tags:{select:{name:!0}},practiceRecords:{where:{result:{not:null}},orderBy:[{createdAt:"asc"},{id:"asc"}],select:{result:!0,difficulty:!0,source:!0,createdAt:!0}}}});if(!i)return;let u=i.practiceRecords.filter(e=>s(e.result)).map(e=>({date:e.createdAt.toISOString(),difficulty:e.difficulty,result:e.result,source:e.source})),l=function(e){if(0===e.length)return null;let t=.15,r=.5;return e.forEach((a,i)=>{let s=Math.pow(.7,e.length-1-i),u="correct"===a.result?n[a.difficulty||"medium"]??n.medium:o[a.result];t+=s*u,r+=s}),Math.round(t/r*100)/100}(u);if(null===l)return void await t.prisma.errorItem.update({where:{id:i.id},data:{masteryProbability:null,masteryReason:null,masterySource:null,masteryEvaluatedAt:null}});let d=l,c="",m="rule";try{let e=await (0,r.getAIService)().evaluateMastery({questionText:i.questionText||"",knowledgePoints:i.tags.map(e=>e.name),mistakeStatus:i.mistakeStatus,history:u,ruleProbability:l});d=e.probability,c=e.reason,m="ai"}catch(r){a.warn({errorItemId:e,error:r instanceof Error?r.message:String(r)},"AI mastery evaluation failed, using rule estimate");let t=u.filter(e=>"correct"===e.result).length;c=`共练习 ${u.length} 次,做对 ${t} 次(规则估算)`}await t.prisma.errorItem.update({where:{id:i.id},data:{masteryProbability:d,masteryReason:c,masterySource:m,masteryEvaluatedAt:new Date,masteryLevel:+(d>=.8)}}),a.info({errorItemId:e,probability:d,source:m},"Mastery evaluated")}let l=new Set,d=!1;async function c(){if(!d){d=!0;try{for(;l.size>0;){let[e]=l;l.delete(e);try{await u(e)}catch(t){a.error({errorItemId:e,error:t},"Mastery evaluation failed")}}}finally{d=!1}}}e.s(["PRACTICE_RESULTS",0,i,"isPracticeResult",0,s,"scheduleMasteryEvaluation",0,function(e){e.forEach(e=>l.add(e)),c()}])}];
2
2
 
3
3
  //# sourceMappingURL=_167vv93._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[66455,e=>e.a(async(t,a)=>{try{var r=e.i(58821),n=e.i(13618),i=e.i(79832),o=e.i(58078),s=e.i(76759),l=e.i(90604),d=e.i(98876),u=e.i(50377),c=t([i]);[i]=c.then?(await c)():c;let v=(0,u.createLogger)("api:ai:models");async function p(e,t){let a=`${t}/v1beta/models?key=${e}`,r=await fetch(a,{headers:{"Content-Type":"application/json"}});if(!r.ok){let e=await r.text();throw v.error({status:r.status,errorText:e},"Gemini models API error"),Error(`Gemini API error: ${r.status}`)}return((await r.json()).models||[]).map(e=>{let t=e.name.replace(/^models\//,"");return{id:t,name:t,owned_by:"Google"}})}async function h(e,t){let a=`${t}/models`,r=await fetch(a,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok)throw v.error({statusText:r.statusText},"OpenAI models API error"),Error(`API error: ${r.status}`);return((await r.json()).data||[]).map(e=>({id:e.id,name:e.id,owned_by:e.owned_by}))}async function m(e,t){let a=await fetch(`${t.replace(/\/+$/,"")}/v1/models?limit=100`,{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"}});if(!a.ok)throw v.error({status:a.status},"Anthropic models API error"),Error(`API error: ${a.status}`);return((await a.json()).data||[]).map(e=>({id:e.id,name:e.display_name||e.id,owned_by:"Anthropic"}))}async function R(e){let t=await (0,n.getServerSession)(i.authOptions);if(!(0,o.requireAdmin)(t))return(0,s.forbidden)("Admin access required");try{let{provider:t,apiKey:a,baseUrl:n}=await e.json();if(!a)return r.NextResponse.json({error:"API key is required"},{status:400});let i=[];if("anthropic"===t)i=await m(a,n||l.DEFAULT_ANTHROPIC_BASE_URL);else if((0,d.isVendorProvider)(t))i=await h(a,n||d.VENDOR_PRESETS[t].baseUrl);else if("gemini"===t){let e=n||"https://generativelanguage.googleapis.com";i=await p(a,e)}else{let e=n||"https://api.openai.com/v1";i=await h(a,e)}return r.NextResponse.json({models:i})}catch(e){return v.error({error:e},"Error fetching models"),r.NextResponse.json({error:e.message||"Internal server error",models:[]},{status:200})}}e.s(["POST",0,R]),a()}catch(e){a(e)}},!1),50936,e=>{"use strict";var t=e.i(47909),a=e.i(74017),r=e.i(96250),n=e.i(59756),i=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),m=e.i(74838),R=e.i(10372),v=e.i(93695),w=e.i(9580);e.i(52474);var f=e.i(220);let g=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/ai/models/route",pathname:"/api/ai/models",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ai/models/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(66455),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:A,serverHooks:y}=g;async function C(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),g.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/ai/models/route";E=E.replace(/\/index$/,"")||"/";let A=await g.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!A)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:y,deploymentId:C,params:x,nextConfig:T,parsedUrl:P,isDraftMode:S,prerenderManifest:b,routerServerContext:_,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,resolvedPathname:I,clientReferenceManifest:q,serverActionsManifest:H}=A,k=(0,s.normalizeAppPath)(E),U=!!b.routes[I]&&(g.isDev||(0,w.isRouteCacheOwner)(I,g.cacheOwner,b.routes[I])),j=!!(b.dynamicRoutes[k]||U),D=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,P,!1):t.end("This page could not be found"),null);if(j&&!S){let e=b.dynamicRoutes[k];if(e&&!1===e.fallback&&!U){if(T.adapterPath)return await D();throw new v.NoFallbackError}}let M=null;!j||g.isDev||S||(M="/index"===(M=I)?"/":M);let $=!0===g.isDev||!j,L=j&&!$;H&&q&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:q,serverActionsManifest:H});let F=e.method||"GET",B=(0,i.getTracer)(),G=B.getActiveScopeSpan(),K=!!(null==_?void 0:_.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),X=(0,n.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,T,b,V);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:x,previewProps:b.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:$,incrementalCache:X,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>g.onRequestError(e,t,r,n,_)},sharedContext:{buildId:y,deploymentId:C}},W=new l.NodeNextRequest(e),Z=new l.NodeNextResponse(t),J=d.NextRequestAdapter.fromNodeNextRequest(W,(0,d.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:a})=>{try{if(!V&&N&&O&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await g.handle(J,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let i=z.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let o=z.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(W,Z,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,r=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==a&&a>0?T.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:N})},!1,_),t}},Y=async(n,o)=>{try{var s,l;let n=await g.handleResponse({req:e,nextConfig:T,cacheKey:M,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,responseGenerator:Q,waitUntil:r.waitUntil,isMinimalMode:V});if(!j)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&j||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(W,Z,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:N})},!1,_),j)throw t;await (0,p.sendResponse)(W,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let a=B.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||k,s=`${F} ${r}`;n.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",r),o.updateName(s))})()}};if(K&&G)await Y(G,void 0);else{let t=B.getActiveScopeSpan();await B.withPropagatedContext(e.headers,()=>B.trace(u.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:i.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Y(e,t)),void 0,!K)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:A})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,A])}];
1
+ module.exports=[766455,e=>e.a(async(t,a)=>{try{var r=e.i(89171),n=e.i(757660),i=e.i(79832),o=e.i(258078),s=e.i(181912),l=e.i(690604),d=e.i(298876),u=e.i(50377),c=t([i]);[i]=c.then?(await c)():c;let v=(0,u.createLogger)("api:ai:models");async function p(e,t){let a=`${t}/v1beta/models?key=${e}`,r=await fetch(a,{headers:{"Content-Type":"application/json"}});if(!r.ok){let e=await r.text();throw v.error({status:r.status,errorText:e},"Gemini models API error"),Error(`Gemini API error: ${r.status}`)}return((await r.json()).models||[]).map(e=>{let t=e.name.replace(/^models\//,"");return{id:t,name:t,owned_by:"Google"}})}async function h(e,t){let a=`${t}/models`,r=await fetch(a,{headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok)throw v.error({statusText:r.statusText},"OpenAI models API error"),Error(`API error: ${r.status}`);return((await r.json()).data||[]).map(e=>({id:e.id,name:e.id,owned_by:e.owned_by}))}async function m(e,t){let a=await fetch(`${t.replace(/\/+$/,"")}/v1/models?limit=100`,{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"}});if(!a.ok)throw v.error({status:a.status},"Anthropic models API error"),Error(`API error: ${a.status}`);return((await a.json()).data||[]).map(e=>({id:e.id,name:e.display_name||e.id,owned_by:"Anthropic"}))}async function R(e){let t=await (0,n.getServerSession)(i.authOptions);if(!(0,o.requireAdmin)(t))return(0,s.forbidden)("Admin access required");try{let{provider:t,apiKey:a,baseUrl:n}=await e.json();if(!a)return r.NextResponse.json({error:"API key is required"},{status:400});let i=[];if("anthropic"===t)i=await m(a,n||l.DEFAULT_ANTHROPIC_BASE_URL);else if((0,d.isVendorProvider)(t))i=await h(a,n||d.VENDOR_PRESETS[t].baseUrl);else if("gemini"===t){let e=n||"https://generativelanguage.googleapis.com";i=await p(a,e)}else{let e=n||"https://api.openai.com/v1";i=await h(a,e)}return r.NextResponse.json({models:i})}catch(e){return v.error({error:e},"Error fetching models"),r.NextResponse.json({error:e.message||"Internal server error",models:[]},{status:200})}}e.s(["POST",0,R]),a()}catch(e){a(e)}},!1),350936,e=>{"use strict";var t=e.i(747909),a=e.i(174017),r=e.i(996250),n=e.i(759756),i=e.i(561916),o=e.i(174677),s=e.i(869741),l=e.i(316795),d=e.i(487718),u=e.i(995169),c=e.i(47587),p=e.i(666012),h=e.i(570101),m=e.i(626937),R=e.i(10372),v=e.i(193695),w=e.i(509580);e.i(52474);var f=e.i(600220);let g=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/ai/models/route",pathname:"/api/ai/models",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/ai/models/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(766455),...{}}),{workAsyncStorage:E,workUnitAsyncStorage:A,serverHooks:y}=g;async function C(e,t,r){r.requestMeta&&(0,n.setRequestMeta)(e,r.requestMeta),g.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let E="/api/ai/models/route";E=E.replace(/\/index$/,"")||"/";let A=await g.prepare(e,t,{srcPage:E,multiZoneDraftMode:!1});if(!A)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:y,deploymentId:C,params:x,nextConfig:T,parsedUrl:P,isDraftMode:S,prerenderManifest:b,routerServerContext:_,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,resolvedPathname:I,clientReferenceManifest:q,serverActionsManifest:H}=A,k=(0,s.normalizeAppPath)(E),U=!!b.routes[I]&&(g.isDev||(0,w.isRouteCacheOwner)(I,g.cacheOwner,b.routes[I])),j=!!(b.dynamicRoutes[k]||U),D=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,P,!1):t.end("This page could not be found"),null);if(j&&!S){let e=b.dynamicRoutes[k];if(e&&!1===e.fallback&&!U){if(T.adapterPath)return await D();throw new v.NoFallbackError}}let M=null;!j||g.isDev||S||(M="/index"===(M=I)?"/":M);let $=!0===g.isDev||!j,L=j&&!$;H&&q&&(0,o.setManifestsSingleton)({page:E,clientReferenceManifest:q,serverActionsManifest:H});let F=e.method||"GET",B=(0,i.getTracer)(),G=B.getActiveScopeSpan(),K=!!(null==_?void 0:_.isWrappedByNextServer),V=!!(0,n.getRequestMeta)(e,"minimalMode"),X=(0,n.getRequestMeta)(e,"incrementalCache")||await g.getIncrementalCache(e,T,b,V);null==X||X.resetRequestCache(),globalThis.__incrementalCache=X;let z={params:x,previewProps:b.preview,renderOpts:{experimental:{authInterrupts:!!T.experimental.authInterrupts,useCacheTimeout:T.experimental.useCacheTimeout},cacheComponents:!!T.cacheComponents,validationLevel:T.experimental.instantInsights.validationLevel,isDraftMode:S,supportsDynamicResponse:$,incrementalCache:X,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:T.cacheLife,staticPageGenerationTimeout:T.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>g.onRequestError(e,t,r,n,_)},sharedContext:{buildId:y,deploymentId:C}},W=new l.NodeNextRequest(e),Z=new l.NodeNextResponse(t),J=d.NextRequestAdapter.fromNodeNextRequest(W,(0,d.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:a})=>{try{if(!V&&N&&O&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await g.handle(J,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let i=z.renderOpts.pendingWaitUntil;i&&r.waitUntil&&(r.waitUntil(i),i=void 0);let o=z.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(W,Z,n,i),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);o&&(t[R.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,r=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=R.INFINITE_CACHE?!1!==a&&a>0?T.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:f.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await g.onRequestError(e,t,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:N})},!1,_),t}},Y=async(n,o)=>{try{var s,l;let n=await g.handleResponse({req:e,nextConfig:T,cacheKey:M,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:O,responseGenerator:Q,waitUntil:r.waitUntil,isMinimalMode:V});if(!j)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==f.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",N?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let i=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);V&&j||i.delete(R.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||i.get("Cache-Control")||i.set("Cache-Control",(0,m.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(W,Z,new Response(n.value.body,{headers:i,status:n.value.status||200}));return}catch(t){if(t instanceof v.NoFallbackError||await g.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:N})},!1,_),j)throw t;await (0,p.sendResponse)(W,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:i.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let a=B.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route")||k,s=`${F} ${r}`;n.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),n.updateName(s),o&&o!==n&&(o.setAttribute("http.route",r),o.updateName(s))})()}};if(K&&G)await Y(G,void 0);else{let t=B.getActiveScopeSpan();await B.withPropagatedContext(e.headers,()=>B.trace(u.BaseServerSpan.handleRequest,{spanName:`${F} ${E}`,kind:i.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Y(e,t)),void 0,!K)}}e.s(["handler",0,C,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:A})},"routeModule",0,g,"serverHooks",0,y,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,A])}];
2
2
 
3
3
  //# sourceMappingURL=_16jdov0._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[20561,e=>e.a(async(t,r)=>{try{var a=e.i(58821),n=e.i(98043),o=e.i(79832),i=e.i(13618),s=e.i(76759),u=e.i(50377),l=t([o]);[o]=l.then?(await l)():l;let h=(0,u.createLogger)("api:notebooks:id");async function d(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let e;if(u?.user?.email&&(e=await n.prisma.user.findUnique({where:{email:u.user.email}})),!e)return(0,s.unauthorized)("Authentication required");let t=await n.prisma.subject.findUnique({where:{id:r},include:{_count:{select:{errorItems:!0}}}});if(!t)return(0,s.notFound)("Notebook not found");if(t.userId!==e.id)return(0,s.forbidden)("Not authorized to access this notebook");return a.NextResponse.json(t)}catch(e){return h.error({error:e},"Error fetching notebook"),(0,s.internalError)("Failed to fetch notebook")}}async function c(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let t;if(u?.user?.email&&(t=await n.prisma.user.findUnique({where:{email:u.user.email}})),!t)return(0,s.unauthorized)("Authentication required");let o=await n.prisma.subject.findUnique({where:{id:r}});if(!o)return(0,s.notFound)("Notebook not found");if(o.userId!==t.id)return(0,s.forbidden)("Not authorized to update this notebook");let{name:i}=await e.json();if(!i||!i.trim())return(0,s.badRequest)("Notebook name is required");let l=await n.prisma.subject.update({where:{id:r},data:{name:i.trim()},include:{_count:{select:{errorItems:!0}}}});return a.NextResponse.json(l)}catch(e){return h.error({error:e},"Error updating notebook"),(0,s.internalError)("Failed to update notebook")}}async function p(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let e;if(u?.user?.email&&(e=await n.prisma.user.findUnique({where:{email:u.user.email}})),!e)return(0,s.unauthorized)("Authentication required");let t=await n.prisma.subject.findUnique({where:{id:r},include:{_count:{select:{errorItems:!0}}}});if(!t)return(0,s.notFound)("Notebook not found");if(t.userId!==e.id)return(0,s.forbidden)("Not authorized to delete this notebook");if(t._count.errorItems>0)return(0,s.badRequest)("Cannot delete notebook with error items. Please move or delete all items first.");return await n.prisma.subject.delete({where:{id:r}}),a.NextResponse.json({message:"Notebook deleted successfully"})}catch(e){return h.error({error:e},"Error deleting notebook"),(0,s.internalError)("Failed to delete notebook")}}e.s(["DELETE",0,p,"GET",0,d,"PUT",0,c]),r()}catch(e){r(e)}},!1),89171,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),o=e.i(61916),i=e.i(74677),s=e.i(69741),u=e.i(16795),l=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),f=e.i(74838),m=e.i(10372),R=e.i(93695),w=e.i(9580);e.i(52474);var v=e.i(220);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/notebooks/[id]/route",pathname:"/api/notebooks/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/notebooks/[id]/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(20561),...{}}),{workAsyncStorage:g,workUnitAsyncStorage:E,serverHooks:C}=b;async function x(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/notebooks/[id]/route";g=g.replace(/\/index$/,"")||"/";let E=await b.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:x,params:y,nextConfig:A,parsedUrl:N,isDraftMode:k,prerenderManifest:T,routerServerContext:S,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,resolvedPathname:O,clientReferenceManifest:_,serverActionsManifest:I}=E,U=(0,s.normalizeAppPath)(g),H=!!T.routes[O]&&(b.isDev||(0,w.isRouteCacheOwner)(O,b.cacheOwner,T.routes[O])),j=!!(T.dynamicRoutes[U]||H),M=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,N,!1):t.end("This page could not be found"),null);if(j&&!k){let e=T.dynamicRoutes[U];if(e&&!1===e.fallback&&!H){if(A.adapterPath)return await M();throw new R.NoFallbackError}}let D=null;!j||b.isDev||k||(D="/index"===(D=O)?"/":D);let F=!0===b.isDev||!j,L=j&&!F;I&&_&&(0,i.setManifestsSingleton)({page:g,clientReferenceManifest:_,serverActionsManifest:I});let K=e.method||"GET",z=(0,o.getTracer)(),$=z.getActiveScopeSpan(),B=!!(null==S?void 0:S.isWrappedByNextServer),G=!!(0,n.getRequestMeta)(e,"minimalMode"),V=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,A,T,G);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:y,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:k,supportsDynamicResponse:F,incrementalCache:V,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>b.onRequestError(e,t,a,n,S)},sharedContext:{buildId:C,deploymentId:x}},W=new u.NodeNextRequest(e),Z=new u.NodeNextResponse(t),J=l.NextRequestAdapter.fromNodeNextRequest(W,(0,l.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!G&&q&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await b.handle(J,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let o=X.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let i=X.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(W,Z,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);i&&(t[m.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,S),t}},Y=async(n,i)=>{try{var s,u;let n=await b.handleResponse({req:e,nextConfig:A,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:G});if(!j)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(u=n.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",q?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);G&&j||o.delete(m.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(W,Z,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,S),j)throw t;await (0,p.sendResponse)(W,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=z.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,s=`${K} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),i&&i!==n&&(i.setAttribute("http.route",a),i.updateName(s))})()}};if(B&&$)await Y($,void 0);else{let t=z.getActiveScopeSpan();await z.withPropagatedContext(e.headers,()=>z.trace(d.BaseServerSpan.handleRequest,{spanName:`${K} ${g}`,kind:o.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Y(e,t)),void 0,!B)}}e.s(["handler",0,x,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:g,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,C,"workAsyncStorage",0,g,"workUnitAsyncStorage",0,E])}];
1
+ module.exports=[820561,e=>e.a(async(t,r)=>{try{var a=e.i(89171),n=e.i(698043),o=e.i(79832),i=e.i(757660),s=e.i(181912),u=e.i(50377),l=t([o]);[o]=l.then?(await l)():l;let h=(0,u.createLogger)("api:notebooks:id");async function d(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let e;if(u?.user?.email&&(e=await n.prisma.user.findUnique({where:{email:u.user.email}})),!e)return(0,s.unauthorized)("Authentication required");let t=await n.prisma.subject.findUnique({where:{id:r},include:{_count:{select:{errorItems:!0}}}});if(!t)return(0,s.notFound)("Notebook not found");if(t.userId!==e.id)return(0,s.forbidden)("Not authorized to access this notebook");return a.NextResponse.json(t)}catch(e){return h.error({error:e},"Error fetching notebook"),(0,s.internalError)("Failed to fetch notebook")}}async function c(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let t;if(u?.user?.email&&(t=await n.prisma.user.findUnique({where:{email:u.user.email}})),!t)return(0,s.unauthorized)("Authentication required");let o=await n.prisma.subject.findUnique({where:{id:r}});if(!o)return(0,s.notFound)("Notebook not found");if(o.userId!==t.id)return(0,s.forbidden)("Not authorized to update this notebook");let{name:i}=await e.json();if(!i||!i.trim())return(0,s.badRequest)("Notebook name is required");let l=await n.prisma.subject.update({where:{id:r},data:{name:i.trim()},include:{_count:{select:{errorItems:!0}}}});return a.NextResponse.json(l)}catch(e){return h.error({error:e},"Error updating notebook"),(0,s.internalError)("Failed to update notebook")}}async function p(e,{params:t}){let{id:r}=await t,u=await (0,i.getServerSession)(o.authOptions);try{let e;if(u?.user?.email&&(e=await n.prisma.user.findUnique({where:{email:u.user.email}})),!e)return(0,s.unauthorized)("Authentication required");let t=await n.prisma.subject.findUnique({where:{id:r},include:{_count:{select:{errorItems:!0}}}});if(!t)return(0,s.notFound)("Notebook not found");if(t.userId!==e.id)return(0,s.forbidden)("Not authorized to delete this notebook");if(t._count.errorItems>0)return(0,s.badRequest)("Cannot delete notebook with error items. Please move or delete all items first.");return await n.prisma.subject.delete({where:{id:r}}),a.NextResponse.json({message:"Notebook deleted successfully"})}catch(e){return h.error({error:e},"Error deleting notebook"),(0,s.internalError)("Failed to delete notebook")}}e.s(["DELETE",0,p,"GET",0,d,"PUT",0,c]),r()}catch(e){r(e)}},!1),989171,e=>{"use strict";var t=e.i(747909),r=e.i(174017),a=e.i(996250),n=e.i(759756),o=e.i(561916),i=e.i(174677),s=e.i(869741),u=e.i(316795),l=e.i(487718),d=e.i(995169),c=e.i(47587),p=e.i(666012),h=e.i(570101),f=e.i(626937),m=e.i(10372),R=e.i(193695),w=e.i(509580);e.i(52474);var v=e.i(600220);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/notebooks/[id]/route",pathname:"/api/notebooks/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/notebooks/[id]/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(820561),...{}}),{workAsyncStorage:g,workUnitAsyncStorage:E,serverHooks:C}=b;async function x(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/notebooks/[id]/route";g=g.replace(/\/index$/,"")||"/";let E=await b.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!E)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:x,params:y,nextConfig:A,parsedUrl:N,isDraftMode:k,prerenderManifest:T,routerServerContext:S,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,resolvedPathname:O,clientReferenceManifest:_,serverActionsManifest:I}=E,U=(0,s.normalizeAppPath)(g),H=!!T.routes[O]&&(b.isDev||(0,w.isRouteCacheOwner)(O,b.cacheOwner,T.routes[O])),j=!!(T.dynamicRoutes[U]||H),M=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,N,!1):t.end("This page could not be found"),null);if(j&&!k){let e=T.dynamicRoutes[U];if(e&&!1===e.fallback&&!H){if(A.adapterPath)return await M();throw new R.NoFallbackError}}let D=null;!j||b.isDev||k||(D="/index"===(D=O)?"/":D);let F=!0===b.isDev||!j,L=j&&!F;I&&_&&(0,i.setManifestsSingleton)({page:g,clientReferenceManifest:_,serverActionsManifest:I});let K=e.method||"GET",z=(0,o.getTracer)(),$=z.getActiveScopeSpan(),B=!!(null==S?void 0:S.isWrappedByNextServer),G=!!(0,n.getRequestMeta)(e,"minimalMode"),V=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,A,T,G);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:y,previewProps:T.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts,useCacheTimeout:A.experimental.useCacheTimeout},cacheComponents:!!A.cacheComponents,validationLevel:A.experimental.instantInsights.validationLevel,isDraftMode:k,supportsDynamicResponse:F,incrementalCache:V,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:A.cacheLife,staticPageGenerationTimeout:A.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>b.onRequestError(e,t,a,n,S)},sharedContext:{buildId:C,deploymentId:x}},W=new u.NodeNextRequest(e),Z=new u.NodeNextResponse(t),J=l.NextRequestAdapter.fromNodeNextRequest(W,(0,l.signalFromNodeResponse)(t)),Q=async({previousCacheEntry:r})=>{try{if(!G&&q&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await b.handle(J,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let o=X.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let i=X.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(W,Z,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);i&&(t[m.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==r&&r>0?A.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,S),t}},Y=async(n,i)=>{try{var s,u;let n=await b.handleResponse({req:e,nextConfig:A,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,responseGenerator:Q,waitUntil:a.waitUntil,isMinimalMode:G});if(!j)return;if((null==n||null==(s=n.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(u=n.value)?void 0:u.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",q?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);G&&j||o.delete(m.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(n.cacheControl)),await (0,p.sendResponse)(W,Z,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,S),j)throw t;await (0,p.sendResponse)(W,Z,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=z.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,s=`${K} ${a}`;n.setAttributes({"next.route":a,"http.route":a,"next.span_name":s}),n.updateName(s),i&&i!==n&&(i.setAttribute("http.route",a),i.updateName(s))})()}};if(B&&$)await Y($,void 0);else{let t=z.getActiveScopeSpan();await z.withPropagatedContext(e.headers,()=>z.trace(d.BaseServerSpan.handleRequest,{spanName:`${K} ${g}`,kind:o.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Y(e,t)),void 0,!B)}}e.s(["handler",0,x,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:g,workUnitAsyncStorage:E})},"routeModule",0,b,"serverHooks",0,C,"workAsyncStorage",0,g,"workUnitAsyncStorage",0,E])}];
2
2
 
3
3
  //# sourceMappingURL=_18amra5._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[71643,e=>e.a(async(t,r)=>{try{var a=e.i(58821),i=e.i(98043),s=e.i(79832),n=e.i(13618),o=e.i(76759),d=e.i(50377),l=e.i(26828),u=e.i(92366),c=e.i(41070),p=e.i(4752),m=e.i(60979),h=e.i(99617),g=e.i(68426),f=e.i(19428),w=e.i(55920),v=t([s]);[s]=v.then?(await v)():v;let y=(0,d.createLogger)("api:import");function R(e){if(!e)return;let t=new Date(e);return isNaN(t.getTime())?void 0:t}async function I(e){let t=await (0,n.getServerSession)(s.authOptions);if(!t?.user?.email)return(0,o.unauthorized)("Not authenticated");let r=await i.prisma.user.findUnique({where:{email:t.user.email}});if(!r)return(0,o.unauthorized)("User not found");let{searchParams:d}=new URL(e.url),v="true"===d.get("all");if(v&&"admin"!==t.user.role)return(0,o.forbidden)("Admin role required");let I=null;try{let t=e.headers.get("content-length");if(t&&parseInt(t,10)>0x3200000)return(0,o.badRequest)("Request body too large (max 50MB)");let s=await e.json();if(!s.version||!s.user||!Array.isArray(s.errorItems))return(0,o.badRequest)("Invalid import data format");if(!v&&s.user.email!==r.email)return(0,o.badRequest)("Import data does not belong to current user");let n={subjectsCreated:0,tagsCreated:0,errorItemsCreated:0,reviewSchedulesCreated:0,practiceRecordsCreated:0,tagsLinked:0,duplicateErrorItems:0},d=new Set;return I=(0,l.startBackgroundTask)({userId:r.id,kind:"data_import"}),await i.prisma.$transaction(async e=>{let t=new Map;for(let a of s.subjects||[]){let i=v?a.userId:r.id,s=await e.subject.findFirst({where:{name:a.name,userId:i}});if(s)t.set(a.id,s.id);else{let r=(0,g.resolveNotebookScope)(a),s=await e.subject.create({data:{name:a.name,stage:r.stage,subjectKey:r.subject,userId:i}});t.set(a.id,s.id),n.subjectsCreated++}}let a=new Map;for(let t of s.customTags||[]){let i=v?t.userId:r.id,s=await e.knowledgeTag.findFirst({where:{name:t.name,userId:i,isSystem:!1}});if(s)a.set(t.id,s.id);else{let r;t.parentId&&a.has(t.parentId)&&(r=a.get(t.parentId));let s=await e.knowledgeTag.create({data:{name:t.name,subject:t.subject,isSystem:!1,userId:i,parentId:r,order:t.order||0,code:t.code}});a.set(t.id,s.id),n.tagsCreated++}}let i=new Set;for(let e of s.errorItems)if(e.tags)for(let t of e.tags)i.add(t.name);let o=await e.knowledgeTag.findMany({where:{name:{in:Array.from(i)},OR:[{isSystem:!0},...v?[]:[{userId:r.id}]]}}),l=new Map;for(let e of o)l.has(e.name)&&(v||e.userId!==r.id)||l.set(e.name,e.id);let I=new Map,y=new Map;for(let i of s.errorItems){let s=v?i.userId:r.id;y.set(i.id,s);let o=i.subjectId?t.get(i.subjectId):void 0,p=await (0,m.findDuplicateQuestion)(e,s,i);if(p){let t=await (0,m.recordDuplicateQuestion)(e,s,p,i);I.set(i.id,t.id),d.add(t.id),n.duplicateErrorItems++,n.practiceRecordsCreated++;continue}let g=(0,c.isShortId)(i.shortId)&&!await e.errorItem.findUnique({where:{shortId:i.shortId},select:{id:!0}}),C=(0,h.parseDifficultyStars)(i.difficultyStars),S=await e.errorItem.create({data:{shortId:g?i.shortId:await (0,u.generateUniqueShortId)(e),userId:s,subjectId:o||void 0,originalImageUrl:i.originalImageUrl||"",ocrText:i.ocrText,questionText:i.questionText,answerText:i.answerText,analysis:i.analysis,wrongAnswerText:i.wrongAnswerText,mistakeAnalysis:i.mistakeAnalysis,mistakeStatus:i.mistakeStatus,knowledgePoints:i.knowledgePoints,source:i.source,errorType:i.errorType,userNotes:i.userNotes,masteryLevel:function(e){let t="number"==typeof e?e:parseInt(String(e),10);return isNaN(t)||t<0||t>2?0:t}(i.masteryLevel),gradeSemester:i.gradeSemester,paperLevel:i.paperLevel??(0,w.getDefaultPaperLevel)(C),difficultyStars:C,hasFigure:!0===i.hasFigure||null!==(0,f.sanitizeFigureSvg)(i.figureSvg),figureSvg:(0,f.sanitizeFigureSvg)(i.figureSvg),createdAt:R(i.createdAt)}});if(I.set(i.id,S.id),n.errorItemsCreated++,i.tags&&i.tags.length>0){let t=[];for(let e of i.tags)a.has(e.id)?t.push({id:a.get(e.id)}):l.has(e.name)&&t.push({id:l.get(e.name)});t.length>0&&(await e.errorItem.update({where:{id:S.id},data:{tags:{connect:t}}}),n.tagsLinked+=t.length)}}for(let t of s.reviewSchedules||[]){let r=I.get(t.errorItemId);if(r){let a=R(t.scheduledFor);if(a){if(await e.reviewSchedule.findFirst({where:{errorItemId:r,scheduledFor:a}}))continue;await e.reviewSchedule.create({data:{errorItemId:r,scheduledFor:a,completedAt:R(t.completedAt),isCorrect:t.isCorrect}}),n.reviewSchedulesCreated++}}}for(let t of s.practiceRecords||[]){let a=v?t.userId:r.id,i=t.errorItemId&&y.get(t.errorItemId)===a?I.get(t.errorItemId):void 0,s=(0,p.isPracticeResult)(t.result)?t.result:void 0;await e.practiceRecord.create({data:{userId:a,subject:t.subject,difficulty:t.difficulty,isCorrect:t.isCorrect,...i?{errorItemId:i,result:s,questionText:t.questionText,answerText:t.answerText,analysis:t.analysis,wrongAnswerText:t.wrongAnswerText,mistakeAnalysis:t.mistakeAnalysis,originalImageUrl:t.originalImageUrl,source:["practice","manual","exam","duplicate_import"].includes(t.source||"")?t.source:"practice"}:{},createdAt:R(t.createdAt)}}),n.practiceRecordsCreated++,i&&s&&d.add(i)}},{timeout:6e4}),d.size&&(0,p.scheduleMasteryEvaluation)([...d]),I.succeed(),y.info({userId:r.id,scope:v?"all":"user",...n},"Data import completed"),a.NextResponse.json({success:!0,stats:n})}catch(e){return I?.fail(e),y.error({error:e,userId:r.id},"Import failed"),(0,o.internalError)("Failed to import data")}}e.s(["POST",0,I]),r()}catch(e){r(e)}},!1),83557,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),i=e.i(59756),s=e.i(61916),n=e.i(74677),o=e.i(69741),d=e.i(16795),l=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),m=e.i(70101),h=e.i(74838),g=e.i(10372),f=e.i(93695),w=e.i(9580);e.i(52474);var v=e.i(220);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/import/route",pathname:"/api/import",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/import/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(71643),...{}}),{workAsyncStorage:I,workUnitAsyncStorage:y,serverHooks:C}=R;async function S(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),R.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let I="/api/import/route";I=I.replace(/\/index$/,"")||"/";let y=await R.prepare(e,t,{srcPage:I,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:S,params:T,nextConfig:x,parsedUrl:A,isDraftMode:b,prerenderManifest:E,routerServerContext:N,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,resolvedPathname:k,clientReferenceManifest:O,serverActionsManifest:M}=y,U=(0,o.normalizeAppPath)(I),_=!!E.routes[k]&&(R.isDev||(0,w.isRouteCacheOwner)(k,R.cacheOwner,E.routes[k])),j=!!(E.dynamicRoutes[U]||_),D=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,A,!1):t.end("This page could not be found"),null);if(j&&!b){let e=E.dynamicRoutes[U];if(e&&!1===e.fallback&&!_){if(x.adapterPath)return await D();throw new f.NoFallbackError}}let H=null;!j||R.isDev||b||(H="/index"===(H=k)?"/":H);let F=!0===R.isDev||!j,L=j&&!F;M&&O&&(0,n.setManifestsSingleton)({page:I,clientReferenceManifest:O,serverActionsManifest:M});let K=e.method||"GET",B=(0,s.getTracer)(),$=B.getActiveScopeSpan(),z=!!(null==N?void 0:N.isWrappedByNextServer),G=!!(0,i.getRequestMeta)(e,"minimalMode"),V=(0,i.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,x,E,G);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:T,previewProps:E.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,isDraftMode:b,supportsDynamicResponse:F,incrementalCache:V,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>R.onRequestError(e,t,a,i,N)},sharedContext:{buildId:C,deploymentId:S}},Q=new d.NodeNextRequest(e),W=new d.NodeNextResponse(t),Z=l.NextRequestAdapter.fromNodeNextRequest(Q,(0,l.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!G&&q&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await R.handle(Z,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let s=X.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let n=X.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(Q,W,i,s),null;{let e=await i.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(i.headers);n&&(t[g.NEXT_CACHE_TAGS_HEADER]=n),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==r&&r>0?x.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,N),t}},Y=async(i,n)=>{try{var o,d;let i=await R.handleResponse({req:e,nextConfig:x,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:G});if(!j)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(d=i.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",q?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,m.fromNodeOutgoingHttpHeaders)(i.value.headers);G&&j||s.delete(g.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,h.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(Q,W,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,N),j)throw t;await (0,p.sendResponse)(Q,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let r=B.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,o=`${K} ${a}`;i.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),i.updateName(o),n&&n!==i&&(n.setAttribute("http.route",a),n.updateName(o))})()}};if(z&&$)await Y($,void 0);else{let t=B.getActiveScopeSpan();await B.withPropagatedContext(e.headers,()=>B.trace(u.BaseServerSpan.handleRequest,{spanName:`${K} ${I}`,kind:s.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Y(e,t)),void 0,!z)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:y})},"routeModule",0,R,"serverHooks",0,C,"workAsyncStorage",0,I,"workUnitAsyncStorage",0,y])}];
1
+ module.exports=[71643,e=>e.a(async(t,r)=>{try{var a=e.i(89171),i=e.i(698043),s=e.i(79832),n=e.i(757660),o=e.i(181912),d=e.i(50377),l=e.i(926828),u=e.i(92366),c=e.i(141070),p=e.i(404752),m=e.i(160979),h=e.i(999617),g=e.i(668426),f=e.i(819428),w=e.i(655920),v=t([s]);[s]=v.then?(await v)():v;let y=(0,d.createLogger)("api:import");function R(e){if(!e)return;let t=new Date(e);return isNaN(t.getTime())?void 0:t}async function I(e){let t=await (0,n.getServerSession)(s.authOptions);if(!t?.user?.email)return(0,o.unauthorized)("Not authenticated");let r=await i.prisma.user.findUnique({where:{email:t.user.email}});if(!r)return(0,o.unauthorized)("User not found");let{searchParams:d}=new URL(e.url),v="true"===d.get("all");if(v&&"admin"!==t.user.role)return(0,o.forbidden)("Admin role required");let I=null;try{let t=e.headers.get("content-length");if(t&&parseInt(t,10)>0x3200000)return(0,o.badRequest)("Request body too large (max 50MB)");let s=await e.json();if(!s.version||!s.user||!Array.isArray(s.errorItems))return(0,o.badRequest)("Invalid import data format");if(!v&&s.user.email!==r.email)return(0,o.badRequest)("Import data does not belong to current user");let n={subjectsCreated:0,tagsCreated:0,errorItemsCreated:0,reviewSchedulesCreated:0,practiceRecordsCreated:0,tagsLinked:0,duplicateErrorItems:0},d=new Set;return I=(0,l.startBackgroundTask)({userId:r.id,kind:"data_import"}),await i.prisma.$transaction(async e=>{let t=new Map;for(let a of s.subjects||[]){let i=v?a.userId:r.id,s=await e.subject.findFirst({where:{name:a.name,userId:i}});if(s)t.set(a.id,s.id);else{let r=(0,g.resolveNotebookScope)(a),s=await e.subject.create({data:{name:a.name,stage:r.stage,subjectKey:r.subject,userId:i}});t.set(a.id,s.id),n.subjectsCreated++}}let a=new Map;for(let t of s.customTags||[]){let i=v?t.userId:r.id,s=await e.knowledgeTag.findFirst({where:{name:t.name,userId:i,isSystem:!1}});if(s)a.set(t.id,s.id);else{let r;t.parentId&&a.has(t.parentId)&&(r=a.get(t.parentId));let s=await e.knowledgeTag.create({data:{name:t.name,subject:t.subject,isSystem:!1,userId:i,parentId:r,order:t.order||0,code:t.code}});a.set(t.id,s.id),n.tagsCreated++}}let i=new Set;for(let e of s.errorItems)if(e.tags)for(let t of e.tags)i.add(t.name);let o=await e.knowledgeTag.findMany({where:{name:{in:Array.from(i)},OR:[{isSystem:!0},...v?[]:[{userId:r.id}]]}}),l=new Map;for(let e of o)l.has(e.name)&&(v||e.userId!==r.id)||l.set(e.name,e.id);let I=new Map,y=new Map;for(let i of s.errorItems){let s=v?i.userId:r.id;y.set(i.id,s);let o=i.subjectId?t.get(i.subjectId):void 0,p=await (0,m.findDuplicateQuestion)(e,s,i);if(p){let t=await (0,m.recordDuplicateQuestion)(e,s,p,i);I.set(i.id,t.id),d.add(t.id),n.duplicateErrorItems++,n.practiceRecordsCreated++;continue}let g=(0,c.isShortId)(i.shortId)&&!await e.errorItem.findUnique({where:{shortId:i.shortId},select:{id:!0}}),C=(0,h.parseDifficultyStars)(i.difficultyStars),S=await e.errorItem.create({data:{shortId:g?i.shortId:await (0,u.generateUniqueShortId)(e),userId:s,subjectId:o||void 0,originalImageUrl:i.originalImageUrl||"",ocrText:i.ocrText,questionText:i.questionText,answerText:i.answerText,analysis:i.analysis,wrongAnswerText:i.wrongAnswerText,mistakeAnalysis:i.mistakeAnalysis,mistakeStatus:i.mistakeStatus,knowledgePoints:i.knowledgePoints,source:i.source,errorType:i.errorType,userNotes:i.userNotes,masteryLevel:function(e){let t="number"==typeof e?e:parseInt(String(e),10);return isNaN(t)||t<0||t>2?0:t}(i.masteryLevel),gradeSemester:i.gradeSemester,paperLevel:i.paperLevel??(0,w.getDefaultPaperLevel)(C),difficultyStars:C,hasFigure:!0===i.hasFigure||null!==(0,f.sanitizeFigureSvg)(i.figureSvg),figureSvg:(0,f.sanitizeFigureSvg)(i.figureSvg),createdAt:R(i.createdAt)}});if(I.set(i.id,S.id),n.errorItemsCreated++,i.tags&&i.tags.length>0){let t=[];for(let e of i.tags)a.has(e.id)?t.push({id:a.get(e.id)}):l.has(e.name)&&t.push({id:l.get(e.name)});t.length>0&&(await e.errorItem.update({where:{id:S.id},data:{tags:{connect:t}}}),n.tagsLinked+=t.length)}}for(let t of s.reviewSchedules||[]){let r=I.get(t.errorItemId);if(r){let a=R(t.scheduledFor);if(a){if(await e.reviewSchedule.findFirst({where:{errorItemId:r,scheduledFor:a}}))continue;await e.reviewSchedule.create({data:{errorItemId:r,scheduledFor:a,completedAt:R(t.completedAt),isCorrect:t.isCorrect}}),n.reviewSchedulesCreated++}}}for(let t of s.practiceRecords||[]){let a=v?t.userId:r.id,i=t.errorItemId&&y.get(t.errorItemId)===a?I.get(t.errorItemId):void 0,s=(0,p.isPracticeResult)(t.result)?t.result:void 0;await e.practiceRecord.create({data:{userId:a,subject:t.subject,difficulty:t.difficulty,isCorrect:t.isCorrect,...i?{errorItemId:i,result:s,questionText:t.questionText,answerText:t.answerText,analysis:t.analysis,wrongAnswerText:t.wrongAnswerText,mistakeAnalysis:t.mistakeAnalysis,originalImageUrl:t.originalImageUrl,source:["practice","manual","exam","duplicate_import"].includes(t.source||"")?t.source:"practice"}:{},createdAt:R(t.createdAt)}}),n.practiceRecordsCreated++,i&&s&&d.add(i)}},{timeout:6e4}),d.size&&(0,p.scheduleMasteryEvaluation)([...d]),I.succeed(),y.info({userId:r.id,scope:v?"all":"user",...n},"Data import completed"),a.NextResponse.json({success:!0,stats:n})}catch(e){return I?.fail(e),y.error({error:e,userId:r.id},"Import failed"),(0,o.internalError)("Failed to import data")}}e.s(["POST",0,I]),r()}catch(e){r(e)}},!1),583557,e=>{"use strict";var t=e.i(747909),r=e.i(174017),a=e.i(996250),i=e.i(759756),s=e.i(561916),n=e.i(174677),o=e.i(869741),d=e.i(316795),l=e.i(487718),u=e.i(995169),c=e.i(47587),p=e.i(666012),m=e.i(570101),h=e.i(626937),g=e.i(10372),f=e.i(193695),w=e.i(509580);e.i(52474);var v=e.i(600220);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/import/route",pathname:"/api/import",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/import/route.ts",nextConfigOutput:"standalone",userland:()=>e.r(71643),...{}}),{workAsyncStorage:I,workUnitAsyncStorage:y,serverHooks:C}=R;async function S(e,t,a){a.requestMeta&&(0,i.setRequestMeta)(e,a.requestMeta),R.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let I="/api/import/route";I=I.replace(/\/index$/,"")||"/";let y=await R.prepare(e,t,{srcPage:I,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:C,deploymentId:S,params:T,nextConfig:x,parsedUrl:A,isDraftMode:b,prerenderManifest:E,routerServerContext:N,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,resolvedPathname:k,clientReferenceManifest:O,serverActionsManifest:M}=y,U=(0,o.normalizeAppPath)(I),_=!!E.routes[k]&&(R.isDev||(0,w.isRouteCacheOwner)(k,R.cacheOwner,E.routes[k])),j=!!(E.dynamicRoutes[U]||_),D=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,A,!1):t.end("This page could not be found"),null);if(j&&!b){let e=E.dynamicRoutes[U];if(e&&!1===e.fallback&&!_){if(x.adapterPath)return await D();throw new f.NoFallbackError}}let H=null;!j||R.isDev||b||(H="/index"===(H=k)?"/":H);let F=!0===R.isDev||!j,L=j&&!F;M&&O&&(0,n.setManifestsSingleton)({page:I,clientReferenceManifest:O,serverActionsManifest:M});let K=e.method||"GET",B=(0,s.getTracer)(),$=B.getActiveScopeSpan(),z=!!(null==N?void 0:N.isWrappedByNextServer),G=!!(0,i.getRequestMeta)(e,"minimalMode"),V=(0,i.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,x,E,G);null==V||V.resetRequestCache(),globalThis.__incrementalCache=V;let X={params:T,previewProps:E.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,isDraftMode:b,supportsDynamicResponse:F,incrementalCache:V,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,i)=>R.onRequestError(e,t,a,i,N)},sharedContext:{buildId:C,deploymentId:S}},Q=new d.NodeNextRequest(e),W=new d.NodeNextResponse(t),Z=l.NextRequestAdapter.fromNodeNextRequest(Q,(0,l.signalFromNodeResponse)(t)),J=async({previousCacheEntry:r})=>{try{if(!G&&q&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await R.handle(Z,X);e.fetchMetrics=X.renderOpts.fetchMetrics;let s=X.renderOpts.pendingWaitUntil;s&&a.waitUntil&&(a.waitUntil(s),s=void 0);let n=X.renderOpts.collectedTags;if(!j)return await (0,p.sendResponse)(Q,W,i,s),null;{let e=await i.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(i.headers);n&&(t[g.NEXT_CACHE_TAGS_HEADER]=n),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==X.renderOpts.collectedRevalidate&&!(X.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&X.renderOpts.collectedRevalidate,a=void 0===X.renderOpts.collectedExpire||X.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==r&&r>0?x.expireTime:void 0:X.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,N),t}},Y=async(i,n)=>{try{var o,d;let i=await R.handleResponse({req:e,nextConfig:x,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,responseGenerator:J,waitUntil:a.waitUntil,isMinimalMode:G});if(!j)return;if((null==i||null==(o=i.value)?void 0:o.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(d=i.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",q?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,m.fromNodeOutgoingHttpHeaders)(i.value.headers);G&&j||s.delete(g.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,h.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(Q,W,new Response(i.value.body,{headers:s,status:i.value.status||200}));return}catch(t){if(t instanceof f.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:U,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:q})},!1,N),j)throw t;await (0,p.sendResponse)(Q,W,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:s.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let r=B.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route")||U,o=`${K} ${a}`;i.setAttributes({"next.route":a,"http.route":a,"next.span_name":o}),i.updateName(o),n&&n!==i&&(n.setAttribute("http.route",a),n.updateName(o))})()}};if(z&&$)await Y($,void 0);else{let t=B.getActiveScopeSpan();await B.withPropagatedContext(e.headers,()=>B.trace(u.BaseServerSpan.handleRequest,{spanName:`${K} ${I}`,kind:s.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},e=>Y(e,t)),void 0,!z)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:y})},"routeModule",0,R,"serverHooks",0,C,"workAsyncStorage",0,I,"workUnitAsyncStorage",0,y])}];
2
2
 
3
3
  //# sourceMappingURL=_1_ns7o3._.js.map