@studious-lms/server 1.1.26 → 1.2.6

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 (486) hide show
  1. package/.coderabbit.yaml +9 -0
  2. package/.env.example +53 -0
  3. package/.env.test.example +37 -0
  4. package/README.md +34 -7
  5. package/dist/exportType.d.ts.map +1 -1
  6. package/dist/exportType.js +4 -0
  7. package/dist/exportType.js.map +1 -0
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +212 -51
  11. package/dist/index.js.map +1 -0
  12. package/dist/instrument.d.ts +2 -0
  13. package/dist/instrument.d.ts.map +1 -0
  14. package/dist/instrument.js +18 -0
  15. package/dist/instrument.js.map +1 -0
  16. package/dist/lib/config/env.d.ts +190 -0
  17. package/dist/lib/config/env.d.ts.map +1 -0
  18. package/dist/lib/config/env.js +121 -0
  19. package/dist/lib/config/env.js.map +1 -0
  20. package/dist/lib/fileUpload.d.ts +2 -2
  21. package/dist/lib/fileUpload.d.ts.map +1 -1
  22. package/dist/lib/fileUpload.js +15 -5
  23. package/dist/lib/fileUpload.js.map +1 -0
  24. package/dist/lib/googleCloudStorage.d.ts +6 -0
  25. package/dist/lib/googleCloudStorage.d.ts.map +1 -1
  26. package/dist/lib/googleCloudStorage.js +26 -6
  27. package/dist/lib/googleCloudStorage.js.map +1 -0
  28. package/dist/lib/jsonConversion.d.ts.map +1 -1
  29. package/dist/lib/jsonConversion.js +16 -14
  30. package/dist/lib/jsonConversion.js.map +1 -0
  31. package/dist/lib/jsonStyles.d.ts.map +1 -1
  32. package/dist/lib/jsonStyles.js +4 -0
  33. package/dist/lib/jsonStyles.js.map +1 -0
  34. package/dist/lib/notificationHandler.d.ts +2 -2
  35. package/dist/lib/notificationHandler.d.ts.map +1 -1
  36. package/dist/lib/notificationHandler.js +4 -0
  37. package/dist/lib/notificationHandler.js.map +1 -0
  38. package/dist/lib/prisma.d.ts +2 -2
  39. package/dist/lib/prisma.d.ts.map +1 -1
  40. package/dist/lib/prisma.js +24 -1
  41. package/dist/lib/prisma.js.map +1 -0
  42. package/dist/lib/pusher.d.ts +4 -1
  43. package/dist/lib/pusher.d.ts.map +1 -1
  44. package/dist/lib/pusher.js +14 -6
  45. package/dist/lib/pusher.js.map +1 -0
  46. package/dist/lib/redis.d.ts +5 -0
  47. package/dist/lib/redis.d.ts.map +1 -0
  48. package/dist/lib/redis.js +53 -0
  49. package/dist/lib/redis.js.map +1 -0
  50. package/dist/lib/thumbnailGenerator.d.ts +0 -21
  51. package/dist/lib/thumbnailGenerator.d.ts.map +1 -1
  52. package/dist/lib/thumbnailGenerator.js +159 -158
  53. package/dist/lib/thumbnailGenerator.js.map +1 -0
  54. package/dist/middleware/auth.d.ts.map +1 -1
  55. package/dist/middleware/auth.js +41 -93
  56. package/dist/middleware/auth.js.map +1 -0
  57. package/dist/middleware/logging.d.ts.map +1 -1
  58. package/dist/middleware/logging.js +4 -0
  59. package/dist/middleware/logging.js.map +1 -0
  60. package/dist/middleware/security.d.ts +5 -0
  61. package/dist/middleware/security.d.ts.map +1 -0
  62. package/dist/middleware/security.js +77 -0
  63. package/dist/middleware/security.js.map +1 -0
  64. package/dist/models/agenda.d.ts +97 -0
  65. package/dist/models/agenda.d.ts.map +1 -0
  66. package/dist/models/agenda.js +40 -0
  67. package/dist/models/agenda.js.map +1 -0
  68. package/dist/models/announcement.d.ts +223 -0
  69. package/dist/models/announcement.d.ts.map +1 -0
  70. package/dist/models/announcement.js +120 -0
  71. package/dist/models/announcement.js.map +1 -0
  72. package/dist/models/assignment.d.ts +1292 -0
  73. package/dist/models/assignment.d.ts.map +1 -0
  74. package/dist/models/assignment.js +309 -0
  75. package/dist/models/assignment.js.map +1 -0
  76. package/dist/models/attendance.d.ts +180 -0
  77. package/dist/models/attendance.d.ts.map +1 -0
  78. package/dist/models/attendance.js +188 -0
  79. package/dist/models/attendance.js.map +1 -0
  80. package/dist/models/auth.d.ts +153 -0
  81. package/dist/models/auth.d.ts.map +1 -0
  82. package/dist/models/auth.js +217 -0
  83. package/dist/models/auth.js.map +1 -0
  84. package/dist/models/class.d.ts +439 -0
  85. package/dist/models/class.d.ts.map +1 -0
  86. package/dist/models/class.js +546 -0
  87. package/dist/models/class.js.map +1 -0
  88. package/dist/models/comment.d.ts +171 -0
  89. package/dist/models/comment.d.ts.map +1 -0
  90. package/dist/models/comment.js +138 -0
  91. package/dist/models/comment.js.map +1 -0
  92. package/dist/models/conversation.d.ts +164 -0
  93. package/dist/models/conversation.d.ts.map +1 -0
  94. package/dist/models/conversation.js +175 -0
  95. package/dist/models/conversation.js.map +1 -0
  96. package/dist/models/event.d.ts +295 -0
  97. package/dist/models/event.d.ts.map +1 -0
  98. package/dist/models/event.js +145 -0
  99. package/dist/models/event.js.map +1 -0
  100. package/dist/models/file.d.ts +536 -0
  101. package/dist/models/file.d.ts.map +1 -0
  102. package/dist/models/file.js +126 -0
  103. package/dist/models/file.js.map +1 -0
  104. package/dist/models/folder.d.ts +295 -0
  105. package/dist/models/folder.d.ts.map +1 -0
  106. package/dist/models/folder.js +202 -0
  107. package/dist/models/folder.js.map +1 -0
  108. package/dist/models/labChat.d.ts +243 -0
  109. package/dist/models/labChat.d.ts.map +1 -0
  110. package/dist/models/labChat.js +204 -0
  111. package/dist/models/labChat.js.map +1 -0
  112. package/dist/models/marketing.d.ts +72 -0
  113. package/dist/models/marketing.d.ts.map +1 -0
  114. package/dist/models/marketing.js +26 -0
  115. package/dist/models/marketing.js.map +1 -0
  116. package/dist/models/message.d.ts +100 -0
  117. package/dist/models/message.d.ts.map +1 -0
  118. package/dist/models/message.js +131 -0
  119. package/dist/models/message.js.map +1 -0
  120. package/dist/models/newtonChat.d.ts +72 -0
  121. package/dist/models/newtonChat.d.ts.map +1 -0
  122. package/dist/models/newtonChat.js +61 -0
  123. package/dist/models/newtonChat.js.map +1 -0
  124. package/dist/models/notification.d.ts +65 -0
  125. package/dist/models/notification.d.ts.map +1 -0
  126. package/dist/models/notification.js +46 -0
  127. package/dist/models/notification.js.map +1 -0
  128. package/dist/models/section.d.ts +102 -0
  129. package/dist/models/section.d.ts.map +1 -0
  130. package/dist/models/section.js +83 -0
  131. package/dist/models/section.js.map +1 -0
  132. package/dist/models/user.d.ts +39 -0
  133. package/dist/models/user.d.ts.map +1 -0
  134. package/dist/models/user.js +38 -0
  135. package/dist/models/user.js.map +1 -0
  136. package/dist/models/worksheet.d.ts +460 -0
  137. package/dist/models/worksheet.d.ts.map +1 -0
  138. package/dist/models/worksheet.js +200 -0
  139. package/dist/models/worksheet.js.map +1 -0
  140. package/dist/pipelines/aiLabChat.d.ts +21 -0
  141. package/dist/pipelines/aiLabChat.d.ts.map +1 -0
  142. package/dist/pipelines/aiLabChat.js +460 -0
  143. package/dist/pipelines/aiLabChat.js.map +1 -0
  144. package/dist/pipelines/aiNewtonChat.d.ts +30 -0
  145. package/dist/pipelines/aiNewtonChat.d.ts.map +1 -0
  146. package/dist/pipelines/aiNewtonChat.js +289 -0
  147. package/dist/pipelines/aiNewtonChat.js.map +1 -0
  148. package/dist/pipelines/gradeWorksheet.d.ts +30 -0
  149. package/dist/pipelines/gradeWorksheet.d.ts.map +1 -0
  150. package/dist/pipelines/gradeWorksheet.js +252 -0
  151. package/dist/pipelines/gradeWorksheet.js.map +1 -0
  152. package/dist/routers/_app.d.ts +6438 -3910
  153. package/dist/routers/_app.d.ts.map +1 -1
  154. package/dist/routers/_app.js +10 -0
  155. package/dist/routers/_app.js.map +1 -0
  156. package/dist/routers/agenda.d.ts +58 -6
  157. package/dist/routers/agenda.d.ts.map +1 -1
  158. package/dist/routers/agenda.js +6 -58
  159. package/dist/routers/agenda.js.map +1 -0
  160. package/dist/routers/announcement.d.ts +325 -6
  161. package/dist/routers/announcement.d.ts.map +1 -1
  162. package/dist/routers/announcement.js +543 -77
  163. package/dist/routers/announcement.js.map +1 -0
  164. package/dist/routers/assignment.d.ts +419 -357
  165. package/dist/routers/assignment.d.ts.map +1 -1
  166. package/dist/routers/assignment.js +100 -1689
  167. package/dist/routers/assignment.js.map +1 -0
  168. package/dist/routers/attendance.d.ts +20 -9
  169. package/dist/routers/attendance.d.ts.map +1 -1
  170. package/dist/routers/attendance.js +10 -263
  171. package/dist/routers/attendance.js.map +1 -0
  172. package/dist/routers/auth.d.ts +21 -1
  173. package/dist/routers/auth.d.ts.map +1 -1
  174. package/dist/routers/auth.js +37 -241
  175. package/dist/routers/auth.js.map +1 -0
  176. package/dist/routers/class.d.ts +198 -68
  177. package/dist/routers/class.d.ts.map +1 -1
  178. package/dist/routers/class.js +88 -909
  179. package/dist/routers/class.js.map +1 -0
  180. package/dist/routers/comment.d.ts +153 -0
  181. package/dist/routers/comment.d.ts.map +1 -0
  182. package/dist/routers/comment.js +58 -0
  183. package/dist/routers/comment.js.map +1 -0
  184. package/dist/routers/conversation.d.ts +73 -3
  185. package/dist/routers/conversation.d.ts.map +1 -1
  186. package/dist/routers/conversation.js +23 -265
  187. package/dist/routers/conversation.js.map +1 -0
  188. package/dist/routers/event.d.ts +46 -37
  189. package/dist/routers/event.d.ts.map +1 -1
  190. package/dist/routers/event.js +15 -431
  191. package/dist/routers/event.js.map +1 -0
  192. package/dist/routers/file.d.ts +4 -2
  193. package/dist/routers/file.d.ts.map +1 -1
  194. package/dist/routers/file.js +11 -298
  195. package/dist/routers/file.js.map +1 -0
  196. package/dist/routers/folder.d.ts +21 -14
  197. package/dist/routers/folder.d.ts.map +1 -1
  198. package/dist/routers/folder.js +36 -743
  199. package/dist/routers/folder.js.map +1 -0
  200. package/dist/routers/labChat.d.ts +12 -9
  201. package/dist/routers/labChat.d.ts.map +1 -1
  202. package/dist/routers/labChat.js +21 -885
  203. package/dist/routers/labChat.js.map +1 -0
  204. package/dist/routers/marketing.d.ts +2 -2
  205. package/dist/routers/marketing.d.ts.map +1 -1
  206. package/dist/routers/marketing.js +9 -54
  207. package/dist/routers/marketing.js.map +1 -0
  208. package/dist/routers/message.d.ts +2 -1
  209. package/dist/routers/message.d.ts.map +1 -1
  210. package/dist/routers/message.js +29 -519
  211. package/dist/routers/message.js.map +1 -0
  212. package/dist/routers/newtonChat.d.ts +55 -0
  213. package/dist/routers/newtonChat.d.ts.map +1 -0
  214. package/dist/routers/newtonChat.js +22 -0
  215. package/dist/routers/newtonChat.js.map +1 -0
  216. package/dist/routers/notifications.d.ts +8 -8
  217. package/dist/routers/notifications.d.ts.map +1 -1
  218. package/dist/routers/notifications.js +20 -81
  219. package/dist/routers/notifications.js.map +1 -0
  220. package/dist/routers/section.d.ts +23 -8
  221. package/dist/routers/section.d.ts.map +1 -1
  222. package/dist/routers/section.js +23 -273
  223. package/dist/routers/section.js.map +1 -0
  224. package/dist/routers/user.d.ts +1 -1
  225. package/dist/routers/user.d.ts.map +1 -1
  226. package/dist/routers/user.js +34 -204
  227. package/dist/routers/user.js.map +1 -0
  228. package/dist/routers/worksheet.d.ts +362 -0
  229. package/dist/routers/worksheet.d.ts.map +1 -0
  230. package/dist/routers/worksheet.js +153 -0
  231. package/dist/routers/worksheet.js.map +1 -0
  232. package/dist/seedDatabase.d.ts +2 -3
  233. package/dist/seedDatabase.d.ts.map +1 -1
  234. package/dist/seedDatabase.js +309 -288
  235. package/dist/seedDatabase.js.map +1 -0
  236. package/dist/server/pipelines/aiLabChat.d.ts +21 -0
  237. package/dist/server/pipelines/aiLabChat.d.ts.map +1 -0
  238. package/dist/server/pipelines/aiLabChat.js +456 -0
  239. package/dist/server/pipelines/aiLabChat.js.map +1 -0
  240. package/dist/server/pipelines/aiNewtonChat.d.ts +30 -0
  241. package/dist/server/pipelines/aiNewtonChat.d.ts.map +1 -0
  242. package/dist/server/pipelines/aiNewtonChat.js +285 -0
  243. package/dist/server/pipelines/aiNewtonChat.js.map +1 -0
  244. package/dist/server/pipelines/gradeWorksheet.d.ts +30 -0
  245. package/dist/server/pipelines/gradeWorksheet.d.ts.map +1 -0
  246. package/dist/server/pipelines/gradeWorksheet.js +248 -0
  247. package/dist/server/pipelines/gradeWorksheet.js.map +1 -0
  248. package/dist/services/agenda.d.ts +100 -0
  249. package/dist/services/agenda.d.ts.map +1 -0
  250. package/dist/services/agenda.js +21 -0
  251. package/dist/services/agenda.js.map +1 -0
  252. package/dist/services/announcement.d.ts +135 -0
  253. package/dist/services/announcement.d.ts.map +1 -0
  254. package/dist/services/announcement.js +223 -0
  255. package/dist/services/announcement.js.map +1 -0
  256. package/dist/services/assignment.d.ts +1462 -0
  257. package/dist/services/assignment.d.ts.map +1 -0
  258. package/dist/services/assignment.js +898 -0
  259. package/dist/services/assignment.js.map +1 -0
  260. package/dist/services/attendance.d.ts +93 -0
  261. package/dist/services/attendance.d.ts.map +1 -0
  262. package/dist/services/attendance.js +61 -0
  263. package/dist/services/attendance.js.map +1 -0
  264. package/dist/services/auth.d.ts +68 -0
  265. package/dist/services/auth.d.ts.map +1 -0
  266. package/dist/services/auth.js +218 -0
  267. package/dist/services/auth.js.map +1 -0
  268. package/dist/services/class.d.ts +621 -0
  269. package/dist/services/class.d.ts.map +1 -0
  270. package/dist/services/class.js +474 -0
  271. package/dist/services/class.js.map +1 -0
  272. package/dist/services/comment.d.ts +100 -0
  273. package/dist/services/comment.d.ts.map +1 -0
  274. package/dist/services/comment.js +83 -0
  275. package/dist/services/comment.js.map +1 -0
  276. package/dist/services/conversation.d.ts +159 -0
  277. package/dist/services/conversation.d.ts.map +1 -0
  278. package/dist/services/conversation.js +138 -0
  279. package/dist/services/conversation.js.map +1 -0
  280. package/dist/services/event.d.ts +216 -0
  281. package/dist/services/event.d.ts.map +1 -0
  282. package/dist/services/event.js +168 -0
  283. package/dist/services/event.js.map +1 -0
  284. package/dist/services/file.d.ts +74 -0
  285. package/dist/services/file.d.ts.map +1 -0
  286. package/dist/services/file.js +133 -0
  287. package/dist/services/file.js.map +1 -0
  288. package/dist/services/folder.d.ts +239 -0
  289. package/dist/services/folder.d.ts.map +1 -0
  290. package/dist/services/folder.js +248 -0
  291. package/dist/services/folder.js.map +1 -0
  292. package/dist/services/labChat.d.ts +165 -0
  293. package/dist/services/labChat.d.ts.map +1 -0
  294. package/dist/services/labChat.js +289 -0
  295. package/dist/services/labChat.js.map +1 -0
  296. package/dist/services/marketing.d.ts +50 -0
  297. package/dist/services/marketing.d.ts.map +1 -0
  298. package/dist/services/marketing.js +32 -0
  299. package/dist/services/marketing.js.map +1 -0
  300. package/dist/services/message.d.ts +95 -0
  301. package/dist/services/message.d.ts.map +1 -0
  302. package/dist/services/message.js +350 -0
  303. package/dist/services/message.js.map +1 -0
  304. package/dist/services/newtonChat.d.ts +22 -0
  305. package/dist/services/newtonChat.d.ts.map +1 -0
  306. package/dist/services/newtonChat.js +174 -0
  307. package/dist/services/newtonChat.js.map +1 -0
  308. package/dist/services/notification.d.ts +65 -0
  309. package/dist/services/notification.d.ts.map +1 -0
  310. package/dist/services/notification.js +33 -0
  311. package/dist/services/notification.js.map +1 -0
  312. package/dist/services/section.d.ts +53 -0
  313. package/dist/services/section.d.ts.map +1 -0
  314. package/dist/services/section.js +199 -0
  315. package/dist/services/section.js.map +1 -0
  316. package/dist/services/user.d.ts +48 -0
  317. package/dist/services/user.d.ts.map +1 -0
  318. package/dist/services/user.js +141 -0
  319. package/dist/services/user.js.map +1 -0
  320. package/dist/services/worksheet.d.ts +239 -0
  321. package/dist/services/worksheet.d.ts.map +1 -0
  322. package/dist/services/worksheet.js +235 -0
  323. package/dist/services/worksheet.js.map +1 -0
  324. package/dist/socket/handlers.d.ts.map +1 -1
  325. package/dist/socket/handlers.js +4 -0
  326. package/dist/socket/handlers.js.map +1 -0
  327. package/dist/trpc.d.ts.map +1 -1
  328. package/dist/trpc.js +4 -0
  329. package/dist/trpc.js.map +1 -0
  330. package/dist/types/trpc.d.ts.map +1 -1
  331. package/dist/types/trpc.js +4 -0
  332. package/dist/types/trpc.js.map +1 -0
  333. package/dist/utils/aiUser.d.ts +1 -3
  334. package/dist/utils/aiUser.d.ts.map +1 -1
  335. package/dist/utils/aiUser.js +8 -3
  336. package/dist/utils/aiUser.js.map +1 -0
  337. package/dist/utils/email.d.ts +12 -1
  338. package/dist/utils/email.d.ts.map +1 -1
  339. package/dist/utils/email.js +26 -4
  340. package/dist/utils/email.js.map +1 -0
  341. package/dist/utils/generateInviteCode.d.ts +1 -2
  342. package/dist/utils/generateInviteCode.d.ts.map +1 -1
  343. package/dist/utils/generateInviteCode.js +5 -2
  344. package/dist/utils/generateInviteCode.js.map +1 -0
  345. package/dist/utils/inference.d.ts +8 -0
  346. package/dist/utils/inference.d.ts.map +1 -1
  347. package/dist/utils/inference.js +78 -10
  348. package/dist/utils/inference.js.map +1 -0
  349. package/dist/utils/logger.d.ts +3 -0
  350. package/dist/utils/logger.d.ts.map +1 -1
  351. package/dist/utils/logger.js +8 -1
  352. package/dist/utils/logger.js.map +1 -0
  353. package/dist/utils/prismaErrorHandler.d.ts.map +1 -1
  354. package/dist/utils/prismaErrorHandler.js +7 -0
  355. package/dist/utils/prismaErrorHandler.js.map +1 -0
  356. package/dist/utils/prismaWrapper.d.ts +1 -0
  357. package/dist/utils/prismaWrapper.d.ts.map +1 -1
  358. package/dist/utils/prismaWrapper.js +8 -0
  359. package/dist/utils/prismaWrapper.js.map +1 -0
  360. package/docker-compose.yml +19 -0
  361. package/package.json +21 -4
  362. package/prisma/migrations/20251109122857_annuoncements_comments/migration.sql +30 -0
  363. package/prisma/migrations/20251109135555_reactions_announcements_comments/migration.sql +35 -0
  364. package/prisma/schema.prisma +180 -12
  365. package/scripts/test-pre-push.ts +14 -0
  366. package/src/index.ts +247 -52
  367. package/src/instrument.ts +15 -0
  368. package/src/lib/config/env.ts +132 -0
  369. package/src/lib/fileUpload.ts +13 -6
  370. package/src/lib/googleCloudStorage.ts +23 -6
  371. package/src/lib/jsonConversion.ts +12 -14
  372. package/src/lib/prisma.ts +23 -2
  373. package/src/lib/pusher.ts +11 -6
  374. package/src/lib/redis.ts +56 -0
  375. package/src/lib/thumbnailGenerator.ts +170 -168
  376. package/src/middleware/auth.ts +86 -137
  377. package/src/middleware/security.ts +80 -0
  378. package/src/models/agenda.ts +46 -0
  379. package/src/models/announcement.ts +134 -0
  380. package/src/models/assignment.ts +322 -0
  381. package/src/models/attendance.ts +208 -0
  382. package/src/models/auth.ts +247 -0
  383. package/src/models/class.ts +598 -0
  384. package/src/models/comment.ts +152 -0
  385. package/src/models/conversation.ts +200 -0
  386. package/src/models/event.ts +177 -0
  387. package/src/models/file.ts +129 -0
  388. package/src/models/folder.ts +225 -0
  389. package/src/models/labChat.ts +213 -0
  390. package/src/models/marketing.ts +45 -0
  391. package/src/models/message.ts +153 -0
  392. package/src/models/newtonChat.ts +70 -0
  393. package/src/models/notification.ts +54 -0
  394. package/src/models/section.ts +98 -0
  395. package/src/models/user.ts +47 -0
  396. package/src/models/worksheet.ts +294 -0
  397. package/src/pipelines/aiLabChat.ts +511 -0
  398. package/src/pipelines/aiNewtonChat.ts +347 -0
  399. package/src/pipelines/gradeWorksheet.ts +286 -0
  400. package/src/routers/_app.ts +6 -0
  401. package/src/routers/agenda.ts +3 -61
  402. package/src/routers/announcement.ts +616 -79
  403. package/src/routers/assignment.ts +148 -1827
  404. package/src/routers/attendance.ts +16 -277
  405. package/src/routers/auth.ts +79 -313
  406. package/src/routers/class.ts +265 -1038
  407. package/src/routers/comment.ts +76 -0
  408. package/src/routers/conversation.ts +53 -284
  409. package/src/routers/event.ts +50 -481
  410. package/src/routers/file.ts +45 -344
  411. package/src/routers/folder.ts +107 -836
  412. package/src/routers/labChat.ts +29 -969
  413. package/src/routers/marketing.ts +35 -77
  414. package/src/routers/message.ts +45 -571
  415. package/src/routers/newtonChat.ts +36 -0
  416. package/src/routers/notifications.ts +32 -82
  417. package/src/routers/section.ts +58 -322
  418. package/src/routers/user.ts +49 -226
  419. package/src/routers/worksheet.ts +252 -0
  420. package/src/seedDatabase.ts +328 -289
  421. package/src/services/agenda.ts +21 -0
  422. package/src/services/announcement.ts +290 -0
  423. package/src/services/assignment.ts +1198 -0
  424. package/src/services/attendance.ts +85 -0
  425. package/src/services/auth.ts +277 -0
  426. package/src/services/class.ts +622 -0
  427. package/src/services/comment.ts +106 -0
  428. package/src/services/conversation.ts +213 -0
  429. package/src/services/event.ts +231 -0
  430. package/src/services/file.ts +167 -0
  431. package/src/services/folder.ts +316 -0
  432. package/src/services/labChat.ts +352 -0
  433. package/src/services/marketing.ts +57 -0
  434. package/src/services/message.ts +461 -0
  435. package/src/services/newtonChat.ts +222 -0
  436. package/src/services/notification.ts +50 -0
  437. package/src/services/section.ts +283 -0
  438. package/src/services/user.ts +172 -0
  439. package/src/services/worksheet.ts +358 -0
  440. package/src/trpc.ts +4 -0
  441. package/src/utils/aiUser.ts +4 -3
  442. package/src/utils/email.ts +33 -4
  443. package/src/utils/generateInviteCode.ts +1 -3
  444. package/src/utils/inference.ts +89 -10
  445. package/src/utils/logger.ts +4 -1
  446. package/src/utils/prismaErrorHandler.ts +3 -0
  447. package/src/utils/prismaWrapper.ts +4 -0
  448. package/tests/globalSetup.ts +62 -0
  449. package/tests/helpers.ts +22 -0
  450. package/tests/middleware/security.test.ts +42 -0
  451. package/tests/routers/agenda.test.ts +138 -0
  452. package/tests/routers/announcement.test.ts +490 -0
  453. package/tests/routers/assignment.test.ts +837 -0
  454. package/tests/routers/attendance.test.ts +160 -0
  455. package/tests/routers/auth.test.ts +171 -0
  456. package/tests/{class.test.ts → routers/class.test.ts} +163 -92
  457. package/tests/routers/comment.test.ts +126 -0
  458. package/tests/routers/conversation.test.ts +145 -0
  459. package/tests/routers/event.test.ts +289 -0
  460. package/tests/routers/folder.test.ts +178 -0
  461. package/tests/routers/labChat.test.ts +115 -0
  462. package/tests/routers/marketing.test.ts +59 -0
  463. package/tests/routers/message.test.ts +123 -0
  464. package/tests/routers/notification.test.ts +69 -0
  465. package/tests/routers/section.test.ts +208 -0
  466. package/tests/server/rateLimit.test.ts +73 -0
  467. package/tests/setup.ts +39 -59
  468. package/tests/user.test.ts +136 -0
  469. package/tests/utils/aiUser.test.ts +22 -0
  470. package/tests/utils/generateInviteCode.test.ts +24 -0
  471. package/tests/utils/logger.test.ts +74 -0
  472. package/tests/utils/prismaErrorHandler.test.ts +101 -0
  473. package/tests/utils/prismaWrapper.test.ts +82 -0
  474. package/tests/worksheet.test.ts +181 -0
  475. package/tsconfig.json +9 -2
  476. package/vitest.config.ts +30 -1
  477. package/vitest.unit.config.ts +21 -0
  478. package/API_SPECIFICATION.md +0 -1597
  479. package/BASE64_REMOVAL_SUMMARY.md +0 -164
  480. package/CHAT_API_SPEC.md +0 -579
  481. package/LAB_CHAT_API_SPEC.md +0 -518
  482. package/dist/routers/school.d.ts +0 -208
  483. package/dist/routers/school.d.ts.map +0 -1
  484. package/dist/routers/school.js +0 -481
  485. package/src/lib/notificationHandler.ts +0 -36
  486. package/tests/auth.test.ts +0 -25
