@stemy/backend 5.2.2 → 6.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 (139) hide show
  1. package/commands/clear-command.d.ts +6 -6
  2. package/commands/fixtures-command.d.ts +9 -9
  3. package/commands/index.d.ts +2 -2
  4. package/common-types.d.ts +325 -326
  5. package/esm2022/commands/clear-command.mjs +15 -0
  6. package/esm2022/commands/fixtures-command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +7 -0
  8. package/esm2022/common-types.mjs +26 -0
  9. package/esm2022/fixtures/index.mjs +5 -0
  10. package/esm2022/fixtures/ttl.fixture.mjs +23 -0
  11. package/esm2022/public_api.mjs +378 -0
  12. package/esm2022/requests/asset-image-params.mjs +60 -0
  13. package/esm2022/rest-controllers/assets.controller.mjs +177 -0
  14. package/esm2022/rest-controllers/auth.controller.mjs +57 -0
  15. package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
  16. package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
  17. package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
  18. package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
  19. package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
  20. package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
  21. package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
  22. package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
  23. package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
  24. package/esm2022/services/asset-processor.mjs +90 -0
  25. package/esm2022/services/asset-resolver.mjs +36 -0
  26. package/esm2022/services/assets.mjs +154 -0
  27. package/esm2022/services/backend-provider.mjs +83 -0
  28. package/esm2022/services/cache-processor.mjs +16 -0
  29. package/esm2022/services/cache.mjs +70 -0
  30. package/esm2022/services/configuration.mjs +68 -0
  31. package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
  32. package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
  33. package/esm2022/services/endpoint-provider.mjs +13 -0
  34. package/esm2022/services/entities/asset.mjs +61 -0
  35. package/esm2022/services/entities/base-entity.mjs +32 -0
  36. package/esm2022/services/entities/lazy-asset.mjs +87 -0
  37. package/esm2022/services/entities/progress.mjs +182 -0
  38. package/esm2022/services/entities/temp-asset.mjs +53 -0
  39. package/esm2022/services/fixtures.mjs +38 -0
  40. package/esm2022/services/gallery-cache.mjs +29 -0
  41. package/esm2022/services/gallery-image.mjs +42 -0
  42. package/esm2022/services/gallery.mjs +124 -0
  43. package/esm2022/services/id-generator.mjs +49 -0
  44. package/esm2022/services/job-manager.mjs +198 -0
  45. package/esm2022/services/lazy-assets.mjs +68 -0
  46. package/esm2022/services/logger.mjs +26 -0
  47. package/esm2022/services/mail-sender.mjs +42 -0
  48. package/esm2022/services/memory-cache.mjs +61 -0
  49. package/esm2022/services/mongo-connector.mjs +36 -0
  50. package/esm2022/services/open-api.mjs +124 -0
  51. package/esm2022/services/progresses.mjs +93 -0
  52. package/esm2022/services/template-renderer.mjs +71 -0
  53. package/esm2022/services/terminal-manager.mjs +88 -0
  54. package/esm2022/services/token-generator.mjs +37 -0
  55. package/esm2022/services/translation-provider.mjs +39 -0
  56. package/esm2022/services/translator.mjs +67 -0
  57. package/esm2022/services/user-manager.mjs +27 -0
  58. package/esm2022/socket-controllers/progress.controller.mjs +63 -0
  59. package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
  60. package/esm2022/socket-controllers/terminal.mjs +89 -0
  61. package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
  62. package/esm2022/static.mjs +23 -0
  63. package/esm2022/stemy-backend.mjs +5 -0
  64. package/esm2022/utilities/base-doc.mjs +33 -0
  65. package/esm2022/utilities/decorators.mjs +51 -0
  66. package/esm2022/utilities/di-container.mjs +88 -0
  67. package/esm2022/utilities/empty-job.mjs +13 -0
  68. package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
  69. package/esm2022/utilities/mongoose.mjs +216 -0
  70. package/esm2022/utilities/tree.mjs +119 -0
  71. package/esm2022/utils.mjs +726 -0
  72. package/esm2022/validators.mjs +46 -0
  73. package/fesm2022/stemy-backend.mjs +4690 -0
  74. package/fesm2022/stemy-backend.mjs.map +1 -0
  75. package/fixtures/index.d.ts +2 -2
  76. package/fixtures/ttl.fixture.d.ts +7 -7
  77. package/index.d.ts +5 -5
  78. package/package.json +43 -49
  79. package/public_api.d.ts +44 -44
  80. package/requests/asset-image-params.d.ts +12 -12
  81. package/rest-controllers/assets.controller.d.ts +25 -27
  82. package/rest-controllers/auth.controller.d.ts +14 -14
  83. package/rest-controllers/gallery.controller.d.ts +6 -7
  84. package/rest-controllers/progresses.controller.d.ts +9 -9
  85. package/rest-controllers/terminal-styles.d.ts +2 -2
  86. package/rest-controllers/terminal.controller.d.ts +10 -10
  87. package/rest-middlewares/container.middleware.d.ts +8 -8
  88. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  89. package/rest-middlewares/language.middleware.d.ts +8 -8
  90. package/rest-middlewares/request-ended.middleware.d.ts +8 -8
  91. package/rest-middlewares/request-started.middleware.d.ts +8 -8
  92. package/services/asset-processor.d.ts +10 -11
  93. package/services/asset-resolver.d.ts +10 -10
  94. package/services/assets.d.ts +24 -26
  95. package/services/backend-provider.d.ts +19 -20
  96. package/services/cache-processor.d.ts +4 -4
  97. package/services/cache.d.ts +23 -23
  98. package/services/configuration.d.ts +15 -15
  99. package/services/drivers/asset-grid.driver.d.ts +11 -11
  100. package/services/drivers/asset-local.driver.d.ts +10 -11
  101. package/services/endpoint-provider.d.ts +4 -4
  102. package/services/entities/asset.d.ts +19 -21
  103. package/services/entities/base-entity.d.ts +13 -13
  104. package/services/entities/lazy-asset.d.ts +25 -25
  105. package/services/entities/progress.d.ts +49 -49
  106. package/services/entities/temp-asset.d.ts +20 -22
  107. package/services/fixtures.d.ts +8 -8
  108. package/services/gallery-cache.d.ts +8 -9
  109. package/services/gallery-image.d.ts +10 -11
  110. package/services/gallery.d.ts +13 -13
  111. package/services/id-generator.d.ts +11 -11
  112. package/services/job-manager.d.ts +35 -35
  113. package/services/lazy-assets.d.ts +22 -22
  114. package/services/logger.d.ts +8 -8
  115. package/services/mail-sender.d.ts +20 -20
  116. package/services/memory-cache.d.ts +10 -10
  117. package/services/mongo-connector.d.ts +12 -12
  118. package/services/open-api.d.ts +13 -13
  119. package/services/progresses.d.ts +20 -20
  120. package/services/template-renderer.d.ts +14 -14
  121. package/services/terminal-manager.d.ts +15 -15
  122. package/services/token-generator.d.ts +6 -6
  123. package/services/translation-provider.d.ts +9 -9
  124. package/services/translator.d.ts +15 -15
  125. package/services/user-manager.d.ts +6 -6
  126. package/socket-controllers/progress.controller.d.ts +10 -10
  127. package/socket-controllers/terminal.controller.d.ts +13 -13
  128. package/socket-controllers/terminal.d.ts +19 -20
  129. package/socket-middlewares/compression.middleware.d.ts +4 -4
  130. package/static.d.ts +2 -2
  131. package/utilities/base-doc.d.ts +40 -40
  132. package/utilities/decorators.d.ts +10 -10
  133. package/utilities/di-container.d.ts +43 -43
  134. package/utilities/empty-job.d.ts +4 -4
  135. package/utilities/lazy-asset-generator.d.ts +15 -15
  136. package/utilities/mongoose.d.ts +36 -36
  137. package/utilities/tree.d.ts +15 -15
  138. package/utils.d.ts +120 -123
  139. package/validators.d.ts +7 -7
