@stemy/backend 2.6.1 → 2.7.3

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 (117) hide show
  1. package/README.md +2 -2
  2. package/bundles/stemy-backend.umd.js +5553 -5465
  3. package/bundles/stemy-backend.umd.js.map +1 -1
  4. package/bundles/stemy-backend.umd.min.js +1 -1
  5. package/bundles/stemy-backend.umd.min.js.map +1 -1
  6. package/common-types.d.ts +226 -214
  7. package/esm2015/common-types.js +18 -18
  8. package/esm2015/public_api.js +338 -338
  9. package/esm2015/rest-controllers/assets.controller.js +116 -116
  10. package/esm2015/rest-controllers/auth.controller.js +75 -75
  11. package/esm2015/rest-controllers/gallery.controller.js +37 -37
  12. package/esm2015/rest-controllers/progresses.controller.js +57 -57
  13. package/esm2015/rest-middlewares/container.middleware.js +32 -32
  14. package/esm2015/rest-middlewares/error-handler.middleware.js +83 -83
  15. package/esm2015/rest-middlewares/language.middleware.js +28 -28
  16. package/esm2015/rest-middlewares/request-ended.middleware.js +25 -25
  17. package/esm2015/rest-middlewares/request-started.middleware.js +24 -24
  18. package/esm2015/rest-openapi.js +44 -44
  19. package/esm2015/services/asset-processor.js +101 -101
  20. package/esm2015/services/asset-resolver.js +53 -53
  21. package/esm2015/services/assets.js +110 -110
  22. package/esm2015/services/backend-provider.js +32 -32
  23. package/esm2015/services/cache-processor.js +34 -34
  24. package/esm2015/services/cache.js +94 -94
  25. package/esm2015/services/configuration.js +55 -55
  26. package/esm2015/services/endpoint-provider.js +29 -29
  27. package/esm2015/services/entities/asset.js +166 -112
  28. package/esm2015/services/entities/lazy-asset.js +93 -93
  29. package/esm2015/services/entities/progress.js +181 -181
  30. package/esm2015/services/fixtures.js +45 -45
  31. package/esm2015/services/gallery-cache.js +36 -36
  32. package/esm2015/services/gallery-image.js +48 -48
  33. package/esm2015/services/gallery.js +138 -138
  34. package/esm2015/services/id-generator.js +63 -63
  35. package/esm2015/services/job-manager.js +203 -203
  36. package/esm2015/services/lazy-assets.js +74 -74
  37. package/esm2015/services/mail-sender.js +59 -59
  38. package/esm2015/services/memory-cache.js +84 -84
  39. package/esm2015/services/mongo-connector.js +61 -61
  40. package/esm2015/services/progresses.js +91 -91
  41. package/esm2015/services/template-renderer.js +89 -89
  42. package/esm2015/services/translation-provider.js +31 -31
  43. package/esm2015/services/translator.js +85 -85
  44. package/esm2015/services/user-manager.js +47 -47
  45. package/esm2015/socket-controllers/progress.controller.js +82 -82
  46. package/esm2015/socket-middlewares/compression.middleware.js +19 -19
  47. package/esm2015/static.js +33 -33
  48. package/esm2015/stemy-backend.js +4 -4
  49. package/esm2015/utilities/di-container.js +84 -84
  50. package/esm2015/utilities/lazy-asset-generator.js +40 -40
  51. package/esm2015/utilities/tree.js +111 -111
  52. package/esm2015/utils.js +618 -601
  53. package/esm2015/validators.js +51 -51
  54. package/fesm2015/stemy-backend.js +3656 -3585
  55. package/fesm2015/stemy-backend.js.map +1 -1
  56. package/package.json +1 -1
  57. package/public_api.d.ts +33 -33
  58. package/rest-controllers/assets.controller.d.ts +16 -16
  59. package/rest-controllers/auth.controller.d.ts +14 -14
  60. package/rest-controllers/gallery.controller.d.ts +7 -7
  61. package/rest-controllers/progresses.controller.d.ts +9 -9
  62. package/rest-middlewares/container.middleware.d.ts +8 -8
  63. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  64. package/rest-middlewares/language.middleware.d.ts +8 -8
  65. package/rest-middlewares/request-ended.middleware.d.ts +5 -5
  66. package/rest-middlewares/request-started.middleware.d.ts +5 -5
  67. package/rest-openapi.d.ts +3 -3
  68. package/services/asset-processor.d.ts +12 -12
  69. package/services/asset-resolver.d.ts +9 -9
  70. package/services/assets.d.ts +19 -19
  71. package/services/backend-provider.d.ts +11 -11
  72. package/services/cache-processor.d.ts +4 -4
  73. package/services/cache.d.ts +23 -23
  74. package/services/configuration.d.ts +10 -10
  75. package/services/endpoint-provider.d.ts +4 -4
  76. package/services/entities/asset.d.ts +25 -23
  77. package/services/entities/lazy-asset.d.ts +29 -29
  78. package/services/entities/progress.d.ts +49 -49
  79. package/services/fixtures.d.ts +6 -6
  80. package/services/gallery-cache.d.ts +9 -9
  81. package/services/gallery-image.d.ts +11 -11
  82. package/services/gallery.d.ts +13 -13
  83. package/services/id-generator.d.ts +11 -11
  84. package/services/job-manager.d.ts +27 -27
  85. package/services/lazy-assets.d.ts +19 -19
  86. package/services/mail-sender.d.ts +20 -20
  87. package/services/memory-cache.d.ts +10 -10
  88. package/services/mongo-connector.d.ts +14 -14
  89. package/services/progresses.d.ts +18 -18
  90. package/services/template-renderer.d.ts +14 -14
  91. package/services/translation-provider.d.ts +10 -10
  92. package/services/translator.d.ts +15 -15
  93. package/services/user-manager.d.ts +6 -6
  94. package/socket-controllers/progress.controller.d.ts +10 -10
  95. package/socket-middlewares/compression.middleware.d.ts +4 -4
  96. package/static.d.ts +2 -2
  97. package/stemy-backend.d.ts +4 -4
  98. package/stemy-backend.metadata.json +1 -1
  99. package/utilities/di-container.d.ts +43 -43
  100. package/utilities/lazy-asset-generator.d.ts +15 -15
  101. package/utilities/tree.d.ts +14 -14
  102. package/utils.d.ts +76 -73
  103. package/validators.d.ts +7 -7
  104. package/di-container.d.ts +0 -40
  105. package/esm2015/di-container.js +0 -75
  106. package/esm2015/models/lazy-asset.js +0 -12
  107. package/esm2015/models/progress.js +0 -23
  108. package/esm2015/rest-middlewares/injector.middleware.js +0 -26
  109. package/esm2015/services/lazy-asset-helper.js +0 -74
  110. package/esm2015/services/logger.js +0 -14
  111. package/esm2015/services/progress-helper.js +0 -168
  112. package/models/lazy-asset.d.ts +0 -45
  113. package/models/progress.d.ts +0 -56
  114. package/rest-middlewares/injector.middleware.d.ts +0 -8
  115. package/services/lazy-asset-helper.d.ts +0 -15
  116. package/services/logger.d.ts +0 -2
  117. package/services/progress-helper.d.ts +0 -37
