@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.
Files changed (145) hide show
  1. package/commands/fixtures-command.d.ts +9 -0
  2. package/commands/index.d.ts +2 -0
  3. package/common-types.d.ts +11 -6
  4. package/esm2020/commands/clear-command.mjs +17 -0
  5. package/esm2020/commands/fixtures-command.mjs +23 -0
  6. package/esm2020/commands/index.mjs +7 -0
  7. package/esm2020/common-types.mjs +21 -0
  8. package/esm2020/public_api.mjs +379 -0
  9. package/esm2020/requests/asset-image-params.mjs +53 -0
  10. package/esm2020/rest-controllers/assets.controller.mjs +126 -0
  11. package/esm2020/rest-controllers/auth.controller.mjs +46 -0
  12. package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
  13. package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
  14. package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
  15. package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
  16. package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
  17. package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
  18. package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
  19. package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
  20. package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
  21. package/esm2020/services/asset-processor.mjs +90 -0
  22. package/esm2020/services/asset-resolver.mjs +31 -0
  23. package/esm2020/services/assets.mjs +140 -0
  24. package/esm2020/services/backend-provider.mjs +22 -0
  25. package/esm2020/services/cache-processor.mjs +16 -0
  26. package/esm2020/services/cache.mjs +62 -0
  27. package/{esm2015/services/configuration.js → esm2020/services/configuration.mjs} +3 -15
  28. package/esm2020/services/endpoint-provider.mjs +13 -0
  29. package/esm2020/services/entities/asset.mjs +43 -0
  30. package/esm2020/services/entities/base-entity.mjs +26 -0
  31. package/esm2020/services/entities/lazy-asset.mjs +73 -0
  32. package/esm2020/services/entities/progress.mjs +176 -0
  33. package/esm2020/services/entities/temp-asset.mjs +45 -0
  34. package/esm2020/services/fixtures.mjs +26 -0
  35. package/esm2020/services/gallery-cache.mjs +27 -0
  36. package/esm2020/services/gallery-image.mjs +37 -0
  37. package/esm2020/services/gallery.mjs +116 -0
  38. package/esm2020/services/id-generator.mjs +42 -0
  39. package/esm2020/services/job-manager.mjs +187 -0
  40. package/esm2020/services/lazy-assets.mjs +48 -0
  41. package/esm2020/services/logger.mjs +21 -0
  42. package/esm2020/services/mail-sender.mjs +36 -0
  43. package/esm2020/services/memory-cache.mjs +57 -0
  44. package/esm2020/services/mongo-connector.mjs +37 -0
  45. package/esm2020/services/open-api.mjs +114 -0
  46. package/esm2020/services/progresses.mjs +86 -0
  47. package/esm2020/services/template-renderer.mjs +64 -0
  48. package/esm2020/services/terminal-manager.mjs +77 -0
  49. package/esm2020/services/token-generator.mjs +35 -0
  50. package/esm2020/services/translation-provider.mjs +34 -0
  51. package/esm2020/services/translator.mjs +63 -0
  52. package/esm2020/services/user-manager.mjs +27 -0
  53. package/esm2020/socket-controllers/progress.controller.mjs +52 -0
  54. package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
  55. package/esm2020/socket-controllers/terminal.mjs +85 -0
  56. package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
  57. package/esm2020/static.mjs +23 -0
  58. package/esm2020/utilities/decorators.mjs +52 -0
  59. package/esm2020/utilities/di-container.mjs +83 -0
  60. package/esm2020/utilities/empty-job.mjs +13 -0
  61. package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
  62. package/esm2020/utilities/mongoose.mjs +216 -0
  63. package/esm2020/utils.mjs +693 -0
  64. package/esm2020/validators.mjs +46 -0
  65. package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1638 -2403
  66. package/fesm2015/stemy-backend.mjs.map +1 -0
  67. package/fesm2020/stemy-backend.mjs +4202 -0
  68. package/fesm2020/stemy-backend.mjs.map +1 -0
  69. package/{stemy-backend.d.ts → index.d.ts} +1 -0
  70. package/package.json +35 -23
  71. package/public_api.d.ts +2 -2
  72. package/rest-controllers/terminal-styles.d.ts +2 -0
  73. package/rest-controllers/terminal.controller.d.ts +2 -0
  74. package/services/assets.d.ts +1 -0
  75. package/services/entities/asset.d.ts +1 -0
  76. package/services/entities/temp-asset.d.ts +1 -0
  77. package/services/fixtures.d.ts +2 -2
  78. package/utils.d.ts +3 -0
  79. package/bundles/stemy-backend.umd.js +0 -7553
  80. package/bundles/stemy-backend.umd.js.map +0 -1
  81. package/esm2015/common-types.js +0 -20
  82. package/esm2015/public_api.js +0 -380
  83. package/esm2015/requests/asset-image-params.js +0 -70
  84. package/esm2015/rest-controllers/assets.controller.js +0 -180
  85. package/esm2015/rest-controllers/auth.controller.js +0 -76
  86. package/esm2015/rest-controllers/gallery.controller.js +0 -37
  87. package/esm2015/rest-controllers/progresses.controller.js +0 -57
  88. package/esm2015/rest-controllers/terminal.controller.js +0 -151
  89. package/esm2015/rest-middlewares/container.middleware.js +0 -32
  90. package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
  91. package/esm2015/rest-middlewares/language.middleware.js +0 -28
  92. package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
  93. package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
  94. package/esm2015/rest-openapi.js +0 -44
  95. package/esm2015/services/asset-processor.js +0 -108
  96. package/esm2015/services/asset-resolver.js +0 -53
  97. package/esm2015/services/assets.js +0 -181
  98. package/esm2015/services/backend-provider.js +0 -32
  99. package/esm2015/services/cache-processor.js +0 -34
  100. package/esm2015/services/cache.js +0 -93
  101. package/esm2015/services/endpoint-provider.js +0 -29
  102. package/esm2015/services/entities/asset.js +0 -60
  103. package/esm2015/services/entities/base-entity.js +0 -37
  104. package/esm2015/services/entities/lazy-asset.js +0 -90
  105. package/esm2015/services/entities/progress.js +0 -213
  106. package/esm2015/services/entities/temp-asset.js +0 -64
  107. package/esm2015/services/fixtures.js +0 -45
  108. package/esm2015/services/gallery-cache.js +0 -36
  109. package/esm2015/services/gallery-image.js +0 -48
  110. package/esm2015/services/gallery.js +0 -138
  111. package/esm2015/services/id-generator.js +0 -63
  112. package/esm2015/services/job-manager.js +0 -221
  113. package/esm2015/services/lazy-assets.js +0 -83
  114. package/esm2015/services/logger.js +0 -31
  115. package/esm2015/services/mail-sender.js +0 -58
  116. package/esm2015/services/memory-cache.js +0 -84
  117. package/esm2015/services/mongo-connector.js +0 -58
  118. package/esm2015/services/open-api.js +0 -140
  119. package/esm2015/services/progresses.js +0 -118
  120. package/esm2015/services/template-renderer.js +0 -88
  121. package/esm2015/services/terminal-manager.js +0 -94
  122. package/esm2015/services/token-generator.js +0 -55
  123. package/esm2015/services/translation-provider.js +0 -54
  124. package/esm2015/services/translator.js +0 -84
  125. package/esm2015/services/user-manager.js +0 -47
  126. package/esm2015/socket-controllers/progress.controller.js +0 -82
  127. package/esm2015/socket-controllers/terminal.controller.js +0 -83
  128. package/esm2015/socket-controllers/terminal.js +0 -98
  129. package/esm2015/socket-middlewares/compression.middleware.js +0 -19
  130. package/esm2015/static.js +0 -33
  131. package/esm2015/utilities/clear-command.js +0 -33
  132. package/esm2015/utilities/decorators.js +0 -54
  133. package/esm2015/utilities/di-container.js +0 -84
  134. package/esm2015/utilities/empty-job.js +0 -29
  135. package/esm2015/utilities/lazy-asset-generator.js +0 -46
  136. package/esm2015/utilities/mongoose.js +0 -225
  137. package/esm2015/utils.js +0 -699
  138. package/esm2015/validators.js +0 -51
  139. package/fesm2015/stemy-backend.js.map +0 -1
  140. package/rest-openapi.d.ts +0 -3
  141. package/stemy-backend.metadata.json +0 -1
  142. /package/{utilities → commands}/clear-command.d.ts +0 -0
  143. /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
  144. /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
  145. /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFVBQVUsRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILFlBQVksRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBUXRCLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBRXpCLFlBQXFCLE1BQWMsRUFBVyxhQUE0QjtRQUFyRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFFMUUsQ0FBQztJQUlLLEFBQU4sS0FBSyxDQUFDLE1BQU0sQ0FBdUIsSUFBeUI7UUFDeEQsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDL0MsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsNkJB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QUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUFpQixXQUFBLEdBQUcsRUFBRSxDQUFBOytDQUcvRTtBQUdLO0lBREwsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ0osV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFdBQVcsRUFBRSxDQUFBO0lBQTRCLFdBQUEsR0FBRyxFQUFFLENBQUE7SUFBaUIsV0FBQSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7d0RBTWhJO0FBR0s7SUFETCxHQUFHLENBQUMsWUFBWSxDQUFDO0lBQ0YsV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFBYyxXQUFBLFdBQVcsRUFBRSxDQUFBO0lBQTRCLFdBQUEsR0FBRyxFQUFFLENBQUE7Z0RBRXRGO0FBR0s7SUFETCxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDRCxXQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUFnQixXQUFBLEdBQUcsRUFBRSxDQUFBO3FEQUd0RDtBQUdLO0lBREwsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0lBQ04sV0FBQSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFBZ0IsV0FBQSxXQUFXLEVBQUUsQ0FBQTtJQUE0QixXQUFBLEdBQUcsRUFBRSxDQUFBO3NEQUdoRztBQTdEUSxnQkFBZ0I7SUFGNUIsVUFBVSxFQUFFO0lBQ1osVUFBVSxDQUFDLFNBQVMsQ0FBQztHQUNULGdCQUFnQixDQTZGNUI7U0E3RlksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge1Jlc3BvbnNlfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0aG9yaXplZCxcclxuICAgIEJvZHksXHJcbiAgICBDb250cm9sbGVyLFxyXG4gICAgR2V0LFxyXG4gICAgSHR0cEVycm9yLFxyXG4gICAgUGFyYW0sXHJcbiAgICBQb3N0LFxyXG4gICAgUXVlcnlQYXJhbSxcclxuICAgIFF1ZXJ5UGFyYW1zLFxyXG4gICAgUmVzLFxyXG4gICAgVXBsb2FkZWRGaWxlXHJcbn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtJQXNzZXR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtBc3NldEltYWdlUGFyYW1zfSBmcm9tIFwiLi4vcmVxdWVzdHMvYXNzZXQtaW1hZ2UtcGFyYW1zXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBDb250cm9sbGVyKFwiL2Fzc2V0c1wiKVxyXG5leHBvcnQgY2xhc3MgQXNzZXRzQ29udHJvbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgYXNzZXRzOiBBc3NldHMsIHJlYWRvbmx5IGFzc2V0UmVzb2x2ZXI6IEFzc2V0UmVzb2x2ZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgQEF1dGhvcml6ZWQoKVxyXG4gICAgQFBvc3QoXCJcIilcclxuICAgIGFzeW5jIHVwbG9hZChAVXBsb2FkZWRGaWxlKFwiZmlsZVwiKSBmaWxlOiBFeHByZXNzLk11bHRlci5GaWxlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBmaWxlLm1pbWV0eXBlID09PSBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiID8gbnVsbCA6IGZpbGUubWltZXR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5hc3NldHMud3JpdGVCdWZmZXIoZmlsZS5idWZmZXIsIHtmaWxlbmFtZTogZmlsZS5maWxlbmFtZX0sIGNvbnRlbnRUeXBlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFzc2V0LnRvSlNPTigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gZT8ubWVzc2FnZSB8fCBlIHx8IFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMCwgYEFzc2V0IGNhbid0IGJlIHVwbG9hZGVkLlxcbiR7bXNnfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAQXV0aG9yaXplZCgpXHJcbiAgICBAUG9zdChcInVybFwiKVxyXG4gICAgYXN5bmMgdXBsb2FkVXJsKEBCb2R5KCkgYm9keTogYW55KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmFzc2V0cy53cml0ZVVybChib2R5LnVybCwgYm9keSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhc3NldC50b0pTT04oKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGU/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