@stemy/backend 3.6.0 → 4.0.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/commands/fixtures-command.d.ts +9 -0
- package/commands/index.d.ts +2 -0
- package/common-types.d.ts +11 -6
- package/esm2020/commands/clear-command.mjs +17 -0
- package/esm2020/commands/fixtures-command.mjs +23 -0
- package/esm2020/commands/index.mjs +7 -0
- package/esm2020/common-types.mjs +21 -0
- package/esm2020/public_api.mjs +379 -0
- package/esm2020/requests/asset-image-params.mjs +53 -0
- package/esm2020/rest-controllers/assets.controller.mjs +126 -0
- package/esm2020/rest-controllers/auth.controller.mjs +46 -0
- package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
- package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
- package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
- package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
- package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
- package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
- package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
- package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
- package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
- package/esm2020/services/asset-processor.mjs +90 -0
- package/esm2020/services/asset-resolver.mjs +31 -0
- package/esm2020/services/assets.mjs +140 -0
- package/esm2020/services/backend-provider.mjs +22 -0
- package/esm2020/services/cache-processor.mjs +16 -0
- package/esm2020/services/cache.mjs +62 -0
- package/{esm2015/services/configuration.js → esm2020/services/configuration.mjs} +3 -15
- package/esm2020/services/endpoint-provider.mjs +13 -0
- package/esm2020/services/entities/asset.mjs +43 -0
- package/esm2020/services/entities/base-entity.mjs +26 -0
- package/esm2020/services/entities/lazy-asset.mjs +73 -0
- package/esm2020/services/entities/progress.mjs +176 -0
- package/esm2020/services/entities/temp-asset.mjs +45 -0
- package/esm2020/services/fixtures.mjs +26 -0
- package/esm2020/services/gallery-cache.mjs +27 -0
- package/esm2020/services/gallery-image.mjs +37 -0
- package/esm2020/services/gallery.mjs +116 -0
- package/esm2020/services/id-generator.mjs +42 -0
- package/esm2020/services/job-manager.mjs +187 -0
- package/esm2020/services/lazy-assets.mjs +48 -0
- package/esm2020/services/logger.mjs +21 -0
- package/esm2020/services/mail-sender.mjs +36 -0
- package/esm2020/services/memory-cache.mjs +57 -0
- package/esm2020/services/mongo-connector.mjs +37 -0
- package/esm2020/services/open-api.mjs +114 -0
- package/esm2020/services/progresses.mjs +86 -0
- package/esm2020/services/template-renderer.mjs +64 -0
- package/esm2020/services/terminal-manager.mjs +77 -0
- package/esm2020/services/token-generator.mjs +35 -0
- package/esm2020/services/translation-provider.mjs +34 -0
- package/esm2020/services/translator.mjs +63 -0
- package/esm2020/services/user-manager.mjs +27 -0
- package/esm2020/socket-controllers/progress.controller.mjs +52 -0
- package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
- package/esm2020/socket-controllers/terminal.mjs +85 -0
- package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
- package/esm2020/static.mjs +23 -0
- package/esm2020/utilities/decorators.mjs +52 -0
- package/esm2020/utilities/di-container.mjs +83 -0
- package/esm2020/utilities/empty-job.mjs +13 -0
- package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
- package/esm2020/utilities/mongoose.mjs +216 -0
- package/esm2020/utils.mjs +693 -0
- package/esm2020/validators.mjs +46 -0
- package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1638 -2403
- package/fesm2015/stemy-backend.mjs.map +1 -0
- package/fesm2020/stemy-backend.mjs +4202 -0
- package/fesm2020/stemy-backend.mjs.map +1 -0
- package/{stemy-backend.d.ts → index.d.ts} +1 -0
- package/package.json +35 -23
- package/public_api.d.ts +2 -2
- package/rest-controllers/terminal-styles.d.ts +2 -0
- package/rest-controllers/terminal.controller.d.ts +2 -0
- package/services/assets.d.ts +1 -0
- package/services/entities/asset.d.ts +1 -0
- package/services/entities/temp-asset.d.ts +1 -0
- package/services/fixtures.d.ts +2 -2
- package/utils.d.ts +3 -0
- package/bundles/stemy-backend.umd.js +0 -7553
- package/bundles/stemy-backend.umd.js.map +0 -1
- package/esm2015/common-types.js +0 -20
- package/esm2015/public_api.js +0 -380
- package/esm2015/requests/asset-image-params.js +0 -70
- package/esm2015/rest-controllers/assets.controller.js +0 -180
- package/esm2015/rest-controllers/auth.controller.js +0 -76
- package/esm2015/rest-controllers/gallery.controller.js +0 -37
- package/esm2015/rest-controllers/progresses.controller.js +0 -57
- package/esm2015/rest-controllers/terminal.controller.js +0 -151
- package/esm2015/rest-middlewares/container.middleware.js +0 -32
- package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
- package/esm2015/rest-middlewares/language.middleware.js +0 -28
- package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
- package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
- package/esm2015/rest-openapi.js +0 -44
- package/esm2015/services/asset-processor.js +0 -108
- package/esm2015/services/asset-resolver.js +0 -53
- package/esm2015/services/assets.js +0 -181
- package/esm2015/services/backend-provider.js +0 -32
- package/esm2015/services/cache-processor.js +0 -34
- package/esm2015/services/cache.js +0 -93
- package/esm2015/services/endpoint-provider.js +0 -29
- package/esm2015/services/entities/asset.js +0 -60
- package/esm2015/services/entities/base-entity.js +0 -37
- package/esm2015/services/entities/lazy-asset.js +0 -90
- package/esm2015/services/entities/progress.js +0 -213
- package/esm2015/services/entities/temp-asset.js +0 -64
- package/esm2015/services/fixtures.js +0 -45
- package/esm2015/services/gallery-cache.js +0 -36
- package/esm2015/services/gallery-image.js +0 -48
- package/esm2015/services/gallery.js +0 -138
- package/esm2015/services/id-generator.js +0 -63
- package/esm2015/services/job-manager.js +0 -221
- package/esm2015/services/lazy-assets.js +0 -83
- package/esm2015/services/logger.js +0 -31
- package/esm2015/services/mail-sender.js +0 -58
- package/esm2015/services/memory-cache.js +0 -84
- package/esm2015/services/mongo-connector.js +0 -58
- package/esm2015/services/open-api.js +0 -140
- package/esm2015/services/progresses.js +0 -118
- package/esm2015/services/template-renderer.js +0 -88
- package/esm2015/services/terminal-manager.js +0 -94
- package/esm2015/services/token-generator.js +0 -55
- package/esm2015/services/translation-provider.js +0 -54
- package/esm2015/services/translator.js +0 -84
- package/esm2015/services/user-manager.js +0 -47
- package/esm2015/socket-controllers/progress.controller.js +0 -82
- package/esm2015/socket-controllers/terminal.controller.js +0 -83
- package/esm2015/socket-controllers/terminal.js +0 -98
- package/esm2015/socket-middlewares/compression.middleware.js +0 -19
- package/esm2015/static.js +0 -33
- package/esm2015/utilities/clear-command.js +0 -33
- package/esm2015/utilities/decorators.js +0 -54
- package/esm2015/utilities/di-container.js +0 -84
- package/esm2015/utilities/empty-job.js +0 -29
- package/esm2015/utilities/lazy-asset-generator.js +0 -46
- package/esm2015/utilities/mongoose.js +0 -225
- package/esm2015/utils.js +0 -699
- package/esm2015/validators.js +0 -51
- package/fesm2015/stemy-backend.js.map +0 -1
- package/rest-openapi.d.ts +0 -3
- package/stemy-backend.metadata.json +0 -1
- /package/{utilities → commands}/clear-command.d.ts +0 -0
- /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
- /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
- /package/{esm2015/utilities/tree.js → esm2020/utilities/tree.mjs} +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Authorized, Body, Controller, Get, HttpError, Param, Post, QueryParam, QueryParams, Res, UploadedFile } from "routing-controllers";
|
|
4
|
+
let AssetsController = class AssetsController {
|
|
5
|
+
constructor(assets, assetResolver) {
|
|
6
|
+
this.assets = assets;
|
|
7
|
+
this.assetResolver = assetResolver;
|
|
8
|
+
}
|
|
9
|
+
async upload(file) {
|
|
10
|
+
try {
|
|
11
|
+
const contentType = file.mimetype === "application/octet-stream" ? null : file.mimetype;
|
|
12
|
+
const asset = await this.assets.writeBuffer(file.buffer, { filename: file.filename }, contentType);
|
|
13
|
+
return asset.toJSON();
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
const msg = e?.message || e || "Unknown error";
|
|
17
|
+
throw new HttpError(400, `Asset can't be uploaded.\n${msg}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async uploadUrl(body) {
|
|
21
|
+
try {
|
|
22
|
+
const asset = await this.assets.writeUrl(body.url, body);
|
|
23
|
+
return asset.toJSON();
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const msg = e?.message || e || "Unknown error";
|
|
27
|
+
throw new HttpError(400, `Asset can't be uploaded.\n${msg}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async getFile(id, lazy, res) {
|
|
31
|
+
const asset = await this.getAsset("Asset", id, lazy, res);
|
|
32
|
+
return asset.download();
|
|
33
|
+
}
|
|
34
|
+
async getImageRotation(id, params, res, rotation = 0) {
|
|
35
|
+
const asset = await this.getAsset("Image", id, params.lazy, res);
|
|
36
|
+
if (rotation !== 0) {
|
|
37
|
+
params.rotation = params.rotation || rotation;
|
|
38
|
+
}
|
|
39
|
+
return asset.downloadImage(params);
|
|
40
|
+
}
|
|
41
|
+
async getImage(id, params, res) {
|
|
42
|
+
return this.getImageRotation(id, params, res);
|
|
43
|
+
}
|
|
44
|
+
async getFileByName(name, res) {
|
|
45
|
+
const asset = await this.getAssetByName("Asset", name, res);
|
|
46
|
+
return asset.download();
|
|
47
|
+
}
|
|
48
|
+
async getImageByName(name, params, res) {
|
|
49
|
+
const asset = await this.getAssetByName("Image", name, res);
|
|
50
|
+
return asset.downloadImage(params);
|
|
51
|
+
}
|
|
52
|
+
setAssetHeaders(type, asset, res) {
|
|
53
|
+
if (asset.metadata?.classified) {
|
|
54
|
+
throw new HttpError(403, `${type} is classified, and can be only downloaded from a custom url.`);
|
|
55
|
+
}
|
|
56
|
+
const ext = asset.metadata?.extension;
|
|
57
|
+
if (ext) {
|
|
58
|
+
res.header("content-disposition", `inline; filename=${asset.filename}.${ext}`);
|
|
59
|
+
}
|
|
60
|
+
if (asset.contentType) {
|
|
61
|
+
res.header("content-type", asset.contentType);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async getAsset(type, id, lazy, res) {
|
|
65
|
+
const asset = await this.assetResolver.resolve(id, lazy);
|
|
66
|
+
if (!asset) {
|
|
67
|
+
throw new HttpError(404, `${type} with id: '${id}' not found.`);
|
|
68
|
+
}
|
|
69
|
+
this.setAssetHeaders(type, asset, res);
|
|
70
|
+
return asset;
|
|
71
|
+
}
|
|
72
|
+
async getAssetByName(type, filename, res) {
|
|
73
|
+
const asset = await this.assets.find({ filename });
|
|
74
|
+
if (!asset) {
|
|
75
|
+
throw new HttpError(404, `${type} with filename: '${filename}' not found.`);
|
|
76
|
+
}
|
|
77
|
+
this.setAssetHeaders(type, asset, res);
|
|
78
|
+
return asset;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
__decorate([
|
|
82
|
+
Authorized(),
|
|
83
|
+
Post(""),
|
|
84
|
+
__param(0, UploadedFile("file"))
|
|
85
|
+
], AssetsController.prototype, "upload", null);
|
|
86
|
+
__decorate([
|
|
87
|
+
Authorized(),
|
|
88
|
+
Post("url"),
|
|
89
|
+
__param(0, Body())
|
|
90
|
+
], AssetsController.prototype, "uploadUrl", null);
|
|
91
|
+
__decorate([
|
|
92
|
+
Get("/:id"),
|
|
93
|
+
__param(0, Param("id")),
|
|
94
|
+
__param(1, QueryParam("lazy")),
|
|
95
|
+
__param(2, Res())
|
|
96
|
+
], AssetsController.prototype, "getFile", null);
|
|
97
|
+
__decorate([
|
|
98
|
+
Get("/image/:id/:rotation"),
|
|
99
|
+
__param(0, Param("id")),
|
|
100
|
+
__param(1, QueryParams()),
|
|
101
|
+
__param(2, Res()),
|
|
102
|
+
__param(3, Param("rotation"))
|
|
103
|
+
], AssetsController.prototype, "getImageRotation", null);
|
|
104
|
+
__decorate([
|
|
105
|
+
Get("/image/:id"),
|
|
106
|
+
__param(0, Param("id")),
|
|
107
|
+
__param(1, QueryParams()),
|
|
108
|
+
__param(2, Res())
|
|
109
|
+
], AssetsController.prototype, "getImage", null);
|
|
110
|
+
__decorate([
|
|
111
|
+
Get("/by-name/:name"),
|
|
112
|
+
__param(0, Param("name")),
|
|
113
|
+
__param(1, Res())
|
|
114
|
+
], AssetsController.prototype, "getFileByName", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
Get("/by-name/image/:name"),
|
|
117
|
+
__param(0, Param("name")),
|
|
118
|
+
__param(1, QueryParams()),
|
|
119
|
+
__param(2, Res())
|
|
120
|
+
], AssetsController.prototype, "getImageByName", null);
|
|
121
|
+
AssetsController = __decorate([
|
|
122
|
+
injectable(),
|
|
123
|
+
Controller("/assets")
|
|
124
|
+
], AssetsController);
|
|
125
|
+
export { AssetsController };
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFVBQVUsRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILFlBQVksRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBUXRCLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBRXpCLFlBQXFCLE1BQWMsRUFBVyxhQUE0QjtRQUFyRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFFMUUsQ0FBQztJQUlLLEFBQU4sS0FBSyxDQUFDLE1BQU0sQ0FBdUIsSUFBeUI7UUFDeEQsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDL0MsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDaEU7SUFDTCxDQUFDO0lBSUssQUFBTixLQUFLLENBQUMsU0FBUyxDQUFTLElBQVM7UUFDN0IsSUFBSTtZQUNBLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLDZCQUE2QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLE9BQU8sQ0FBYyxFQUFVLEVBQXNCLElBQWEsRUFBUyxHQUFhO1FBQzFGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsZ0JBQWdCLENBQWMsRUFBVSxFQUFpQixNQUF3QixFQUFTLEdBQWEsRUFBcUIsV0FBbUIsQ0FBQztRQUNsSixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtZQUNoQixNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxRQUFRLENBQWMsRUFBVSxFQUFpQixNQUF3QixFQUFTLEdBQWE7UUFDakcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsYUFBYSxDQUFnQixJQUFZLEVBQVMsR0FBYTtRQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsY0FBYyxDQUFnQixJQUFZLEVBQWlCLE1BQXdCLEVBQVMsR0FBYTtRQUMzRyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVTLGVBQWUsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEdBQWE7UUFDaEUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRTtZQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksK0RBQStELENBQUMsQ0FBQztTQUNwRztRQUNELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3RDLElBQUksR0FBRyxFQUFFO1lBQ0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxvQkFBb0IsS0FBSyxDQUFDLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRDtJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsSUFBYSxFQUFFLEdBQWE7UUFDM0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbkU7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVTLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsR0FBYTtRQUN4RSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLG9CQUFvQixRQUFRLGNBQWMsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSixDQUFBO0FBckZTO0lBRkwsVUFBVSxFQUFFO0lBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNLLFdBQUEsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBOzhDQVNqQztBQUlLO0lBRkwsVUFBVSxFQUFFO0lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNLLFdBQUEsSUFBSSxFQUFFLENBQUE7aURBUXRCO0FBR0s7SUFETCxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ0csV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUFpQixXQUFBLEdBQUcsRUFBRSxDQUFBOytDQUcvRTtBQUdLO0lBREwsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ0osV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFdBQVcsRUFBRSxDQUFBO0lBQTRCLFdBQUEsR0FBRyxFQUFFLENBQUE7SUFBaUIsV0FBQSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7d0RBTWhJO0FBR0s7SUFETCxHQUFHLENBQUMsWUFBWSxDQUFDO0lBQ0YsV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFdBQVcsRUFBRSxDQUFBO0lBQTRCLFdBQUEsR0FBRyxFQUFFLENBQUE7Z0RBRXRGO0FBR0s7SUFETCxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDRCxXQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUFnQixXQUFBLEdBQUcsRUFBRSxDQUFBO3FEQUd0RDtBQUdLO0lBREwsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ04sV0FBQSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFBZ0IsV0FBQSxXQUFXLEVBQUUsQ0FBQTtJQUE0QixXQUFBLEdBQUcsRUFBRSxDQUFBO3NEQUdoRztBQTdEUSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osVUFBVSxDQUFDLFNBQVMsQ0FBQztHQUNULGdCQUFnQixDQTZGNUI7U0E3RlksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge1Jlc3BvbnNlfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0aG9yaXplZCxcclxuICAgIEJvZHksXHJcbiAgICBDb250cm9sbGVyLFxyXG4gICAgR2V0LFxyXG4gICAgSHR0cEVycm9yLFxyXG4gICAgUGFyYW0sXHJcbiAgICBQb3N0LFxyXG4gICAgUXVlcnlQYXJhbSxcclxuICAgIFF1ZXJ5UGFyYW1zLFxyXG4gICAgUmVzLFxyXG4gICAgVXBsb2FkZWRGaWxlXHJcbn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtJQXNzZXR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtBc3NldEltYWdlUGFyYW1zfSBmcm9tIFwiLi4vcmVxdWVzdHMvYXNzZXQtaW1hZ2UtcGFyYW1zXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBDb250cm9sbGVyKFwiL2Fzc2V0c1wiKVxyXG5leHBvcnQgY2xhc3MgQXNzZXRzQ29udHJvbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgYXNzZXRzOiBBc3NldHMsIHJlYWRvbmx5IGFzc2V0UmVzb2x2ZXI6IEFzc2V0UmVzb2x2ZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgQEF1dGhvcml6ZWQoKVxyXG4gICAgQFBvc3QoXCJcIilcclxuICAgIGFzeW5jIHVwbG9hZChAVXBsb2FkZWRGaWxlKFwiZmlsZVwiKSBmaWxlOiBFeHByZXNzLk11bHRlci5GaWxlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBmaWxlLm1pbWV0eXBlID09PSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiID8gbnVsbCA6IGZpbGUubWltZXR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5hc3NldHMud3JpdGVCdWZmZXIoZmlsZS5idWZmZXIsIHtmaWxlbmFtZTogZmlsZS5maWxlbmFtZX0sIGNvbnRlbnRUeXBlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFzc2V0LnRvSlNPTigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gZT8ubWVzc2FnZSB8fCBlIHx8IFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMCwgYEFzc2V0IGNhbid0IGJlIHVwbG9hZGVkLlxcbiR7bXNnfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAQXV0aG9yaXplZCgpXHJcbiAgICBAUG9zdChcInVybFwiKVxyXG4gICAgYXN5bmMgdXBsb2FkVXJsKEBCb2R5KCkgYm9keTogYW55KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmFzc2V0cy53cml0ZVVybChib2R5LnVybCwgYm9keSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhc3NldC50b0pTT04oKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGU/Lm1lc3NhZ2UgfHwgZSB8fCBcIlVua25vd24gZXJyb3JcIjtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDAsIGBBc3NldCBjYW4ndCBiZSB1cGxvYWRlZC5cXG4ke21zZ31gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEdldChcIi86aWRcIilcclxuICAgIGFzeW5jIGdldEZpbGUoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgQFF1ZXJ5UGFyYW0oXCJsYXp5XCIpIGxhenk6IGJvb2xlYW4sIEBSZXMoKSByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5nZXRBc3NldChcIkFzc2V0XCIsIGlkLCBsYXp5LCByZXMpO1xyXG4gICAgICAgIHJldHVybiBhc3NldC5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoXCIvaW1hZ2UvOmlkLzpyb3RhdGlvblwiKVxyXG4gICAgYXN5bmMgZ2V0SW1hZ2VSb3RhdGlvbihAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nLCBAUXVlcnlQYXJhbXMoKSBwYXJhbXM6IEFzc2V0SW1hZ2VQYXJhbXMsIEBSZXMoKSByZXM6IFJlc3BvbnNlLCBAUGFyYW0oXCJyb3RhdGlvblwiKSByb3RhdGlvbjogbnVtYmVyID0gMCk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMuZ2V0QXNzZXQoXCJJbWFnZVwiLCBpZCwgcGFyYW1zLmxhenksIHJlcyk7XHJcbiAgICAgICAgaWYgKHJvdGF0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5yb3RhdGlvbiA9IHBhcmFtcy5yb3RhdGlvbiB8fCByb3RhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0LmRvd25sb2FkSW1hZ2UocGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiL2ltYWdlLzppZFwiKVxyXG4gICAgYXN5bmMgZ2V0SW1hZ2UoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgQFF1ZXJ5UGFyYW1zKCkgcGFyYW1zOiBBc3NldEltYWdlUGFyYW1zLCBAUmVzKCkgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbWFnZVJvdGF0aW9uKGlkLCBwYXJhbXMsIHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgQEdldChcIi9ieS1uYW1lLzpuYW1lXCIpXHJcbiAgICBhc3luYyBnZXRGaWxlQnlOYW1lKEBQYXJhbShcIm5hbWVcIikgbmFtZTogc3RyaW5nLCBAUmVzKCkgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMuZ2V0QXNzZXRCeU5hbWUoXCJBc3NldFwiLCBuYW1lLCByZXMpO1xyXG4gICAgICAgIHJldHVybiBhc3NldC5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoXCIvYnktbmFtZS9pbWFnZS86bmFtZVwiKVxyXG4gICAgYXN5bmMgZ2V0SW1hZ2VCeU5hbWUoQFBhcmFtKFwibmFtZVwiKSBuYW1lOiBzdHJpbmcsIEBRdWVyeVBhcmFtcygpIHBhcmFtczogQXNzZXRJbWFnZVBhcmFtcywgQFJlcygpIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmdldEFzc2V0QnlOYW1lKFwiSW1hZ2VcIiwgbmFtZSwgcmVzKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQuZG93bmxvYWRJbWFnZShwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRBc3NldEhlYWRlcnModHlwZTogc3RyaW5nLCBhc3NldDogSUFzc2V0LCByZXM6IFJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGFzc2V0Lm1ldGFkYXRhPy5jbGFzc2lmaWVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAzLCBgJHt0eXBlfSBpcyBjbGFzc2lmaWVkLCBhbmQgY2FuIGJlIG9ubHkgZG93bmxvYWRlZCBmcm9tIGEgY3VzdG9tIHVybC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZXh0ID0gYXNzZXQubWV0YWRhdGE/LmV4dGVuc2lvbjtcclxuICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgIHJlcy5oZWFkZXIoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIsIGBpbmxpbmU7IGZpbGVuYW1lPSR7YXNzZXQuZmlsZW5hbWV9LiR7ZXh0fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXNzZXQuY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgcmVzLmhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBhc3NldC5jb250ZW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRBc3NldCh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhenk6IGJvb2xlYW4sIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5hc3NldFJlc29sdmVyLnJlc29sdmUoaWQsIGxhenkpO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsIGAke3R5cGV9IHdpdGggaWQ6ICcke2lkfScgbm90IGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEFzc2V0SGVhZGVycyh0eXBlLCBhc3NldCwgcmVzKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEFzc2V0QnlOYW1lKHR5cGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmFzc2V0cy5maW5kKHtmaWxlbmFtZX0pO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsIGAke3R5cGV9IHdpdGggZmlsZW5hbWU6ICcke2ZpbGVuYW1lfScgbm90IGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEFzc2V0SGVhZGVycyh0eXBlLCBhc3NldCwgcmVzKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQ7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import webToken from "jsonwebtoken";
|
|
3
|
+
import { injectable } from "tsyringe";
|
|
4
|
+
import { Authorized, Body, Controller, CurrentUser, Get, HttpError, Post, Res, UnauthorizedError } from "routing-controllers";
|
|
5
|
+
import { compare } from "bcrypt";
|
|
6
|
+
let AuthController = class AuthController {
|
|
7
|
+
constructor(config, userManager) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.userManager = userManager;
|
|
10
|
+
}
|
|
11
|
+
async login(credentials, res) {
|
|
12
|
+
let user = null;
|
|
13
|
+
try {
|
|
14
|
+
user = await this.userManager.getByCredentials(credentials);
|
|
15
|
+
}
|
|
16
|
+
catch (reason) {
|
|
17
|
+
throw new HttpError(401, reason);
|
|
18
|
+
}
|
|
19
|
+
const valid = !user ? false : await compare(credentials.password, user.password);
|
|
20
|
+
if (valid !== true)
|
|
21
|
+
throw new UnauthorizedError(`message.login.error`);
|
|
22
|
+
return {
|
|
23
|
+
token: webToken.sign({ id: user._id || user.id }, this.config.resolve("jwtSecret")),
|
|
24
|
+
user: await this.userManager.serialize(user)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
getProfile(user) {
|
|
28
|
+
return this.userManager.serialize(user);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
__decorate([
|
|
32
|
+
Post("/login"),
|
|
33
|
+
__param(0, Body()),
|
|
34
|
+
__param(1, Res())
|
|
35
|
+
], AuthController.prototype, "login", null);
|
|
36
|
+
__decorate([
|
|
37
|
+
Authorized(),
|
|
38
|
+
Get("/user"),
|
|
39
|
+
__param(0, CurrentUser())
|
|
40
|
+
], AuthController.prototype, "getProfile", null);
|
|
41
|
+
AuthController = __decorate([
|
|
42
|
+
injectable(),
|
|
43
|
+
Controller()
|
|
44
|
+
], AuthController);
|
|
45
|
+
export { AuthController };
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvYXV0aC5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsV0FBVyxFQUNYLEdBQUcsRUFDSCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSCxpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBUXhCLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFFdkIsWUFBcUIsTUFBcUIsRUFBVyxXQUF3QjtRQUF4RCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQVcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRzNFLEFBQU4sS0FBSyxDQUFDLEtBQUssQ0FBUyxXQUFnQixFQUFTLEdBQWE7UUFDdEQsSUFBSSxJQUFJLEdBQVUsSUFBSSxDQUFDO1FBQ3ZCLElBQUk7WUFDQSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9EO1FBQUMsT0FBTyxNQUFNLEVBQUU7WUFDYixNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwQztRQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLElBQUksS0FBSyxLQUFLLElBQUk7WUFDZCxNQUFNLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN2RCxPQUFPO1lBQ0gsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkYsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQy9DLENBQUM7SUFDTixDQUFDO0lBSUQsVUFBVSxDQUFnQixJQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNKLENBQUE7QUFyQlM7SUFETCxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ0YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtJQUFvQixXQUFBLEdBQUcsRUFBRSxDQUFBOzJDQWMzQztBQUVEO0lBQUMsVUFBVSxFQUFFO0lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNELFdBQUEsV0FBVyxFQUFFLENBQUE7Z0RBRXhCO0FBekJRLGNBQWM7SUFGMUIsVUFBVSxFQUFFO0lBQ1osVUFBVSxFQUFFO0dBQ0EsY0FBYyxDQTBCMUI7U0ExQlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVzcG9uc2V9IGZyb20gXCJleHByZXNzXCI7XHJcbmltcG9ydCB3ZWJUb2tlbiBmcm9tIFwianNvbndlYnRva2VuXCI7XHJcbmltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBdXRob3JpemVkLFxyXG4gICAgQm9keSxcclxuICAgIENvbnRyb2xsZXIsXHJcbiAgICBDdXJyZW50VXNlcixcclxuICAgIEdldCxcclxuICAgIEh0dHBFcnJvcixcclxuICAgIFBvc3QsXHJcbiAgICBSZXMsXHJcbiAgICBVbmF1dGhvcml6ZWRFcnJvclxyXG59IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7Y29tcGFyZX0gZnJvbSBcImJjcnlwdFwiO1xyXG5cclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi4vc2VydmljZXMvdXNlci1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQENvbnRyb2xsZXIoKVxyXG5leHBvcnQgY2xhc3MgQXV0aENvbnRyb2xsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgdXNlck1hbmFnZXI6IFVzZXJNYW5hZ2VyKSB7fVxyXG5cclxuICAgIEBQb3N0KFwiL2xvZ2luXCIpXHJcbiAgICBhc3luYyBsb2dpbihAQm9keSgpIGNyZWRlbnRpYWxzOiBhbnksIEBSZXMoKSByZXM6IFJlc3BvbnNlKSB7XHJcbiAgICAgICAgbGV0IHVzZXI6IElVc2VyID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB1c2VyID0gYXdhaXQgdGhpcy51c2VyTWFuYWdlci5nZXRCeUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKTtcclxuICAgICAgICB9IGNhdGNoIChyZWFzb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIHJlYXNvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbGlkID0gIXVzZXIgPyBmYWxzZSA6IGF3YWl0IGNvbXBhcmUoY3JlZGVudGlhbHMucGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xyXG4gICAgICAgIGlmICh2YWxpZCAhPT0gdHJ1ZSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZEVycm9yKGBtZXNzYWdlLmxvZ2luLmVycm9yYCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9rZW46IHdlYlRva2VuLnNpZ24oeyBpZDogdXNlci5faWQgfHwgdXNlci5pZCB9LCB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiand0U2VjcmV0XCIpKSxcclxuICAgICAgICAgICAgdXNlcjogYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zZXJpYWxpemUodXNlcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIEBBdXRob3JpemVkKClcclxuICAgIEBHZXQoXCIvdXNlclwiKVxyXG4gICAgZ2V0UHJvZmlsZShAQ3VycmVudFVzZXIoKSB1c2VyOiBJVXNlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyLnNlcmlhbGl6ZSh1c2VyKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Controller, Get, Param } from "routing-controllers";
|
|
4
|
+
let GalleryController = class GalleryController {
|
|
5
|
+
constructor(galleryCache) {
|
|
6
|
+
this.galleryCache = galleryCache;
|
|
7
|
+
}
|
|
8
|
+
getFile(id) {
|
|
9
|
+
return this.galleryCache.serve(id);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
__decorate([
|
|
13
|
+
Get("/:id"),
|
|
14
|
+
__param(0, Param("id"))
|
|
15
|
+
], GalleryController.prototype, "getFile", null);
|
|
16
|
+
GalleryController = __decorate([
|
|
17
|
+
injectable(),
|
|
18
|
+
Controller("/gallery")
|
|
19
|
+
], GalleryController);
|
|
20
|
+
export { GalleryController };
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvZ2FsbGVyeS5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBS3BELElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBRTFCLFlBQXFCLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQUksQ0FBQztJQUdwRCxPQUFPLENBQWMsRUFBVTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDSixDQUFBO0FBSkc7SUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ0gsV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0RBRW5CO0FBUFEsaUJBQWlCO0lBRjdCLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxVQUFVLENBQUM7R0FDVixpQkFBaUIsQ0FRN0I7U0FSWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0NvbnRyb2xsZXIsIEdldCwgUGFyYW19IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7R2FsbGVyeUNhY2hlfSBmcm9tIFwiLi4vc2VydmljZXMvZ2FsbGVyeS1jYWNoZVwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5AQ29udHJvbGxlcihcIi9nYWxsZXJ5XCIpXHJcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5Q29udHJvbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgZ2FsbGVyeUNhY2hlOiBHYWxsZXJ5Q2FjaGUpIHsgfVxyXG5cclxuICAgIEBHZXQoXCIvOmlkXCIpXHJcbiAgICBnZXRGaWxlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nYWxsZXJ5Q2FjaGUuc2VydmUoaWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Controller, Get, Param } from "routing-controllers";
|
|
4
|
+
let ProgressesController = class ProgressesController {
|
|
5
|
+
constructor(progresses, config) {
|
|
6
|
+
this.progresses = progresses;
|
|
7
|
+
this.config = config;
|
|
8
|
+
const mainEndpoint = this.config.resolve("mainEndpoint");
|
|
9
|
+
this.connectionType = !mainEndpoint ? "polling" : "socket";
|
|
10
|
+
}
|
|
11
|
+
async getProgress(id) {
|
|
12
|
+
const progress = await this.progresses.get(id);
|
|
13
|
+
if (!progress)
|
|
14
|
+
return null;
|
|
15
|
+
const json = progress.toJSON();
|
|
16
|
+
json.connectionType = this.connectionType;
|
|
17
|
+
return json;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
__decorate([
|
|
21
|
+
Get("/:id"),
|
|
22
|
+
__param(0, Param("id"))
|
|
23
|
+
], ProgressesController.prototype, "getProgress", null);
|
|
24
|
+
ProgressesController = __decorate([
|
|
25
|
+
injectable(),
|
|
26
|
+
Controller("/progresses")
|
|
27
|
+
], ProgressesController);
|
|
28
|
+
export { ProgressesController };
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvcHJvZ3Jlc3Nlcy5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBTXBELElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBSTdCLFlBQXFCLFVBQXNCLEVBQVcsTUFBcUI7UUFBdEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFXLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLFdBQVcsQ0FBYyxFQUFVO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFBO0FBUFM7SUFETCxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ08sV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7dURBTTdCO0FBaEJRLG9CQUFvQjtJQUZoQyxVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsYUFBYSxDQUFDO0dBQ2Isb0JBQW9CLENBaUJoQztTQWpCWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0NvbnRyb2xsZXIsIEdldCwgUGFyYW19IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4uL3NlcnZpY2VzL3Byb2dyZXNzZXNcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5AQ29udHJvbGxlcihcIi9wcm9ncmVzc2VzXCIpXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc2VzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgbWFpbkVuZHBvaW50ID0gdGhpcy5jb25maWcucmVzb2x2ZShcIm1haW5FbmRwb2ludFwiKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gIW1haW5FbmRwb2ludCA/IFwicG9sbGluZ1wiIDogXCJzb2NrZXRcIjtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiLzppZFwiKVxyXG4gICAgYXN5bmMgZ2V0UHJvZ3Jlc3MoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmdldChpZCk7XHJcbiAgICAgICAgaWYgKCFwcm9ncmVzcykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHByb2dyZXNzLnRvSlNPTigpO1xyXG4gICAgICAgIGpzb24uY29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xyXG4gICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Add a comment hint for webstorm to style the string as css
|
|
2
|
+
export default `
|
|
3
|
+
|
|
4
|
+
body {
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
background: #1e1e1e;
|
|
8
|
+
}
|
|
9
|
+
body * {
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
#terminal {
|
|
14
|
+
margin: 40px;
|
|
15
|
+
background: black;
|
|
16
|
+
border: 1px solid #dedede;
|
|
17
|
+
border-radius: 5px;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
#terminal .xterm {
|
|
22
|
+
margin: 10px;
|
|
23
|
+
height: calc(100vh - 120px);
|
|
24
|
+
border-radius: 5px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#terminal .xterm-viewport::-webkit-scrollbar {
|
|
28
|
+
width: 0.4em;
|
|
29
|
+
background-color: #222;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#terminal .xterm-viewport::-webkit-scrollbar-thumb {
|
|
33
|
+
background-color: #555;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#terminal .window-header {
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: flex-end;
|
|
40
|
+
background-color: #f1f1f1;
|
|
41
|
+
padding: 10px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#terminal .window-header button {
|
|
45
|
+
background-color: transparent;
|
|
46
|
+
border: none;
|
|
47
|
+
font-size: 14px;
|
|
48
|
+
font-weight: bold;
|
|
49
|
+
color: #444;
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
margin-left: 10px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.minimize-button {
|
|
55
|
+
content: "-";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.maximize-button {
|
|
59
|
+
content: "+";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.close-button {
|
|
63
|
+
content: "x";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
`;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtc3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvdGVybWluYWwtc3R5bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxlQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0VkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBZGQgYSBjb21tZW50IGhpbnQgZm9yIHdlYnN0b3JtIHRvIHN0eWxlIHRoZSBzdHJpbmcgYXMgY3NzXHJcbmV4cG9ydCBkZWZhdWx0IGBcclxuXHJcbmJvZHkge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7XHJcbn1cclxuYm9keSAqIHtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbn1cclxuXHJcbiN0ZXJtaW5hbCB7XHJcbiAgICBtYXJnaW46IDQwcHg7XHJcbiAgICBiYWNrZ3JvdW5kOiBibGFjaztcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWRlZGU7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4jdGVybWluYWwgLnh0ZXJtIHtcclxuICAgIG1hcmdpbjogMTBweDtcclxuICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDEyMHB4KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcclxufVxyXG5cclxuI3Rlcm1pbmFsIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgd2lkdGg6IDAuNGVtO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjtcclxufVxyXG5cclxuI3Rlcm1pbmFsIC54dGVybS12aWV3cG9ydDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcclxufVxyXG5cclxuI3Rlcm1pbmFsIC53aW5kb3ctaGVhZGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7XHJcbiAgICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcblxyXG4jdGVybWluYWwgLndpbmRvdy1oZWFkZXIgYnV0dG9uIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICBjb2xvcjogIzQ0NDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG59XHJcblxyXG4ubWluaW1pemUtYnV0dG9uIHtcclxuICAgIGNvbnRlbnQ6IFwiLVwiO1xyXG59XHJcblxyXG4ubWF4aW1pemUtYnV0dG9uIHtcclxuICAgIGNvbnRlbnQ6IFwiK1wiO1xyXG59XHJcblxyXG4uY2xvc2UtYnV0dG9uIHtcclxuICAgIGNvbnRlbnQ6IFwieFwiO1xyXG59XHJcblxyXG5gO1xyXG4iXX0=
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Controller, Get, Header } from "routing-controllers";
|
|
4
|
+
import styles from "./terminal-styles";
|
|
5
|
+
let TerminalController = class TerminalController {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.serviceName = config.resolve("serviceName");
|
|
9
|
+
this.serviceUrl = config.resolve("serviceUrl");
|
|
10
|
+
}
|
|
11
|
+
terminal() {
|
|
12
|
+
return this.generateClient("terminal");
|
|
13
|
+
}
|
|
14
|
+
console() {
|
|
15
|
+
return this.generateClient("console");
|
|
16
|
+
}
|
|
17
|
+
generateClient(alias) {
|
|
18
|
+
return `
|
|
19
|
+
<!DOCTYPE html>
|
|
20
|
+
<html>
|
|
21
|
+
<head>
|
|
22
|
+
<meta charset="utf-8">
|
|
23
|
+
<title>${this.serviceName} ${alias}</title>
|
|
24
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.min.css"/>
|
|
25
|
+
<script type="text/javascript" src="${this.serviceUrl}/socket/socket.io.js"></script>
|
|
26
|
+
<style>
|
|
27
|
+
${styles}
|
|
28
|
+
</style>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="terminal"></div>
|
|
32
|
+
<script type="module">
|
|
33
|
+
// Import terminal modules
|
|
34
|
+
import xterm from 'https://cdn.jsdelivr.net/npm/xterm@5.1.0/+esm';
|
|
35
|
+
import xtermFit from 'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';
|
|
36
|
+
// Initialize variables
|
|
37
|
+
var terminal = new xterm.Terminal();
|
|
38
|
+
var fitAddon = new xtermFit.FitAddon();
|
|
39
|
+
var socket = io("${this.serviceUrl}", {path: "/socket"});
|
|
40
|
+
var clear = function () {
|
|
41
|
+
terminal.clear();
|
|
42
|
+
terminal.reset();
|
|
43
|
+
// Prev line
|
|
44
|
+
terminal.write("\u001B[F");
|
|
45
|
+
}
|
|
46
|
+
// Initialize terminal
|
|
47
|
+
terminal.loadAddon(fitAddon);
|
|
48
|
+
terminal.open(document.getElementById('terminal'));
|
|
49
|
+
terminal.onData(function (data) {
|
|
50
|
+
socket.emit("terminal-data", data.charCodeAt(0) === 127 ? "\b" : data);
|
|
51
|
+
});
|
|
52
|
+
// Socket listeners
|
|
53
|
+
socket.on("terminal-data", function (data) {
|
|
54
|
+
if (data === "\x1bc") {
|
|
55
|
+
clear();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
terminal.write(data);
|
|
59
|
+
});
|
|
60
|
+
socket.on("terminal-upload", function (data) {
|
|
61
|
+
var input = document.createElement("input");
|
|
62
|
+
input.type = "file";
|
|
63
|
+
input.accept = data.accept;
|
|
64
|
+
input.onchange = function () {
|
|
65
|
+
var file = input.files[0];
|
|
66
|
+
var reader = new FileReader();
|
|
67
|
+
reader.onload = function () {
|
|
68
|
+
socket.emit("terminal-upload", {
|
|
69
|
+
id: data.id,
|
|
70
|
+
label: file.name,
|
|
71
|
+
content: reader.result,
|
|
72
|
+
accept: data.accept
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
reader.onerror = function () {
|
|
76
|
+
socket.emit("terminal-upload", {
|
|
77
|
+
id: data.id,
|
|
78
|
+
label: file.name,
|
|
79
|
+
error: reader.error,
|
|
80
|
+
accept: data.accept
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
reader.readAsDataURL(file);
|
|
84
|
+
};
|
|
85
|
+
input.click();
|
|
86
|
+
});
|
|
87
|
+
socket.on("terminal-download", function (data) {
|
|
88
|
+
var link = document.createElement("a");
|
|
89
|
+
link.href = data.content;
|
|
90
|
+
link.download = data.filename;
|
|
91
|
+
link.click();
|
|
92
|
+
});
|
|
93
|
+
socket.on("connect", function () {
|
|
94
|
+
clear();
|
|
95
|
+
terminal.writeln("Welcome to ${this.serviceName} service's ${alias}!");
|
|
96
|
+
socket.emit("terminal-init");
|
|
97
|
+
});
|
|
98
|
+
socket.on("disconnect", function () {
|
|
99
|
+
clear();
|
|
100
|
+
terminal.writeln("Disconnected from ${this.serviceName} service's ${alias}.");
|
|
101
|
+
});
|
|
102
|
+
</script>
|
|
103
|
+
</body>
|
|
104
|
+
</html>
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
__decorate([
|
|
109
|
+
Get("/terminal"),
|
|
110
|
+
Header("Content-Type", "text/html")
|
|
111
|
+
], TerminalController.prototype, "terminal", null);
|
|
112
|
+
__decorate([
|
|
113
|
+
Get("/console"),
|
|
114
|
+
Header("Content-Type", "text/html")
|
|
115
|
+
], TerminalController.prototype, "console", null);
|
|
116
|
+
__decorate([
|
|
117
|
+
Get(),
|
|
118
|
+
Header("Content-Type", "text/html")
|
|
119
|
+
], TerminalController.prototype, "generateClient", null);
|
|
120
|
+
TerminalController = __decorate([
|
|
121
|
+
injectable(),
|
|
122
|
+
Controller()
|
|
123
|
+
], TerminalController);
|
|
124
|
+
export { TerminalController };
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFNUQsT0FBTyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFJaEMsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUFNM0IsWUFBcUIsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFJRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFJRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFJUyxjQUFjLENBQUMsS0FBYTtRQUNsQyxPQUFPOzs7OztxQkFLTSxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUs7O2tEQUVJLElBQUksQ0FBQyxVQUFVOztrQkFFL0MsTUFBTTs7Ozs7Ozs7Ozs7O21DQVlXLElBQUksQ0FBQyxVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttREF3REMsSUFBSSxDQUFDLFdBQVcsY0FBYyxLQUFLOzs7OzswREFLNUIsSUFBSSxDQUFDLFdBQVcsY0FBYyxLQUFLOzs7OztTQUtwRixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUF0R0c7SUFGQyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ2hCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO2tEQUduQztBQUlEO0lBRkMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO2lEQUduQztBQUlEO0lBRkMsR0FBRyxFQUFFO0lBQ0wsTUFBTSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7d0RBMEZuQztBQWxIUSxrQkFBa0I7SUFGOUIsVUFBVSxFQUFFO0lBQ1osVUFBVSxFQUFFO0dBQ0Esa0JBQWtCLENBbUg5QjtTQW5IWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0NvbnRyb2xsZXIsIEdldCwgSGVhZGVyfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vdGVybWluYWwtc3R5bGVzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBDb250cm9sbGVyKClcclxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgcHJvdGVjdGVkIHNlcnZpY2VVcmw6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VOYW1lID0gY29uZmlnLnJlc29sdmUoXCJzZXJ2aWNlTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmwgPSBjb25maWcucmVzb2x2ZShcInNlcnZpY2VVcmxcIik7XHJcbiAgICB9XHJcblxyXG4gICAgQEdldChcIi90ZXJtaW5hbFwiKVxyXG4gICAgQEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKVxyXG4gICAgdGVybWluYWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGllbnQoXCJ0ZXJtaW5hbFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiL2NvbnNvbGVcIilcclxuICAgIEBIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIilcclxuICAgIGNvbnNvbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGllbnQoXCJjb25zb2xlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoKVxyXG4gICAgQEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKVxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlQ2xpZW50KGFsaWFzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgXHJcbiAgICAgICAgPCFET0NUWVBFIGh0bWw+XHJcbiAgICAgICAgPGh0bWw+XHJcbiAgICAgICAgPGhlYWQ+XHJcbiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxyXG4gICAgICAgICAgICA8dGl0bGU+JHt0aGlzLnNlcnZpY2VOYW1lfSAke2FsaWFzfTwvdGl0bGU+XHJcbiAgICAgICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS94dGVybUA1LjEuMC9jc3MveHRlcm0ubWluLmNzc1wiLz5cclxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiJHt0aGlzLnNlcnZpY2VVcmx9L3NvY2tldC9zb2NrZXQuaW8uanNcIj48L3NjcmlwdD5cclxuICAgICAgICAgICAgPHN0eWxlPlxyXG4gICAgICAgICAgICAgICAgJHtzdHlsZXN9XHJcbiAgICAgICAgICAgIDwvc3R5bGU+XHJcbiAgICAgICAgPC9oZWFkPlxyXG4gICAgICAgIDxib2R5PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwidGVybWluYWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XHJcbiAgICAgICAgICAgICAgICAvLyBJbXBvcnQgdGVybWluYWwgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgaW1wb3J0IHh0ZXJtIGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0veHRlcm1ANS4xLjAvK2VzbSc7XHJcbiAgICAgICAgICAgICAgICBpbXBvcnQgeHRlcm1GaXQgZnJvbSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS94dGVybS1hZGRvbi1maXRAMC43LjAvK2VzbSc7XHJcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICAgICAgdmFyIHRlcm1pbmFsID0gbmV3IHh0ZXJtLlRlcm1pbmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml0QWRkb24gPSBuZXcgeHRlcm1GaXQuRml0QWRkb24oKTtcclxuICAgICAgICAgICAgICAgIHZhciBzb2NrZXQgPSBpbyhcIiR7dGhpcy5zZXJ2aWNlVXJsfVwiLCB7cGF0aDogXCIvc29ja2V0XCJ9KTtcclxuICAgICAgICAgICAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldiBsaW5lXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYWwud3JpdGUoXCJcXHUwMDFCW0ZcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRlcm1pbmFsXHJcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbC5sb2FkQWRkb24oZml0QWRkb24pO1xyXG4gICAgICAgICAgICAgICAgdGVybWluYWwub3Blbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVybWluYWwnKSk7XHJcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbC5vbkRhdGEoZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcInRlcm1pbmFsLWRhdGFcIiwgZGF0YS5jaGFyQ29kZUF0KDApID09PSAxMjcgPyBcIlxcYlwiIDogZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIFNvY2tldCBsaXN0ZW5lcnNcclxuICAgICAgICAgICAgICAgIHNvY2tldC5vbihcInRlcm1pbmFsLWRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gXCJcXHgxYmNcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzb2NrZXQub24oXCJ0ZXJtaW5hbC11cGxvYWRcIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudHlwZSA9IFwiZmlsZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmFjY2VwdCA9IGRhdGEuYWNjZXB0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Lm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5lbWl0KFwidGVybWluYWwtdXBsb2FkXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlYWRlci5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiBkYXRhLmFjY2VwdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmVtaXQoXCJ0ZXJtaW5hbC11cGxvYWRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHJlYWRlci5lcnJvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6IGRhdGEuYWNjZXB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzb2NrZXQub24oXCJ0ZXJtaW5hbC1kb3dubG9hZFwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gZGF0YS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBkYXRhLmZpbGVuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uKFwiY29ubmVjdFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC53cml0ZWxuKFwiV2VsY29tZSB0byAke3RoaXMuc2VydmljZU5hbWV9IHNlcnZpY2UncyAke2FsaWFzfSFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ja2V0LmVtaXQoXCJ0ZXJtaW5hbC1pbml0XCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzb2NrZXQub24oXCJkaXNjb25uZWN0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJEaXNjb25uZWN0ZWQgZnJvbSAke3RoaXMuc2VydmljZU5hbWV9IHNlcnZpY2UncyAke2FsaWFzfS5cIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgPC9ib2R5PlxyXG4gICAgICAgIDwvaHRtbD5cclxuICAgICAgICBgO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { __decorate, __param } from "tslib";
|
|
2
|
+
import { inject, injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
import { DI_CONTAINER } from "../common-types";
|
|
5
|
+
let ContainerMiddleware = class ContainerMiddleware {
|
|
6
|
+
constructor(container) {
|
|
7
|
+
this.container = container;
|
|
8
|
+
}
|
|
9
|
+
use(request, response, next) {
|
|
10
|
+
request.container = this.container;
|
|
11
|
+
next(null);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
ContainerMiddleware = __decorate([
|
|
15
|
+
injectable(),
|
|
16
|
+
Middleware({ type: "before" }),
|
|
17
|
+
__param(0, inject(DI_CONTAINER))
|
|
18
|
+
], ContainerMiddleware);
|
|
19
|
+
export { ContainerMiddleware };
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1taWRkbGV3YXJlcy9jb250YWluZXIubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUMsT0FBTyxFQUE2QixVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFLaEQsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFFNUIsWUFBMkMsU0FBOEI7UUFBOUIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7SUFFekUsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFpQixFQUFFLFFBQWEsRUFBRSxJQUF3QjtRQUMxRCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUFWWSxtQkFBbUI7SUFGL0IsVUFBVSxFQUFFO0lBQ1osVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBR2QsV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7R0FGeEIsbUJBQW1CLENBVS9CO1NBVlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIGluamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSVJlcXVlc3R9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQE1pZGRsZXdhcmUoeyB0eXBlOiBcImJlZm9yZVwiIH0pXHJcbmV4cG9ydCBjbGFzcyBDb250YWluZXJNaWRkbGV3YXJlIGltcGxlbWVudHMgRXhwcmVzc01pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoRElfQ09OVEFJTkVSKSByZWFkb25seSBjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXNlKHJlcXVlc3Q6IElSZXF1ZXN0LCByZXNwb25zZTogYW55LCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpOiB2b2lkIHtcclxuICAgICAgICByZXF1ZXN0LmNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { BadRequestError, Middleware } from "routing-controllers";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
let ErrorHandlerMiddleware = class ErrorHandlerMiddleware {
|
|
6
|
+
constructor(configuration, translator) {
|
|
7
|
+
this.configuration = configuration;
|
|
8
|
+
this.translator = translator;
|
|
9
|
+
}
|
|
10
|
+
get isDev() {
|
|
11
|
+
return this.configuration.resolve("nodeEnv") === "development";
|
|
12
|
+
}
|
|
13
|
+
async error(error, req, res, next) {
|
|
14
|
+
const result = await this.getResult(error, req, res);
|
|
15
|
+
if (this.isDev) {
|
|
16
|
+
if (axios.isAxiosError(error)) {
|
|
17
|
+
console.log(`Axios error:`, result);
|
|
18
|
+
console.log(error.config.data);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log(error.constructor?.name || "Error", result, res.statusCode);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
res.json(result);
|
|
25
|
+
}
|
|
26
|
+
async getResult(error, req, res) {
|
|
27
|
+
const result = {};
|
|
28
|
+
if (axios.isAxiosError(error)) {
|
|
29
|
+
res.status(error.response.status);
|
|
30
|
+
result.message = error.message;
|
|
31
|
+
result.error = error.response.data;
|
|
32
|
+
result.headers = error.response.headers;
|
|
33
|
+
result.url = `${error.config.baseURL}${error.config.url}`;
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
if (error instanceof BadRequestError) {
|
|
37
|
+
res.status(400);
|
|
38
|
+
if (error.constructor.name === "ParamRequiredError") {
|
|
39
|
+
result.message = await this.translator.getTranslation(req.language, "message.parameter-required.error");
|
|
40
|
+
result.param = error.message;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
result.message = error.message || await this.translator.getTranslation(req.language, "message.form-validation.error");
|
|
44
|
+
result.errors = error["errors"];
|
|
45
|
+
if (error.stack && this.isDev) {
|
|
46
|
+
result.stack = error.stack;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
res.status(error.httpCode || 500);
|
|
52
|
+
if (error instanceof Error) {
|
|
53
|
+
if (error.name) {
|
|
54
|
+
result.name = error.name;
|
|
55
|
+
}
|
|
56
|
+
if (error.message) {
|
|
57
|
+
result.message = error.message;
|
|
58
|
+
}
|
|
59
|
+
if (error.stack && this.isDev) {
|
|
60
|
+
result.stack = error.stack;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (typeof error === "string") {
|
|
64
|
+
result.message = error;
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
ErrorHandlerMiddleware = __decorate([
|
|
70
|
+
injectable(),
|
|
71
|
+
Middleware({ type: "after" })
|
|
72
|
+
], ErrorHandlerMiddleware);
|
|
73
|
+
export { ErrorHandlerMiddleware };
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQW1DLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQVNuQixJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUFzQjtJQU0vQixZQUFxQixhQUE0QixFQUFXLFVBQXNCO1FBQTdELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVcsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUVsRixDQUFDO0lBTkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxhQUFhLENBQUM7SUFDbkUsQ0FBQztJQU1ELEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBVSxFQUFFLEdBQWEsRUFBRSxHQUFhLEVBQUUsSUFBd0I7UUFDMUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJ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ZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7QmFkUmVxdWVzdEVycm9yLCBFeHByZXNzRXJyb3JNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7UmVzcG9uc2V9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4uL3NlcnZpY2VzL3RyYW5zbGF0b3JcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYWZ0ZXJcIiB9KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NFcnJvck1pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGdldCBpc0RldigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmUoXCJub2RlRW52XCIpID09PSBcImRldmVsb3BtZW50XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRvcikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlcnJvcihlcnJvcjogYW55LCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlc3VsdChlcnJvciwgcmVxLCByZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGV2KSB7XHJcbiAgICAgICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQXhpb3MgZXJyb3I6YCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbmZpZy5kYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbnN0cnVjdG9yPy5uYW1lIHx8IFwiRXJyb3JcIiwgcmVzdWx0LCByZXMuc3RhdHVzQ29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVzdWx0KGVycm9yLCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG4gICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvci5yZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICByZXN1bHQuaGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICAgICAgICAgIHJlc3VsdC51cmwgPSBgJHtlcnJvci5jb25maWcuYmFzZVVSTH0ke2Vycm9yLmNvbmZpZy51cmx9YDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFcnJvcikge1xyXG4gICAgICAgICAgICByZXMuc3RhdHVzKDQwMCk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlBhcmFtUmVxdWlyZWRFcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5wYXJhbWV0ZXItcmVxdWlyZWQuZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucGFyYW0gPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5mb3JtLXZhbGlkYXRpb24uZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JzID0gZXJyb3JbXCJlcnJvcnNcIl07XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFjayA9IGVycm9yLnN0YWNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXMuc3RhdHVzKGVycm9yLmh0dHBDb2RlIHx8IDUwMCk7XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubmFtZSA9IGVycm9yLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZXJyb3Iuc3RhY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
let LanguageMiddleware = class LanguageMiddleware {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
}
|
|
8
|
+
use(request, response, next) {
|
|
9
|
+
request.language = request.query.language || this.config.resolve("defaultLanguage");
|
|
10
|
+
next(null);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
LanguageMiddleware = __decorate([
|
|
14
|
+
injectable(),
|
|
15
|
+
Middleware({ type: "before" })
|
|
16
|
+
], LanguageMiddleware);
|
|
17
|
+
export { LanguageMiddleware };
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UubWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUE2QixVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQU1wRSxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQUUzQixZQUFxQixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO0lBRTFDLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQWtCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQVhZLGtCQUFrQjtJQUY5QixVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7R0FDbEIsa0JBQWtCLENBVzlCO1NBWFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtFeHByZXNzTWlkZGxld2FyZUludGVyZmFjZSwgTWlkZGxld2FyZX0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtJUmVxdWVzdH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBNaWRkbGV3YXJlKHsgdHlwZTogXCJiZWZvcmVcIiB9KVxyXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VNaWRkbGV3YXJlIGltcGxlbWVudHMgRXhwcmVzc01pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB1c2UocmVxdWVzdDogSVJlcXVlc3QsIHJlc3BvbnNlOiBhbnksIG5leHQ6IChlcnI/OiBhbnkpID0+IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHJlcXVlc3QubGFuZ3VhZ2UgPSByZXF1ZXN0LnF1ZXJ5Lmxhbmd1YWdlIGFzIHN0cmluZyB8fCB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiZGVmYXVsdExhbmd1YWdlXCIpO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { Middleware } from "routing-controllers";
|
|
4
|
+
import moment from "moment";
|
|
5
|
+
let RequestEndedMiddleware = class RequestEndedMiddleware {
|
|
6
|
+
constructor(logger) {
|
|
7
|
+
this.logger = logger;
|
|
8
|
+
}
|
|
9
|
+
use(request, response, next) {
|
|
10
|
+
request.ended = moment();
|
|
11
|
+
const diff = request.ended.diff(request.started);
|
|
12
|
+
const duration = moment.duration(diff);
|
|
13
|
+
this.logger.log("request-time", `Request '${request.id}' ended at: ${request.ended.format("YYYY-MM-DD HH:mm:ss")} [${request.method}] ${request.url}`);
|
|
14
|
+
this.logger.log("request-time", `Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`);
|
|
15
|
+
next(null);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
RequestEndedMiddleware = __decorate([
|
|
19
|
+
injectable(),
|
|
20
|
+
Middleware({ type: "after" })
|
|
21
|
+
], RequestEndedMiddleware);
|
|
22
|
+
export { RequestEndedMiddleware };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvcmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBNkIsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBTXJCLElBQU0sc0JBQXNCLEdBQTVCLE1BQU0sc0JBQXNCO0lBRS9CLFlBQXFCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxlQUFlLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxhQUFhLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUNuRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUVKLENBQUE7QUFwQlksc0JBQXNCO0lBRmxDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztHQUNqQixzQkFBc0IsQ0FvQmxDO1NBcEJZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7RXhwcmVzc01pZGRsZXdhcmVJbnRlcmZhY2UsIE1pZGRsZXdhcmV9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBNaWRkbGV3YXJlKHsgdHlwZTogXCJhZnRlclwiIH0pXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlIGltcGxlbWVudHMgRXhwcmVzc01pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlKHJlcXVlc3Q6IElSZXF1ZXN0LCByZXNwb25zZTogYW55LCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpOiB2b2lkIHtcclxuICAgICAgICByZXF1ZXN0LmVuZGVkID0gbW9tZW50KCk7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IHJlcXVlc3QuZW5kZWQuZGlmZihyZXF1ZXN0LnN0YXJ0ZWQpO1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbW9tZW50LmR1cmF0aW9uKGRpZmYpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcclxuICAgICAgICAgICAgXCJyZXF1ZXN0LXRpbWVcIixcclxuICAgICAgICAgICAgYFJlcXVlc3QgJyR7cmVxdWVzdC5pZH0nIGVuZGVkIGF0OiAke3JlcXVlc3QuZW5kZWQuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKX0gWyR7cmVxdWVzdC5tZXRob2R9XSAke3JlcXVlc3QudXJsfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcclxuICAgICAgICAgICAgXCJyZXF1ZXN0LXRpbWVcIixcclxuICAgICAgICAgICAgYFJlcXVlc3QgJyR7cmVxdWVzdC5pZH0nIGxhc3RlZDogJHtkdXJhdGlvbi5hc01pbGxpc2Vjb25kcygpfW1zYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbmV4dChudWxsKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|