@banta/sdk 4.3.3 → 4.4.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.
- package/banta-sdk.metadata.json +1 -1
- package/bundles/banta-sdk.umd.js +581 -27
- package/bundles/banta-sdk.umd.js.map +1 -1
- package/bundles/banta-sdk.umd.min.js +1 -1
- package/bundles/banta-sdk.umd.min.js.map +1 -1
- package/esm2015/lib/attachment-scraper.js +2 -0
- package/esm2015/lib/banta-sdk.module.js +23 -1
- package/esm2015/lib/chat-backend-base.js +15 -1
- package/esm2015/lib/chat-backend.js +19 -1
- package/esm2015/lib/comments/banta-comments/banta-comments.component.js +1 -1
- package/esm2015/lib/comments/comment/comment.component.js +5 -12
- package/esm2015/lib/comments/comment-field/comment-field.component.js +89 -7
- package/esm2015/lib/common/attachment/attachment.component.js +81 -0
- package/esm2015/lib/common/attachments/attachments.component.js +47 -0
- package/esm2015/lib/common/common.module.js +13 -3
- package/esm2015/lib/common/index.js +4 -1
- package/esm2015/lib/common/trust-resource-url.pipe.js +21 -0
- package/esm2015/lib/giphy-attachments.js +20 -0
- package/esm2015/lib/index.js +6 -1
- package/esm2015/lib/tweet-attachments.js +16 -0
- package/esm2015/lib/url-attachments.js +46 -0
- package/esm2015/lib/youtube-attachments.js +25 -0
- package/fesm2015/banta-sdk.js +395 -22
- package/fesm2015/banta-sdk.js.map +1 -1
- package/lib/attachment-scraper.d.ts +15 -0
- package/lib/banta-sdk.module.d.ts +2 -0
- package/lib/chat-backend-base.d.ts +10 -1
- package/lib/chat-backend.d.ts +2 -1
- package/lib/comments/comment/comment.component.d.ts +1 -4
- package/lib/comments/comment-field/comment-field.component.d.ts +11 -2
- package/lib/common/attachment/attachment.component.d.ts +22 -0
- package/lib/common/attachments/attachments.component.d.ts +15 -0
- package/lib/common/index.d.ts +3 -0
- package/lib/common/trust-resource-url.pipe.d.ts +7 -0
- package/lib/giphy-attachments.d.ts +5 -0
- package/lib/index.d.ts +5 -0
- package/lib/tweet-attachments.d.ts +5 -0
- package/lib/url-attachments.d.ts +11 -0
- package/lib/youtube-attachments.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
export class TweetAttachmentResolver {
|
|
3
|
+
resolveFragment(message, fragment) {
|
|
4
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
5
|
+
if (fragment.type === 'url' && fragment.text.startsWith('https://twitter.com/')) {
|
|
6
|
+
return {
|
|
7
|
+
type: 'tweet',
|
|
8
|
+
url: fragment.text,
|
|
9
|
+
style: 'block'
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdlZXQtYXR0YWNobWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi90d2VldC1hdHRhY2htZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBR0EsTUFBTSxPQUFPLHVCQUF1QjtJQUMxQixlQUFlLENBQUMsT0FBb0IsRUFBRSxRQUE0Qjs7WUFDcEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPO29CQUNILElBQUksRUFBRSxPQUFPO29CQUNiLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDbEIsS0FBSyxFQUFFLE9BQU87aUJBQ2pCLENBQUM7YUFDTDtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCwgQXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSBcIi4vYXR0YWNobWVudC1zY3JhcGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVHdlZXRBdHRhY2htZW50UmVzb2x2ZXIgaW1wbGVtZW50cyBBdHRhY2htZW50UmVzb2x2ZXIge1xyXG4gICAgYXN5bmMgcmVzb2x2ZUZyYWdtZW50KG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBmcmFnbWVudDogQXR0YWNobWVudEZyYWdtZW50KTogUHJvbWlzZTxDaGF0TWVzc2FnZUF0dGFjaG1lbnQ+IHtcclxuICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PT0gJ3VybCcgJiYgZnJhZ21lbnQudGV4dC5zdGFydHNXaXRoKCdodHRwczovL3R3aXR0ZXIuY29tLycpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndHdlZXQnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBmcmFnbWVudC50ZXh0LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdibG9jaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { ChatBackendBase } from "./chat-backend-base";
|
|
4
|
+
const URL_REGEX = new RegExp('(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?', 'ig');
|
|
5
|
+
export class UrlAttachmentScraper {
|
|
6
|
+
findFragments(message) {
|
|
7
|
+
var _a;
|
|
8
|
+
// If a message already has a URL attachment, don't add another one.
|
|
9
|
+
if (message.attachments && message.attachments.filter(x => x.type === 'url').length > 0)
|
|
10
|
+
return null;
|
|
11
|
+
return (Array.from((_a = message.message.match(URL_REGEX)) !== null && _a !== void 0 ? _a : []))
|
|
12
|
+
.reduce((a, item) => (a.includes(item) ? undefined : a.push(item), a), [])
|
|
13
|
+
.map(url => ({
|
|
14
|
+
text: url,
|
|
15
|
+
offset: message.message.indexOf(url),
|
|
16
|
+
type: 'url'
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class UrlAttachmentResolver {
|
|
21
|
+
constructor(backend) {
|
|
22
|
+
this.backend = backend;
|
|
23
|
+
}
|
|
24
|
+
resolveFragment(message, fragment) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
if (fragment.type !== 'url')
|
|
27
|
+
return null;
|
|
28
|
+
let urlCard = yield this.backend.getCardForUrl(fragment.text);
|
|
29
|
+
if (urlCard) {
|
|
30
|
+
return {
|
|
31
|
+
type: 'card',
|
|
32
|
+
url: fragment.text,
|
|
33
|
+
card: urlCard,
|
|
34
|
+
style: 'block'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
UrlAttachmentResolver.decorators = [
|
|
41
|
+
{ type: Injectable }
|
|
42
|
+
];
|
|
43
|
+
UrlAttachmentResolver.ctorParameters = () => [
|
|
44
|
+
{ type: ChatBackendBase }
|
|
45
|
+
];
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWF0dGFjaG1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvdXJsLWF0dGFjaG1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQywyWUFBMlksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVoYixNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLGFBQWEsQ0FBQyxPQUFvQjs7UUFDOUIsb0VBQW9FO1FBQ3BFLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbkYsT0FBTyxJQUFJLENBQUM7UUFFaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3RELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUN6RSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxFQUFFLEdBQUc7WUFDVCxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3BDLElBQUksRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDLENBQ047SUFDTCxDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQW9CLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO0lBQzVDLENBQUM7SUFFSyxlQUFlLENBQUMsT0FBb0IsRUFBRSxRQUE0Qjs7WUFDcEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUs7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO1lBRWhCLElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELElBQUksT0FBTyxFQUFFO2dCQUNULE9BQU87b0JBQ0gsSUFBSSxFQUFFLE1BQU07b0JBQ1osR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJO29CQUNsQixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsT0FBTztpQkFDakIsQ0FBQTthQUNKO1FBQ0wsQ0FBQztLQUFBOzs7WUFsQkosVUFBVTs7O1lBckJGLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCwgQXR0YWNobWVudFJlc29sdmVyLCBBdHRhY2htZW50U2NyYXBlciB9IGZyb20gXCIuL2F0dGFjaG1lbnQtc2NyYXBlclwiO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5cclxuY29uc3QgVVJMX1JFR0VYID0gbmV3IFJlZ0V4cCgnKD8hbWFpbHRvOikoPzooPzpodHRwfGh0dHBzfGZ0cCk6Ly8pKD86XFxcXFMrKD86OlxcXFxTKik/QCk/KD86KD86KD86WzEtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswMV1cXFxcZHwyMlswLTNdKSg/OlxcXFwuKD86MT9cXFxcZHsxLDJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pKXsyfSg/OlxcXFwuKD86WzAtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswLTRdXFxcXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstPykqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykoPzpcXFxcLig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstPykqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykqKD86XFxcXC4oPzpbYS16XFxcXHUwMGExLVxcXFx1ZmZmZl17Mix9KSkpfGxvY2FsaG9zdCkoPzo6XFxcXGR7Miw1fSk/KD86KC98XFxcXD98IylbXlxcXFxzXSopPycsICdpZycpO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybEF0dGFjaG1lbnRTY3JhcGVyIGltcGxlbWVudHMgQXR0YWNobWVudFNjcmFwZXIge1xyXG4gICAgZmluZEZyYWdtZW50cyhtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IEF0dGFjaG1lbnRGcmFnbWVudFtdIHtcclxuICAgICAgICAvLyBJZiBhIG1lc3NhZ2UgYWxyZWFkeSBoYXMgYSBVUkwgYXR0YWNobWVudCwgZG9uJ3QgYWRkIGFub3RoZXIgb25lLlxyXG4gICAgICAgIGlmIChtZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMuZmlsdGVyKHggPT4geC50eXBlID09PSAndXJsJykubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiAoQXJyYXkuZnJvbShtZXNzYWdlLm1lc3NhZ2UubWF0Y2goVVJMX1JFR0VYKSA/PyBbXSkpXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoKGEsIGl0ZW0pID0+IChhLmluY2x1ZGVzKGl0ZW0pID8gdW5kZWZpbmVkIDogYS5wdXNoKGl0ZW0pLCBhKSwgW10pXHJcbiAgICAgICAgICAgIC5tYXAodXJsID0+ICh7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB1cmwsIFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBtZXNzYWdlLm1lc3NhZ2UuaW5kZXhPZih1cmwpLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3VybCdcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgO1xyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVcmxBdHRhY2htZW50UmVzb2x2ZXIgaW1wbGVtZW50cyBBdHRhY2htZW50UmVzb2x2ZXIge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZW5kOiBDaGF0QmFja2VuZEJhc2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXNvbHZlRnJhZ21lbnQobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIGZyYWdtZW50OiBBdHRhY2htZW50RnJhZ21lbnQpOiBQcm9taXNlPENoYXRNZXNzYWdlQXR0YWNobWVudD4ge1xyXG4gICAgICAgIGlmIChmcmFnbWVudC50eXBlICE9PSAndXJsJylcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGxldCB1cmxDYXJkID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldENhcmRGb3JVcmwoZnJhZ21lbnQudGV4dCk7XHJcbiAgICAgICAgaWYgKHVybENhcmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjYXJkJyxcclxuICAgICAgICAgICAgICAgIHVybDogZnJhZ21lbnQudGV4dCxcclxuICAgICAgICAgICAgICAgIGNhcmQ6IHVybENhcmQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2Jsb2NrJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
export class YouTubeAttachmentResolver {
|
|
3
|
+
resolveFragment(message, fragment) {
|
|
4
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
5
|
+
if (fragment.type !== 'url')
|
|
6
|
+
return null;
|
|
7
|
+
let videoId;
|
|
8
|
+
if (fragment.text.match(/https?:\/\/(www\.)?youtube.com\/watch\?v=/)) {
|
|
9
|
+
let match = /watch\?v=([^&]+)/.exec(fragment.text);
|
|
10
|
+
if (match) {
|
|
11
|
+
videoId = match[1];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
if (videoId) {
|
|
15
|
+
return {
|
|
16
|
+
type: 'iframe',
|
|
17
|
+
url: `https://www.youtube.com/embed/${videoId}`,
|
|
18
|
+
style: 'block'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1hdHRhY2htZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL3lvdXR1YmUtYXR0YWNobWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUdBLE1BQU0sT0FBTyx5QkFBeUI7SUFDNUIsZUFBZSxDQUFDLE9BQW9CLEVBQUUsUUFBNEI7O1lBQ3BFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLO2dCQUN2QixPQUFPLElBQUksQ0FBQztZQUVoQixJQUFJLE9BQWUsQ0FBQztZQUVwQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLEVBQUU7Z0JBQ2xFLElBQUksS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELElBQUksS0FBSyxFQUFFO29CQUNQLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCO2FBQ0o7WUFFRCxJQUFJLE9BQU8sRUFBRTtnQkFDVCxPQUFPO29CQUNILElBQUksRUFBRSxRQUFRO29CQUNkLEdBQUcsRUFBRSxpQ0FBaUMsT0FBTyxFQUFFO29CQUMvQyxLQUFLLEVBQUUsT0FBTztpQkFDakIsQ0FBQzthQUNMO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VBdHRhY2htZW50IH0gZnJvbSBcIkBiYW50YS9jb21tb25cIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZyYWdtZW50LCBBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tIFwiLi9hdHRhY2htZW50LXNjcmFwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyIGltcGxlbWVudHMgQXR0YWNobWVudFJlc29sdmVyIHtcclxuICAgIGFzeW5jIHJlc29sdmVGcmFnbWVudChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PiB7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgIT09ICd1cmwnKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgbGV0IHZpZGVvSWQ6IHN0cmluZztcclxuXHJcbiAgICAgICAgaWYgKGZyYWdtZW50LnRleHQubWF0Y2goL2h0dHBzPzpcXC9cXC8od3d3XFwuKT95b3V0dWJlLmNvbVxcL3dhdGNoXFw/dj0vKSkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSAvd2F0Y2hcXD92PShbXiZdKykvLmV4ZWMoZnJhZ21lbnQudGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgdmlkZW9JZCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmlkZW9JZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2lmcmFtZScsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3ZpZGVvSWR9YCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiAnYmxvY2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|