@vue-skuilder/express 0.1.11-2 → 0.1.11-20
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/app-factory.d.ts +1 -1
- package/dist/app-factory.d.ts.map +1 -1
- package/dist/app-factory.js +33 -7
- package/dist/app-factory.js.map +1 -1
- package/dist/app.js +30 -1
- package/dist/app.js.map +1 -1
- package/dist/assets/classroomDesignDoc.js +24 -0
- package/dist/assets/courseValidateDocUpdate.js +56 -0
- package/dist/assets/get-tagsDesignDoc.json +9 -0
- package/dist/attachment-preprocessing/index.d.ts +1 -1
- package/dist/attachment-preprocessing/index.d.ts.map +1 -1
- package/dist/attachment-preprocessing/index.js +94 -27
- package/dist/attachment-preprocessing/index.js.map +1 -1
- package/dist/client-requests/classroom-requests.d.ts.map +1 -1
- package/dist/client-requests/classroom-requests.js +2 -2
- package/dist/client-requests/classroom-requests.js.map +1 -1
- package/dist/client-requests/course-requests.d.ts.map +1 -1
- package/dist/client-requests/course-requests.js +8 -5
- package/dist/client-requests/course-requests.js.map +1 -1
- package/dist/couchdb/authentication.js +4 -4
- package/dist/couchdb/authentication.js.map +1 -1
- package/dist/couchdb/index.d.ts +4 -3
- package/dist/couchdb/index.d.ts.map +1 -1
- package/dist/couchdb/index.js +32 -27
- package/dist/couchdb/index.js.map +1 -1
- package/dist/design-docs.d.ts.map +1 -1
- package/dist/design-docs.js +9 -4
- package/dist/design-docs.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +3 -21
- package/dist/utils/env.js.map +1 -1
- package/package.json +5 -5
- package/src/app-factory.ts +40 -16
- package/src/app.ts +36 -1
- package/src/attachment-preprocessing/index.ts +108 -36
- package/src/client-requests/classroom-requests.ts +3 -2
- package/src/client-requests/course-requests.ts +8 -5
- package/src/couchdb/authentication.ts +4 -4
- package/src/couchdb/index.ts +54 -37
- package/src/design-docs.ts +10 -4
- package/src/types.ts +16 -10
- package/src/utils/env.ts +4 -25
package/dist/app-factory.d.ts
CHANGED
|
@@ -18,5 +18,5 @@ export declare function createExpressApp(config: AppConfig): express.Application
|
|
|
18
18
|
* Initialize background services and database connections.
|
|
19
19
|
* This should be called after the server starts listening.
|
|
20
20
|
*/
|
|
21
|
-
export declare function initializeServices(): Promise<void>;
|
|
21
|
+
export declare function initializeServices(config: AppConfig): Promise<void>;
|
|
22
22
|
//# sourceMappingURL=app-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../src/app-factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-factory.d.ts","sourceRoot":"","sources":["../src/app-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAK9B,OAAO,OAAO,MAAM,SAAS,CAAC;AAmB9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,OAAO;IACvD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAwBhE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CA6LvE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDzE"}
|
package/dist/app-factory.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { initializeDataLayer } from '@vue-skuilder/db';
|
|
1
2
|
import { ServerRequestType as RequestEnum, prepareNote55, } from '@vue-skuilder/common';
|
|
2
3
|
import { CourseLookup } from '@vue-skuilder/db';
|
|
3
4
|
import cookieParser from 'cookie-parser';
|
|
@@ -9,7 +10,7 @@ import { ClassroomCreationQueue, ClassroomJoinQueue, ClassroomLeaveQueue, } from
|
|
|
9
10
|
import { CourseCreationQueue, initCourseDBDesignDocInsert, } from './client-requests/course-requests.js';
|
|
10
11
|
import { packCourse } from './client-requests/pack-requests.js';
|
|
11
12
|
import { requestIsAuthenticated } from './couchdb/authentication.js';
|
|
12
|
-
import
|
|
13
|
+
import { getCouchDB, initializeCouchDB, useOrCreateCourseDB, useOrCreateDB } from './couchdb/index.js';
|
|
13
14
|
import { classroomDbDesignDoc } from './design-docs.js';
|
|
14
15
|
import logger from './logger.js';
|
|
15
16
|
import logsRouter from './routes/logs.js';
|
|
@@ -30,6 +31,7 @@ function convertToEnvConfig(config) {
|
|
|
30
31
|
COUCHDB_PASSWORD: config.couchdb.password,
|
|
31
32
|
VERSION: config.version,
|
|
32
33
|
NODE_ENV: config.nodeEnv || 'development',
|
|
34
|
+
COURSE_IDS: config.courseIDs || [],
|
|
33
35
|
};
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
@@ -42,6 +44,8 @@ export function createExpressApp(config) {
|
|
|
42
44
|
const envConfig = isExpressServerConfig(config)
|
|
43
45
|
? convertToEnvConfig(config)
|
|
44
46
|
: config;
|
|
47
|
+
// Initialize CouchDB connection
|
|
48
|
+
initializeCouchDB(envConfig);
|
|
45
49
|
// Configure CORS - use config if available, otherwise defaults
|
|
46
50
|
const corsOptions = isExpressServerConfig(config) && config.cors
|
|
47
51
|
? config.cors
|
|
@@ -86,8 +90,8 @@ export function createExpressApp(config) {
|
|
|
86
90
|
logger.info(`Delete request made on course ${req.params.courseID}...`);
|
|
87
91
|
const auth = await requestIsAuthenticated(req);
|
|
88
92
|
if (auth) {
|
|
89
|
-
logger.info(
|
|
90
|
-
const dbResp = await
|
|
93
|
+
logger.info(` Authenticated delete request made...`);
|
|
94
|
+
const dbResp = await getCouchDB().db.destroy(`coursedb-${req.params.courseID}`);
|
|
91
95
|
if (!dbResp.ok) {
|
|
92
96
|
res.json({ success: false, error: dbResp });
|
|
93
97
|
return;
|
|
@@ -143,7 +147,7 @@ export function createExpressApp(config) {
|
|
|
143
147
|
}
|
|
144
148
|
else if (body.type === RequestEnum.ADD_COURSE_DATA) {
|
|
145
149
|
const payload = prepareNote55(body.data.courseID, body.data.codeCourse, body.data.shape, body.data.data, body.data.author, body.data.tags, body.data.uploads);
|
|
146
|
-
|
|
150
|
+
getCouchDB().use(`coursedb-${body.data.courseID}`)
|
|
147
151
|
.insert(payload)
|
|
148
152
|
.then((r) => {
|
|
149
153
|
logger.info(`\t\t\tCouchDB insert result: ${JSON.stringify(r)}`);
|
|
@@ -184,7 +188,7 @@ export function createExpressApp(config) {
|
|
|
184
188
|
});
|
|
185
189
|
app.get('/', (_req, res) => {
|
|
186
190
|
let status = `Express service is running.\nVersion: ${envConfig.VERSION}\n`;
|
|
187
|
-
|
|
191
|
+
getCouchDB().session()
|
|
188
192
|
.then((s) => {
|
|
189
193
|
if (s.ok) {
|
|
190
194
|
status += 'Couchdb is running.\n';
|
|
@@ -206,12 +210,34 @@ export function createExpressApp(config) {
|
|
|
206
210
|
* Initialize background services and database connections.
|
|
207
211
|
* This should be called after the server starts listening.
|
|
208
212
|
*/
|
|
209
|
-
export async function initializeServices() {
|
|
213
|
+
export async function initializeServices(config) {
|
|
214
|
+
// Initialize data layer first
|
|
215
|
+
const envConfig = isExpressServerConfig(config)
|
|
216
|
+
? convertToEnvConfig(config)
|
|
217
|
+
: config;
|
|
218
|
+
await initializeDataLayer({
|
|
219
|
+
type: 'couch',
|
|
220
|
+
options: {
|
|
221
|
+
COUCHDB_PASSWORD: envConfig.COUCHDB_PASSWORD,
|
|
222
|
+
COUCHDB_USERNAME: envConfig.COUCHDB_ADMIN,
|
|
223
|
+
COUCHDB_SERVER_PROTOCOL: envConfig.COUCHDB_PROTOCOL,
|
|
224
|
+
COUCHDB_SERVER_URL: envConfig.COUCHDB_SERVER,
|
|
225
|
+
},
|
|
226
|
+
}).catch((e) => {
|
|
227
|
+
logger.error('Error initializing data layer:', e);
|
|
228
|
+
// In programmatic mode, we shouldn't exit the process, but let the error propagate
|
|
229
|
+
throw e;
|
|
230
|
+
});
|
|
210
231
|
try {
|
|
211
232
|
// start the change-listener that does post-processing on user
|
|
212
233
|
// media uploads
|
|
213
234
|
void PostProcess();
|
|
214
|
-
|
|
235
|
+
initCourseDBDesignDocInsert().catch((error) => {
|
|
236
|
+
logger.error(`Error in initCourseDBDesignDocInsert background task: ${error}`);
|
|
237
|
+
if (error && typeof error === 'object') {
|
|
238
|
+
logger.error(`Full error details in initCourseDBDesignDocInsert: ${JSON.stringify(error)}`);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
215
241
|
void useOrCreateDB('classdb-lookup');
|
|
216
242
|
try {
|
|
217
243
|
await (await useOrCreateDB('coursedb')).insert({
|
package/dist/app-factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../src/app-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,WAAW,EAEhC,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../src/app-factory.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
import { createExpressApp, initializeServices } from './app-factory.js';
|
|
2
2
|
import logger from './logger.js';
|
|
3
3
|
import ENV from './utils/env.js';
|
|
4
|
+
import dotenv from 'dotenv';
|
|
5
|
+
import { initializeCouchDB } from './couchdb/index.js';
|
|
6
|
+
import { initializeDataLayer } from '@vue-skuilder/db';
|
|
7
|
+
dotenv.config({
|
|
8
|
+
path: process.argv && process.argv.length == 3
|
|
9
|
+
? process.argv[2]
|
|
10
|
+
: '.env.development',
|
|
11
|
+
});
|
|
12
|
+
// Now that dotenv is configured, we can validate the environment
|
|
13
|
+
const requiredVars = ['COUCHDB_SERVER', 'COUCHDB_PROTOCOL', 'COUCHDB_ADMIN', 'COUCHDB_PASSWORD', 'VERSION', 'NODE_ENV'];
|
|
14
|
+
const missingVars = requiredVars.filter(v => !process.env[v]);
|
|
15
|
+
if (missingVars.length > 0) {
|
|
16
|
+
missingVars.forEach(v => logger.error(`${v} not defined in environment`));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// Initialize CouchDB connection
|
|
20
|
+
initializeCouchDB(ENV);
|
|
21
|
+
initializeDataLayer({
|
|
22
|
+
type: 'couch',
|
|
23
|
+
options: {
|
|
24
|
+
COUCHDB_PASSWORD: ENV.COUCHDB_PASSWORD,
|
|
25
|
+
COUCHDB_USERNAME: ENV.COUCHDB_ADMIN,
|
|
26
|
+
COUCHDB_SERVER_PROTOCOL: ENV.COUCHDB_PROTOCOL,
|
|
27
|
+
COUCHDB_SERVER_URL: ENV.COUCHDB_SERVER,
|
|
28
|
+
},
|
|
29
|
+
}).catch((e) => {
|
|
30
|
+
logger.error('Error initializing data layer:', e);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
});
|
|
4
33
|
process.on('unhandledRejection', (reason, promise) => {
|
|
5
34
|
logger.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
6
35
|
});
|
|
@@ -18,7 +47,7 @@ const init = async () => {
|
|
|
18
47
|
while (!listening) {
|
|
19
48
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
20
49
|
}
|
|
21
|
-
await initializeServices();
|
|
50
|
+
await initializeServices(ENV);
|
|
22
51
|
};
|
|
23
52
|
init().catch((e) => {
|
|
24
53
|
logger.error(`Error initializing app: ${JSON.stringify(e)}`);
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,GAAG,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function (newDoc, oldDoc, userCtx, secObj) {
|
|
2
|
+
// from https://github.com/iriscouch/manage_couchdb/blob/master/js/validate_doc_update.js
|
|
3
|
+
|
|
4
|
+
var ddoc = this;
|
|
5
|
+
|
|
6
|
+
secObj.admins = secObj.admins || {};
|
|
7
|
+
secObj.admins.names = secObj.admins.names || [];
|
|
8
|
+
secObj.admins.roles = secObj.admins.roles || [];
|
|
9
|
+
|
|
10
|
+
var IS_DB_ADMIN = false;
|
|
11
|
+
if (~userCtx.roles.indexOf('_admin'))
|
|
12
|
+
IS_DB_ADMIN = true;
|
|
13
|
+
if (~secObj.admins.names.indexOf(userCtx.name))
|
|
14
|
+
IS_DB_ADMIN = true;
|
|
15
|
+
for (var i = 0; i < userCtx.roles; i++)
|
|
16
|
+
if (~secObj.admins.roles.indexOf(userCtx.roles[i]))
|
|
17
|
+
IS_DB_ADMIN = true;
|
|
18
|
+
|
|
19
|
+
if (ddoc.access && ddoc.access.read_only)
|
|
20
|
+
if (IS_DB_ADMIN)
|
|
21
|
+
log('Admin change on read-only db: ' + newDoc._id);
|
|
22
|
+
else
|
|
23
|
+
throw { 'forbidden': 'This database is read-only' };
|
|
24
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
function(newDoc, oldDoc, userCtx, secObj) {
|
|
2
|
+
// Skip validation for deletions
|
|
3
|
+
if (newDoc._deleted) return;
|
|
4
|
+
|
|
5
|
+
// Always allow admins to do anything
|
|
6
|
+
if (userCtx.roles.indexOf('_admin') !== -1) return;
|
|
7
|
+
|
|
8
|
+
// For CourseConfig document - we need special handling
|
|
9
|
+
if (newDoc._id === 'CourseConfig') {
|
|
10
|
+
// Allow the creator or admins listed in the document to modify it
|
|
11
|
+
if (oldDoc && oldDoc.creator === userCtx.name) return;
|
|
12
|
+
if (oldDoc && oldDoc.admins && Array.isArray(oldDoc.admins) && oldDoc.admins.indexOf(userCtx.name) !== -1) return;
|
|
13
|
+
|
|
14
|
+
// For updates, if user is not creator or admin, deny
|
|
15
|
+
if (oldDoc) {
|
|
16
|
+
throw({forbidden: "Only course creator or admins can modify course configuration"});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// For new course config, allow (initial creation is secured at API level)
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// For all other documents
|
|
24
|
+
var isAdmin = false;
|
|
25
|
+
var isModerator = false;
|
|
26
|
+
|
|
27
|
+
// Course admins and moderators can edit anything
|
|
28
|
+
// (Since we can't check CourseConfig directly, we rely on document author for regular docs)
|
|
29
|
+
|
|
30
|
+
// Document has author field that matches current user - allow
|
|
31
|
+
if (oldDoc && oldDoc.author === userCtx.name) return;
|
|
32
|
+
|
|
33
|
+
// Allow document creation by any authenticated user
|
|
34
|
+
if (!oldDoc) {
|
|
35
|
+
if (!userCtx.name) {
|
|
36
|
+
throw({forbidden: "You must be logged in to create documents"});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Ensure new documents have an author field that matches the current user
|
|
40
|
+
if (!newDoc.author || newDoc.author !== userCtx.name) {
|
|
41
|
+
throw({forbidden: "Document author must match your username"});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// For updates to existing documents, deny if not the original author
|
|
48
|
+
if (oldDoc && oldDoc.author && oldDoc.author !== userCtx.name) {
|
|
49
|
+
throw({forbidden: "You can only modify your own documents"});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Special case for design documents - only admins can modify (handled above)
|
|
53
|
+
if (newDoc._id.startsWith('_design/')) {
|
|
54
|
+
throw({forbidden: "Only admins can modify design documents"});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_id": "_design/getTags",
|
|
3
|
+
"views": {
|
|
4
|
+
"get-tags": {
|
|
5
|
+
"map": "function (doc) {\n if (doc.docType && doc.docType === \"TAG\"\n) {\n for (var cardIndex in doc.taggedCards){\n emit(doc.taggedCards[cardIndex], {\n docType: doc.docType,\n name: doc.name,\n snippit: doc.snippit,\n wiki: '',\n taggedCards: []\n });\n }\n }\n}"
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
"language": "javascript"
|
|
9
|
+
}
|
|
@@ -7,5 +7,5 @@ export declare function postProcessCourse(courseID: string): void;
|
|
|
7
7
|
* Connect to CouchDB, monitor changes to uploaded card data,
|
|
8
8
|
* perform post-processing on uploaded media
|
|
9
9
|
*/
|
|
10
|
-
export default function postProcess(): Promise<void>;
|
|
10
|
+
export default function postProcess(courseIDs?: string[]): Promise<void>;
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAyCxD;AAED;;;GAGG;AACH,wBAA8B,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF7E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { getCouchDB } from '../couchdb/index.js';
|
|
2
2
|
import { normalize } from './normalize.js';
|
|
3
3
|
import AsyncProcessQueue from '../utils/processQueue.js';
|
|
4
4
|
import logger from '../logger.js';
|
|
@@ -12,10 +12,23 @@ const Q = new AsyncProcessQueue(processDocAttachments);
|
|
|
12
12
|
*/
|
|
13
13
|
export function postProcessCourse(courseID) {
|
|
14
14
|
try {
|
|
15
|
-
logger.info(`
|
|
15
|
+
logger.info(`postProcessCourse: Starting for courseID: ${courseID}`);
|
|
16
16
|
const crsString = `coursedb-${courseID}`;
|
|
17
|
+
logger.debug(`postProcessCourse: Using database name: ${crsString}`);
|
|
17
18
|
// Get database instance
|
|
18
|
-
const db =
|
|
19
|
+
const db = getCouchDB().use(crsString);
|
|
20
|
+
// Test database existence before setting up change listener
|
|
21
|
+
db.info().catch((e) => {
|
|
22
|
+
if (e && typeof e === 'object' && 'status' in e && e.status === 404) {
|
|
23
|
+
logger.error(`postProcessCourse: Database "${crsString}" does not exist. Expected database name may be incorrect for courseID: ${courseID}`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
logger.error(`postProcessCourse: Error checking database "${crsString}": ${e}`);
|
|
27
|
+
// Log full error details for debugging
|
|
28
|
+
if (e && typeof e === 'object') {
|
|
29
|
+
logger.error(`postProcessCourse: Full error details for ${crsString}:`, e);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
19
32
|
const courseFilter = filterFactory(courseID);
|
|
20
33
|
db.changesReader
|
|
21
34
|
.start({
|
|
@@ -39,33 +52,56 @@ export function postProcessCourse(courseID) {
|
|
|
39
52
|
* Connect to CouchDB, monitor changes to uploaded card data,
|
|
40
53
|
* perform post-processing on uploaded media
|
|
41
54
|
*/
|
|
42
|
-
export default async function postProcess() {
|
|
55
|
+
export default async function postProcess(courseIDs) {
|
|
43
56
|
try {
|
|
44
57
|
logger.info(`Following all course databases for changes...`);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
let processedCourseIds = new Set();
|
|
59
|
+
if (courseIDs && courseIDs.length > 0) {
|
|
60
|
+
processedCourseIds = new Set(courseIDs);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Existing behavior for platform-ui courses
|
|
49
64
|
try {
|
|
50
|
-
|
|
51
|
-
|
|
65
|
+
const courses = await CourseLookup.allCourseWare();
|
|
66
|
+
for (const course of courses) {
|
|
67
|
+
try {
|
|
68
|
+
postProcessCourse(course._id);
|
|
69
|
+
processedCourseIds.add(`coursedb-${course._id}`);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
logger.error(`Error processing course ${course._id}: ${e}`);
|
|
73
|
+
throw e;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
52
76
|
}
|
|
53
77
|
catch (e) {
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
// Handle CourseLookup.allCourseWare() failure gracefully
|
|
79
|
+
if (e && typeof e === 'object' && 'error' in e && e.error === 'not_found') {
|
|
80
|
+
logger.warn('Course lookup database not found - skipping platform course discovery');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
logger.error(`Error fetching course list from CourseLookup: ${e}`);
|
|
84
|
+
if (e && typeof e === 'object' && 'status' in e && e.status === 404) {
|
|
85
|
+
logger.error(`Database connection failed - this might indicate a database name mismatch or connection issue`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Continue to studio mode discovery even if platform courses fail
|
|
56
89
|
}
|
|
57
90
|
}
|
|
58
91
|
// Studio mode: discover additional databases not in coursedb-lookup
|
|
59
92
|
if (ENV.NODE_ENV === 'studio') {
|
|
60
93
|
logger.info('Studio mode detected: scanning for additional course databases...');
|
|
61
94
|
try {
|
|
62
|
-
const allDbs = await
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
logger.info(`Found ${studioDbs.length} potential studio databases`);
|
|
95
|
+
const allDbs = await getCouchDB().db.list();
|
|
96
|
+
logger.debug(`All databases found: ${allDbs.join(', ')}`);
|
|
97
|
+
const studioDbs = allDbs.filter((db) => db.startsWith('coursedb-') && !processedCourseIds.has(db));
|
|
98
|
+
logger.info(`Found ${studioDbs.length} potential studio databases: ${studioDbs.join(', ')}`);
|
|
99
|
+
logger.debug(`Already processed course IDs: ${Array.from(processedCourseIds).join(', ')}`);
|
|
66
100
|
for (const studioDb of studioDbs) {
|
|
67
101
|
const courseId = studioDb.replace('coursedb-', '');
|
|
102
|
+
logger.debug(`Checking studio database: ${studioDb} (courseId: ${courseId})`);
|
|
68
103
|
try {
|
|
104
|
+
logger.debug(`Calling hasCourseConfig for: ${studioDb}`);
|
|
69
105
|
if (await hasCourseConfig(studioDb)) {
|
|
70
106
|
logger.info(`Starting postprocessing for studio database: ${studioDb}`);
|
|
71
107
|
postProcessCourse(courseId);
|
|
@@ -76,6 +112,10 @@ export default async function postProcess() {
|
|
|
76
112
|
}
|
|
77
113
|
catch (e) {
|
|
78
114
|
logger.error(`Error processing studio database ${studioDb}: ${e}`);
|
|
115
|
+
// Log the full error object for debugging
|
|
116
|
+
if (e && typeof e === 'object') {
|
|
117
|
+
logger.error(`Error details for ${studioDb}:`, e);
|
|
118
|
+
}
|
|
79
119
|
}
|
|
80
120
|
}
|
|
81
121
|
}
|
|
@@ -89,7 +129,9 @@ export default async function postProcess() {
|
|
|
89
129
|
}
|
|
90
130
|
}
|
|
91
131
|
function filterFactory(courseID) {
|
|
92
|
-
const
|
|
132
|
+
const databaseName = `coursedb-${courseID}`;
|
|
133
|
+
logger.debug(`filterFactory: Creating filter for database: ${databaseName}`);
|
|
134
|
+
const courseDatabase = getCouchDB().use(databaseName);
|
|
93
135
|
return async function filterChanges(changeItem) {
|
|
94
136
|
try {
|
|
95
137
|
const docNoAttachments = await courseDatabase.get(changeItem.id, {
|
|
@@ -135,7 +177,7 @@ async function processDocAttachments(request) {
|
|
|
135
177
|
status: 'warning',
|
|
136
178
|
};
|
|
137
179
|
}
|
|
138
|
-
const courseDatabase =
|
|
180
|
+
const courseDatabase = getCouchDB().use(`coursedb-${request.courseID}`);
|
|
139
181
|
const doc = await courseDatabase.get(request.docID, {
|
|
140
182
|
attachments: true,
|
|
141
183
|
att_encoding_info: true,
|
|
@@ -180,24 +222,49 @@ async function processDocAttachments(request) {
|
|
|
180
222
|
*/
|
|
181
223
|
async function hasCourseConfig(databaseName) {
|
|
182
224
|
try {
|
|
183
|
-
|
|
225
|
+
logger.debug(`hasCourseConfig: Accessing database: ${databaseName}`);
|
|
226
|
+
const db = getCouchDB().use(databaseName);
|
|
227
|
+
// First check if database exists by trying to get info
|
|
228
|
+
try {
|
|
229
|
+
await db.info();
|
|
230
|
+
logger.debug(`hasCourseConfig: Database ${databaseName} exists, checking for course config`);
|
|
231
|
+
}
|
|
232
|
+
catch (infoError) {
|
|
233
|
+
if (infoError && typeof infoError === 'object' && 'status' in infoError && infoError.status === 404) {
|
|
234
|
+
logger.debug(`hasCourseConfig: Database ${databaseName} does not exist (404)`);
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
logger.warn(`hasCourseConfig: Error getting info for database ${databaseName}: ${infoError}`);
|
|
238
|
+
throw infoError;
|
|
239
|
+
}
|
|
184
240
|
// Try to find a course configuration document
|
|
185
241
|
// Course databases should have documents with course metadata
|
|
186
242
|
const result = await db.find({
|
|
187
243
|
selector: {
|
|
188
244
|
$or: [
|
|
189
|
-
{
|
|
190
|
-
{
|
|
191
|
-
{
|
|
192
|
-
{
|
|
193
|
-
]
|
|
245
|
+
{ type: 'course' },
|
|
246
|
+
{ shape: { $exists: true } },
|
|
247
|
+
{ course_id: { $exists: true } },
|
|
248
|
+
{ courseID: { $exists: true } },
|
|
249
|
+
],
|
|
194
250
|
},
|
|
195
|
-
limit: 1
|
|
251
|
+
limit: 1,
|
|
196
252
|
});
|
|
197
|
-
|
|
253
|
+
const hasConfig = result.docs && result.docs.length > 0;
|
|
254
|
+
logger.debug(`hasCourseConfig: Database ${databaseName} has course config: ${hasConfig}`);
|
|
255
|
+
return hasConfig;
|
|
198
256
|
}
|
|
199
257
|
catch (e) {
|
|
200
|
-
|
|
258
|
+
// Handle specific database not found errors
|
|
259
|
+
if (e && typeof e === 'object' && 'error' in e && e.error === 'not_found') {
|
|
260
|
+
logger.debug(`hasCourseConfig: Database ${databaseName} does not exist (not_found error)`);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
logger.error(`hasCourseConfig: Error checking course config for ${databaseName}: ${e}`);
|
|
264
|
+
// Log full error details for debugging
|
|
265
|
+
if (e && typeof e === 'object') {
|
|
266
|
+
logger.error(`hasCourseConfig: Full error details for ${databaseName}:`, e);
|
|
267
|
+
}
|
|
201
268
|
return false;
|
|
202
269
|
}
|
|
203
270
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classroom-requests.d.ts","sourceRoot":"","sources":["../../src/client-requests/classroom-requests.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EAIf,MAAM,EACP,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"classroom-requests.d.ts","sourceRoot":"","sources":["../../src/client-requests/classroom-requests.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EAIf,MAAM,EACP,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,iBAA6B,MAAM,0BAA0B,CAAC;AAGrE,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAuMpD,eAAO,MAAM,mBAAmB;;;cAEO,MAAM;yDAE5B,CAAC;AAElB,eAAO,MAAM,kBAAkB;;;;;;;;;;SAIf,CAAC;AAEjB,eAAO,MAAM,sBAAsB;;;;;SAIjB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import hashids from 'hashids';
|
|
2
2
|
import { Status, } from '@vue-skuilder/common';
|
|
3
3
|
import { classroomDbDesignDoc } from '../design-docs.js';
|
|
4
|
-
import
|
|
4
|
+
import { docCount, useOrCreateDB, getCouchDB, } from '../couchdb/index.js';
|
|
5
5
|
import AsyncProcessQueue from '../utils/processQueue.js';
|
|
6
6
|
import logger from '../logger.js';
|
|
7
7
|
export const CLASSROOM_DB_LOOKUP = 'classdb-lookup';
|
|
@@ -67,7 +67,7 @@ async function createClassroom(config) {
|
|
|
67
67
|
logger.info(`CreateClass Request:
|
|
68
68
|
${JSON.stringify(config)}`);
|
|
69
69
|
const num = (await docCount(CLASSROOM_DB_LOOKUP)) + 1; //
|
|
70
|
-
const uuid = (await
|
|
70
|
+
const uuid = (await getCouchDB().uuids(1)).uuids[0];
|
|
71
71
|
const hasher = new hashids('', 6, 'abcdefghijklmnopqrstuvwxyz123456789');
|
|
72
72
|
const studentDbName = `classdb-student-${uuid}`;
|
|
73
73
|
const teacherDbName = `classdb-teacher-${uuid}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classroom-requests.js","sourceRoot":"","sources":["../../src/client-requests/classroom-requests.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAKL,MAAM,GACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"classroom-requests.js","sourceRoot":"","sources":["../../src/client-requests/classroom-requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course-requests.d.ts","sourceRoot":"","sources":["../../src/client-requests/course-requests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,iBAA6B,MAAM,0BAA0B,CAAC;AAgDrE,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"course-requests.d.ts","sourceRoot":"","sources":["../../src/client-requests/course-requests.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,iBAA6B,MAAM,0BAA0B,CAAC;AAgDrE,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CjE;AAqFD,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;SAIjB,CAAC"}
|