@stemy/backend 3.6.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/commands/fixtures-command.d.ts +9 -0
  2. package/commands/index.d.ts +2 -0
  3. package/common-types.d.ts +11 -6
  4. package/esm2020/commands/clear-command.mjs +17 -0
  5. package/esm2020/commands/fixtures-command.mjs +23 -0
  6. package/esm2020/commands/index.mjs +7 -0
  7. package/esm2020/common-types.mjs +21 -0
  8. package/esm2020/public_api.mjs +379 -0
  9. package/esm2020/requests/asset-image-params.mjs +53 -0
  10. package/esm2020/rest-controllers/assets.controller.mjs +126 -0
  11. package/esm2020/rest-controllers/auth.controller.mjs +46 -0
  12. package/esm2020/rest-controllers/gallery.controller.mjs +21 -0
  13. package/esm2020/rest-controllers/progresses.controller.mjs +29 -0
  14. package/esm2020/rest-controllers/terminal-styles.mjs +67 -0
  15. package/esm2020/rest-controllers/terminal.controller.mjs +125 -0
  16. package/esm2020/rest-middlewares/container.middleware.mjs +20 -0
  17. package/esm2020/rest-middlewares/error-handler.middleware.mjs +74 -0
  18. package/esm2020/rest-middlewares/language.middleware.mjs +18 -0
  19. package/esm2020/rest-middlewares/request-ended.middleware.mjs +23 -0
  20. package/esm2020/rest-middlewares/request-started.middleware.mjs +22 -0
  21. package/esm2020/services/asset-processor.mjs +90 -0
  22. package/esm2020/services/asset-resolver.mjs +31 -0
  23. package/esm2020/services/assets.mjs +140 -0
  24. package/esm2020/services/backend-provider.mjs +22 -0
  25. package/esm2020/services/cache-processor.mjs +16 -0
  26. package/esm2020/services/cache.mjs +62 -0
  27. package/{esm2015/services/configuration.js → esm2020/services/configuration.mjs} +3 -15
  28. package/esm2020/services/endpoint-provider.mjs +13 -0
  29. package/esm2020/services/entities/asset.mjs +43 -0
  30. package/esm2020/services/entities/base-entity.mjs +26 -0
  31. package/esm2020/services/entities/lazy-asset.mjs +73 -0
  32. package/esm2020/services/entities/progress.mjs +176 -0
  33. package/esm2020/services/entities/temp-asset.mjs +45 -0
  34. package/esm2020/services/fixtures.mjs +26 -0
  35. package/esm2020/services/gallery-cache.mjs +27 -0
  36. package/esm2020/services/gallery-image.mjs +37 -0
  37. package/esm2020/services/gallery.mjs +116 -0
  38. package/esm2020/services/id-generator.mjs +42 -0
  39. package/esm2020/services/job-manager.mjs +187 -0
  40. package/esm2020/services/lazy-assets.mjs +48 -0
  41. package/esm2020/services/logger.mjs +21 -0
  42. package/esm2020/services/mail-sender.mjs +36 -0
  43. package/esm2020/services/memory-cache.mjs +57 -0
  44. package/esm2020/services/mongo-connector.mjs +37 -0
  45. package/esm2020/services/open-api.mjs +114 -0
  46. package/esm2020/services/progresses.mjs +86 -0
  47. package/esm2020/services/template-renderer.mjs +64 -0
  48. package/esm2020/services/terminal-manager.mjs +77 -0
  49. package/esm2020/services/token-generator.mjs +35 -0
  50. package/esm2020/services/translation-provider.mjs +34 -0
  51. package/esm2020/services/translator.mjs +63 -0
  52. package/esm2020/services/user-manager.mjs +27 -0
  53. package/esm2020/socket-controllers/progress.controller.mjs +52 -0
  54. package/esm2020/socket-controllers/terminal.controller.mjs +48 -0
  55. package/esm2020/socket-controllers/terminal.mjs +85 -0
  56. package/esm2020/socket-middlewares/compression.middleware.mjs +14 -0
  57. package/esm2020/static.mjs +23 -0
  58. package/esm2020/utilities/decorators.mjs +52 -0
  59. package/esm2020/utilities/di-container.mjs +83 -0
  60. package/esm2020/utilities/empty-job.mjs +13 -0
  61. package/esm2020/utilities/lazy-asset-generator.mjs +35 -0
  62. package/esm2020/utilities/mongoose.mjs +216 -0
  63. package/esm2020/utils.mjs +693 -0
  64. package/esm2020/validators.mjs +46 -0
  65. package/fesm2015/{stemy-backend.js → stemy-backend.mjs} +1638 -2403
  66. package/fesm2015/stemy-backend.mjs.map +1 -0
  67. package/fesm2020/stemy-backend.mjs +4202 -0
  68. package/fesm2020/stemy-backend.mjs.map +1 -0
  69. package/{stemy-backend.d.ts → index.d.ts} +1 -0
  70. package/package.json +35 -23
  71. package/public_api.d.ts +2 -2
  72. package/rest-controllers/terminal-styles.d.ts +2 -0
  73. package/rest-controllers/terminal.controller.d.ts +2 -0
  74. package/services/assets.d.ts +1 -0
  75. package/services/entities/asset.d.ts +1 -0
  76. package/services/entities/temp-asset.d.ts +1 -0
  77. package/services/fixtures.d.ts +2 -2
  78. package/utils.d.ts +3 -0
  79. package/bundles/stemy-backend.umd.js +0 -7553
  80. package/bundles/stemy-backend.umd.js.map +0 -1
  81. package/esm2015/common-types.js +0 -20
  82. package/esm2015/public_api.js +0 -380
  83. package/esm2015/requests/asset-image-params.js +0 -70
  84. package/esm2015/rest-controllers/assets.controller.js +0 -180
  85. package/esm2015/rest-controllers/auth.controller.js +0 -76
  86. package/esm2015/rest-controllers/gallery.controller.js +0 -37
  87. package/esm2015/rest-controllers/progresses.controller.js +0 -57
  88. package/esm2015/rest-controllers/terminal.controller.js +0 -151
  89. package/esm2015/rest-middlewares/container.middleware.js +0 -32
  90. package/esm2015/rest-middlewares/error-handler.middleware.js +0 -99
  91. package/esm2015/rest-middlewares/language.middleware.js +0 -28
  92. package/esm2015/rest-middlewares/request-ended.middleware.js +0 -33
  93. package/esm2015/rest-middlewares/request-started.middleware.js +0 -32
  94. package/esm2015/rest-openapi.js +0 -44
  95. package/esm2015/services/asset-processor.js +0 -108
  96. package/esm2015/services/asset-resolver.js +0 -53
  97. package/esm2015/services/assets.js +0 -181
  98. package/esm2015/services/backend-provider.js +0 -32
  99. package/esm2015/services/cache-processor.js +0 -34
  100. package/esm2015/services/cache.js +0 -93
  101. package/esm2015/services/endpoint-provider.js +0 -29
  102. package/esm2015/services/entities/asset.js +0 -60
  103. package/esm2015/services/entities/base-entity.js +0 -37
  104. package/esm2015/services/entities/lazy-asset.js +0 -90
  105. package/esm2015/services/entities/progress.js +0 -213
  106. package/esm2015/services/entities/temp-asset.js +0 -64
  107. package/esm2015/services/fixtures.js +0 -45
  108. package/esm2015/services/gallery-cache.js +0 -36
  109. package/esm2015/services/gallery-image.js +0 -48
  110. package/esm2015/services/gallery.js +0 -138
  111. package/esm2015/services/id-generator.js +0 -63
  112. package/esm2015/services/job-manager.js +0 -221
  113. package/esm2015/services/lazy-assets.js +0 -83
  114. package/esm2015/services/logger.js +0 -31
  115. package/esm2015/services/mail-sender.js +0 -58
  116. package/esm2015/services/memory-cache.js +0 -84
  117. package/esm2015/services/mongo-connector.js +0 -58
  118. package/esm2015/services/open-api.js +0 -140
  119. package/esm2015/services/progresses.js +0 -118
  120. package/esm2015/services/template-renderer.js +0 -88
  121. package/esm2015/services/terminal-manager.js +0 -94
  122. package/esm2015/services/token-generator.js +0 -55
  123. package/esm2015/services/translation-provider.js +0 -54
  124. package/esm2015/services/translator.js +0 -84
  125. package/esm2015/services/user-manager.js +0 -47
  126. package/esm2015/socket-controllers/progress.controller.js +0 -82
  127. package/esm2015/socket-controllers/terminal.controller.js +0 -83
  128. package/esm2015/socket-controllers/terminal.js +0 -98
  129. package/esm2015/socket-middlewares/compression.middleware.js +0 -19
  130. package/esm2015/static.js +0 -33
  131. package/esm2015/utilities/clear-command.js +0 -33
  132. package/esm2015/utilities/decorators.js +0 -54
  133. package/esm2015/utilities/di-container.js +0 -84
  134. package/esm2015/utilities/empty-job.js +0 -29
  135. package/esm2015/utilities/lazy-asset-generator.js +0 -46
  136. package/esm2015/utilities/mongoose.js +0 -225
  137. package/esm2015/utils.js +0 -699
  138. package/esm2015/validators.js +0 -51
  139. package/fesm2015/stemy-backend.js.map +0 -1
  140. package/rest-openapi.d.ts +0 -3
  141. package/stemy-backend.metadata.json +0 -1
  142. /package/{utilities → commands}/clear-command.d.ts +0 -0
  143. /package/{esm2015/stemy-backend.js → esm2020/stemy-backend.mjs} +0 -0
  144. /package/{esm2015/utilities/base-doc.js → esm2020/utilities/base-doc.mjs} +0 -0
  145. /package/{esm2015/utilities/tree.js → esm2020/utilities/tree.mjs} +0 -0
