@studious-lms/server 1.26.0 → 1.28.0

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 (222) hide show
  1. package/.env.example +3 -1
  2. package/.github/workflows/npm-publish.yml +1 -0
  3. package/AGENTS.md +84 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +31 -4
  6. package/dist/index.js.map +1 -1
  7. package/dist/instrument.js +9 -4
  8. package/dist/instrument.js.map +1 -1
  9. package/dist/lib/fileUpload.d.ts +15 -0
  10. package/dist/lib/fileUpload.d.ts.map +1 -1
  11. package/dist/lib/fileUpload.js +43 -2
  12. package/dist/lib/fileUpload.js.map +1 -1
  13. package/dist/models/cloudStorage.d.ts +11 -0
  14. package/dist/models/cloudStorage.d.ts.map +1 -1
  15. package/dist/models/cloudStorage.js +18 -2
  16. package/dist/models/cloudStorage.js.map +1 -1
  17. package/dist/models/conversation.d.ts +1 -0
  18. package/dist/models/conversation.d.ts.map +1 -1
  19. package/dist/models/labChat.d.ts +40 -0
  20. package/dist/models/labChat.d.ts.map +1 -1
  21. package/dist/models/labChat.js +32 -2
  22. package/dist/models/labChat.js.map +1 -1
  23. package/dist/models/message.d.ts +3 -0
  24. package/dist/models/message.d.ts.map +1 -1
  25. package/dist/pipelines/aiLabChat.d.ts +2 -0
  26. package/dist/pipelines/aiLabChat.d.ts.map +1 -1
  27. package/dist/pipelines/aiLabChat.js +60 -16
  28. package/dist/pipelines/aiLabChat.js.map +1 -1
  29. package/dist/pipelines/aiLabChatContract.d.ts +170 -2
  30. package/dist/pipelines/aiLabChatContract.d.ts.map +1 -1
  31. package/dist/pipelines/aiLabChatContract.js +30 -2
  32. package/dist/pipelines/aiLabChatContract.js.map +1 -1
  33. package/dist/pipelines/aiNewtonChat.d.ts.map +1 -1
  34. package/dist/pipelines/aiNewtonChat.js +30 -5
  35. package/dist/pipelines/aiNewtonChat.js.map +1 -1
  36. package/dist/pipelines/generateVisualization.d.ts +33 -0
  37. package/dist/pipelines/generateVisualization.d.ts.map +1 -0
  38. package/dist/pipelines/generateVisualization.js +79 -0
  39. package/dist/pipelines/generateVisualization.js.map +1 -0
  40. package/dist/pipelines/labChatPrompt.d.ts +1 -1
  41. package/dist/pipelines/labChatPrompt.d.ts.map +1 -1
  42. package/dist/pipelines/labChatPrompt.js +13 -14
  43. package/dist/pipelines/labChatPrompt.js.map +1 -1
  44. package/dist/routers/_app.d.ts +1118 -70
  45. package/dist/routers/_app.d.ts.map +1 -1
  46. package/dist/routers/_app.js +4 -2
  47. package/dist/routers/_app.js.map +1 -1
  48. package/dist/routers/admin.d.ts +297 -1
  49. package/dist/routers/admin.d.ts.map +1 -1
  50. package/dist/routers/admin.js +43 -2
  51. package/dist/routers/admin.js.map +1 -1
  52. package/dist/routers/class.d.ts.map +1 -1
  53. package/dist/routers/class.js +16 -3
  54. package/dist/routers/class.js.map +1 -1
  55. package/dist/routers/conversation.d.ts +1 -0
  56. package/dist/routers/conversation.d.ts.map +1 -1
  57. package/dist/routers/labChat.d.ts +10 -0
  58. package/dist/routers/labChat.d.ts.map +1 -1
  59. package/dist/routers/labChat.js +6 -3
  60. package/dist/routers/labChat.js.map +1 -1
  61. package/dist/routers/message.d.ts +37 -4
  62. package/dist/routers/message.d.ts.map +1 -1
  63. package/dist/routers/message.js +24 -7
  64. package/dist/routers/message.js.map +1 -1
  65. package/dist/routers/module.d.ts +1 -1
  66. package/dist/routers/parent.d.ts +18 -0
  67. package/dist/routers/parent.d.ts.map +1 -1
  68. package/dist/routers/parent.js +10 -3
  69. package/dist/routers/parent.js.map +1 -1
  70. package/dist/routers/studentProgress.d.ts +44 -0
  71. package/dist/routers/studentProgress.d.ts.map +1 -1
  72. package/dist/routers/studentProgress.js +12 -3
  73. package/dist/routers/studentProgress.js.map +1 -1
  74. package/dist/routers/visualization.d.ts +124 -0
  75. package/dist/routers/visualization.d.ts.map +1 -0
  76. package/dist/routers/visualization.js +41 -0
  77. package/dist/routers/visualization.js.map +1 -0
  78. package/dist/routes/aiStream.js +32 -2
  79. package/dist/routes/aiStream.js.map +1 -1
  80. package/dist/seedDatabase.d.ts.map +1 -1
  81. package/dist/seedDatabase.js +107 -3
  82. package/dist/seedDatabase.js.map +1 -1
  83. package/dist/services/adminClass.d.ts +153 -0
  84. package/dist/services/adminClass.d.ts.map +1 -0
  85. package/dist/services/adminClass.js +196 -0
  86. package/dist/services/adminClass.js.map +1 -0
  87. package/dist/services/adminInstitution.d.ts +2 -0
  88. package/dist/services/adminInstitution.d.ts.map +1 -1
  89. package/dist/services/adminInstitution.js +11 -4
  90. package/dist/services/adminInstitution.js.map +1 -1
  91. package/dist/services/adminMetrics.d.ts +8 -0
  92. package/dist/services/adminMetrics.d.ts.map +1 -1
  93. package/dist/services/adminMetrics.js +30 -3
  94. package/dist/services/adminMetrics.js.map +1 -1
  95. package/dist/services/adminSpam.d.ts +76 -0
  96. package/dist/services/adminSpam.d.ts.map +1 -0
  97. package/dist/services/adminSpam.js +163 -0
  98. package/dist/services/adminSpam.js.map +1 -0
  99. package/dist/services/adminSql.d.ts +36 -0
  100. package/dist/services/adminSql.d.ts.map +1 -0
  101. package/dist/services/adminSql.js +172 -0
  102. package/dist/services/adminSql.js.map +1 -0
  103. package/dist/services/adminTelemetry.d.ts +56 -0
  104. package/dist/services/adminTelemetry.d.ts.map +1 -0
  105. package/dist/services/adminTelemetry.js +147 -0
  106. package/dist/services/adminTelemetry.js.map +1 -0
  107. package/dist/services/adminUser.d.ts +45 -1
  108. package/dist/services/adminUser.d.ts.map +1 -1
  109. package/dist/services/adminUser.js +53 -13
  110. package/dist/services/adminUser.js.map +1 -1
  111. package/dist/services/aiChatStream.d.ts +15 -0
  112. package/dist/services/aiChatStream.d.ts.map +1 -1
  113. package/dist/services/aiChatStream.js +144 -74
  114. package/dist/services/aiChatStream.js.map +1 -1
  115. package/dist/services/aiGeneration.d.ts +4 -0
  116. package/dist/services/aiGeneration.d.ts.map +1 -0
  117. package/dist/services/aiGeneration.js +88 -0
  118. package/dist/services/aiGeneration.js.map +1 -0
  119. package/dist/services/aiProposalTools.d.ts +4 -1
  120. package/dist/services/aiProposalTools.d.ts.map +1 -1
  121. package/dist/services/aiProposalTools.js +128 -3
  122. package/dist/services/aiProposalTools.js.map +1 -1
  123. package/dist/services/aiProposals.d.ts +70 -0
  124. package/dist/services/aiProposals.d.ts.map +1 -0
  125. package/dist/services/aiProposals.js +363 -0
  126. package/dist/services/aiProposals.js.map +1 -0
  127. package/dist/services/auth.d.ts.map +1 -1
  128. package/dist/services/auth.js +10 -4
  129. package/dist/services/auth.js.map +1 -1
  130. package/dist/services/conversation.d.ts +1 -0
  131. package/dist/services/conversation.d.ts.map +1 -1
  132. package/dist/services/fees.d.ts.map +1 -1
  133. package/dist/services/fees.js +7 -3
  134. package/dist/services/fees.js.map +1 -1
  135. package/dist/services/labChat.d.ts +10 -0
  136. package/dist/services/labChat.d.ts.map +1 -1
  137. package/dist/services/labChat.js +52 -3
  138. package/dist/services/labChat.js.map +1 -1
  139. package/dist/services/message.d.ts +24 -8
  140. package/dist/services/message.d.ts.map +1 -1
  141. package/dist/services/message.js +170 -117
  142. package/dist/services/message.js.map +1 -1
  143. package/dist/services/module.d.ts.map +1 -1
  144. package/dist/services/module.js +23 -4
  145. package/dist/services/module.js.map +1 -1
  146. package/dist/services/parentPortal.d.ts +14 -0
  147. package/dist/services/parentPortal.d.ts.map +1 -1
  148. package/dist/services/parentPortal.js +72 -2
  149. package/dist/services/parentPortal.js.map +1 -1
  150. package/dist/services/studentProgress.d.ts +50 -0
  151. package/dist/services/studentProgress.d.ts.map +1 -1
  152. package/dist/services/studentProgress.js +107 -2
  153. package/dist/services/studentProgress.js.map +1 -1
  154. package/dist/services/visualization.d.ts +72 -0
  155. package/dist/services/visualization.d.ts.map +1 -0
  156. package/dist/services/visualization.js +122 -0
  157. package/dist/services/visualization.js.map +1 -0
  158. package/dist/utils/inference.d.ts +10 -0
  159. package/dist/utils/inference.d.ts.map +1 -1
  160. package/dist/utils/inference.js +77 -2
  161. package/dist/utils/inference.js.map +1 -1
  162. package/dist/utils/sentryTrpc.d.ts +3 -0
  163. package/dist/utils/sentryTrpc.d.ts.map +1 -0
  164. package/dist/utils/sentryTrpc.js +26 -0
  165. package/dist/utils/sentryTrpc.js.map +1 -0
  166. package/dist/workers/processors/createRunJobWorker.js +17 -16
  167. package/dist/workers/processors/createRunJobWorker.js.map +1 -1
  168. package/package.json +1 -1
  169. package/prisma/migrations/20260811130000_add_ai_message_feedback/migration.sql +7 -0
  170. package/prisma/migrations/20261025120000_add_visualizations/migration.sql +27 -0
  171. package/prisma/schema.prisma +32 -0
  172. package/src/index.ts +30 -4
  173. package/src/instrument.ts +8 -2
  174. package/src/lib/fileUpload.ts +49 -0
  175. package/src/models/cloudStorage.ts +19 -0
  176. package/src/models/labChat.ts +34 -0
  177. package/src/pipelines/aiLabChat.ts +79 -18
  178. package/src/pipelines/aiLabChatContract.ts +35 -0
  179. package/src/pipelines/aiNewtonChat.ts +34 -2
  180. package/src/pipelines/generateVisualization.ts +107 -0
  181. package/src/pipelines/labChatPrompt.ts +11 -12
  182. package/src/routers/_app.ts +2 -0
  183. package/src/routers/admin.ts +72 -0
  184. package/src/routers/class.ts +14 -1
  185. package/src/routers/labChat.ts +5 -0
  186. package/src/routers/message.ts +34 -5
  187. package/src/routers/parent.ts +11 -0
  188. package/src/routers/studentProgress.ts +15 -0
  189. package/src/routers/visualization.ts +60 -0
  190. package/src/routes/aiStream.ts +32 -0
  191. package/src/seedDatabase.ts +107 -2
  192. package/src/services/adminClass.ts +222 -0
  193. package/src/services/adminInstitution.ts +9 -2
  194. package/src/services/adminMetrics.ts +35 -0
  195. package/src/services/adminSpam.ts +224 -0
  196. package/src/services/adminSql.ts +214 -0
  197. package/src/services/adminTelemetry.ts +194 -0
  198. package/src/services/adminUser.ts +66 -11
  199. package/src/services/aiChatStream.ts +83 -7
  200. package/src/services/aiGeneration.ts +92 -0
  201. package/src/services/aiProposalTools.ts +166 -1
  202. package/src/services/aiProposals.ts +428 -0
  203. package/src/services/auth.ts +8 -2
  204. package/src/services/fees.ts +5 -1
  205. package/src/services/labChat.ts +65 -0
  206. package/src/services/message.ts +205 -142
  207. package/src/services/module.ts +29 -2
  208. package/src/services/parentPortal.ts +85 -0
  209. package/src/services/studentProgress.ts +135 -0
  210. package/src/services/visualization.ts +147 -0
  211. package/src/utils/inference.ts +85 -0
  212. package/src/utils/sentryTrpc.ts +25 -0
  213. package/src/workers/processors/createRunJobWorker.ts +17 -17
  214. package/tests/unit/lib/fileUploadSession.test.ts +67 -0
  215. package/tests/unit/services/adminClass.test.ts +102 -0
  216. package/tests/unit/services/adminSpam.test.ts +108 -0
  217. package/tests/unit/services/adminSql.test.ts +56 -0
  218. package/tests/unit/services/adminTelemetry.test.ts +47 -0
  219. package/tests/unit/services/adminUser.test.ts +77 -0
  220. package/tests/unit/services/visualization.test.ts +130 -0
  221. package/tests/unit/utils/adminPanelAccess.test.ts +26 -0
  222. package/tests/unit/utils/sentryTrpc.test.ts +15 -0
@@ -5576,6 +5576,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
5576
5576
  content: string;
5577
5577
  senderId: string;
5578
5578
  conversationId: string;
5579
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
5579
5580
  runJobId: string | null;
5580
5581
  };
5581
5582
  unreadCount: number;
@@ -5787,6 +5788,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
5787
5788
  } | null;
5788
5789
  };
5789
5790
  status: import(".prisma/client").$Enums.JobStatus | null;
5791
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
5790
5792
  attachments: {
5791
5793
  path: string;
5792
5794
  type: string;
@@ -5917,6 +5919,15 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
5917
5919
  };
5918
5920
  meta: object;
5919
5921
  }>;
5922
+ cancelAiGeneration: import("@trpc/server").TRPCMutationProcedure<{
5923
+ input: {
5924
+ messageId: string;
5925
+ };
5926
+ output: {
5927
+ success: boolean;
5928
+ };
5929
+ meta: object;
5930
+ }>;
5920
5931
  markAsRead: import("@trpc/server").TRPCMutationProcedure<{
5921
5932
  input: {
5922
5933
  conversationId: string;
@@ -5935,14 +5946,15 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
5935
5946
  };
5936
5947
  meta: object;
5937
5948
  }>;
5938
- markSuggestionCreated: import("@trpc/server").TRPCMutationProcedure<{
5949
+ resolveAiProposal: import("@trpc/server").TRPCMutationProcedure<{
5939
5950
  input: {
5940
- type: "assignment" | "section" | "worksheet";
5941
5951
  messageId: string;
5942
- index: number;
5952
+ proposalId: string;
5953
+ action: "approve" | "dismiss";
5943
5954
  };
5944
5955
  output: {
5945
- success: boolean;
5956
+ status: import("../services/aiProposals.js").PendingCreationStatus;
5957
+ createdId: string | null;
5946
5958
  };
5947
5959
  meta: object;
5948
5960
  }>;
@@ -5956,6 +5968,28 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
5956
5968
  };
5957
5969
  meta: object;
5958
5970
  }>;
5971
+ regenerateAIResponse: import("@trpc/server").TRPCMutationProcedure<{
5972
+ input: {
5973
+ messageId: string;
5974
+ };
5975
+ output: {
5976
+ success: boolean;
5977
+ messageId: string;
5978
+ };
5979
+ meta: object;
5980
+ }>;
5981
+ setAIFeedback: import("@trpc/server").TRPCMutationProcedure<{
5982
+ input: {
5983
+ feedback: "UP" | "DOWN" | null;
5984
+ messageId: string;
5985
+ };
5986
+ output: {
5987
+ success: boolean;
5988
+ messageId: string;
5989
+ feedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
5990
+ };
5991
+ meta: object;
5992
+ }>;
5959
5993
  }>>;
5960
5994
  labChat: import("@trpc/server").TRPCBuiltRouter<{
5961
5995
  ctx: import("../trpc.js").Context;
@@ -6127,12 +6161,22 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
6127
6161
  content: string;
6128
6162
  senderId: string;
6129
6163
  conversationId: string;
6164
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
6130
6165
  runJobId: string | null;
6131
6166
  };
6132
6167
  messageCount: number;
6133
6168
  }[];
6134
6169
  meta: object;
6135
6170
  }>;
6171
+ starterPrompts: import("@trpc/server").TRPCQueryProcedure<{
6172
+ input: {
6173
+ classId: string;
6174
+ };
6175
+ output: {
6176
+ prompts: string[];
6177
+ };
6178
+ meta: object;
6179
+ }>;
6136
6180
  postToLabChat: import("@trpc/server").TRPCMutationProcedure<{
6137
6181
  input: {
6138
6182
  content: string;
@@ -7286,6 +7330,50 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
7286
7330
  };
7287
7331
  meta: object;
7288
7332
  }>;