@@ -36,6 +36,15 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
36
36
  title: string;
37
37
  dueDate: Date;
38
38
  }[];
39
+ members: {
40
+ id: string;
41
+ username: string;
42
+ profile: {
43
+ displayName: string | null;
44
+ profilePicture: string | null;
45
+ profilePictureThumbnail: string | null;
46
+ } | null;
47
+ }[];
39
48
  color: string | null;
40
49
  }[];
41
50
  studentInClass: {
@@ -55,6 +64,15 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
55
64
  title: string;
56
65
  dueDate: Date;
57
66
  }[];
67
+ members: {
68
+ id: string;
69
+ username: string;
70
+ profile: {
71
+ displayName: string | null;
72
+ profilePicture: string | null;
73
+ profilePictureThumbnail: string | null;
74
+ } | null;
75
+ }[];
58
76
  color: string | null;
59
77
  }[];
60
78
  };
@@ -68,24 +86,28 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
68
86
  class: {
69
87
  sections: {
70
88
  id: string;
89
+ classId: string;
71
90
  name: string;
72
91
  color: string | null;
73
- classId: string;
74
92
  order: number | null;
75
93
  }[];
76
94
  assignments: {
77
95
  late: boolean;
78
- submitted: boolean;
79
- returned: boolean;
96
+ submitted: boolean | null | undefined;
97
+ returned: boolean | null | undefined;
80
98
  type: import(".prisma/client").$Enums.AssignmentType;
81
99
  id: string;
82
100
  submissions: {
83
101
  id: string;
84
102
  studentId: string;
103
+ gradeReceived: number | null;
104
+ rubricState: string | null;
105
+ teacherComments: string | null;
85
106
  submittedAt: Date | null;
86
107
  submitted: boolean | null;
87
108
  returned: boolean | null;
88
109
  }[];
110
+ createdAt: Date | null;
89
111
  section: {
90
112
  id: string;
91
113
  name: string;
@@ -94,9 +116,8 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
94
116
  dueDate: Date;
95
117
  maxGrade: number | null;
96
118
  instructions: string;
97
- weight: number;
98
119
  graded: boolean;
99
- createdAt: Date | null;
120
+ weight: number;
100
121
  inProgress: boolean;
101
122
  order: number | null;
102
123
  markScheme: {
@@ -110,7 +131,9 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
110
131
  }[];
111
132
  announcements: {
112
133
  id: string;
134
+ createdAt: Date;
113
135
  remarks: string;
136
+ modifiedAt: Date | null;
114
137
  teacher: {
115
138
  id: string;
116
139
  username: string;
@@ -120,7 +143,6 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
120
143
  profilePictureThumbnail: string | null;
121
144
  } | null;
122
145
  };
123
- createdAt: Date;
124
146
  }[];
125
147
  students: {
126
148
  id: string;
@@ -218,12 +240,6 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
218
240
  newStudent: {
219
241
  id: string;
220
242
  username: string;
221
- email: string;
222
- password: string;
223
- verified: boolean;
224
- role: import(".prisma/client").$Enums.UserRole;
225
- profileId: string | null;
226
- schoolId: string | null;
227
243
  };
228
244
  };
229
245
  meta: object;
@@ -273,6 +289,16 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
273
289
  };
274
290
  meta: object;
275
291
  }>;