@@ -0,0 +1,86 @@
1
+ import { __decorate } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { ObjectId } from "bson";
4
+ import { promiseTimeout } from "../utils";
5
+ import { Progress } from "./entities/progress";
6
+ let Progresses = class Progresses {
7
+ constructor(connector, jobMan) {
8
+ this.connector = connector;
9
+ this.jobMan = jobMan;
10
+ this.collection = connector.database.collection("progresses");
11
+ this.progresses = {};
12
+ this.jobMan.on("progress-changed", progress => {
13
+ const id = progress.id;
14
+ this.progresses[id] = new Progress(new ObjectId(id), progress, this.collection);
15
+ });
16
+ }
17
+ async waitToFinish(id) {
18
+ return Promise.race([
19
+ this.waitForProgress(id, async () => {
20
+ let progress = this.progresses[id];
21
+ if (!progress || progress.percent < 100) {
22
+ progress = await this.get(id);
23
+ }
24
+ if (!progress) {
25
+ throw new Error(`Progress does not exists with id: ${id}`);
26
+ }
27
+ return progress;
28
+ }, 500),
29
+ this.waitForProgress(id, async () => {
30
+ return this.progresses[id] || null;
31
+ }, 25)
32
+ ]);
33
+ }
34
+ async get(id) {
35
+ return !id ? null : this.find({ _id: new ObjectId(id) });
36
+ }
37
+ async find(where) {
38
+ const data = await this.collection.findOne(where);
39
+ return !data ? null : new Progress(data._id, data, this.collection);
40
+ }
41
+ async create(max = 100) {
42
+ if (isNaN(max) || max <= 0) {
43
+ throw new Error(`Max progress value must be bigger than zero`);
44
+ }
45
+ const data = {
46
+ current: 0,
47
+ max: max,
48
+ message: "",
49
+ error: "",
50
+ canceled: false
51
+ };
52
+ const res = await this.collection.insertOne(data);
53
+ return new Progress(res.insertedId, data, this.collection);
54
+ }
55
+ async remove(id) {
56
+ await this.collection.deleteOne({ _id: new ObjectId(id) });
57
+ return id;
58
+ }
59
+ async waitForProgress(id, cb, delay) {
60
+ let isFinished = false;
61
+ let progress = null;
62
+ let waitTime = 0;
63
+ while (!isFinished) {
64
+ progress = await cb();
65
+ waitTime += delay;
66
+ if (progress) {
67
+ if (progress.error) {
68
+ throw new Error(progress.error);
69
+ }
70
+ isFinished = progress.percent >= 100;
71
+ }
72
+ if (!isFinished) {
73
+ if (waitTime >= this.jobMan.maxTimeout) {
74
+ throw new Error(`Progress with id: ${id} probably never will be finished!`);
75
+ }
76
+ await promiseTimeout(delay);
77
+ }
78
+ }
79
+ return progress;
80
+ }
81
+ };
82
+ Progresses = __decorate([
83
+ singleton()
84
+ ], Progresses);
85
+ export { Progresses };
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHdEMsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUtuQixZQUFxQixTQUF5QixFQUFXLE1BQWtCO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUN2RSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFZLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBVTtRQUN6QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2hDLElBQUksUUFBUSxHQUFH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QVUsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQzthQUN4QztZQUNELElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7b0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztpQkFDL0U7Z0JBQ0QsTUFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0I7U0FDSjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSixDQUFBO0FBbkZZLFVBQVU7SUFEdEIsU0FBUyxFQUFFO0dBQ0MsVUFBVSxDQW1GdEI7U0FuRlksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0ZpbHRlclF1ZXJ5fSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gXCIuL2pvYi1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3N9IGZyb20gXCIuL2VudGl0aWVzL3Byb2dyZXNzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzZXMge1xyXG5cclxuICAgIHByb3RlY3RlZCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFBhcnRpYWw8SVByb2dyZXNzPj47XHJcbiAgICBwcm90ZWN0ZWQgcHJvZ3Jlc3Nlczoge1tpZDogc3RyaW5nXTogSVByb2dyZXNzfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yLCByZWFkb25seSBqb2JNYW46IEpvYk1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb25uZWN0b3IuZGF0YWJhc2UuY29sbGVjdGlvbihcInByb2dyZXNzZXNcIik7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5qb2JNYW4ub24oXCJwcm9ncmVzcy1jaGFuZ2VkXCIsIHByb2dyZXNzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBwcm9ncmVzcy5pZCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gPSBuZXcgUHJvZ3Jlc3MobmV3IE9iamVjdElkKGlkKSwgcHJvZ3Jlc3MgYXMgYW55LCB0aGlzLmNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRUb0ZpbmlzaChpZDogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgdGhpcy53YWl0Rm9yUHJvZ3Jlc3MoaWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3Nlc1tpZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb2dyZXNzIHx8IHByb2dyZXNzLnBlcmNlbnQgPCAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2dyZXNzIGRvZXMgbm90IGV4aXN0cyB3aXRoIGlkOiAke2lkfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9LCA1MDApLFxyXG4gICAgICAgICAgICB0aGlzLndhaXRGb3JQcm9ncmVzcyhpZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3Nlc1tpZF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgfSwgMjUpXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiAhaWQgPyBudWxsIDogdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJUHJvZ3Jlc3M+KTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xyXG4gICAgICAgIHJldHVybiAhZGF0YSA/IG51bGwgOiBuZXcgUHJvZ3Jlc3MoZGF0YS5faWQsIGRhdGEsIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlKG1heDogbnVtYmVyID0gMTAwKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBpZiAoaXNOYU4obWF4KSB8fCBtYXggPD0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1heCBwcm9ncmVzcyB2YWx1ZSBtdXN0IGJlIGJpZ2dlciB0aGFuIHplcm9gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgbWF4OiBtYXgsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXHJcbiAgICAgICAgICAgIGVycm9yOiBcIlwiLFxyXG4gICAgICAgICAgICBjYW5jZWxlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9ncmVzcyhyZXMuaW5zZXJ0ZWRJZCwgZGF0YSwgdGhpcy5jb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiBuZXcgT2JqZWN0SWQoaWQpfSk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyB3YWl0Rm9yUHJvZ3Jlc3MoaWQ6IHN0cmluZywgY2I6ICgpID0+IFByb21pc2U8SVByb2dyZXNzPiwgZGVsYXk6IG51bWJlcik6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJvZ3Jlc3M6IElQcm9ncmVzcyA9IG51bGw7XHJcbiAgICAgICAgbGV0IHdhaXRUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIHdoaWxlICghaXNGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IGNiKCk7XHJcbiAgICAgICAgICAgIHdhaXRUaW1lICs9IGRlbGF5O1xyXG4gICAgICAgICAgICBpZiAocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9ncmVzcy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpc0ZpbmlzaGVkID0gcHJvZ3Jlc3MucGVyY2VudCA+PSAxMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2FpdFRpbWUgPj0gdGhpcy5qb2JNYW4ubWF4VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZ3Jlc3Mgd2l0aCBpZDogJHtpZH0gcHJvYmFibHkgbmV2ZXIgd2lsbCBiZSBmaW5pc2hlZCFgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2VUaW1lb3V0KGRlbGF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,64 @@
1
+ import { __decorate } 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
+ let TemplateRenderer = class TemplateRenderer {
7
+ constructor(translator, config) {
8
+ this.translator = translator;
9
+ this.config = config;
10
+ this.templates = {};
11
+ Handlebars.registerHelper(`object`, function ({ hash }) {
12
+ return hash;
13
+ });
14
+ Handlebars.registerHelper(`now`, function () {
15
+ return new Date().getTime();
16
+ });
17
+ Handlebars.registerHelper(`keys`, function (obj) {
18
+ return !obj ? [] : Object.keys(obj);
19
+ });
20
+ Handlebars.registerHelper(`translate`, function (key, params) {
21
+ return translator.getTranslationSync(this.language, key, params);
22
+ });
23
+ }
24
+ init() {
25
+ this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve("templatesDir"), []);
26
+ return this.initPromise;
27
+ }
28
+ async parseTemplates(dir, dirPath) {
29
+ return new Promise(resolve => {
30
+ readdir(dir, async (err, files) => {
31
+ for (let file of files) {
32
+ const path = join(dir, file);
33
+ if (lstatSync(path).isDirectory()) {
34
+ await this.parseTemplates(join(dir, file), dirPath.concat([file]));
35
+ continue;
36
+ }
37
+ const parts = file.split(".");
38
+ parts.pop();
39
+ const name = parts.join(".");
40
+ const fullName = dirPath.concat([name]).join("-");
41
+ const content = readFileSync(path).toString("utf8");
42
+ this.templates[fullName] = Handlebars.compile(content);
43
+ Handlebars.registerPartial(fullName, content);
44
+ }
45
+ resolve();
46
+ });
47
+ });
48
+ }
49
+ async render(template, language, context) {
50
+ await this.init();
51
+ await this.translator.getDictionary(language);
52
+ if (!this.templates[template]) {
53
+ return Promise.reject(`Template not found with name: ${template}`);
54
+ }
55
+ context = Object.assign({ language }, context || {});
56
+ const res = this.templates[template](context);
57
+ return res instanceof Error ? await Promise.reject(res) : res;
58
+ }
59
+ };
60
+ TemplateRenderer = __decorate([
61
+ singleton()
62
+ ], TemplateRenderer);
63
+ export { TemplateRenderer };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdGVtcGxhdGUtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFNbEMsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFNekIsWUFBcUIsVUFBc0IsRUFBVyxNQUFxQjtRQUF0RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEVBQUMsSUFBSSxFQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7WUFDN0IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxHQUFRO1lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBVyxFQUFFLE1BQVc7WUFDckUsT0FBTyxVQUFVLENB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7bHN0YXRTeW5jLCByZWFkZGlyLCByZWFkRmlsZVN5bmN9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCAqIGFzIEhhbmRsZWJhcnMgZnJvbSBcImhhbmRsZWJhcnNcIjtcclxuXHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVSZW5kZXJlciB7XHJcblxyXG4gICAgdGVtcGxhdGVzOiB7W25hbWU6IHN0cmluZ106IEZ1bmN0aW9ufTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgaW5pdFByb21pc2U6IFByb21pc2U8YW55PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB0cmFuc2xhdG9yOiBUcmFuc2xhdG9yLCByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHt9O1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYG9iamVjdGAsIGZ1bmN0aW9uKHtoYXNofSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaGFzaDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGBub3dgLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoYGtleXNgLCBmdW5jdGlvbihvYmo6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gIW9iaiA/IFtdIDogT2JqZWN0LmtleXMob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKGB0cmFuc2xhdGVgLCBmdW5jdGlvbiAoa2V5OiBzdHJpbmcsIHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdG9yLmdldFRyYW5zbGF0aW9uU3luYyh0aGlzLmxhbmd1YWdlLCBrZXksIHBhcmFtcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0UHJvbWlzZSB8fCB0aGlzLnBhcnNlVGVtcGxhdGVzKHRoaXMuY29uZmlnLnJlc29sdmUoXCJ0ZW1wbGF0ZXNEaXJcIiksIFtdKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXJzZVRlbXBsYXRlcyhkaXI6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlYWRkaXIoZGlyLCBhc3luYyAoZXJyLCBmaWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBqb2luKGRpciwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGFyc2VUZW1wbGF0ZXMoam9pbihkaXIsIGZpbGUpLCBkaXJQYXRoLmNvbmNhdChbZmlsZV0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gZmlsZS5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLmpvaW4oXCIuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gZGlyUGF0aC5jb25jYXQoW25hbWVdKS5qb2luKFwiLVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKHBhdGgpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1tmdWxsTmFtZV0gPSBIYW5kbGViYXJzLmNvbXBpbGUoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlclBhcnRpYWwoZnVsbE5hbWUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXIodGVtcGxhdGU6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZywgY29udGV4dD86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdG9yLmdldERpY3Rpb25hcnkobGFuZ3VhZ2UpO1xyXG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVGVtcGxhdGUgbm90IGZvdW5kIHdpdGggbmFtZTogJHt0ZW1wbGF0ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe2xhbmd1YWdlfSwgY29udGV4dCB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVdKGNvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiByZXMgaW5zdGFuY2VvZiBFcnJvciA/IGF3YWl0IFByb21pc2UucmVqZWN0KHJlcykgOiByZXM7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,77 @@
1
+ import { __decorate, __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 { camelCaseToDash, colorize, ConsoleColor } from "../utils";
6
+ let TerminalManager = class TerminalManager {
7
+ constructor(logger, config, commands) {
8
+ this.logger = logger;
9
+ this.config = config;
10
+ this.servicePassword = config.resolve("servicePassword");
11
+ this.suggestions = {
12
+ login: async (args) => {
13
+ if (args.length > 2) {
14
+ return null;
15
+ }
16
+ const input = `${args.at(1).label}`;
17
+ return (!input) ? [] : [{
18
+ id: input,
19
+ label: input,
20
+ masked: true
21
+ }];
22
+ },
23
+ ...commands.reduce((acc, command) => {
24
+ command.name = camelCaseToDash(command.name || command.constructor.name || "");
25
+ if (!command.name || !command.suggest)
26
+ return acc;
27
+ acc[command.name] = async (a, t) => command.suggest(a, t);
28
+ return acc;
29
+ }, {})
30
+ };
31
+ this.commands = commands.reduce((acc, command) => {
32
+ if (!command.name)
33
+ return acc;
34
+ acc[command.name] = async (a, t) => command.execute(a, t);
35
+ return acc;
36
+ }, {});
37
+ this.loggedOutCommands = ["login", "clear"];
38
+ this.loggedInCommands = Object.keys(this.commands);
39
+ this.loggedInCommands.push("logout");
40
+ console.log(`Current service password is: ${colorize(this.servicePassword, ConsoleColor.FgGreen)}`);
41
+ }
42
+ loadAddons(terminal) {
43
+ let loggedIn = false;
44
+ const addon = new CommandsAddon({
45
+ commands: {
46
+ login: async (args, terminal) => {
47
+ if (args.at(1).label === this.servicePassword) {
48
+ loggedIn = true;
49
+ terminal.writeln("Logged in as admin");
50
+ }
51
+ else {
52
+ throw new Error("Invalid login");
53
+ }
54
+ },
55
+ logout: async (args, terminal) => {
56
+ loggedIn = false;
57
+ terminal.writeln("Logged out");
58
+ },
59
+ ...this.commands
60
+ },
61
+ suggestCommands: async () => {
62
+ if (loggedIn) {
63
+ return this.loggedInCommands;
64
+ }
65
+ return this.loggedOutCommands;
66
+ },
67
+ suggestions: this.suggestions
68
+ });
69
+ terminal.loadAddon(addon);
70
+ }
71
+ };
72
+ TerminalManager = __decorate([
73
+ singleton(),
74
+ __param(2, injectAll(TERMINAL_COMMAND))
75
+ ], TerminalManager);
76
+ export { TerminalManager };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLEVBQUMsYUFBYSxFQUE4QixNQUFNLGdDQUFnQyxDQUFDO0FBQzFGLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHMUQsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTtJQU94QixZQUFzQixNQUFjLEVBQ2QsTUFBcUIsRUFDRixRQUE0QjtRQUYvQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUV2QyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakIsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixFQUFFLEVBQUUsS0FBSzt3QkFDVCxLQUFLLEVBQUUsS0FBSzt3QkFDWixNQUFNLEVBQUUsSUFBSTtxQkFDZixDQUFDLENBQUM7WUFDUCxDQUFDO1lB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QUFyRVksZUFBZTtJQUQzQixTQUFTLEVBQUU7SUFVSyxXQUFBLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0dBVC9CLGVBQWUsQ0FxRTNCO1NBckVZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdEFsbCwgc2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb21tYW5kc0FkZG9uLCBJQ29tbWFuZE1hcCwgSVN1Z2dlc3Rpb25NYXB9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtJVGVybWluYWwsIElUZXJtaW5hbENvbW1hbmQsIFRFUk1JTkFMX0NPTU1BTkR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtjYW1lbENhc2VUb0Rhc2gsIGNvbG9yaXplLCBDb25zb2xlQ29sb3J9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5cclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbE1hbmFnZXIge1xyXG4gICAgcHJvdGVjdGVkIHNlcnZpY2VQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25zOiBJU3VnZ2VzdGlvbk1hcDtcclxuICAgIHByb3RlY3RlZCBjb21tYW5kczogSUNvbW1hbmRNYXA7XHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2VkT3V0Q29tbWFuZHM6IHN0cmluZ1tdO1xyXG4gICAgcHJvdGVjdGVkIGxvZ2dlZEluQ29tbWFuZHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcixcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBjb25maWc6IENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0QWxsKFRFUk1JTkFMX0NPTU1BTkQpIGNvbW1hbmRzOiBJVGVybWluYWxDb21tYW5kW10pIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VQYXNzd29yZCA9IGNvbmZpZy5yZXNvbHZlKFwic2VydmljZVBhc3N3b3JkXCIpO1xyXG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIGxvZ2luOiBhc3luYyAoYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBgJHthcmdzLmF0KDEpLmxhYmVsfWA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCFpbnB1dCkgPyBbXSA6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICBtYXNrZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5jb21tYW5kcy5yZWR1Y2UoKGFjYywgY29tbWFuZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5uYW1lID0gY2FtZWxDYXNlVG9EYXNoKGNvbW1hbmQubmFtZSB8fCBjb21tYW5kLmNvbnN0cnVjdG9yLm5hbWUgfHwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSB8fCAhY29tbWFuZC5zdWdnZXN0KSByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICAgICAgYWNjW2NvbW1hbmQubmFtZV0gPSBhc3luYyAoYSwgdCkgPT4gY29tbWFuZC5zdWdnZXN0KGEsIHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgfSwge30pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbW1hbmRzID0gY29tbWFuZHMucmVkdWNlKChhY2MsIGNvbW1hbmQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb21tYW5kLm5hbWUpIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIGFjY1tjb21tYW5kLm5hbWVdID0gYXN5bmMgKGEsIHQpID0+IGNvbW1hbmQuZXhlY3V0ZShhLCB0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRPdXRDb21tYW5kcyA9IFtcImxvZ2luXCIsIFwiY2xlYXJcIl07XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvbW1hbmRzID0gT2JqZWN0LmtleXModGhpcy5jb21tYW5kcyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZWRJbkNvbW1hbmRzLnB1c2goXCJsb2dvdXRcIik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgc2VydmljZSBwYXNzd29yZCBpczogJHtjb2xvcml6ZSh0aGlzLnNlcnZpY2VQYXNzd29yZCwgQ29uc29sZUNvbG9yLkZnR3JlZW4pfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBZGRvbnModGVybWluYWw6IElUZXJtaW5hbCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBsb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gbmV3IENvbW1hbmRzQWRkb24oe1xyXG4gICAgICAgICAgICBjb21tYW5kczoge1xyXG4gICAgICAgICAgICAgICAgbG9naW46IGFzeW5jIChhcmdzLCB0ZXJtaW5hbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmF0KDEpLmxhYmVsID09PSB0aGlzLnNlcnZpY2VQYXNzd29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWRJbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJMb2dnZWQgaW4gYXMgYWRtaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dpblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbG9nb3V0OiBhc3luYyAoYXJncywgdGVybWluYWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLndyaXRlbG4oXCJMb2dnZWQgb3V0XCIpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbWFuZHNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VnZ2VzdENvbW1hbmRzOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9nZ2VkSW4pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZWRJbkNvbW1hbmRzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VkT3V0Q29tbWFuZHM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiB0aGlzLnN1Z2dlc3Rpb25zXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGVybWluYWwubG9hZEFkZG9uKGFkZG9uKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { __decorate } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { rand } from "../utils";
4
+ let TokenGenerator = class TokenGenerator {
5
+ constructor() {
6
+ this.chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
7
+ }
8
+ async generate(checkCb) {
9
+ let token = null;
10
+ let tries = 0;
11
+ let notGood = true;
12
+ while (notGood && tries < 5) {
13
+ token = this.generateToken();
14
+ notGood = await checkCb(token);
15
+ tries++;
16
+ }
17
+ if (notGood) {
18
+ throw new Error(`Couldn't generate an unique token..`);
19
+ }
20
+ return token;
21
+ }
22
+ generateToken() {
23
+ let s = "";
24
+ for (let i = 0; i < 15; i++) {
25
+ const ix = rand(0, this.chars.length - 1);
26
+ s += this.chars[ix];
27
+ }
28
+ return s;
29
+ }
30
+ };
31
+ TokenGenerator = __decorate([
32
+ singleton()
33
+ ], TokenGenerator);
34
+ export { TokenGenerator };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZCLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFJdkI7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLGdFQUFnRSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRDO1FBQ3ZELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixLQUFLLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSixDQUFBO0FBL0JZLGNBQWM7SUFEMUIsU0FBUyxFQUFFO0dBQ0MsY0FBYyxDQStCMUI7U0EvQlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtyYW5kfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgVG9rZW5HZW5lcmF0b3Ige1xyXG5cclxuICAgIHByb3RlY3RlZCBjaGFyczogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuY2hhcnMgPSBcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGUoY2hlY2tDYjogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRyaWVzID0gMDtcclxuICAgICAgICBsZXQgbm90R29vZCA9IHRydWU7XHJcbiAgICAgICAgd2hpbGUgKG5vdEdvb2QgJiYgdHJpZXMgPCA1KSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZW5lcmF0ZVRva2VuKCk7XHJcbiAgICAgICAgICAgIG5vdEdvb2QgPSBhd2FpdCBjaGVja0NiKHRva2VuKTtcclxuICAgICAgICAgICAgdHJpZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vdEdvb2QpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBnZW5lcmF0ZSBhbiB1bmlxdWUgdG9rZW4uLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9rZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVRva2VuKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHMgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTU7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpeCA9IHJhbmQoMCwgdGhpcy5jaGFycy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgcyArPSB0aGlzLmNoYXJzW2l4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,34 @@
1
+ import { __decorate } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import axios from "axios";
4
+ import { isObject } from "../utils";
5
+ let TranslationProvider = class TranslationProvider {
6
+ constructor(config, cache) {
7
+ this.config = config;
8
+ this.cache = cache;
9
+ }
10
+ getDictionary(language) {
11
+ return this.cache.getOrSet(`translations-${language}`, async () => {
12
+ try {
13
+ const url = this.config.resolve("translationsTemplate")
14
+ .replace(`__lang__`, language)
15
+ .replace(`[lang]`, language);
16
+ const data = await axios.get(url).then(t => t.data);
17
+ if (isObject(data[language])) {
18
+ return data[language];
19
+ }
20
+ return data;
21
+ }
22
+ catch (e) {
23
+ return {
24
+ message: `${e}`
25
+ };
26
+ }
27
+ }, 5 * 60);
28
+ }
29
+ };
30
+ TranslationProvider = __decorate([
31
+ singleton()
32
+ ], TranslationProvider);
33
+ export { TranslationProvider };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdHJhbnNsYXRpb24tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNM0IsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7SUFFNUIsWUFBcUIsTUFBcUIsRUFBVyxLQUFZO1FBQTVDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFPO0lBRWpFLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsUUFBUSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUQsSUFBSTtnQkFDQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztxQkFDbEQsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7cUJBQzdCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO29CQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDekI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU87b0JBQ0gsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUNsQixDQUFBO2FBQ0o7UUFDTCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUF4QlksbUJBQW1CO0lBRC9CLFNBQVMsRUFBRTtHQUNDLG1CQUFtQixDQXdCL0I7U0F4QlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7aXNPYmplY3R9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtJVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL2NhY2hlXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uUHJvdmlkZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbiwgcmVhZG9ubHkgY2FjaGU6IENhY2hlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldERpY3Rpb25hcnkobGFuZ3VhZ2U6IHN0cmluZyk6IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldE9yU2V0KGB0cmFuc2xhdGlvbnMtJHtsYW5ndWFnZX1gLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwidHJhbnNsYXRpb25zVGVtcGxhdGVcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgX19sYW5nX19gLCBsYW5ndWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShgW2xhbmddYCwgbGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGF4aW9zLmdldCh1cmwpLnRoZW4odCA9PiB0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGFbbGFuZ3VhZ2VdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW2xhbmd1YWdlXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2V9YFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNSAqIDYwKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,63 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, singleton } from "tsyringe";
3
+ import { getValue, isDefined, isString } from "../utils";
4
+ let Translator = class Translator {
5
+ constructor(translationProvider) {
6
+ this.translationProvider = translationProvider;
7
+ this.dictionaries = {};
8
+ }
9
+ async getDictionary(language) {
10
+ this.dictionaries[language] = await this.translationProvider.getDictionary(language);
11
+ return this.dictionaries[language];
12
+ }
13
+ getTranslationSync(language, key, params) {
14
+ if (!isString(key) || !key.length) {
15
+ throw new Error(`Parameter "key" required`);
16
+ }
17
+ const dictionary = this.dictionaries[language];
18
+ const translation = getValue(dictionary, key, key) || key;
19
+ return this.interpolate(translation, params);
20
+ }
21
+ getTranslation(language, key, params) {
22
+ if (!isString(key) || !key.length) {
23
+ throw new Error(`Parameter "key" required`);
24
+ }
25
+ return this.getDictionary(language).then(dictionary => {
26
+ const translation = getValue(dictionary, key, key) || key;
27
+ return this.interpolate(translation, params);
28
+ });
29
+ }
30
+ getTranslations(language, ...keys) {
31
+ return new Promise(resolve => {
32
+ Promise.all(keys.map(key => this.getTranslation(language, key))).then(translations => {
33
+ resolve(keys.reduce((result, key, i) => {
34
+ result[key] = translations[i];
35
+ return result;
36
+ }, {}));
37
+ });
38
+ });
39
+ }
40
+ interpolate(expr, params) {
41
+ if (typeof expr === "string") {
42
+ return this.interpolateString(expr, params);
43
+ }
44
+ if (typeof expr === "function") {
45
+ return expr(params);
46
+ }
47
+ return expr;
48
+ }
49
+ interpolateString(expr, params) {
50
+ if (!expr || !params)
51
+ return expr;
52
+ return expr.replace(/{{\s?([^{}\s]*)\s?}}/g, (substring, b) => {
53
+ const r = getValue(params, b);
54
+ return isDefined(r) ? r : substring;
55
+ });
56
+ }
57
+ };
58
+ Translator = __decorate([
59
+ injectable(),
60
+ singleton()
61
+ ], Translator);
62
+ export { Translator };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90cmFuc2xhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNaEQsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQUluQixZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLE1BQVk7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLE1BQVk7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNsRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0IsRUFBRSxHQUFHLElBQWM7UUFDL0MsT0FBTyxJQUFJLE9BQU8sQ0FBZ0IsT0FBTyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixPQUFPLE1BQU0sQ0FBQztnQkFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUF1QixFQUFFLE1BQVk7UUFDdkQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQWMsQ0FBQztJQUMxQixDQUFDO0lBRVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLE1BQVk7UUFDbEQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLENBQVMsRUFBRSxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUE7QUE1RFksVUFBVTtJQUZ0QixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7R0FDQyxVQUFVLENBNER0QjtTQTVEWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2dldFZhbHVlLCBpc0RlZmluZWQsIGlzU3RyaW5nfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtJVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRpb25Qcm92aWRlcn0gZnJvbSBcIi4vdHJhbnNsYXRpb24tcHJvdmlkZXJcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdG9yIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyaWVzOiB7IFtsYW5nOiBzdHJpbmddOiBJVHJhbnNsYXRpb25zIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGlvblByb3ZpZGVyOiBUcmFuc2xhdGlvblByb3ZpZGVyKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJpZXMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREaWN0aW9uYXJ5KGxhbmd1YWdlOiBzdHJpbmcpOiBQcm9taXNlPElUcmFuc2xhdGlvbnM+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcmllc1tsYW5ndWFnZV0gPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uUHJvdmlkZXIuZ2V0RGljdGlvbmFyeShsYW5ndWFnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyaWVzW2xhbmd1YWdlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvblN5bmMobGFuZ3VhZ2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpIHx8ICFrZXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwia2V5XCIgcmVxdWlyZWRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyaWVzW2xhbmd1YWdlXTtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldFZhbHVlKGRpY3Rpb25hcnksIGtleSwga2V5KSB8fCBrZXk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodHJhbnNsYXRpb24sIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhbnNsYXRpb24obGFuZ3VhZ2U6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpIHx8ICFrZXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIFwia2V5XCIgcmVxdWlyZWRgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGljdGlvbmFyeShsYW5ndWFnZSkudGhlbihkaWN0aW9uYXJ5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBnZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXksIGtleSkgfHwga2V5O1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZSh0cmFuc2xhdGlvbiwgcGFyYW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmFuc2xhdGlvbnMobGFuZ3VhZ2U6IHN0cmluZywgLi4ua2V5czogc3RyaW5nW10pOiBQcm9taXNlPElUcmFuc2xhdGlvbnM+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SVRyYW5zbGF0aW9ucz4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIFByb21pc2UuYWxsKGtleXMubWFwKGtleSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKGxhbmd1YWdlLCBrZXkpKSkudGhlbih0cmFuc2xhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzLnJlZHVjZSgocmVzdWx0LCBrZXksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zbGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfSwge30pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGludGVycG9sYXRlKGV4cHI6IHN0cmluZyB8IEZ1bmN0aW9uLCBwYXJhbXM/OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVN0cmluZyhleHByLCBwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGV4cHIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwcihwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXhwciBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGludGVycG9sYXRlU3RyaW5nKGV4cHI6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICAgICAgaWYgKCFleHByIHx8ICFwYXJhbXMpIHJldHVybiBleHByO1xyXG4gICAgICAgIHJldHVybiBleHByLnJlcGxhY2UoL3t7XFxzPyhbXnt9XFxzXSopXFxzP319L2csIChzdWJzdHJpbmc6IHN0cmluZywgYjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHIgPSBnZXRWYWx1ZShwYXJhbXMsIGIpO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHIpID8gciA6IHN1YnN0cmluZztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXItbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBR3ZELE1BQU0sVUFBVSxHQUFVO0lBQ3RCLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNuQixDQUFDO0FBSUssSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBVztJQUVwQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBZ0I7UUFDbkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDcEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVc7UUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUE7QUFmWSxXQUFXO0lBRnZCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0dBQ3JCLFdBQVcsQ0FldkI7U0FmWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNhbXBsZVVzZXI6IElVc2VyID0ge1xyXG4gICAgaWQ6IFwiNWEzY2RmN2M2YTljZjBiYTMyZmVjY2RmXCIsXHJcbiAgICBlbWFpbDogXCJhZG1pbkBzaXRlLmNvbVwiLFxyXG4gICAgcGFzc3dvcmQ6IFwiXCIsXHJcbiAgICByb2xlczogW1wiYWRtaW5cIl1cclxufTtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXIge1xyXG5cclxuICAgIGFzeW5jIGdldEJ5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IGFueSk6IFByb21pc2U8SVVzZXI+IHtcclxuICAgICAgICByZXR1cm4gKHNhbXBsZVVzZXIuZW1haWwgPT0gY3JlZGVudGlhbHMuZW1haWwpID8gc2FtcGxlVXNlciA6IGF3YWl0IFByb21pc2UucmVqZWN0KFwibWVzc2FnZS5sb2dpbi5lcnJvclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPElVc2VyPiB7XHJcbiAgICAgICAgcmV0dXJuIChzYW1wbGVVc2VyLmlkID09IGlkKSA/IHNhbXBsZVVzZXIgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlcmlhbGl6ZSh1c2VyOiBJVXNlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmFzc2lnbih7fSwgdXNlcik7XHJcbiAgICAgICAgZGVsZXRlIHJlcy5wYXNzd29yZDtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,52 @@
1
+ import { __decorate, __param } from "tslib";
2
+ import { inject, singleton } from "tsyringe";
3
+ import { ConnectedSocket, MessageBody, OnMessage, SocketController, } from "socket-controllers";
4
+ import { SOCKET_SERVER } from "../common-types";
5
+ import { broadcast } from "../utils";
6
+ let ProgressController = class ProgressController {
7
+ constructor(progresses, socketServer) {
8
+ this.progresses = progresses;
9
+ this.socketServer = socketServer;
10
+ }
11
+ async advanceProgress(client, progressId) {
12
+ const progress = await this.progresses.get(progressId);
13
+ if (!progress)
14
+ return;
15
+ const json = progress.toJSON();
16
+ broadcast(this.socketServer, c => {
17
+ if (c.interestedProgresses instanceof Set && c.interestedProgresses.has(progressId)) {
18
+ client.emit("background-progress-changed", json);
19
+ }
20
+ });
21
+ console.log(`progress changed: ${client.id}, data: ${JSON.stringify(json)}`);
22
+ }
23
+ async setProgressInterest(client, progressId) {
24
+ const progress = await this.progresses.get(progressId);
25
+ if (!progress)
26
+ return;
27
+ const json = progress.toJSON();
28
+ client.interestedProgresses = client.interestedProgresses || new Set();
29
+ if (client.interestedProgresses.has(progressId))
30
+ return;
31
+ client.interestedProgresses.add(progressId);
32
+ client.emit("background-progress-changed", json);
33
+ console.log(`progress interest added: ${client.id}, data: ${JSON.stringify(json)}`);
34
+ }
35
+ };
36
+ __decorate([
37
+ OnMessage("background-progress"),
38
+ __param(0, ConnectedSocket()),
39
+ __param(1, MessageBody())
40
+ ], ProgressController.prototype, "advanceProgress", null);
41
+ __decorate([
42
+ OnMessage("background-progress-interest"),
43
+ __param(0, ConnectedSocket()),
44
+ __param(1, MessageBody())
45
+ ], ProgressController.prototype, "setProgressInterest", null);
46
+ ProgressController = __decorate([
47
+ singleton(),
48
+ SocketController(),
49
+ __param(1, inject(SOCKET_SERVER))
50
+ ], ProgressController);
51
+ export { ProgressController };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zb2NrZXQtY29udHJvbGxlcnMvcHJvZ3Jlc3MuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixHQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUYsT0FBTyxFQUFnQixhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSzVCLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBRTNCLFlBQXFCLFVBQXNCLEVBQWtDLFlBQW9CO1FBQTVFLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBa0MsaUJBQVksR0FBWixZQUFZLENBQVE7SUFDakcsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLGVBQWUsQ0FBb0IsTUFBcUIsRUFBaUIsVUFBa0I7UUFDN0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxDQUFDLG9CQUFvQixZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNqRixNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3BEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixNQUFNLENBQUMsRUFBRSxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxtQkFBbUIsQ0FBb0IsTUFBcUIsRUFBaUIsVUFBa0I7UUFDakcsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLElBQUksSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvRSxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTztRQUN4RCxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0NBQ0osQ0FBQTtBQXZCUztJQURMLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztJQUNWLFdBQUEsZUFBZSxFQUFFLENBQUE7SUFBeUIsV0FBQSxXQUFXLEVBQUUsQ0FBQTt5REFVN0U7QUFHSztJQURMLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztJQUNmLFdBQUEsZUFBZSxFQUFFLENBQUE7SUFBeUIsV0FBQSxXQUFXLEVBQUUsQ0FBQTs2REFTakY7QUE1QlEsa0JBQWtCO0lBRjlCLFNBQVMsRUFBRTtJQUNYLGdCQUFnQixFQUFFO0lBRytCLFdBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0dBRjFELGtCQUFrQixDQTZCOUI7U0E3Qlksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7Q29ubmVjdGVkU29ja2V0LCBNZXNzYWdlQm9keSwgT25NZXNzYWdlLCBTb2NrZXRDb250cm9sbGVyLH0gZnJvbSBcInNvY2tldC1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NlcnZlcn0gZnJvbSBcInNvY2tldC5pb1wiO1xyXG5pbXBvcnQge0lDbGllbnRTb2NrZXQsIFNPQ0tFVF9TRVJWRVJ9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHticm9hZGNhc3R9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXN9IGZyb20gXCIuLi9zZXJ2aWNlcy9wcm9ncmVzc2VzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuQFNvY2tldENvbnRyb2xsZXIoKVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NDb250cm9sbGVyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBwcm9ncmVzc2VzOiBQcm9ncmVzc2VzLCBAaW5qZWN0KFNPQ0tFVF9TRVJWRVIpIHJlYWRvbmx5IHNvY2tldFNlcnZlcjogU2VydmVyKSB7XHJcbiAgICB9XHJcblxyXG4gICAgQE9uTWVzc2FnZShcImJhY2tncm91bmQtcHJvZ3Jlc3NcIilcclxuICAgIGFzeW5jIGFkdmFuY2VQcm9ncmVzcyhAQ29ubmVjdGVkU29ja2V0KCkgY2xpZW50OiBJQ2xpZW50U29ja2V0LCBATWVzc2FnZUJvZHkoKSBwcm9ncmVzc0lkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy5nZXQocHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgaWYgKCFwcm9ncmVzcykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSBwcm9ncmVzcy50b0pTT04oKTtcclxuICAgICAgICBicm9hZGNhc3QodGhpcy5zb2NrZXRTZXJ2ZXIsIGMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYy5pbnRlcmVzdGVkUHJvZ3Jlc3NlcyBpbnN0YW5jZW9mIFNldCAmJiBjLmludGVyZXN0ZWRQcm9ncmVzc2VzLmhhcyhwcm9ncmVzc0lkKSkge1xyXG4gICAgICAgICAgICAgICAgY2xpZW50LmVtaXQoXCJiYWNrZ3JvdW5kLXByb2dyZXNzLWNoYW5nZWRcIiwganNvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgcHJvZ3Jlc3MgY2hhbmdlZDogJHtjbGllbnQuaWR9LCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGpzb24pfWApO1xyXG4gICAgfVxyXG5cclxuICAgIEBPbk1lc3NhZ2UoXCJiYWNrZ3JvdW5kLXByb2dyZXNzLWludGVyZXN0XCIpXHJcbiAgICBhc3luYyBzZXRQcm9ncmVzc0ludGVyZXN0KEBDb25uZWN0ZWRTb2NrZXQoKSBjbGllbnQ6IElDbGllbnRTb2NrZXQsIEBNZXNzYWdlQm9keSgpIHByb2dyZXNzSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmdldChwcm9ncmVzc0lkKTtcclxuICAgICAgICBpZiAoIXByb2dyZXNzKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QganNvbiA9IHByb2dyZXNzLnRvSlNPTigpO1xyXG4gICAgICAgIGNsaWVudC5pbnRlcmVzdGVkUHJvZ3Jlc3NlcyA9IGNsaWVudC5pbnRlcmVzdGVkUHJvZ3Jlc3NlcyB8fCBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICBpZiAoY2xpZW50LmludGVyZXN0ZWRQcm9ncmVzc2VzLmhhcyhwcm9ncmVzc0lkKSkgcmV0dXJuO1xyXG4gICAgICAgIGNsaWVudC5pbnRlcmVzdGVkUHJvZ3Jlc3Nlcy5hZGQocHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgY2xpZW50LmVtaXQoXCJiYWNrZ3JvdW5kLXByb2dyZXNzLWNoYW5nZWRcIiwganNvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coYHByb2dyZXNzIGludGVyZXN0IGFkZGVkOiAke2NsaWVudC5pZH0sIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoanNvbil9YCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,48 @@
1
+ import { __decorate, __param } from "tslib";
2
+ import { singleton } from "tsyringe";
3
+ import { ConnectedSocket, MessageBody, OnMessage, SocketController } from "socket-controllers";
4
+ import { Terminal } from "./terminal";
5
+ let TerminalController = class TerminalController {
6
+ constructor(manager) {
7
+ this.manager = manager;
8
+ this.terminals = {};
9
+ }
10
+ async terminalInit(client) {
11
+ const terminal = new Terminal(client);
12
+ this.manager.loadAddons(terminal);
13
+ this.terminals[client.id] = terminal;
14
+ client.on("disconnect", () => terminal.dispose());
15
+ }
16
+ async terminalData(client, data) {
17
+ const terminal = this.terminals[client.id];
18
+ if (!terminal)
19
+ return;
20
+ terminal.input(data);
21
+ }
22
+ async terminalUpload(client, upload) {
23
+ const terminal = this.terminals[client.id];
24
+ if (!terminal || !upload)
25
+ return;
26
+ terminal.addFile(upload);
27
+ }
28
+ };
29
+ __decorate([
30
+ OnMessage("terminal-init"),
31
+ __param(0, ConnectedSocket())
32
+ ], TerminalController.prototype, "terminalInit", null);
33
+ __decorate([
34
+ OnMessage("terminal-data"),
35
+ __param(0, ConnectedSocket()),
36
+ __param(1, MessageBody())
37
+ ], TerminalController.prototype, "terminalData", null);
38
+ __decorate([
39
+ OnMessage("terminal-upload"),
40
+ __param(0, ConnectedSocket()),
41
+ __param(1, MessageBody())
42
+ ], TerminalController.prototype, "terminalUpload", null);
43
+ TerminalController = __decorate([
44
+ singleton(),
45
+ SocketController()
46
+ ], TerminalController);
47
+ export { TerminalController };
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zb2NrZXQtY29udHJvbGxlcnMvdGVybWluYWwuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUk3RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBSTdCLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBRzNCLFlBQXNCLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxZQUFZLENBQW9CLE1BQXFCO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBR0ssQUFBTixLQUFLLENBQUMsWUFBWSxDQUFvQixNQUFxQixFQUFpQixJQUFZO1FBQ3BGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFHSyxBQUFOLEtBQUssQ0FBQyxjQUFjLENBQW9CLE1BQXFCLEVBQWlCLE1BQXFCO1FBQy9GLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNqQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDSixDQUFBO0FBcEJTO0lBREwsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUNQLFdBQUEsZUFBZSxFQUFFLENBQUE7c0RBS3BDO0FBR0s7SUFETCxTQUFTLENBQUMsZUFBZSxDQUFDO0lBQ1AsV0FBQSxlQUFlLEVBQUUsQ0FBQTtJQUF5QixXQUFBLFdBQVcsRUFBRSxDQUFBO3NEQUkxRTtBQUdLO0lBREwsU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBQ1AsV0FBQSxlQUFlLEVBQUUsQ0FBQTtJQUF5QixXQUFBLFdBQVcsRUFBRSxDQUFBO3dEQUk1RTtBQTNCUSxrQkFBa0I7SUFGOUIsU0FBUyxFQUFFO0lBQ1gsZ0JBQWdCLEVBQUU7R0FDTixrQkFBa0IsQ0E0QjlCO1NBNUJZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2luZ2xldG9ufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtDb25uZWN0ZWRTb2NrZXQsIE1lc3NhZ2VCb2R5LCBPbk1lc3NhZ2UsIFNvY2tldENvbnRyb2xsZXJ9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuXHJcbmltcG9ydCB7SUNsaWVudFNvY2tldCwgSVRlcm1pbmFsRmlsZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge1Rlcm1pbmFsTWFuYWdlcn0gZnJvbSBcIi4uL3NlcnZpY2VzL3Rlcm1pbmFsLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtUZXJtaW5hbH0gZnJvbSBcIi4vdGVybWluYWxcIjtcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5AU29ja2V0Q29udHJvbGxlcigpXHJcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbENvbnRyb2xsZXIge1xyXG4gICAgcHJvdGVjdGVkIHRlcm1pbmFsczoge1tpZDogc3RyaW5nXTogVGVybWluYWx9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBtYW5hZ2VyOiBUZXJtaW5hbE1hbmFnZXIpIHtcclxuICAgICAgICB0aGlzLnRlcm1pbmFscyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIEBPbk1lc3NhZ2UoXCJ0ZXJtaW5hbC1pbml0XCIpXHJcbiAgICBhc3luYyB0ZXJtaW5hbEluaXQoQENvbm5lY3RlZFNvY2tldCgpIGNsaWVudDogSUNsaWVudFNvY2tldCkge1xyXG4gICAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKGNsaWVudCk7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmxvYWRBZGRvbnModGVybWluYWwpO1xyXG4gICAgICAgIHRoaXMudGVybWluYWxzW2NsaWVudC5pZF0gPSB0ZXJtaW5hbDtcclxuICAgICAgICBjbGllbnQub24oXCJkaXNjb25uZWN0XCIsICgpID0+IHRlcm1pbmFsLmRpc3Bvc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQE9uTWVzc2FnZShcInRlcm1pbmFsLWRhdGFcIilcclxuICAgIGFzeW5jIHRlcm1pbmFsRGF0YShAQ29ubmVjdGVkU29ja2V0KCkgY2xpZW50OiBJQ2xpZW50U29ja2V0LCBATWVzc2FnZUJvZHkoKSBkYXRhOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWxzW2NsaWVudC5pZF07XHJcbiAgICAgICAgaWYgKCF0ZXJtaW5hbCkgcmV0dXJuO1xyXG4gICAgICAgIHRlcm1pbmFsLmlucHV0KGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIEBPbk1lc3NhZ2UoXCJ0ZXJtaW5hbC11cGxvYWRcIilcclxuICAgIGFzeW5jIHRlcm1pbmFsVXBsb2FkKEBDb25uZWN0ZWRTb2NrZXQoKSBjbGllbnQ6IElDbGllbnRTb2NrZXQsIEBNZXNzYWdlQm9keSgpIHVwbG9hZDogSVRlcm1pbmFsRmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHRlcm1pbmFsID0gdGhpcy50ZXJtaW5hbHNbY2xpZW50LmlkXTtcclxuICAgICAgICBpZiAoIXRlcm1pbmFsIHx8ICF1cGxvYWQpIHJldHVybjtcclxuICAgICAgICB0ZXJtaW5hbC5hZGRGaWxlKHVwbG9hZCk7XHJcbiAgICB9XHJcbn1cclxuIl19