@stemy/backend 5.2.2 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/commands/clear-command.d.ts +6 -6
  2. package/commands/fixtures-command.d.ts +9 -9
  3. package/commands/index.d.ts +2 -2
  4. package/common-types.d.ts +325 -326
  5. package/esm2022/commands/clear-command.mjs +15 -0
  6. package/esm2022/commands/fixtures-command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +7 -0
  8. package/esm2022/common-types.mjs +26 -0
  9. package/esm2022/fixtures/index.mjs +5 -0
  10. package/esm2022/fixtures/ttl.fixture.mjs +23 -0
  11. package/esm2022/public_api.mjs +378 -0
  12. package/esm2022/requests/asset-image-params.mjs +60 -0
  13. package/esm2022/rest-controllers/assets.controller.mjs +177 -0
  14. package/esm2022/rest-controllers/auth.controller.mjs +57 -0
  15. package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
  16. package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
  17. package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
  18. package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
  19. package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
  20. package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
  21. package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
  22. package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
  23. package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
  24. package/esm2022/services/asset-processor.mjs +88 -0
  25. package/esm2022/services/asset-resolver.mjs +36 -0
  26. package/esm2022/services/assets.mjs +154 -0
  27. package/esm2022/services/backend-provider.mjs +83 -0
  28. package/esm2022/services/cache-processor.mjs +16 -0
  29. package/esm2022/services/cache.mjs +70 -0
  30. package/esm2022/services/configuration.mjs +68 -0
  31. package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
  32. package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
  33. package/esm2022/services/endpoint-provider.mjs +13 -0
  34. package/esm2022/services/entities/asset.mjs +61 -0
  35. package/esm2022/services/entities/base-entity.mjs +32 -0
  36. package/esm2022/services/entities/lazy-asset.mjs +87 -0
  37. package/esm2022/services/entities/progress.mjs +182 -0
  38. package/esm2022/services/entities/temp-asset.mjs +53 -0
  39. package/esm2022/services/fixtures.mjs +38 -0
  40. package/esm2022/services/gallery-cache.mjs +29 -0
  41. package/esm2022/services/gallery-image.mjs +42 -0
  42. package/esm2022/services/gallery.mjs +124 -0
  43. package/esm2022/services/id-generator.mjs +49 -0
  44. package/esm2022/services/job-manager.mjs +198 -0
  45. package/esm2022/services/lazy-assets.mjs +68 -0
  46. package/esm2022/services/logger.mjs +26 -0
  47. package/esm2022/services/mail-sender.mjs +42 -0
  48. package/esm2022/services/memory-cache.mjs +61 -0
  49. package/esm2022/services/mongo-connector.mjs +36 -0
  50. package/esm2022/services/open-api.mjs +123 -0
  51. package/esm2022/services/progresses.mjs +93 -0
  52. package/esm2022/services/template-renderer.mjs +71 -0
  53. package/esm2022/services/terminal-manager.mjs +88 -0
  54. package/esm2022/services/token-generator.mjs +37 -0
  55. package/esm2022/services/translation-provider.mjs +39 -0
  56. package/esm2022/services/translator.mjs +67 -0
  57. package/esm2022/services/user-manager.mjs +27 -0
  58. package/esm2022/socket-controllers/progress.controller.mjs +63 -0
  59. package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
  60. package/esm2022/socket-controllers/terminal.mjs +89 -0
  61. package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
  62. package/esm2022/static.mjs +23 -0
  63. package/esm2022/stemy-backend.mjs +5 -0
  64. package/esm2022/utilities/base-doc.mjs +33 -0
  65. package/esm2022/utilities/decorators.mjs +51 -0
  66. package/esm2022/utilities/di-container.mjs +88 -0
  67. package/esm2022/utilities/empty-job.mjs +13 -0
  68. package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
  69. package/esm2022/utilities/mongoose.mjs +216 -0
  70. package/esm2022/utilities/tree.mjs +119 -0
  71. package/esm2022/utils.mjs +728 -0
  72. package/esm2022/validators.mjs +46 -0
  73. package/fesm2022/stemy-backend.mjs +4689 -0
  74. package/fesm2022/stemy-backend.mjs.map +1 -0
  75. package/fixtures/index.d.ts +2 -2
  76. package/fixtures/ttl.fixture.d.ts +7 -7
  77. package/index.d.ts +5 -5
  78. package/package.json +42 -48
  79. package/public_api.d.ts +44 -44
  80. package/requests/asset-image-params.d.ts +12 -12
  81. package/rest-controllers/assets.controller.d.ts +25 -27
  82. package/rest-controllers/auth.controller.d.ts +14 -14
  83. package/rest-controllers/gallery.controller.d.ts +6 -7
  84. package/rest-controllers/progresses.controller.d.ts +9 -9
  85. package/rest-controllers/terminal-styles.d.ts +2 -2
  86. package/rest-controllers/terminal.controller.d.ts +10 -10
  87. package/rest-middlewares/container.middleware.d.ts +8 -8
  88. package/rest-middlewares/error-handler.middleware.d.ts +13 -13
  89. package/rest-middlewares/language.middleware.d.ts +8 -8
  90. package/rest-middlewares/request-ended.middleware.d.ts +8 -8
  91. package/rest-middlewares/request-started.middleware.d.ts +8 -8
  92. package/services/asset-processor.d.ts +10 -11
  93. package/services/asset-resolver.d.ts +10 -10
  94. package/services/assets.d.ts +24 -26
  95. package/services/backend-provider.d.ts +19 -20
  96. package/services/cache-processor.d.ts +4 -4
  97. package/services/cache.d.ts +23 -23
  98. package/services/configuration.d.ts +15 -15
  99. package/services/drivers/asset-grid.driver.d.ts +11 -11
  100. package/services/drivers/asset-local.driver.d.ts +10 -11
  101. package/services/endpoint-provider.d.ts +4 -4
  102. package/services/entities/asset.d.ts +19 -21
  103. package/services/entities/base-entity.d.ts +13 -13
  104. package/services/entities/lazy-asset.d.ts +25 -25
  105. package/services/entities/progress.d.ts +49 -49
  106. package/services/entities/temp-asset.d.ts +20 -22
  107. package/services/fixtures.d.ts +8 -8
  108. package/services/gallery-cache.d.ts +8 -9
  109. package/services/gallery-image.d.ts +10 -11
  110. package/services/gallery.d.ts +13 -13
  111. package/services/id-generator.d.ts +11 -11
  112. package/services/job-manager.d.ts +35 -35
  113. package/services/lazy-assets.d.ts +22 -22
  114. package/services/logger.d.ts +8 -8
  115. package/services/mail-sender.d.ts +20 -20
  116. package/services/memory-cache.d.ts +10 -10
  117. package/services/mongo-connector.d.ts +12 -12
  118. package/services/open-api.d.ts +13 -13
  119. package/services/progresses.d.ts +20 -20
  120. package/services/template-renderer.d.ts +14 -14
  121. package/services/terminal-manager.d.ts +15 -15
  122. package/services/token-generator.d.ts +6 -6
  123. package/services/translation-provider.d.ts +9 -9
  124. package/services/translator.d.ts +15 -15
  125. package/services/user-manager.d.ts +6 -6
  126. package/socket-controllers/progress.controller.d.ts +10 -10
  127. package/socket-controllers/terminal.controller.d.ts +13 -13
  128. package/socket-controllers/terminal.d.ts +19 -20
  129. package/socket-middlewares/compression.middleware.d.ts +4 -4
  130. package/static.d.ts +2 -2
  131. package/utilities/base-doc.d.ts +40 -40
  132. package/utilities/decorators.d.ts +10 -10
  133. package/utilities/di-container.d.ts +43 -43
  134. package/utilities/empty-job.d.ts +4 -4
  135. package/utilities/lazy-asset-generator.d.ts +15 -15
  136. package/utilities/mongoose.d.ts +36 -36
  137. package/utilities/tree.d.ts +15 -15
  138. package/utils.d.ts +118 -123
  139. package/validators.d.ts +7 -7
@@ -0,0 +1,123 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { inject, singleton } from "tsyringe";
3
+ import { getMetadataArgsStorage } from "routing-controllers";
4
+ import { routingControllersToSpec } from "routing-controllers-openapi";
5
+ import { defaultMetadataStorage } from "class-transformer/cjs/storage";
6
+ import { validationMetadatasToSchemas } from "class-validator-jsonschema";
7
+ import { ValidationTypes } from "class-validator";
8
+ import { isDefined, isFunction, isObject } from "../utils";
9
+ import { IsFile, IsObjectId } from "../validators";
10
+ import { DI_CONTAINER, OPENAPI_VALIDATION } from "../common-types";
11
+ let OpenApi = class OpenApi {
12
+ container;
13
+ customValidation;
14
+ docs;
15
+ docsStr;
16
+ get apiDocs() {
17
+ if (!this.docs)
18
+ this.docs = this.createApiDocs();
19
+ return this.docs;
20
+ }
21
+ get apiDocsStr() {
22
+ if (!this.docsStr)
23
+ this.docsStr = JSON.stringify(this.apiDocs);
24
+ return this.docsStr;
25
+ }
26
+ constructor(container, customValidation) {
27
+ this.container = container;
28
+ this.customValidation = customValidation;
29
+ this.docs = null;
30
+ }
31
+ async schemaToExample(src, req) {
32
+ const maybeRef = src;
33
+ if (maybeRef.$ref) {
34
+ const schemas = this.apiDocs.components.schemas;
35
+ const schema = maybeRef.$ref
36
+ .replace("#/components/schemas/", "")
37
+ .replace("#/definitions/", "");
38
+ return this.schemaToExample(schemas[schema], req);
39
+ }
40
+ let schema = src;
41
+ if (schema.oneOf) {
42
+ schema = Object.assign({}, schema, schema.oneOf[0]);
43
+ }
44
+ if (schema.type === "object") {
45
+ const result = {};
46
+ await Promise.all(Object.keys(schema.properties).map(async (key) => {
47
+ result[key] = await this.schemaToExample(schema.properties[key], req);
48
+ }));
49
+ return result;
50
+ }
51
+ if (schema.type === "array") {
52
+ return [await this.schemaToExample(schema.items, req)];
53
+ }
54
+ if (schema.type === "string") {
55
+ if (isDefined(schema.default)) {
56
+ if (isFunction(schema.default)) {
57
+ return schema.default(this.container);
58
+ }
59
+ return schema.default;
60
+ }
61
+ if (schema.format == "date") {
62
+ return new Date().toISOString().substr(0, 10);
63
+ }
64
+ if (schema.format == "date-time") {
65
+ return new Date().toISOString();
66
+ }
67
+ if (schema.enum) {
68
+ return schema.enum[0];
69
+ }
70
+ return "string";
71
+ }
72
+ if (schema.type === "number") {
73
+ return schema.default ?? 0;
74
+ }
75
+ else if (schema.type === "boolean") {
76
+ return schema.default ?? false;
77
+ }
78
+ else {
79
+ return schema.default ?? null;
80
+ }
81
+ }
82
+ createApiDocs() {
83
+ const storage = getMetadataArgsStorage();
84
+ const docs = routingControllersToSpec(storage, {}, {
85
+ components: {
86
+ schemas: validationMetadatasToSchemas({
87
+ classTransformerMetadataStorage: defaultMetadataStorage,
88
+ additionalConverters: {
89
+ [ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {
90
+ const res = isFunction(this.customValidation) ? this.customValidation(meta, options) : this.customValidation;
91
+ if (isObject(res))
92
+ return res;
93
+ const constraints = meta.constraints || [];
94
+ if (meta.constraintCls === IsFile) {
95
+ return {
96
+ multi: constraints[0] || false,
97
+ type: "file"
98
+ };
99
+ }
100
+ if (meta.constraintCls === IsObjectId) {
101
+ return {
102
+ endpoint: constraints[0] || false,
103
+ multi: constraints[1] || false,
104
+ type: "list"
105
+ };
106
+ }
107
+ return null;
108
+ }
109
+ }
110
+ })
111
+ }
112
+ });
113
+ return docs;
114
+ }
115
+ };
116
+ OpenApi = __decorate([
117
+ singleton(),
118
+ __param(0, inject(DI_CONTAINER)),
119
+ __param(1, inject(OPENAPI_VALIDATION)),
120
+ __metadata("design:paramtypes", [Object, Object])
121
+ ], OpenApi);
122
+ export { OpenApi };
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvb3Blbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBa0Msa0JBQWtCLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7QUFHN0csSUFBTSxPQUFPLEdBQWIsTUFBTSxPQUFPO0lBZTRCO0lBQ007SUFkeEMsSUFBSSxDQUFnQjtJQUNwQixPQUFPLENBQVM7SUFFMUIsSUFBSSxPQUFPO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELE9B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SSxLQUFLO29DQUM5QixJQUFJLEVBQUUsTUFBTTtpQ0FDUixDQUFDOzRCQUNiLENBQUM7NEJBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dDQUNwQyxPQUFPO29DQUNILFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSztvQ0FDakMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLO29DQUM5QixJQUFJLEVBQUUsTUFBTTtpQ0FDUixDQUFDOzRCQUNiLENBQUM7NEJBQ0QsT0FBTyxJQUFJLENBQUM7d0JBQ2hCLENBQUM7cUJBQ0o7aUJBQ0osQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUE7QUF0R1ksT0FBTztJQURuQixTQUFTLEVBQUU7SUFnQkssV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDcEIsV0FBQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTs7R0FoQjlCLE9BQU8sQ0FzR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7T3BlbkFQSU9iamVjdCwgUmVmZXJlbmNlT2JqZWN0LCBTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge2dldE1ldGFkYXRhQXJnc1N0b3JhZ2V9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7cm91dGluZ0NvbnRyb2xsZXJzVG9TcGVjfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVycy1vcGVuYXBpXCI7XHJcbmltcG9ydCB7ZGVmYXVsdE1ldGFkYXRhU3RvcmFnZX0gZnJvbSBcImNsYXNzLXRyYW5zZm9ybWVyL2Nqcy9zdG9yYWdlXCI7XHJcbmltcG9ydCB7dmFsaWRhdGlvbk1ldGFkYXRhc1RvU2NoZW1hc30gZnJvbSBcImNsYXNzLXZhbGlkYXRvci1qc29uc2NoZW1hXCI7XHJcbmltcG9ydCB7VmFsaWRhdGlvblR5cGVzfSBmcm9tIFwiY2xhc3MtdmFsaWRhdG9yXCI7XHJcbmltcG9ydCB7aXNEZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc09iamVjdH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7SXNGaWxlLCBJc09iamVjdElkfSBmcm9tIFwiLi4vdmFsaWRhdG9yc1wiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSURlcGVuZGVuY3lDb250YWluZXIsIElSZXF1ZXN0LCBPUEVOQVBJX1ZBTElEQVRJT04sIE9wZW5BcGlWYWxpZGF0aW9ufSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIE9wZW5BcGkge1xyXG5cclxuICAgIHByb3RlY3RlZCBkb2NzOiBPcGVuQVBJT2JqZWN0O1xyXG4gICAgcHJvdGVjdGVkIGRvY3NTdHI6IHN0cmluZztcclxuXHJcbiAgICBnZXQgYXBpRG9jcygpOiBPcGVuQVBJT2JqZWN0IHtcclxuICAgICAgICBpZiAoIXRoaXMuZG9jcykgdGhpcy5kb2NzID0gdGhpcy5jcmVhdGVBcGlEb2NzKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXBpRG9jc1N0cigpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5kb2NzU3RyKSB0aGlzLmRvY3NTdHIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmFwaURvY3MpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRvY3NTdHI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQGluamVjdChESV9DT05UQUlORVIpIHByb3RlY3RlZCBjb250YWluZXI6IElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgQGluamVjdChPUEVOQVBJX1ZBTElEQVRJT04pIHByb3RlY3RlZCBjdXN0b21WYWxpZGF0aW9uOiBPcGVuQXBpVmFsaWRhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZG9jcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2NoZW1hVG9FeGFtcGxlKHNyYzogUmVmZXJlbmNlT2JqZWN0IHwgU2NoZW1hT2JqZWN0LCByZXE/OiBJUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgbWF5YmVSZWYgPSBzcmMgYXMgUmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgICAgIGlmIChtYXliZVJlZi4kcmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYXMgPSB0aGlzLmFwaURvY3MuY29tcG9uZW50cy5zY2hlbWFzO1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBtYXliZVJlZi4kcmVmXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcIiMvY29tcG9uZW50cy9zY2hlbWFzL1wiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIjL2RlZmluaXRpb25zL1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hVG9FeGFtcGxlKHNjaGVtYXNbc2NoZW1hXSwgcmVxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNjaGVtYSA9IHNyYyBhcyBTY2hlbWFPYmplY3Q7XHJcbiAgICAgICAgaWYgKHNjaGVtYS5vbmVPZikge1xyXG4gICAgICAgICAgICBzY2hlbWEgPSBPYmplY3QuYXNzaWduKHt9LCBzY2hlbWEsIHNjaGVtYS5vbmVPZlswXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLm1hcChhc3luYyBrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBhd2FpdCB0aGlzLnNjaGVtYVRvRXhhbXBsZShzY2hlbWEucHJvcGVydGllc1trZXldLCByZXEpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbYXdhaXQgdGhpcy5zY2hlbWFUb0V4YW1wbGUoc2NoZW1hLml0ZW1zLCByZXEpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoc2NoZW1hLmRlZmF1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzY2hlbWEuZGVmYXVsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQodGhpcy5jb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5kZWZhdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZm9ybWF0ID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cigwLCAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNjaGVtYS5mb3JtYXQgPT0gXCJkYXRlLXRpbWVcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2NoZW1hLmVudW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlbWEuZW51bVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEuZGVmYXVsdCA/PyAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEuZGVmYXVsdCA/PyBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQgPz8gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUFwaURvY3MoKTogT3BlbkFQSU9iamVjdCB7XHJcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UoKTtcclxuICAgICAgICBjb25zdCBkb2NzID0gcm91dGluZ0NvbnRyb2xsZXJzVG9TcGVjKHN0b3JhZ2UsIHt9LCB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYXM6IHZhbGlkYXRpb25NZXRhZGF0YXNUb1NjaGVtYXMoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzVHJhbnNmb3JtZXJNZXRhZGF0YVN0b3JhZ2U6IGRlZmF1bHRNZXRhZGF0YVN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbENvbnZlcnRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRpb25UeXBlcy5DVVNUT01fVkFMSURBVElPTl06IChtZXRhLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBpc0Z1bmN0aW9uKHRoaXMuY3VzdG9tVmFsaWRhdGlvbikgPyB0aGlzLmN1c3RvbVZhbGlkYXRpb24obWV0YSwgb3B0aW9ucykgOiB0aGlzLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocmVzKSkgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gbWV0YS5jb25zdHJhaW50cyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhLmNvbnN0cmFpbnRDbHMgPT09IElzRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiBjb25zdHJhaW50c1swXSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhLmNvbnN0cmFpbnRDbHMgPT09IElzT2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludDogY29uc3RyYWludHNbMF0gfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiBjb25zdHJhaW50c1sxXSB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBkb2NzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,93 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { ObjectId } from "bson";
4
+ import { promiseTimeout } from "../utils";
5
+ import { MongoConnector } from "./mongo-connector";
6
+ import { JobManager } from "./job-manager";
7
+ import { Progress } from "./entities/progress";
8
+ let Progresses = class Progresses {
9
+ connector;
10
+ jobMan;
11
+ collection;
12
+ progresses;
13
+ constructor(connector, jobMan) {
14
+ this.connector = connector;
15
+ this.jobMan = jobMan;
16
+ this.collection = connector.database.collection("progresses");
17
+ this.progresses = {};
18
+ this.jobMan.on("progress-changed", progress => {
19
+ const id = progress.id;
20
+ this.progresses[id] = new Progress(new ObjectId(id), progress, this.collection);
21
+ });
22
+ }
23
+ async waitToFinish(id) {
24
+ return Promise.race([
25
+ this.waitForProgress(id, async () => {
26
+ let progress = this.progresses[id];
27
+ if (!progress || progress.percent < 100) {
28
+ progress = await this.get(id);
29
+ }
30
+ if (!progress) {
31
+ throw new Error(`Progress does not exists with id: ${id}`);
32
+ }
33
+ return progress;
34
+ }, 500),
35
+ this.waitForProgress(id, async () => {
36
+ return this.progresses[id] || null;
37
+ }, 25)
38
+ ]);
39
+ }
40
+ async get(id) {
41
+ return !id ? null : this.find({ _id: new ObjectId(id) });
42
+ }
43
+ async find(where) {
44
+ const data = await this.collection.findOne(where);
45
+ return !data ? null : new Progress(data._id, data, this.collection);
46
+ }
47
+ async create(max = 100) {
48
+ if (isNaN(max) || max <= 0) {
49
+ throw new Error(`Max progress value must be bigger than zero`);
50
+ }
51
+ const data = {
52
+ current: 0,
53
+ max: max,
54
+ message: "",
55
+ error: "",
56
+ canceled: false
57
+ };
58
+ const res = await this.collection.insertOne(data);
59
+ return new Progress(res.insertedId, data, this.collection);
60
+ }
61
+ async remove(id) {
62
+ await this.collection.deleteOne({ _id: new ObjectId(id) });
63
+ return id;
64
+ }
65
+ async waitForProgress(id, cb, delay) {
66
+ let isFinished = false;
67
+ let progress = null;
68
+ let waitTime = 0;
69
+ while (!isFinished) {
70
+ progress = await cb();
71
+ waitTime += delay;
72
+ if (progress) {
73
+ if (progress.error) {
74
+ throw new Error(progress.error);
75
+ }
76
+ isFinished = progress.percent >= 100;
77
+ }
78
+ if (!isFinished) {
79
+ if (waitTime >= this.jobMan.maxTimeout) {
80
+ throw new Error(`Progress with id: ${id} probably never will be finished!`);
81
+ }
82
+ await promiseTimeout(delay);
83
+ }
84
+ }
85
+ return progress;
86
+ }
87
+ };
88
+ Progresses = __decorate([
89
+ singleton(),
90
+ __metadata("design:paramtypes", [MongoConnector, JobManager])
91
+ ], Progresses);
92
+ export { Progresses };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHdEMsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUtFO0lBQW9DO0lBSC9DLFVBQVUsQ0FBaUM7SUFDM0MsVUFBVSxDQUE0QjtJQUVoRCxZQUFxQixTQUF5QixFQUFXLE1BQWtCO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFZLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVE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QUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDbEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUNoRixDQUFDO2dCQUNELE1BQU0sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKLENBQUE7QUFuRlksVUFBVTtJQUR0QixTQUFTLEVBQUU7cUNBTXdCLGNBQWMsRUFBbUIsVUFBVTtHQUxsRSxVQUFVLENBbUZ0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0ZpbHRlclF1ZXJ5fSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gXCIuL2pvYi1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3N9IGZyb20gXCIuL2VudGl0aWVzL3Byb2dyZXNzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzZXMge1xyXG5cclxuICAgIHByb3RlY3RlZCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFBhcnRpYWw8SVByb2dyZXNzPj47XHJcbiAgICBwcm90ZWN0ZWQgcHJvZ3Jlc3Nlczoge1tpZDogc3RyaW5nXTogSVByb2dyZXNzfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCByZWFkb25seSBqb2JNYW46IEpvYk1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb25uZWN0b3IuZGF0YWJhc2UuY29sbGVjdGlvbihcInByb2dyZXNzZXNcIik7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5qb2JNYW4ub24oXCJwcm9ncmVzcy1jaGFuZ2VkXCIsIHByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwcm9ncmVzcy5pZCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gPSBuZXcgUHJvZ3Jlc3MobmV3IE9iamVjdElkKGlkKSwgcHJvZ3Jlc3MgYXMgYW55LCB0aGlzLmNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRUb0ZpbmlzaChpZDogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgdGhpcy53YWl0Rm9yUHJvZ3Jlc3MoaWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3Nlc1tpZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb2dyZXNzIHx8IHByb2dyZXNzLnBlcmNlbnQgPCAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2dyZXNzIGRvZXMgbm90IGV4aXN0cyB3aXRoIGlkOiAke2lkfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9LCA1MDApLFxyXG4gICAgICAgICAgICB0aGlzLndhaXRGb3JQcm9ncmVzcyhpZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgfSwgMjUpXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiAhaWQgPyBudWxsIDogdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJUHJvZ3Jlc3M+KTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xyXG4gICAgICAgIHJldHVybiAhZGF0YSA/IG51bGwgOiBuZXcgUHJvZ3Jlc3MoZGF0YS5faWQsIGRhdGEsIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlKG1heDogbnVtYmVyID0gMTAwKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBpZiAoaXNOYU4obWF4KSB8fCBtYXggPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1heCBwcm9ncmVzcyB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgbWF4OiBtYXgsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgIGVycm9yOiBcIlwiLFxyXG4gICAgICAgICAgICBjYW5jZWxlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9ncmVzcyhyZXMuaW5zZXJ0ZWRJZCwgZGF0YSwgdGhpcy5jb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiBuZXcgT2JqZWN0SWQoaWQpfSk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyB3YWl0Rm9yUHJvZ3Jlc3MoaWQ6IHN0cmluZywgY2I6ICgpID0+IFByb21pc2U8SVByb2dyZXNzPiwgZGVsYXk6IG51bWJlcik6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvZ3Jlc3M6IElQcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgbGV0IHdhaXRUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IGNiKCk7XHJcbiAgICAgICAgICAgIHdhaXRUaW1lICs9IGRlbGF5O1xyXG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9ncmVzcy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpc0ZpbmlzaGVkID0gcHJvZ3Jlc3MucGVyY2VudCA+PSAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2FpdFRpbWUgPj0gdGhpcy5qb2JNYW4ubWF4VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZ3Jlc3Mgd2l0aCBpZDogJHtpZH0gcHJvYmFibHkgbmV2ZXIgd2lsbCBiZSBmaW5pc2hlZCFgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2VUaW1lb3V0KGRlbGF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,71 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { lstatSync, readdir, readFileSync } from "fs";
4
+ import { join } from "path";
5
+ import * as Handlebars from "handlebars";
6
+ import { Translator } from "./translator";
7
+ import { Configuration } from "./configuration";
8
+ let TemplateRenderer = class TemplateRenderer {
9
+ translator;
10
+ config;
11
+ templates;
12
+ initPromise;
13
+ constructor(translator, config) {
14
+ this.translator = translator;
15
+ this.config = config;
16
+ this.templates = {};
17
+ Handlebars.registerHelper(`object`, function ({ hash }) {
18
+ return hash;
19
+ });
20
+ Handlebars.registerHelper(`now`, function () {
21
+ return new Date().getTime();
22
+ });
23
+ Handlebars.registerHelper(`keys`, function (obj) {
24
+ return !obj ? [] : Object.keys(obj);
25
+ });
26
+ Handlebars.registerHelper(`translate`, function (key, params) {
27
+ return translator.getTranslationSync(this.language, key, params);
28
+ });
29
+ }
30
+ init() {
31
+ this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve("templatesDir"), []);
32
+ return this.initPromise;
33
+ }
34
+ async parseTemplates(dir, dirPath) {
35
+ return new Promise(resolve => {
36
+ readdir(dir, async (err, files) => {
37
+ for (let file of files) {
38
+ const path = join(dir, file);
39
+ if (lstatSync(path).isDirectory()) {
40
+ await this.parseTemplates(join(dir, file), dirPath.concat([file]));
41
+ continue;
42
+ }
43
+ const parts = file.split(".");
44
+ parts.pop();
45
+ const name = parts.join(".");
46
+ const fullName = dirPath.concat([name]).join("-");
47
+ const content = readFileSync(path).toString("utf8");
48
+ this.templates[fullName] = Handlebars.compile(content);
49
+ Handlebars.registerPartial(fullName, content);
50
+ }
51
+ resolve();
52
+ });
53
+ });
54
+ }
55
+ async render(template, language, context) {
56
+ await this.init();
57
+ await this.translator.getDictionary(language);
58
+ if (!this.templates[template]) {
59
+ return Promise.reject(`Template not found with name: ${template}`);
60
+ }
61
+ context = Object.assign({ language }, context || {});
62
+ const res = this.templates[template](context);
63
+ return res instanceof Error ? await Promise.reject(res) : res;
64
+ }
65
+ };
66
+ TemplateRenderer = __decorate([
67
+ singleton(),
68
+ __metadata("design:paramtypes", [Translator, Configuration])
69
+ ], TemplateRenderer);
70
+ export { TemplateRenderer };
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdGVtcGxhdGUtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFFekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHdkMsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFNSjtJQUFpQztJQUp0RCxTQUFTLENBQTZCO0lBRTVCLFdBQVcsQ0FBZTtJQUVwQyxZQUFxQixVQUFzQixFQUFXLE1BQXFCO1FBQXRELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBQyxJQUFJLEVBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtZQUM3QixPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFTLEdBQVE7WUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxN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LENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2xFLENBQUM7Q0FDSixDQUFBO0FBM0RZLGdCQUFnQjtJQUQ1QixTQUFTLEVBQUU7cUNBT3lCLFVBQVUsRUFBbUIsYUFBYTtHQU5sRSxnQkFBZ0IsQ0EyRDVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2xzdGF0U3luYywgcmVhZGRpciwgcmVhZEZpbGVTeW5jfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHtqb2lufSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgKiBhcyBIYW5kbGViYXJzIGZyb20gXCJoYW5kbGViYXJzXCI7XHJcblxyXG5pbXBvcnQge1RyYW5zbGF0b3J9IGZyb20gXCIuL3RyYW5zbGF0b3JcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUmVuZGVyZXIge1xyXG5cclxuICAgIHRlbXBsYXRlczoge1tuYW1lOiBzdHJpbmddOiBGdW5jdGlvbn07XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRQcm9taXNlOiBQcm9taXNlPGFueT47XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRvciwgcmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSB7fTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGBvYmplY3RgLCBmdW5jdGlvbih7aGFzaH0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhhc2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihgbm93YCwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGBrZXlzYCwgZnVuY3Rpb24ob2JqOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFvYmogPyBbXSA6IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihgdHJhbnNsYXRlYCwgZnVuY3Rpb24gKGtleTogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRvci5nZXRUcmFuc2xhdGlvblN5bmModGhpcy5sYW5ndWFnZSwga2V5LCBwYXJhbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuaW5pdFByb21pc2UgfHwgdGhpcy5wYXJzZVRlbXBsYXRlcyh0aGlzLmNvbmZpZy5yZXNvbHZlKFwidGVtcGxhdGVzRGlyXCIpLCBbXSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGFyc2VUZW1wbGF0ZXMoZGlyOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICByZWFkZGlyKGRpciwgYXN5bmMgKGVyciwgZmlsZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gam9pbihkaXIsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBhcnNlVGVtcGxhdGVzKGpvaW4oZGlyLCBmaWxlKSwgZGlyUGF0aC5jb25jYXQoW2ZpbGVdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5qb2luKFwiLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsTmFtZSA9IGRpclBhdGguY29uY2F0KFtuYW1lXSkuam9pbihcIi1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhwYXRoKS50b1N0cmluZyhcInV0ZjhcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXNbZnVsbE5hbWVdID0gSGFuZGxlYmFycy5jb21waWxlKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJQYXJ0aWFsKGZ1bGxOYW1lLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyKHRlbXBsYXRlOiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRvci5nZXREaWN0aW9uYXJ5KGxhbmd1YWdlKTtcclxuICAgICAgICBpZiAoIXRoaXMudGVtcGxhdGVzW3RlbXBsYXRlXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYFRlbXBsYXRlIG5vdCBmb3VuZCB3aXRoIG5hbWU6ICR7dGVtcGxhdGV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQgPSBPYmplY3QuYXNzaWduKHtsYW5ndWFnZX0sIGNvbnRleHQgfHwge30pO1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudGVtcGxhdGVzW3RlbXBsYXRlXShjb250ZXh0KTtcclxuICAgICAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRXJyb3IgPyBhd2FpdCBQcm9taXNlLnJlamVjdChyZXMpIDogcmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,88 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { injectAll, singleton } from "tsyringe";
3
+ import { CommandsAddon } from "@stemy/terminal-commands-addon";
4
+ import { TERMINAL_COMMAND } from "../common-types";
5
+ import { Logger } from "./logger";
6
+ import { Configuration } from "./configuration";
7
+ import { camelCaseToDash, colorize, ConsoleColor } from "../utils";
8
+ let TerminalManager = class TerminalManager {
9
+ logger;
10
+ config;
11
+ servicePassword;
12
+ suggestions;
13
+ commands;
14
+ loggedOutCommands;
15
+ loggedInCommands;
16
+ constructor(logger, config, commands) {
17
+ this.logger = logger;
18
+ this.config = config;
19
+ this.servicePassword = config.resolve("servicePassword");
20
+ this.suggestions = {
21
+ login: async (args) => {
22
+ if (args.length > 2) {
23
+ return null;
24
+ }
25
+ const input = `${args.at(1).label}`;
26
+ return (!input) ? [] : [{
27
+ id: input,
28
+ label: input,
29
+ masked: true
30
+ }];
31
+ },
32
+ ...commands.reduce((acc, command) => {
33
+ command.name = camelCaseToDash(command.name || command.constructor.name || "");
34
+ if (!command.name || !command.suggest)
35
+ return acc;
36
+ acc[command.name] = async (a, t) => command.suggest(a, t);
37
+ return acc;
38
+ }, {})
39
+ };
40
+ this.commands = commands.reduce((acc, command) => {
41
+ if (!command.name)
42
+ return acc;
43
+ acc[command.name] = async (a, t) => command.execute(a, t);
44
+ return acc;
45
+ }, {});
46
+ this.loggedOutCommands = ["login", "clear"];
47
+ this.loggedInCommands = Object.keys(this.commands);
48
+ this.loggedInCommands.push("logout");
49
+ console.log(`Current service password is: ${colorize(this.servicePassword, ConsoleColor.FgGreen)}`);
50
+ }
51
+ loadAddons(terminal) {
52
+ let loggedIn = false;
53
+ const addon = new CommandsAddon({
54
+ commands: {
55
+ login: async (args, terminal) => {
56
+ if (args.at(1).label === this.servicePassword) {
57
+ loggedIn = true;
58
+ terminal.writeln("Logged in as admin");
59
+ }
60
+ else {
61
+ throw new Error("Invalid login");
62
+ }
63
+ },
64
+ logout: async (args, terminal) => {
65
+ loggedIn = false;
66
+ terminal.writeln("Logged out");
67
+ },
68
+ ...this.commands
69
+ },
70
+ suggestCommands: async () => {
71
+ if (loggedIn) {
72
+ return this.loggedInCommands;
73
+ }
74
+ return this.loggedOutCommands;
75
+ },
76
+ suggestions: this.suggestions
77
+ });
78
+ terminal.loadAddon(addon);
79
+ }
80
+ };
81
+ TerminalManager = __decorate([
82
+ singleton(),
83
+ __param(2, injectAll(TERMINAL_COMMAND)),
84
+ __metadata("design:paramtypes", [Logger,
85
+ Configuration, Array])
86
+ ], TerminalManager);
87
+ export { TerminalManager };
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBQUMsYUFBYSxFQUE4QixNQUFNLGdDQUFnQyxDQUFDO0FBQzFGLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHMUQsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQU9GO0lBQ0E7SUFQWixlQUFlLENBQVM7SUFDeEIsV0FBVyxDQUFpQjtJQUM1QixRQUFRLENBQWM7SUFDdEIsaUJBQWlCLENBQVc7SUFDNUIsZ0JBQWdCLENBQVc7SUFFckMsWUFBc0IsTUFBYyxFQUNkLE1BQXFCLEVBQ0YsUUFBNEI7UUFGL0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFFdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDbEIsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMs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eEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDWCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDakMsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ2hDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNKLENBQUE7QUFyRVksZUFBZTtJQUQzQixTQUFTLEVBQUU7SUFVSyxXQUFBLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO3FDQUZWLE1BQU07UUFDTixhQUFhO0dBUmxDLGVBQWUsQ0FxRTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RBbGwsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNBZGRvbiwgSUNvbW1hbmRNYXAsIElTdWdnZXN0aW9uTWFwfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcbmltcG9ydCB7SVRlcm1pbmFsLCBJVGVybWluYWxDb21tYW5kLCBURVJNSU5BTF9DT01NQU5EfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7Y2FtZWxDYXNlVG9EYXNoLCBjb2xvcml6ZSwgQ29uc29sZUNvbG9yfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVGVybWluYWxNYW5hZ2VyIHtcclxuICAgIHByb3RlY3RlZCBzZXJ2aWNlUGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBzdWdnZXN0aW9uczogSVN1Z2dlc3Rpb25NYXA7XHJcbiAgICBwcm90ZWN0ZWQgY29tbWFuZHM6IElDb21tYW5kTWFwO1xyXG4gICAgcHJvdGVjdGVkIGxvZ2dlZE91dENvbW1hbmRzOiBzdHJpbmdbXTtcclxuICAgIHByb3RlY3RlZCBsb2dnZWRJbkNvbW1hbmRzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnZXIsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWd1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgQGluamVjdEFsbChURVJNSU5BTF9DT01NQU5EKSBjb21tYW5kczogSVRlcm1pbmFsQ29tbWFuZFtdKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlUGFzc3dvcmQgPSBjb25maWcucmVzb2x2ZShcInNlcnZpY2VQYXNzd29yZFwiKTtcclxuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0ge1xyXG4gICAgICAgICAgICBsb2dpbjogYXN5bmMgKGFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gYCR7YXJncy5hdCgxKS5sYWJlbH1gO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICghaW5wdXQpID8gW10gOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uY29tbWFuZHMucmVkdWNlKChhY2MsIGNvbW1hbmQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQubmFtZSA9IGNhbWVsQ2FzZVRvRGFzaChjb21tYW5kLm5hbWUgfHwgY29tbWFuZC5jb25zdHJ1Y3Rvci5uYW1lIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb21tYW5kLm5hbWUgfHwgIWNvbW1hbmQuc3VnZ2VzdCkgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgICAgIGFjY1tjb21tYW5kLm5hbWVdID0gYXN5bmMgKGEsIHQpID0+IGNvbW1hbmQuc3VnZ2VzdChhLCB0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIHt9KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IGNvbW1hbmRzLnJlZHVjZSgoYWNjLCBjb21tYW5kKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY29tbWFuZC5uYW1lKSByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICBhY2NbY29tbWFuZC5uYW1lXSA9IGFzeW5jIChhLCB0KSA9PiBjb21tYW5kLmV4ZWN1dGUoYSwgdCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIHRoaXMubG9nZ2VkT3V0Q29tbWFuZHMgPSBbXCJsb2dpblwiLCBcImNsZWFyXCJdO1xyXG4gICAgICAgIHRoaXMubG9nZ2VkSW5Db21tYW5kcyA9IE9iamVjdC5rZXlzKHRoaXMuY29tbWFuZHMpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VkSW5Db21tYW5kcy5wdXNoKFwibG9nb3V0XCIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBDdXJyZW50IHNlcnZpY2UgcGFzc3dvcmQgaXM6ICR7Y29sb3JpemUodGhpcy5zZXJ2aWNlUGFzc3dvcmQsIENvbnNvbGVDb2xvci5GZ0dyZWVuKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWRkb25zKHRlcm1pbmFsOiBJVGVybWluYWwpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IG5ldyBDb21tYW5kc0FkZG9uKHtcclxuICAgICAgICAgICAgY29tbWFuZHM6IHtcclxuICAgICAgICAgICAgICAgIGxvZ2luOiBhc3luYyAoYXJncywgdGVybWluYWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5hdCgxKS5sYWJlbCA9PT0gdGhpcy5zZXJ2aWNlUGFzc3dvcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VkSW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC53cml0ZWxuKFwiTG9nZ2VkIGluIGFzIGFkbWluXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9naW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxvZ291dDogYXN5bmMgKGFyZ3MsIHRlcm1pbmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC53cml0ZWxuKFwiTG9nZ2VkIG91dFwiKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1hbmRzXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Z2dlc3RDb21tYW5kczogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ2dlZEluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VkSW5Db21tYW5kcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ2dlZE91dENvbW1hbmRzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogdGhpcy5zdWdnZXN0aW9uc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRlcm1pbmFsLmxvYWRBZGRvbihhZGRvbik7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,37 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { rand } from "../utils";
4
+ let TokenGenerator = class TokenGenerator {
5
+ chars;
6
+ constructor() {
7
+ this.chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
8
+ }
9
+ async generate(checkCb) {
10
+ let token = null;
11
+ let tries = 0;
12
+ let notGood = true;
13
+ while (notGood && tries < 5) {
14
+ token = this.generateToken();
15
+ notGood = await checkCb(token);
16
+ tries++;
17
+ }
18
+ if (notGood) {
19
+ throw new Error(`Couldn't generate an unique token..`);
20
+ }
21
+ return token;
22
+ }
23
+ generateToken() {
24
+ let s = "";
25
+ for (let i = 0; i < 15; i++) {
26
+ const ix = rand(0, this.chars.length - 1);
27
+ s += this.chars[ix];
28
+ }
29
+ return s;
30
+ }
31
+ };
32
+ TokenGenerator = __decorate([
33
+ singleton(),
34
+ __metadata("design:paramtypes", [])
35
+ ], TokenGenerator);
36
+ export { TokenGenerator };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZCLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFFYixLQUFLLENBQVM7SUFFeEI7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLGdFQUFnRSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRDO1FBQ3ZELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0IsT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSixDQUFBO0FBL0JZLGNBQWM7SUFEMUIsU0FBUyxFQUFFOztHQUNDLGNBQWMsQ0ErQjFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge3JhbmR9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5cclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkdlbmVyYXRvciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNoYXJzOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5jaGFycyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZW5lcmF0ZShjaGVja0NiOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuICAgICAgICBsZXQgdHJpZXMgPSAwO1xyXG4gICAgICAgIGxldCBub3RHb29kID0gdHJ1ZTtcclxuICAgICAgICB3aGlsZSAobm90R29vZCAmJiB0cmllcyA8IDUpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdlbmVyYXRlVG9rZW4oKTtcclxuICAgICAgICAgICAgbm90R29vZCA9IGF3YWl0IGNoZWNrQ2IodG9rZW4pO1xyXG4gICAgICAgICAgICB0cmllcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm90R29vZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGdlbmVyYXRlIGFuIHVuaXF1ZSB0b2tlbi4uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0b2tlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlVG9rZW4oKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcyA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl4ID0gcmFuZCgwLCB0aGlzLmNoYXJzLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICBzICs9IHRoaXMuY2hhcnNbaXhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import axios from "axios";
4
+ import { isObject } from "../utils";
5
+ import { Configuration } from "./configuration";
6
+ import { Cache } from "./cache";
7
+ let TranslationProvider = class TranslationProvider {
8
+ config;
9
+ cache;
10
+ constructor(config, cache) {
11
+ this.config = config;
12
+ this.cache = cache;
13
+ }
14
+ getDictionary(language) {
15
+ return this.cache.getOrSet(`translations-${language}`, async () => {
16
+ try {
17
+ const url = this.config.resolve("translationsTemplate")
18
+ .replace(`__lang__`, language)
19
+ .replace(`[lang]`, language);
20
+ const data = await axios.get(url).then(t => t.data);
21
+ if (isObject(data[language])) {
22
+ return data[language];
23
+ }
24
+ return data;
25
+ }
26
+ catch (e) {
27
+ return {
28
+ message: `${e}`
29
+ };
30
+ }
31
+ }, 5 * 60);
32
+ }
33
+ };
34
+ TranslationProvider = __decorate([
35
+ singleton(),
36
+ __metadata("design:paramtypes", [Configuration, Cache])
37
+ ], TranslationProvider);
38
+ export { TranslationProvider };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHJhbnNsYXRpb24tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHdkIsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFFUDtJQUFnQztJQUFyRCxZQUFxQixNQUFxQixFQUFXLEtBQVk7UUFBNUMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFXLFVBQUssR0FBTCxLQUFLLENBQU87SUFFakUsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixRQUFRLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RCxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7cUJBQ2xELE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO3FCQUM3QixPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMzQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxPQUFPO29CQUNILE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtpQkFDbEIsQ0FBQTtZQUNMLENBQUM7UUFDTCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUF4QlksbUJBQW1CO0lBRC9CLFNBQVMsRUFBRTtxQ0FHcUIsYUFBYSxFQUFrQixLQUFLO0dBRnhELG1CQUFtQixDQXdCL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcclxuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQge0lUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtDYWNoZX0gZnJvbSBcIi4vY2FjaGVcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25Qcm92aWRlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29uZmlnOiBDb25maWd1cmF0aW9uLCByZWFkb25seSBjYWNoZTogQ2FjaGUpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGljdGlvbmFyeShsYW5ndWFnZTogc3RyaW5nKTogUHJvbWlzZTxJVHJhbnNsYXRpb25zPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0T3JTZXQoYHRyYW5zbGF0aW9ucy0ke2xhbmd1YWdlfWAsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJ0cmFuc2xhdGlvbnNUZW1wbGF0ZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGBfX2xhbmdfX2AsIGxhbmd1YWdlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGBbbGFuZ11gLCBsYW5ndWFnZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgYXhpb3MuZ2V0KHVybCkudGhlbih0ID0+IHQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoZGF0YVtsYW5ndWFnZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbbGFuZ3VhZ2VdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7ZX1gXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCA1ICogNjApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,67 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, singleton } from "tsyringe";
3
+ import { getValue, isDefined, isString } from "../utils";
4
+ import { TranslationProvider } from "./translation-provider";
5
+ let Translator = class Translator {
6
+ translationProvider;
7
+ dictionaries;
8
+ constructor(translationProvider) {
9
+ this.translationProvider = translationProvider;
10
+ this.dictionaries = {};
11
+ }
12
+ async getDictionary(language) {
13
+ this.dictionaries[language] = await this.translationProvider.getDictionary(language);
14
+ return this.dictionaries[language];
15
+ }
16
+ getTranslationSync(language, key, params) {
17
+ if (!isString(key) || !key.length) {
18
+ throw new Error(`Parameter "key" required`);
19
+ }
20
+ const dictionary = this.dictionaries[language];
21
+ const translation = getValue(dictionary, key, key) || key;
22
+ return this.interpolate(translation, params);
23
+ }
24
+ getTranslation(language, key, params) {
25
+ if (!isString(key) || !key.length) {
26
+ throw new Error(`Parameter "key" required`);
27
+ }
28
+ return this.getDictionary(language).then(dictionary => {
29
+ const translation = getValue(dictionary, key, key) || key;
30
+ return this.interpolate(translation, params);
31
+ });
32
+ }
33
+ getTranslations(language, ...keys) {
34
+ return new Promise(resolve => {
35
+ Promise.all(keys.map(key => this.getTranslation(language, key))).then(translations => {
36
+ resolve(keys.reduce((result, key, i) => {
37
+ result[key] = translations[i];
38
+ return result;
39
+ }, {}));
40
+ });
41
+ });
42
+ }
43
+ interpolate(expr, params) {
44
+ if (typeof expr === "string") {
45
+ return this.interpolateString(expr, params);
46
+ }
47
+ if (typeof expr === "function") {
48
+ return expr(params);
49
+ }
50
+ return expr;
51
+ }
52
+ interpolateString(expr, params) {
53
+ if (!expr || !params)
54
+ return expr;
55
+ return expr.replace(/{{\s?([^{}\s]*)\s?}}/g, (substring, b) => {
56
+ const r = getValue(params, b);
57
+ return isDefined(r) ? r : substring;
58
+ });
59
+ }
60
+ };
61
+ Translator = __decorate([
62
+ injectable(),
63
+ singleton(),
64
+ __metadata("design:paramtypes", [TranslationProvider])
65
+ ], Translator);
66
+ export { Translator };
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90cmFuc2xhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFJcEQsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUlDO0lBRlYsWUFBWSxDQUFvQztJQUUxRCxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLE1BQVk7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVcsRUFBRSxNQUFZO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFnQixFQUFFLEdBQUcsSUFBYztRQUMvQyxPQUFPLElBQUksT0FBTyxDQUFnQixPQUFPLENBQUMsRUFBRTtZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqRixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLE9BQU8sTUFBTSxDQUFDO2dCQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsV0FBVyxDQUFDLElBQXVCLEVBQUUsTUFBWTtRQUN2RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQVksRUFBRSxNQUFZO1FBQ2xELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBaUIsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUMxRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFBO0FBNURZLFVBQVU7SUFGdEIsVUFBVSxFQUFFO0lBQ1osU0FBUyxFQUFFO3FDQUtpQyxtQkFBbUI7R0FKbkQsVUFBVSxDQTREdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7Z2V0VmFsdWUsIGlzRGVmaW5lZCwgaXNTdHJpbmd9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge0lUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtUcmFuc2xhdGlvblByb3ZpZGVyfSBmcm9tIFwiLi90cmFuc2xhdGlvbi1wcm92aWRlclwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0b3Ige1xyXG5cclxuICAgIHByb3RlY3RlZCBkaWN0aW9uYXJpZXM6IHsgW2xhbmc6IHN0cmluZ106IElUcmFuc2xhdGlvbnMgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uUHJvdmlkZXI6IFRyYW5zbGF0aW9uUHJvdmlkZXIpIHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcmllcyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERpY3Rpb25hcnkobGFuZ3VhZ2U6IHN0cmluZyk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyaWVzW2xhbmd1YWdlXSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25Qcm92aWRlci5nZXREaWN0aW9uYXJ5KGxhbmd1YWdlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJpZXNbbGFuZ3VhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYW5zbGF0aW9uU3luYyhsYW5ndWFnZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWlzU3RyaW5nKGtleSkgfHwgIWtleS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCJrZXlcIiByZXF1aXJlZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJpZXNbbGFuZ3VhZ2VdO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gZ2V0VmFsdWUoZGljdGlvbmFyeSwga2V5LCBrZXkpIHx8IGtleTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZSh0cmFuc2xhdGlvbiwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvbihsYW5ndWFnZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBpZiAoIWlzU3RyaW5nKGtleSkgfHwgIWtleS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgXCJrZXlcIiByZXF1aXJlZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREaWN0aW9uYXJ5KGxhbmd1YWdlKS50aGVuKGRpY3Rpb25hcnkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldFZhbHVlKGRpY3Rpb25hcnksIGtleSwga2V5KSB8fCBrZXk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRyYW5zbGF0aW9uLCBwYXJhbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyYW5zbGF0aW9ucyhsYW5ndWFnZTogc3RyaW5nLCAuLi5rZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJVHJhbnNsYXRpb25zPihyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoa2V5cy5tYXAoa2V5ID0+IHRoaXMuZ2V0VHJhbnNsYXRpb24obGFuZ3VhZ2UsIGtleSkpKS50aGVuKHRyYW5zbGF0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGtleXMucmVkdWNlKChyZXN1bHQsIGtleSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNsYXRpb25zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9LCB7fSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGUoZXhwcjogc3RyaW5nIHwgRnVuY3Rpb24sIHBhcmFtcz86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHByID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlU3RyaW5nKGV4cHIsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHByKHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBleHByIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGVTdHJpbmcoZXhwcjogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgICAgICBpZiAoIWV4cHIgfHwgIXBhcmFtcykgcmV0dXJuIGV4cHI7XHJcbiAgICAgICAgcmV0dXJuIGV4cHIucmVwbGFjZSgve3tcXHM/KFtee31cXHNdKilcXHM/fX0vZywgKHN1YnN0cmluZzogc3RyaW5nLCBiOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgciA9IGdldFZhbHVlKHBhcmFtcywgYik7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0RlZmluZWQocikgPyByIDogc3Vic3RyaW5nO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ const sampleUser = {
4
+ id: "5a3cdf7c6a9cf0ba32feccdf",
5
+ email: "admin@site.com",
6
+ password: "",
7
+ roles: ["admin"]
8
+ };
9
+ let UserManager = class UserManager {
10
+ async getByCredentials(credentials) {
11
+ return (sampleUser.email == credentials.email) ? sampleUser : await Promise.reject("message.login.error");
12
+ }
13
+ async getById(id) {
14
+ return (sampleUser.id == id) ? sampleUser : null;
15
+ }
16
+ async serialize(user) {
17
+ const res = Object.assign({}, user);
18
+ delete res.password;
19
+ return res;
20
+ }
21
+ };
22
+ UserManager = __decorate([
23
+ injectable(),
24
+ scoped(Lifecycle.ContainerScoped)
25
+ ], UserManager);
26
+ export { UserManager };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXItbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZELE1BQU0sVUFBVSxHQUFVO0lBQ3RCLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNuQixDQUFDO0FBSUssSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBVztJQUVwQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBZ0I7UUFDbkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDcEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVc7UUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUFmWSxXQUFXO0lBRnZCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLFdBQVcsQ0FldkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuY29uc3Qgc2FtcGxlVXNlcjogSVVzZXIgPSB7XHJcbiAgICBpZDogXCI1YTNjZGY3YzZhOWNmMGJhMzJmZWNjZGZcIixcclxuICAgIGVtYWlsOiBcImFkbWluQHNpdGUuY29tXCIsXHJcbiAgICBwYXNzd29yZDogXCJcIixcclxuICAgIHJvbGVzOiBbXCJhZG1pblwiXVxyXG59O1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciB7XHJcblxyXG4gICAgYXN5bmMgZ2V0QnlDcmVkZW50aWFscyhjcmVkZW50aWFsczogYW55KTogUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgICAgIHJldHVybiAoc2FtcGxlVXNlci5lbWFpbCA9PSBjcmVkZW50aWFscy5lbWFpbCkgPyBzYW1wbGVVc2VyIDogYXdhaXQgUHJvbWlzZS5yZWplY3QoXCJtZXNzYWdlLmxvZ2luLmVycm9yXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gKHNhbXBsZVVzZXIuaWQgPT0gaWQpID8gc2FtcGxlVXNlciA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VyaWFsaXplKHVzZXI6IElVc2VyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCByZXMgPSBPYmplY3QuYXNzaWduKHt9LCB1c2VyKTtcclxuICAgICAgICBkZWxldGUgcmVzLnBhc3N3b3JkO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cclxuIl19