@stemy/backend 5.2.1 → 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 (144) 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/esm2020/services/assets.mjs +2 -2
  6. package/esm2022/commands/clear-command.mjs +15 -0
  7. package/esm2022/commands/fixtures-command.mjs +26 -0
  8. package/esm2022/commands/index.mjs +7 -0
  9. package/esm2022/common-types.mjs +26 -0
  10. package/esm2022/fixtures/index.mjs +5 -0
  11. package/esm2022/fixtures/ttl.fixture.mjs +23 -0
  12. package/esm2022/public_api.mjs +378 -0
  13. package/esm2022/requests/asset-image-params.mjs +60 -0
  14. package/esm2022/rest-controllers/assets.controller.mjs +177 -0
  15. package/esm2022/rest-controllers/auth.controller.mjs +57 -0
  16. package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
  17. package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
  18. package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
  19. package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
  20. package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
  21. package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
  22. package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
  23. package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
  24. package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
  25. package/esm2022/services/asset-processor.mjs +90 -0
  26. package/esm2022/services/asset-resolver.mjs +36 -0
  27. package/esm2022/services/assets.mjs +154 -0
  28. package/esm2022/services/backend-provider.mjs +83 -0
  29. package/esm2022/services/cache-processor.mjs +16 -0
  30. package/esm2022/services/cache.mjs +70 -0
  31. package/esm2022/services/configuration.mjs +68 -0
  32. package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
  33. package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
  34. package/esm2022/services/endpoint-provider.mjs +13 -0
  35. package/esm2022/services/entities/asset.mjs +61 -0
  36. package/esm2022/services/entities/base-entity.mjs +32 -0
  37. package/esm2022/services/entities/lazy-asset.mjs +87 -0
  38. package/esm2022/services/entities/progress.mjs +182 -0
  39. package/esm2022/services/entities/temp-asset.mjs +53 -0
  40. package/esm2022/services/fixtures.mjs +38 -0
  41. package/esm2022/services/gallery-cache.mjs +29 -0
  42. package/esm2022/services/gallery-image.mjs +42 -0
  43. package/esm2022/services/gallery.mjs +124 -0
  44. package/esm2022/services/id-generator.mjs +49 -0
  45. package/esm2022/services/job-manager.mjs +198 -0
  46. package/esm2022/services/lazy-assets.mjs +68 -0
  47. package/esm2022/services/logger.mjs +26 -0
  48. package/esm2022/services/mail-sender.mjs +42 -0
  49. package/esm2022/services/memory-cache.mjs +61 -0
  50. package/esm2022/services/mongo-connector.mjs +36 -0
  51. package/esm2022/services/open-api.mjs +124 -0
  52. package/esm2022/services/progresses.mjs +93 -0
  53. package/esm2022/services/template-renderer.mjs +71 -0
  54. package/esm2022/services/terminal-manager.mjs +88 -0
  55. package/esm2022/services/token-generator.mjs +37 -0
  56. package/esm2022/services/translation-provider.mjs +39 -0
  57. package/esm2022/services/translator.mjs +67 -0
  58. package/esm2022/services/user-manager.mjs +27 -0
  59. package/esm2022/socket-controllers/progress.controller.mjs +63 -0
  60. package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
  61. package/esm2022/socket-controllers/terminal.mjs +89 -0
  62. package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
  63. package/esm2022/static.mjs +23 -0
  64. package/esm2022/stemy-backend.mjs +5 -0
  65. package/esm2022/utilities/base-doc.mjs +33 -0
  66. package/esm2022/utilities/decorators.mjs +51 -0
  67. package/esm2022/utilities/di-container.mjs +88 -0
  68. package/esm2022/utilities/empty-job.mjs +13 -0
  69. package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
  70. package/esm2022/utilities/mongoose.mjs +216 -0
  71. package/esm2022/utilities/tree.mjs +119 -0
  72. package/esm2022/utils.mjs +726 -0
  73. package/esm2022/validators.mjs +46 -0
  74. package/fesm2015/stemy-backend.mjs +1 -1
  75. package/fesm2015/stemy-backend.mjs.map +1 -1
  76. package/fesm2020/stemy-backend.mjs +1 -1
  77. package/fesm2020/stemy-backend.mjs.map +1 -1
  78. package/fesm2022/stemy-backend.mjs +4690 -0
  79. package/fesm2022/stemy-backend.mjs.map +1 -0
  80. package/fixtures/index.d.ts +2 -2
  81. package/fixtures/ttl.fixture.d.ts +7 -7
  82. package/index.d.ts +5 -5
  83. package/package.json +43 -49
  84. package/public_api.d.ts +44 -44
  85. package/requests/asset-image-params.d.ts +12 -12
  86. package/rest-controllers/assets.controller.d.ts +25 -27
  87. package/rest-controllers/auth.controller.d.ts +14 -14
  88. package/rest-controllers/gallery.controller.d.ts +6 -7
  89. package/rest-controllers/progresses.controller.d.ts +9 -9
  90. package/rest-controllers/terminal-styles.d.ts +2 -2
  91. package/rest-controllers/terminal.controller.d.ts +10 -10
  92. package/rest-middlewares/container.middleware.d.ts +8 -8
  93. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  94. package/rest-middlewares/language.middleware.d.ts +8 -8
  95. package/rest-middlewares/request-ended.middleware.d.ts +8 -8
  96. package/rest-middlewares/request-started.middleware.d.ts +8 -8
  97. package/services/asset-processor.d.ts +10 -11
  98. package/services/asset-resolver.d.ts +10 -10
  99. package/services/assets.d.ts +24 -26
  100. package/services/backend-provider.d.ts +19 -20
  101. package/services/cache-processor.d.ts +4 -4
  102. package/services/cache.d.ts +23 -23
  103. package/services/configuration.d.ts +15 -15
  104. package/services/drivers/asset-grid.driver.d.ts +11 -11
  105. package/services/drivers/asset-local.driver.d.ts +10 -11
  106. package/services/endpoint-provider.d.ts +4 -4
  107. package/services/entities/asset.d.ts +19 -21
  108. package/services/entities/base-entity.d.ts +13 -13
  109. package/services/entities/lazy-asset.d.ts +25 -25
  110. package/services/entities/progress.d.ts +49 -49
  111. package/services/entities/temp-asset.d.ts +20 -22
  112. package/services/fixtures.d.ts +8 -8
  113. package/services/gallery-cache.d.ts +8 -9
  114. package/services/gallery-image.d.ts +10 -11
  115. package/services/gallery.d.ts +13 -13
  116. package/services/id-generator.d.ts +11 -11
  117. package/services/job-manager.d.ts +35 -35
  118. package/services/lazy-assets.d.ts +22 -22
  119. package/services/logger.d.ts +8 -8
  120. package/services/mail-sender.d.ts +20 -20
  121. package/services/memory-cache.d.ts +10 -10
  122. package/services/mongo-connector.d.ts +12 -12
  123. package/services/open-api.d.ts +13 -13
  124. package/services/progresses.d.ts +20 -20
  125. package/services/template-renderer.d.ts +14 -14
  126. package/services/terminal-manager.d.ts +15 -15
  127. package/services/token-generator.d.ts +6 -6
  128. package/services/translation-provider.d.ts +9 -9
  129. package/services/translator.d.ts +15 -15
  130. package/services/user-manager.d.ts +6 -6
  131. package/socket-controllers/progress.controller.d.ts +10 -10
  132. package/socket-controllers/terminal.controller.d.ts +13 -13
  133. package/socket-controllers/terminal.d.ts +19 -20
  134. package/socket-middlewares/compression.middleware.d.ts +4 -4
  135. package/static.d.ts +2 -2
  136. package/utilities/base-doc.d.ts +40 -40
  137. package/utilities/decorators.d.ts +10 -10
  138. package/utilities/di-container.d.ts +43 -43
  139. package/utilities/empty-job.d.ts +4 -4
  140. package/utilities/lazy-asset-generator.d.ts +15 -15
  141. package/utilities/mongoose.d.ts +36 -36
  142. package/utilities/tree.d.ts +15 -15
  143. package/utils.d.ts +120 -123
  144. package/validators.d.ts +7 -7
