@citolab/qti-backend-firebase 0.0.3 → 0.0.5
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/dist/api/app-specific/base/application-specific-base.d.ts +11 -20
- package/dist/api/app-specific/base/application-specific-base.d.ts.map +1 -1
- package/dist/api/app-specific/base/application-specific-base.js +73 -88
- package/dist/api/app-specific/base/application-specific-base.js.map +1 -1
- package/dist/api/app-specific/baseImplementation.d.ts +2 -3
- package/dist/api/app-specific/baseImplementation.d.ts.map +1 -1
- package/dist/api/app-specific/baseImplementation.js +2 -6
- package/dist/api/app-specific/baseImplementation.js.map +1 -1
- package/dist/api/app-specific/index.d.ts +1 -0
- package/dist/api/app-specific/index.d.ts.map +1 -1
- package/dist/api/app-specific/index.js +1 -0
- package/dist/api/app-specific/index.js.map +1 -1
- package/dist/api/app-specific/interface/IApplicationSpecific.d.ts +10 -20
- package/dist/api/app-specific/interface/IApplicationSpecific.d.ts.map +1 -1
- package/dist/api/qti-data.d.ts.map +1 -1
- package/dist/api/qti-data.js +619 -271
- package/dist/api/qti-data.js.map +1 -1
- package/dist/api/qti-resources.d.ts.map +1 -1
- package/dist/api/qti-resources.js +134 -131
- package/dist/api/qti-resources.js.map +1 -1
- package/dist/api/qti-teacher.d.ts.map +1 -1
- package/dist/api/qti-teacher.js +563 -424
- package/dist/api/qti-teacher.js.map +1 -1
- package/dist/api/qti-tools.d.ts.map +1 -1
- package/dist/api/qti-tools.js +213 -41
- package/dist/api/qti-tools.js.map +1 -1
- package/dist/helpers/database.d.ts +35 -24
- package/dist/helpers/database.d.ts.map +1 -1
- package/dist/helpers/database.js +47 -36
- package/dist/helpers/database.js.map +1 -1
- package/dist/helpers/db.d.ts +1 -1
- package/dist/helpers/db.d.ts.map +1 -1
- package/dist/helpers/db.js +3 -7
- package/dist/helpers/db.js.map +1 -1
- package/dist/helpers/endpoint-helpers.d.ts +2 -2
- package/dist/helpers/endpoint-helpers.d.ts.map +1 -1
- package/dist/helpers/endpoint-helpers.js +59 -17
- package/dist/helpers/endpoint-helpers.js.map +1 -1
- package/dist/helpers/excel-helper.d.ts +29 -0
- package/dist/helpers/excel-helper.d.ts.map +1 -0
- package/dist/helpers/excel-helper.js +150 -0
- package/dist/helpers/excel-helper.js.map +1 -0
- package/dist/helpers/general.d.ts +15 -0
- package/dist/helpers/general.d.ts.map +1 -0
- package/dist/helpers/general.js +148 -0
- package/dist/helpers/general.js.map +1 -0
- package/dist/helpers/index.d.ts +2 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +2 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/logic.d.ts +100 -41
- package/dist/helpers/logic.d.ts.map +1 -1
- package/dist/helpers/logic.js +523 -413
- package/dist/helpers/logic.js.map +1 -1
- package/dist/helpers/package-upload.d.ts.map +1 -1
- package/dist/helpers/package-upload.js +2 -3
- package/dist/helpers/package-upload.js.map +1 -1
- package/dist/helpers/package.d.ts +3 -4
- package/dist/helpers/package.d.ts.map +1 -1
- package/dist/helpers/package.js +12 -17
- package/dist/helpers/package.js.map +1 -1
- package/dist/helpers/request-headers.d.ts +4 -0
- package/dist/helpers/request-headers.d.ts.map +1 -1
- package/dist/helpers/request-headers.js +2 -2
- package/dist/helpers/request-headers.js.map +1 -1
- package/dist/helpers/resource-cache.d.ts +35 -0
- package/dist/helpers/resource-cache.d.ts.map +1 -0
- package/dist/helpers/resource-cache.js +171 -0
- package/dist/helpers/resource-cache.js.map +1 -0
- package/dist/helpers/storage.d.ts +2 -2
- package/dist/helpers/storage.d.ts.map +1 -1
- package/dist/helpers/storage.js +16 -15
- package/dist/helpers/storage.js.map +1 -1
- package/dist/helpers/utils.d.ts +4 -3
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/helpers/utils.js +73 -51
- package/dist/helpers/utils.js.map +1 -1
- package/package.json +12 -9
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
export declare class DATABASE {
|
|
2
|
-
|
|
3
|
-
constructor(appId?: string | undefined);
|
|
2
|
+
constructor();
|
|
4
3
|
get basePath(): string;
|
|
5
|
-
get APPLICATION(): {
|
|
6
|
-
COLLECTION: string;
|
|
7
|
-
DOC: () => string;
|
|
8
|
-
};
|
|
9
4
|
get FEEDBACK(): {
|
|
10
5
|
COLLECTION: () => string;
|
|
11
6
|
DOC: (feedbackId: string) => string;
|
|
@@ -17,13 +12,9 @@ export declare class DATABASE {
|
|
|
17
12
|
DOC: (userId: string, dateId: string) => string;
|
|
18
13
|
};
|
|
19
14
|
};
|
|
20
|
-
get
|
|
15
|
+
get DELIVERY(): {
|
|
21
16
|
COLLECTION: () => string;
|
|
22
17
|
DOC: (code: string) => string;
|
|
23
|
-
STUDENTS: {
|
|
24
|
-
COLLECTION: (code: string) => string;
|
|
25
|
-
DOC: (code: string, itemId: string) => string;
|
|
26
|
-
};
|
|
27
18
|
};
|
|
28
19
|
get PACKAGE(): {
|
|
29
20
|
COLLECTION: () => string;
|
|
@@ -33,18 +24,22 @@ export declare class DATABASE {
|
|
|
33
24
|
COLLECTION: () => string;
|
|
34
25
|
DOC: (assessmentId: string) => string;
|
|
35
26
|
};
|
|
36
|
-
get
|
|
27
|
+
get TESTSET(): {
|
|
28
|
+
COLLECTION: () => string;
|
|
29
|
+
DOC: (testsetId: string) => string;
|
|
30
|
+
};
|
|
31
|
+
get TESTSET_SESSIONS(): {
|
|
32
|
+
COLLECTION: () => string;
|
|
33
|
+
DOC: (testSetId: string) => string;
|
|
34
|
+
};
|
|
35
|
+
get SESSION(): {
|
|
37
36
|
COLLECTION: () => string;
|
|
38
37
|
DOC: (code: string) => string;
|
|
39
38
|
LOG: {
|
|
40
|
-
COLLECTION: (teacherId: string) => string;
|
|
41
|
-
DOC: (teacherId: string, dateId: string) => string;
|
|
42
|
-
};
|
|
43
|
-
SESSION: {
|
|
44
39
|
COLLECTION: (code: string) => string;
|
|
45
|
-
DOC: (code: string,
|
|
46
|
-
LOG: (code: string, sessionId: string, dateId: string) => string;
|
|
40
|
+
DOC: (code: string, dateId: string) => string;
|
|
47
41
|
};
|
|
42
|
+
TEST_CONTEXT: (code: string) => string;
|
|
48
43
|
};
|
|
49
44
|
get EVENTLOG(): {
|
|
50
45
|
DOC: (identifier: string, timestamp: number) => string;
|
|
@@ -73,6 +68,14 @@ export declare class DATABASE {
|
|
|
73
68
|
COLLECTION: (teacherId: string) => string;
|
|
74
69
|
DOC: (teacherId: string, dateId: string) => string;
|
|
75
70
|
};
|
|
71
|
+
DELIVERY_RESULTS: {
|
|
72
|
+
COLLECTION: (teacherId: string, deliveryId: string) => string;
|
|
73
|
+
DOC: (teacherId: string, deliveryId: string, code: string) => string;
|
|
74
|
+
};
|
|
75
|
+
DELIVERY_REPORTS: {
|
|
76
|
+
COLLECTION: (teacherId: string, deliveryId: string) => string;
|
|
77
|
+
DOC: (teacherId: string, deliveryId: string, code: string) => string;
|
|
78
|
+
};
|
|
76
79
|
ASSESSMENT_RESULTS: {
|
|
77
80
|
COLLECTION: (teacherId: string, assessmentId: string) => string;
|
|
78
81
|
DOC: (teacherId: string, assessmentId: string, code: string) => string;
|
|
@@ -87,16 +90,24 @@ export declare class DATABASE {
|
|
|
87
90
|
DOC: (teacherId: string, assessmentId: string, itemId: string, responseId: string) => string;
|
|
88
91
|
};
|
|
89
92
|
};
|
|
90
|
-
|
|
93
|
+
SESSIONS: {
|
|
91
94
|
COLLECTION: (teacherId: string) => string;
|
|
92
|
-
DOC: (teacherId: string,
|
|
95
|
+
DOC: (teacherId: string, sessionCode: string) => string;
|
|
93
96
|
SESSION: {
|
|
94
|
-
COLLECTION: (teacherId: string
|
|
95
|
-
DOC: (teacherId: string,
|
|
97
|
+
COLLECTION: (teacherId: string) => string;
|
|
98
|
+
DOC: (teacherId: string, sessionCode: string) => string;
|
|
96
99
|
};
|
|
97
100
|
ITEM: {
|
|
98
|
-
COLLECTION: (teacherId: string,
|
|
99
|
-
DOC: (teacherId: string,
|
|
101
|
+
COLLECTION: (teacherId: string, sessionCode: string) => string;
|
|
102
|
+
DOC: (teacherId: string, sessionCode: string, itemId: string) => string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
DELIVERY: {
|
|
106
|
+
COLLECTION: () => (teacherId: string) => string;
|
|
107
|
+
DOC: (teacherId: string, deliveryCode: string) => string;
|
|
108
|
+
STUDENTS: {
|
|
109
|
+
COLLECTION: (teacherId: string, deliveryCode: string) => string;
|
|
110
|
+
DOC: (teacherId: string, deliveryCode: string, studentCode: string) => string;
|
|
100
111
|
};
|
|
101
112
|
};
|
|
102
113
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;;IAGnB,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAI,QAAQ;;0BAIU,MAAM;MAE3B;IAED,IAAI,KAAK;;0BAIa,MAAM;;0BAER,MAAM,UAAU,MAAM;;MAIzC;IAED,IAAI,QAAQ;;oBAII,MAAM;MAErB;IAED,IAAI,OAAO;;oBAIK,MAAM;MAErB;IACD,IAAI,UAAU;;4BAIU,MAAM;MAE7B;IAED,IAAI,OAAO;;yBAIU,MAAM;MAE1B;IAED,IAAI,gBAAgB;;yBAIC,MAAM;MAE1B;IAED,IAAI,OAAO;;oBAIK,MAAM;;+BAEG,MAAM;wBACb,MAAM,UAAU,MAAM;;6BAGf,MAAM;MAE9B;IAED,IAAI,QAAQ;0BAGU,MAAM,aAAa,MAAM;MAG9C;IAED,IAAI,uBAAuB;;sBAIT,MAAM;MAEvB;IAED,IAAI,QAAQ;;;oCAKkB,MAAM;6BACb,MAAM,UAAU,MAAM;;;;wCAMxB,MAAM,gBACH,MAAM,UACZ,MAAM;iCAIH,MAAM,gBACH,MAAM,UACZ,MAAM,cACF,MAAM;;;MAM3B;IACD,IAAI,OAAO;;yBAIU,MAAM;;oCAEG,MAAM;6BACb,MAAM,UAAU,MAAM;;;oCAKf,MAAM,cAAc,MAAM;6BAEjC,MAAM,cAAc,MAAM,QAAQ,MAAM;;;oCAIjC,MAAM,cAAc,MAAM;6BAEjC,MAAM,cAAc,MAAM,QAAQ,MAAM;;;oCAKjC,MAAM,gBAAgB,MAAM;6BAEnC,MAAM,gBAAgB,MAAM,QAAQ,MAAM;;;oCAInC,MAAM,gBAAgB,MAAM;6BAEnC,MAAM,gBAAgB,MAAM,QAAQ,MAAM;;;;wCAM5C,MAAM,gBACH,MAAM,UACZ,MAAM;iCAIH,MAAM,gBACH,MAAM,UACZ,MAAM,cACF,MAAM;;;;oCAME,MAAM;6BACb,MAAM,eAAe,MAAM;;wCAGlB,MAAM;iCAEb,MAAM,eAAe,MAAM;;;wCAIpB,MAAM,eAAe,MAAM;iCAElC,MAAM,eAAe,MAAM,UAAU,MAAM;;;;+BAK3C,WAAW,MAAM;6BAEnB,MAAM,gBAAgB,MAAM;;wCAGnB,MAAM,gBAAgB,MAAM;iCAEnC,MAAM,gBAAgB,MAAM,eAAe,MAAM;;;MAKzE;IAED,IAAI,IAAI;;mBAGO,MAAM;8BAEK,MAAM;gCACJ,MAAM,SAAS,MAAM;MAGhD;CACF"}
|
package/dist/helpers/database.js
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
import { IsTrue } from "./utils";
|
|
2
1
|
export class DATABASE {
|
|
3
|
-
|
|
4
|
-
constructor(appId) {
|
|
5
|
-
this.appId = appId;
|
|
6
|
-
}
|
|
2
|
+
constructor() { }
|
|
7
3
|
get basePath() {
|
|
8
|
-
|
|
9
|
-
return !isSingleTenant && this.appId ? `application/${this.appId}` : "";
|
|
10
|
-
}
|
|
11
|
-
get APPLICATION() {
|
|
12
|
-
const basePath = this.basePath;
|
|
13
|
-
return {
|
|
14
|
-
COLLECTION: "application",
|
|
15
|
-
DOC: () => (this.appId ? `${basePath}` : "application/info"),
|
|
16
|
-
};
|
|
4
|
+
return ""; // Always use single tenant mode
|
|
17
5
|
}
|
|
18
6
|
get FEEDBACK() {
|
|
19
7
|
const basePath = `${this.basePath}/feedback`;
|
|
@@ -32,15 +20,11 @@ export class DATABASE {
|
|
|
32
20
|
},
|
|
33
21
|
};
|
|
34
22
|
}
|
|
35
|
-
get
|
|
36
|
-
const basePath = `${this.basePath}/
|
|
23
|
+
get DELIVERY() {
|
|
24
|
+
const basePath = `${this.basePath}/delivery`;
|
|
37
25
|
return {
|
|
38
26
|
COLLECTION: () => basePath,
|
|
39
27
|
DOC: (code) => `${basePath}/${code}`,
|
|
40
|
-
STUDENTS: {
|
|
41
|
-
COLLECTION: (code) => `${basePath}/${code}/students`,
|
|
42
|
-
DOC: (code, itemId) => `${basePath}/${code}/students/${itemId}`,
|
|
43
|
-
},
|
|
44
28
|
};
|
|
45
29
|
}
|
|
46
30
|
get PACKAGE() {
|
|
@@ -57,20 +41,30 @@ export class DATABASE {
|
|
|
57
41
|
DOC: (assessmentId) => `${basePath}/${assessmentId}`,
|
|
58
42
|
};
|
|
59
43
|
}
|
|
60
|
-
get
|
|
61
|
-
const basePath = `${this.basePath}/
|
|
44
|
+
get TESTSET() {
|
|
45
|
+
const basePath = `${this.basePath}/testsets`;
|
|
46
|
+
return {
|
|
47
|
+
COLLECTION: () => basePath,
|
|
48
|
+
DOC: (testsetId) => `${basePath}/${testsetId}`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
get TESTSET_SESSIONS() {
|
|
52
|
+
const basePath = `${this.basePath}/testsetsessions`;
|
|
53
|
+
return {
|
|
54
|
+
COLLECTION: () => basePath,
|
|
55
|
+
DOC: (testSetId) => `${basePath}/${testSetId}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
get SESSION() {
|
|
59
|
+
const basePath = `${this.basePath}/sessions`;
|
|
62
60
|
return {
|
|
63
61
|
COLLECTION: () => basePath,
|
|
64
62
|
DOC: (code) => `${basePath}/${code}`,
|
|
65
63
|
LOG: {
|
|
66
|
-
COLLECTION: (
|
|
67
|
-
DOC: (
|
|
68
|
-
},
|
|
69
|
-
SESSION: {
|
|
70
|
-
COLLECTION: (code) => `${basePath}/${code}/sessions`,
|
|
71
|
-
DOC: (code, sessionId) => `${basePath}/${code}/sessions/${sessionId}`,
|
|
72
|
-
LOG: (code, sessionId, dateId) => `${basePath}/${code}/sessions/${sessionId}/log/${dateId}`,
|
|
64
|
+
COLLECTION: (code) => `${basePath}/${code}/log`,
|
|
65
|
+
DOC: (code, dateId) => `${basePath}/${code}/log/${dateId}`,
|
|
73
66
|
},
|
|
67
|
+
TEST_CONTEXT: (code) => `${basePath}/${code}/context/CONTEXT`,
|
|
74
68
|
};
|
|
75
69
|
}
|
|
76
70
|
get EVENTLOG() {
|
|
@@ -111,6 +105,14 @@ export class DATABASE {
|
|
|
111
105
|
COLLECTION: (teacherId) => `${basePath}/${teacherId}/log`,
|
|
112
106
|
DOC: (teacherId, dateId) => `${basePath}/${teacherId}/log/${dateId}`,
|
|
113
107
|
},
|
|
108
|
+
DELIVERY_RESULTS: {
|
|
109
|
+
COLLECTION: (teacherId, deliveryId) => `${basePath}/${teacherId}/delivery/${deliveryId}/results`,
|
|
110
|
+
DOC: (teacherId, deliveryId, code) => `${basePath}/${teacherId}/delivery/${deliveryId}/results/${code}`,
|
|
111
|
+
},
|
|
112
|
+
DELIVERY_REPORTS: {
|
|
113
|
+
COLLECTION: (teacherId, deliveryId) => `${basePath}/${teacherId}/delivery/${deliveryId}/reports`,
|
|
114
|
+
DOC: (teacherId, deliveryId, code) => `${basePath}/${teacherId}/delivery/${deliveryId}/reports/${code}`,
|
|
115
|
+
},
|
|
114
116
|
ASSESSMENT_RESULTS: {
|
|
115
117
|
COLLECTION: (teacherId, assessmentId) => `${basePath}/${teacherId}/assessment/${assessmentId}/results`,
|
|
116
118
|
DOC: (teacherId, assessmentId, code) => `${basePath}/${teacherId}/assessment/${assessmentId}/results/${code}`,
|
|
@@ -125,16 +127,24 @@ export class DATABASE {
|
|
|
125
127
|
DOC: (teacherId, assessmentId, itemId, responseId) => `${basePath}/${teacherId}/assessment/${assessmentId}/itemstats/${itemId}/responses/${responseId}`,
|
|
126
128
|
},
|
|
127
129
|
},
|
|
128
|
-
|
|
129
|
-
COLLECTION: (teacherId) => `${basePath}/${teacherId}/
|
|
130
|
-
DOC: (teacherId,
|
|
130
|
+
SESSIONS: {
|
|
131
|
+
COLLECTION: (teacherId) => `${basePath}/${teacherId}/sessions`,
|
|
132
|
+
DOC: (teacherId, sessionCode) => `${basePath}/${teacherId}/sessions/${sessionCode}`,
|
|
131
133
|
SESSION: {
|
|
132
|
-
COLLECTION: (teacherId
|
|
133
|
-
DOC: (teacherId,
|
|
134
|
+
COLLECTION: (teacherId) => `${basePath}/${teacherId}/sessions`,
|
|
135
|
+
DOC: (teacherId, sessionCode) => `${basePath}/${teacherId}/sessions/${sessionCode}`,
|
|
134
136
|
},
|
|
135
137
|
ITEM: {
|
|
136
|
-
COLLECTION: (teacherId,
|
|
137
|
-
DOC: (teacherId,
|
|
138
|
+
COLLECTION: (teacherId, sessionCode) => `${basePath}/${teacherId}/sessions/${sessionCode}/items`,
|
|
139
|
+
DOC: (teacherId, sessionCode, itemId) => `${basePath}/${teacherId}/sessions/${sessionCode}/items/${itemId}`,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
DELIVERY: {
|
|
143
|
+
COLLECTION: () => (teacherId) => `${basePath}/${teacherId}/delivery`,
|
|
144
|
+
DOC: (teacherId, deliveryCode) => `${basePath}/${teacherId}/delivery/${deliveryCode}`,
|
|
145
|
+
STUDENTS: {
|
|
146
|
+
COLLECTION: (teacherId, deliveryCode) => `${basePath}/${teacherId}/delivery/${deliveryCode}/students`,
|
|
147
|
+
DOC: (teacherId, deliveryCode, studentCode) => `${basePath}/${teacherId}/delivery/${deliveryCode}/students/${studentCode}`,
|
|
138
148
|
},
|
|
139
149
|
},
|
|
140
150
|
};
|
|
@@ -143,6 +153,7 @@ export class DATABASE {
|
|
|
143
153
|
return {
|
|
144
154
|
COLLECTION: "auth",
|
|
145
155
|
DOC: (uid) => `auth/${uid}`,
|
|
156
|
+
// Legacy methods - no longer used but kept for compatibility
|
|
146
157
|
APP_COLLECTION: (uid) => `auth/${uid}/application`,
|
|
147
158
|
CHECK_APP_RIGHTS: (uid, appId) => `auth/${uid}/application/${appId.toLowerCase()}`,
|
|
148
159
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/helpers/database.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACnB,gBAAe,CAAC;IAEhB,IAAW,QAAQ;QACjB,OAAO,EAAE,CAAC,CAAC,gCAAgC;IAC7C,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE;SACzD,CAAC;IACJ,CAAC;IAED,IAAI,KAAK;QACP,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,QAAQ,CAAC;QAC1C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE;YACxD,MAAM,EAAE;gBACN,GAAG,EAAE,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CACtC,GAAG,QAAQ,IAAI,MAAM,WAAW,MAAM,EAAE;aAC3C;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACT,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,UAAU,CAAC;QAC5C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE;SAC7C,CAAC;IACJ,CAAC;IACD,IAAI,UAAU;QACZ,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,cAAc,CAAC;QAChD,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACT,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE;SACvD,CAAC;IACJ,CAAC;IAED,IAAI,gBAAgB;QAClB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,kBAAkB,CAAC;QACpD,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE;SACvD,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACT,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE;YAC5C,GAAG,EAAE;gBACH,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,MAAM;gBACvD,GAAG,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CACpC,GAAG,QAAQ,IAAI,IAAI,QAAQ,MAAM,EAAE;aACtC;YACD,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,kBAAkB;SACtE,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,GAAG,EAAE,CAAC,UAAkB,EAAE,SAAiB,EAAE,EAAE,CAC7C,GAAG,QAAQ,cAAc,UAAU,YAAY,SAAS,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,uBAAuB;QACzB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,2BAA2B,CAAC;QAC7D,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE;SACjD,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,WAAW,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE;gBACH,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,MAAM;gBACjE,GAAG,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CACzC,GAAG,QAAQ,IAAI,SAAS,QAAQ,MAAM,EAAE;aAC3C;YACD,qBAAqB,EAAE;gBACrB,SAAS,EAAE;oBACT,UAAU,EAAE,CACV,SAAiB,EACjB,YAAoB,EACpB,MAAc,EACd,EAAE,CACF,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,cAAc,MAAM,YAAY;oBACrF,GAAG,EAAE,CACH,SAAiB,EACjB,YAAoB,EACpB,MAAc,EACd,UAAkB,EAClB,EAAE,CACF,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,cAAc,MAAM,cAAc,UAAU,EAAE;iBACpG;aACF;SACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO;QACT,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,UAAU,CAAC;QAC5C,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;YAC1B,GAAG,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE;YACtD,GAAG,EAAE;gBACH,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,MAAM;gBACjE,GAAG,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CACzC,GAAG,QAAQ,IAAI,SAAS,QAAQ,MAAM,EAAE;aAC3C;YAED,gBAAgB,EAAE;gBAChB,UAAU,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE,CACpD,GAAG,QAAQ,IAAI,SAAS,aAAa,UAAU,UAAU;gBAC3D,GAAG,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAY,EAAE,EAAE,CAC3D,GAAG,QAAQ,IAAI,SAAS,aAAa,UAAU,YAAY,IAAI,EAAE;aACpE;YACD,gBAAgB,EAAE;gBAChB,UAAU,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE,CACpD,GAAG,QAAQ,IAAI,SAAS,aAAa,UAAU,UAAU;gBAC3D,GAAG,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAY,EAAE,EAAE,CAC3D,GAAG,QAAQ,IAAI,SAAS,aAAa,UAAU,YAAY,IAAI,EAAE;aACpE;YAED,kBAAkB,EAAE;gBAClB,UAAU,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE,CACtD,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,UAAU;gBAC/D,GAAG,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,IAAY,EAAE,EAAE,CAC7D,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,YAAY,IAAI,EAAE;aACxE;YACD,kBAAkB,EAAE;gBAClB,UAAU,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE,CACtD,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,UAAU;gBAC/D,GAAG,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,IAAY,EAAE,EAAE,CAC7D,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,YAAY,IAAI,EAAE;aACxE;YACD,qBAAqB,EAAE;gBACrB,SAAS,EAAE;oBACT,UAAU,EAAE,CACV,SAAiB,EACjB,YAAoB,EACpB,MAAc,EACd,EAAE,CACF,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,cAAc,MAAM,YAAY;oBACrF,GAAG,EAAE,CACH,SAAiB,EACjB,YAAoB,EACpB,MAAc,EACd,UAAkB,EAClB,EAAE,CACF,GAAG,QAAQ,IAAI,SAAS,eAAe,YAAY,cAAc,MAAM,cAAc,UAAU,EAAE;iBACpG;aACF;YACD,QAAQ,EAAE;gBACR,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,SAAS,WAAW;gBACtE,GAAG,EAAE,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE,CAC9C,GAAG,QAAQ,IAAI,SAAS,aAAa,WAAW,EAAE;gBACpD,OAAO,EAAE;oBACP,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAChC,GAAG,QAAQ,IAAI,SAAS,WAAW;oBACrC,GAAG,EAAE,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE,CAC9C,GAAG,QAAQ,IAAI,SAAS,aAAa,WAAW,EAAE;iBACrD;gBACD,IAAI,EAAE;oBACJ,UAAU,EAAE,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE,CACrD,GAAG,QAAQ,IAAI,SAAS,aAAa,WAAW,QAAQ;oBAC1D,GAAG,EAAE,CAAC,SAAiB,EAAE,WAAmB,EAAE,MAAc,EAAE,EAAE,CAC9D,GAAG,QAAQ,IAAI,SAAS,aAAa,WAAW,UAAU,MAAM,EAAE;iBACrE;aACF;YACD,QAAQ,EAAE;gBACR,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,SAAiB,EAAE,EAAE,CACtC,GAAG,QAAQ,IAAI,SAAS,WAAW;gBACrC,GAAG,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE,CAC/C,GAAG,QAAQ,IAAI,SAAS,aAAa,YAAY,EAAE;gBACrD,QAAQ,EAAE;oBACR,UAAU,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,EAAE,CACtD,GAAG,QAAQ,IAAI,SAAS,aAAa,YAAY,WAAW;oBAC9D,GAAG,EAAE,CAAC,SAAiB,EAAE,YAAoB,EAAE,WAAmB,EAAE,EAAE,CACpE,GAAG,QAAQ,IAAI,SAAS,aAAa,YAAY,aAAa,WAAW,EAAE;iBAC9E;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO;YACL,UAAU,EAAE,MAAM;YAClB,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE;YACnC,6DAA6D;YAC7D,cAAc,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,cAAc;YAC1D,gBAAgB,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAC/C,QAAQ,GAAG,gBAAgB,KAAK,CAAC,WAAW,EAAE,EAAE;SACnD,CAAC;IACJ,CAAC;CACF"}
|
package/dist/helpers/db.d.ts
CHANGED
package/dist/helpers/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/helpers/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/helpers/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,aAGzC,CAAC"}
|
package/dist/helpers/db.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { DATABASE } from
|
|
2
|
-
import { IsTrue } from './utils';
|
|
1
|
+
import { DATABASE } from "./database";
|
|
3
2
|
export const getDatabase = (appId) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
const db = new DATABASE(!appId || appId === 'application' ? '' : appId);
|
|
8
|
-
return db;
|
|
3
|
+
// Always return single tenant database
|
|
4
|
+
return new DATABASE();
|
|
9
5
|
};
|
|
10
6
|
//# sourceMappingURL=db.js.map
|
package/dist/helpers/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/helpers/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/helpers/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;IAC5C,uCAAuC;IACvC,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC"}
|
|
@@ -4,7 +4,6 @@ export interface AuthenticatedRequest extends Request {
|
|
|
4
4
|
user?: {
|
|
5
5
|
uid: string;
|
|
6
6
|
};
|
|
7
|
-
appId?: string;
|
|
8
7
|
file?: any;
|
|
9
8
|
}
|
|
10
9
|
export interface ErrorResponse {
|
|
@@ -19,9 +18,11 @@ export interface SuccessResponse<T = any> {
|
|
|
19
18
|
export declare const sendError: (res: Response, status: number, message: string, details?: any) => void;
|
|
20
19
|
export declare const sendSuccess: <T>(res: Response, data?: T, message?: string) => void;
|
|
21
20
|
export declare const requireAuth: (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<void>;
|
|
21
|
+
export declare const requireAuthType: (userTypes?: "student" | "teacher" | "both") => (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<void>;
|
|
22
22
|
export declare const handleValidationErrors: (req: Request, res: Response, next: NextFunction) => void;
|
|
23
23
|
export declare const createRateLimit: (windowMs: number, max: number) => import("express-rate-limit").RateLimitRequestHandler;
|
|
24
24
|
export declare const generalRateLimit: import("express-rate-limit").RateLimitRequestHandler;
|
|
25
|
+
export declare const resourceRateLimit: import("express-rate-limit").RateLimitRequestHandler;
|
|
25
26
|
export declare const heavyOperationLimit: import("express-rate-limit").RateLimitRequestHandler;
|
|
26
27
|
export declare const imageUploadConfig: multer.Multer;
|
|
27
28
|
export declare const zipUploadConfig: multer.Multer;
|
|
@@ -29,5 +30,4 @@ export declare const errorHandler: (err: Error, req: Request, res: Response, nex
|
|
|
29
30
|
export declare const optionalAuth: (req: AuthenticatedRequest, res: Response, next: NextFunction) => Promise<void>;
|
|
30
31
|
export declare const validateAssessmentId: (assessmentId: string) => boolean;
|
|
31
32
|
export declare const validatePackageId: (packageId: string) => boolean;
|
|
32
|
-
export declare const validateApplicationId: (applicationId: string) => boolean;
|
|
33
33
|
//# sourceMappingURL=endpoint-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-helpers.d.ts","sourceRoot":"","sources":["../../src/helpers/endpoint-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoint-helpers.d.ts","sourceRoot":"","sources":["../../src/helpers/endpoint-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU1D,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,SAAS,GACpB,KAAK,QAAQ,EACb,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,UAAU,GAAG,KACZ,IAIF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,EAC3B,KAAK,QAAQ,EACb,OAAO,CAAC,EACR,UAAU,MAAM,KACf,IAKF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAwBd,CAAC;AAGF,eAAO,MAAM,eAAe,GACzB,YAAW,SAAS,GAAG,SAAS,GAAG,MAAkB,MAEpD,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CA4Cd,CAAC;AAGJ,eAAO,MAAM,sBAAsB,GACjC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,IAOF,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,EAAE,KAAK,MAAM,yDAOzD,CAAC;AAGL,eAAO,MAAM,gBAAgB,sDAAuC,CAAC;AACrE,eAAO,MAAM,iBAAiB,sDAAsC,CAAC;AACrE,eAAO,MAAM,mBAAmB,sDAAsC,CAAC;AAGvE,eAAO,MAAM,iBAAiB,eAa5B,CAAC;AAEH,eAAO,MAAM,eAAe,eAa1B,CAAC;AAGH,eAAO,MAAM,YAAY,GACvB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,IAyBF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAYd,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,OAO3D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,KAAG,OAOrD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import multer from "multer";
|
|
2
2
|
import rateLimit from "express-rate-limit";
|
|
3
|
-
import { authenticateStudent,
|
|
3
|
+
import { authenticateStudent, tryAuthenticateStudent, authenticateStudentOrTeacher, authenticate, } from "./request-headers";
|
|
4
4
|
import { validationResult } from "express-validator";
|
|
5
5
|
// Middleware for standardized error responses
|
|
6
6
|
export const sendError = (res, status, message, details) => {
|
|
@@ -17,22 +17,71 @@ export const sendSuccess = (res, data, message) => {
|
|
|
17
17
|
response.message = message;
|
|
18
18
|
res.json(response);
|
|
19
19
|
};
|
|
20
|
-
// Authentication middleware
|
|
20
|
+
// Authentication middleware (backward compatible version)
|
|
21
21
|
export const requireAuth = async (req, res, next) => {
|
|
22
22
|
try {
|
|
23
23
|
const result = await authenticateStudent(req, res);
|
|
24
|
-
if (!result
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if (!result) {
|
|
25
|
+
// Only send error if response hasn't been sent already
|
|
26
|
+
if (!res.headersSent) {
|
|
27
|
+
sendError(res, 401, "Authentication required");
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (result.handled) {
|
|
32
|
+
// Response was already handled by authenticate function
|
|
33
|
+
return;
|
|
27
34
|
}
|
|
28
35
|
req.user = result.user;
|
|
29
|
-
req.appId = getAppId(req);
|
|
30
36
|
next();
|
|
31
37
|
}
|
|
32
38
|
catch (error) {
|
|
33
39
|
console.error("Authentication error:", error);
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
// Only send error if response hasn't been sent already
|
|
41
|
+
if (!res.headersSent) {
|
|
42
|
+
sendError(res, 500, "Authentication failed");
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
// Flexible authentication middleware with user type parameter
|
|
48
|
+
export const requireAuthType = (userTypes = "student") => async (req, res, next) => {
|
|
49
|
+
try {
|
|
50
|
+
let result;
|
|
51
|
+
switch (userTypes) {
|
|
52
|
+
case "student":
|
|
53
|
+
result = await authenticateStudent(req, res);
|
|
54
|
+
break;
|
|
55
|
+
case "teacher":
|
|
56
|
+
result = await authenticate(req, res, ["google.com", "password"], false);
|
|
57
|
+
break;
|
|
58
|
+
case "both":
|
|
59
|
+
result = await authenticateStudentOrTeacher(req, res);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
result = await authenticateStudent(req, res);
|
|
63
|
+
}
|
|
64
|
+
if (!result) {
|
|
65
|
+
// Only send error if response hasn't been sent already
|
|
66
|
+
if (!res.headersSent) {
|
|
67
|
+
sendError(res, 401, "Authentication required");
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (result.handled) {
|
|
72
|
+
// Response was already handled by authenticate function
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
req.user = result.user;
|
|
76
|
+
next();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error("Authentication error:", error);
|
|
80
|
+
// Only send error if response hasn't been sent already
|
|
81
|
+
if (!res.headersSent) {
|
|
82
|
+
sendError(res, 500, "Authentication failed");
|
|
83
|
+
}
|
|
84
|
+
return;
|
|
36
85
|
}
|
|
37
86
|
};
|
|
38
87
|
// Validation middleware
|
|
@@ -53,7 +102,8 @@ export const createRateLimit = (windowMs, max) => rateLimit({
|
|
|
53
102
|
legacyHeaders: false,
|
|
54
103
|
});
|
|
55
104
|
// Rate limits
|
|
56
|
-
export const generalRateLimit = createRateLimit(15 * 60 * 1000,
|
|
105
|
+
export const generalRateLimit = createRateLimit(15 * 60 * 1000, 300); // 300 requests per 15 minutes
|
|
106
|
+
export const resourceRateLimit = createRateLimit(1 * 60 * 1000, 500); // 500 requests per 1 minute for resources
|
|
57
107
|
export const heavyOperationLimit = createRateLimit(60 * 60 * 1000, 20); // 20 requests per hour for creating sessions
|
|
58
108
|
// File upload configuration for feedback
|
|
59
109
|
export const imageUploadConfig = multer({
|
|
@@ -117,13 +167,11 @@ export const optionalAuth = async (req, res, next) => {
|
|
|
117
167
|
if (user) {
|
|
118
168
|
req.user = user;
|
|
119
169
|
}
|
|
120
|
-
req.appId = getAppId(req);
|
|
121
170
|
next();
|
|
122
171
|
}
|
|
123
172
|
catch (error) {
|
|
124
173
|
console.error("Optional authentication error:", error);
|
|
125
174
|
// Continue without authentication for optional auth
|
|
126
|
-
req.appId = getAppId(req);
|
|
127
175
|
next();
|
|
128
176
|
}
|
|
129
177
|
};
|
|
@@ -140,10 +188,4 @@ export const validatePackageId = (packageId) => {
|
|
|
140
188
|
packageId.length <= 100 &&
|
|
141
189
|
/^[a-zA-Z0-9_-]+$/.test(packageId));
|
|
142
190
|
};
|
|
143
|
-
export const validateApplicationId = (applicationId) => {
|
|
144
|
-
return (typeof applicationId === "string" &&
|
|
145
|
-
applicationId.length > 0 &&
|
|
146
|
-
applicationId.length <= 100 &&
|
|
147
|
-
/^[a-zA-Z0-9_-]+$/.test(applicationId));
|
|
148
|
-
};
|
|
149
191
|
//# sourceMappingURL=endpoint-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-helpers.js","sourceRoot":"","sources":["../../src/helpers/endpoint-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"endpoint-helpers.js","sourceRoot":"","sources":["../../src/helpers/endpoint-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import Excel from "exceljs";
|
|
2
|
+
export declare class ExcelHelper {
|
|
3
|
+
private filename;
|
|
4
|
+
private worksheetName?;
|
|
5
|
+
workbook: Excel.Workbook;
|
|
6
|
+
worksheet: Excel.Worksheet | undefined;
|
|
7
|
+
columnsByIndex: Map<number, string>;
|
|
8
|
+
columnsByName: Map<string, number>;
|
|
9
|
+
rows: ExcelHelperRow[];
|
|
10
|
+
constructor(filename: string, worksheetName?: string | undefined);
|
|
11
|
+
save(): Promise<void>;
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
getCellValue(row: Excel.Row, key: string): string;
|
|
14
|
+
uniqueValuesInColumn(key: string): string[];
|
|
15
|
+
clearFilter(): void;
|
|
16
|
+
filterSheetByColumnValue(filter: {
|
|
17
|
+
columnName: string;
|
|
18
|
+
value: string;
|
|
19
|
+
}[]): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class ExcelHelperRow {
|
|
22
|
+
private row;
|
|
23
|
+
private columnsByName;
|
|
24
|
+
constructor(row: Excel.Row, columnsByName: Map<string, number>);
|
|
25
|
+
getValue(key: string): any;
|
|
26
|
+
getNumericValue(key: string): number | null;
|
|
27
|
+
setValue: (key: string, value: string) => void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=excel-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-helper.d.ts","sourceRoot":"","sources":["../../src/helpers/excel-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,qBAAa,WAAW;IAMV,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,aAAa,CAAC;IAL5D,QAAQ,iBAAwB;IAChC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAa;IACnD,cAAc,sBAA6B;IAC3C,aAAa,sBAA6B;IAC1C,IAAI,EAAE,cAAc,EAAE,CAAM;gBACR,QAAQ,EAAE,MAAM,EAAU,aAAa,CAAC,EAAE,MAAM,YAAA;IAE9D,IAAI;IAIJ,IAAI;IA0BV,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM;IASxC,oBAAoB,CAAC,GAAG,EAAE,MAAM;IAiBhC,WAAW;IAUX,wBAAwB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;CA+BzE;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;gBADb,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAG5C,QAAQ,CAAC,GAAG,EAAE,MAAM;IAmBpB,eAAe,CAAC,GAAG,EAAE,MAAM;IAa3B,QAAQ,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,UAOpC;CACH"}
|