@@ -1,110 +1,110 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
- import { injectable, Lifecycle, scoped } from "tsyringe";
20
- import { fromStream } from "file-type";
21
- import { ObjectId } from "bson";
22
- import { bufferToStream, copyStream } from "../utils";
23
- import { MongoConnector } from "./mongo-connector";
24
- import { AssetProcessor } from "./asset-processor";
25
- import { Asset } from "./entities/asset";
26
- let Assets = class Assets {
27
- constructor(connector, assetProcessor) {
28
- var _a;
29
- this.connector = connector;
30
- this.assetProcessor = assetProcessor;
31
- this.bucket = connector.bucket;
32
- this.collection = (_a = connector.database) === null || _a === void 0 ? void 0 : _a.collection("assets.files");
33
- }
34
- write(stream, contentType = null, metadata = null) {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- let extension = null;
37
- const fileTypeStream = copyStream(stream);
38
- const uploadStream = copyStream(stream);
39
- try {
40
- const fileType = yield fromStream(fileTypeStream);
41
- contentType = fileType.mime;
42
- extension = fileType.ext;
43
- }
44
- catch (e) {
45
- if (!contentType) {
46
- throw `Can't determine content type`;
47
- }
48
- console.log(`Can't determine content type`, e);
49
- }
50
- contentType = contentType.trim();
51
- extension = (extension || "").trim();
52
- metadata = Object.assign({
53
- extension,
54
- downloadCount: 0,
55
- firstDownload: null,
56
- lastDownload: null
57
- }, metadata || {});
58
- metadata.filename = metadata.filename || new ObjectId().toHexString();
59
- return new Promise(((resolve, reject) => {
60
- const uploaderStream = this.bucket.openUploadStream(metadata.filename);
61
- uploadStream.pipe(uploaderStream)
62
- .on("error", error => {
63
- reject(error.message || error);
64
- })
65
- .on("finish", () => {
66
- const asset = new Asset(uploaderStream.id, metadata.filename, contentType, metadata, this.bucket, this.collection);
67
- this.collection.updateOne({ _id: uploaderStream.id }, { $set: asset.toJSON() }).then(() => {
68
- resolve(asset);
69
- }, error => {
70
- reject(error.message || error);
71
- });
72
- });
73
- }));
74
- });
75
- }
76
- writeBuffer(buffer, metadata = null, contentType = null) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- contentType = yield AssetProcessor.getMimeType(buffer, contentType);
79
- metadata = metadata || {};
80
- buffer = yield this.assetProcessor.process(buffer, metadata, contentType);
81
- return this.write(bufferToStream(buffer), contentType, metadata);
82
- });
83
- }
84
- read(id) {
85
- return __awaiter(this, void 0, void 0, function* () {
86
- return this.find({ _id: new ObjectId(id) });
87
- });
88
- }
89
- find(where) {
90
- return __awaiter(this, void 0, void 0, function* () {
91
- const data = yield this.collection.findOne(where);
92
- return !data ? null : new Asset(data._id, data.filename, data.contentType, data.metadata, this.bucket, this.collection);
93
- });
94
- }
95
- unlink(id) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- const asset = yield this.read(id);
98
- if (!asset)
99
- return null;
100
- return asset.unlink();
101
- });
102
- }
103
- };
104
- Assets = __decorate([
105
- injectable(),
106
- scoped(Lifecycle.ContainerScoped),
107
- __metadata("design:paramtypes", [MongoConnector, AssetProcessor])
108
- ], Assets);
109
- export { Assets };
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSTlCLE9BQU8sRUFBQyxjQUFjLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXBELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0lBSTFCLE1BQU0sU0FBTixNQUFNO0lBS2YsWUFBcUIsU0FBeUIsRUFBVyxjQUE4Qjs7UUFBbEUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDbkYsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLFNBQUcsU0FBUyxDQUFDLFFBQVEsMENBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFSyxLQUFLLENBQUMsTUFBZ0IsRUFBRSxjQUFzQixJQUFJLEVBQUUsV0FBdUIsSUFBSTs7WUFDakYsSUFBSSxTQUFTLEdBQVcsSUFBSSxDQUFDO1lBQzdCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSTtnQkFDQSxNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO2FBQzVCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDZCxNQUFNLDhCQUE4QixDQUFDO2lCQUN4QztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxTQUFTLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3JCLFNBQVM7Z0JBQ1QsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixZQUFZLEVBQUUsSUFBSTthQUNyQixFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuQixRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RSxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RSxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztxQkFDNUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBYyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDL0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDbEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7b0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7S0FBQTtJQUVLLFdBQVcsQ0FBQyxNQUFjLEVBQUUsV0FBdUIsSUFBSSxFQUFFLGNBQXNCLElBQUk7O1lBQ3JGLFdBQVcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDMUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEVBQVU7O1lBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEtBQTBCOztZQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1SCxDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsRUFBVTs7WUFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7S0FBQTtDQUNKLENBQUE7QUF2RVksTUFBTTtJQUZsQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztxQ0FNRSxjQUFjLEVBQTJCLGNBQWM7R0FMOUUsTUFBTSxDQXVFbEI7U0F2RVksTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHtmcm9tU3RyZWFtfSBmcm9tIFwiZmlsZS10eXBlXCI7XG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHtDb2xsZWN0aW9uLCBHcmlkRlNCdWNrZXR9IGZyb20gXCJtb25nb2RiXCI7XG5pbXBvcnQge0ZpbHRlclF1ZXJ5fSBmcm9tIFwibW9uZ29vc2VcIjtcblxuaW1wb3J0IHtidWZmZXJUb1N0cmVhbSwgY29weVN0cmVhbX0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge0lBc3NldCwgSUFzc2V0TWV0YX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XG5pbXBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9hc3NldC1wcm9jZXNzb3JcIjtcbmltcG9ydCB7QXNzZXR9IGZyb20gXCIuL2VudGl0aWVzL2Fzc2V0XCI7XG5cbkBpbmplY3RhYmxlKClcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcbmV4cG9ydCBjbGFzcyBBc3NldHMge1xuXG4gICAgcmVhZG9ubHkgYnVja2V0OiBHcmlkRlNCdWNrZXQ7XG4gICAgcmVhZG9ubHkgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbm5lY3RvcjogTW9uZ29Db25uZWN0b3IsIHJlYWRvbmx5IGFzc2V0UHJvY2Vzc29yOiBBc3NldFByb2Nlc3Nvcikge1xuICAgICAgICB0aGlzLmJ1Y2tldCA9IGNvbm5lY3Rvci5idWNrZXQ7XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbm5lY3Rvci5kYXRhYmFzZT8uY29sbGVjdGlvbihcImFzc2V0cy5maWxlc1wiKTtcbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZShzdHJlYW06IFJlYWRhYmxlLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCwgbWV0YWRhdGE6IElBc3NldE1ldGEgPSBudWxsKTogUHJvbWlzZTxJQXNzZXQ+IHtcbiAgICAgICAgbGV0IGV4dGVuc2lvbjogc3RyaW5nID0gbnVsbDtcbiAgICAgICAgY29uc3QgZmlsZVR5cGVTdHJlYW0gPSBjb3B5U3RyZWFtKHN0cmVhbSk7XG4gICAgICAgIGNvbnN0IHVwbG9hZFN0cmVhbSA9IGNvcHlTdHJlYW0oc3RyZWFtKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVUeXBlID0gYXdhaXQgZnJvbVN0cmVhbShmaWxlVHlwZVN0cmVhbSk7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGZpbGVUeXBlLm1pbWU7XG4gICAgICAgICAgICBleHRlbnNpb24gPSBmaWxlVHlwZS5leHQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQgdHlwZWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQgdHlwZWAsIGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUudHJpbSgpO1xuICAgICAgICBleHRlbnNpb24gPSAoZXh0ZW5zaW9uIHx8IFwiXCIpLnRyaW0oKTtcbiAgICAgICAgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGV4dGVuc2lvbixcbiAgICAgICAgICAgIGRvd25sb2FkQ291bnQ6IDAsXG4gICAgICAgICAgICBmaXJzdERvd25sb2FkOiBudWxsLFxuICAgICAgICAgICAgbGFzdERvd25sb2FkOiBudWxsXG4gICAgICAgIH0sIG1ldGFkYXRhIHx8IHt9KTtcbiAgICAgICAgbWV0YWRhdGEuZmlsZW5hbWUgPSBtZXRhZGF0YS5maWxlbmFtZSB8fCBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SUFzc2V0PigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkZXJTdHJlYW0gPSB0aGlzLmJ1Y2tldC5vcGVuVXBsb2FkU3RyZWFtKG1ldGFkYXRhLmZpbGVuYW1lKTtcbiAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5waXBlKHVwbG9hZGVyU3RyZWFtKVxuICAgICAgICAgICAgICAgIC5vbihcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLm9uKFwiZmluaXNoXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBuZXcgQXNzZXQodXBsb2FkZXJTdHJlYW0uaWQgYXMgT2JqZWN0SWQsIG1ldGFkYXRhLmZpbGVuYW1lLCBjb250ZW50VHlwZSwgbWV0YWRhdGEsIHRoaXMuYnVja2V0LCB0aGlzLmNvbGxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHVwbG9hZGVyU3RyZWFtLmlkfSwgeyRzZXQ6IGFzc2V0LnRvSlNPTigpfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlQnVmZmVyKGJ1ZmZlcjogQnVmZmVyLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwsIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxJQXNzZXQ+IHtcbiAgICAgICAgY29udGVudFR5cGUgPSBhd2FpdCBBc3NldFByb2Nlc3Nvci5nZXRNaW1lVHlwZShidWZmZXIsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgbWV0YWRhdGEgPSBtZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgYnVmZmVyID0gYXdhaXQgdGhpcy5hc3NldFByb2Nlc3Nvci5wcm9jZXNzKGJ1ZmZlciwgbWV0YWRhdGEsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGUoYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSwgY29udGVudFR5cGUsIG1ldGFkYXRhKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkKGlkOiBzdHJpbmcpOiBQcm9taXNlPElBc3NldD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJQXNzZXQ+KTogUHJvbWlzZTxJQXNzZXQ+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5maW5kT25lKHdoZXJlKTtcbiAgICAgICAgcmV0dXJuICFkYXRhID8gbnVsbCA6IG5ldyBBc3NldChkYXRhLl9pZCwgZGF0YS5maWxlbmFtZSwgZGF0YS5jb250ZW50VHlwZSwgZGF0YS5tZXRhZGF0YSwgdGhpcy5idWNrZXQsIHRoaXMuY29sbGVjdGlvbik7XG4gICAgfVxuXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IHRoaXMucmVhZChpZCk7XG4gICAgICAgIGlmICghYXNzZXQpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XG4gICAgfVxufVxuIl19
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ import { injectable, Lifecycle, scoped } from "tsyringe";
20
+ import { fromStream } from "file-type";
21
+ import { ObjectId } from "bson";
22
+ import { bufferToStream, copyStream } from "../utils";
23
+ import { MongoConnector } from "./mongo-connector";
24
+ import { AssetProcessor } from "./asset-processor";
25
+ import { Asset } from "./entities/asset";
26
+ let Assets = class Assets {
27
+ constructor(connector, assetProcessor) {
28
+ var _a;
29
+ this.connector = connector;
30
+ this.assetProcessor = assetProcessor;
31
+ this.bucket = connector.bucket;
32
+ this.collection = (_a = connector.database) === null || _a === void 0 ? void 0 : _a.collection("assets.files");
33
+ }
34
+ write(stream, contentType = null, metadata = null) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ let extension = null;
37
+ const fileTypeStream = copyStream(stream);
38
+ const uploadStream = copyStream(stream);
39
+ try {
40
+ const fileType = yield fromStream(fileTypeStream);
41
+ contentType = fileType.mime;
42
+ extension = fileType.ext;
43
+ }
44
+ catch (e) {
45
+ if (!contentType) {
46
+ throw `Can't determine content type`;
47
+ }
48
+ console.log(`Can't determine content type`, e);
49
+ }
50
+ contentType = contentType.trim();
51
+ extension = (extension || "").trim();
52
+ metadata = Object.assign({
53
+ extension,
54
+ downloadCount: 0,
55
+ firstDownload: null,
56
+ lastDownload: null
57
+ }, metadata || {});
58
+ metadata.filename = metadata.filename || new ObjectId().toHexString();
59
+ return new Promise(((resolve, reject) => {
60
+ const uploaderStream = this.bucket.openUploadStream(metadata.filename);
61
+ uploadStream.pipe(uploaderStream)
62
+ .on("error", error => {
63
+ reject(error.message || error);
64
+ })
65
+ .on("finish", () => {
66
+ const asset = new Asset(uploaderStream.id, metadata.filename, contentType, metadata, this.bucket, this.collection);
67
+ this.collection.updateOne({ _id: uploaderStream.id }, { $set: asset.toJSON() }).then(() => {
68
+ resolve(asset);
69
+ }, error => {
70
+ reject(error.message || error);
71
+ });
72
+ });
73
+ }));
74
+ });
75
+ }
76
+ writeBuffer(buffer, metadata = null, contentType = null) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ contentType = yield AssetProcessor.getMimeType(buffer, contentType);
79
+ metadata = metadata || {};
80
+ buffer = yield this.assetProcessor.process(buffer, metadata, contentType);
81
+ return this.write(bufferToStream(buffer), contentType, metadata);
82
+ });
83
+ }
84
+ read(id) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ return this.find({ _id: new ObjectId(id) });
87
+ });
88
+ }
89
+ find(where) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const data = yield this.collection.findOne(where);
92
+ return !data ? null : new Asset(data._id, data.filename, data.contentType, data.metadata, this.bucket, this.collection);
93
+ });
94
+ }
95
+ unlink(id) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ const asset = yield this.read(id);
98
+ if (!asset)
99
+ return null;
100
+ return asset.unlink();
101
+ });
102
+ }
103
+ };
104
+ Assets = __decorate([
105
+ injectable(),
106
+ scoped(Lifecycle.ContainerScoped),
107
+ __metadata("design:paramtypes", [MongoConnector, AssetProcessor])
108
+ ], Assets);
109
+ export { Assets };
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVyQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSTlCLE9BQU8sRUFBQyxjQUFjLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXBELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0lBSTFCLE1BQU0sU0FBTixNQUFNO0lBS2YsWUFBcUIsU0FBeUIsRUFBVyxjQUE4Qjs7UUFBbEUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDbkYsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLFNBQUcsU0FBUyxDQUFDLFFBQVEsMENBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFSyxLQUFLLENBQUMsTUFBZ0IsRUFBRSxjQUFzQixJQUFJLEVBQUUsV0FBdUIsSUFBSTs7WUFDakYsSUFBSSxTQUFTLEdBQVcsSUFBSSxDQUFDO1lBQzdCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSTtnQkFDQSxNQUFNLFFBQVEsR0FBRyxN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Q0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEtBQTBCOztZQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1SCxDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsRUFBVTs7WUFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7S0FBQTtDQUNKLENBQUE7QUF2RVksTUFBTTtJQUZsQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztxQ0FNRSxjQUFjLEVBQTJCLGNBQWM7R0FMOUUsTUFBTSxDQXVFbEI7U0F2RVksTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2Zyb21TdHJlYW19IGZyb20gXCJmaWxlLXR5cGVcIjtcclxuaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0NvbGxlY3Rpb24sIEdyaWRGU0J1Y2tldH0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtGaWx0ZXJRdWVyeX0gZnJvbSBcIm1vbmdvb3NlXCI7XHJcblxyXG5pbXBvcnQge2J1ZmZlclRvU3RyZWFtLCBjb3B5U3RyZWFtfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldE1ldGF9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7QXNzZXRQcm9jZXNzb3J9IGZyb20gXCIuL2Fzc2V0LXByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0Fzc2V0fSBmcm9tIFwiLi9lbnRpdGllcy9hc3NldFwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBBc3NldHMge1xyXG5cclxuICAgIHJlYWRvbmx5IGJ1Y2tldDogR3JpZEZTQnVja2V0O1xyXG4gICAgcmVhZG9ubHkgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCByZWFkb25seSBhc3NldFByb2Nlc3NvcjogQXNzZXRQcm9jZXNzb3IpIHtcclxuICAgICAgICB0aGlzLmJ1Y2tldCA9IGNvbm5lY3Rvci5idWNrZXQ7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29ubmVjdG9yLmRhdGFiYXNlPy5jb2xsZWN0aW9uKFwiYXNzZXRzLmZpbGVzXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdyaXRlKHN0cmVhbTogUmVhZGFibGUsIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsLCBtZXRhZGF0YTogSUFzc2V0TWV0YSA9IG51bGwpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIGxldCBleHRlbnNpb246IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgZmlsZVR5cGVTdHJlYW0gPSBjb3B5U3RyZWFtKHN0cmVhbSk7XHJcbiAgICAgICAgY29uc3QgdXBsb2FkU3RyZWFtID0gY29weVN0cmVhbShzdHJlYW0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVUeXBlID0gYXdhaXQgZnJvbVN0cmVhbShmaWxlVHlwZVN0cmVhbSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gZmlsZVR5cGUubWltZTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gZmlsZVR5cGUuZXh0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgYENhbid0IGRldGVybWluZSBjb250ZW50IHR5cGVgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBkZXRlcm1pbmUgY29udGVudCB0eXBlYCwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUudHJpbSgpO1xyXG4gICAgICAgIGV4dGVuc2lvbiA9IChleHRlbnNpb24gfHwgXCJcIikudHJpbSgpO1xyXG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbixcclxuICAgICAgICAgICAgZG93bmxvYWRDb3VudDogMCxcclxuICAgICAgICAgICAgZmlyc3REb3dubG9hZDogbnVsbCxcclxuICAgICAgICAgICAgbGFzdERvd25sb2FkOiBudWxsXHJcbiAgICAgICAgfSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIG1ldGFkYXRhLmZpbGVuYW1lID0gbWV0YWRhdGEuZmlsZW5hbWUgfHwgbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SUFzc2V0PigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1cGxvYWRlclN0cmVhbSA9IHRoaXMuYnVja2V0Lm9wZW5VcGxvYWRTdHJlYW0obWV0YWRhdGEuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB1cGxvYWRTdHJlYW0ucGlwZSh1cGxvYWRlclN0cmVhbSlcclxuICAgICAgICAgICAgICAgIC5vbihcImVycm9yXCIsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IubWVzc2FnZSB8fCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLm9uKFwiZmluaXNoXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NldCA9IG5ldyBBc3NldCh1cGxvYWRlclN0cmVhbS5pZCBhcyBPYmplY3RJZCwgbWV0YWRhdGEuZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBtZXRhZGF0YSwgdGhpcy5idWNrZXQsIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB1cGxvYWRlclN0cmVhbS5pZH0sIHskc2V0OiBhc3NldC50b0pTT04oKX0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFzc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgbWV0YWRhdGE6IElBc3NldE1ldGEgPSBudWxsLCBjb250ZW50VHlwZTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBhd2FpdCBBc3NldFByb2Nlc3Nvci5nZXRNaW1lVHlwZShidWZmZXIsIGNvbnRlbnRUeXBlKTtcclxuICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXNzZXRQcm9jZXNzb3IucHJvY2VzcyhidWZmZXIsIG1ldGFkYXRhLCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGUoYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSwgY29udGVudFR5cGUsIG1ldGFkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWFkKGlkOiBzdHJpbmcpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmQoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbmQod2hlcmU6IEZpbHRlclF1ZXJ5PElBc3NldD4pOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZE9uZSh3aGVyZSk7XHJcbiAgICAgICAgcmV0dXJuICFkYXRhID8gbnVsbCA6IG5ldyBBc3NldChkYXRhLl9pZCwgZGF0YS5maWxlbmFtZSwgZGF0YS5jb250ZW50VHlwZSwgZGF0YS5tZXRhZGF0YSwgdGhpcy5idWNrZXQsIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5yZWFkKGlkKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,32 +1,32 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { createServer } from "http";
11
- import express_ from "express";
12
- import { injectable, singleton } from "tsyringe";
13
- import socket_io from "socket.io";
14
- const express = express_;
15
- const socketIO = socket_io;
16
- let BackendProvider = class BackendProvider {
17
- constructor() {
18
- this.express = express();
19
- this.server = createServer(this.express);
20
- }
21
- get io() {
22
- this.ioServer = this.ioServer || socketIO(this.server, { path: "/socket" });
23
- return this.ioServer;
24
- }
25
- };
26
- BackendProvider = __decorate([
27
- injectable(),
28
- singleton(),
29
- __metadata("design:paramtypes", [])
30
- ], BackendProvider);
31
- export { BackendProvider };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQVMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxRQUFtQixNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLFNBQW1DLE1BQU0sV0FBVyxDQUFDO0FBRTVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUN6QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFJZCxlQUFlLFNBQWYsZUFBZTtJQVl4QjtRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFWRCxJQUFJLEVBQUU7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztDQVFKLENBQUE7QUFoQlksZUFBZTtJQUYzQixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7O0dBQ0MsZUFBZSxDQWdCM0I7U0FoQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlU2VydmVyLCBTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgZXhwcmVzc18sIHtFeHByZXNzfSBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHtpbmplY3RhYmxlLCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHNvY2tldF9pbywge1NlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcblxuY29uc3QgZXhwcmVzcyA9IGV4cHJlc3NfO1xuY29uc3Qgc29ja2V0SU8gPSBzb2NrZXRfaW87XG5cbkBpbmplY3RhYmxlKClcbkBzaW5nbGV0b24oKVxuZXhwb3J0IGNsYXNzIEJhY2tlbmRQcm92aWRlciB7XG5cbiAgICByZWFkb25seSBleHByZXNzOiBFeHByZXNzO1xuICAgIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyO1xuXG4gICAgZ2V0IGlvKCk6IFNvY2tldFNlcnZlciB7XG4gICAgICAgIHRoaXMuaW9TZXJ2ZXIgPSB0aGlzLmlvU2VydmVyIHx8IHNvY2tldElPKHRoaXMuc2VydmVyLCB7cGF0aDogXCIvc29ja2V0XCJ9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9TZXJ2ZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlvU2VydmVyOiBTb2NrZXRTZXJ2ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5leHByZXNzID0gZXhwcmVzcygpO1xuICAgICAgICB0aGlzLnNlcnZlciA9IGNyZWF0ZVNlcnZlcih0aGlzLmV4cHJlc3MpO1xuICAgIH1cbn1cbiJdfQ==
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { createServer } from "http";
11
+ import express_ from "express";
12
+ import { injectable, singleton } from "tsyringe";
13
+ import socket_io from "socket.io";
14
+ const express = express_;
15
+ const socketIO = socket_io;
16
+ let BackendProvider = class BackendProvider {
17
+ constructor() {
18
+ this.express = express();
19
+ this.server = createServer(this.express);
20
+ }
21
+ get io() {
22
+ this.ioServer = this.ioServer || socketIO(this.server, { path: "/socket" });
23
+ return this.ioServer;
24
+ }
25
+ };
26
+ BackendProvider = __decorate([
27
+ injectable(),
28
+ singleton(),
29
+ __metadata("design:paramtypes", [])
30
+ ], BackendProvider);
31
+ export { BackendProvider };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQVMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxRQUFtQixNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLFNBQW1DLE1BQU0sV0FBVyxDQUFDO0FBRTVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUN6QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFJZCxlQUFlLFNBQWYsZUFBZTtJQVl4QjtRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFWRCxJQUFJLEVBQUU7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztDQVFKLENBQUE7QUFoQlksZUFBZTtJQUYzQixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7O0dBQ0MsZUFBZSxDQWdCM0I7U0FoQlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlU2VydmVyLCBTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XHJcbmltcG9ydCBleHByZXNzXywge0V4cHJlc3N9IGZyb20gXCJleHByZXNzXCI7XHJcbmltcG9ydCB7aW5qZWN0YWJsZSwgc2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHNvY2tldF9pbywge1NlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuXHJcbmNvbnN0IGV4cHJlc3MgPSBleHByZXNzXztcclxuY29uc3Qgc29ja2V0SU8gPSBzb2NrZXRfaW87XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgQmFja2VuZFByb3ZpZGVyIHtcclxuXHJcbiAgICByZWFkb25seSBleHByZXNzOiBFeHByZXNzO1xyXG4gICAgcmVhZG9ubHkgc2VydmVyOiBTZXJ2ZXI7XHJcblxyXG4gICAgZ2V0IGlvKCk6IFNvY2tldFNlcnZlciB7XHJcbiAgICAgICAgdGhpcy5pb1NlcnZlciA9IHRoaXMuaW9TZXJ2ZXIgfHwgc29ja2V0SU8odGhpcy5zZXJ2ZXIsIHtwYXRoOiBcIi9zb2NrZXRcIn0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlvU2VydmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpb1NlcnZlcjogU29ja2V0U2VydmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZXhwcmVzcyA9IGV4cHJlc3MoKTtcclxuICAgICAgICB0aGlzLnNlcnZlciA9IGNyZWF0ZVNlcnZlcih0aGlzLmV4cHJlc3MpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,34 +1,34 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
- return new (P || (P = Promise))(function (resolve, reject) {
10
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
- step((generator = generator.apply(thisArg, _arguments || [])).next());
14
- });
15
- };
16
- import { injectable, scoped, Lifecycle } from "tsyringe";
17
- let CacheProcessor = class CacheProcessor {
18
- serialize(data) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- return data;
21
- });
22
- }
23
- deserialize(data) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- return data;
26
- });
27
- }
28
- };
29
- CacheProcessor = __decorate([
30
- injectable(),
31
- scoped(Lifecycle.ContainerScoped)
32
- ], CacheProcessor);
33
- export { CacheProcessor };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7SUFJMUMsY0FBYyxTQUFkLGNBQWM7SUFDakIsU0FBUyxDQUFDLElBQVM7O1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLFdBQVcsQ0FBQyxJQUFTOztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7Q0FDSixDQUFBO0FBUlksY0FBYztJQUYxQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztHQUNyQixjQUFjLENBUTFCO1NBUlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgc2NvcGVkLCBMaWZlY3ljbGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xuXG5AaW5qZWN0YWJsZSgpXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXG5leHBvcnQgY2xhc3MgQ2FjaGVQcm9jZXNzb3Ige1xuICAgIGFzeW5jIHNlcmlhbGl6ZShkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBhc3luYyBkZXNlcmlhbGl6ZShkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG4iXX0=
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
16
+ import { injectable, scoped, Lifecycle } from "tsyringe";
17
+ let CacheProcessor = class CacheProcessor {
18
+ serialize(data) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ return data;
21
+ });
22
+ }
23
+ deserialize(data) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ return data;
26
+ });
27
+ }
28
+ };
29
+ CacheProcessor = __decorate([
30
+ injectable(),
31
+ scoped(Lifecycle.ContainerScoped)
32
+ ], CacheProcessor);
33
+ export { CacheProcessor };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUtcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7SUFJMUMsY0FBYyxTQUFkLGNBQWM7SUFDakIsU0FBUyxDQUFDLElBQVM7O1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLFdBQVcsQ0FBQyxJQUFTOztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7Q0FDSixDQUFBO0FBUlksY0FBYztJQUYxQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztHQUNyQixjQUFjLENBUTFCO1NBUlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgc2NvcGVkLCBMaWZlY3ljbGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBDYWNoZVByb2Nlc3NvciB7XHJcbiAgICBhc3luYyBzZXJpYWxpemUoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZXNlcmlhbGl6ZShkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,94 +1,94 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
- import { injectable, Lifecycle, scoped } from "tsyringe";
20
- import { MongoConnector } from "./mongo-connector";
21
- import { Configuration } from "./configuration";
22
- import { CacheProcessor } from "./cache-processor";
23
- let Cache = class Cache {
24
- constructor(connector, config, cacheProcessor) {
25
- this.connector = connector;
26
- this.config = config;
27
- this.cacheProcessor = cacheProcessor;
28
- }
29
- prepare() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- if (this.collection)
32
- return;
33
- if (!this.connector.database) {
34
- throw new Error(`You can't use cache without mongo connection!`);
35
- }
36
- this.collection = this.connector.database.collection(this.config.resolve("cacheCollection"));
37
- yield this.collection.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 });
38
- });
39
- }
40
- set(key, value, ttl, expirationTimestamp = null, tags = {}) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- yield this.prepare();
43
- const item = {
44
- _id: key,
45
- data: yield this.cacheProcessor.serialize(value),
46
- tags: yield this.cacheProcessor.serialize(tags),
47
- expirationTimestamp,
48
- };
49
- if (ttl) {
50
- const now = Math.round(new Date().getTime() / 1000);
51
- item.expiresAt = now + ttl;
52
- }
53
- yield this.collection.updateOne({ _id: key }, { $set: item }, { upsert: true });
54
- return value;
55
- });
56
- }
57
- get(key) {
58
- return __awaiter(this, void 0, void 0, function* () {
59
- yield this.prepare();
60
- let item = yield this.collection.findOne({ _id: key });
61
- const now = Math.round(new Date().getTime() / 1000);
62
- if (item && item.expiresAt && item.expiresAt < now) {
63
- item = null;
64
- }
65
- if (!item) {
66
- throw new Error(`Cache probably doesn't exists with key: ${key}`);
67
- }
68
- return yield this.cacheProcessor.deserialize(item.data);
69
- });
70
- }
71
- getOrSet(key, valueCb, ttl, expirationTimestamp = null, tags = {}) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- try {
74
- return yield this.get(key);
75
- }
76
- catch (e) {
77
- return yield this.set(key, yield valueCb(), ttl, expirationTimestamp, tags);
78
- }
79
- });
80
- }
81
- delete(key) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- yield this.prepare();
84
- yield this.collection.deleteOne({ _id: key });
85
- });
86
- }
87
- };
88
- Cache = __decorate([
89
- injectable(),
90
- scoped(Lifecycle.ContainerScoped),
91
- __metadata("design:paramtypes", [MongoConnector, Configuration, CacheProcessor])
92
- ], Cache);
93
- export { Cache };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0lBWXBDLEtBQUssU0FBTCxLQUFLO0lBSWQsWUFBcUIsU0FBeUIsRUFBWSxNQUFxQixFQUFZLGNBQThCO1FBQXBHLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFZLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUV6SCxDQUFDO0lBRWUsT0FBTzs7WUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQzdCLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBQyxFQUNkLEVBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFDLENBQzFCLENBQUM7UUFDTixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVUsRUFBRSxHQUFZLEVBQUUsc0JBQThCLElBQUksRUFBRSxPQUFZLEVBQUU7O1lBQy9GLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxHQUFlO2dCQUNyQixHQUFHLEVBQUUsR0FBRztnQkFDUixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hELElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDL0MsbUJBQW1CO2FBQ3RCLENBQUM7WUFDRixJQUFJLEdBQUcsRUFBRTtnQkFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUM5QjtZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsR0FBVzs7WUFDakIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLEdBQUcsSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDckU7WUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FBQTtJQUVLLFFBQVEsQ0FBQyxHQUFXLEVBQUUsT0FBMkIsRUFBRSxHQUFZLEVBQUUsc0JBQThCLElBQUksRUFBRSxPQUFZLEVBQUU7O1lBQ3JILElBQUk7Z0JBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDL0U7UUFDTCxDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsR0FBVzs7WUFDcEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7S0FBQTtDQUNKLENBQUE7QUE3RFksS0FBSztJQUZqQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztxQ0FLRSxjQUFjLEVBQW9CLGFBQWEsRUFBNEIsY0FBYztHQUpoSCxLQUFLLENBNkRqQjtTQTdEWSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XG5pbXBvcnQge01vbmdvQ29ubmVjdG9yfSBmcm9tIFwiLi9tb25nby1jb25uZWN0b3JcIjtcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHtDYWNoZVByb2Nlc3Nvcn0gZnJvbSBcIi4vY2FjaGUtcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlSXRlbSB7XG4gICAgX2lkOiBzdHJpbmc7XG4gICAgZGF0YTogYW55O1xuICAgIHRhZ3M/OiBhbnk7XG4gICAgZXhwaXJhdGlvblRpbWVzdGFtcD86IG51bWJlcjtcbiAgICBleHBpcmVzQXQ/OiBudW1iZXI7XG59XG5cbkBpbmplY3RhYmxlKClcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcbmV4cG9ydCBjbGFzcyBDYWNoZSB7XG5cbiAgICBwcm90ZWN0ZWQgY29sbGVjdGlvbjogQ29sbGVjdGlvbjxJQ2FjaGVJdGVtPjtcblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbm5lY3RvcjogTW9uZ29Db25uZWN0b3IsIHByb3RlY3RlZCBjb25maWc6IENvbmZpZ3VyYXRpb24sIHByb3RlY3RlZCBjYWNoZVByb2Nlc3NvcjogQ2FjaGVQcm9jZXNzb3IpIHtcblxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb24pIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rvci5kYXRhYmFzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgY2FuJ3QgdXNlIGNhY2hlIHdpdGhvdXQgbW9uZ28gY29ubmVjdGlvbiFgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmNvbm5lY3Rvci5kYXRhYmFzZS5jb2xsZWN0aW9uKHRoaXMuY29uZmlnLnJlc29sdmUoXCJjYWNoZUNvbGxlY3Rpb25cIikpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uY3JlYXRlSW5kZXgoXG4gICAgICAgICAgICB7ZXhwaXJlc0F0OiAxfSxcbiAgICAgICAgICAgIHtleHBpcmVBZnRlclNlY29uZHM6IDB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCB0dGw/OiBudW1iZXIsIGV4cGlyYXRpb25UaW1lc3RhbXA6IG51bWJlciA9IG51bGwsIHRhZ3M6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGl0ZW06IElDYWNoZUl0ZW0gPSB7XG4gICAgICAgICAgICBfaWQ6IGtleSxcbiAgICAgICAgICAgIGRhdGE6IGF3YWl0IHRoaXMuY2FjaGVQcm9jZXNzb3Iuc2VyaWFsaXplKHZhbHVlKSxcbiAgICAgICAgICAgIHRhZ3M6IGF3YWl0IHRoaXMuY2FjaGVQcm9jZXNzb3Iuc2VyaWFsaXplKHRhZ3MpLFxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWVzdGFtcCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR0bCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xuICAgICAgICAgICAgaXRlbS5leHBpcmVzQXQgPSBub3cgKyB0dGw7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiBrZXl9LCB7JHNldDogaXRlbX0sIHt1cHNlcnQ6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpO1xuICAgICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5maW5kT25lKHtfaWQ6IGtleX0pO1xuICAgICAgICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uZXhwaXJlc0F0ICYmIGl0ZW0uZXhwaXJlc0F0IDwgbm93KSB7XG4gICAgICAgICAgICBpdGVtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FjaGUgcHJvYmFibHkgZG9lc24ndCBleGlzdHMgd2l0aCBrZXk6ICR7a2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlUHJvY2Vzc29yLmRlc2VyaWFsaXplKGl0ZW0uZGF0YSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0T3JTZXQoa2V5OiBzdHJpbmcsIHZhbHVlQ2I6ICgpID0+IFByb21pc2U8YW55PiwgdHRsPzogbnVtYmVyLCBleHBpcmF0aW9uVGltZXN0YW1wOiBudW1iZXIgPSBudWxsLCB0YWdzOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0KGtleSwgYXdhaXQgdmFsdWVDYigpLCB0dGwsIGV4cGlyYXRpb25UaW1lc3RhbXAsIHRhZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDoga2V5fSk7XG4gICAgfVxufVxuIl19
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ import { injectable, Lifecycle, scoped } from "tsyringe";
20
+ import { MongoConnector } from "./mongo-connector";
21
+ import { Configuration } from "./configuration";
22
+ import { CacheProcessor } from "./cache-processor";
23
+ let Cache = class Cache {
24
+ constructor(connector, config, cacheProcessor) {
25
+ this.connector = connector;
26
+ this.config = config;
27
+ this.cacheProcessor = cacheProcessor;
28
+ }
29
+ prepare() {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ if (this.collection)
32
+ return;
33
+ if (!this.connector.database) {
34
+ throw new Error(`You can't use cache without mongo connection!`);
35
+ }
36
+ this.collection = this.connector.database.collection(this.config.resolve("cacheCollection"));
37
+ yield this.collection.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 0 });
38
+ });
39
+ }
40
+ set(key, value, ttl, expirationTimestamp = null, tags = {}) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ yield this.prepare();
43
+ const item = {
44
+ _id: key,
45
+ data: yield this.cacheProcessor.serialize(value),
46
+ tags: yield this.cacheProcessor.serialize(tags),
47
+ expirationTimestamp,
48
+ };
49
+ if (ttl) {
50
+ const now = Math.round(new Date().getTime() / 1000);
51
+ item.expiresAt = now + ttl;
52
+ }
53
+ yield this.collection.updateOne({ _id: key }, { $set: item }, { upsert: true });
54
+ return value;
55
+ });
56
+ }
57
+ get(key) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ yield this.prepare();
60
+ let item = yield this.collection.findOne({ _id: key });
61
+ const now = Math.round(new Date().getTime() / 1000);
62
+ if (item && item.expiresAt && item.expiresAt < now) {
63
+ item = null;
64
+ }
65
+ if (!item) {
66
+ throw new Error(`Cache probably doesn't exists with key: ${key}`);
67
+ }
68
+ return yield this.cacheProcessor.deserialize(item.data);
69
+ });
70
+ }
71
+ getOrSet(key, valueCb, ttl, expirationTimestamp = null, tags = {}) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ try {
74
+ return yield this.get(key);
75
+ }
76
+ catch (e) {
77
+ return yield this.set(key, yield valueCb(), ttl, expirationTimestamp, tags);
78
+ }
79
+ });
80
+ }
81
+ delete(key) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ yield this.prepare();
84
+ yield this.collection.deleteOne({ _id: key });
85
+ });
86
+ }
87
+ };
88
+ Cache = __decorate([
89
+ injectable(),
90
+ scoped(Lifecycle.ContainerScoped),
91
+ __metadata("design:paramtypes", [MongoConnector, Configuration, CacheProcessor])
92
+ ], Cache);
93
+ export { Cache };
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRXZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0lBWXBDLEtBQUssU0FBTCxLQUFLO0lBSWQsWUFBcUIsU0FBeUIsRUFBWSxNQUFxQixFQUFZLGNBQThCO1FBQXBHLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFZLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUV6SCxDQUFDO0lBRWUsT0FBTzs7WUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQzdCLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBQyxFQUNkLEVBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFDLENBQzFCLENBQUM7UUFDTixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVUsRUFBRSxHQUFZLEVBQUUsc0JBQThCLElBQUksRUFBRSxPQUFZLEVBQUU7O1lBQy9GLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxHQUFlO2dCQUNyQixHQUFHLEVBQUUsR0FBRztnQkFDUixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hELElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDL0MsbUJBQW1CO2FBQ3RCLENBQUM7WUFDRixJQUFJLEdBQUcsRUFBRTtnQkFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzthQUM5QjtZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsR0FBVzs7WUFDakIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUNoRCxJQUFJLEdBQUcsSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDckU7WUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FBQTtJQUVLLFFBQVEsQ0FBQyxHQUFXLEVBQUUsT0FBMkIsRUFBRSxHQUFZLEVBQUUsc0JBQThCLElBQUksRUFBRSxPQUFZLEVBQUU7O1lBQ3JILElBQUk7Z0JBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDL0U7UUFDTCxDQUFDO0tBQUE7SUFFSyxNQUFNLENBQUMsR0FBVzs7WUFDcEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7S0FBQTtDQUNKLENBQUE7QUE3RFksS0FBSztJQUZqQixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztxQ0FLRSxjQUFjLEVBQW9CLGFBQWEsRUFBNEIsY0FBYztHQUpoSCxLQUFLLENBNkRqQjtTQTdEWSxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0NhY2hlUHJvY2Vzc29yfSBmcm9tIFwiLi9jYWNoZS1wcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlSXRlbSB7XHJcbiAgICBfaWQ6IHN0cmluZztcclxuICAgIGRhdGE6IGFueTtcclxuICAgIHRhZ3M/OiBhbnk7XHJcbiAgICBleHBpcmF0aW9uVGltZXN0YW1wPzogbnVtYmVyO1xyXG4gICAgZXhwaXJlc0F0PzogbnVtYmVyO1xyXG59XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIENhY2hlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY29sbGVjdGlvbjogQ29sbGVjdGlvbjxJQ2FjaGVJdGVtPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWd1cmF0aW9uLCBwcm90ZWN0ZWQgY2FjaGVQcm9jZXNzb3I6IENhY2hlUHJvY2Vzc29yKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uZWN0b3IuZGF0YWJhc2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgY2FuJ3QgdXNlIGNhY2hlIHdpdGhvdXQgbW9uZ28gY29ubmVjdGlvbiFgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5jb25uZWN0b3IuZGF0YWJhc2UuY29sbGVjdGlvbih0aGlzLmNvbmZpZy5yZXNvbHZlKFwiY2FjaGVDb2xsZWN0aW9uXCIpKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uY3JlYXRlSW5kZXgoXHJcbiAgICAgICAgICAgIHtleHBpcmVzQXQ6IDF9LFxyXG4gICAgICAgICAgICB7ZXhwaXJlQWZ0ZXJTZWNvbmRzOiAwfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCB0dGw/OiBudW1iZXIsIGV4cGlyYXRpb25UaW1lc3RhbXA6IG51bWJlciA9IG51bGwsIHRhZ3M6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoKTtcclxuICAgICAgICBjb25zdCBpdGVtOiBJQ2FjaGVJdGVtID0ge1xyXG4gICAgICAgICAgICBfaWQ6IGtleSxcclxuICAgICAgICAgICAgZGF0YTogYXdhaXQgdGhpcy5jYWNoZVByb2Nlc3Nvci5zZXJpYWxpemUodmFsdWUpLFxyXG4gICAgICAgICAgICB0YWdzOiBhd2FpdCB0aGlzLmNhY2hlUHJvY2Vzc29yLnNlcmlhbGl6ZSh0YWdzKSxcclxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0dGwpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApO1xyXG4gICAgICAgICAgICBpdGVtLmV4cGlyZXNBdCA9IG5vdyArIHR0bDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiBrZXl9LCB7JHNldDogaXRlbX0sIHt1cHNlcnQ6IHRydWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoKTtcclxuICAgICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5maW5kT25lKHtfaWQ6IGtleX0pO1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmV4cGlyZXNBdCAmJiBpdGVtLmV4cGlyZXNBdCA8IG5vdykge1xyXG4gICAgICAgICAgICBpdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FjaGUgcHJvYmFibHkgZG9lc24ndCBleGlzdHMgd2l0aCBrZXk6ICR7a2V5fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZVByb2Nlc3Nvci5kZXNlcmlhbGl6ZShpdGVtLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE9yU2V0KGtleTogc3RyaW5nLCB2YWx1ZUNiOiAoKSA9PiBQcm9taXNlPGFueT4sIHR0bD86IG51bWJlciwgZXhwaXJhdGlvblRpbWVzdGFtcDogbnVtYmVyID0gbnVsbCwgdGFnczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChrZXkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0KGtleSwgYXdhaXQgdmFsdWVDYigpLCB0dGwsIGV4cGlyYXRpb25UaW1lc3RhbXAsIHRhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDoga2V5fSk7XHJcbiAgICB9XHJcbn1cclxuIl19