@vue-skuilder/express 0.1.7 → 0.1.8-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/dist/app.d.ts.map +1 -1
- package/dist/app.js +15 -0
- package/dist/app.js.map +1 -1
- package/dist/attachment-preprocessing/index.d.ts.map +1 -1
- package/dist/attachment-preprocessing/index.js +58 -0
- package/dist/attachment-preprocessing/index.js.map +1 -1
- package/dist/client-requests/pack-requests.d.ts +19 -0
- package/dist/client-requests/pack-requests.d.ts.map +1 -0
- package/dist/client-requests/pack-requests.js +130 -0
- package/dist/client-requests/pack-requests.js.map +1 -0
- package/dist/couchdb/authentication.d.ts.map +1 -1
- package/dist/couchdb/authentication.js +5 -0
- package/dist/couchdb/authentication.js.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 +1 -0
- package/dist/utils/env.js.map +1 -1
- package/package.json +6 -4
- package/src/app.ts +17 -0
- package/src/attachment-preprocessing/index.ts +64 -0
- package/src/client-requests/pack-requests.ts +166 -0
- package/src/couchdb/authentication.ts +6 -0
- package/src/utils/env.ts +2 -0
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAK9B,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAK9B,OAAO,OAAO,MAAM,SAAS,CAAC;AAgD9B,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,OAAO;IACvD,IAAI,EAAE,aAAa,CAAC;CACrB"}
|
package/dist/app.js
CHANGED
|
@@ -7,6 +7,7 @@ import morgan from 'morgan';
|
|
|
7
7
|
import PostProcess from './attachment-preprocessing/index.js';
|
|
8
8
|
import { ClassroomCreationQueue, ClassroomJoinQueue, ClassroomLeaveQueue, } from './client-requests/classroom-requests.js';
|
|
9
9
|
import { CourseCreationQueue, initCourseDBDesignDocInsert, } from './client-requests/course-requests.js';
|
|
10
|
+
import { packCourse } from './client-requests/pack-requests.js';
|
|
10
11
|
import { requestIsAuthenticated } from './couchdb/authentication.js';
|
|
11
12
|
import CouchDB, { useOrCreateCourseDB, useOrCreateDB, } from './couchdb/index.js';
|
|
12
13
|
import logger from './logger.js';
|
|
@@ -128,6 +129,20 @@ async function postHandler(req, res) {
|
|
|
128
129
|
res.json(e);
|
|
129
130
|
});
|
|
130
131
|
}
|
|
132
|
+
else if (body.type === RequestEnum.PACK_COURSE) {
|
|
133
|
+
if (process.env.NODE_ENV !== 'studio') {
|
|
134
|
+
logger.info(`\tPACK_COURSE request received in production mode, but this is not supported!`);
|
|
135
|
+
res.status(400);
|
|
136
|
+
res.statusMessage = 'Packing courses is not supported in production mode.';
|
|
137
|
+
res.send();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
body.response = await packCourse({
|
|
141
|
+
courseId: body.courseId,
|
|
142
|
+
outputPath: body.outputPath
|
|
143
|
+
});
|
|
144
|
+
res.json(body.response);
|
|
145
|
+
}
|
|
131
146
|
}
|
|
132
147
|
else {
|
|
133
148
|
logger.info(`\tREQUEST UNAUTHORIZED!`);
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"
|
|
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,CA2BxD;AAED;;;GAGG;AACH,wBAA8B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDzD"}
|
|
@@ -3,6 +3,7 @@ import { normalize } from './normalize.js';
|
|
|
3
3
|
import AsyncProcessQueue from '../utils/processQueue.js';
|
|
4
4
|
import logger from '../logger.js';
|
|
5
5
|
import { CourseLookup } from '@vue-skuilder/db';
|
|
6
|
+
import ENV from '../utils/env.js';
|
|
6
7
|
// @ts-expect-error [todo]
|
|
7
8
|
const Q = new AsyncProcessQueue(processDocAttachments);
|
|
8
9
|
/**
|
|
@@ -41,16 +42,47 @@ export function postProcessCourse(courseID) {
|
|
|
41
42
|
export default async function postProcess() {
|
|
42
43
|
try {
|
|
43
44
|
logger.info(`Following all course databases for changes...`);
|
|
45
|
+
// Existing behavior for platform-ui courses
|
|
44
46
|
const courses = await CourseLookup.allCourses();
|
|
47
|
+
const processedCourseIds = new Set();
|
|
45
48
|
for (const course of courses) {
|
|
46
49
|
try {
|
|
47
50
|
postProcessCourse(course._id);
|
|
51
|
+
processedCourseIds.add(`coursedb-${course._id}`);
|
|
48
52
|
}
|
|
49
53
|
catch (e) {
|
|
50
54
|
logger.error(`Error processing course ${course._id}: ${e}`);
|
|
51
55
|
throw e;
|
|
52
56
|
}
|
|
53
57
|
}
|
|
58
|
+
// Studio mode: discover additional databases not in coursedb-lookup
|
|
59
|
+
if (ENV.NODE_ENV === 'studio') {
|
|
60
|
+
logger.info('Studio mode detected: scanning for additional course databases...');
|
|
61
|
+
try {
|
|
62
|
+
const allDbs = await CouchDB.db.list();
|
|
63
|
+
const studioDbs = allDbs.filter(db => db.startsWith('coursedb-') &&
|
|
64
|
+
!processedCourseIds.has(db));
|
|
65
|
+
logger.info(`Found ${studioDbs.length} potential studio databases`);
|
|
66
|
+
for (const studioDb of studioDbs) {
|
|
67
|
+
const courseId = studioDb.replace('coursedb-', '');
|
|
68
|
+
try {
|
|
69
|
+
if (await hasCourseConfig(studioDb)) {
|
|
70
|
+
logger.info(`Starting postprocessing for studio database: ${studioDb}`);
|
|
71
|
+
postProcessCourse(courseId);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
logger.debug(`Skipping ${studioDb}: no course config found`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
logger.error(`Error processing studio database ${studioDb}: ${e}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
logger.error(`Error discovering studio databases: ${e}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
54
86
|
}
|
|
55
87
|
catch (e) {
|
|
56
88
|
logger.error(`Error in postProcess: ${e}`);
|
|
@@ -143,4 +175,30 @@ async function processDocAttachments(request) {
|
|
|
143
175
|
logger.info(`Processing request reinsert result: ${JSON.stringify(resp)}`);
|
|
144
176
|
return resp;
|
|
145
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if a database contains course configuration (indicating it's a valid course database)
|
|
180
|
+
*/
|
|
181
|
+
async function hasCourseConfig(databaseName) {
|
|
182
|
+
try {
|
|
183
|
+
const db = CouchDB.use(databaseName);
|
|
184
|
+
// Try to find a course configuration document
|
|
185
|
+
// Course databases should have documents with course metadata
|
|
186
|
+
const result = await db.find({
|
|
187
|
+
selector: {
|
|
188
|
+
$or: [
|
|
189
|
+
{ 'type': 'course' },
|
|
190
|
+
{ 'shape': { $exists: true } },
|
|
191
|
+
{ 'course_id': { $exists: true } },
|
|
192
|
+
{ 'courseID': { $exists: true } }
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
limit: 1
|
|
196
|
+
});
|
|
197
|
+
return result.docs && result.docs.length > 0;
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
logger.debug(`Error checking course config for ${databaseName}: ${e}`);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
146
204
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,iBAA6B,MAAM,0BAA0B,CAAC;AACrE,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/attachment-preprocessing/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,iBAA6B,MAAM,0BAA0B,CAAC;AACrE,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAElC,0BAA0B;AAC1B,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAC7B,qBAAqB,CACtB,CAAC;AAgBF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,YAAY,QAAQ,EAAE,CAAC;QAEzC,wBAAwB;QACxB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7C,EAAE,CAAC,aAAa;aACb,KAAK,CAAC;YACL,sBAAsB;YACtB,WAAW,EAAE,KAAK;SACnB,CAAC;aACD,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAsC,EAAE,EAAE;YACvD,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/B,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC1B,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,KAAK,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW;IACvC,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAE7D,4CAA4C;QAC5C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9B,kBAAkB,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YAEjF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CACnC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;oBAC1B,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5B,CAAC;gBAEF,MAAM,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,6BAA6B,CAAC,CAAC;gBAEpE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAEnD,IAAI,CAAC;wBACH,IAAI,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACpC,MAAM,CAAC,IAAI,CAAC,gDAAgD,QAAQ,EAAE,CAAC,CAAC;4BACxE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;wBAC9B,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,0BAA0B,CAAC,CAAC;wBAC/D,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,CAAC,KAAK,CAAC,oCAAoC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAmB,YAAY,QAAQ,EAAE,CAAC,CAAC;IAE7E,OAAO,KAAK,UAAU,aAAa,CACjC,UAA0C;QAE1C,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE;gBAC/D,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IACE,gBAAgB,CAAC,YAAY;gBAC7B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;gBACrD,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,SAAS;oBAC1C,gBAAgB,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,EAC1C,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE;oBAClD,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;gBACH,MAAM,iBAAiB,GAAgC;oBACrD,QAAQ;oBACR,KAAK,EAAE,GAAG,CAAC,GAAG;oBACd,MAAM,EAAE,EAAE;iBACX,CAAC;gBACF,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;gBAC9B,KAAK,MAAM,UAAU,IAAI,IAAI,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAW,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;oBAC9D,MAAM,CAAC,IAAI,CACT,WAAW,QAAQ,kBAAkB,UAAU,WAAW,GAAG,CAAC,GAAG,2BAA2B,CAC7F,CAAC;oBAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBACnC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;4BAC5B,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,YAAY;yBACvB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAoC;IAEpC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,iCAAiC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO;YACL,KAAK,EAAE,2BAA2B;YAClC,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAChC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAC/B,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE;QAClD,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC9C,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YAC/B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,WAAW,CAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,oDAAoD;IACpD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAsB,CAAC;IACrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAEnB,MAAM,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAmBD;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,YAAoB;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAErC,8CAA8C;QAC9C,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC;YAC3B,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,EAAE,MAAM,EAAE,QAAQ,EAAE;oBACpB,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;oBAC9B,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;oBAClC,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;iBAClC;aACF;YACD,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,oCAAoC,YAAY,KAAK,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Status } from '@vue-skuilder/common';
|
|
2
|
+
interface PackCourseData {
|
|
3
|
+
courseId: string;
|
|
4
|
+
outputPath?: string;
|
|
5
|
+
}
|
|
6
|
+
interface PackCourseResponse {
|
|
7
|
+
status: Status;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
packedFiles?: never;
|
|
10
|
+
outputPath?: string;
|
|
11
|
+
attachmentsFound?: number;
|
|
12
|
+
filesWritten?: number;
|
|
13
|
+
totalFiles?: number;
|
|
14
|
+
duration?: number;
|
|
15
|
+
errorText?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function packCourse(data: PackCourseData): Promise<PackCourseResponse>;
|
|
18
|
+
export type { PackCourseData, PackCourseResponse };
|
|
19
|
+
//# sourceMappingURL=pack-requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-requests.d.ts","sourceRoot":"","sources":["../../src/client-requests/pack-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4IlF;AAGD,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Status } from '@vue-skuilder/common';
|
|
2
|
+
import logger from '../logger.js';
|
|
3
|
+
import ENV from '../utils/env.js';
|
|
4
|
+
import PouchDb from 'pouchdb';
|
|
5
|
+
export async function packCourse(data) {
|
|
6
|
+
logger.info(`Starting PACK_COURSE for ${data.courseId}...`);
|
|
7
|
+
try {
|
|
8
|
+
const startTime = Date.now();
|
|
9
|
+
// Use CouchDBToStaticPacker directly from db package
|
|
10
|
+
const { CouchDBToStaticPacker } = await import('@vue-skuilder/db');
|
|
11
|
+
// Create database connection URL
|
|
12
|
+
const dbUrl = `${ENV.COUCHDB_PROTOCOL}://${ENV.COUCHDB_ADMIN}:${ENV.COUCHDB_PASSWORD}@${ENV.COUCHDB_SERVER}`;
|
|
13
|
+
const dbName = `coursedb-${data.courseId}`;
|
|
14
|
+
// Determine output path based on environment and provided path
|
|
15
|
+
let outputPath;
|
|
16
|
+
if (data.outputPath) {
|
|
17
|
+
// If output path is provided, check if it's absolute or relative
|
|
18
|
+
const pathModule = await import('path');
|
|
19
|
+
const path = pathModule.default || pathModule;
|
|
20
|
+
if (path.isAbsolute(data.outputPath)) {
|
|
21
|
+
// Use absolute path as-is
|
|
22
|
+
outputPath = data.outputPath;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Relative path - combine with project path in studio mode
|
|
26
|
+
const projectPath = process.env.PROJECT_PATH || process.cwd();
|
|
27
|
+
outputPath = path.join(projectPath, data.outputPath);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// No output path provided - use default
|
|
32
|
+
outputPath = ENV.NODE_ENV === 'studio' ?
|
|
33
|
+
'/tmp/skuilder-studio-output' :
|
|
34
|
+
process.cwd();
|
|
35
|
+
}
|
|
36
|
+
logger.info(`Packing course ${data.courseId} from ${dbName} to ${outputPath}`);
|
|
37
|
+
// Clean up existing output directory for replace-in-place functionality
|
|
38
|
+
const fsExtra = await import('fs-extra');
|
|
39
|
+
const fs = fsExtra.default || fsExtra;
|
|
40
|
+
try {
|
|
41
|
+
if (await fs.pathExists(outputPath)) {
|
|
42
|
+
logger.info(`Removing existing directory: ${outputPath}`);
|
|
43
|
+
await fs.remove(outputPath);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (cleanupError) {
|
|
47
|
+
logger.warn(`Warning: Could not clean up existing directory ${outputPath}:`, cleanupError);
|
|
48
|
+
// Continue anyway - the write operation might still succeed
|
|
49
|
+
}
|
|
50
|
+
// Create course database connection
|
|
51
|
+
const courseDbUrl = `${dbUrl}/${dbName}`;
|
|
52
|
+
// Initialize packer and perform pack operation with file writing
|
|
53
|
+
const packer = new CouchDBToStaticPacker();
|
|
54
|
+
// For Express, we create a simple FileSystemAdapter using dynamic imports
|
|
55
|
+
const createFsAdapter = async () => {
|
|
56
|
+
const fsExtra = await import('fs-extra');
|
|
57
|
+
const pathModule = await import('path');
|
|
58
|
+
// Access the default export for fs-extra
|
|
59
|
+
const fs = fsExtra.default || fsExtra;
|
|
60
|
+
const path = pathModule.default || pathModule;
|
|
61
|
+
return {
|
|
62
|
+
async readFile(filePath) {
|
|
63
|
+
return await fs.readFile(filePath, 'utf8');
|
|
64
|
+
},
|
|
65
|
+
async readBinary(filePath) {
|
|
66
|
+
return await fs.readFile(filePath);
|
|
67
|
+
},
|
|
68
|
+
async exists(filePath) {
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
async stat(filePath) {
|
|
78
|
+
const stats = await fs.stat(filePath);
|
|
79
|
+
return {
|
|
80
|
+
isDirectory: () => stats.isDirectory(),
|
|
81
|
+
isFile: () => stats.isFile(),
|
|
82
|
+
size: stats.size
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
async writeFile(filePath, data) {
|
|
86
|
+
await fs.writeFile(filePath, data);
|
|
87
|
+
},
|
|
88
|
+
async writeJson(filePath, data, options) {
|
|
89
|
+
await fs.writeJson(filePath, data, options);
|
|
90
|
+
},
|
|
91
|
+
async ensureDir(dirPath) {
|
|
92
|
+
await fs.ensureDir(dirPath);
|
|
93
|
+
},
|
|
94
|
+
joinPath(...segments) {
|
|
95
|
+
return path.join(...segments);
|
|
96
|
+
},
|
|
97
|
+
dirname(filePath) {
|
|
98
|
+
return path.dirname(filePath);
|
|
99
|
+
},
|
|
100
|
+
isAbsolute(filePath) {
|
|
101
|
+
return path.isAbsolute(filePath);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
const fsAdapter = await createFsAdapter();
|
|
106
|
+
const packResult = await packer.packCourseToFiles(new PouchDb(courseDbUrl), data.courseId, outputPath, fsAdapter);
|
|
107
|
+
const duration = Date.now() - startTime;
|
|
108
|
+
const response = {
|
|
109
|
+
status: Status.ok,
|
|
110
|
+
ok: true,
|
|
111
|
+
outputPath: outputPath,
|
|
112
|
+
attachmentsFound: packResult.attachmentsFound,
|
|
113
|
+
filesWritten: packResult.filesWritten,
|
|
114
|
+
totalFiles: packResult.filesWritten, // Updated to reflect actual files written
|
|
115
|
+
duration: duration
|
|
116
|
+
};
|
|
117
|
+
logger.info(`Pack completed in ${duration}ms. Attachments: ${response.attachmentsFound}, Files written: ${response.filesWritten}`);
|
|
118
|
+
return response;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error('Pack operation failed:', error);
|
|
122
|
+
const response = {
|
|
123
|
+
status: Status.error,
|
|
124
|
+
ok: false,
|
|
125
|
+
errorText: error instanceof Error ? error.message : 'Pack operation failed'
|
|
126
|
+
};
|
|
127
|
+
return response;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=pack-requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-requests.js","sourceRoot":"","sources":["../../src/client-requests/pack-requests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/couchdb/authentication.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAgB7C,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,gBAAgB,oBAwBtE;AAMD,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/couchdb/authentication.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAgB7C,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,gBAAgB,oBAwBtE;AAMD,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,oBA0CjE"}
|
|
@@ -30,6 +30,11 @@ function logRequest(req) {
|
|
|
30
30
|
}
|
|
31
31
|
export async function requestIsAuthenticated(req) {
|
|
32
32
|
logRequest(req);
|
|
33
|
+
// Studio mode bypass: skip authentication for local development
|
|
34
|
+
if (process.env.NODE_ENV === 'studio') {
|
|
35
|
+
logger.info('Studio mode: bypassing authentication for local development');
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
33
38
|
if (req.headers.authorization) {
|
|
34
39
|
const auth = Buffer.from(req.headers.authorization.split(' ')[1], 'base64')
|
|
35
40
|
.toString('ascii')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/couchdb/authentication.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../src/couchdb/authentication.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/env.d.ts
CHANGED
package/dist/utils/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAaA,KAAK,GAAG,GAAG;IACT,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAaA,KAAK,GAAG,GAAG;IACT,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAUF,QAAA,MAAM,GAAG,EAAE,GAOV,CAAC;AAeF,eAAe,GAAG,CAAC"}
|
package/dist/utils/env.js
CHANGED
package/dist/utils/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EACF,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;QACtC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,kBAAkB;CACzB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EACF,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;QACtC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,kBAAkB;CACzB,CAAC,CAAC;AAWH,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAQ;IACf,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B,CAAC;AAEF,mBAAmB,CAAC;IAClB,IAAI,EAAE,OAAO;IACb,OAAO,EAAE;QACP,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,gBAAgB,EAAE,GAAG,CAAC,aAAa;QACnC,uBAAuB,EAAE,GAAG,CAAC,gBAAgB;QAC7C,kBAAkB,EAAE,GAAG,CAAC,cAAc;KACvC;CACF,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACb,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.8-0",
|
|
7
7
|
"description": "an API",
|
|
8
8
|
"main": "dist/app.js",
|
|
9
9
|
"type": "module",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"author": "Colin Kennedy",
|
|
24
24
|
"license": "GPL-3.0-or-later",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@vue-skuilder/common": "^0.1.
|
|
27
|
-
"@vue-skuilder/db": "^0.1.
|
|
26
|
+
"@vue-skuilder/common": "^0.1.8-0",
|
|
27
|
+
"@vue-skuilder/db": "^0.1.8-0",
|
|
28
28
|
"axios": "^1.7.4",
|
|
29
29
|
"cookie-parser": "^1.4.7",
|
|
30
30
|
"cors": "^2.8.5",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"express": "^4.21.2",
|
|
33
33
|
"express-rate-limit": "^7.5.0",
|
|
34
34
|
"ffmpeg-static": "^5.2.0",
|
|
35
|
+
"fs-extra": "^11.2.0",
|
|
35
36
|
"hashids": "^2.3.0",
|
|
36
37
|
"morgan": "^1.10.0",
|
|
37
38
|
"nano": "^ 9.0.5",
|
|
@@ -70,5 +71,6 @@
|
|
|
70
71
|
"tsx": "^4.19.2",
|
|
71
72
|
"typescript": "^5.7.2",
|
|
72
73
|
"typescript-eslint": "^8.25.0"
|
|
73
|
-
}
|
|
74
|
+
},
|
|
75
|
+
"stableVersion": "0.1.7"
|
|
74
76
|
}
|
package/src/app.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
CourseCreationQueue,
|
|
21
21
|
initCourseDBDesignDocInsert,
|
|
22
22
|
} from './client-requests/course-requests.js';
|
|
23
|
+
import { packCourse } from './client-requests/pack-requests.js';
|
|
23
24
|
import { requestIsAuthenticated } from './couchdb/authentication.js';
|
|
24
25
|
import CouchDB, {
|
|
25
26
|
useOrCreateCourseDB,
|
|
@@ -169,6 +170,22 @@ async function postHandler(
|
|
|
169
170
|
logger.info(`\t\t\tCouchDB insert error: ${JSON.stringify(e)}`);
|
|
170
171
|
res.json(e);
|
|
171
172
|
});
|
|
173
|
+
} else if (body.type === RequestEnum.PACK_COURSE) {
|
|
174
|
+
if (process.env.NODE_ENV !== 'studio') {
|
|
175
|
+
logger.info(
|
|
176
|
+
`\tPACK_COURSE request received in production mode, but this is not supported!`
|
|
177
|
+
);
|
|
178
|
+
res.status(400);
|
|
179
|
+
res.statusMessage = 'Packing courses is not supported in production mode.';
|
|
180
|
+
res.send();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
body.response = await packCourse({
|
|
185
|
+
courseId: body.courseId,
|
|
186
|
+
outputPath: body.outputPath
|
|
187
|
+
});
|
|
188
|
+
res.json(body.response);
|
|
172
189
|
}
|
|
173
190
|
} else {
|
|
174
191
|
logger.info(`\tREQUEST UNAUTHORIZED!`);
|
|
@@ -4,6 +4,7 @@ import { normalize } from './normalize.js';
|
|
|
4
4
|
import AsyncProcessQueue, { Result } from '../utils/processQueue.js';
|
|
5
5
|
import logger from '../logger.js';
|
|
6
6
|
import { CourseLookup } from '@vue-skuilder/db';
|
|
7
|
+
import ENV from '../utils/env.js';
|
|
7
8
|
|
|
8
9
|
// @ts-expect-error [todo]
|
|
9
10
|
const Q = new AsyncProcessQueue<AttachmentProcessingRequest, Result>(
|
|
@@ -65,16 +66,51 @@ export default async function postProcess(): Promise<void> {
|
|
|
65
66
|
try {
|
|
66
67
|
logger.info(`Following all course databases for changes...`);
|
|
67
68
|
|
|
69
|
+
// Existing behavior for platform-ui courses
|
|
68
70
|
const courses = await CourseLookup.allCourses();
|
|
71
|
+
const processedCourseIds = new Set<string>();
|
|
69
72
|
|
|
70
73
|
for (const course of courses) {
|
|
71
74
|
try {
|
|
72
75
|
postProcessCourse(course._id);
|
|
76
|
+
processedCourseIds.add(`coursedb-${course._id}`);
|
|
73
77
|
} catch (e) {
|
|
74
78
|
logger.error(`Error processing course ${course._id}: ${e}`);
|
|
75
79
|
throw e;
|
|
76
80
|
}
|
|
77
81
|
}
|
|
82
|
+
|
|
83
|
+
// Studio mode: discover additional databases not in coursedb-lookup
|
|
84
|
+
if (ENV.NODE_ENV === 'studio') {
|
|
85
|
+
logger.info('Studio mode detected: scanning for additional course databases...');
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
const allDbs = await CouchDB.db.list();
|
|
89
|
+
const studioDbs = allDbs.filter(db =>
|
|
90
|
+
db.startsWith('coursedb-') &&
|
|
91
|
+
!processedCourseIds.has(db)
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
logger.info(`Found ${studioDbs.length} potential studio databases`);
|
|
95
|
+
|
|
96
|
+
for (const studioDb of studioDbs) {
|
|
97
|
+
const courseId = studioDb.replace('coursedb-', '');
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
if (await hasCourseConfig(studioDb)) {
|
|
101
|
+
logger.info(`Starting postprocessing for studio database: ${studioDb}`);
|
|
102
|
+
postProcessCourse(courseId);
|
|
103
|
+
} else {
|
|
104
|
+
logger.debug(`Skipping ${studioDb}: no course config found`);
|
|
105
|
+
}
|
|
106
|
+
} catch (e) {
|
|
107
|
+
logger.error(`Error processing studio database ${studioDb}: ${e}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (e) {
|
|
111
|
+
logger.error(`Error discovering studio databases: ${e}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
78
114
|
} catch (e) {
|
|
79
115
|
logger.error(`Error in postProcess: ${e}`);
|
|
80
116
|
}
|
|
@@ -202,3 +238,31 @@ interface ProcessingField {
|
|
|
202
238
|
mimetype: string;
|
|
203
239
|
returnData?: string;
|
|
204
240
|
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Check if a database contains course configuration (indicating it's a valid course database)
|
|
244
|
+
*/
|
|
245
|
+
async function hasCourseConfig(databaseName: string): Promise<boolean> {
|
|
246
|
+
try {
|
|
247
|
+
const db = CouchDB.use(databaseName);
|
|
248
|
+
|
|
249
|
+
// Try to find a course configuration document
|
|
250
|
+
// Course databases should have documents with course metadata
|
|
251
|
+
const result = await db.find({
|
|
252
|
+
selector: {
|
|
253
|
+
$or: [
|
|
254
|
+
{ 'type': 'course' },
|
|
255
|
+
{ 'shape': { $exists: true } },
|
|
256
|
+
{ 'course_id': { $exists: true } },
|
|
257
|
+
{ 'courseID': { $exists: true } }
|
|
258
|
+
]
|
|
259
|
+
},
|
|
260
|
+
limit: 1
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
return result.docs && result.docs.length > 0;
|
|
264
|
+
} catch (e) {
|
|
265
|
+
logger.debug(`Error checking course config for ${databaseName}: ${e}`);
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Status } from '@vue-skuilder/common';
|
|
2
|
+
import logger from '../logger.js';
|
|
3
|
+
import ENV from '../utils/env.js';
|
|
4
|
+
import PouchDb from 'pouchdb';
|
|
5
|
+
|
|
6
|
+
interface PackCourseData {
|
|
7
|
+
courseId: string;
|
|
8
|
+
outputPath?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface PackCourseResponse {
|
|
12
|
+
status: Status;
|
|
13
|
+
ok: boolean;
|
|
14
|
+
packedFiles?: never; // No longer relevant since we're writing to files
|
|
15
|
+
outputPath?: string;
|
|
16
|
+
attachmentsFound?: number;
|
|
17
|
+
filesWritten?: number;
|
|
18
|
+
totalFiles?: number;
|
|
19
|
+
duration?: number;
|
|
20
|
+
errorText?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function packCourse(data: PackCourseData): Promise<PackCourseResponse> {
|
|
24
|
+
logger.info(`Starting PACK_COURSE for ${data.courseId}...`);
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
const startTime = Date.now();
|
|
28
|
+
|
|
29
|
+
// Use CouchDBToStaticPacker directly from db package
|
|
30
|
+
const { CouchDBToStaticPacker } = await import('@vue-skuilder/db');
|
|
31
|
+
|
|
32
|
+
// Create database connection URL
|
|
33
|
+
const dbUrl = `${ENV.COUCHDB_PROTOCOL}://${ENV.COUCHDB_ADMIN}:${ENV.COUCHDB_PASSWORD}@${ENV.COUCHDB_SERVER}`;
|
|
34
|
+
const dbName = `coursedb-${data.courseId}`;
|
|
35
|
+
|
|
36
|
+
// Determine output path based on environment and provided path
|
|
37
|
+
let outputPath: string;
|
|
38
|
+
|
|
39
|
+
if (data.outputPath) {
|
|
40
|
+
// If output path is provided, check if it's absolute or relative
|
|
41
|
+
const pathModule = await import('path');
|
|
42
|
+
const path = pathModule.default || pathModule;
|
|
43
|
+
|
|
44
|
+
if (path.isAbsolute(data.outputPath)) {
|
|
45
|
+
// Use absolute path as-is
|
|
46
|
+
outputPath = data.outputPath;
|
|
47
|
+
} else {
|
|
48
|
+
// Relative path - combine with project path in studio mode
|
|
49
|
+
const projectPath = process.env.PROJECT_PATH || process.cwd();
|
|
50
|
+
outputPath = path.join(projectPath, data.outputPath);
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
// No output path provided - use default
|
|
54
|
+
outputPath = ENV.NODE_ENV === 'studio' ?
|
|
55
|
+
'/tmp/skuilder-studio-output' :
|
|
56
|
+
process.cwd();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
logger.info(`Packing course ${data.courseId} from ${dbName} to ${outputPath}`);
|
|
60
|
+
|
|
61
|
+
// Clean up existing output directory for replace-in-place functionality
|
|
62
|
+
const fsExtra = await import('fs-extra');
|
|
63
|
+
const fs = fsExtra.default || fsExtra;
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
if (await fs.pathExists(outputPath)) {
|
|
67
|
+
logger.info(`Removing existing directory: ${outputPath}`);
|
|
68
|
+
await fs.remove(outputPath);
|
|
69
|
+
}
|
|
70
|
+
} catch (cleanupError) {
|
|
71
|
+
logger.warn(`Warning: Could not clean up existing directory ${outputPath}:`, cleanupError);
|
|
72
|
+
// Continue anyway - the write operation might still succeed
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Create course database connection
|
|
76
|
+
const courseDbUrl = `${dbUrl}/${dbName}`;
|
|
77
|
+
|
|
78
|
+
// Initialize packer and perform pack operation with file writing
|
|
79
|
+
const packer = new CouchDBToStaticPacker();
|
|
80
|
+
|
|
81
|
+
// For Express, we create a simple FileSystemAdapter using dynamic imports
|
|
82
|
+
const createFsAdapter = async () => {
|
|
83
|
+
const fsExtra = await import('fs-extra');
|
|
84
|
+
const pathModule = await import('path');
|
|
85
|
+
|
|
86
|
+
// Access the default export for fs-extra
|
|
87
|
+
const fs = fsExtra.default || fsExtra;
|
|
88
|
+
const path = pathModule.default || pathModule;
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
async readFile(filePath: string): Promise<string> {
|
|
92
|
+
return await fs.readFile(filePath, 'utf8');
|
|
93
|
+
},
|
|
94
|
+
async readBinary(filePath: string): Promise<Buffer> {
|
|
95
|
+
return await fs.readFile(filePath);
|
|
96
|
+
},
|
|
97
|
+
async exists(filePath: string): Promise<boolean> {
|
|
98
|
+
try {
|
|
99
|
+
await fs.access(filePath);
|
|
100
|
+
return true;
|
|
101
|
+
} catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
async stat(filePath: string) {
|
|
106
|
+
const stats = await fs.stat(filePath);
|
|
107
|
+
return {
|
|
108
|
+
isDirectory: () => stats.isDirectory(),
|
|
109
|
+
isFile: () => stats.isFile(),
|
|
110
|
+
size: stats.size
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
async writeFile(filePath: string, data: string | Buffer): Promise<void> {
|
|
114
|
+
await fs.writeFile(filePath, data);
|
|
115
|
+
},
|
|
116
|
+
async writeJson(filePath: string, data: unknown, options?: { spaces?: number }): Promise<void> {
|
|
117
|
+
await fs.writeJson(filePath, data, options);
|
|
118
|
+
},
|
|
119
|
+
async ensureDir(dirPath: string): Promise<void> {
|
|
120
|
+
await fs.ensureDir(dirPath);
|
|
121
|
+
},
|
|
122
|
+
joinPath(...segments: string[]): string {
|
|
123
|
+
return path.join(...segments);
|
|
124
|
+
},
|
|
125
|
+
dirname(filePath: string): string {
|
|
126
|
+
return path.dirname(filePath);
|
|
127
|
+
},
|
|
128
|
+
isAbsolute(filePath: string): boolean {
|
|
129
|
+
return path.isAbsolute(filePath);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const fsAdapter = await createFsAdapter();
|
|
135
|
+
const packResult = await packer.packCourseToFiles(new PouchDb(courseDbUrl), data.courseId, outputPath, fsAdapter);
|
|
136
|
+
|
|
137
|
+
const duration = Date.now() - startTime;
|
|
138
|
+
|
|
139
|
+
const response: PackCourseResponse = {
|
|
140
|
+
status: Status.ok,
|
|
141
|
+
ok: true,
|
|
142
|
+
outputPath: outputPath,
|
|
143
|
+
attachmentsFound: packResult.attachmentsFound,
|
|
144
|
+
filesWritten: packResult.filesWritten,
|
|
145
|
+
totalFiles: packResult.filesWritten, // Updated to reflect actual files written
|
|
146
|
+
duration: duration
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
logger.info(`Pack completed in ${duration}ms. Attachments: ${response.attachmentsFound}, Files written: ${response.filesWritten}`);
|
|
150
|
+
|
|
151
|
+
return response;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
logger.error('Pack operation failed:', error);
|
|
154
|
+
|
|
155
|
+
const response: PackCourseResponse = {
|
|
156
|
+
status: Status.error,
|
|
157
|
+
ok: false,
|
|
158
|
+
errorText: error instanceof Error ? error.message : 'Pack operation failed'
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
return response;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Export types for use in app.ts
|
|
166
|
+
export type { PackCourseData, PackCourseResponse };
|
|
@@ -49,6 +49,12 @@ function logRequest(req: VueClientRequest) {
|
|
|
49
49
|
export async function requestIsAuthenticated(req: VueClientRequest) {
|
|
50
50
|
logRequest(req);
|
|
51
51
|
|
|
52
|
+
// Studio mode bypass: skip authentication for local development
|
|
53
|
+
if (process.env.NODE_ENV === 'studio') {
|
|
54
|
+
logger.info('Studio mode: bypassing authentication for local development');
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
|
|
52
58
|
if (req.headers.authorization) {
|
|
53
59
|
const auth = Buffer.from(req.headers.authorization.split(' ')[1], 'base64')
|
|
54
60
|
.toString('ascii')
|
package/src/utils/env.ts
CHANGED
|
@@ -17,6 +17,7 @@ type Env = {
|
|
|
17
17
|
COUCHDB_ADMIN: string;
|
|
18
18
|
COUCHDB_PASSWORD: string;
|
|
19
19
|
VERSION: string;
|
|
20
|
+
NODE_ENV: string;
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
function getVar(name: string): string {
|
|
@@ -33,6 +34,7 @@ const env: Env = {
|
|
|
33
34
|
COUCHDB_ADMIN: getVar('COUCHDB_ADMIN'),
|
|
34
35
|
COUCHDB_PASSWORD: getVar('COUCHDB_PASSWORD'),
|
|
35
36
|
VERSION: getVar('VERSION'),
|
|
37
|
+
NODE_ENV: getVar('NODE_ENV'),
|
|
36
38
|
};
|
|
37
39
|
|
|
38
40
|
initializeDataLayer({
|