medusajs-documents-plugin 1.1.3 → 1.1.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/.medusa/server/src/api/admin/documents/[id]/document/route.js +16 -6
- package/.medusa/server/src/api/admin/documents/route.js +37 -6
- package/.medusa/server/src/api/admin/documents/settings/route.js +74 -13
- package/.medusa/server/src/api/api/admin/documents/[id]/document/route.js +61 -0
- package/.medusa/server/src/api/api/documents/[id]/document/route.js +61 -0
- package/.medusa/server/src/api/api/store/documents/r/[code]/route.js +48 -0
- package/.medusa/server/src/api/documents/[id]/document/route.js +46 -7
- package/.medusa/server/src/api/documents/r/[code]/route.js +20 -6
- package/.medusa/server/src/api/r/[code]/route.js +49 -0
- package/.medusa/server/src/api/store/documents/r/[code]/route.js +19 -5
- package/.medusa/server/src/modules/documents/service.js +198 -87
- package/.medusa/server/src/services/pdfkit-generator.js +7 -4
- package/.medusa/server/src/subscribers/order-documents.js +12 -1
- package/.medusa/server/src/subscribers/repair-documents.js +26 -3
- package/CHANGELOG.md +20 -0
- package/package.json +1 -1
|
@@ -5,23 +5,33 @@ const documents_1 = require("../../../../../modules/documents");
|
|
|
5
5
|
// GET /admin/documents/:id/document
|
|
6
6
|
async function GET(req, res) {
|
|
7
7
|
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
8
|
+
const manager = req.scope.resolve("manager", { allowUnregistered: true });
|
|
9
|
+
const sharedContext = manager ? { manager } : {};
|
|
8
10
|
const id = req.params.id;
|
|
9
11
|
try {
|
|
10
12
|
let record = null;
|
|
11
13
|
// Check by ID or display_id
|
|
12
14
|
try {
|
|
13
|
-
record = await documentService.retrieveDocumentRecord(id);
|
|
15
|
+
record = await documentService.retrieveDocumentRecord(id, {}, sharedContext);
|
|
14
16
|
}
|
|
15
17
|
catch (e) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
try {
|
|
19
|
+
const records = await documentService.listDocumentRecords({ display_id: id }, {}, sharedContext);
|
|
20
|
+
if (records && records.length > 0) {
|
|
21
|
+
record = records[0];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (err2) {
|
|
25
|
+
const pg = req.scope.resolve("pg_connection", { allowUnregistered: true });
|
|
26
|
+
if (pg) {
|
|
27
|
+
record = await pg("document_records").where({ id }).orWhere({ display_id: id }).first();
|
|
28
|
+
}
|
|
19
29
|
}
|
|
20
30
|
}
|
|
21
31
|
if (!record) {
|
|
22
32
|
return res.status(404).send("Document not found");
|
|
23
33
|
}
|
|
24
|
-
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope);
|
|
34
|
+
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope, sharedContext);
|
|
25
35
|
res.setHeader("Content-Type", "application/pdf");
|
|
26
36
|
res.setHeader("Content-Disposition", `inline; filename="${record.display_id}.pdf"`);
|
|
27
37
|
res.setHeader("Content-Length", String(pdfBuffer.length));
|
|
@@ -33,4 +43,4 @@ async function GET(req, res) {
|
|
|
33
43
|
return res.status(500).send(`Failed to generate document: ${err.message}`);
|
|
34
44
|
}
|
|
35
45
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9baWRdL2RvY3VtZW50L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esa0JBd0NDO0FBNUNELGdFQUFvRTtBQUdwRSxvQ0FBb0M7QUFDN0IsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQyxFQUFFLEdBQW1CO0lBQy9FLE1BQU0sZUFBZSxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw0QkFBZ0IsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFFekIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxNQUFNLEdBQVEsSUFBSSxDQUFDO1FBQ3ZCLDRCQUE0QjtRQUM1QixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2pHLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxNQUFNLEVBQUUsR0FBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNQLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU3RixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxDQUFDO1FBQ3BGLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFELEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyx3Q0FBd0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUYsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -5,6 +5,8 @@ const documents_1 = require("../../../modules/documents");
|
|
|
5
5
|
// GET /admin/documents
|
|
6
6
|
async function GET(req, res) {
|
|
7
7
|
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
8
|
+
const manager = req.scope.resolve("manager", { allowUnregistered: true });
|
|
9
|
+
const sharedContext = manager ? { manager } : {};
|
|
8
10
|
const { type, source, status, search, take = 50, skip = 0 } = req.query;
|
|
9
11
|
const filters = {};
|
|
10
12
|
if (type && type !== "all")
|
|
@@ -13,11 +15,40 @@ async function GET(req, res) {
|
|
|
13
15
|
filters.source = source;
|
|
14
16
|
if (status && status !== "all")
|
|
15
17
|
filters.status = status;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
let records = [];
|
|
19
|
+
let count = 0;
|
|
20
|
+
try {
|
|
21
|
+
const [fetchedRecords, fetchedCount] = await documentService.listAndCountDocumentRecords(filters, {
|
|
22
|
+
take: Number(take),
|
|
23
|
+
skip: Number(skip),
|
|
24
|
+
order: { created_at: "DESC" },
|
|
25
|
+
}, sharedContext);
|
|
26
|
+
records = fetchedRecords;
|
|
27
|
+
count = fetchedCount;
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
// Fallback: If MikroORM fork error occurs, query pg_connection directly
|
|
31
|
+
const pgConnection = req.scope.resolve("pg_connection", { allowUnregistered: true });
|
|
32
|
+
if (pgConnection) {
|
|
33
|
+
let query = pgConnection("document_records");
|
|
34
|
+
if (filters.type)
|
|
35
|
+
query = query.where({ type: filters.type });
|
|
36
|
+
if (filters.source)
|
|
37
|
+
query = query.where({ source: filters.source });
|
|
38
|
+
if (filters.status)
|
|
39
|
+
query = query.where({ status: filters.status });
|
|
40
|
+
const countResult = await query.clone().count("id as count").first();
|
|
41
|
+
count = Number(countResult?.count || 0);
|
|
42
|
+
records = await query
|
|
43
|
+
.orderBy("created_at", "desc")
|
|
44
|
+
.limit(Number(take))
|
|
45
|
+
.offset(Number(skip));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
req.scope.resolve("logger")?.error(`[Documents-API] Error listing documents: ${err.message}`);
|
|
49
|
+
return res.status(500).json({ message: err.message, error: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
21
52
|
let filteredRecords = records;
|
|
22
53
|
if (search && typeof search === "string" && search.trim() !== "") {
|
|
23
54
|
const q = search.toLowerCase();
|
|
@@ -33,4 +64,4 @@ async function GET(req, res) {
|
|
|
33
64
|
skip: Number(skip),
|
|
34
65
|
});
|
|
35
66
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQW9FQztBQXhFRCwwREFBOEQ7QUFHOUQsdUJBQXVCO0FBQ2hCLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztJQUVuRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRWpELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQVksQ0FBQztJQUUvRSxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO0lBQ3hDLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLO1FBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEQsSUFBSSxNQUFNLElBQUksTUFBTSxLQUFLLEtBQUs7UUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN4RCxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssS0FBSztRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRXhELElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDLDJCQUEyQixDQUN0RixPQUFPLEVBQ1A7WUFDRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNsQixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1NBQzlCLEVBQ0QsYUFBYSxDQUNkLENBQUM7UUFDRixPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ3pCLEtBQUssR0FBRyxZQUFZLENBQUM7SUFDdkIsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsd0VBQXdFO1FBQ3hFLE1BQU0sWUFBWSxHQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxJQUFJO2dCQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlELElBQUksT0FBTyxDQUFDLE1BQU07Z0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxPQUFPLENBQUMsTUFBTTtnQkFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUVwRSxNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXhDLE9BQU8sR0FBRyxNQUFNLEtBQUs7aUJBQ2xCLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDO2lCQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNuQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsNENBQTRDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQztJQUM5QixJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNULENBQUMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxTQUFTLEVBQUUsZUFBZTtRQUMxQixLQUFLLEVBQUUsS0FBSyxJQUFJLGVBQWUsQ0FBQyxNQUFNO1FBQ3RDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2xCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -6,9 +6,35 @@ const documents_1 = require("../../../../modules/documents");
|
|
|
6
6
|
// GET /admin/documents/settings
|
|
7
7
|
async function GET(req, res) {
|
|
8
8
|
try {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
9
|
+
const manager = req.scope.resolve("manager", { allowUnregistered: true });
|
|
10
|
+
const sharedContext = manager ? { manager } : {};
|
|
11
|
+
try {
|
|
12
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
13
|
+
const settings = await documentService.getSettings(sharedContext, req.scope);
|
|
14
|
+
return res.json({ settings, success: true });
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
// Fallback: If MikroORM fork error occurs, query pg_connection directly
|
|
18
|
+
const pgConnection = req.scope.resolve("pg_connection", { allowUnregistered: true });
|
|
19
|
+
if (pgConnection) {
|
|
20
|
+
let settings = await pgConnection("document_settings").first();
|
|
21
|
+
if (!settings) {
|
|
22
|
+
const [created] = await pgConnection("document_settings")
|
|
23
|
+
.insert({
|
|
24
|
+
company_name: "Store",
|
|
25
|
+
email_notifications_enabled: true,
|
|
26
|
+
sms_notifications_enabled: true,
|
|
27
|
+
whatsapp_notifications_enabled: true,
|
|
28
|
+
created_at: new Date(),
|
|
29
|
+
updated_at: new Date(),
|
|
30
|
+
})
|
|
31
|
+
.returning("*");
|
|
32
|
+
settings = created;
|
|
33
|
+
}
|
|
34
|
+
return res.json({ settings, success: true });
|
|
35
|
+
}
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
12
38
|
}
|
|
13
39
|
catch (err) {
|
|
14
40
|
req.scope.resolve("logger")?.error(`[Documents-API] Error fetching settings: ${err.message}`);
|
|
@@ -18,21 +44,56 @@ async function GET(req, res) {
|
|
|
18
44
|
// POST /admin/documents/settings
|
|
19
45
|
async function POST(req, res) {
|
|
20
46
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
47
|
+
const manager = req.scope.resolve("manager", { allowUnregistered: true });
|
|
48
|
+
const sharedContext = manager ? { manager } : {};
|
|
23
49
|
// Filter out read-only / metadata columns that cause MikroORM update errors
|
|
24
50
|
const { id, created_at, updated_at, deleted_at, ...cleanData } = req.body || {};
|
|
25
51
|
if (cleanData.zoho_payment_terms_days !== undefined) {
|
|
26
52
|
cleanData.zoho_payment_terms_days = Number(cleanData.zoho_payment_terms_days || 0);
|
|
27
53
|
}
|
|
28
|
-
|
|
29
|
-
|
|
54
|
+
let settings = null;
|
|
55
|
+
try {
|
|
56
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
57
|
+
let [existingSettings] = await documentService.listDocumentSettings({}, {}, sharedContext);
|
|
58
|
+
if (!existingSettings) {
|
|
59
|
+
settings = await documentService.createDocumentSettings(cleanData, sharedContext);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
settings = await documentService.updateDocumentSettings({
|
|
63
|
+
id: existingSettings.id,
|
|
64
|
+
...cleanData,
|
|
65
|
+
}, sharedContext);
|
|
66
|
+
}
|
|
30
67
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
68
|
+
catch (err) {
|
|
69
|
+
// Fallback: If MikroORM fork error occurs, update via pg_connection directly
|
|
70
|
+
const pgConnection = req.scope.resolve("pg_connection", { allowUnregistered: true });
|
|
71
|
+
if (pgConnection) {
|
|
72
|
+
const existing = await pgConnection("document_settings").first();
|
|
73
|
+
if (existing) {
|
|
74
|
+
const [updated] = await pgConnection("document_settings")
|
|
75
|
+
.where({ id: existing.id })
|
|
76
|
+
.update({
|
|
77
|
+
...cleanData,
|
|
78
|
+
updated_at: new Date(),
|
|
79
|
+
})
|
|
80
|
+
.returning("*");
|
|
81
|
+
settings = updated;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const [created] = await pgConnection("document_settings")
|
|
85
|
+
.insert({
|
|
86
|
+
...cleanData,
|
|
87
|
+
created_at: new Date(),
|
|
88
|
+
updated_at: new Date(),
|
|
89
|
+
})
|
|
90
|
+
.returning("*");
|
|
91
|
+
settings = created;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
36
97
|
}
|
|
37
98
|
return res.json({ settings, success: true });
|
|
38
99
|
}
|
|
@@ -41,4 +102,4 @@ async function POST(req, res) {
|
|
|
41
102
|
return res.status(500).json({ message: err.message, error: true });
|
|
42
103
|
}
|
|
43
104
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RvY3VtZW50cy9zZXR0aW5ncy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQW1DQztBQUdELG9CQTREQztBQXRHRCw2REFBaUU7QUFHakUsZ0NBQWdDO0FBQ3pCLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQztZQUNILE1BQU0sZUFBZSxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw0QkFBZ0IsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQix3RUFBd0U7WUFDeEUsTUFBTSxZQUFZLEdBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRixJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxD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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../../../modules/documents");
|
|
5
|
+
// GET /api/admin/documents/:id/document (Compatibility endpoint for handed-over URLs)
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
8
|
+
const cleanId = (req.params.id || "").replace(/\.pdf$/i, "");
|
|
9
|
+
try {
|
|
10
|
+
let record = null;
|
|
11
|
+
try {
|
|
12
|
+
record = await documentService.retrieveDocumentRecord(cleanId);
|
|
13
|
+
}
|
|
14
|
+
catch (e) { }
|
|
15
|
+
if (!record) {
|
|
16
|
+
const records = await documentService.listDocumentRecords({ display_id: cleanId }).catch(() => []);
|
|
17
|
+
if (records && records.length > 0) {
|
|
18
|
+
record = records[0];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!record) {
|
|
22
|
+
const records = await documentService.listDocumentRecords({ repair_ticket_id: cleanId }).catch(() => []);
|
|
23
|
+
if (records && records.length > 0) {
|
|
24
|
+
record = records[0];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!record) {
|
|
28
|
+
try {
|
|
29
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
30
|
+
if (repairModule) {
|
|
31
|
+
let tickets = await repairModule.listRepairTickets({ approval_token: cleanId }).catch(() => []);
|
|
32
|
+
if (!tickets || tickets.length === 0) {
|
|
33
|
+
tickets = await repairModule.listRepairTickets({ id: cleanId }).catch(() => []);
|
|
34
|
+
}
|
|
35
|
+
if (tickets && tickets.length > 0) {
|
|
36
|
+
const ticket = tickets[0];
|
|
37
|
+
const metaDocId = ticket.metadata?.document_id;
|
|
38
|
+
if (metaDocId) {
|
|
39
|
+
record = await documentService.retrieveDocumentRecord(metaDocId).catch(() => null);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (e) { }
|
|
45
|
+
}
|
|
46
|
+
if (!record) {
|
|
47
|
+
return res.status(404).send("Document not found");
|
|
48
|
+
}
|
|
49
|
+
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope);
|
|
50
|
+
res.setHeader("Content-Type", "application/pdf");
|
|
51
|
+
res.setHeader("Content-Disposition", `inline; filename="${record.display_id}.pdf"`);
|
|
52
|
+
res.setHeader("Content-Length", String(pdfBuffer.length));
|
|
53
|
+
res.setHeader("Cache-Control", "public, max-age=3600");
|
|
54
|
+
return res.send(pdfBuffer);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
req.scope.resolve("logger")?.error?.(`[Documents-API] Error streaming PDF: ${err.message}`);
|
|
58
|
+
return res.status(500).send(`Failed to generate document: ${err.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FwaS9hZG1pbi9kb2N1bWVudHMvW2lkXS9kb2N1bWVudC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQTBEQztBQTlERCxtRUFBdUU7QUFHdkUsc0ZBQXNGO0FBQy9FLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0MsRUFBRSxHQUFtQjtJQUMvRSxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztJQUNuRixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFN0QsSUFBSSxDQUFDO1FBQ0gsSUFBSSxNQUFNLEdBQVEsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7UUFFZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxPQUFP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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../../modules/documents");
|
|
5
|
+
// GET /api/documents/:id/document (Public PDF download & view for recipients)
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
8
|
+
const cleanId = (req.params.id || "").replace(/\.pdf$/i, "");
|
|
9
|
+
try {
|
|
10
|
+
let record = null;
|
|
11
|
+
try {
|
|
12
|
+
record = await documentService.retrieveDocumentRecord(cleanId);
|
|
13
|
+
}
|
|
14
|
+
catch (e) { }
|
|
15
|
+
if (!record) {
|
|
16
|
+
const records = await documentService.listDocumentRecords({ display_id: cleanId }).catch(() => []);
|
|
17
|
+
if (records && records.length > 0) {
|
|
18
|
+
record = records[0];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!record) {
|
|
22
|
+
const records = await documentService.listDocumentRecords({ repair_ticket_id: cleanId }).catch(() => []);
|
|
23
|
+
if (records && records.length > 0) {
|
|
24
|
+
record = records[0];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!record) {
|
|
28
|
+
try {
|
|
29
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
30
|
+
if (repairModule) {
|
|
31
|
+
let tickets = await repairModule.listRepairTickets({ approval_token: cleanId }).catch(() => []);
|
|
32
|
+
if (!tickets || tickets.length === 0) {
|
|
33
|
+
tickets = await repairModule.listRepairTickets({ id: cleanId }).catch(() => []);
|
|
34
|
+
}
|
|
35
|
+
if (tickets && tickets.length > 0) {
|
|
36
|
+
const ticket = tickets[0];
|
|
37
|
+
const metaDocId = ticket.metadata?.document_id;
|
|
38
|
+
if (metaDocId) {
|
|
39
|
+
record = await documentService.retrieveDocumentRecord(metaDocId).catch(() => null);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (e) { }
|
|
45
|
+
}
|
|
46
|
+
if (!record) {
|
|
47
|
+
return res.status(404).send("Document not found");
|
|
48
|
+
}
|
|
49
|
+
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope);
|
|
50
|
+
res.setHeader("Content-Type", "application/pdf");
|
|
51
|
+
res.setHeader("Content-Disposition", `inline; filename="${record.display_id}.pdf"`);
|
|
52
|
+
res.setHeader("Content-Length", String(pdfBuffer.length));
|
|
53
|
+
res.setHeader("Cache-Control", "public, max-age=3600");
|
|
54
|
+
return res.send(pdfBuffer);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
req.scope.resolve("logger")?.error?.(`[Documents-API] Error streaming PDF: ${err.message}`);
|
|
58
|
+
return res.status(500).send(`Failed to generate document: ${err.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FwaS9kb2N1bWVudHMvW2lkXS9kb2N1bWVudC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQTBEQztBQTlERCxnRUFBb0U7QUFHcEUsOEVBQThFO0FBQ3ZFLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0MsRUFBRSxHQUFtQjtJQUMvRSxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztJQUNuRixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFN0QsSUFBSSxDQUFDO1FBQ0gsSUFBSSxNQUFNLEdBQVEsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7UUFFZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxPQUFPLEdBQUcsTUFB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
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../../../../modules/documents");
|
|
5
|
+
// GET /api/store/documents/r/:code (Compatibility proxy endpoint)
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const code = req.params.code;
|
|
8
|
+
try {
|
|
9
|
+
let links = [];
|
|
10
|
+
try {
|
|
11
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE, { allowUnregistered: true });
|
|
12
|
+
if (documentService) {
|
|
13
|
+
links = await documentService.listDocumentLinks({ shortcode: code });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (e) { }
|
|
17
|
+
if (!links || links.length === 0) {
|
|
18
|
+
try {
|
|
19
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
20
|
+
if (repairModule) {
|
|
21
|
+
links = await repairModule.listRepairLinks({ shortcode: code });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (e) { }
|
|
25
|
+
}
|
|
26
|
+
if (links && links.length > 0) {
|
|
27
|
+
let targetUrl = links[0].url;
|
|
28
|
+
const host = req.get("host") || "localhost:9000";
|
|
29
|
+
const forwarded = typeof req.get === "function" ? req.get("x-forwarded-proto") : undefined;
|
|
30
|
+
const protocol = (forwarded === "http" || forwarded === "https") ? forwarded : (req.protocol || "http");
|
|
31
|
+
if (targetUrl.includes("/documents/")) {
|
|
32
|
+
const docSubpath = targetUrl.slice(targetUrl.indexOf("/documents/")).replace(/\/admin\/documents\//, "/documents/");
|
|
33
|
+
targetUrl = `${protocol}://${host}${docSubpath}`;
|
|
34
|
+
}
|
|
35
|
+
else if (targetUrl.startsWith("/")) {
|
|
36
|
+
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
37
|
+
}
|
|
38
|
+
res.setHeader("Location", targetUrl);
|
|
39
|
+
return res.status(302).send("Redirecting...");
|
|
40
|
+
}
|
|
41
|
+
return res.status(404).send("Document link not found or expired.");
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
req.scope.resolve("logger")?.error?.(`[Documents-API] Error resolving shortlink ${code}: ${err.message}`);
|
|
45
|
+
return res.status(500).send("Error resolving document link");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FwaS9zdG9yZS9kb2N1bWVudHMvci9bY29kZV0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSxrQkF5Q0M7QUE3Q0QsbUVBQXVFO0FBR3ZFLGtFQUFrRTtBQUMzRCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQW9DLEVBQUUsR0FBbUI7SUFDakYsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDN0IsSUFBSSxDQUFDO1FBQ0gsSUFBSSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sZUFBZSxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw0QkFBZ0IsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEgsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxHQUFHLE1BQU0sZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRixNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUV4RyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUNwSCxTQUFTLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ25ELENBQUM7aUJBQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFNBQVMsR0FBRyxHQUFHLFFBQVEsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDbEQsQ0FBQztZQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLDZDQUE2QyxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUcsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -5,23 +5,62 @@ const documents_1 = require("../../../../modules/documents");
|
|
|
5
5
|
// GET /documents/:id/document (Public PDF download & view for recipients)
|
|
6
6
|
async function GET(req, res) {
|
|
7
7
|
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
8
|
-
const
|
|
8
|
+
const cleanId = (req.params.id || "").replace(/\.pdf$/i, "");
|
|
9
|
+
const manager = req.scope.resolve("manager", { allowUnregistered: true });
|
|
10
|
+
const sharedContext = manager ? { manager } : {};
|
|
9
11
|
try {
|
|
10
12
|
let record = null;
|
|
11
|
-
// Check by primary ID or human display_id (e.g. INV-1092)
|
|
13
|
+
// Check by primary ID or human display_id (e.g. INV-1092, JOB-101, RCPT-101)
|
|
12
14
|
try {
|
|
13
|
-
record = await documentService.retrieveDocumentRecord(
|
|
15
|
+
record = await documentService.retrieveDocumentRecord(cleanId, {}, sharedContext);
|
|
14
16
|
}
|
|
15
|
-
catch (e) {
|
|
16
|
-
|
|
17
|
+
catch (e) { }
|
|
18
|
+
if (!record) {
|
|
19
|
+
const records = await documentService.listDocumentRecords({ display_id: cleanId }, {}, sharedContext).catch(() => []);
|
|
20
|
+
if (records && records.length > 0) {
|
|
21
|
+
record = records[0];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (!record) {
|
|
25
|
+
const records = await documentService.listDocumentRecords({ repair_ticket_id: cleanId }, {}, sharedContext).catch(() => []);
|
|
17
26
|
if (records && records.length > 0) {
|
|
18
27
|
record = records[0];
|
|
19
28
|
}
|
|
20
29
|
}
|
|
30
|
+
if (!record) {
|
|
31
|
+
const pg = req.scope.resolve("pg_connection", { allowUnregistered: true });
|
|
32
|
+
if (pg) {
|
|
33
|
+
record = await pg("document_records")
|
|
34
|
+
.where({ id: cleanId })
|
|
35
|
+
.orWhere({ display_id: cleanId })
|
|
36
|
+
.orWhere({ repair_ticket_id: cleanId })
|
|
37
|
+
.first();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Fallback: If not in documents table, check if cleanId is an approval token or ID in repair module
|
|
41
|
+
if (!record) {
|
|
42
|
+
try {
|
|
43
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
44
|
+
if (repairModule) {
|
|
45
|
+
let tickets = await repairModule.listRepairTickets({ approval_token: cleanId }).catch(() => []);
|
|
46
|
+
if (!tickets || tickets.length === 0) {
|
|
47
|
+
tickets = await repairModule.listRepairTickets({ id: cleanId }).catch(() => []);
|
|
48
|
+
}
|
|
49
|
+
if (tickets && tickets.length > 0) {
|
|
50
|
+
const ticket = tickets[0];
|
|
51
|
+
const metaDocId = ticket.metadata?.document_id;
|
|
52
|
+
if (metaDocId) {
|
|
53
|
+
record = await documentService.retrieveDocumentRecord(metaDocId).catch(() => null);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) { }
|
|
59
|
+
}
|
|
21
60
|
if (!record) {
|
|
22
61
|
return res.status(404).send("Document not found");
|
|
23
62
|
}
|
|
24
|
-
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope);
|
|
63
|
+
const pdfBuffer = await documentService.getPdfForRecord(record.id, req.scope, sharedContext);
|
|
25
64
|
res.setHeader("Content-Type", "application/pdf");
|
|
26
65
|
res.setHeader("Content-Disposition", `inline; filename="${record.display_id}.pdf"`);
|
|
27
66
|
res.setHeader("Content-Length", String(pdfBuffer.length));
|
|
@@ -33,4 +72,4 @@ async function GET(req, res) {
|
|
|
33
72
|
return res.status(500).send(`Failed to generate document: ${err.message}`);
|
|
34
73
|
}
|
|
35
74
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy9baWRdL2RvY3VtZW50L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esa0JBMEVDO0FBOUVELDZEQUFpRTtBQUdqRSwwRUFBMEU7QUFDbkUsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQyxFQUFFLEdBQW1CO0lBQy9FLE1BQU0sZUFBZSxHQUEwQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw0QkFBZ0IsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU3RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRWpELElBQUksQ0FBQztRQUNILElBQUksTUFBTSxHQUFRLElBQUksQ0FBQztRQUN2Qiw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBRWQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUMsbUJBQW1CLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLGFB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
|
|
@@ -7,13 +7,27 @@ async function GET(req, res) {
|
|
|
7
7
|
const code = req.params.code;
|
|
8
8
|
try {
|
|
9
9
|
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
|
|
10
|
-
|
|
10
|
+
let links = await documentService.listDocumentLinks({ shortcode: code });
|
|
11
|
+
if (!links || links.length === 0) {
|
|
12
|
+
try {
|
|
13
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
14
|
+
if (repairModule) {
|
|
15
|
+
links = await repairModule.listRepairLinks({ shortcode: code });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (e) { }
|
|
19
|
+
}
|
|
11
20
|
if (links && links.length > 0) {
|
|
12
21
|
let targetUrl = links[0].url;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
const host = req.get("host") || "localhost:9000";
|
|
23
|
+
const forwarded = typeof req.get === "function" ? req.get("x-forwarded-proto") : undefined;
|
|
24
|
+
const protocol = (forwarded === "http" || forwarded === "https") ? forwarded : (req.protocol || "http");
|
|
25
|
+
// Normalize any document path pointing to admin or legacy routes
|
|
26
|
+
if (targetUrl.includes("/documents/")) {
|
|
27
|
+
const docSubpath = targetUrl.slice(targetUrl.indexOf("/documents/")).replace(/\/admin\/documents\//, "/documents/");
|
|
28
|
+
targetUrl = `${protocol}://${host}${docSubpath}`;
|
|
29
|
+
}
|
|
30
|
+
else if (targetUrl.startsWith("/")) {
|
|
17
31
|
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
18
32
|
}
|
|
19
33
|
res.setHeader("Location", targetUrl);
|
|
@@ -26,4 +40,4 @@ async function GET(req, res) {
|
|
|
26
40
|
return res.status(500).send("Error resolving document link");
|
|
27
41
|
}
|
|
28
42
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy9yL1tjb2RlXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQXFDQztBQXpDRCw2REFBaUU7QUFHakUscUdBQXFHO0FBQzlGLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBb0MsRUFBRSxHQUFtQjtJQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztRQUNuRixJQUFJLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRixNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUV4RyxpRUFBaUU7WUFDakUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDcEgsU0FBUyxHQUFHLEdBQUcsUUFBUSxNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxDQUFDO2lCQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxTQUFTLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ2xELENBQUM7WUFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsZ0RBQWdELElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const documents_1 = require("../../../modules/documents");
|
|
5
|
+
// GET /r/:code (Universal public shortlink redirect)
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const code = req.params.code;
|
|
8
|
+
try {
|
|
9
|
+
let links = [];
|
|
10
|
+
try {
|
|
11
|
+
const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE, { allowUnregistered: true });
|
|
12
|
+
if (documentService) {
|
|
13
|
+
links = await documentService.listDocumentLinks({ shortcode: code });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (e) { }
|
|
17
|
+
if (!links || links.length === 0) {
|
|
18
|
+
try {
|
|
19
|
+
const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
|
|
20
|
+
if (repairModule) {
|
|
21
|
+
links = await repairModule.listRepairLinks({ shortcode: code });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (e) { }
|
|
25
|
+
}
|
|
26
|
+
if (links && links.length > 0) {
|
|
27
|
+
let targetUrl = links[0].url;
|
|
28
|
+
const host = req.get("host") || "localhost:9000";
|
|
29
|
+
const forwarded = typeof req.get === "function" ? req.get("x-forwarded-proto") : undefined;
|
|
30
|
+
const protocol = (forwarded === "http" || forwarded === "https") ? forwarded : (req.protocol || "http");
|
|
31
|
+
// Normalize any document path pointing to admin or legacy routes
|
|
32
|
+
if (targetUrl.includes("/documents/")) {
|
|
33
|
+
const docSubpath = targetUrl.slice(targetUrl.indexOf("/documents/")).replace(/\/admin\/documents\//, "/documents/");
|
|
34
|
+
targetUrl = `${protocol}://${host}${docSubpath}`;
|
|
35
|
+
}
|
|
36
|
+
else if (targetUrl.startsWith("/")) {
|
|
37
|
+
targetUrl = `${protocol}://${host}${targetUrl}`;
|
|
38
|
+
}
|
|
39
|
+
res.setHeader("Location", targetUrl);
|
|
40
|
+
return res.status(302).send("Redirecting...");
|
|
41
|
+
}
|
|
42
|
+
return res.status(404).send("Link not found or expired.");
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
req.scope.resolve("logger")?.error?.(`[Shortlink-Public] Error resolving /r/${code}: ${err.message}`);
|
|
46
|
+
return res.status(500).send("Error resolving link");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3IvW2NvZGVdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esa0JBMENDO0FBOUNELDBEQUE4RDtBQUc5RCxxREFBcUQ7QUFDOUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFvQyxFQUFFLEdBQW1CO0lBQ2pGLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzdCLElBQUksQ0FBQztRQUNILElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hILElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7UUFFZCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE1BQU0sWUFBWSxHQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ25GLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUM7WUFFeEcsaUVBQWlFO1lBQ2pFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3BILFNBQVMsR0FBRyxHQUFHLFFBQVEsTUFBTSxJQUFJLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDbkQsQ0FBQztpQkFBTSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsU0FBUyxHQUFHLEdBQUcsUUFBUSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMseUNBQXlDLElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEQsQ0FBQztBQUNILENBQUMifQ==
|