@banta/sdk 3.3.11 → 4.0.2

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 (47) hide show
  1. package/banta-sdk.metadata.json +1 -1
  2. package/bundles/banta-sdk.umd.js +1157 -413
  3. package/bundles/banta-sdk.umd.js.map +1 -1
  4. package/bundles/banta-sdk.umd.min.js +1 -1
  5. package/bundles/banta-sdk.umd.min.js.map +1 -1
  6. package/esm2015/lib/banta/banta.component.js +9 -15
  7. package/esm2015/lib/banta-sdk.module.js +10 -4
  8. package/esm2015/lib/chat/banta-chat/banta-chat.component.js +16 -19
  9. package/esm2015/lib/chat/chat-message/chat-message.component.js +2 -2
  10. package/esm2015/lib/chat/chat-view/chat-view.component.js +7 -6
  11. package/esm2015/lib/chat/live-chat-message.component.js +3 -3
  12. package/esm2015/lib/chat-backend-base.js +17 -0
  13. package/esm2015/lib/chat-backend.js +74 -0
  14. package/esm2015/lib/chat-source-base.js +2 -0
  15. package/esm2015/lib/chat-source.js +151 -0
  16. package/esm2015/lib/comments/banta-comments/banta-comments.component.js +344 -174
  17. package/esm2015/lib/comments/comment/comment.component.js +56 -20
  18. package/esm2015/lib/comments/comment-field/comment-field.component.js +19 -17
  19. package/esm2015/lib/comments/comment-view/comment-view.component.js +77 -39
  20. package/esm2015/lib/comments/live-comment.component.js +3 -3
  21. package/esm2015/lib/common/index.js +1 -3
  22. package/esm2015/lib/index.js +6 -1
  23. package/esm2015/lib/sdk-options.js +2 -0
  24. package/fesm2015/banta-sdk.js +761 -310
  25. package/fesm2015/banta-sdk.js.map +1 -1
  26. package/lib/banta/banta.component.d.ts +7 -8
  27. package/lib/banta-sdk.module.d.ts +2 -1
  28. package/lib/chat/banta-chat/banta-chat.component.d.ts +10 -12
  29. package/lib/chat/chat-view/chat-view.component.d.ts +7 -4
  30. package/lib/chat/live-chat-message.component.d.ts +2 -2
  31. package/lib/chat-backend-base.d.ts +22 -0
  32. package/lib/chat-backend.d.ts +21 -0
  33. package/lib/chat-source-base.d.ts +31 -0
  34. package/lib/chat-source.d.ts +38 -0
  35. package/lib/comments/banta-comments/banta-comments.component.d.ts +68 -61
  36. package/lib/comments/comment/comment.component.d.ts +25 -6
  37. package/lib/comments/comment-field/comment-field.component.d.ts +9 -5
  38. package/lib/comments/comment-view/comment-view.component.d.ts +26 -8
  39. package/lib/comments/live-comment.component.d.ts +2 -2
  40. package/lib/common/index.d.ts +0 -2
  41. package/lib/index.d.ts +5 -0
  42. package/lib/sdk-options.d.ts +4 -0
  43. package/package.json +1 -1
  44. package/esm2015/lib/common/banta.service.js +0 -21
  45. package/esm2015/lib/common/chat-backend.service.js +0 -7
  46. package/lib/common/banta.service.d.ts +0 -9
  47. package/lib/common/chat-backend.service.d.ts +0 -14