292
+ leaveClass: import("@trpc/server").TRPCMutationProcedure<{
293
+ input: {
294
+ classId: string;
295
+ };
296
+ output: {
297
+ success: boolean;
298
+ leftClassId: string;
299
+ };
300
+ meta: object;
301
+ }>;
276
302
  join: import("@trpc/server").TRPCMutationProcedure<{
277
303
  input: {
278
304
  classCode: string;
@@ -318,10 +344,11 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
318
344
  assignment: {
319
345
  id: string;
320
346
  title: string;
347
+ dueDate: Date;
321
348
  maxGrade: number | null;
349
+ weight: number;
322
350
  markSchemeId: string | null;
323
351
  gradingBoundaryId: string | null;
324
- weight: number;
325
352
  markScheme: {
326
353
  structured: string;
327
354
  } | null;
@@ -331,11 +358,12 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
331
358
  };
332
359
  } & {
333
360
  id: string;
361
+ createdAt: Date;
334
362
  assignmentId: string;
363
+ modifiedAt: Date;
335
364
  studentId: string;
365
+ extendedResponse: string | null;
336
366
  gradeReceived: number | null;
337
- createdAt: Date;
338
- modifiedAt: Date;
339
367
  rubricState: string | null;
340
368
  teacherComments: string | null;
341
369
  submittedAt: Date | null;
@@ -362,11 +390,12 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
362
390
  };
363
391
  } & {
364
392
  id: string;
393
+ createdAt: Date;
365
394
  assignmentId: string;
395
+ modifiedAt: Date;
366
396
  studentId: string;
397
+ extendedResponse: string | null;
367
398
  gradeReceived: number | null;
368
- createdAt: Date;
369
- modifiedAt: Date;
370
399
  rubricState: string | null;
371
400
  teacherComments: string | null;
372
401
  submittedAt: Date | null;
@@ -416,8 +445,8 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
416
445
  input: {
417
446
  [x: string]: unknown;
418
447
  classId: string;
419
- structure: string;
420
448
  markSchemeId: string;
449
+ structure: string;
421
450
  };
422
451
  output: {
423
452
  id: string;
@@ -468,8 +497,8 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
468
497
  input: {
469
498
  [x: string]: unknown;
470
499
  classId: string;
471
- structure: string;
472
500
  gradingBoundaryId: string;
501
+ structure: string;
473
502
  };
474
503
  output: {
475
504
  id: string;
@@ -536,23 +565,28 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
536
565
  output: {
537
566
  type: import(".prisma/client").$Enums.AssignmentType;
538
567
  id: string;
568
+ createdAt: Date | null;
569
+ classId: string;
539
570
  title: string;
540
571
  dueDate: Date;
541
572
  maxGrade: number | null;
542
- classId: string;
543
573
  eventId: string | null;
544
- markSchemeId: string | null;
545
- gradingBoundaryId: string | null;
546
574
  instructions: string;
547
- weight: number;
548
- graded: boolean;
549
- sectionId: string | null;
550
- template: boolean;
551
- createdAt: Date | null;
552
575
  modifiedAt: Date | null;
553
576
  teacherId: string;
577
+ acceptFiles: boolean;
578
+ acceptExtendedResponse: boolean;
579
+ acceptWorksheet: boolean;
580
+ gradeWithAI: boolean;
581
+ aiPolicyLevel: number;
582
+ sectionId: string | null;
583
+ graded: boolean;
584
+ weight: number;
554
585
  inProgress: boolean;
586
+ template: boolean;
587
+ markSchemeId: string | null;
555
588
  order: number | null;
589
+ gradingBoundaryId: string | null;
556
590
  }[];
557
591
  meta: object;
558
592
  }>;
@@ -560,37 +594,42 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
560
594
  input: {
561
595
  [x: string]: unknown;
562
596
  classId: string;
563
- type: "LAB" | "HOMEWORK" | "QUIZ" | "TEST" | "PROJECT" | "ESSAY" | "DISCUSSION" | "PRESENTATION" | "OTHER";
597
+ type: "HOMEWORK" | "QUIZ" | "TEST" | "PROJECT" | "ESSAY" | "DISCUSSION" | "PRESENTATION" | "LAB" | "OTHER";
564
598
  title: string;
565
599
  instructions: string;
566
600
  dueDate?: Date | undefined;
567
601
  maxGrade?: number | undefined;
602
+ sectionId?: string | undefined;
603
+ graded?: boolean | undefined;
604
+ weight?: number | undefined;
568
605
  markSchemeId?: string | undefined;
569
606
  gradingBoundaryId?: string | undefined;
570
- weight?: number | undefined;
571
- graded?: boolean | undefined;
572
- sectionId?: string | undefined;
573
607
  };
574
608
  output: {
575
609
  type: import(".prisma/client").$Enums.AssignmentType;
576
610
  id: string;
611
+ createdAt: Date | null;
612
+ classId: string;
577
613
  title: string;
578
614
  dueDate: Date;
579
615
  maxGrade: number | null;
580
- classId: string;
581
616
  eventId: string | null;
582
- markSchemeId: string | null;
583
- gradingBoundaryId: string | null;
584
617
  instructions: string;
585
- weight: number;
586
- graded: boolean;
587
- sectionId: string | null;
588
- template: boolean;
589
- createdAt: Date | null;
590
618
  modifiedAt: Date | null;
591
619
  teacherId: string;
620
+ acceptFiles: boolean;
621
+ acceptExtendedResponse: boolean;
622
+ acceptWorksheet: boolean;
623
+ gradeWithAI: boolean;
624
+ aiPolicyLevel: number;
625
+ sectionId: string | null;
626
+ graded: boolean;
627
+ weight: number;
592
628
  inProgress: boolean;
629
+ template: boolean;
630
+ markSchemeId: string | null;
593
631
  order: number | null;
632
+ gradingBoundaryId: string | null;
594
633
  };
595
634
  meta: object;
596
635
  }>;
@@ -602,33 +641,38 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
602
641
  title?: string | undefined;
603
642
  dueDate?: Date | undefined;
604
643
  maxGrade?: number | undefined;
605
- markSchemeId?: string | undefined;
606
- gradingBoundaryId?: string | undefined;
607
644
  instructions?: string | undefined;
608
- weight?: number | undefined;
609
- graded?: boolean | undefined;
610
645
  sectionId?: string | undefined;
646
+ graded?: boolean | undefined;
647
+ weight?: number | undefined;
648
+ markSchemeId?: string | undefined;
649
+ gradingBoundaryId?: string | undefined;
611
650
  };