@@ -0,0 +1,177 @@
1
+ import { __decorate, __metadata, __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
+ import { Assets } from "../services/assets";
5
+ import { AssetResolver } from "../services/asset-resolver";
6
+ import { AssetImageParams } from "../requests/asset-image-params";
7
+ let AssetsController = class AssetsController {
8
+ assets;
9
+ assetResolver;
10
+ constructor(assets, assetResolver) {
11
+ this.assets = assets;
12
+ this.assetResolver = assetResolver;
13
+ }
14
+ async upload(file) {
15
+ try {
16
+ const contentType = file.mimetype === "application/octet-stream" ? null : file.mimetype;
17
+ const asset = await this.assets.writeBuffer(file.buffer, { filename: file.filename }, contentType);
18
+ return asset.toJSON();
19
+ }
20
+ catch (e) {
21
+ const msg = e?.message || e || "Unknown error";
22
+ throw new HttpError(400, `Asset can't be uploaded.\n${msg}`);
23
+ }
24
+ }
25
+ async uploadUrl(body) {
26
+ try {
27
+ const asset = await this.assets.writeUrl(body.url, body);
28
+ return asset.toJSON();
29
+ }
30
+ catch (e) {
31
+ const msg = e?.message || e || "Unknown error";
32
+ throw new HttpError(400, `Asset can't be uploaded.\n${msg}`);
33
+ }
34
+ }
35
+ async getFile(id, lazy, res) {
36
+ const asset = await this.getAsset("Asset", id, lazy, res);
37
+ return asset.download();
38
+ }
39
+ async getMetadata(id, lazy, res) {
40
+ const asset = await this.assetResolver.resolve(id, lazy);
41
+ if (!asset) {
42
+ throw new HttpError(404, `Asset with id: '${id}' not found.`);
43
+ }
44
+ return asset.metadata;
45
+ }
46
+ async getImageRotation(id, params, res, rotation = 0) {
47
+ const asset = await this.getAsset("Image", id, params.lazy, res);
48
+ if (rotation !== 0) {
49
+ params.rotation = params.rotation || rotation;
50
+ }
51
+ return asset.downloadImage(params);
52
+ }
53
+ async getImage(id, params, res) {
54
+ return this.getImageRotation(id, params, res);
55
+ }
56
+ async getFileByName(name, res) {
57
+ const asset = await this.getAssetByName("Asset", name, res);
58
+ return asset.download();
59
+ }
60
+ async getImageByName(name, params, res) {
61
+ const asset = await this.getAssetByName("Image", name, res);
62
+ return asset.downloadImage(params);
63
+ }
64
+ setAssetHeaders(asset, res) {
65
+ const ext = asset.metadata?.extension;
66
+ if (ext) {
67
+ res.header("content-disposition", `inline; filename=${asset.filename}.${ext}`);
68
+ }
69
+ if (asset.contentType) {
70
+ res.header("content-type", asset.contentType);
71
+ }
72
+ }
73
+ async getAsset(type, id, lazy, res) {
74
+ let asset = await this.assetResolver.resolve(id, lazy);
75
+ if (!asset) {
76
+ throw new HttpError(404, `${type} with id: '${id}' not found.`);
77
+ }
78
+ asset = await this.resolveFinalAsset(type, asset);
79
+ this.setAssetHeaders(asset, res);
80
+ return asset;
81
+ }
82
+ async getAssetByName(type, filename, res) {
83
+ let asset = await this.assets.find({ filename });
84
+ if (!asset) {
85
+ throw new HttpError(404, `${type} with filename: '${filename}' not found.`);
86
+ }
87
+ asset = await this.resolveFinalAsset(type, asset);
88
+ this.setAssetHeaders(asset, res);
89
+ return asset;
90
+ }
91
+ async resolveFinalAsset(type, asset) {
92
+ if (asset.metadata?.classified) {
93
+ throw new HttpError(403, `${type} is classified, and can be only downloaded from a custom url.`);
94
+ }
95
+ if (type == 'Image' && asset.metadata.preview) {
96
+ return this.resolveFinalAsset(type, await this.assetResolver.resolve(asset.metadata.preview));
97
+ }
98
+ return asset;
99
+ }
100
+ };
101
+ __decorate([
102
+ Authorized(),
103
+ Post(""),
104
+ __param(0, UploadedFile("file")),
105
+ __metadata("design:type", Function),
106
+ __metadata("design:paramtypes", [Object]),
107
+ __metadata("design:returntype", Promise)
108
+ ], AssetsController.prototype, "upload", null);
109
+ __decorate([
110
+ Authorized(),
111
+ Post("url"),
112
+ __param(0, Body()),
113
+ __metadata("design:type", Function),
114
+ __metadata("design:paramtypes", [Object]),
115
+ __metadata("design:returntype", Promise)
116
+ ], AssetsController.prototype, "uploadUrl", null);
117
+ __decorate([
118
+ Get("/:id"),
119
+ __param(0, Param("id")),
120
+ __param(1, QueryParam("lazy")),
121
+ __param(2, Res()),
122
+ __metadata("design:type", Function),
123
+ __metadata("design:paramtypes", [String, Boolean, Object]),
124
+ __metadata("design:returntype", Promise)
125
+ ], AssetsController.prototype, "getFile", null);
126
+ __decorate([
127
+ Get("/metadata/:id"),
128
+ __param(0, Param("id")),
129
+ __param(1, QueryParam("lazy")),
130
+ __param(2, Res()),
131
+ __metadata("design:type", Function),
132
+ __metadata("design:paramtypes", [String, Boolean, Object]),
133
+ __metadata("design:returntype", Promise)
134
+ ], AssetsController.prototype, "getMetadata", null);
135
+ __decorate([
136
+ Get("/image/:id/:rotation"),
137
+ __param(0, Param("id")),
138
+ __param(1, QueryParams()),
139
+ __param(2, Res()),
140
+ __param(3, Param("rotation")),
141
+ __metadata("design:type", Function),
142
+ __metadata("design:paramtypes", [String, AssetImageParams, Object, Number]),
143
+ __metadata("design:returntype", Promise)
144
+ ], AssetsController.prototype, "getImageRotation", null);
145
+ __decorate([
146
+ Get("/image/:id"),
147
+ __param(0, Param("id")),
148
+ __param(1, QueryParams()),
149
+ __param(2, Res()),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [String, AssetImageParams, Object]),
152
+ __metadata("design:returntype", Promise)
153
+ ], AssetsController.prototype, "getImage", null);
154
+ __decorate([
155
+ Get("/by-name/:name"),
156
+ __param(0, Param("name")),
157
+ __param(1, Res()),
158
+ __metadata("design:type", Function),
159
+ __metadata("design:paramtypes", [String, Object]),
160
+ __metadata("design:returntype", Promise)
161
+ ], AssetsController.prototype, "getFileByName", null);
162
+ __decorate([
163
+ Get("/by-name/image/:name"),
164
+ __param(0, Param("name")),
165
+ __param(1, QueryParams()),
166
+ __param(2, Res()),
167
+ __metadata("design:type", Function),
168
+ __metadata("design:paramtypes", [String, AssetImageParams, Object]),
169
+ __metadata("design:returntype", Promise)
170
+ ], AssetsController.prototype, "getImageByName", null);
171
+ AssetsController = __decorate([
172
+ injectable(),
173
+ Controller("/assets"),
174
+ __metadata("design:paramtypes", [Assets, AssetResolver])
175
+ ], AssetsController);
176
+ export { AssetsController };
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsR0FBRyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFVBQVUsRUFDVixXQUFXLEVBQ1gsR0FBRyxFQUNILFlBQVksRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFNekQsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFFSjtJQUF5QjtJQUE5QyxZQUFxQixNQUFjLEVBQVcsYUFBNEI7UUFBckQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFXLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBRTFFLENBQUM7SUFJSyxBQUFOLEtBQUssQ0FBQyxNQUFNLENBQXVCLElBQXlCO1FBQ3hELElBQUksQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sS0FB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge1Jlc3BvbnNlfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0aG9yaXplZCxcclxuICAgIEJvZHksXHJcbiAgICBDb250cm9sbGVyLFxyXG4gICAgR2V0LFxyXG4gICAgSHR0cEVycm9yLFxyXG4gICAgUGFyYW0sXHJcbiAgICBQb3N0LFxyXG4gICAgUXVlcnlQYXJhbSxcclxuICAgIFF1ZXJ5UGFyYW1zLFxyXG4gICAgUmVzLFxyXG4gICAgVXBsb2FkZWRGaWxlXHJcbn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtJQXNzZXR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtBc3NldEltYWdlUGFyYW1zfSBmcm9tIFwiLi4vcmVxdWVzdHMvYXNzZXQtaW1hZ2UtcGFyYW1zXCI7XHJcblxyXG50eXBlIEFzc2V0UmVxVHlwZSA9ICdJbWFnZScgfCAnQXNzZXQnO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5AQ29udHJvbGxlcihcIi9hc3NldHNcIilcclxuZXhwb3J0IGNsYXNzIEFzc2V0c0NvbnRyb2xsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGFzc2V0czogQXNzZXRzLCByZWFkb25seSBhc3NldFJlc29sdmVyOiBBc3NldFJlc29sdmVyKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIEBBdXRob3JpemVkKClcclxuICAgIEBQb3N0KFwiXCIpXHJcbiAgICBhc3luYyB1cGxvYWQoQFVwbG9hZGVkRmlsZShcImZpbGVcIikgZmlsZTogRXhwcmVzcy5NdWx0ZXIuRmlsZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZmlsZS5taW1ldHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIiA/IG51bGwgOiBmaWxlLm1pbWV0eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMuYXNzZXRzLndyaXRlQnVmZmVyKGZpbGUuYnVmZmVyLCB7ZmlsZW5hbWU6IGZpbGUuZmlsZW5hbWV9LCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhc3NldC50b0pTT04oKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGU/Lm1lc3NhZ2UgfHwgZSB8fCBcIlVua25vd24gZXJyb3JcIjtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDAsIGBBc3NldCBjYW4ndCBiZSB1cGxvYWRlZC5cXG4ke21zZ31gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEF1dGhvcml6ZWQoKVxyXG4gICAgQFBvc3QoXCJ1cmxcIilcclxuICAgIGFzeW5jIHVwbG9hZFVybChAQm9keSgpIGJvZHk6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5hc3NldHMud3JpdGVVcmwoYm9keS51cmwsIGJvZHkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYXNzZXQudG9KU09OKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBlPy5tZXNzYWdlIHx8IGUgfHwgXCJVbmtub3duIGVycm9yXCI7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAwLCBgQXNzZXQgY2FuJ3QgYmUgdXBsb2FkZWQuXFxuJHttc2d9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoXCIvOmlkXCIpXHJcbiAgICBhc3luYyBnZXRGaWxlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcsIEBRdWVyeVBhcmFtKFwibGF6eVwiKSBsYXp5OiBib29sZWFuLCBAUmVzKCkgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMuZ2V0QXNzZXQoXCJBc3NldFwiLCBpZCwgbGF6eSwgcmVzKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQuZG93bmxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiL21ldGFkYXRhLzppZFwiKVxyXG4gICAgYXN5bmMgZ2V0TWV0YWRhdGEoQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgQFF1ZXJ5UGFyYW0oXCJsYXp5XCIpIGxhenk6IGJvb2xlYW4sIEBSZXMoKSByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMuYXNzZXRSZXNvbHZlci5yZXNvbHZlKGlkLCBsYXp5KTtcclxuICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDA0LCBgQXNzZXQgd2l0aCBpZDogJyR7aWR9JyBub3QgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldC5tZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiL2ltYWdlLzppZC86cm90YXRpb25cIilcclxuICAgIGFzeW5jIGdldEltYWdlUm90YXRpb24oQFBhcmFtKFwiaWRcIikgaWQ6IHN0cmluZywgQFF1ZXJ5UGFyYW1zKCkgcGFyYW1zOiBBc3NldEltYWdlUGFyYW1zLCBAUmVzKCkgcmVzOiBSZXNwb25zZSwgQFBhcmFtKFwicm90YXRpb25cIikgcm90YXRpb246IG51bWJlciA9IDApOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmdldEFzc2V0KFwiSW1hZ2VcIiwgaWQsIHBhcmFtcy5sYXp5LCByZXMpO1xyXG4gICAgICAgIGlmIChyb3RhdGlvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICBwYXJhbXMucm90YXRpb24gPSBwYXJhbXMucm90YXRpb24gfHwgcm90YXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldC5kb3dubG9hZEltYWdlKHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgQEdldChcIi9pbWFnZS86aWRcIilcclxuICAgIGFzeW5jIGdldEltYWdlKEBQYXJhbShcImlkXCIpIGlkOiBzdHJpbmcsIEBRdWVyeVBhcmFtcygpIHBhcmFtczogQXNzZXRJbWFnZVBhcmFtcywgQFJlcygpIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VSb3RhdGlvbihpZCwgcGFyYW1zLCByZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoXCIvYnktbmFtZS86bmFtZVwiKVxyXG4gICAgYXN5bmMgZ2V0RmlsZUJ5TmFtZShAUGFyYW0oXCJuYW1lXCIpIG5hbWU6IHN0cmluZywgQFJlcygpIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmdldEFzc2V0QnlOYW1lKFwiQXNzZXRcIiwgbmFtZSwgcmVzKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQuZG93bmxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBAR2V0KFwiL2J5LW5hbWUvaW1hZ2UvOm5hbWVcIilcclxuICAgIGFzeW5jIGdldEltYWdlQnlOYW1lKEBQYXJhbShcIm5hbWVcIikgbmFtZTogc3RyaW5nLCBAUXVlcnlQYXJhbXMoKSBwYXJhbXM6IEFzc2V0SW1hZ2VQYXJhbXMsIEBSZXMoKSByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5nZXRBc3NldEJ5TmFtZShcIkltYWdlXCIsIG5hbWUsIHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0LmRvd25sb2FkSW1hZ2UocGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0QXNzZXRIZWFkZXJzKGFzc2V0OiBJQXNzZXQsIHJlczogUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBleHQgPSBhc3NldC5tZXRhZGF0YT8uZXh0ZW5zaW9uO1xyXG4gICAgICAgIGlmIChleHQpIHtcclxuICAgICAgICAgICAgcmVzLmhlYWRlcihcImNvbnRlbnQtZGlzcG9zaXRpb25cIiwgYGlubGluZTsgZmlsZW5hbWU9JHthc3NldC5maWxlbmFtZX0uJHtleHR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhc3NldC5jb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICByZXMuaGVhZGVyKFwiY29udGVudC10eXBlXCIsIGFzc2V0LmNvbnRlbnRUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEFzc2V0KHR5cGU6IEFzc2V0UmVxVHlwZSwgaWQ6IHN0cmluZywgbGF6eTogYm9vbGVhbiwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgbGV0IGFzc2V0ID0gYXdhaXQgdGhpcy5hc3NldFJlc29sdmVyLnJlc29sdmUoaWQsIGxhenkpO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsIGAke3R5cGV9IHdpdGggaWQ6ICcke2lkfScgbm90IGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhc3NldCA9IGF3YWl0IHRoaXMucmVzb2x2ZUZpbmFsQXNzZXQodHlwZSwgYXNzZXQpO1xyXG4gICAgICAgIHRoaXMuc2V0QXNzZXRIZWFkZXJzKGFzc2V0LCByZXMpO1xyXG4gICAgICAgIHJldHVybiBhc3NldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QXNzZXRCeU5hbWUodHlwZTogQXNzZXRSZXFUeXBlLCBmaWxlbmFtZTogc3RyaW5nLCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTxJQXNzZXQ+IHtcclxuICAgICAgICBsZXQgYXNzZXQgPSBhd2FpdCB0aGlzLmFzc2V0cy5maW5kKHtmaWxlbmFtZX0pO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDQsIGAke3R5cGV9IHdpdGggZmlsZW5hbWU6ICcke2ZpbGVuYW1lfScgbm90IGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhc3NldCA9IGF3YWl0IHRoaXMucmVzb2x2ZUZpbmFsQXNzZXQodHlwZSwgYXNzZXQpO1xyXG4gICAgICAgIHRoaXMuc2V0QXNzZXRIZWFkZXJzKGFzc2V0LCByZXMpO1xyXG4gICAgICAgIHJldHVybiBhc3NldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVzb2x2ZUZpbmFsQXNzZXQodHlwZTogQXNzZXRSZXFUeXBlLCBhc3NldDogSUFzc2V0KTogUHJvbWlzZTxJQXNzZXQ+IHtcclxuICAgICAgICBpZiAoYXNzZXQubWV0YWRhdGE/LmNsYXNzaWZpZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDMsIGAke3R5cGV9IGlzIGNsYXNzaWZpZWQsIGFuZCBjYW4gYmUgb25seSBkb3dubG9hZGVkIGZyb20gYSBjdXN0b20gdXJsLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PSAnSW1hZ2UnICYmIGFzc2V0Lm1ldGFkYXRhLnByZXZpZXcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZpbmFsQXNzZXQodHlwZSwgYXdhaXQgdGhpcy5hc3NldFJlc29sdmVyLnJlc29sdmUoYXNzZXQubWV0YWRhdGEucHJldmlldykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXQ7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,57 @@
1
+ import { __decorate, __metadata, __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
+ import { Configuration } from "../services/configuration";
7
+ import { UserManager } from "../services/user-manager";
8
+ let AuthController = class AuthController {
9
+ config;
10
+ userManager;
11
+ constructor(config, userManager) {
12
+ this.config = config;
13
+ this.userManager = userManager;
14
+ }
15
+ async login(credentials, res) {
16
+ let user = null;
17
+ try {
18
+ user = await this.userManager.getByCredentials(credentials);
19
+ }
20
+ catch (reason) {
21
+ throw new HttpError(401, reason);
22
+ }
23
+ const valid = !user ? false : await compare(credentials.password, user.password);
24
+ if (valid !== true)
25
+ throw new UnauthorizedError(`message.login.error`);
26
+ return {
27
+ token: webToken.sign({ id: user._id || user.id }, this.config.resolve("jwtSecret")),
28
+ user: await this.userManager.serialize(user)
29
+ };
30
+ }
31
+ getProfile(user) {
32
+ return this.userManager.serialize(user);
33
+ }
34
+ };
35
+ __decorate([
36
+ Post("/login"),
37
+ __param(0, Body()),
38
+ __param(1, Res()),
39
+ __metadata("design:type", Function),
40
+ __metadata("design:paramtypes", [Object, Object]),
41
+ __metadata("design:returntype", Promise)
42
+ ], AuthController.prototype, "login", null);
43
+ __decorate([
44
+ Authorized(),
45
+ Get("/user"),
46
+ __param(0, CurrentUser()),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", [Object]),
49
+ __metadata("design:returntype", void 0)
50
+ ], AuthController.prototype, "getProfile", null);
51
+ AuthController = __decorate([
52
+ injectable(),
53
+ Controller(),
54
+ __metadata("design:paramtypes", [Configuration, UserManager])
55
+ ], AuthController);
56
+ export { AuthController };
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvYXV0aC5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLFFBQVEsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsV0FBVyxFQUNYLEdBQUcsRUFDSCxTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSCxpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRS9CLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFLOUMsSUFBTSxjQUFjLEdBQXBCLE1BQU0sY0FBYztJQUVGO0lBQWdDO0lBQXJELFlBQXFCLE1BQXFCLEVBQVcsV0FBd0I7UUFBeEQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFXLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUczRSxBQUFOLEtBQUssQ0FBQyxLQUFLLENBQVMsV0FBZ0IsRUFBUyxHQUFhO1FBQ3RELElBQUksSUFBSSxHQUFVLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUM7WUFDRCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLElBQUksS0FBSyxLQUFLLElBQUk7WUFDZCxNQUFNLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN2RCxPQUFPO1lBQ0gsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkYsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQy9DLENBQUM7SUFDTixDQUFDO0lBSUQsVUFBVSxDQUFnQixJQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNKLENBQUE7QUFyQlM7SUFETCxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ0YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtJQUFvQixXQUFBLEdBQUcsRUFBRSxDQUFBOzs7OzJDQWMzQztBQUlEO0lBRkMsVUFBVSxFQUFFO0lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNELFdBQUEsV0FBVyxFQUFFLENBQUE7Ozs7Z0RBRXhCO0FBekJRLGNBQWM7SUFGMUIsVUFBVSxFQUFFO0lBQ1osVUFBVSxFQUFFO3FDQUdvQixhQUFhLEVBQXdCLFdBQVc7R0FGcEUsY0FBYyxDQTBCMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Jlc3BvbnNlfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQgd2ViVG9rZW4gZnJvbSBcImpzb253ZWJ0b2tlblwiO1xyXG5pbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0aG9yaXplZCxcclxuICAgIEJvZHksXHJcbiAgICBDb250cm9sbGVyLFxyXG4gICAgQ3VycmVudFVzZXIsXHJcbiAgICBHZXQsXHJcbiAgICBIdHRwRXJyb3IsXHJcbiAgICBQb3N0LFxyXG4gICAgUmVzLFxyXG4gICAgVW5hdXRob3JpemVkRXJyb3JcclxufSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge2NvbXBhcmV9IGZyb20gXCJiY3J5cHRcIjtcclxuXHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtVc2VyTWFuYWdlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL3VzZXItbWFuYWdlclwiO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBDb250cm9sbGVyKClcclxuZXhwb3J0IGNsYXNzIEF1dGhDb250cm9sbGVyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sIHJlYWRvbmx5IHVzZXJNYW5hZ2VyOiBVc2VyTWFuYWdlcikge31cclxuXHJcbiAgICBAUG9zdChcIi9sb2dpblwiKVxyXG4gICAgYXN5bmMgbG9naW4oQEJvZHkoKSBjcmVkZW50aWFsczogYW55LCBAUmVzKCkgcmVzOiBSZXNwb25zZSkge1xyXG4gICAgICAgIGxldCB1c2VyOiBJVXNlciA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdXNlciA9IGF3YWl0IHRoaXMudXNlck1hbmFnZXIuZ2V0QnlDcmVkZW50aWFscyhjcmVkZW50aWFscyk7XHJcbiAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCByZWFzb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWxpZCA9ICF1c2VyID8gZmFsc2UgOiBhd2FpdCBjb21wYXJlKGNyZWRlbnRpYWxzLnBhc3N3b3JkLCB1c2VyLnBhc3N3b3JkKTtcclxuICAgICAgICBpZiAodmFsaWQgIT09IHRydWUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBVbmF1dGhvcml6ZWRFcnJvcihgbWVzc2FnZS5sb2dpbi5lcnJvcmApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRva2VuOiB3ZWJUb2tlbi5zaWduKHsgaWQ6IHVzZXIuX2lkIHx8IHVzZXIuaWQgfSwgdGhpcy5jb25maWcucmVzb2x2ZShcImp3dFNlY3JldFwiKSksXHJcbiAgICAgICAgICAgIHVzZXI6IGF3YWl0IHRoaXMudXNlck1hbmFnZXIuc2VyaWFsaXplKHVzZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBAQXV0aG9yaXplZCgpXHJcbiAgICBAR2V0KFwiL3VzZXJcIilcclxuICAgIGdldFByb2ZpbGUoQEN1cnJlbnRVc2VyKCkgdXNlcjogSVVzZXIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyTWFuYWdlci5zZXJpYWxpemUodXNlcik7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,27 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Controller, Get, Param } from "routing-controllers";
4
+ import { GalleryCache } from "../services/gallery-cache";
5
+ let GalleryController = class GalleryController {
6
+ galleryCache;
7
+ constructor(galleryCache) {
8
+ this.galleryCache = galleryCache;
9
+ }
10
+ getFile(id) {
11
+ return this.galleryCache.serve(id);
12
+ }
13
+ };
14
+ __decorate([
15
+ Get("/:id"),
16
+ __param(0, Param("id")),
17
+ __metadata("design:type", Function),
18
+ __metadata("design:paramtypes", [String]),
19
+ __metadata("design:returntype", void 0)
20
+ ], GalleryController.prototype, "getFile", null);
21
+ GalleryController = __decorate([
22
+ injectable(),
23
+ Controller("/gallery"),
24
+ __metadata("design:paramtypes", [GalleryCache])
25
+ ], GalleryController);
26
+ export { GalleryController };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvZ2FsbGVyeS5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUloRCxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUVMO0lBQXJCLFlBQXFCLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQUksQ0FBQztJQUdwRCxPQUFPLENBQWMsRUFBVTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDSixDQUFBO0FBSEc7SUFEQyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ0gsV0FBQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Ozs7Z0RBRW5CO0FBUFEsaUJBQWlCO0lBRjdCLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUNBR2dCLFlBQVk7R0FGdEMsaUJBQWlCLENBUTdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb250cm9sbGVyLCBHZXQsIFBhcmFtfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0dhbGxlcnlDYWNoZX0gZnJvbSBcIi4uL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQENvbnRyb2xsZXIoXCIvZ2FsbGVyeVwiKVxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeUNvbnRyb2xsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGdhbGxlcnlDYWNoZTogR2FsbGVyeUNhY2hlKSB7IH1cclxuXHJcbiAgICBAR2V0KFwiLzppZFwiKVxyXG4gICAgZ2V0RmlsZShAUGFyYW0oXCJpZFwiKSBpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2FsbGVyeUNhY2hlLnNlcnZlKGlkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Controller, Get, Param } from "routing-controllers";
4
+ import { Progresses } from "../services/progresses";
5
+ import { Configuration } from "../services/configuration";
6
+ let ProgressesController = class ProgressesController {
7
+ progresses;
8
+ config;
9
+ connectionType;
10
+ constructor(progresses, config) {
11
+ this.progresses = progresses;
12
+ this.config = config;
13
+ const mainEndpoint = this.config.resolve("mainEndpoint");
14
+ this.connectionType = !mainEndpoint ? "polling" : "socket";
15
+ }
16
+ async getProgress(id) {
17
+ const progress = await this.progresses.get(id);
18
+ if (!progress)
19
+ return null;
20
+ const json = progress.toJSON();
21
+ json.connectionType = this.connectionType;
22
+ return json;
23
+ }
24
+ };
25
+ __decorate([
26
+ Get("/:id"),
27
+ __param(0, Param("id")),
28
+ __metadata("design:type", Function),
29
+ __metadata("design:paramtypes", [String]),
30
+ __metadata("design:returntype", Promise)
31
+ ], ProgressesController.prototype, "getProgress", null);
32
+ ProgressesController = __decorate([
33
+ injectable(),
34
+ Controller("/progresses"),
35
+ __metadata("design:paramtypes", [Progresses, Configuration])
36
+ ], ProgressesController);
37
+ export { ProgressesController };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtY29udHJvbGxlcnMvcHJvZ3Jlc3Nlcy5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJakQsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBb0I7SUFJUjtJQUFpQztJQUY1QyxjQUFjLENBQVM7SUFFakMsWUFBcUIsVUFBc0IsRUFBVyxNQUFxQjtRQUF0RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMvRCxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsV0FBVyxDQUFjLEVBQVU7UUFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUE7QUFQUztJQURMLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDTyxXQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTs7Ozt1REFNN0I7QUFoQlEsb0JBQW9CO0lBRmhDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxhQUFhLENBQUM7cUNBS1csVUFBVSxFQUFtQixhQUFhO0dBSmxFLG9CQUFvQixDQWlCaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0NvbnRyb2xsZXIsIEdldCwgUGFyYW19IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4uL3NlcnZpY2VzL3Byb2dyZXNzZXNcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5AQ29udHJvbGxlcihcIi9wcm9ncmVzc2VzXCIpXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc2VzQ29udHJvbGxlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgbWFpbkVuZHBvaW50ID0gdGhpcy5jb25maWcucmVzb2x2ZShcIm1haW5FbmRwb2ludFwiKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gIW1haW5FbmRwb2ludCA/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,132 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Controller, Get, Header } from "routing-controllers";
4
+ import { Configuration } from "../services/configuration";
5
+ import styles from "./terminal-styles";
6
+ let TerminalController = class TerminalController {
7
+ config;
8
+ serviceName;
9
+ serviceUrl;
10
+ constructor(config) {
11
+ this.config = config;
12
+ this.serviceName = config.resolve("serviceName");
13
+ this.serviceUrl = config.resolve("serviceUrl");
14
+ }
15
+ terminal() {
16
+ return this.generateClient("terminal");
17
+ }
18
+ console() {
19
+ return this.generateClient("console");
20
+ }
21
+ generateClient(alias) {
22
+ return `
23
+ <!DOCTYPE html>
24
+ <html>
25
+ <head>
26
+ <meta charset="utf-8">
27
+ <title>${this.serviceName} ${alias}</title>
28
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.min.css"/>
29
+ <script type="text/javascript" src="${this.serviceUrl}/socket/socket.io.js"></script>
30
+ <style>
31
+ ${styles}
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div id="terminal"></div>
36
+ <script type="module">
37
+ // Import terminal modules
38
+ import xterm from 'https://cdn.jsdelivr.net/npm/xterm@5.1.0/+esm';
39
+ import xtermFit from 'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';
40
+ // Initialize variables
41
+ var terminal = new xterm.Terminal();
42
+ var fitAddon = new xtermFit.FitAddon();
43
+ var socket = io("${this.serviceUrl}", {path: "/socket"});
44
+ var clear = function () {
45
+ terminal.clear();
46
+ terminal.reset();
47
+ // Prev line
48
+ terminal.write("\u001B[F");
49
+ }
50
+ // Initialize terminal
51
+ terminal.loadAddon(fitAddon);
52
+ terminal.open(document.getElementById('terminal'));
53
+ terminal.onData(function (data) {
54
+ socket.emit("terminal-data", data.charCodeAt(0) === 127 ? "\b" : data);
55
+ });
56
+ // Socket listeners
57
+ socket.on("terminal-data", function (data) {
58
+ if (data === "\x1bc") {
59
+ clear();
60
+ return;
61
+ }
62
+ terminal.write(data);
63
+ });
64
+ socket.on("terminal-upload", function (data) {
65
+ var input = document.createElement("input");
66
+ input.type = "file";
67
+ input.accept = data.accept;
68
+ input.onchange = function () {
69
+ var file = input.files[0];
70
+ var reader = new FileReader();
71
+ reader.onload = function () {
72
+ socket.emit("terminal-upload", {
73
+ id: data.id,
74
+ label: file.name,
75
+ content: reader.result,
76
+ accept: data.accept
77
+ });
78
+ };
79
+ reader.onerror = function () {
80
+ socket.emit("terminal-upload", {
81
+ id: data.id,
82
+ label: file.name,
83
+ error: reader.error,
84
+ accept: data.accept
85
+ });
86
+ };
87
+ reader.readAsDataURL(file);
88
+ };
89
+ input.click();
90
+ });
91
+ socket.on("terminal-download", function (data) {
92
+ var link = document.createElement("a");
93
+ link.href = data.content;
94
+ link.download = data.filename;
95
+ link.click();
96
+ });
97
+ socket.on("connect", function () {
98
+ clear();
99
+ terminal.writeln("Welcome to ${this.serviceName} service's ${alias}!");
100
+ socket.emit("terminal-init");
101
+ });
102
+ socket.on("disconnect", function () {
103
+ clear();
104
+ terminal.writeln("Disconnected from ${this.serviceName} service's ${alias}.");
105
+ });
106
+ </script>
107
+ </body>
108
+ </html>
109
+ `;
110
+ }
111
+ };
112
+ __decorate([
113
+ Get("/terminal"),
114
+ Header("Content-Type", "text/html"),
115
+ __metadata("design:type", Function),
116
+ __metadata("design:paramtypes", []),
117
+ __metadata("design:returntype", void 0)
118
+ ], TerminalController.prototype, "terminal", null);
119
+ __decorate([
120
+ Get("/console"),
121
+ Header("Content-Type", "text/html"),
122
+ __metadata("design:type", Function),
123
+ __metadata("design:paramtypes", []),
124
+ __metadata("design:returntype", void 0)
125
+ ], TerminalController.prototype, "console", null);
126
+ TerminalController = __decorate([
127
+ injectable(),
128
+ Controller(),
129
+ __metadata("design:paramtypes", [Configuration])
130
+ ], TerminalController);
131
+ export { TerminalController };
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBSWhDLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBTU47SUFKWCxXQUFXLENBQVM7SUFFcEIsVUFBVSxDQUFTO0lBRTdCLFlBQXFCLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBSUQsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBSUQsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVMsY0FBYyxDQUFDLEtBQWE7UUFDbEMsT0FBTzs7Ozs7cUJBS00sSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLOztrREFFSSxJQUFJLENBQUMsVUFBVTs7a0JBRS9DLE1BQU07Ozs7Ozs7Ozs7OzttQ0FZVyxJQUFJLENBQUMsVUFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bURBd0RDLElBQUksQ0FBQyxXQUFXLGNBQWMsS0FBSzs7Ozs7MERBSzVCLElBQUksQ0FBQyxXQUFXLGNBQWMsS0FBSzs7Ozs7U0FLcEYsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFBO0FBcEdHO0lBRkMsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUNoQixNQUFNLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQzs7OztrREFHbkM7QUFJRDtJQUZDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDZixNQUFNLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQzs7OztpREFHbkM7QUFyQlEsa0JBQWtCO0lBRjlCLFVBQVUsRUFBRTtJQUNaLFVBQVUsRUFBRTtxQ0FPb0IsYUFBYTtHQU5qQyxrQkFBa0IsQ0FpSDlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb250cm9sbGVyLCBHZXQsIEhlYWRlcn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL3Rlcm1pbmFsLXN0eWxlc1wiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5AQ29udHJvbGxlcigpXHJcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbENvbnRyb2xsZXIge1xyXG5cclxuICAgIHByb3RlY3RlZCBzZXJ2aWNlTmFtZTogc3RyaW5nO1xyXG5cclxuICAgIHByb3RlY3RlZCBzZXJ2aWNlVXJsOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IGNvbmZpZy5yZXNvbHZlKFwic2VydmljZU5hbWVcIik7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJsID0gY29uZmlnLnJlc29sdmUoXCJzZXJ2aWNlVXJsXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIEBHZXQoXCIvdGVybWluYWxcIilcclxuICAgIEBIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIilcclxuICAgIHRlcm1pbmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2xpZW50KFwidGVybWluYWxcIik7XHJcbiAgICB9XHJcblxyXG4gICAgQEdldChcIi9jb25zb2xlXCIpXHJcbiAgICBASGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpXHJcbiAgICBjb25zb2xlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2xpZW50KFwiY29uc29sZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVDbGllbnQoYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGBcclxuICAgICAgICA8IURPQ1RZUEUgaHRtbD5cclxuICAgICAgICA8aHRtbD5cclxuICAgICAgICA8aGVhZD5cclxuICAgICAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XHJcbiAgICAgICAgICAgIDx0aXRsZT4ke3RoaXMuc2VydmljZU5hbWV9ICR7YWxpYXN9PC90aXRsZT5cclxuICAgICAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3h0ZXJtQDUuMS4wL2Nzcy94dGVybS5taW4uY3NzXCIvPlxyXG4gICAgICAgICAgICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIke3RoaXMuc2VydmljZVVybH0vc29ja2V0L3NvY2tldC5pby5qc1wiPjwvc2NyaXB0PlxyXG4gICAgICAgICAgICA8c3R5bGU+XHJcbiAgICAgICAgICAgICAgICAke3N0eWxlc31cclxuICAgICAgICAgICAgPC9zdHlsZT5cclxuICAgICAgICA8L2hlYWQ+XHJcbiAgICAgICAgPGJvZHk+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXJtaW5hbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cclxuICAgICAgICAgICAgICAgIC8vIEltcG9ydCB0ZXJtaW5hbCBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICBpbXBvcnQgeHRlcm0gZnJvbSAnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS94dGVybUA1LjEuMC8rZXNtJztcclxuICAgICAgICAgICAgICAgIGltcG9ydCB4dGVybUZpdCBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3h0ZXJtLWFkZG9uLWZpdEAwLjcuMC8rZXNtJztcclxuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdmFyaWFibGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWwgPSBuZXcgeHRlcm0uVGVybWluYWwoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaXRBZGRvbiA9IG5ldyB4dGVybUZpdC5GaXRBZGRvbigpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvY2tldCA9IGlvKFwiJHt0aGlzLnNlcnZpY2VVcmx9XCIsIHtwYXRoOiBcIi9zb2NrZXRcIn0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYWwucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQcmV2IGxpbmVcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC53cml0ZShcIlxcdTAwMUJbRlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGVybWluYWxcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsLmxvYWRBZGRvbihmaXRBZGRvbik7XHJcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbC5vcGVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXJtaW5hbCcpKTtcclxuICAgICAgICAgICAgICAgIHRlcm1pbmFsLm9uRGF0YShmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvY2tldC5lbWl0KFwidGVybWluYWwtZGF0YVwiLCBkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDEyNyA/IFwiXFxiXCIgOiBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gU29ja2V0IGxpc3RlbmVyc1xyXG4gICAgICAgICAgICAgICAgc29ja2V0Lm9uKFwidGVybWluYWwtZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBcIlxceDFiY1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYWwud3JpdGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNvY2tldC5vbihcInRlcm1pbmFsLXVwbG9hZFwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuYWNjZXB0ID0gZGF0YS5hY2NlcHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlID0gaW5wdXQuZmlsZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmVtaXQoXCJ0ZXJtaW5hbC11cGxvYWRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogcmVhZGVyLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6IGRhdGEuYWNjZXB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcInRlcm1pbmFsLXVwbG9hZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogcmVhZGVyLmVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdDogZGF0YS5hY2NlcHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNvY2tldC5vbihcInRlcm1pbmFsLWRvd25sb2FkXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSBkYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGRhdGEuZmlsZW5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzb2NrZXQub24oXCJjb25uZWN0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJXZWxjb21lIHRvICR7dGhpcy5zZXJ2aWNlTmFtZX0gc2VydmljZSdzICR7YWxpYXN9IVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZW1pdChcInRlcm1pbmFsLWluaXRcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNvY2tldC5vbihcImRpc2Nvbm5lY3RcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYWwud3JpdGVsbihcIkRpc2Nvbm5lY3RlZCBmcm9tICR7dGhpcy5zZXJ2aWNlTmFtZX0gc2VydmljZSdzICR7YWxpYXN9LlwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICA8L3NjcmlwdD5cclxuICAgICAgICA8L2JvZHk+XHJcbiAgICAgICAgPC9odG1sPlxyXG4gICAgICAgIGA7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,22 @@
1
+ import { __decorate, __metadata, __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
+ container;
7
+ constructor(container) {
8
+ this.container = container;
9
+ }
10
+ use(request, response, next) {
11
+ request.container = this.container;
12
+ next(null);
13
+ }
14
+ };
15
+ ContainerMiddleware = __decorate([
16
+ injectable(),
17
+ Middleware({ type: "before" }),
18
+ __param(0, inject(DI_CONTAINER)),
19
+ __metadata("design:paramtypes", [Object])
20
+ ], ContainerMiddleware);
21
+ export { ContainerMiddleware };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1taWRkbGV3YXJlcy9jb250YWluZXIubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUMsT0FBTyxFQUE2QixVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFLaEQsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFFZTtJQUEzQyxZQUEyQyxTQUE4QjtRQUE5QixjQUFTLEdBQVQsU0FBUyxDQUFxQjtJQUV6RSxDQUFDO0lBRUQsR0FBRyxDQUFDLE9BQWlCLEVBQUUsUUFBYSxFQUFFLElBQXdCO1FBQzFELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQVZZLG1CQUFtQjtJQUYvQixVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFHZCxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTs7R0FGeEIsbUJBQW1CLENBVS9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIGluamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSVJlcXVlc3R9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQE1pZGRsZXdhcmUoeyB0eXBlOiBcImJlZm9yZVwiIH0pXHJcbmV4cG9ydCBjbGFzcyBDb250YWluZXJNaWRkbGV3YXJlIGltcGxlbWVudHMgRXhwcmVzc01pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoRElfQ09OVEFJTkVSKSByZWFkb25seSBjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdXNlKHJlcXVlc3Q6IElSZXF1ZXN0LCByZXNwb25zZTogYW55LCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpOiB2b2lkIHtcclxuICAgICAgICByZXF1ZXN0LmNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIl19