@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.
- package/README.md +2 -2
- package/bundles/stemy-backend.umd.js +5553 -5465
- package/bundles/stemy-backend.umd.js.map +1 -1
- package/bundles/stemy-backend.umd.min.js +1 -1
- package/bundles/stemy-backend.umd.min.js.map +1 -1
- package/common-types.d.ts +226 -214
- package/esm2015/common-types.js +18 -18
- package/esm2015/public_api.js +338 -338
- package/esm2015/rest-controllers/assets.controller.js +116 -116
- package/esm2015/rest-controllers/auth.controller.js +75 -75
- package/esm2015/rest-controllers/gallery.controller.js +37 -37
- package/esm2015/rest-controllers/progresses.controller.js +57 -57
- package/esm2015/rest-middlewares/container.middleware.js +32 -32
- package/esm2015/rest-middlewares/error-handler.middleware.js +83 -83
- package/esm2015/rest-middlewares/language.middleware.js +28 -28
- package/esm2015/rest-middlewares/request-ended.middleware.js +25 -25
- package/esm2015/rest-middlewares/request-started.middleware.js +24 -24
- package/esm2015/rest-openapi.js +44 -44
- package/esm2015/services/asset-processor.js +101 -101
- package/esm2015/services/asset-resolver.js +53 -53
- package/esm2015/services/assets.js +110 -110
- package/esm2015/services/backend-provider.js +32 -32
- package/esm2015/services/cache-processor.js +34 -34
- package/esm2015/services/cache.js +94 -94
- package/esm2015/services/configuration.js +55 -55
- package/esm2015/services/endpoint-provider.js +29 -29
- package/esm2015/services/entities/asset.js +166 -112
- package/esm2015/services/entities/lazy-asset.js +93 -93
- package/esm2015/services/entities/progress.js +181 -181
- package/esm2015/services/fixtures.js +45 -45
- package/esm2015/services/gallery-cache.js +36 -36
- package/esm2015/services/gallery-image.js +48 -48
- package/esm2015/services/gallery.js +138 -138
- package/esm2015/services/id-generator.js +63 -63
- package/esm2015/services/job-manager.js +203 -203
- package/esm2015/services/lazy-assets.js +74 -74
- package/esm2015/services/mail-sender.js +59 -59
- package/esm2015/services/memory-cache.js +84 -84
- package/esm2015/services/mongo-connector.js +61 -61
- package/esm2015/services/progresses.js +91 -91
- package/esm2015/services/template-renderer.js +89 -89
- package/esm2015/services/translation-provider.js +31 -31
- package/esm2015/services/translator.js +85 -85
- package/esm2015/services/user-manager.js +47 -47
- package/esm2015/socket-controllers/progress.controller.js +82 -82
- package/esm2015/socket-middlewares/compression.middleware.js +19 -19
- package/esm2015/static.js +33 -33
- package/esm2015/stemy-backend.js +4 -4
- package/esm2015/utilities/di-container.js +84 -84
- package/esm2015/utilities/lazy-asset-generator.js +40 -40
- package/esm2015/utilities/tree.js +111 -111
- package/esm2015/utils.js +618 -601
- package/esm2015/validators.js +51 -51
- package/fesm2015/stemy-backend.js +3656 -3585
- package/fesm2015/stemy-backend.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +33 -33
- package/rest-controllers/assets.controller.d.ts +16 -16
- package/rest-controllers/auth.controller.d.ts +14 -14
- package/rest-controllers/gallery.controller.d.ts +7 -7
- package/rest-controllers/progresses.controller.d.ts +9 -9
- package/rest-middlewares/container.middleware.d.ts +8 -8
- package/rest-middlewares/error-handler.middleware.d.ts +13 -13
- package/rest-middlewares/language.middleware.d.ts +8 -8
- package/rest-middlewares/request-ended.middleware.d.ts +5 -5
- package/rest-middlewares/request-started.middleware.d.ts +5 -5
- package/rest-openapi.d.ts +3 -3
- package/services/asset-processor.d.ts +12 -12
- package/services/asset-resolver.d.ts +9 -9
- package/services/assets.d.ts +19 -19
- package/services/backend-provider.d.ts +11 -11
- package/services/cache-processor.d.ts +4 -4
- package/services/cache.d.ts +23 -23
- package/services/configuration.d.ts +10 -10
- package/services/endpoint-provider.d.ts +4 -4
- package/services/entities/asset.d.ts +25 -23
- package/services/entities/lazy-asset.d.ts +29 -29
- package/services/entities/progress.d.ts +49 -49
- package/services/fixtures.d.ts +6 -6
- package/services/gallery-cache.d.ts +9 -9
- package/services/gallery-image.d.ts +11 -11
- package/services/gallery.d.ts +13 -13
- package/services/id-generator.d.ts +11 -11
- package/services/job-manager.d.ts +27 -27
- package/services/lazy-assets.d.ts +19 -19
- package/services/mail-sender.d.ts +20 -20
- package/services/memory-cache.d.ts +10 -10
- package/services/mongo-connector.d.ts +14 -14
- package/services/progresses.d.ts +18 -18
- package/services/template-renderer.d.ts +14 -14
- package/services/translation-provider.d.ts +10 -10
- package/services/translator.d.ts +15 -15
- package/services/user-manager.d.ts +6 -6
- package/socket-controllers/progress.controller.d.ts +10 -10
- package/socket-middlewares/compression.middleware.d.ts +4 -4
- package/static.d.ts +2 -2
- package/stemy-backend.d.ts +4 -4
- package/stemy-backend.metadata.json +1 -1
- package/utilities/di-container.d.ts +43 -43
- package/utilities/lazy-asset-generator.d.ts +15 -15
- package/utilities/tree.d.ts +14 -14
- package/utils.d.ts +76 -73
- package/validators.d.ts +7 -7
- package/di-container.d.ts +0 -40
- package/esm2015/di-container.js +0 -75
- package/esm2015/models/lazy-asset.js +0 -12
- package/esm2015/models/progress.js +0 -23
- package/esm2015/rest-middlewares/injector.middleware.js +0 -26
- package/esm2015/services/lazy-asset-helper.js +0 -74
- package/esm2015/services/logger.js +0 -14
- package/esm2015/services/progress-helper.js +0 -168
- package/models/lazy-asset.d.ts +0 -45
- package/models/progress.d.ts +0 -56
- package/rest-middlewares/injector.middleware.d.ts +0 -8
- package/services/lazy-asset-helper.d.ts +0 -15
- package/services/logger.d.ts +0 -2
- 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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|