@@ -0,0 +1,74 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Inject, Injectable } from "@angular/core";
3
+ import { CommentsOrder, DurableSocket } from "@banta/common";
4
+ import { ChatBackendBase } from "./chat-backend-base";
5
+ import { ChatSource } from "./chat-source";
6
+ import { BANTA_SDK_OPTIONS } from "./sdk-options";
7
+ export class ChatBackend extends ChatBackendBase {
8
+ constructor(options) {
9
+ super();
10
+ this.options = options;
11
+ }
12
+ get serviceUrl() {
13
+ var _a, _b;
14
+ return `${(_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.serviceUrl) !== null && _b !== void 0 ? _b : 'http://localhost:3422'}`;
15
+ }
16
+ connectToService() {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ let socket = new DurableSocket(`${this.serviceUrl.replace(/^http/, 'ws')}/socket`);
19
+ yield new Promise((resolve, reject) => {
20
+ socket.onopen = () => {
21
+ resolve();
22
+ };
23
+ socket.onclose = e => {
24
+ if (e.code === 503) {
25
+ console.error(`Failed to connect to chat service!`);
26
+ reject(e);
27
+ }
28
+ };
29
+ });
30
+ socket.onerror = undefined;
31
+ return socket;
32
+ });
33
+ }
34
+ getSourceForTopic(topicId, options) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ return yield new ChatSource(this, topicId, undefined, (options === null || options === void 0 ? void 0 : options.sortOrder) || CommentsOrder.NEWEST)
37
+ .bind(yield this.connectToService());
38
+ });
39
+ }
40
+ getSourceForThread(topicId, messageId, options) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ return yield new ChatSource(this, topicId, messageId, (options === null || options === void 0 ? void 0 : options.sortOrder) || CommentsOrder.NEWEST)
43
+ .bind(yield this.connectToService());
44
+ });
45
+ }
46
+ getSourceCountForTopic(topicId) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ let response = yield fetch(`${this.serviceUrl}/topics/${topicId}`);
49
+ if (response.status >= 400)
50
+ return 0;
51
+ let topic = yield response.json();
52
+ return topic.messageCount || 0;
53
+ });
54
+ }
55
+ refreshMessage(message) {
56
+ throw new Error("Method not implemented.");
57
+ }
58
+ getMessage(topicId, messageId) {
59
+ throw new Error("Method not implemented.");
60
+ }
61
+ getSubMessage(topicId, parentMessageId, messageId) {
62
+ throw new Error("Method not implemented.");
63
+ }
64
+ watchMessage(message, handler) {
65
+ throw new Error("Method not implemented.");
66
+ }
67
+ }
68
+ ChatBackend.decorators = [
69
+ { type: Injectable }
70
+ ];
71
+ ChatBackend.ctorParameters = () => [
72
+ { type: undefined, decorators: [{ type: Inject, args: [BANTA_SDK_OPTIONS,] }] }
73
+ ];
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1iYWNrZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY2hhdC1iYWNrZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWUsYUFBYSxFQUFFLGFBQWEsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFcEcsT0FBTyxFQUFFLGVBQWUsRUFBcUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUc5RCxNQUFNLE9BQU8sV0FBWSxTQUFRLGVBQWU7SUFDNUMsWUFDdUMsT0FBbUI7UUFFdEQsS0FBSyxFQUFFLENBQUM7UUFGMkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtJQUcxRCxDQUFDO0lBRUQsSUFBSSxVQUFVOztRQUNWLE9BQU8sR0FBRyxZQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLFVBQVUsbUNBQUksdUJBQXVCLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRWEsZ0JBQWdCOztZQUMxQixJQUFJLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkYsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7b0JBQ2pCLE9BQU8sRUFBRSxDQUFDO2dCQUNkLENBQUMsQ0FBQTtnQkFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO3dCQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7d0JBQ3BELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDYjtnQkFDTCxDQUFDLENBQUE7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1lBRTNCLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7S0FBQTtJQUVLLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxPQUEyQjs7WUFDaEUsT0FBTyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFNBQVMsS0FBSSxhQUFhLENBQUMsTUFBTSxDQUFDO2lCQUM1RixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVLLGtCQUFrQixDQUFDLE9BQWUsRUFBRSxTQUFpQixFQUFFLE9BQTJCOztZQUNwRixPQUFPLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxLQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUM7aUJBQzVGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUssc0JBQXNCLENBQUMsT0FBZTs7WUFDeEMsSUFBSSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFbEUsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUc7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFDO1lBRWIsSUFBSSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0tBQUE7SUFFRCxjQUFjLENBQUMsT0FBb0I7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZSxFQUFFLFNBQWlCO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQWUsRUFBRSxlQUF1QixFQUFFLFNBQWlCO1FBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQW9CLEVBQUUsT0FBdUM7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7OztZQWhFSixVQUFVOzs7NENBR0YsTUFBTSxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDb21tZW50c09yZGVyLCBEdXJhYmxlU29ja2V0LCBOb3RpZmljYXRpb24sIFVzZXIsIFZvdGUgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlLCBDaGF0U291cmNlT3B0aW9ucyB9IGZyb20gXCIuL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2UgfSBmcm9tIFwiLi9jaGF0LXNvdXJjZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuL2NoYXQtc291cmNlLWJhc2VcIjtcclxuaW1wb3J0IHsgQkFOVEFfU0RLX09QVElPTlMsIFNka09wdGlvbnMgfSBmcm9tIFwiLi9zZGstb3B0aW9uc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2hhdEJhY2tlbmQgZXh0ZW5kcyBDaGF0QmFja2VuZEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdChCQU5UQV9TREtfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBTZGtPcHRpb25zXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXJ2aWNlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnM/LnNlcnZpY2VVcmwgPz8gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzQyMid9YDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb1NlcnZpY2UoKSB7XHJcbiAgICAgICAgbGV0IHNvY2tldCA9IG5ldyBEdXJhYmxlU29ja2V0KGAke3RoaXMuc2VydmljZVVybC5yZXBsYWNlKC9eaHR0cC8sICd3cycpfS9zb2NrZXRgKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNvY2tldC5vbmNsb3NlID0gZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSA1MDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29ubmVjdCB0byBjaGF0IHNlcnZpY2UhYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNvY2tldC5vbmVycm9yID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICByZXR1cm4gc29ja2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNvdXJjZUZvclRvcGljKHRvcGljSWQ6IHN0cmluZywgb3B0aW9ucz86IENoYXRTb3VyY2VPcHRpb25zKTogUHJvbWlzZTxDaGF0U291cmNlQmFzZT4ge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcgQ2hhdFNvdXJjZSh0aGlzLCB0b3BpY0lkLCB1bmRlZmluZWQsIG9wdGlvbnM/LnNvcnRPcmRlciB8fCBDb21tZW50c09yZGVyLk5FV0VTVClcclxuICAgICAgICAgICAgLmJpbmQoYXdhaXQgdGhpcy5jb25uZWN0VG9TZXJ2aWNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNvdXJjZUZvclRocmVhZCh0b3BpY0lkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nLCBvcHRpb25zPzogQ2hhdFNvdXJjZU9wdGlvbnMpOiBQcm9taXNlPENoYXRTb3VyY2U+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IENoYXRTb3VyY2UodGhpcywgdG9waWNJZCwgbWVzc2FnZUlkLCBvcHRpb25zPy5zb3J0T3JkZXIgfHwgQ29tbWVudHNPcmRlci5ORVdFU1QpXHJcbiAgICAgICAgICAgIC5iaW5kKGF3YWl0IHRoaXMuY29ubmVjdFRvU2VydmljZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTb3VyY2VDb3VudEZvclRvcGljKHRvcGljSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5zZXJ2aWNlVXJsfS90b3BpY3MvJHt0b3BpY0lkfWApXHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gNDAwKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgbGV0IHRvcGljID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIHJldHVybiB0b3BpYy5tZXNzYWdlQ291bnQgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IFByb21pc2U8Q2hhdE1lc3NhZ2U+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0TWVzc2FnZSh0b3BpY0lkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxDaGF0TWVzc2FnZT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gICAgfVxyXG4gICAgZ2V0U3ViTWVzc2FnZSh0b3BpY0lkOiBzdHJpbmcsIHBhcmVudE1lc3NhZ2VJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hhdE1lc3NhZ2U+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICAgIH1cclxuICAgIHdhdGNoTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSwgaGFuZGxlcjogKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgICB9XHJcbiAgICBub3RpZmljYXRpb25zQ2hhbmdlZDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25bXT47XHJcbiAgICBuZXdOb3RpZmljYXRpb246IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uPjtcclxuICAgIFxyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1zb3VyY2UtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NoYXQtc291cmNlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENvbW1lbnRzT3JkZXIsIENoYXRQZXJtaXNzaW9ucyB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGF0U291cmNlQmFzZSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0b3BpYyBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjaGF0L2NvbW1lbnRzXHJcbiAgICAgKi9cclxuICAgIGlkZW50aWZpZXIgOiBzdHJpbmc7XHJcbiAgICBwZXJtaXNzaW9uczogQ2hhdFBlcm1pc3Npb25zO1xyXG4gICAgcmVhZHk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHBhcmVudCBtZXNzYWdlIHRoYXQgdGhpcyB0aHJlYWQgY2hhdCBzb3VyY2UgaXMgZm9yLlxyXG4gICAgICogV2hlbiB0aGlzIGlzIG5vdCBzZXQsIHRoZSBjaGF0IHNvdXJjZSBpcyBhIHRvcC1sZXZlbCAoXCJ0b3BpY1wiKSBzb3VyY2UuXHJcbiAgICAgKiBXaGVuIGl0IGlzIHNldCwgdGhpcyBjaGF0IHNvdXJjZSBpcyBhIHRocmVhZCBzb3VyY2UgKGllIHJlcGxpZXMpLlxyXG4gICAgICovXHJcbiAgICBwYXJlbnRJZGVudGlmaWVyPyA6IHN0cmluZztcclxuICAgIHNvcnRPcmRlcj86IENvbW1lbnRzT3JkZXI7XHJcbiAgICBtZXNzYWdlUmVjZWl2ZWQgOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlPjtcclxuICAgIG1lc3NhZ2VTZW50IDogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZT47XHJcbiAgICBtZXNzYWdlcyA6IENoYXRNZXNzYWdlW107XHJcbiAgICBzZW5kKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkgOiBQcm9taXNlPENoYXRNZXNzYWdlPjtcclxuICAgIGNsb3NlKCk7XHJcbiAgICBnZXRDb3VudCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRFeGlzdGluZ01lc3NhZ2VzKCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VbXT47XHJcbiAgICBsb2FkQWZ0ZXIobWVzc2FnZSA6IENoYXRNZXNzYWdlLCBjb3VudCA6IG51bWJlcikgOiBQcm9taXNlPENoYXRNZXNzYWdlW10+O1xyXG4gICAgZ2V0KGlkIDogc3RyaW5nKSA6IFByb21pc2U8Q2hhdE1lc3NhZ2U+O1xyXG4gICAgbGlrZU1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgdW5saWtlTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBlZGl0TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKSA6IFByb21pc2U8dm9pZD47XHJcbiAgICBkZWxldGVNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBzdGF0ZT86ICdjb25uZWN0aW5nJyB8ICdjb25uZWN0ZWQnIHwgJ2xvc3QnIHwgJ3Jlc3RvcmVkJztcclxufSJdfQ==
@@ -0,0 +1,151 @@
1
+ import { __awaiter, __decorate, __metadata } from "tslib";
2
+ import { Subject, Subscription } from "rxjs";
3
+ import { RpcEvent, SocketRPC } from "@banta/common";
4
+ export class ChatSource extends SocketRPC {
5
+ constructor(backend, identifier, parentIdentifier, sortOrder) {
6
+ super();
7
+ this.backend = backend;
8
+ this.identifier = identifier;
9
+ this.parentIdentifier = parentIdentifier;
10
+ this.sortOrder = sortOrder;
11
+ this.subscription = new Subscription();
12
+ this.state = 'connecting';
13
+ this.messageMap = new Map();
14
+ this._messageReceived = new Subject();
15
+ this._messageSent = new Subject();
16
+ this.messages = [];
17
+ this.ready = new Promise(resolve => this.markReady = resolve);
18
+ }
19
+ bind(socket) {
20
+ const _super = Object.create(null, {
21
+ bind: { get: () => super.bind }
22
+ });
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ _super.bind.call(this, socket);
25
+ this.state = 'connected';
26
+ this.markReady();
27
+ yield this.subscribeToTopic();
28
+ this.subscription.add(this.backend.userChanged.subscribe(() => this.authenticate()));
29
+ socket.addEventListener('open', () => __awaiter(this, void 0, void 0, function* () {
30
+ this.state = 'connected';
31
+ }));
32
+ socket.addEventListener('lost', () => __awaiter(this, void 0, void 0, function* () {
33
+ this.state = 'lost';
34
+ }));
35
+ socket.addEventListener('restore', () => __awaiter(this, void 0, void 0, function* () {
36
+ this.state = 'restored';
37
+ yield this.authenticate();
38
+ yield this.subscribeToTopic();
39
+ }));
40
+ return this;
41
+ });
42
+ }
43
+ getExistingMessages() {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ let messages = yield this.peer.getExistingMessages();
46
+ messages = messages.map(message => {
47
+ let existingMessage = this.messageMap.get(message.id);
48
+ if (existingMessage)
49
+ message = Object.assign(existingMessage, message);
50
+ else
51
+ this.messageMap.set(message.id, message);
52
+ return message;
53
+ });
54
+ return messages;
55
+ });
56
+ }
57
+ editMessage(messageId, text) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ this.peer.editMessage(messageId, text);
60
+ });
61
+ }
62
+ subscribeToTopic() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ yield this.peer.subscribe(this.identifier, this.parentIdentifier, this.sortOrder);
65
+ });
66
+ }
67
+ authenticate() {
68
+ var _a;
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ yield this.peer.authenticate((_a = this.backend.user) === null || _a === void 0 ? void 0 : _a.token);
71
+ });
72
+ }
73
+ close() {
74
+ super.close();
75
+ this.subscription.unsubscribe();
76
+ }
77
+ onPermissions(permissions) {
78
+ window.bantaPermissionsDebug = permissions;
79
+ this.permissions = permissions;
80
+ }
81
+ onChatMessage(message) {
82
+ if (this.messageMap.has(message.id)) {
83
+ Object.assign(this.messageMap.get(message.id), message);
84
+ }
85
+ else if (!message.hidden) {
86
+ // Only process non-hidden messages through here.
87
+ // Hidden messages may be sent to us when they become hidden (ie moderation is occurring).
88
+ // But if we never had the message to begin with, we should discard it.
89
+ this.messageMap.set(message.id, message);
90
+ this._messageReceived.next(message);
91
+ }
92
+ }
93
+ get messageReceived() { return this._messageReceived.asObservable(); }
94
+ get messageSent() { return this._messageSent.asObservable(); }
95
+ send(message) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ return yield this.peer.sendMessage(message);
98
+ });
99
+ }
100
+ loadAfter(message, count) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ if (!message)
103
+ return;
104
+ if (!message.pagingCursor)
105
+ return [];
106
+ return this.peer.loadAfter(Number(message.pagingCursor), count);
107
+ });
108
+ }
109
+ get(id) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ if (this.messageMap.has(id))
112
+ return this.messageMap.get(id);
113
+ let message = yield this.peer.getMessage(id);
114
+ this.messageMap.set(id, message);
115
+ return message;
116
+ });
117
+ }
118
+ getCount() {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ return yield this.peer.getCount();
121
+ });
122
+ }
123
+ likeMessage(messageId) {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ return yield this.peer.likeMessage(messageId);
126
+ });
127
+ }
128
+ unlikeMessage(messageId) {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ return yield this.peer.unlikeMessage(messageId);
131
+ });
132
+ }
133
+ deleteMessage(messageId) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ return yield this.peer.deleteMessage(messageId);
136
+ });
137
+ }
138
+ }
139
+ __decorate([
140
+ RpcEvent(),
141
+ __metadata("design:type", Function),
142
+ __metadata("design:paramtypes", [Object]),
143
+ __metadata("design:returntype", void 0)
144
+ ], ChatSource.prototype, "onPermissions", null);
145
+ __decorate([
146
+ RpcEvent(),
147
+ __metadata("design:type", Function),
148
+ __metadata("design:paramtypes", [Object]),
149
+ __metadata("design:returntype", void 0)
150
+ ], ChatSource.prototype, "onChatMessage", null);
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0LXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcEQsTUFBTSxPQUFPLFVBQVcsU0FBUSxTQUFTO0lBQ3JDLFlBQ2EsT0FBb0IsRUFDcEIsVUFBa0IsRUFDbEIsZ0JBQXdCLEVBQ3hCLFNBQXdCO1FBRWpDLEtBQUssRUFBRSxDQUFDO1FBTEMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBTTdCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU0xQyxVQUFLLEdBQXFELFlBQVksQ0FBQztRQStFL0QsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDOUMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBS2xELGFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBL0Z6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBVUssSUFBSSxDQUFDLE1BQWlCOzs7OztZQUN4QixPQUFNLElBQUksWUFBQyxNQUFNLEVBQUU7WUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRWpCLE1BQU0s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QyxDQUFDO1lBRWpDLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7S0FBQTtJQUVLLFFBQVE7O1lBQ1YsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEMsQ0FBQztLQUFBO0lBRUssV0FBVyxDQUFDLFNBQWlCOztZQUMvQixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLFNBQWlCOztZQUNqQyxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLFNBQWlCOztZQUNqQyxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0NBRUo7QUFuRUc7SUFEQyxRQUFRLEVBQUU7Ozs7K0NBSVY7QUFHRDtJQURDLFFBQVEsRUFBRTs7OzsrQ0FXViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0UGVybWlzc2lvbnMsIENvbW1lbnRzT3JkZXIsIFVzZXIgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBScGNFdmVudCwgU29ja2V0UlBDIH0gZnJvbSBcIkBiYW50YS9jb21tb25cIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kIH0gZnJvbSBcIi4vY2hhdC1iYWNrZW5kXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhdFNvdXJjZSBleHRlbmRzIFNvY2tldFJQQyBpbXBsZW1lbnRzIENoYXRTb3VyY2VCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJlYWRvbmx5IGJhY2tlbmQ6IENoYXRCYWNrZW5kLFxyXG4gICAgICAgIHJlYWRvbmx5IGlkZW50aWZpZXI6IHN0cmluZyxcclxuICAgICAgICByZWFkb25seSBwYXJlbnRJZGVudGlmaWVyOiBzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgc29ydE9yZGVyOiBDb21tZW50c09yZGVyXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMucmVhZHkgPSBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHRoaXMubWFya1JlYWR5ID0gcmVzb2x2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBwcml2YXRlIG1hcmtSZWFkeTogKCkgPT4gdm9pZDtcclxuXHJcbiAgICByZWFkeTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBwZXJtaXNzaW9uczogQ2hhdFBlcm1pc3Npb25zO1xyXG4gICAgc3RhdGU6ICdjb25uZWN0ZWQnIHwgJ2Nvbm5lY3RpbmcnIHwgJ2xvc3QnIHwgJ3Jlc3RvcmVkJyA9ICdjb25uZWN0aW5nJztcclxuXHJcbiAgICBhc3luYyBiaW5kKHNvY2tldDogV2ViU29ja2V0KTogUHJvbWlzZTx0aGlzPiB7XHJcbiAgICAgICAgc3VwZXIuYmluZChzb2NrZXQpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSAnY29ubmVjdGVkJztcclxuICAgICAgICB0aGlzLm1hcmtSZWFkeSgpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvVG9waWMoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmF1dGhlbnRpY2F0ZSgpKSk7XHJcblxyXG4gICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2Nvbm5lY3RlZCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdsb3N0JywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2xvc3QnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigncmVzdG9yZScsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdyZXN0b3JlZCc7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlVG9Ub3BpYygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRFeGlzdGluZ01lc3NhZ2VzKCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VbXT4ge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMucGVlci5nZXRFeGlzdGluZ01lc3NhZ2VzKCk7XHJcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcy5tYXAobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBleGlzdGluZ01lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VNYXAuZ2V0KG1lc3NhZ2UuaWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBPYmplY3QuYXNzaWduKGV4aXN0aW5nTWVzc2FnZSwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZU1hcC5zZXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLnBlZXIuZWRpdE1lc3NhZ2UobWVzc2FnZUlkLCB0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdWJzY3JpYmVUb1RvcGljKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGVlci5zdWJzY3JpYmUodGhpcy5pZGVudGlmaWVyLCB0aGlzLnBhcmVudElkZW50aWZpZXIsIHRoaXMuc29ydE9yZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhdXRoZW50aWNhdGUoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wZWVyLmF1dGhlbnRpY2F0ZSh0aGlzLmJhY2tlbmQudXNlcj8udG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBAUnBjRXZlbnQoKVxyXG4gICAgb25QZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQ2hhdFBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLmJhbnRhUGVybWlzc2lvbnNEZWJ1ZyA9IHBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcclxuICAgIH1cclxuXHJcbiAgICBAUnBjRXZlbnQoKVxyXG4gICAgb25DaGF0TWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VNYXAuaGFzKG1lc3NhZ2UuaWQpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tZXNzYWdlTWFwLmdldChtZXNzYWdlLmlkKSwgbWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbWVzc2FnZS5oaWRkZW4pIHtcclxuICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIG5vbi1oaWRkZW4gbWVzc2FnZXMgdGhyb3VnaCBoZXJlLiBcclxuICAgICAgICAgICAgLy8gSGlkZGVuIG1lc3NhZ2VzIG1heSBiZSBzZW50IHRvIHVzIHdoZW4gdGhleSBiZWNvbWUgaGlkZGVuIChpZSBtb2RlcmF0aW9uIGlzIG9jY3VycmluZykuXHJcbiAgICAgICAgICAgIC8vIEJ1dCBpZiB3ZSBuZXZlciBoYWQgdGhlIG1lc3NhZ2UgdG8gYmVnaW4gd2l0aCwgd2Ugc2hvdWxkIGRpc2NhcmQgaXQuXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZU1hcC5zZXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VNYXAgPSBuZXcgTWFwPHN0cmluZywgQ2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlUmVjZWl2ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZW50ID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcblxyXG4gICAgZ2V0IG1lc3NhZ2VSZWNlaXZlZCgpIHsgcmV0dXJuIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgZ2V0IG1lc3NhZ2VTZW50KCkgeyByZXR1cm4gdGhpcy5fbWVzc2FnZVNlbnQuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG5cclxuICAgIGFzeW5jIHNlbmQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBQcm9taXNlPENoYXRNZXNzYWdlPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucGVlci5zZW5kTWVzc2FnZShtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQWZ0ZXIobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIGNvdW50OiBudW1iZXIpOiBQcm9taXNlPENoYXRNZXNzYWdlW10+IHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKCFtZXNzYWdlLnBhZ2luZ0N1cnNvcilcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLnBlZXIubG9hZEFmdGVyKE51bWJlcihtZXNzYWdlLnBhZ2luZ0N1cnNvciksIGNvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8Q2hhdE1lc3NhZ2U+IHtcclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlTWFwLmhhcyhpZCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VNYXAuZ2V0KGlkKTtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IGF3YWl0IHRoaXMucGVlci5nZXRNZXNzYWdlKGlkKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VNYXAuc2V0KGlkLCBtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q291bnQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmdldENvdW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbGlrZU1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmxpa2VNZXNzYWdlKG1lc3NhZ2VJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saWtlTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlZXIudW5saWtlTWVzc2FnZShtZXNzYWdlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZUlkKTtcclxuICAgIH1cclxuXHJcbn0iXX0=