612
651
  output: {
613
652
  type: import(".prisma/client").$Enums.AssignmentType;
614
653
  id: string;
654
+ createdAt: Date | null;
655
+ classId: string;
615
656
  title: string;
616
657
  dueDate: Date;
617
658
  maxGrade: number | null;
618
- classId: string;
619
659
  eventId: string | null;
620
- markSchemeId: string | null;
621
- gradingBoundaryId: string | null;
622
660
  instructions: string;
623
- weight: number;
624
- graded: boolean;
625
- sectionId: string | null;
626
- template: boolean;
627
- createdAt: Date | null;
628
661
  modifiedAt: Date | null;
629
662
  teacherId: string;
663
+ acceptFiles: boolean;
664
+ acceptExtendedResponse: boolean;
665
+ acceptWorksheet: boolean;
666
+ gradeWithAI: boolean;
667
+ aiPolicyLevel: number;
668
+ sectionId: string | null;
669
+ graded: boolean;
670
+ weight: number;
630
671
  inProgress: boolean;
672
+ template: boolean;
673
+ markSchemeId: string | null;
631
674
  order: number | null;
675
+ gradingBoundaryId: string | null;
632
676
  };
633
677
  meta: object;
634
678
  }>;
@@ -641,23 +685,28 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
641
685
  output: {
642
686
  type: import(".prisma/client").$Enums.AssignmentType;
643
687
  id: string;
688
+ createdAt: Date | null;
689
+ classId: string;
644
690
  title: string;
645
691
  dueDate: Date;
646
692
  maxGrade: number | null;
647
- classId: string;
648
693
  eventId: string | null;
649
- markSchemeId: string | null;
650
- gradingBoundaryId: string | null;
651
694
  instructions: string;
652
- weight: number;
653
- graded: boolean;
654
- sectionId: string | null;
655
- template: boolean;
656
- createdAt: Date | null;
657
695
  modifiedAt: Date | null;
658
696
  teacherId: string;
697
+ acceptFiles: boolean;
698
+ acceptExtendedResponse: boolean;
699
+ acceptWorksheet: boolean;
700
+ gradeWithAI: boolean;
701
+ aiPolicyLevel: number;
702
+ sectionId: string | null;
703
+ graded: boolean;
704
+ weight: number;
659
705
  inProgress: boolean;
706
+ template: boolean;
707
+ markSchemeId: string | null;
660
708
  order: number | null;
709
+ gradingBoundaryId: string | null;
661
710
  };