@@ -0,0 +1,79 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { BadRequestError, Middleware } from "routing-controllers";
4
+ import axios from "axios";
5
+ import { Translator } from "../services/translator";
6
+ import { Configuration } from "../services/configuration";
7
+ let ErrorHandlerMiddleware = class ErrorHandlerMiddleware {
8
+ configuration;
9
+ translator;
10
+ get isDev() {
11
+ return this.configuration.resolve("nodeEnv") === "development";
12
+ }
13
+ constructor(configuration, translator) {
14
+ this.configuration = configuration;
15
+ this.translator = translator;
16
+ }
17
+ async error(error, req, res, next) {
18
+ const result = await this.getResult(error, req, res);
19
+ if (this.isDev) {
20
+ if (axios.isAxiosError(error)) {
21
+ console.log(`Axios error:`, result);
22
+ console.log(error.config.data);
23
+ }
24
+ else {
25
+ console.log(error.constructor?.name || "Error", result, res.statusCode);
26
+ }
27
+ }
28
+ res.json(result);
29
+ }
30
+ async getResult(error, req, res) {
31
+ const result = {};
32
+ if (axios.isAxiosError(error)) {
33
+ res.status(error.response.status);
34
+ result.message = error.message;
35
+ result.error = error.response.data;
36
+ result.headers = error.response.headers;
37
+ result.url = `${error.config.baseURL}${error.config.url}`;
38
+ return result;
39
+ }
40
+ if (error instanceof BadRequestError) {
41
+ res.status(400);
42
+ if (error.constructor.name === "ParamRequiredError") {
43
+ result.message = await this.translator.getTranslation(req.language, "message.parameter-required.error");
44
+ result.param = error.message;
45
+ }
46
+ else {
47
+ result.message = error.message || await this.translator.getTranslation(req.language, "message.form-validation.error");
48
+ result.errors = error["errors"];
49
+ if (error.stack && this.isDev) {
50
+ result.stack = error.stack;
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ res.status(error.httpCode || 500);
56
+ if (error instanceof Error) {
57
+ if (error.name) {
58
+ result.name = error.name;
59
+ }
60
+ if (error.message) {
61
+ result.message = error.message;
62
+ }
63
+ if (error.stack && this.isDev) {
64
+ result.stack = error.stack;
65
+ }
66
+ }
67
+ else if (typeof error === "string") {
68
+ result.message = error;
69
+ }
70
+ return result;
71
+ }
72
+ };
73
+ ErrorHandlerMiddleware = __decorate([
74
+ injectable(),
75
+ Middleware({ type: "after" }),
76
+ __metadata("design:paramtypes", [Configuration, Translator])
77
+ ], ErrorHandlerMiddleware);
78
+ export { ErrorHandlerMiddleware };
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxlQUFlLEVBQW1DLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkxQixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBSWpELElBQU0sc0JBQXNCLEdBQTVCLE1BQU0sc0JBQXNCO0lBTVY7SUFBdUM7SUFKNUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxhQUFhLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQXFCLGFBQTRCLEVBQVcsVUFBc0I7UUFBN0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRWxGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVUsRUFBRSxHQUFhLEVBQUUsR0FBYSxFQUFFLElBQXdCO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLENBQUMs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QUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKLENBQUE7QUFyRVksc0JBQXNCO0lBRmxDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztxQ0FPVSxhQUFhLEVBQXVCLFVBQVU7R0FOekUsc0JBQXNCLENBcUVsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7QmFkUmVxdWVzdEVycm9yLCBFeHByZXNzRXJyb3JNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7UmVzcG9uc2V9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4uL3NlcnZpY2VzL3RyYW5zbGF0b3JcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYWZ0ZXJcIiB9KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JIYW5kbGVyTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NFcnJvck1pZGRsZXdhcmVJbnRlcmZhY2Uge1xyXG5cclxuICAgIGdldCBpc0RldigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmUoXCJub2RlRW52XCIpID09PSBcImRldmVsb3BtZW50XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRvcikge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlcnJvcihlcnJvcjogYW55LCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiAoZXJyPzogYW55KSA9PiBhbnkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlc3VsdChlcnJvciwgcmVxLCByZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGV2KSB7XHJcbiAgICAgICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQXhpb3MgZXJyb3I6YCwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbmZpZy5kYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmNvbnN0cnVjdG9yPy5uYW1lIHx8IFwiRXJyb3JcIiwgcmVzdWx0LCByZXMuc3RhdHVzQ29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0UmVzdWx0KGVycm9yLCByZXE6IElSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG4gICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgPSBlcnJvci5yZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICByZXN1bHQuaGVhZGVycyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICAgICAgICAgIHJlc3VsdC51cmwgPSBgJHtlcnJvci5jb25maWcuYmFzZVVSTH0ke2Vycm9yLmNvbmZpZy51cmx9YDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFcnJvcikge1xyXG4gICAgICAgICAgICByZXMuc3RhdHVzKDQwMCk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIlBhcmFtUmVxdWlyZWRFcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5wYXJhbWV0ZXItcmVxdWlyZWQuZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucGFyYW0gPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvbihyZXEubGFuZ3VhZ2UsIFwibWVzc2FnZS5mb3JtLXZhbGlkYXRpb24uZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JzID0gZXJyb3JbXCJlcnJvcnNcIl07XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFjayA9IGVycm9yLnN0YWNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXMuc3RhdHVzKGVycm9yLmh0dHBDb2RlIHx8IDUwMCk7XHJcblxyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubmFtZSA9IGVycm9yLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2sgJiYgdGhpcy5pc0Rldikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YWNrID0gZXJyb3Iuc3RhY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXN1bHQubWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Middleware } from "routing-controllers";
4
+ import { Configuration } from "../services/configuration";
5
+ let LanguageMiddleware = class LanguageMiddleware {
6
+ config;
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ use(request, response, next) {
11
+ request.language = request.query.language || this.config.resolve("defaultLanguage");
12
+ next(null);
13
+ }
14
+ };
15
+ LanguageMiddleware = __decorate([
16
+ injectable(),
17
+ Middleware({ type: "before" }),
18
+ __metadata("design:paramtypes", [Configuration])
19
+ ], LanguageMiddleware);
20
+ export { LanguageMiddleware };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UubWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUE2QixVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFJakQsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUFFTjtJQUFyQixZQUFxQixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO0lBRTFDLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQWtCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQVhZLGtCQUFrQjtJQUY5QixVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7cUNBR0UsYUFBYTtHQUZqQyxrQkFBa0IsQ0FXOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge0lSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQE1pZGRsZXdhcmUoeyB0eXBlOiBcImJlZm9yZVwiIH0pXHJcbmV4cG9ydCBjbGFzcyBMYW5ndWFnZU1pZGRsZXdhcmUgaW1wbGVtZW50cyBFeHByZXNzTWlkZGxld2FyZUludGVyZmFjZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5sYW5ndWFnZSA9IHJlcXVlc3QucXVlcnkubGFuZ3VhZ2UgYXMgc3RyaW5nIHx8IHRoaXMuY29uZmlnLnJlc29sdmUoXCJkZWZhdWx0TGFuZ3VhZ2VcIik7XHJcbiAgICAgICAgbmV4dChudWxsKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,26 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Middleware } from "routing-controllers";
4
+ import moment from "moment";
5
+ import { Logger } from "../services/logger";
6
+ let RequestEndedMiddleware = class RequestEndedMiddleware {
7
+ logger;
8
+ constructor(logger) {
9
+ this.logger = logger;
10
+ }
11
+ use(request, response, next) {
12
+ request.ended = moment();
13
+ const diff = request.ended.diff(request.started);
14
+ const duration = moment.duration(diff);
15
+ this.logger.log("request-time", `Request '${request.id}' ended at: ${request.ended.format("YYYY-MM-DD HH:mm:ss")} [${request.method}] ${request.url}`);
16
+ this.logger.log("request-time", `Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`);
17
+ next(null);
18
+ }
19
+ };
20
+ RequestEndedMiddleware = __decorate([
21
+ injectable(),
22
+ Middleware({ type: "after" }),
23
+ __metadata("design:paramtypes", [Logger])
24
+ ], RequestEndedMiddleware);
25
+ export { RequestEndedMiddleware };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jlc3QtbWlkZGxld2FyZXMvcmVxdWVzdC1lbmRlZC5taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBNkIsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUluQyxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUFzQjtJQUVWO0lBQXJCLFlBQXFCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxlQUFlLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDWCxjQUFjLEVBQ2QsWUFBWSxPQUFPLENBQUMsRUFBRSxhQUFhLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUNuRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUVKLENBQUE7QUFwQlksc0JBQXNCO0lBRmxDLFVBQVUsRUFBRTtJQUNaLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztxQ0FHRyxNQUFNO0dBRjFCLHNCQUFzQixDQW9CbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtJUmVxdWVzdH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYWZ0ZXJcIiB9KVxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdEVuZGVkTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBsb2dnZXI6IExvZ2dlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5lbmRlZCA9IG1vbWVudCgpO1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSByZXF1ZXN0LmVuZGVkLmRpZmYocmVxdWVzdC5zdGFydGVkKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG1vbWVudC5kdXJhdGlvbihkaWZmKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coXHJcbiAgICAgICAgICAgIFwicmVxdWVzdC10aW1lXCIsXHJcbiAgICAgICAgICAgIGBSZXF1ZXN0ICcke3JlcXVlc3QuaWR9JyBlbmRlZCBhdDogJHtyZXF1ZXN0LmVuZGVkLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIil9IFske3JlcXVlc3QubWV0aG9kfV0gJHtyZXF1ZXN0LnVybH1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coXHJcbiAgICAgICAgICAgIFwicmVxdWVzdC10aW1lXCIsXHJcbiAgICAgICAgICAgIGBSZXF1ZXN0ICcke3JlcXVlc3QuaWR9JyBsYXN0ZWQ6ICR7ZHVyYXRpb24uYXNNaWxsaXNlY29uZHMoKX1tc2BcclxuICAgICAgICApO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable } from "tsyringe";
3
+ import { Middleware } from "routing-controllers";
4
+ import { ObjectId } from "bson";
5
+ import moment from "moment";
6
+ import { Logger } from "../services/logger";
7
+ let RequestStartedMiddleware = class RequestStartedMiddleware {
8
+ logger;
9
+ constructor(logger) {
10
+ this.logger = logger;
11
+ }
12
+ use(request, response, next) {
13
+ request.id = new ObjectId().toHexString();
14
+ request.started = moment();
15
+ this.logger.log("request-time", `Request '${request.id}' started at: ${request.started.format("YYYY-MM-DD HH:mm:ss")} [${request.method}] ${request.url}`);
16
+ next(null);
17
+ }
18
+ };
19
+ RequestStartedMiddleware = __decorate([
20
+ injectable(),
21
+ Middleware({ type: "before" }),
22
+ __metadata("design:paramtypes", [Logger])
23
+ ], RequestStartedMiddleware);
24
+ export { RequestStartedMiddleware };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1zdGFydGVkLm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQTZCLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUluQyxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF3QjtJQUVaO0lBQXJCLFlBQXFCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBaUIsRUFBRSxRQUFhLEVBQUUsSUFBd0I7UUFDMUQsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ1gsY0FBYyxFQUNkLFlBQVksT0FBTyxDQUFDLEVBQUUsaUJBQWlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQzVILENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQWZZLHdCQUF3QjtJQUZwQyxVQUFVLEVBQUU7SUFDWixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7cUNBR0UsTUFBTTtHQUYxQix3QkFBd0IsQ0FlcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0V4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlLCBNaWRkbGV3YXJlfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHtJUmVxdWVzdH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5ATWlkZGxld2FyZSh7IHR5cGU6IFwiYmVmb3JlXCIgfSlcclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTdGFydGVkTWlkZGxld2FyZSBpbXBsZW1lbnRzIEV4cHJlc3NNaWRkbGV3YXJlSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBsb2dnZXI6IExvZ2dlcikge1xyXG4gICAgfVxyXG5cclxuICAgIHVzZShyZXF1ZXN0OiBJUmVxdWVzdCwgcmVzcG9uc2U6IGFueSwgbmV4dDogKGVycj86IGFueSkgPT4gYW55KTogdm9pZCB7XHJcbiAgICAgICAgcmVxdWVzdC5pZCA9IG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKCk7XHJcbiAgICAgICAgcmVxdWVzdC5zdGFydGVkID0gbW9tZW50KCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFxyXG4gICAgICAgICAgICBcInJlcXVlc3QtdGltZVwiLFxyXG4gICAgICAgICAgICBgUmVxdWVzdCAnJHtyZXF1ZXN0LmlkfScgc3RhcnRlZCBhdDogJHtyZXF1ZXN0LnN0YXJ0ZWQuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKX0gWyR7cmVxdWVzdC5tZXRob2R9XSAke3JlcXVlc3QudXJsfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIG5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,90 @@
1
+ var AssetProcessor_1;
2
+ import { __decorate } from "tslib";
3
+ import { injectable, Lifecycle, scoped } from "tsyringe";
4
+ import fontKit_ from "fontkit";
5
+ import sharp_ from "sharp";
6
+ const sharp = sharp_;
7
+ const fontKit = fontKit_;
8
+ const fontTypes = [
9
+ "application/font-woff", "application/font-woff2", "application/x-font-opentype", "application/x-font-truetype", "application/x-font-datafork",
10
+ "font/woff", "font/woff2", "font/otf", "font/ttf", "font/datafork"
11
+ ];
12
+ const imageTypes = ["image/jpeg", "image/jpg", "image/png", "image/svg+xml"];
13
+ const fontProps = [
14
+ "postscriptName", "fullName", "familyName", "subfamilyName",
15
+ "copyright", "version", "unitsPerEm", "ascent", "descent", "lineGap",
16
+ "underlinePosition", "underlineThickness", "italicAngle", "capHeight",
17
+ "xHeight", "numGlyphs", "characterSet", "availableFeatures"
18
+ ];
19
+ let AssetProcessor = AssetProcessor_1 = class AssetProcessor {
20
+ static extractFontFormat(font) {
21
+ const name = font.constructor.name;
22
+ const tag = font["directory"].tag;
23
+ switch (name) {
24
+ case "TTFFont":
25
+ return tag === "OTTO" ? "opentype" : "truetype";
26
+ case "WOFF2Font":
27
+ return "woff2";
28
+ case "WOFFFont":
29
+ return "woff";
30
+ case "DFont":
31
+ return "datafork";
32
+ }
33
+ return null;
34
+ }
35
+ static isImage(contentType) {
36
+ return imageTypes.indexOf(contentType) >= 0;
37
+ }
38
+ static async copyImageMeta(buffer, metadata, fileType) {
39
+ if (fileType.mime === "image/svg+xml") {
40
+ const match = /<svg([^<>]+)>/gi.exec(buffer.toString("utf8"));
41
+ if (match && match.length > 1) {
42
+ const attrs = match[1].match(/([a-z]+)="([^"]+)"/gi);
43
+ attrs.forEach(attr => {
44
+ if (attr.length < 5)
45
+ return;
46
+ const [name, value] = attr.split("=");
47
+ const val = value.replace(/"/gi, "");
48
+ metadata[name] = isNaN(val) ? val : Number(val);
49
+ });
50
+ if (metadata.viewBox && (isNaN(metadata.width) || isNaN(metadata.height))) {
51
+ const parts = metadata.viewBox.split(" ");
52
+ metadata.width = Number(parts[0]) + Number(parts[2]);
53
+ metadata.height = Number(parts[1]) + Number(parts[3]);
54
+ }
55
+ if (!isNaN(metadata.width) && !isNaN(metadata.height)) {
56
+ metadata.svgSize = { x: metadata.width, y: metadata.height };
57
+ }
58
+ }
59
+ return buffer;
60
+ }
61
+ const output = await sharp(buffer).rotate().toBuffer({ resolveWithObject: true });
62
+ Object.assign(metadata, output.info);
63
+ return output.data;
64
+ }
65
+ static isFont(contentType) {
66
+ return fontTypes.indexOf(contentType) >= 0;
67
+ }
68
+ static copyFontMeta(buffer, metadata) {
69
+ const font = fontKit.create(buffer);
70
+ metadata.format = AssetProcessor_1.extractFontFormat(font);
71
+ fontProps.forEach(prop => {
72
+ metadata[prop] = font[prop];
73
+ });
74
+ }
75
+ async process(buffer, metadata, fileType) {
76
+ if (AssetProcessor_1.isImage(fileType.mime)) {
77
+ buffer = await AssetProcessor_1.copyImageMeta(buffer, metadata, fileType);
78
+ }
79
+ if (AssetProcessor_1.isFont(fileType.mime)) {
80
+ AssetProcessor_1.copyFontMeta(buffer, metadata);
81
+ }
82
+ return buffer;
83
+ }
84
+ };
85
+ AssetProcessor = AssetProcessor_1 = __decorate([
86
+ injectable(),
87
+ scoped(Lifecycle.ContainerScoped)
88
+ ], AssetProcessor);
89
+ export { AssetProcessor };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0LXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLFFBQWdCLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sTUFBTSxNQUFNLE9BQU8sQ0FBQztBQUczQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBRXpCLE1BQU0sU0FBUyxHQUFHO0lBQ2QsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCO0lBQzlJLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlO0NBQ3JFLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sU0FBUyxHQUFHO0lBQ2QsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxlQUFlO0lBQzNELFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUztJQUNwRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsV0FBVztJQUNyRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7Q0FDOUQsQ0FBQztBQUlLLElBQU0sY0FBYyxzQkFBcEIsTUFBTSxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFVO1FBQy9CLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFZLElBQUks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SixDQUFBO0FBdEVZLGNBQWM7SUFGMUIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsY0FBYyxDQXNFMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IGZvbnRLaXRfLCB7Rm9udH0gZnJvbSBcImZvbnRraXRcIjtcclxuaW1wb3J0IHNoYXJwXyBmcm9tIFwic2hhcnBcIjtcclxuaW1wb3J0IHtGb250Rm9ybWF0LCBJQXNzZXRNZXRhLCBJRmlsZVR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5jb25zdCBmb250S2l0ID0gZm9udEtpdF87XHJcblxyXG5jb25zdCBmb250VHlwZXMgPSBbXHJcbiAgICBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZlwiLCBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZjJcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtdHJ1ZXR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LWZvbnQtZGF0YWZvcmtcIixcclxuICAgIFwiZm9udC93b2ZmXCIsIFwiZm9udC93b2ZmMlwiLCBcImZvbnQvb3RmXCIsIFwiZm9udC90dGZcIiwgXCJmb250L2RhdGFmb3JrXCJcclxuXTtcclxuXHJcbmNvbnN0IGltYWdlVHlwZXMgPSBbXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2Uvc3ZnK3htbFwiXTtcclxuXHJcbmNvbnN0IGZvbnRQcm9wcyA9IFtcclxuICAgIFwicG9zdHNjcmlwdE5hbWVcIiwgXCJmdWxsTmFtZVwiLCBcImZhbWlseU5hbWVcIiwgXCJzdWJmYW1pbHlOYW1lXCIsXHJcbiAgICBcImNvcHlyaWdodFwiLCBcInZlcnNpb25cIiwgXCJ1bml0c1BlckVtXCIsIFwiYXNjZW50XCIsIFwiZGVzY2VudFwiLCBcImxpbmVHYXBcIixcclxuICAgIFwidW5kZXJsaW5lUG9zaXRpb25cIiwgXCJ1bmRlcmxpbmVUaGlja25lc3NcIiwgXCJpdGFsaWNBbmdsZVwiLCBcImNhcEhlaWdodFwiLFxyXG4gICAgXCJ4SGVpZ2h0XCIsIFwibnVtR2x5cGhzXCIsIFwiY2hhcmFjdGVyU2V0XCIsIFwiYXZhaWxhYmxlRmVhdHVyZXNcIlxyXG5dO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBBc3NldFByb2Nlc3NvciB7XHJcblxyXG4gICAgc3RhdGljIGV4dHJhY3RGb250Rm9ybWF0KGZvbnQ6IEZvbnQpOiBGb250Rm9ybWF0IHtcclxuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBmb250LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgICAgY29uc3QgdGFnOiBzdHJpbmcgID0gZm9udFtcImRpcmVjdG9yeVwiXS50YWc7XHJcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJUVEZGb250XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFnID09PSBcIk9UVE9cIiA/IFwib3BlbnR5cGVcIiA6IFwidHJ1ZXR5cGVcIjtcclxuICAgICAgICAgICAgY2FzZSBcIldPRkYyRm9udFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwid29mZjJcIjtcclxuICAgICAgICAgICAgY2FzZSBcIldPRkZGb250XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ3b2ZmXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJERm9udFwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0YWZvcmtcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzSW1hZ2UoY29udGVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpbWFnZVR5cGVzLmluZGV4T2YoY29udGVudFR5cGUpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFzeW5jIGNvcHlJbWFnZU1ldGEoYnVmZmVyOiBCdWZmZXIsIG1ldGFkYXRhOiBJQXNzZXRNZXRhLCBmaWxlVHlwZTogSUZpbGVUeXBlKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICBpZiAoZmlsZVR5cGUubWltZSA9PT0gXCJpbWFnZS9zdmcreG1sXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvPHN2ZyhbXjw+XSspPi9naS5leGVjKGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIikpO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBtYXRjaFsxXS5tYXRjaCgvKFthLXpdKyk9XCIoW15cIl0rKVwiL2dpKTtcclxuICAgICAgICAgICAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHIubGVuZ3RoIDwgNSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBhdHRyLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB2YWx1ZS5yZXBsYWNlKC9cIi9naSwgXCJcIikgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhW25hbWVdID0gaXNOYU4odmFsKSA/IHZhbCA6IE51bWJlcih2YWwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEudmlld0JveCAmJiAoaXNOYU4obWV0YWRhdGEud2lkdGgpIHx8IGlzTmFOKG1ldGFkYXRhLmhlaWdodCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSAobWV0YWRhdGEudmlld0JveCBhcyBzdHJpbmcpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53aWR0aCA9IE51bWJlcihwYXJ0c1swXSkgKyBOdW1iZXIocGFydHNbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmhlaWdodCA9IE51bWJlcihwYXJ0c1sxXSkgKyBOdW1iZXIocGFydHNbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtZXRhZGF0YS53aWR0aCkgJiYgIWlzTmFOKG1ldGFkYXRhLmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5zdmdTaXplID0ge3g6IG1ldGFkYXRhLndpZHRoLCB5OiBtZXRhZGF0YS5oZWlnaHR9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNoYXJwKGJ1ZmZlcikucm90YXRlKCkudG9CdWZmZXIoe3Jlc29sdmVXaXRoT2JqZWN0OiB0cnVlfSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXRhZGF0YSwgb3V0cHV0LmluZm8pO1xyXG4gICAgICAgIHJldHVybiBvdXRwdXQuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNGb250KGNvbnRlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZm9udFR5cGVzLmluZGV4T2YoY29udGVudFR5cGUpID49IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvcHlGb250TWV0YShidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb250ID0gZm9udEtpdC5jcmVhdGUoYnVmZmVyKSBhcyBGb250O1xyXG4gICAgICAgIG1ldGFkYXRhLmZvcm1hdCA9IEFzc2V0UHJvY2Vzc29yLmV4dHJhY3RGb250Rm9ybWF0KGZvbnQpO1xyXG4gICAgICAgIGZvbnRQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YVtwcm9wXSA9IGZvbnRbcHJvcF07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2VzcyhidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEsIGZpbGVUeXBlOiBJRmlsZVR5cGUpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIGlmIChBc3NldFByb2Nlc3Nvci5pc0ltYWdlKGZpbGVUeXBlLm1pbWUpKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IEFzc2V0UHJvY2Vzc29yLmNvcHlJbWFnZU1ldGEoYnVmZmVyLCBtZXRhZGF0YSwgZmlsZVR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXNzZXRQcm9jZXNzb3IuaXNGb250KGZpbGVUeXBlLm1pbWUpKSB7XHJcbiAgICAgICAgICAgIEFzc2V0UHJvY2Vzc29yLmNvcHlGb250TWV0YShidWZmZXIsIG1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { Assets } from "./assets";
4
+ import { LazyAssets } from "./lazy-assets";
5
+ let AssetResolver = class AssetResolver {
6
+ assets;
7
+ lazyAssets;
8
+ constructor(assets, lazyAssets) {
9
+ this.assets = assets;
10
+ this.lazyAssets = lazyAssets;
11
+ }
12
+ async resolve(id, lazy = false) {
13
+ let asset = null;
14
+ if (lazy) {
15
+ const lazyAsset = await this.lazyAssets.read(id);
16
+ if (!lazyAsset)
17
+ return null;
18
+ return lazyAsset.loadAsset();
19
+ }
20
+ asset = await this.assets.read(id);
21
+ if (!asset) {
22
+ const lazyAsset = await this.lazyAssets.read(id);
23
+ if (!lazyAsset)
24
+ return null;
25
+ return lazyAsset.loadAsset();
26
+ }
27
+ return asset;
28
+ }
29
+ };
30
+ AssetResolver = __decorate([
31
+ injectable(),
32
+ scoped(Lifecycle.ContainerScoped),
33
+ __metadata("design:paramtypes", [Assets, LazyAssets])
34
+ ], AssetResolver);
35
+ export { AssetResolver };
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYXNzZXQtcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJbEMsSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTtJQUVEO0lBQXlCO0lBQTlDLFlBQXFCLE1BQWMsRUFBVyxVQUFzQjtRQUEvQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVcsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUVwRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFxQixFQUFFLE9BQWdCLEtBQUs7UUFDdEQsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVCLE9BQU8sU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0osQ0FBQTtBQXJCWSxhQUFhO0lBRnpCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO3FDQUdELE1BQU0sRUFBdUIsVUFBVTtHQUYzRCxhQUFhLENBcUJ6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0lBc3NldH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vYXNzZXRzXCI7XHJcbmltcG9ydCB7TGF6eUFzc2V0c30gZnJvbSBcIi4vbGF6eS1hc3NldHNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgQXNzZXRSZXNvbHZlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgYXNzZXRzOiBBc3NldHMsIHJlYWRvbmx5IGxhenlBc3NldHM6IExhenlBc3NldHMpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzb2x2ZShpZDogc3RyaW5nIHwgT2JqZWN0SWQsIGxhenk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgbGV0IGFzc2V0OiBJQXNzZXQgPSBudWxsO1xyXG4gICAgICAgIGlmIChsYXp5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhenlBc3NldCA9IGF3YWl0IHRoaXMubGF6eUFzc2V0cy5yZWFkKGlkKTtcclxuICAgICAgICAgICAgaWYgKCFsYXp5QXNzZXQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gbGF6eUFzc2V0LmxvYWRBc3NldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhc3NldCA9IGF3YWl0IHRoaXMuYXNzZXRzLnJlYWQoaWQpO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGF6eUFzc2V0ID0gYXdhaXQgdGhpcy5sYXp5QXNzZXRzLnJlYWQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoIWxhenlBc3NldCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXp5QXNzZXQubG9hZEFzc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,154 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { inject, injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { ObjectId } from "bson";
4
+ import axios from "axios";
5
+ import { bufferToStream, copyStream, fileTypeFromBuffer, streamToBuffer } from "../utils";
6
+ import { ASSET_DRIVER } from "../common-types";
7
+ import { MongoConnector } from "./mongo-connector";
8
+ import { AssetProcessor } from "./asset-processor";
9
+ import { Asset } from "./entities/asset";
10
+ import { TempAsset } from "./entities/temp-asset";
11
+ let Assets = class Assets {
12
+ connector;
13
+ assetProcessor;
14
+ driver;
15
+ collection;
16
+ constructor(connector, assetProcessor, driver) {
17
+ this.connector = connector;
18
+ this.assetProcessor = assetProcessor;
19
+ this.driver = driver;
20
+ this.collection = connector.database?.collection("assets.metadata");
21
+ }
22
+ async write(stream, contentType = null, metadata = null) {
23
+ const uploadStream = copyStream(stream);
24
+ const buffer = await streamToBuffer(stream);
25
+ let fileType = { ext: "", mime: contentType };
26
+ try {
27
+ fileType = await fileTypeFromBuffer(buffer);
28
+ }
29
+ catch (e) {
30
+ if (!fileType.mime) {
31
+ throw new Error(`Can't determine mime type: ${e}`);
32
+ }
33
+ console.log(`Can't determine mime type`, e);
34
+ }
35
+ metadata = metadata || {};
36
+ return this.upload(uploadStream, fileType, metadata);
37
+ }
38
+ async writeBuffer(buffer, metadata = null, contentType = null) {
39
+ let fileType = { ext: "", mime: contentType };
40
+ try {
41
+ fileType = await fileTypeFromBuffer(buffer);
42
+ }
43
+ catch (e) {
44
+ if (!fileType.mime) {
45
+ throw `Can't determine mime type`;
46
+ }
47
+ console.log(`Can't determine mime type`, e);
48
+ }
49
+ metadata = metadata || {};
50
+ buffer = await this.assetProcessor.process(buffer, metadata, fileType);
51
+ return this.upload(bufferToStream(buffer), fileType, metadata);
52
+ }
53
+ async writeUrl(url, metadata = null) {
54
+ metadata = metadata || {};
55
+ metadata.filename = metadata.filename || url;
56
+ metadata.url = url;
57
+ metadata.uploadTime = new Date().getTime();
58
+ const oneWeek = 1000 * 3600 * 24 * 7;
59
+ const asset = await this.find({ "metadata.url": url, "metadata.uploadTime": { $gt: metadata.uploadTime - oneWeek } });
60
+ if (asset)
61
+ return asset;
62
+ const buffer = (await axios({ url, responseType: "arraybuffer" })).data;
63
+ return this.writeBuffer(buffer, metadata);
64
+ }
65
+ async download(url, contentType = null) {
66
+ let buffer = (await axios({ url, responseType: "arraybuffer" })).data;
67
+ let fileType = { ext: "", mime: contentType };
68
+ try {
69
+ fileType = await fileTypeFromBuffer(buffer);
70
+ }
71
+ catch (e) {
72
+ if (!fileType.mime) {
73
+ throw `Can't determine mime type`;
74
+ }
75
+ console.log(`Can't determine mime type`, e);
76
+ }
77
+ const metadata = {
78
+ filename: url,
79
+ extension: (fileType.ext || "").trim()
80
+ };
81
+ buffer = await this.assetProcessor.process(buffer, metadata, fileType);
82
+ return new TempAsset(buffer, url, fileType.mime, metadata);
83
+ }
84
+ async read(id) {
85
+ return !id ? null : this.find({ _id: new ObjectId(id) });
86
+ }
87
+ async find(where) {
88
+ const data = await this.collection.findOne(where);
89
+ return !data ? null : new Asset(data._id, data, this.collection, this.driver);
90
+ }
91
+ async findMany(where) {
92
+ const cursor = this.collection.find(where);
93
+ const items = await cursor.toArray() || [];
94
+ const result = [];
95
+ for (let item of items) {
96
+ if (!item)
97
+ continue;
98
+ result.push(new Asset(item._id, item, this.collection, this.driver));
99
+ }
100
+ return result;
101
+ }
102
+ async deleteMany(where) {
103
+ const assets = await this.findMany(where);
104
+ return Promise.all(assets.map(a => a.unlink()));
105
+ }
106
+ async unlink(id) {
107
+ const asset = await this.read(id);
108
+ if (!asset)
109
+ return null;
110
+ return asset.unlink();
111
+ }
112
+ async upload(stream, fileType, metadata) {
113
+ const contentType = fileType.mime.trim();
114
+ metadata = Object.assign({
115
+ downloadCount: 0,
116
+ firstDownload: null,
117
+ lastDownload: null
118
+ }, metadata || {});
119
+ metadata.filename = metadata.filename || new ObjectId().toHexString();
120
+ metadata.extension = (fileType.ext || "").trim();
121
+ return new Promise(((resolve, reject) => {
122
+ const uploaderStream = this.driver.openUploadStream(metadata.filename, {
123
+ chunkSizeBytes: 1048576,
124
+ metadata,
125
+ contentType: fileType.mime
126
+ });
127
+ stream.pipe(uploaderStream)
128
+ .on("error", error => {
129
+ reject(error.message || error);
130
+ })
131
+ .on("finish", () => {
132
+ const asset = new Asset(uploaderStream.id, {
133
+ filename: metadata.filename,
134
+ contentType,
135
+ metadata
136
+ }, this.collection, this.driver);
137
+ asset.save().then(() => {
138
+ resolve(asset);
139
+ }, error => {
140
+ reject(error.message || error);
141
+ });
142
+ });
143
+ }));
144
+ }
145
+ };
146
+ Assets = __decorate([
147
+ injectable(),
148
+ scoped(Lifecycle.ContainerScoped),
149
+ __param(2, inject(ASSET_DRIVER)),
150
+ __metadata("design:paramtypes", [MongoConnector,
151
+ AssetProcessor, Object])
152
+ ], Assets);
153
+ export { Assets };
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUUvRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzlCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDeEYsT0FBTyxFQUFDLFlBQVksRUFBOEMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekMsSUFBTSxNQUFNLEdBQVosTUFBTSxNQUFNO0lBSU07SUFDQTtJQUNzQjtJQUpsQyxVQUFVLENBQThCO0lBRWpELFlBQXFCLFNBQXlCLEVBQ3pCLGNBQThCLEVBQ1IsTUFBb0I7UUFGMUMsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ1IsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBZ0IsRUFBRSxjQUFzQixJQUFJLEVBQUUsV0FBdUIsSUFBSTtRQUNqRixNQUFNLFlBQVksR0FB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Q25DLENBQUMsQ0FBQztpQkFDRCxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBYyxFQUFFO29CQUNuRCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLFdBQVc7b0JBQ1gsUUFBUTtpQkFDWCxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztDQUNKLENBQUE7QUF4SVksTUFBTTtJQUZsQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQU9qQixXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtxQ0FGRCxjQUFjO1FBQ1QsY0FBYztHQUwxQyxNQUFNLENBd0lsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xuaW1wb3J0IHtGaWx0ZXJRdWVyeX0gZnJvbSBcIm1vbmdvb3NlXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmltcG9ydCB7YnVmZmVyVG9TdHJlYW0sIGNvcHlTdHJlYW0sIGZpbGVUeXBlRnJvbUJ1ZmZlciwgc3RyZWFtVG9CdWZmZXJ9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBU1NFVF9EUklWRVIsIElBc3NldCwgSUFzc2V0RHJpdmVyLCBJQXNzZXRNZXRhLCBJRmlsZVR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xuaW1wb3J0IHtBc3NldFByb2Nlc3Nvcn0gZnJvbSBcIi4vYXNzZXQtcHJvY2Vzc29yXCI7XG5pbXBvcnQge0Fzc2V0fSBmcm9tIFwiLi9lbnRpdGllcy9hc3NldFwiO1xuaW1wb3J0IHtUZW1wQXNzZXR9IGZyb20gXCIuL2VudGl0aWVzL3RlbXAtYXNzZXRcIjtcblxuQGluamVjdGFibGUoKVxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxuZXhwb3J0IGNsYXNzIEFzc2V0cyB7XG5cbiAgICByZWFkb25seSBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFBhcnRpYWw8SUFzc2V0Pj47XG5cbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGFzc2V0UHJvY2Vzc29yOiBBc3NldFByb2Nlc3NvcixcbiAgICAgICAgICAgICAgICBAaW5qZWN0KEFTU0VUX0RSSVZFUikgcmVhZG9ubHkgZHJpdmVyOiBJQXNzZXREcml2ZXIpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29ubmVjdG9yLmRhdGFiYXNlPy5jb2xsZWN0aW9uKFwiYXNzZXRzLm1ldGFkYXRhXCIpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlKHN0cmVhbTogUmVhZGFibGUsIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwpOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBjb3B5U3RyZWFtKHN0cmVhbSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSk7XG4gICAgICAgIGxldCBmaWxlVHlwZSA9IHtleHQ6IFwiXCIsIG1pbWU6IGNvbnRlbnRUeXBlfSBhcyBJRmlsZVR5cGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlVHlwZSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVUeXBlLm1pbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGRldGVybWluZSBtaW1lIHR5cGU6ICR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGEgPSBtZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkKHVwbG9hZFN0cmVhbSwgZmlsZVR5cGUsIG1ldGFkYXRhKTtcbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEgPSBudWxsLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGxldCBmaWxlVHlwZSA9IHtleHQ6IFwiXCIsIG1pbWU6IGNvbnRlbnRUeXBlfSBhcyBJRmlsZVR5cGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlVHlwZSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVUeXBlLm1pbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZGV0ZXJtaW5lIG1pbWUgdHlwZWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FuJ3QgZGV0ZXJtaW5lIG1pbWUgdHlwZWAsIGUpO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFkYXRhID0gbWV0YWRhdGEgfHwge307XG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXNzZXRQcm9jZXNzb3IucHJvY2VzcyhidWZmZXIsIG1ldGFkYXRhLCBmaWxlVHlwZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZChidWZmZXJUb1N0cmVhbShidWZmZXIpLCBmaWxlVHlwZSwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlVXJsKHVybDogc3RyaW5nLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwpOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhIHx8IHt9O1xuICAgICAgICBtZXRhZGF0YS5maWxlbmFtZSA9IG1ldGFkYXRhLmZpbGVuYW1lIHx8IHVybDtcbiAgICAgICAgbWV0YWRhdGEudXJsID0gdXJsO1xuICAgICAgICBtZXRhZGF0YS51cGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IG9uZVdlZWsgPSAxMDAwICogMzYwMCAqIDI0ICogNztcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCB0aGlzLmZpbmQoe1wibWV0YWRhdGEudXJsXCI6IHVybCwgXCJtZXRhZGF0YS51cGxvYWRUaW1lXCI6IHskZ3Q6IG1ldGFkYXRhLnVwbG9hZFRpbWUgLSBvbmVXZWVrfX0pO1xuICAgICAgICBpZiAoYXNzZXQpIHJldHVybiBhc3NldDtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gKGF3YWl0IGF4aW9zKHsgdXJsLCByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIiB9KSkuZGF0YSBhcyBCdWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKGJ1ZmZlciwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIGRvd25sb2FkKHVybDogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGxldCBidWZmZXIgPSAoYXdhaXQgYXhpb3MoeyB1cmwsIHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiIH0pKS5kYXRhIGFzIEJ1ZmZlcjtcbiAgICAgICAgbGV0IGZpbGVUeXBlID0ge2V4dDogXCJcIiwgbWltZTogY29udGVudFR5cGV9IGFzIElGaWxlVHlwZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbGVUeXBlID0gYXdhaXQgZmlsZVR5cGVGcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghZmlsZVR5cGUubWltZSkge1xuICAgICAgICAgICAgICAgIHRocm93IGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBkZXRlcm1pbmUgbWltZSB0eXBlYCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IElBc3NldE1ldGEgPSB7XG4gICAgICAgICAgICBmaWxlbmFtZTogdXJsLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiAoZmlsZVR5cGUuZXh0IHx8IFwiXCIpLnRyaW0oKVxuICAgICAgICB9O1xuICAgICAgICBidWZmZXIgPSBhd2FpdCB0aGlzLmFzc2V0UHJvY2Vzc29yLnByb2Nlc3MoYnVmZmVyLCBtZXRhZGF0YSwgZmlsZVR5cGUpO1xuICAgICAgICByZXR1cm4gbmV3IFRlbXBBc3NldChidWZmZXIsIHVybCwgZmlsZVR5cGUubWltZSwgbWV0YWRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWQoaWQ6IHN0cmluZyB8IE9iamVjdElkKTogUHJvbWlzZTxJQXNzZXQ+IHtcbiAgICAgICAgcmV0dXJuICFpZCA/IG51bGwgOiB0aGlzLmZpbmQoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmQod2hlcmU6IEZpbHRlclF1ZXJ5PElBc3NldD4pOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xuICAgICAgICByZXR1cm4gIWRhdGEgPyBudWxsIDogbmV3IEFzc2V0KGRhdGEuX2lkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24sIHRoaXMuZHJpdmVyKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5kTWFueSh3aGVyZTogRmlsdGVyUXVlcnk8SUFzc2V0Pik6IFByb21pc2U8UmVhZG9ubHlBcnJheTxJQXNzZXQ+PiB7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuY29sbGVjdGlvbi5maW5kKHdoZXJlKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBjdXJzb3IudG9BcnJheSgpIHx8IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQ6IElBc3NldFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmICghaXRlbSkgY29udGludWU7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgQXNzZXQoaXRlbS5faWQsIGl0ZW0sIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5kcml2ZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZU1hbnkod2hlcmU6IEZpbHRlclF1ZXJ5PElBc3NldD4pOiBQcm9taXNlPFJlYWRvbmx5QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBhc3NldHMgPSBhd2FpdCB0aGlzLmZpbmRNYW55KHdoZXJlKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFzc2V0cy5tYXAoYSA9PiBhLnVubGluaygpKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMucmVhZChpZCk7XG4gICAgICAgIGlmICghYXNzZXQpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwbG9hZChzdHJlYW06IFJlYWRhYmxlLCBmaWxlVHlwZTogSUZpbGVUeXBlLCBtZXRhZGF0YTogSUFzc2V0TWV0YSk6IFByb21pc2U8SUFzc2V0PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZmlsZVR5cGUubWltZS50cmltKCk7XG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBkb3dubG9hZENvdW50OiAwLFxuICAgICAgICAgICAgZmlyc3REb3dubG9hZDogbnVsbCxcbiAgICAgICAgICAgIGxhc3REb3dubG9hZDogbnVsbFxuICAgICAgICB9LCBtZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgIG1ldGFkYXRhLmZpbGVuYW1lID0gbWV0YWRhdGEuZmlsZW5hbWUgfHwgbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcbiAgICAgICAgbWV0YWRhdGEuZXh0ZW5zaW9uID0gKGZpbGVUeXBlLmV4dCB8fCBcIlwiKS50cmltKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJQXNzZXQ+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGxvYWRlclN0cmVhbSA9IHRoaXMuZHJpdmVyLm9wZW5VcGxvYWRTdHJlYW0obWV0YWRhdGEuZmlsZW5hbWUsIHtcbiAgICAgICAgICAgICAgICBjaHVua1NpemVCeXRlczogMTA0ODU3NixcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogZmlsZVR5cGUubWltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdHJlYW0ucGlwZSh1cGxvYWRlclN0cmVhbSlcbiAgICAgICAgICAgICAgICAub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5vbihcImZpbmlzaFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gbmV3IEFzc2V0KHVwbG9hZGVyU3RyZWFtLmlkIGFzIE9iamVjdElkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogbWV0YWRhdGEuZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5kcml2ZXIpO1xuICAgICAgICAgICAgICAgICAgICBhc3NldC5zYXZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,83 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { createServer } from "http";
3
+ import { Server as SocketServer } from "socket.io";
4
+ import cors from "cors";
5
+ import express_ from "express";
6
+ import { inject, singleton } from "tsyringe";
7
+ import bodyParser from 'body-parser';
8
+ import { Configuration } from './configuration';
9
+ import { DI_CONTAINER } from '../common-types';
10
+ import { OpenApi } from './open-api';
11
+ import { JobManager } from './job-manager';
12
+ import { Fixtures } from './fixtures';
13
+ const express = express_;
14
+ let BackendProvider = class BackendProvider {
15
+ config;
16
+ container;
17
+ get io() {
18
+ this.ioServer = this.ioServer || new SocketServer(this.server, {
19
+ path: "/socket",
20
+ cors: {
21
+ credentials: true,
22
+ exposedHeaders: ["content-disposition"],
23
+ origin: (origin, callback) => {
24
+ callback(null, true);
25
+ }
26
+ }
27
+ });
28
+ return this.ioServer;
29
+ }
30
+ get express() {
31
+ if (!this.expressApp) {
32
+ this.expressApp = express();
33
+ this.expressApp.set("trust proxy", true);
34
+ this.expressApp.use(bodyParser.json({
35
+ limit: this.config.resolve("jsonLimit")
36
+ }));
37
+ this.expressApp.options("*", cors());
38
+ this.expressApp.get("/api-docs", (req, res) => {
39
+ this.openApi = this.openApi || this.container.get(OpenApi);
40
+ res.header("Content-Type", "application/json")
41
+ .status(200)
42
+ .end(this.openApi.apiDocsStr);
43
+ });
44
+ }
45
+ return this.expressApp;
46
+ }
47
+ get server() {
48
+ this.httpServer = this.httpServer || createServer(this.express);
49
+ return this.httpServer;
50
+ }
51
+ ioServer;
52
+ httpServer;
53
+ expressApp;
54
+ openApi;
55
+ constructor(config, container) {
56
+ this.config = config;
57
+ this.container = container;
58
+ }
59
+ async quickStart() {
60
+ const port = this.config.resolve("appPort");
61
+ const isWorker = this.config.resolve("isWorker");
62
+ if (isWorker || this.config.resolve("startWorker")) {
63
+ await this.container.resolve(JobManager).startProcessing();
64
+ if (isWorker) {
65
+ return;
66
+ }
67
+ }
68
+ if (this.config.resolve("fixtures")) {
69
+ const fixtures = this.container.resolve(Fixtures);
70
+ await fixtures.load();
71
+ }
72
+ return new Promise(resolve => {
73
+ this.server.listen(port, () => resolve(`Service listening on port ${port}!`));
74
+ });
75
+ }
76
+ };
77
+ BackendProvider = __decorate([
78
+ singleton(),
79
+ __param(1, inject(DI_CONTAINER)),
80
+ __metadata("design:paramtypes", [Configuration, Object])
81
+ ], BackendProvider);
82
+ export { BackendProvider };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFTLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLElBQUksWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLFFBQW1CLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFHbEIsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQTRDSDtJQUN1QjtJQTNDNUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDM0QsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUU7Z0JBQ0YsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGNBQWMsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUN2QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3pC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LENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFBO0FBakVZLGVBQWU7SUFEM0IsU0FBUyxFQUFFO0lBOENLLFdBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO3FDQURKLGFBQWE7R0E1Q2pDLGVBQWUsQ0FpRTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVTZXJ2ZXIsIFNlcnZlcn0gZnJvbSBcImh0dHBcIjtcclxuaW1wb3J0IHtTZXJ2ZXIgYXMgU29ja2V0U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCBjb3JzIGZyb20gXCJjb3JzXCI7XHJcbmltcG9ydCBleHByZXNzXywge0V4cHJlc3N9IGZyb20gXCJleHByZXNzXCI7XHJcbmltcG9ydCB7aW5qZWN0LCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHtESV9DT05UQUlORVIsIElEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tICcuLi9jb21tb24tdHlwZXMnO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gJy4vb3Blbi1hcGknO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gJy4vam9iLW1hbmFnZXInO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tICcuL2ZpeHR1cmVzJztcclxuXHJcbmNvbnN0IGV4cHJlc3MgPSBleHByZXNzXztcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgQmFja2VuZFByb3ZpZGVyIHtcclxuXHJcbiAgICBnZXQgaW8oKTogU29ja2V0U2VydmVyIHtcclxuICAgICAgICB0aGlzLmlvU2VydmVyID0gdGhpcy5pb1NlcnZlciB8fCBuZXcgU29ja2V0U2VydmVyKHRoaXMuc2VydmVyLCB7XHJcbiAgICAgICAgICAgIHBhdGg6IFwiL3NvY2tldFwiLFxyXG4gICAgICAgICAgICBjb3JzOiB7XHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiBbXCJjb250ZW50LWRpc3Bvc2l0aW9uXCJdLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luOiAob3JpZ2luLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9TZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cHJlc3MoKTogRXhwcmVzcyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3NBcHApIHtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwID0gZXhwcmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3NBcHAuc2V0KFwidHJ1c3QgcHJveHlcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcC51c2UoYm9keVBhcnNlci5qc29uKHtcclxuICAgICAgICAgICAgICAgIGxpbWl0OiB0aGlzLmNvbmZpZy5yZXNvbHZlKFwianNvbkxpbWl0XCIpXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwLm9wdGlvbnMoXCIqXCIsIGNvcnMoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcC5nZXQoXCIvYXBpLWRvY3NcIiwgKHJlcSwgcmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BcGkgPSB0aGlzLm9wZW5BcGkgfHwgdGhpcy5jb250YWluZXIuZ2V0KE9wZW5BcGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzLmhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcclxuICAgICAgICAgICAgICAgICAgICAuc3RhdHVzKDIwMClcclxuICAgICAgICAgICAgICAgICAgICAuZW5kKHRoaXMub3BlbkFwaS5hcGlEb2NzU3RyKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc0FwcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VydmVyKCk6IFNlcnZlciB7XHJcbiAgICAgICAgdGhpcy5odHRwU2VydmVyID0gdGhpcy5odHRwU2VydmVyIHx8IGNyZWF0ZVNlcnZlcih0aGlzLmV4cHJlc3MpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGlvU2VydmVyOiBTb2NrZXRTZXJ2ZXI7XHJcbiAgICBwcm90ZWN0ZWQgaHR0cFNlcnZlcjogU2VydmVyO1xyXG4gICAgcHJvdGVjdGVkIGV4cHJlc3NBcHA6IEV4cHJlc3M7XHJcbiAgICBwcm90ZWN0ZWQgb3BlbkFwaTogT3BlbkFwaTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0KERJX0NPTlRBSU5FUikgcHJvdGVjdGVkIGNvbnRhaW5lcjogSURlcGVuZGVuY3lDb250YWluZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBxdWlja1N0YXJ0KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJhcHBQb3J0XCIpO1xyXG4gICAgICAgIGNvbnN0IGlzV29ya2VyID0gdGhpcy5jb25maWcucmVzb2x2ZShcImlzV29ya2VyXCIpO1xyXG4gICAgICAgIGlmIChpc1dvcmtlciB8fCB0aGlzLmNvbmZpZy5yZXNvbHZlKFwic3RhcnRXb3JrZXJcIikpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIucmVzb2x2ZShKb2JNYW5hZ2VyKS5zdGFydFByb2Nlc3NpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGlzV29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlc29sdmUoXCJmaXh0dXJlc1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IHRoaXMuY29udGFpbmVyLnJlc29sdmUoRml4dHVyZXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBmaXh0dXJlcy5sb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIubGlzdGVuKHBvcnQsICgpID0+IHJlc29sdmUoYFNlcnZpY2UgbGlzdGVuaW5nIG9uIHBvcnQgJHtwb3J0fSFgKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,16 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, scoped, Lifecycle } from "tsyringe";
3
+ let CacheProcessor = class CacheProcessor {
4
+ async serialize(data) {
5
+ return data;
6
+ }
7
+ async deserialize(data) {
8
+ return data;
9
+ }
10
+ };
11
+ CacheProcessor = __decorate([
12
+ injectable(),
13
+ scoped(Lifecycle.ContainerScoped)
14
+ ], CacheProcessor);
15
+ export { CacheProcessor };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSWhELElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFDdkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUE7QUFSWSxjQUFjO0lBRjFCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLGNBQWMsQ0FRMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNjb3BlZCwgTGlmZWN5Y2xlfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgQ2FjaGVQcm9jZXNzb3Ige1xyXG4gICAgYXN5bmMgc2VyaWFsaXplKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVzZXJpYWxpemUoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxufVxyXG4iXX0=