@studious-lms/server 1.14.0 → 1.15.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.
- package/.github/workflows/deploy.yml +1 -1
- package/dist/instrument.js +3 -3
- package/dist/instrument.js.map +1 -1
- package/dist/lib/inferDocumentFormat.d.ts +10 -0
- package/dist/lib/inferDocumentFormat.d.ts.map +1 -0
- package/dist/lib/inferDocumentFormat.js +48 -0
- package/dist/lib/inferDocumentFormat.js.map +1 -0
- package/dist/lib/legal.d.ts +3 -0
- package/dist/lib/legal.d.ts.map +1 -0
- package/dist/lib/legal.js +6 -0
- package/dist/lib/legal.js.map +1 -0
- package/dist/models/announcement.d.ts +47 -45
- package/dist/models/announcement.d.ts.map +1 -1
- package/dist/models/assignment.d.ts +75 -75
- package/dist/models/auth.d.ts +8 -0
- package/dist/models/auth.d.ts.map +1 -1
- package/dist/models/auth.js +4 -2
- package/dist/models/auth.js.map +1 -1
- package/dist/models/class.d.ts +13 -13
- package/dist/models/comment.d.ts +6 -6
- package/dist/models/conversation.d.ts +23 -23
- package/dist/models/event.d.ts +20 -18
- package/dist/models/event.d.ts.map +1 -1
- package/dist/models/file.d.ts +33 -9
- package/dist/models/file.d.ts.map +1 -1
- package/dist/models/labChat.d.ts +4 -4
- package/dist/models/marketing.d.ts +2 -15
- package/dist/models/marketing.d.ts.map +1 -1
- package/dist/models/marketing.js +12 -4
- package/dist/models/marketing.js.map +1 -1
- package/dist/models/message.d.ts +13 -13
- package/dist/models/newtonChat.d.ts +3 -3
- package/dist/models/notification.d.ts +4 -4
- package/dist/models/worksheet.d.ts +121 -121
- package/dist/pipelines/aiLabChat.d.ts +7 -1
- package/dist/pipelines/aiLabChat.d.ts.map +1 -1
- package/dist/pipelines/aiLabChat.js +153 -67
- package/dist/pipelines/aiLabChat.js.map +1 -1
- package/dist/pipelines/aiLabChatContract.d.ts +34 -195
- package/dist/pipelines/aiLabChatContract.d.ts.map +1 -1
- package/dist/pipelines/aiLabChatContract.js +9 -19
- package/dist/pipelines/aiLabChatContract.js.map +1 -1
- package/dist/pipelines/gradeWorksheet.d.ts +6 -6
- package/dist/pipelines/labChatPrompt.d.ts +8 -3
- package/dist/pipelines/labChatPrompt.d.ts.map +1 -1
- package/dist/pipelines/labChatPrompt.js +52 -14
- package/dist/pipelines/labChatPrompt.js.map +1 -1
- package/dist/pipelines/pdfToWorksheet.d.ts +1 -1
- package/dist/routers/_app.d.ts +750 -546
- package/dist/routers/_app.d.ts.map +1 -1
- package/dist/routers/announcement.d.ts +40 -40
- package/dist/routers/assignment.d.ts +131 -121
- package/dist/routers/assignment.d.ts.map +1 -1
- package/dist/routers/auth.d.ts +2 -0
- package/dist/routers/auth.d.ts.map +1 -1
- package/dist/routers/auth.js +15 -2
- package/dist/routers/auth.js.map +1 -1
- package/dist/routers/class.d.ts +12 -8
- package/dist/routers/class.d.ts.map +1 -1
- package/dist/routers/comment.d.ts +5 -5
- package/dist/routers/conversation.d.ts +6 -6
- package/dist/routers/discussion.d.ts +3 -3
- package/dist/routers/embedding.d.ts +6 -2
- package/dist/routers/embedding.d.ts.map +1 -1
- package/dist/routers/embedding.js +44 -36
- package/dist/routers/embedding.js.map +1 -1
- package/dist/routers/event.d.ts +20 -18
- package/dist/routers/event.d.ts.map +1 -1
- package/dist/routers/file.d.ts +2 -2
- package/dist/routers/labChat.d.ts +3 -3
- package/dist/routers/marketing.d.ts +0 -13
- package/dist/routers/marketing.d.ts.map +1 -1
- package/dist/routers/notifications.d.ts +4 -4
- package/dist/routers/school.d.ts +4 -0
- package/dist/routers/school.d.ts.map +1 -1
- package/dist/routers/search.d.ts +2 -2
- package/dist/routers/user.d.ts +89 -0
- package/dist/routers/user.d.ts.map +1 -1
- package/dist/routers/user.js +19 -2
- package/dist/routers/user.js.map +1 -1
- package/dist/routers/worksheet.d.ts +44 -44
- package/dist/routes/aiStream.d.ts.map +1 -1
- package/dist/routes/aiStream.js +41 -11
- package/dist/routes/aiStream.js.map +1 -1
- package/dist/seedDatabase.d.ts +3 -1
- package/dist/seedDatabase.d.ts.map +1 -1
- package/dist/services/aiChatStream.d.ts +20 -0
- package/dist/services/aiChatStream.d.ts.map +1 -1
- package/dist/services/aiChatStream.js +110 -13
- package/dist/services/aiChatStream.js.map +1 -1
- package/dist/services/aiModifierTools.d.ts +0 -16
- package/dist/services/aiModifierTools.d.ts.map +1 -1
- package/dist/services/aiModifierTools.js +112 -3
- package/dist/services/aiModifierTools.js.map +1 -1
- package/dist/services/aiProposalTools.d.ts.map +1 -1
- package/dist/services/aiProposalTools.js +25 -25
- package/dist/services/aiProposalTools.js.map +1 -1
- package/dist/services/aiTools.js +3 -3
- package/dist/services/aiTools.js.map +1 -1
- package/dist/services/announcement.d.ts +34 -34
- package/dist/services/assignment.d.ts +121 -111
- package/dist/services/assignment.d.ts.map +1 -1
- package/dist/services/assignment.js +4 -2
- package/dist/services/assignment.js.map +1 -1
- package/dist/services/auth.d.ts +2 -0
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +13 -4
- package/dist/services/auth.js.map +1 -1
- package/dist/services/class.d.ts +10 -6
- package/dist/services/class.d.ts.map +1 -1
- package/dist/services/class.js +7 -3
- package/dist/services/class.js.map +1 -1
- package/dist/services/comment.d.ts +5 -5
- package/dist/services/conversation.d.ts +6 -6
- package/dist/services/discussion.d.ts.map +1 -1
- package/dist/services/discussion.js +9 -2
- package/dist/services/discussion.js.map +1 -1
- package/dist/services/embedding.d.ts +19 -1
- package/dist/services/embedding.d.ts.map +1 -1
- package/dist/services/embedding.js +154 -8
- package/dist/services/embedding.js.map +1 -1
- package/dist/services/event.d.ts +20 -18
- package/dist/services/event.d.ts.map +1 -1
- package/dist/services/file.d.ts +4 -4
- package/dist/services/folder.d.ts.map +1 -1
- package/dist/services/folder.js +32 -2
- package/dist/services/folder.js.map +1 -1
- package/dist/services/labChat.d.ts +3 -3
- package/dist/services/marketing.d.ts +1 -14
- package/dist/services/marketing.d.ts.map +1 -1
- package/dist/services/marketing.js +5 -5
- package/dist/services/marketing.js.map +1 -1
- package/dist/services/notification.d.ts +4 -4
- package/dist/services/openaiDocumentGen.d.ts +37 -0
- package/dist/services/openaiDocumentGen.d.ts.map +1 -0
- package/dist/services/openaiDocumentGen.js +262 -0
- package/dist/services/openaiDocumentGen.js.map +1 -0
- package/dist/services/school.d.ts +4 -0
- package/dist/services/school.d.ts.map +1 -1
- package/dist/services/search.d.ts +1 -1
- package/dist/services/search.d.ts.map +1 -1
- package/dist/services/search.js +27 -2
- package/dist/services/search.js.map +1 -1
- package/dist/services/userPrivacy.d.ts +86 -0
- package/dist/services/userPrivacy.d.ts.map +1 -0
- package/dist/services/userPrivacy.js +184 -0
- package/dist/services/userPrivacy.js.map +1 -0
- package/dist/services/worksheet.d.ts +66 -49
- package/dist/services/worksheet.d.ts.map +1 -1
- package/dist/services/worksheet.js +48 -3
- package/dist/services/worksheet.js.map +1 -1
- package/dist/utils/email.d.ts.map +1 -1
- package/dist/utils/email.js +7 -3
- package/dist/utils/email.js.map +1 -1
- package/dist/workers/processors/embedContent.d.ts.map +1 -1
- package/dist/workers/processors/embedContent.js +16 -25
- package/dist/workers/processors/embedContent.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20260610140000_expand_embedding_source_types/migration.sql +4 -0
- package/prisma/migrations/20260611120000_add_user_terms_acceptance/migration.sql +3 -0
- package/prisma/schema.prisma +6 -0
- package/src/instrument.ts +1 -1
- package/src/lib/inferDocumentFormat.ts +58 -0
- package/src/lib/legal.ts +2 -0
- package/src/models/auth.ts +4 -0
- package/src/models/marketing.ts +10 -2
- package/src/pipelines/aiLabChat.ts +198 -74
- package/src/pipelines/aiLabChatContract.ts +7 -17
- package/src/pipelines/labChatPrompt.ts +64 -14
- package/src/routers/auth.ts +13 -0
- package/src/routers/embedding.ts +44 -39
- package/src/routers/user.ts +26 -0
- package/src/routes/aiStream.ts +47 -9
- package/src/services/aiChatStream.ts +133 -11
- package/src/services/aiModifierTools.ts +154 -1
- package/src/services/aiProposalTools.ts +27 -25
- package/src/services/aiTools.ts +1 -1
- package/src/services/assignment.ts +3 -0
- package/src/services/auth.ts +14 -2
- package/src/services/class.ts +7 -1
- package/src/services/discussion.ts +13 -0
- package/src/services/embedding.ts +167 -6
- package/src/services/folder.ts +31 -0
- package/src/services/marketing.ts +3 -3
- package/src/services/openaiDocumentGen.ts +319 -0
- package/src/services/search.ts +25 -1
- package/src/services/userPrivacy.ts +196 -0
- package/src/services/worksheet.ts +68 -1
- package/src/utils/email.ts +5 -1
- package/src/workers/processors/embedContent.ts +18 -22
- package/tests/helpers/registerInput.ts +20 -0
- package/tests/integration/globalSetup.ts +10 -18
- package/tests/integration/routers/auth.test.ts +13 -18
- package/tests/unit/lib/inferDocumentFormat.test.ts +33 -0
- package/tests/unit/services/aiChatStream.test.ts +92 -0
- package/tests/unit/services/openaiDocumentGen.test.ts +65 -0
package/dist/instrument.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5806dd47-56ef-5a55-a383-1c966636efbf")}catch(e){}}();
|
|
3
3
|
import * as Sentry from "@sentry/node";
|
|
4
4
|
import { env } from "./lib/config/env.js";
|
|
5
5
|
// Only initialize Sentry in non-test environments
|
|
@@ -9,10 +9,10 @@ if (env.NODE_ENV !== 'test') {
|
|
|
9
9
|
environment: env.NODE_ENV || 'development',
|
|
10
10
|
// Setting this option to true will send default PII data to Sentry.
|
|
11
11
|
// For example, automatic IP address collection on events
|
|
12
|
-
sendDefaultPii:
|
|
12
|
+
sendDefaultPii: false,
|
|
13
13
|
// @todo: disable in test environment
|
|
14
14
|
enabled: true, // Explicitly disable in test environment
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=instrument.js.map
|
|
18
|
-
//# debugId=
|
|
18
|
+
//# debugId=5806dd47-56ef-5a55-a383-1c966636efbf
|
package/dist/instrument.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.js","sources":["instrument.ts"],"sourceRoot":"/","sourcesContent":["import * as Sentry from \"@sentry/node\";\nimport { env } from \"./lib/config/env.js\";\n\n// Only initialize Sentry in non-test environments\nif (env.NODE_ENV !== 'test') {\n Sentry.init({\n dsn: env.SENTRY_DSN,\n environment: env.NODE_ENV || 'development',\n // Setting this option to true will send default PII data to Sentry.\n // For example, automatic IP address collection on events\n sendDefaultPii:
|
|
1
|
+
{"version":3,"file":"instrument.js","sources":["instrument.ts"],"sourceRoot":"/","sourcesContent":["import * as Sentry from \"@sentry/node\";\nimport { env } from \"./lib/config/env.js\";\n\n// Only initialize Sentry in non-test environments\nif (env.NODE_ENV !== 'test') {\n Sentry.init({\n dsn: env.SENTRY_DSN,\n environment: env.NODE_ENV || 'development',\n // Setting this option to true will send default PII data to Sentry.\n // For example, automatic IP address collection on events\n sendDefaultPii: false,\n // @todo: disable in test environment\n enabled: true, // Explicitly disable in test environment\n });\n}\n"],"names":[],"mappings":";;AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,kDAAkD;AAClD,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,GAAG,CAAC,UAAU;QACnB,WAAW,EAAE,GAAG,CAAC,QAAQ,IAAI,aAAa;QAC1C,oEAAoE;QACpE,yDAAyD;QACzD,cAAc,EAAE,KAAK;QACrB,qCAAqC;QACrC,OAAO,EAAE,IAAI,EAAE,yCAAyC;KACzD,CAAC,CAAC;AACL,CAAC","debug_id":"5806dd47-56ef-5a55-a383-1c966636efbf"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DocumentFormat } from '../services/openaiDocumentGen.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the output format for a generated document.
|
|
4
|
+
*
|
|
5
|
+
* The lab model often passes `format: "pdf"` even for presentations/spreadsheets.
|
|
6
|
+
* Keyword signals from the teacher request, title, and body take precedence over
|
|
7
|
+
* a generic pdf default; a non-pdf explicit format is always respected.
|
|
8
|
+
*/
|
|
9
|
+
export declare function inferDocumentFormat(title: string, content: string, explicit?: string | null, userRequest?: string | null): DocumentFormat;
|
|
10
|
+
//# sourceMappingURL=inferDocumentFormat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inferDocumentFormat.d.ts","sourceRoot":"/","sources":["lib/inferDocumentFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AA2BvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,cAAc,CAkBhB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4c92c09b-87d0-5b2a-b970-6fe3b548d588")}catch(e){}}();
|
|
3
|
+
import { normalizeDocumentFormat } from '../services/openaiDocumentGen.js';
|
|
4
|
+
/** Ordered most-specific first. */
|
|
5
|
+
const FORMAT_RULES = [
|
|
6
|
+
{ format: 'pptx', pattern: /\b(presentation|powerpoint|power point|slides?|slide deck|deck|pptx|\.pptx)\b/i },
|
|
7
|
+
{ format: 'xlsx', pattern: /\b(spreadsheet|excel|workbook|xlsx|gradebook|grade book|\.xlsx)\b/i },
|
|
8
|
+
{ format: 'csv', pattern: /\b(csv|comma[- ]separated|\.csv)\b/i },
|
|
9
|
+
{ format: 'docx', pattern: /\b(word doc(ument)?|docx|editable handout|\.docx)\b/i },
|
|
10
|
+
{ format: 'png', pattern: /\b(diagram|chart|graph|plot|figure|infographic|\.png)\b/i },
|
|
11
|
+
{ format: 'md', pattern: /\b(markdown|readme|\.md)\b/i },
|
|
12
|
+
{ format: 'html', pattern: /\b(html|web ?page|\.html)\b/i },
|
|
13
|
+
{ format: 'txt', pattern: /\b(plain text|text file|\.txt)\b/i },
|
|
14
|
+
];
|
|
15
|
+
function inferFromText(...parts) {
|
|
16
|
+
const hay = parts.filter(Boolean).join('\n');
|
|
17
|
+
if (!hay.trim())
|
|
18
|
+
return null;
|
|
19
|
+
for (const { format, pattern } of FORMAT_RULES) {
|
|
20
|
+
if (pattern.test(hay))
|
|
21
|
+
return format;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the output format for a generated document.
|
|
27
|
+
*
|
|
28
|
+
* The lab model often passes `format: "pdf"` even for presentations/spreadsheets.
|
|
29
|
+
* Keyword signals from the teacher request, title, and body take precedence over
|
|
30
|
+
* a generic pdf default; a non-pdf explicit format is always respected.
|
|
31
|
+
*/
|
|
32
|
+
export function inferDocumentFormat(title, content, explicit, userRequest) {
|
|
33
|
+
const explicitNorm = explicit?.trim()
|
|
34
|
+
? normalizeDocumentFormat(explicit)
|
|
35
|
+
: null;
|
|
36
|
+
const fromKeywords = inferFromText(userRequest, title, content);
|
|
37
|
+
// Non-pdf explicit choice wins (model or tool args).
|
|
38
|
+
if (explicitNorm && explicitNorm !== 'pdf') {
|
|
39
|
+
return explicitNorm;
|
|
40
|
+
}
|
|
41
|
+
// Override pdf when the request clearly asks for slides, spreadsheets, etc.
|
|
42
|
+
if (fromKeywords && fromKeywords !== 'pdf') {
|
|
43
|
+
return fromKeywords;
|
|
44
|
+
}
|
|
45
|
+
return explicitNorm ?? 'pdf';
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=inferDocumentFormat.js.map
|
|
48
|
+
//# debugId=4c92c09b-87d0-5b2a-b970-6fe3b548d588
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inferDocumentFormat.js","sources":["lib/inferDocumentFormat.ts"],"sourceRoot":"/","sourcesContent":["import type { DocumentFormat } from '../services/openaiDocumentGen.js';\nimport { normalizeDocumentFormat } from '../services/openaiDocumentGen.js';\n\ntype FormatRule = { format: DocumentFormat; pattern: RegExp };\n\n/** Ordered most-specific first. */\nconst FORMAT_RULES: FormatRule[] = [\n { format: 'pptx', pattern: /\\b(presentation|powerpoint|power point|slides?|slide deck|deck|pptx|\\.pptx)\\b/i },\n { format: 'xlsx', pattern: /\\b(spreadsheet|excel|workbook|xlsx|gradebook|grade book|\\.xlsx)\\b/i },\n { format: 'csv', pattern: /\\b(csv|comma[- ]separated|\\.csv)\\b/i },\n { format: 'docx', pattern: /\\b(word doc(ument)?|docx|editable handout|\\.docx)\\b/i },\n { format: 'png', pattern: /\\b(diagram|chart|graph|plot|figure|infographic|\\.png)\\b/i },\n { format: 'md', pattern: /\\b(markdown|readme|\\.md)\\b/i },\n { format: 'html', pattern: /\\b(html|web ?page|\\.html)\\b/i },\n { format: 'txt', pattern: /\\b(plain text|text file|\\.txt)\\b/i },\n];\n\nfunction inferFromText(...parts: Array<string | null | undefined>): DocumentFormat | null {\n const hay = parts.filter(Boolean).join('\\n');\n if (!hay.trim()) return null;\n\n for (const { format, pattern } of FORMAT_RULES) {\n if (pattern.test(hay)) return format;\n }\n return null;\n}\n\n/**\n * Resolve the output format for a generated document.\n *\n * The lab model often passes `format: \"pdf\"` even for presentations/spreadsheets.\n * Keyword signals from the teacher request, title, and body take precedence over\n * a generic pdf default; a non-pdf explicit format is always respected.\n */\nexport function inferDocumentFormat(\n title: string,\n content: string,\n explicit?: string | null,\n userRequest?: string | null,\n): DocumentFormat {\n const explicitNorm = explicit?.trim()\n ? normalizeDocumentFormat(explicit)\n : null;\n\n const fromKeywords = inferFromText(userRequest, title, content);\n\n // Non-pdf explicit choice wins (model or tool args).\n if (explicitNorm && explicitNorm !== 'pdf') {\n return explicitNorm;\n }\n\n // Override pdf when the request clearly asks for slides, spreadsheets, etc.\n if (fromKeywords && fromKeywords !== 'pdf') {\n return fromKeywords;\n }\n\n return explicitNorm ?? 'pdf';\n}\n"],"names":[],"mappings":";;AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAI3E,mCAAmC;AACnC,MAAM,YAAY,GAAiB;IACjC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gFAAgF,EAAE;IAC7G,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oEAAoE,EAAE;IACjG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,qCAAqC,EAAE;IACjE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sDAAsD,EAAE;IACnF,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,0DAA0D,EAAE;IACtF,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACxD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE;IAC3D,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE;CAChE,CAAC;AAEF,SAAS,aAAa,CAAC,GAAG,KAAuC;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAE7B,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,YAAY,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,OAAe,EACf,QAAwB,EACxB,WAA2B;IAE3B,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,EAAE;QACnC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEhE,qDAAqD;IACrD,IAAI,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,IAAI,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,YAAY,IAAI,KAAK,CAAC;AAC/B,CAAC","debug_id":"4c92c09b-87d0-5b2a-b970-6fe3b548d588"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legal.d.ts","sourceRoot":"/","sources":["lib/legal.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Must match the "Last updated" month in the client privacy/terms copy. */
|
|
2
|
+
|
|
3
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ad0b3a8e-96d8-5634-84c5-fec20e40859b")}catch(e){}}();
|
|
4
|
+
export const CURRENT_TERMS_VERSION = "2025-11";
|
|
5
|
+
//# sourceMappingURL=legal.js.map
|
|
6
|
+
//# debugId=ad0b3a8e-96d8-5634-84c5-fec20e40859b
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legal.js","sources":["lib/legal.ts"],"sourceRoot":"/","sourcesContent":["/** Must match the \"Last updated\" month in the client privacy/terms copy. */\nexport const CURRENT_TERMS_VERSION = \"2025-11\";\n"],"names":[],"mappings":"AAAA,4EAA4E;;;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC","debug_id":"ad0b3a8e-96d8-5634-84c5-fec20e40859b"}
|
|
@@ -36,6 +36,15 @@ export declare function findAnnouncementsByClassId(classId: string): import("@pr
|
|
|
36
36
|
comments: number;
|
|
37
37
|
};
|
|
38
38
|
remarks: string;
|
|
39
|
+
attachments: {
|
|
40
|
+
path: string;
|
|
41
|
+
type: string;
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
size: number | null;
|
|
45
|
+
uploadedAt: Date | null;
|
|
46
|
+
thumbnailId: string | null;
|
|
47
|
+
}[];
|
|
39
48
|
modifiedAt: Date | null;
|
|
40
49
|
teacher: {
|
|
41
50
|
id: string;
|
|
@@ -46,15 +55,6 @@ export declare function findAnnouncementsByClassId(classId: string): import("@pr
|
|
|
46
55
|
profilePictureThumbnail: string | null;
|
|
47
56
|
} | null;
|
|
48
57
|
};
|
|
49
|
-
attachments: {
|
|
50
|
-
path: string;
|
|
51
|
-
type: string;
|
|
52
|
-
id: string;
|
|
53
|
-
name: string;
|
|
54
|
-
size: number | null;
|
|
55
|
-
uploadedAt: Date | null;
|
|
56
|
-
thumbnailId: string | null;
|
|
57
|
-
}[];
|
|
58
58
|
}[]>;
|
|
59
59
|
/** @returns Announcement by ID and class. */
|
|
60
60
|
export declare function findAnnouncementByIdAndClass(id: string, classId: string): import("@prisma/client/runtime/library.js").DynamicModelExtensionFluentApi<import(".prisma/client").Prisma.TypeMap<import("@prisma/client/runtime/library.js").InternalArgs & {
|
|
@@ -85,6 +85,15 @@ export declare function findAnnouncementByIdAndClass(id: string, classId: string
|
|
|
85
85
|
id: string;
|
|
86
86
|
createdAt: Date;
|
|
87
87
|
remarks: string;
|
|
88
|
+
attachments: {
|
|
89
|
+
path: string;
|
|
90
|
+
type: string;
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
size: number | null;
|
|
94
|
+
uploadedAt: Date | null;
|
|
95
|
+
thumbnailId: string | null;
|
|
96
|
+
}[];
|
|
88
97
|
modifiedAt: Date | null;
|
|
89
98
|
teacher: {
|
|
90
99
|
id: string;
|
|
@@ -95,15 +104,6 @@ export declare function findAnnouncementByIdAndClass(id: string, classId: string
|
|
|
95
104
|
profilePictureThumbnail: string | null;
|
|
96
105
|
} | null;
|
|
97
106
|
};
|
|
98
|
-
attachments: {
|
|
99
|
-
path: string;
|
|
100
|
-
type: string;
|
|
101
|
-
id: string;
|
|
102
|
-
name: string;
|
|
103
|
-
size: number | null;
|
|
104
|
-
uploadedAt: Date | null;
|
|
105
|
-
thumbnailId: string | null;
|
|
106
|
-
}[];
|
|
107
107
|
} | null>;
|
|
108
108
|
/** @returns Announcement by ID with class teachers and school admins. */
|
|
109
109
|
export declare function findAnnouncementWithClass(id: string): import("@prisma/client/runtime/library.js").DynamicModelExtensionFluentApi<import(".prisma/client").Prisma.TypeMap<import("@prisma/client/runtime/library.js").InternalArgs & {
|
|
@@ -154,6 +154,8 @@ export declare function findAnnouncementWithClass(id: string): import("@prisma/c
|
|
|
154
154
|
email: string;
|
|
155
155
|
password: string;
|
|
156
156
|
verified: boolean;
|
|
157
|
+
termsAcceptedAt: Date | null;
|
|
158
|
+
termsVersion: string | null;
|
|
157
159
|
schoolId: string | null;
|
|
158
160
|
}[];
|
|
159
161
|
} & {
|
|
@@ -221,6 +223,15 @@ export declare function createAnnouncement(data: {
|
|
|
221
223
|
id: string;
|
|
222
224
|
createdAt: Date;
|
|
223
225
|
remarks: string;
|
|
226
|
+
attachments: {
|
|
227
|
+
path: string;
|
|
228
|
+
type: string;
|
|
229
|
+
id: string;
|
|
230
|
+
name: string;
|
|
231
|
+
size: number | null;
|
|
232
|
+
uploadedAt: Date | null;
|
|
233
|
+
thumbnailId: string | null;
|
|
234
|
+
}[];
|
|
224
235
|
modifiedAt: Date | null;
|
|
225
236
|
teacher: {
|
|
226
237
|
id: string;
|
|
@@ -231,15 +242,6 @@ export declare function createAnnouncement(data: {
|
|
|
231
242
|
profilePictureThumbnail: string | null;
|
|
232
243
|
} | null;
|
|
233
244
|
};
|
|
234
|
-
attachments: {
|
|
235
|
-
path: string;
|
|
236
|
-
type: string;
|
|
237
|
-
id: string;
|
|
238
|
-
name: string;
|
|
239
|
-
size: number | null;
|
|
240
|
-
uploadedAt: Date | null;
|
|
241
|
-
thumbnailId: string | null;
|
|
242
|
-
}[];
|
|
243
245
|
}>;
|
|
244
246
|
/** Update announcement attachments. */
|
|
245
247
|
export declare function updateAnnouncementAttachments(id: string, data: {
|
|
@@ -279,6 +281,15 @@ export declare function updateAnnouncementAttachments(id: string, data: {
|
|
|
279
281
|
id: string;
|
|
280
282
|
createdAt: Date;
|
|
281
283
|
remarks: string;
|
|
284
|
+
attachments: {
|
|
285
|
+
path: string;
|
|
286
|
+
type: string;
|
|
287
|
+
id: string;
|
|
288
|
+
name: string;
|
|
289
|
+
size: number | null;
|
|
290
|
+
uploadedAt: Date | null;
|
|
291
|
+
thumbnailId: string | null;
|
|
292
|
+
}[];
|
|
282
293
|
modifiedAt: Date | null;
|
|
283
294
|
teacher: {
|
|
284
295
|
id: string;
|
|
@@ -289,15 +300,6 @@ export declare function updateAnnouncementAttachments(id: string, data: {
|
|
|
289
300
|
profilePictureThumbnail: string | null;
|
|
290
301
|
} | null;
|
|
291
302
|
};
|
|
292
|
-
attachments: {
|
|
293
|
-
path: string;
|
|
294
|
-
type: string;
|
|
295
|
-
id: string;
|
|
296
|
-
name: string;
|
|
297
|
-
size: number | null;
|
|
298
|
-
uploadedAt: Date | null;
|
|
299
|
-
thumbnailId: string | null;
|
|
300
|
-
}[];
|
|
301
303
|
}>;
|
|
302
304
|
/** Update announcement remarks. */
|
|
303
305
|
export declare function updateAnnouncement(id: string, data: {
|
|
@@ -330,6 +332,15 @@ export declare function updateAnnouncement(id: string, data: {
|
|
|
330
332
|
id: string;
|
|
331
333
|
createdAt: Date;
|
|
332
334
|
remarks: string;
|
|
335
|
+
attachments: {
|
|
336
|
+
path: string;
|
|
337
|
+
type: string;
|
|
338
|
+
id: string;
|
|
339
|
+
name: string;
|
|
340
|
+
size: number | null;
|
|
341
|
+
uploadedAt: Date | null;
|
|
342
|
+
thumbnailId: string | null;
|
|
343
|
+
}[];
|
|
333
344
|
modifiedAt: Date | null;
|
|
334
345
|
teacher: {
|
|
335
346
|
id: string;
|
|
@@ -340,15 +351,6 @@ export declare function updateAnnouncement(id: string, data: {
|
|
|
340
351
|
profilePictureThumbnail: string | null;
|
|
341
352
|
} | null;
|
|
342
353
|
};
|
|
343
|
-
attachments: {
|
|
344
|
-
path: string;
|
|
345
|
-
type: string;
|
|
346
|
-
id: string;
|
|
347
|
-
name: string;
|
|
348
|
-
size: number | null;
|
|
349
|
-
uploadedAt: Date | null;
|
|
350
|
-
thumbnailId: string | null;
|
|
351
|
-
}[];
|
|
352
354
|
}>;
|
|
353
355
|
/** Delete an announcement. */
|
|
354
356
|
export declare function deleteAnnouncement(id: string): import("@prisma/client/runtime/library.js").DynamicModelExtensionFluentApi<import(".prisma/client").Prisma.TypeMap<import("@prisma/client/runtime/library.js").InternalArgs & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announcement.d.ts","sourceRoot":"/","sources":["models/announcement.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;KAWzD;AAED,6CAA6C;AAC7C,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAKvE;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"announcement.d.ts","sourceRoot":"/","sources":["models/announcement.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B9B,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;KAWzD;AAED,6CAA6C;AAC7C,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAKvE;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAoCnD;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GASA;AAED,uCAAuC;AACvC,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE;YAAE,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAcF;AAED,mCAAmC;AACnC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAMxE;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI5C"}
|