662
711
  meta: object;
663
712
  }>;
@@ -668,29 +717,34 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
668
717
  draftId: string;
669
718
  dueDate?: Date | undefined;
670
719
  maxGrade?: number | undefined;
671
- weight?: number | undefined;
672
720
  graded?: boolean | undefined;
721
+ weight?: number | undefined;
673
722
  };
674
723
  output: {
675
724
  type: import(".prisma/client").$Enums.AssignmentType;
676
725
  id: string;
726
+ createdAt: Date | null;
727
+ classId: string;
677
728
  title: string;
678
729
  dueDate: Date;
679
730
  maxGrade: number | null;
680
- classId: string;
681
731
  eventId: string | null;
682
- markSchemeId: string | null;
683
- gradingBoundaryId: string | null;
684
732
  instructions: string;
685
- weight: number;
686
- graded: boolean;
687
- sectionId: string | null;
688
- template: boolean;
689
- createdAt: Date | null;
690
733
  modifiedAt: Date | null;
691
734
  teacherId: string;
735
+ acceptFiles: boolean;
736
+ acceptExtendedResponse: boolean;
737
+ acceptWorksheet: boolean;
738
+ gradeWithAI: boolean;
739
+ aiPolicyLevel: number;
740
+ sectionId: string | null;
741
+ graded: boolean;
742
+ weight: number;
692
743
  inProgress: boolean;
744
+ template: boolean;
745
+ markSchemeId: string | null;
693
746
  order: number | null;
747
+ gradingBoundaryId: string | null;
694
748
  };