7333
+ generateFollowUpAssignment: import("@trpc/server").TRPCMutationProcedure<{
7334
+ input: {
7335
+ [x: string]: unknown;
7336
+ classId: string;
7337
+ submissionId: string;
7338
+ prompt: string;
7339
+ studentId: string;
7340
+ dueDate?: string | undefined;
7341
+ };
7342
+ output: {
7343
+ assignment: {
7344
+ type: import(".prisma/client").$Enums.AssignmentType;
7345
+ class: {
7346
+ id: string;
7347
+ name: string;
7348
+ };
7349
+ section: {
7350
+ id: string;
7351
+ name: string;
7352
+ } | null;
7353
+ id: string;
7354
+ title: string;
7355
+ dueDate: Date;
7356
+ maxGrade: number | null;
7357
+ attachments: {
7358
+ type: string;
7359
+ id: string;
7360
+ name: string;
7361
+ }[];
7362
+ instructions: string;
7363
+ graded: boolean;
7364
+ weight: number;
7365
+ teacher: {
7366
+ id: string;
7367
+ username: string;
7368
+ };
7369
+ };
7370
+ draft: {
7371
+ title: string;
7372
+ instructions: string;
7373
+ };
7374
+ };
7375
+ meta: object;
7376
+ }>;
7289
7377
  chat: import("@trpc/server").TRPCMutationProcedure<{
7290
7378
  input: {
7291
7379
  [x: string]: unknown;
@@ -9868,6 +9956,14 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
9868
9956
  schools: number;
9869
9957
  users: number;
9870
9958
  verifiedUsers: number;
9959
+ suspectedUsers: number;
9960
+ cleanUsers: number;
9961
+ signupsLast24h: number;
9962
+ signupsLast7d: number;
9963
+ activeUsersLast24h: number;
9964
+ activeUsersLast7d: number;
9965
+ activeClassesLast7d: number;
9966
+ submissionsLast24h: number;
9871
9967
  classes: number;
9872
9968
  departments: number;
9873
9969
  runJobs: {
@@ -10076,6 +10172,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10076
10172
  };
10077
10173
  output: {
10078
10174
  items: {
10175
+ signals: import("../services/adminSpam.js").SpamSignals;
10079
10176
  type: string;
10080
10177
  status: string;
10081
10178
  id: string;
@@ -10110,6 +10207,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10110
10207
  };
10111
10208
  output: {
10112
10209
  items: {
10210
+ signals: import("../services/adminSpam.js").SpamSignals;
10113
10211
  id: string;
10114
10212
  createdAt: Date;
10115
10213
  email: string;
@@ -10124,12 +10222,19 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10124
10222
  }>;
10125
10223
  searchUsers: import("@trpc/server").TRPCQueryProcedure<{
10126
10224
  input: {
10225
+ sort?: "username" | "recent" | "activity" | undefined;
10127
10226
  query?: string | undefined;
10227
+ verified?: boolean | undefined;
10228
+ schoolId?: string | undefined;
10128
10229
  page?: number | undefined;
10230
+ activity?: "active" | "all" | "inactive" | undefined;
10129
10231
  pageSize?: number | undefined;
10232
+ emailDomain?: string | undefined;
10233
+ spam?: "all" | "suspected" | "clean" | undefined;
10130
10234
  };
10131
10235
  output: {
10132
10236
  items: {
10237
+ signals: import("../services/adminSpam.js").SpamSignals;
10133
10238
  school: {
10134
10239
  id: string;
10135
10240
  name: string;
@@ -10138,9 +10243,13 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10138
10243
  username: string;
10139
10244
  email: string;
10140
10245
  verified: boolean;
10246
+ profile: {
10247
+ createdAt: Date;
10248
+ } | null;
10141
10249
  _count: {
10142
10250
  teacherIn: number;
10143
10251
  studentIn: number;
10252
+ submissions: number;
10144
10253
  sessions: number;
10145
10254
  };
10146
10255
  }[];
@@ -10156,6 +10265,37 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10156
10265
  id: string;
10157
10266
  };
10158
10267
  output: {
10268
+ classes: {
10269
+ teaching: {
10270
+ school: {
10271
+ id: string;
10272
+ name: string;
10273
+ } | null;
10274
+ section: string;
10275
+ id: string;
10276
+ name: string;
10277
+ _count: {
10278
+ students: number;
10279
+ assignments: number;
10280
+ };
10281
+ subject: string;
10282
+ }[];
10283
+ enrolled: {
10284
+ school: {
10285
+ id: string;
10286
+ name: string;
10287
+ } | null;
10288
+ section: string;
10289
+ id: string;
10290
+ name: string;
10291
+ _count: {
10292
+ students: number;
10293
+ assignments: number;
10294
+ };
10295
+ subject: string;
10296
+ }[];
10297
+ };
10298
+ signals: import("../services/adminSpam.js").SpamSignals;
10159
10299
  school: {
10160
10300
  id: string;
10161
10301
  name: string;
@@ -10174,7 +10314,6 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10174
10314
  } | null;
10175
10315
  sessions: {
10176
10316
  type: import(".prisma/client").$Enums.SessionType;
10177
- id: string;
10178
10317
  createdAt: Date | null;
10179
10318
  expiresAt: Date | null;
10180
10319
  }[];
@@ -10198,69 +10337,314 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10198
10337
  };
10199
10338
  meta: object;
10200
10339
  }>;
10201
- }>>;
10202
- embedding: import("@trpc/server").TRPCBuiltRouter<{
10203
- ctx: import("../trpc.js").Context;
10204
- meta: object;
10205
- errorShape: {
10206
- data: {
10207
- zodError: import("zod").typeToFlattenedError<any, string> | null;
10208
- prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
10209
- code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
10210
- httpStatus: number;
10211
- path?: string;
10212
- stack?: string;
10213
- };
10214
- message: string;
10215
- code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
10216
- };
10217
- transformer: false;
10218
- }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
10219
- search: import("@trpc/server").TRPCQueryProcedure<{
10340
+ listClasses: import("@trpc/server").TRPCQueryProcedure<{
10220
10341
  input: {
10221
- query: string;
10222
- classId: string;
10223
- limit?: number | undefined;
10224
- sourceTypes?: ("FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS")[] | undefined;
10342
+ sort?: "name" | "students" | "assignments" | undefined;
10343
+ query?: string | undefined;
10344
+ schoolId?: string | undefined;
10345
+ page?: number | undefined;
10346
+ pageSize?: number | undefined;
10347
+ membership?: "all" | "populated" | "empty" | undefined;
10348
+ };
10349
+ output: {
10350
+ items: {
10351
+ lastAssignmentAt: Date | null;
10352
+ school: {
10353
+ id: string;
10354
+ name: string;
10355
+ } | null;
10356
+ department: {
10357
+ id: string;
10358
+ name: string;
10359
+ } | null;
10360
+ section: string;
10361
+ id: string;
10362
+ name: string;
10363
+ teachers: {
10364
+ id: string;
10365
+ username: string;
10366
+ }[];
10367
+ _count: {
10368
+ teachers: number;
10369
+ students: number;
10370
+ assignments: number;
10371
+ events: number;
10372
+ announcements: number;
10373
+ discussions: number;
10374
+ worksheets: number;
10375
+ modules: number;
10376
+ };
10377
+ subject: string;
10378
+ }[];
10379
+ total: number;
10380
+ page: number;
10381
+ pageSize: number;
10382
+ pageCount: number;
10225
10383
  };
10226
- output: import("../services/embedding.js").EmbeddingSearchResult[];
10227
10384
  meta: object;
10228
10385
  }>;
10229
- reindex: import("@trpc/server").TRPCMutationProcedure<{
10386
+ getClass: import("@trpc/server").TRPCQueryProcedure<{
10230
10387
  input: {
10231
- classId: string;
10232
- sourceType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS";
10233
- sourceId: string;
10388
+ id: string;
10234
10389
  };
10235
10390
  output: {
10236
- runJobId: string;
10391
+ teachers: {
10392
+ signals: import("../services/adminSpam.js").SpamSignals;
10393
+ submissionsInClass: number;
10394
+ id: string;
10395
+ username: string;
10396
+ email: string;
10397
+ verified: boolean;
10398
+ _count: {
10399
+ teacherIn: number;
10400
+ studentIn: number;
10401
+ submissions: number;
10402
+ };
10403
+ }[];
10404
+ students: {
10405
+ signals: import("../services/adminSpam.js").SpamSignals;
10406
+ submissionsInClass: number;
10407
+ id: string;
10408
+ username: string;
10409
+ email: string;
10410
+ verified: boolean;
10411
+ _count: {
10412
+ teacherIn: number;
10413
+ studentIn: number;
10414
+ submissions: number;
10415
+ };
10416
+ }[];
10417
+ announcements: {
10418
+ remarks: string;
10419
+ id: string;
10420
+ createdAt: Date;
10421
+ teacher: {
10422
+ id: string;
10423
+ username: string;
10424
+ };
10425
+ }[];
10426
+ suspectedMembers: number;
10427
+ school: {
10428
+ id: string;
10429
+ name: string;
10430
+ } | null;
10431
+ department: {
10432
+ id: string;
10433
+ name: string;
10434
+ } | null;
10435
+ section: string;
10436
+ id: string;
10437
+ name: string;
10438
+ assignments: {
10439
+ type: import(".prisma/client").$Enums.AssignmentType;
10440
+ id: string;
10441
+ createdAt: Date | null;
10442
+ _count: {
10443
+ submissions: number;
10444
+ };
10445
+ title: string;
10446
+ dueDate: Date;
10447
+ graded: boolean;
10448
+ teacher: {
10449
+ id: string;
10450
+ username: string;
10451
+ };
10452
+ }[];
10453
+ _count: {
10454
+ teachers: number;
10455
+ students: number;
10456
+ assignments: number;
10457
+ events: number;
10458
+ announcements: number;
10459
+ discussions: number;
10460
+ sections: number;
10461
+ worksheets: number;
10462
+ modules: number;
10463
+ };
10464
+ color: string | null;
10465
+ subject: string;
10237
10466
  };
10238
10467
  meta: object;
10239
10468
  }>;
10240
- indexAll: import("@trpc/server").TRPCMutationProcedure<{
10241
- input: {
10242
- classId: string;
10243
- };
10469
+ getContentTelemetry: import("@trpc/server").TRPCQueryProcedure<{
10470
+ input: void;
10244
10471
  output: {
10245
- queued: {
10472
+ content: {
10246
10473
  assignments: number;
10247
- worksheets: number;
10474
+ assignmentsLast7d: number;
10475
+ submissions: number;
10476
+ submissionsLast7d: number;
10477
+ gradedSubmissions: number;
10248
10478
  announcements: number;
10479
+ announcementsLast7d: number;
10249
10480
  discussions: number;
10250
- submissions: number;
10251
- syllabus: number;
10481
+ messages: number;
10482
+ messagesLast7d: number;
10483
+ worksheets: number;
10484
+ events: number;
10485
+ modules: number;
10252
10486
  files: number;
10487
+ storageBytes: number;
10488
+ };
10489
+ ai: {
10490
+ calls7d: number;
10491
+ failures7d: number;
10492
+ tokens7d: number;
10493
+ byModel: {
10494
+ model: string;
10495
+ calls: number;
10496
+ tokens: number;
10497
+ }[];
10498
+ };
10499
+ jobs: {
10500
+ failedLast24h: number;
10501
+ byType: {
10502
+ total: number;
10503
+ failed: number;
10504
+ type: string;
10505
+ }[];
10253
10506
  };
10254
10507
  };
10255
10508
  meta: object;
10256
10509
  }>;
10257
- }>>;
10258
- module: import("@trpc/server").TRPCBuiltRouter<{
10259
- ctx: import("../trpc.js").Context;
10260
- meta: object;
10261
- errorShape: {
10262
- data: {
10263
- zodError: import("zod").typeToFlattenedError<any, string> | null;
10510
+ getActivitySeries: import("@trpc/server").TRPCQueryProcedure<{
10511
+ input: {
10512
+ days?: number | undefined;
10513
+ };
10514
+ output: {
10515
+ points: import("../services/adminTelemetry.js").DailyPoint[];
10516
+ };
10517
+ meta: object;
10518
+ }>;
10519
+ listSqlSchema: import("@trpc/server").TRPCQueryProcedure<{
10520
+ input: void;
10521
+ output: {
10522
+ tables: import("../services/adminSql.js").AdminSqlTable[];
10523
+ };
10524
+ meta: object;
10525
+ }>;
10526
+ runSql: import("@trpc/server").TRPCMutationProcedure<{
10527
+ input: {
10528
+ sql: string;
10529
+ limit?: number | undefined;
10530
+ };
10531
+ output: import("../services/adminSql.js").AdminSqlResult;
10532
+ meta: object;
10533
+ }>;
10534
+ getSpamOverview: import("@trpc/server").TRPCQueryProcedure<{
10535
+ input: void;
10536
+ output: {
10537
+ rules: {
10538
+ blockedDomains: string[];
10539
+ botPatterns: string[];
10540
+ disposableDomains: string[];
10541
+ };
10542
+ totalUsers: number;
10543
+ suspectedUsers: number;
10544
+ suspectedVerified: number;
10545
+ cleanUsers: number;
10546
+ domains: {
10547
+ domain: string;
10548
+ total: number;
10549
+ verified: number;
10550
+ suspected: boolean;
10551
+ }[];
10552
+ recent: {
10553
+ signals: import("../services/adminSpam.js").SpamSignals;
10554
+ id: string;
10555
+ username: string;
10556
+ email: string;
10557
+ verified: boolean;
10558
+ profile: {
10559
+ createdAt: Date;
10560
+ } | null;
10561
+ _count: {
10562
+ teacherIn: number;
10563
+ studentIn: number;
10564
+ submissions: number;
10565
+ };
10566
+ }[];
10567
+ };
10568
+ meta: object;
10569
+ }>;
10570
+ listUserEmailDomains: import("@trpc/server").TRPCQueryProcedure<{
10571
+ input: {
10572
+ limit?: number | undefined;
10573
+ suspectedOnly?: boolean | undefined;
10574
+ };
10575
+ output: {
10576
+ items: {
10577
+ domain: string;
10578
+ total: number;
10579
+ verified: number;
10580
+ suspected: boolean;
10581
+ }[];
10582
+ };
10583
+ meta: object;
10584
+ }>;
10585
+ }>>;
10586
+ embedding: import("@trpc/server").TRPCBuiltRouter<{
10587
+ ctx: import("../trpc.js").Context;
10588
+ meta: object;
10589
+ errorShape: {
10590
+ data: {
10591
+ zodError: import("zod").typeToFlattenedError<any, string> | null;
10592
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
10593
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
10594
+ httpStatus: number;
10595
+ path?: string;
10596
+ stack?: string;
10597
+ };
10598
+ message: string;
10599
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
10600
+ };
10601
+ transformer: false;
10602
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
10603
+ search: import("@trpc/server").TRPCQueryProcedure<{
10604
+ input: {
10605
+ query: string;
10606
+ classId: string;
10607
+ limit?: number | undefined;
10608
+ sourceTypes?: ("FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS")[] | undefined;
10609
+ };
10610
+ output: import("../services/embedding.js").EmbeddingSearchResult[];
10611
+ meta: object;
10612
+ }>;
10613
+ reindex: import("@trpc/server").TRPCMutationProcedure<{
10614
+ input: {
10615
+ classId: string;
10616
+ sourceType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "SECTION" | "DISCUSSION" | "SUBMISSION" | "SYLLABUS";
10617
+ sourceId: string;
10618
+ };
10619
+ output: {
10620
+ runJobId: string;
10621
+ };
10622
+ meta: object;
10623
+ }>;
10624
+ indexAll: import("@trpc/server").TRPCMutationProcedure<{
10625
+ input: {
10626
+ classId: string;
10627
+ };
10628
+ output: {
10629
+ queued: {
10630
+ assignments: number;
10631
+ worksheets: number;
10632
+ announcements: number;
10633
+ discussions: number;
10634
+ submissions: number;
10635
+ syllabus: number;
10636
+ files: number;
10637
+ };
10638
+ };
10639
+ meta: object;
10640
+ }>;
10641
+ }>>;
10642
+ module: import("@trpc/server").TRPCBuiltRouter<{
10643
+ ctx: import("../trpc.js").Context;
10644
+ meta: object;
10645
+ errorShape: {
10646
+ data: {
10647
+ zodError: import("zod").typeToFlattenedError<any, string> | null;
10264
10648
  prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
10265
10649
  code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
10266
10650
  httpStatus: number;
@@ -10481,7 +10865,7 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
10481
10865
  [x: string]: unknown;
10482
10866
  classId: string;
10483
10867
  moduleId: string;
10484
- itemType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "DISCUSSION" | "EXTERNAL_URL" | "SUB_HEADER";
10868
+ itemType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "DISCUSSION" | "EXTERNAL_URL" | "SUB_HEADER" | "VISUALIZATION";
10485
10869
  title?: string | undefined;
10486
10870
  indent?: number | undefined;
10487
10871
  itemId?: string | undefined;
@@ -12327,6 +12711,24 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
12327
12711
  };
12328
12712
  meta: object;
12329
12713
  }>;
12714
+ addToStudent: import("@trpc/server").TRPCMutationProcedure<{
12715
+ input: {
12716
+ schoolId: string;
12717
+ studentUserId: string;
12718
+ parentIdentifier: string;
12719
+ };
12720
+ output: {
12721
+ link: {
12722
+ id: string;
12723
+ createdAt: Date;
12724
+ updatedAt: Date;
12725
+ schoolId: string;
12726
+ parentUserId: string;
12727
+ studentUserId: string;
12728
+ };
12729
+ };
12730
+ meta: object;
12731
+ }>;
12330
12732
  unlinkStudent: import("@trpc/server").TRPCMutationProcedure<{
12331
12733
  input: {
12332
12734
  schoolId: string;
@@ -12460,6 +12862,128 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
12460
12862
  meta: object;
12461
12863
  }>;
12462
12864
  }>>;
12865
+ visualization: import("@trpc/server").TRPCBuiltRouter<{
12866
+ ctx: import("../trpc.js").Context;
12867
+ meta: object;
12868
+ errorShape: {
12869
+ data: {
12870
+ zodError: import("zod").typeToFlattenedError<any, string> | null;
12871
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
12872
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
12873
+ httpStatus: number;
12874
+ path?: string;
12875
+ stack?: string;
12876
+ };
12877
+ message: string;
12878
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
12879
+ };
12880
+ transformer: false;
12881
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
12882
+ list: import("@trpc/server").TRPCQueryProcedure<{
12883
+ input: {
12884
+ [x: string]: unknown;
12885
+ classId: string;
12886
+ };
12887
+ output: {
12888
+ id: string;
12889
+ createdAt: Date;
12890
+ updatedAt: Date;
12891
+ classId: string;
12892
+ title: string;
12893
+ prompt: string | null;
12894
+ published: boolean;
12895
+ }[];
12896
+ meta: object;
12897
+ }>;
12898
+ get: import("@trpc/server").TRPCQueryProcedure<{
12899
+ input: {
12900
+ [x: string]: unknown;
12901
+ classId: string;
12902
+ id: string;
12903
+ };
12904
+ output: {
12905
+ id: string;
12906
+ createdAt: Date;
12907
+ updatedAt: Date;
12908
+ classId: string;
12909
+ title: string;
12910
+ prompt: string | null;
12911
+ published: boolean;
12912
+ html: string;
12913
+ };
12914
+ meta: object;
12915
+ }>;
12916
+ generate: import("@trpc/server").TRPCMutationProcedure<{
12917
+ input: {
12918
+ [x: string]: unknown;
12919
+ classId: string;
12920
+ prompt: string;
12921
+ title?: string | undefined;
12922
+ };
12923
+ output: {
12924
+ id: string;
12925
+ createdAt: Date;
12926
+ updatedAt: Date;
12927
+ classId: string;
12928
+ title: string;
12929
+ prompt: string | null;
12930
+ published: boolean;
12931
+ html: string;
12932
+ };
12933
+ meta: object;
12934
+ }>;
12935
+ revise: import("@trpc/server").TRPCMutationProcedure<{
12936
+ input: {
12937
+ [x: string]: unknown;
12938
+ classId: string;
12939
+ id: string;
12940
+ instruction: string;
12941
+ };
12942
+ output: {
12943
+ id: string;
12944
+ createdAt: Date;
12945
+ updatedAt: Date;
12946
+ classId: string;
12947
+ title: string;
12948
+ prompt: string | null;
12949
+ published: boolean;
12950
+ html: string;
12951
+ };
12952
+ meta: object;
12953
+ }>;
12954
+ update: import("@trpc/server").TRPCMutationProcedure<{
12955
+ input: {
12956
+ [x: string]: unknown;
12957
+ classId: string;
12958
+ id: string;
12959
+ title?: string | undefined;
12960
+ published?: boolean | undefined;
12961
+ html?: string | undefined;
12962
+ };
12963
+ output: {
12964
+ id: string;
12965
+ createdAt: Date;
12966
+ updatedAt: Date;
12967
+ classId: string;
12968
+ title: string;
12969
+ prompt: string | null;
12970
+ published: boolean;
12971
+ html: string;
12972
+ };
12973
+ meta: object;
12974
+ }>;
12975
+ delete: import("@trpc/server").TRPCMutationProcedure<{
12976
+ input: {
12977
+ [x: string]: unknown;
12978
+ classId: string;
12979
+ id: string;
12980
+ };
12981
+ output: {
12982
+ id: string;
12983
+ };
12984
+ meta: object;
12985
+ }>;
12986
+ }>>;
12463
12987
  }>>;
12464
12988
  export type AppRouter = typeof appRouter;
12465
12989
  export type RouterInputs = inferRouterInputs<AppRouter>;
@@ -18041,6 +18565,7 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18041
18565
  content: string;
18042
18566
  senderId: string;
18043
18567
  conversationId: string;
18568
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
18044
18569
  runJobId: string | null;
18045
18570
  };
18046
18571
  unreadCount: number;
@@ -18252,6 +18777,7 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18252
18777
  } | null;
18253
18778
  };
18254
18779
  status: import(".prisma/client").$Enums.JobStatus | null;
18780
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
18255
18781
  attachments: {
18256
18782
  path: string;
18257
18783
  type: string;
@@ -18382,6 +18908,15 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18382
18908
  };
18383
18909
  meta: object;
18384
18910
  }>;
18911
+ cancelAiGeneration: import("@trpc/server").TRPCMutationProcedure<{
18912
+ input: {
18913
+ messageId: string;
18914
+ };
18915
+ output: {
18916
+ success: boolean;
18917
+ };
18918
+ meta: object;
18919
+ }>;
18385
18920
  markAsRead: import("@trpc/server").TRPCMutationProcedure<{
18386
18921
  input: {
18387
18922
  conversationId: string;
@@ -18400,14 +18935,15 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18400
18935
  };
18401
18936
  meta: object;
18402
18937
  }>;
18403
- markSuggestionCreated: import("@trpc/server").TRPCMutationProcedure<{
18938
+ resolveAiProposal: import("@trpc/server").TRPCMutationProcedure<{
18404
18939
  input: {
18405
- type: "assignment" | "section" | "worksheet";
18406
18940
  messageId: string;
18407
- index: number;
18941
+ proposalId: string;
18942
+ action: "approve" | "dismiss";
18408
18943
  };
18409
18944
  output: {
18410
- success: boolean;
18945
+ status: import("../services/aiProposals.js").PendingCreationStatus;
18946
+ createdId: string | null;
18411
18947
  };
18412
18948
  meta: object;
18413
18949
  }>;
@@ -18421,21 +18957,43 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18421
18957
  };
18422
18958
  meta: object;
18423
18959
  }>;
18424
- }>>;
18425
- labChat: import("@trpc/server").TRPCBuiltRouter<{
18426
- ctx: import("../trpc.js").Context;
18427
- meta: object;
18428
- errorShape: {
18429
- data: {
18430
- zodError: import("zod").typeToFlattenedError<any, string> | null;
18431
- prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
18432
- code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
18433
- httpStatus: number;
18434
- path?: string;
18435
- stack?: string;
18960
+ regenerateAIResponse: import("@trpc/server").TRPCMutationProcedure<{
18961
+ input: {
18962
+ messageId: string;
18436
18963
  };
18437
- message: string;
18438
- code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
18964
+ output: {
18965
+ success: boolean;
18966
+ messageId: string;
18967
+ };
18968
+ meta: object;
18969
+ }>;
18970
+ setAIFeedback: import("@trpc/server").TRPCMutationProcedure<{
18971
+ input: {
18972
+ feedback: "UP" | "DOWN" | null;
18973
+ messageId: string;
18974
+ };
18975
+ output: {
18976
+ success: boolean;
18977
+ messageId: string;
18978
+ feedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
18979
+ };
18980
+ meta: object;
18981
+ }>;
18982
+ }>>;
18983
+ labChat: import("@trpc/server").TRPCBuiltRouter<{
18984
+ ctx: import("../trpc.js").Context;
18985
+ meta: object;
18986
+ errorShape: {
18987
+ data: {
18988
+ zodError: import("zod").typeToFlattenedError<any, string> | null;
18989
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
18990
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
18991
+ httpStatus: number;
18992
+ path?: string;
18993
+ stack?: string;
18994
+ };
18995
+ message: string;
18996
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
18439
18997
  };
18440
18998
  transformer: false;
18441
18999
  }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
@@ -18592,12 +19150,22 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
18592
19150
  content: string;
18593
19151
  senderId: string;
18594
19152
  conversationId: string;
19153
+ aiFeedback: import(".prisma/client").$Enums.AiMessageFeedback | null;
18595
19154
  runJobId: string | null;
18596
19155
  };
18597
19156
  messageCount: number;
18598
19157
  }[];
18599
19158
  meta: object;
18600
19159
  }>;
19160
+ starterPrompts: import("@trpc/server").TRPCQueryProcedure<{
19161
+ input: {
19162
+ classId: string;
19163
+ };
19164
+ output: {
19165
+ prompts: string[];
19166
+ };
19167
+ meta: object;
19168
+ }>;
18601
19169
  postToLabChat: import("@trpc/server").TRPCMutationProcedure<{
18602
19170
  input: {
18603
19171
  content: string;
@@ -19751,6 +20319,50 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
19751
20319
  };
19752
20320
  meta: object;
19753
20321
  }>;
20322
+ generateFollowUpAssignment: import("@trpc/server").TRPCMutationProcedure<{
20323
+ input: {
20324
+ [x: string]: unknown;
20325
+ classId: string;
20326
+ submissionId: string;
20327
+ prompt: string;
20328
+ studentId: string;
20329
+ dueDate?: string | undefined;
20330
+ };
20331
+ output: {
20332
+ assignment: {
20333
+ type: import(".prisma/client").$Enums.AssignmentType;
20334
+ class: {
20335
+ id: string;
20336
+ name: string;
20337
+ };
20338
+ section: {
20339
+ id: string;
20340
+ name: string;
20341
+ } | null;
20342
+ id: string;
20343
+ title: string;
20344
+ dueDate: Date;
20345
+ maxGrade: number | null;
20346
+ attachments: {
20347
+ type: string;
20348
+ id: string;
20349
+ name: string;
20350
+ }[];
20351
+ instructions: string;
20352
+ graded: boolean;
20353
+ weight: number;
20354
+ teacher: {
20355
+ id: string;
20356
+ username: string;
20357
+ };
20358
+ };
20359
+ draft: {
20360
+ title: string;
20361
+ instructions: string;
20362
+ };
20363
+ };
20364
+ meta: object;
20365
+ }>;
19754
20366
  chat: import("@trpc/server").TRPCMutationProcedure<{
19755
20367
  input: {
19756
20368
  [x: string]: unknown;
@@ -22333,6 +22945,14 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22333
22945
  schools: number;
22334
22946
  users: number;
22335
22947
  verifiedUsers: number;
22948
+ suspectedUsers: number;
22949
+ cleanUsers: number;
22950
+ signupsLast24h: number;
22951
+ signupsLast7d: number;
22952
+ activeUsersLast24h: number;
22953
+ activeUsersLast7d: number;
22954
+ activeClassesLast7d: number;
22955
+ submissionsLast24h: number;
22336
22956
  classes: number;
22337
22957
  departments: number;
22338
22958
  runJobs: {
@@ -22541,6 +23161,7 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22541
23161
  };
22542
23162
  output: {
22543
23163
  items: {
23164
+ signals: import("../services/adminSpam.js").SpamSignals;
22544
23165
  type: string;
22545
23166
  status: string;
22546
23167
  id: string;
@@ -22575,6 +23196,7 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22575
23196
  };
22576
23197
  output: {
22577
23198
  items: {
23199
+ signals: import("../services/adminSpam.js").SpamSignals;
22578
23200
  id: string;
22579
23201
  createdAt: Date;
22580
23202
  email: string;
@@ -22589,12 +23211,19 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22589
23211
  }>;
22590
23212
  searchUsers: import("@trpc/server").TRPCQueryProcedure<{
22591
23213
  input: {
23214
+ sort?: "username" | "recent" | "activity" | undefined;
22592
23215
  query?: string | undefined;
23216
+ verified?: boolean | undefined;
23217
+ schoolId?: string | undefined;
22593
23218
  page?: number | undefined;
23219
+ activity?: "active" | "all" | "inactive" | undefined;
22594
23220
  pageSize?: number | undefined;
23221
+ emailDomain?: string | undefined;
23222
+ spam?: "all" | "suspected" | "clean" | undefined;
22595
23223
  };
22596
23224
  output: {
22597
23225
  items: {
23226
+ signals: import("../services/adminSpam.js").SpamSignals;
22598
23227
  school: {
22599
23228
  id: string;
22600
23229
  name: string;
@@ -22603,9 +23232,13 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22603
23232
  username: string;
22604
23233
  email: string;
22605
23234
  verified: boolean;
23235
+ profile: {
23236
+ createdAt: Date;
23237
+ } | null;
22606
23238
  _count: {
22607
23239
  teacherIn: number;
22608
23240
  studentIn: number;
23241
+ submissions: number;
22609
23242
  sessions: number;
22610
23243
  };
22611
23244
  }[];
@@ -22621,6 +23254,37 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22621
23254
  id: string;
22622
23255
  };
22623
23256
  output: {
23257
+ classes: {
23258
+ teaching: {
23259
+ school: {
23260
+ id: string;
23261
+ name: string;
23262
+ } | null;
23263
+ section: string;
23264
+ id: string;
23265
+ name: string;
23266
+ _count: {
23267
+ students: number;
23268
+ assignments: number;
23269
+ };
23270
+ subject: string;
23271
+ }[];
23272
+ enrolled: {
23273
+ school: {
23274
+ id: string;
23275
+ name: string;
23276
+ } | null;
23277
+ section: string;
23278
+ id: string;
23279
+ name: string;
23280
+ _count: {
23281
+ students: number;
23282
+ assignments: number;
23283
+ };
23284
+ subject: string;
23285
+ }[];
23286
+ };
23287
+ signals: import("../services/adminSpam.js").SpamSignals;
22624
23288
  school: {
22625
23289
  id: string;
22626
23290
  name: string;
@@ -22639,7 +23303,6 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22639
23303
  } | null;
22640
23304
  sessions: {
22641
23305
  type: import(".prisma/client").$Enums.SessionType;
22642
- id: string;
22643
23306
  createdAt: Date | null;
22644
23307
  expiresAt: Date | null;
22645
23308
  }[];
@@ -22663,6 +23326,251 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22663
23326
  };
22664
23327
  meta: object;
22665
23328
  }>;
23329
+ listClasses: import("@trpc/server").TRPCQueryProcedure<{
23330
+ input: {
23331
+ sort?: "name" | "students" | "assignments" | undefined;
23332
+ query?: string | undefined;
23333
+ schoolId?: string | undefined;
23334
+ page?: number | undefined;
23335
+ pageSize?: number | undefined;
23336
+ membership?: "all" | "populated" | "empty" | undefined;
23337
+ };
23338
+ output: {
23339
+ items: {
23340
+ lastAssignmentAt: Date | null;
23341
+ school: {
23342
+ id: string;
23343
+ name: string;
23344
+ } | null;
23345
+ department: {
23346
+ id: string;
23347
+ name: string;
23348
+ } | null;
23349
+ section: string;
23350
+ id: string;
23351
+ name: string;
23352
+ teachers: {
23353
+ id: string;
23354
+ username: string;
23355
+ }[];
23356
+ _count: {
23357
+ teachers: number;
23358
+ students: number;
23359
+ assignments: number;
23360
+ events: number;
23361
+ announcements: number;
23362
+ discussions: number;
23363
+ worksheets: number;
23364
+ modules: number;
23365
+ };
23366
+ subject: string;
23367
+ }[];
23368
+ total: number;
23369
+ page: number;
23370
+ pageSize: number;
23371
+ pageCount: number;
23372
+ };
23373
+ meta: object;
23374
+ }>;
23375
+ getClass: import("@trpc/server").TRPCQueryProcedure<{
23376
+ input: {
23377
+ id: string;
23378
+ };
23379
+ output: {
23380
+ teachers: {
23381
+ signals: import("../services/adminSpam.js").SpamSignals;
23382
+ submissionsInClass: number;
23383
+ id: string;
23384
+ username: string;
23385
+ email: string;
23386
+ verified: boolean;
23387
+ _count: {
23388
+ teacherIn: number;
23389
+ studentIn: number;
23390
+ submissions: number;
23391
+ };
23392
+ }[];
23393
+ students: {
23394
+ signals: import("../services/adminSpam.js").SpamSignals;
23395
+ submissionsInClass: number;
23396
+ id: string;
23397
+ username: string;
23398
+ email: string;
23399
+ verified: boolean;
23400
+ _count: {
23401
+ teacherIn: number;
23402
+ studentIn: number;
23403
+ submissions: number;
23404
+ };
23405
+ }[];
23406
+ announcements: {
23407
+ remarks: string;
23408
+ id: string;
23409
+ createdAt: Date;
23410
+ teacher: {
23411
+ id: string;
23412
+ username: string;
23413
+ };
23414
+ }[];
23415
+ suspectedMembers: number;
23416
+ school: {
23417
+ id: string;
23418
+ name: string;
23419
+ } | null;
23420
+ department: {
23421
+ id: string;
23422
+ name: string;
23423
+ } | null;
23424
+ section: string;
23425
+ id: string;
23426
+ name: string;
23427
+ assignments: {
23428
+ type: import(".prisma/client").$Enums.AssignmentType;
23429
+ id: string;
23430
+ createdAt: Date | null;
23431
+ _count: {
23432
+ submissions: number;
23433
+ };
23434
+ title: string;
23435
+ dueDate: Date;
23436
+ graded: boolean;
23437
+ teacher: {
23438
+ id: string;
23439
+ username: string;
23440
+ };
23441
+ }[];
23442
+ _count: {
23443
+ teachers: number;
23444
+ students: number;
23445
+ assignments: number;
23446
+ events: number;
23447
+ announcements: number;
23448
+ discussions: number;
23449
+ sections: number;
23450
+ worksheets: number;
23451
+ modules: number;
23452
+ };
23453
+ color: string | null;
23454
+ subject: string;
23455
+ };
23456
+ meta: object;
23457
+ }>;
23458
+ getContentTelemetry: import("@trpc/server").TRPCQueryProcedure<{
23459
+ input: void;
23460
+ output: {
23461
+ content: {
23462
+ assignments: number;
23463
+ assignmentsLast7d: number;
23464
+ submissions: number;
23465
+ submissionsLast7d: number;
23466
+ gradedSubmissions: number;
23467
+ announcements: number;
23468
+ announcementsLast7d: number;
23469
+ discussions: number;
23470
+ messages: number;
23471
+ messagesLast7d: number;
23472
+ worksheets: number;
23473
+ events: number;
23474
+ modules: number;
23475
+ files: number;
23476
+ storageBytes: number;
23477
+ };
23478
+ ai: {
23479
+ calls7d: number;
23480
+ failures7d: number;
23481
+ tokens7d: number;
23482
+ byModel: {
23483
+ model: string;
23484
+ calls: number;
23485
+ tokens: number;
23486
+ }[];
23487
+ };
23488
+ jobs: {
23489
+ failedLast24h: number;
23490
+ byType: {
23491
+ total: number;
23492
+ failed: number;
23493
+ type: string;
23494
+ }[];
23495
+ };
23496
+ };
23497
+ meta: object;
23498
+ }>;
23499
+ getActivitySeries: import("@trpc/server").TRPCQueryProcedure<{
23500
+ input: {
23501
+ days?: number | undefined;
23502
+ };
23503
+ output: {
23504
+ points: import("../services/adminTelemetry.js").DailyPoint[];
23505
+ };
23506
+ meta: object;
23507
+ }>;
23508
+ listSqlSchema: import("@trpc/server").TRPCQueryProcedure<{
23509
+ input: void;
23510
+ output: {
23511
+ tables: import("../services/adminSql.js").AdminSqlTable[];
23512
+ };
23513
+ meta: object;
23514
+ }>;
23515
+ runSql: import("@trpc/server").TRPCMutationProcedure<{
23516
+ input: {
23517
+ sql: string;
23518
+ limit?: number | undefined;
23519
+ };
23520
+ output: import("../services/adminSql.js").AdminSqlResult;
23521
+ meta: object;
23522
+ }>;
23523
+ getSpamOverview: import("@trpc/server").TRPCQueryProcedure<{
23524
+ input: void;
23525
+ output: {
23526
+ rules: {
23527
+ blockedDomains: string[];
23528
+ botPatterns: string[];
23529
+ disposableDomains: string[];
23530
+ };
23531
+ totalUsers: number;
23532
+ suspectedUsers: number;
23533
+ suspectedVerified: number;
23534
+ cleanUsers: number;
23535
+ domains: {
23536
+ domain: string;
23537
+ total: number;
23538
+ verified: number;
23539
+ suspected: boolean;
23540
+ }[];
23541
+ recent: {
23542
+ signals: import("../services/adminSpam.js").SpamSignals;
23543
+ id: string;
23544
+ username: string;
23545
+ email: string;
23546
+ verified: boolean;
23547
+ profile: {
23548
+ createdAt: Date;
23549
+ } | null;
23550
+ _count: {
23551
+ teacherIn: number;
23552
+ studentIn: number;
23553
+ submissions: number;
23554
+ };
23555
+ }[];
23556
+ };
23557
+ meta: object;
23558
+ }>;
23559
+ listUserEmailDomains: import("@trpc/server").TRPCQueryProcedure<{
23560
+ input: {
23561
+ limit?: number | undefined;
23562
+ suspectedOnly?: boolean | undefined;
23563
+ };
23564
+ output: {
23565
+ items: {
23566
+ domain: string;
23567
+ total: number;
23568
+ verified: number;
23569
+ suspected: boolean;
23570
+ }[];
23571
+ };
23572
+ meta: object;
23573
+ }>;
22666
23574
  }>>;
22667
23575
  embedding: import("@trpc/server").TRPCBuiltRouter<{
22668
23576
  ctx: import("../trpc.js").Context;
@@ -22946,7 +23854,7 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
22946
23854
  [x: string]: unknown;
22947
23855
  classId: string;
22948
23856
  moduleId: string;
22949
- itemType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "DISCUSSION" | "EXTERNAL_URL" | "SUB_HEADER";
23857
+ itemType: "FILE" | "ASSIGNMENT" | "WORKSHEET" | "ANNOUNCEMENT" | "DISCUSSION" | "EXTERNAL_URL" | "SUB_HEADER" | "VISUALIZATION";
22950
23858
  title?: string | undefined;
22951
23859
  indent?: number | undefined;
22952
23860
  itemId?: string | undefined;
@@ -24792,6 +25700,24 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
24792
25700
  };
24793
25701
  meta: object;
24794
25702
  }>;
25703
+ addToStudent: import("@trpc/server").TRPCMutationProcedure<{
25704
+ input: {
25705
+ schoolId: string;
25706
+ studentUserId: string;
25707
+ parentIdentifier: string;
25708
+ };
25709
+ output: {
25710
+ link: {
25711
+ id: string;
25712
+ createdAt: Date;
25713
+ updatedAt: Date;
25714
+ schoolId: string;
25715
+ parentUserId: string;
25716
+ studentUserId: string;
25717
+ };
25718
+ };
25719
+ meta: object;
25720
+ }>;
24795
25721
  unlinkStudent: import("@trpc/server").TRPCMutationProcedure<{
24796
25722
  input: {
24797
25723
  schoolId: string;
@@ -24925,5 +25851,127 @@ export declare const createCaller: import("@trpc/server").TRPCRouterCaller<{
24925
25851
  meta: object;
24926
25852
  }>;
24927
25853
  }>>;
25854
+ visualization: import("@trpc/server").TRPCBuiltRouter<{
25855
+ ctx: import("../trpc.js").Context;
25856
+ meta: object;
25857
+ errorShape: {
25858
+ data: {
25859
+ zodError: import("zod").typeToFlattenedError<any, string> | null;
25860
+ prismaError: import("../utils/prismaErrorHandler.js").PrismaErrorInfo | null;
25861
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
25862
+ httpStatus: number;
25863
+ path?: string;
25864
+ stack?: string;
25865
+ };
25866
+ message: string;
25867
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
25868
+ };
25869
+ transformer: false;
25870
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
25871
+ list: import("@trpc/server").TRPCQueryProcedure<{
25872
+ input: {
25873
+ [x: string]: unknown;
25874
+ classId: string;
25875
+ };
25876
+ output: {
25877
+ id: string;
25878
+ createdAt: Date;
25879
+ updatedAt: Date;
25880
+ classId: string;
25881
+ title: string;
25882
+ prompt: string | null;
25883
+ published: boolean;
25884
+ }[];
25885
+ meta: object;
25886
+ }>;
25887
+ get: import("@trpc/server").TRPCQueryProcedure<{
25888
+ input: {
25889
+ [x: string]: unknown;
25890
+ classId: string;
25891
+ id: string;
25892
+ };
25893
+ output: {
25894
+ id: string;
25895
+ createdAt: Date;
25896
+ updatedAt: Date;
25897
+ classId: string;
25898
+ title: string;
25899
+ prompt: string | null;
25900
+ published: boolean;
25901
+ html: string;
25902
+ };
25903
+ meta: object;
25904
+ }>;
25905
+ generate: import("@trpc/server").TRPCMutationProcedure<{
25906
+ input: {
25907
+ [x: string]: unknown;
25908
+ classId: string;
25909
+ prompt: string;
25910
+ title?: string | undefined;
25911
+ };
25912
+ output: {
25913
+ id: string;
25914
+ createdAt: Date;
25915
+ updatedAt: Date;
25916
+ classId: string;
25917
+ title: string;
25918
+ prompt: string | null;
25919
+ published: boolean;
25920
+ html: string;
25921
+ };
25922
+ meta: object;
25923
+ }>;
25924
+ revise: import("@trpc/server").TRPCMutationProcedure<{
25925
+ input: {
25926
+ [x: string]: unknown;
25927
+ classId: string;
25928
+ id: string;
25929
+ instruction: string;
25930
+ };
25931
+ output: {
25932
+ id: string;
25933
+ createdAt: Date;
25934
+ updatedAt: Date;
25935
+ classId: string;
25936
+ title: string;
25937
+ prompt: string | null;
25938
+ published: boolean;
25939
+ html: string;
25940
+ };
25941
+ meta: object;
25942
+ }>;
25943
+ update: import("@trpc/server").TRPCMutationProcedure<{
25944
+ input: {
25945
+ [x: string]: unknown;
25946
+ classId: string;
25947
+ id: string;
25948
+ title?: string | undefined;
25949
+ published?: boolean | undefined;
25950
+ html?: string | undefined;
25951
+ };
25952
+ output: {
25953
+ id: string;
25954
+ createdAt: Date;
25955
+ updatedAt: Date;
25956
+ classId: string;
25957
+ title: string;
25958
+ prompt: string | null;
25959
+ published: boolean;
25960
+ html: string;
25961
+ };
25962
+ meta: object;
25963
+ }>;
25964
+ delete: import("@trpc/server").TRPCMutationProcedure<{
25965
+ input: {
25966
+ [x: string]: unknown;
25967
+ classId: string;
25968
+ id: string;
25969
+ };
25970
+ output: {
25971
+ id: string;
25972
+ };
25973
+ meta: object;
25974
+ }>;
25975
+ }>>;
24928
25976
  }>>;
24929
25977
  //# sourceMappingURL=_app.d.ts.map