695
749
  meta: object;
696
750
  }>;
@@ -752,5 +806,81 @@ export declare const classRouter: import("@trpc/server").TRPCBuiltRouter<{
752
806
  }[];
753
807
  meta: object;
754
808
  }>;
809
+ exportClass: import("@trpc/server").TRPCMutationProcedure<{
810
+ input: {
811
+ [x: string]: unknown;
812
+ classId: string;
813
+ };
814
+ output: {
815
+ classFiles: any;
816
+ assignments: {
817
+ type: import(".prisma/client").$Enums.AssignmentType;
818
+ id: string;
819
+ createdAt: Date | null;
820
+ section: {
821
+ id: string;
822
+ name: string;
823
+ } | null;
824
+ title: string;
825
+ dueDate: Date;
826
+ maxGrade: number | null;
827
+ instructions: string;
828
+ graded: boolean;
829
+ weight: number;
830
+ inProgress: boolean;
831
+ order: number | null;
832
+ markScheme: {
833
+ id: string;
834
+ structured: string;
835
+ } | null;
836
+ gradingBoundary: {
837
+ id: string;
838
+ structured: string;
839
+ } | null;
840
+ }[];
841
+ sections: {
842
+ id: string;
843
+ classId: string;
844
+ name: string;
845
+ color: string | null;
846
+ order: number | null;
847
+ }[];
848
+ worksheets: {
849
+ id: string;
850
+ createdAt: Date;
851
+ updatedAt: Date;
852
+ classId: string;
853
+ name: string;
854
+ }[];
855
+ markSchemes: {
856
+ id: string;
857
+ classId: string;
858
+ structured: string;
859
+ }[];
860
+ gradingBoundaries: {
861
+ id: string;
862
+ classId: string;
863
+ structured: string;
864
+ }[];
865
+ id: string;
866
+ schoolId: string | null;
867
+ name: string;
868
+ subject: string;
869
+ color: string | null;
870
+ section: string;
871
+ syllabus: string | null;
872
+ };
873
+ meta: object;
874
+ }>;
875
+ importClass: import("@trpc/server").TRPCMutationProcedure<{
876
+ input: {
877
+ [x: string]: unknown;
878
+ classId: string;
879
+ year: number;
880
+ classData?: any;
881
+ };
882
+ output: string;
883
+ meta: object;
884
+ }>;
755
885
  }>>;
756
886
  //# sourceMappingURL=class.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../src/routers/class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0kCtB,CAAC"}
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"/","sources":["routers/class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2CxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgStB,CAAC"}