UNPKG

@hsaadawy/ngx-chat

Version:
87 lines 14.5 kB
import { jid as parseJid, xml } from '@xmpp/client'; import { Direction } from '../../../../core/message'; import { AbstractXmppPlugin } from './abstract-xmpp-plugin'; export class MessageReceivedEvent { constructor() { this.discard = false; } } /** * Part of the XMPP Core Specification * see: https://datatracker.ietf.org/doc/rfc6120/ */ export class MessagePlugin extends AbstractXmppPlugin { constructor(xmppChatAdapter, logService) { super(); this.xmppChatAdapter = xmppChatAdapter; this.logService = logService; } handleStanza(stanza, archiveDelayElement) { if (this.isMessageStanza(stanza)) { this.handleMessageStanza(stanza, archiveDelayElement); return true; } return false; } isMessageStanza(stanza) { var _a; return stanza.name === 'message' && stanza.attrs.type !== 'groupchat' && stanza.attrs.type !== 'error' && !!((_a = stanza.getChildText('body')) === null || _a === void 0 ? void 0 : _a.trim()); } handleMessageStanza(messageStanza, archiveDelayElement) { const isAddressedToMe = this.xmppChatAdapter.chatConnectionService.userJid.bare() .equals(parseJid(messageStanza.attrs.to).bare()); const messageDirection = isAddressedToMe ? Direction.in : Direction.out; const messageFromArchive = archiveDelayElement != null; const delayElement = archiveDelayElement !== null && archiveDelayElement !== void 0 ? archiveDelayElement : messageStanza.getChild('delay'); const datetime = (delayElement === null || delayElement === void 0 ? void 0 : delayElement.attrs.stamp) ? new Date(delayElement.attrs.stamp) : new Date() /* TODO: replace with entity time plugin */; if (messageDirection === Direction.in && !messageFromArchive) { this.logService.debug('message received <=', messageStanza.getChildText('body')); } const message = { body: messageStanza.getChildText('body').trim(), direction: messageDirection, datetime, delayed: !!delayElement, fromArchive: messageFromArchive }; const messageReceivedEvent = new MessageReceivedEvent(); this.xmppChatAdapter.plugins.forEach(plugin => plugin.afterReceiveMessage(message, messageStanza, messageReceivedEvent)); if (messageReceivedEvent.discard) { return; } const contactJid = isAddressedToMe ? messageStanza.attrs.from : messageStanza.attrs.to; const contact = this.xmppChatAdapter.getOrCreateContactById(contactJid); contact.addMessage(message); if (messageDirection === Direction.in && !messageFromArchive) { this.xmppChatAdapter.message$.next(contact); } } sendMessage(contact, body) { const messageStanza = xml('message', { to: contact.jidBare.toString(), from: this.xmppChatAdapter.chatConnectionService.userJid.toString(), type: 'chat', }, xml('body', {}, body)); const message = { direction: Direction.out, body, datetime: new Date(), delayed: false, fromArchive: false, }; this.xmppChatAdapter.plugins.forEach(plugin => plugin.beforeSendMessage(messageStanza, message)); contact.addMessage(message); // TODO: on rejection mark message that it was not sent successfully this.xmppChatAdapter.chatConnectionService.send(messageStanza).then(() => { this.xmppChatAdapter.plugins.forEach(plugin => plugin.afterSendMessage(message, messageStanza)); }, (rej) => { this.logService.error('rejected message ' + message.id, rej); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXp6bmV0d29yay9uZ3gtY2hhdC9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9tZXNzYWdlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBSTlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sT0FBTyxvQkFBb0I7SUFBakM7UUFDSSxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsa0JBQWtCO0lBRWpELFlBQ3FCLGVBQWdDLEVBQ2hDLFVBQXNCO1FBRXZDLEtBQUssRUFBRSxDQUFDO1FBSFMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQVk7SUFHM0MsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsbUJBQTRCO1FBQ3JELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYzs7UUFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVM7ZUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVztlQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2VBQzdCLENBQUMsQ0FBQyxDQUFBLE1BQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsMENBQUUsSUFBSSxFQUFFLENBQUEsQ0FBQztJQUNqRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsYUFBb0MsRUFBRSxtQkFBNEI7UUFDMUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2FBQzVFLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBRXhFLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLElBQUksSUFBSSxDQUFDO1FBRXZELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixhQUFuQixtQkFBbUIsY0FBbkIsbUJBQW1CLEdBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxLQUFLLENBQUMsS0FBSztZQUN0QyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsMkNBQTJDLENBQUM7UUFFN0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO1FBRUQsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDL0MsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixRQUFRO1lBQ1IsT0FBTyxFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQ3ZCLFdBQVcsRUFBRSxrQkFBa0I7U0FDbEMsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUV6SCxJQUFJLG9CQUFvQixDQUFDLE9BQU8sRUFBRTtZQUM5QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFnQixFQUFFLElBQVk7UUFDdEMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUM3QixFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNuRSxJQUFJLEVBQUUsTUFBTTtTQUNmLEVBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQ3hCLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBWTtZQUNyQixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDeEIsSUFBSTtZQUNKLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLEVBQUUsS0FBSztZQUNkLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgamlkIGFzIHBhcnNlSmlkLCB4bWwgfSBmcm9tICdAeG1wcC9jbGllbnQnO1xyXG5pbXBvcnQgeyBDb250YWN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9jb250YWN0JztcclxuaW1wb3J0IHsgRGlyZWN0aW9uLCBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tZXNzYWdlJztcclxuaW1wb3J0IHsgTWVzc2FnZVdpdGhCb2R5U3RhbnphLCBTdGFuemEgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0YW56YSc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlUmVjZWl2ZWRFdmVudCB7XHJcbiAgICBkaXNjYXJkID0gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJ0IG9mIHRoZSBYTVBQIENvcmUgU3BlY2lmaWNhdGlvblxyXG4gKiBzZWU6IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL3JmYzYxMjAvXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBsdWdpbiBleHRlbmRzIEFic3RyYWN0WG1wcFBsdWdpbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB4bXBwQ2hhdEFkYXB0ZXI6IFhtcHBDaGF0QWRhcHRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVN0YW56YShzdGFuemE6IFN0YW56YSwgYXJjaGl2ZURlbGF5RWxlbWVudD86IFN0YW56YSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWVzc2FnZVN0YW56YShzdGFuemEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZVN0YW56YShzdGFuemEsIGFyY2hpdmVEZWxheUVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNNZXNzYWdlU3RhbnphKHN0YW56YTogU3RhbnphKTogc3RhbnphIGlzIE1lc3NhZ2VXaXRoQm9keVN0YW56YSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YW56YS5uYW1lID09PSAnbWVzc2FnZSdcclxuICAgICAgICAgICAgJiYgc3RhbnphLmF0dHJzLnR5cGUgIT09ICdncm91cGNoYXQnXHJcbiAgICAgICAgICAgICYmIHN0YW56YS5hdHRycy50eXBlICE9PSAnZXJyb3InXHJcbiAgICAgICAgICAgICYmICEhc3RhbnphLmdldENoaWxkVGV4dCgnYm9keScpPy50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVNZXNzYWdlU3RhbnphKG1lc3NhZ2VTdGFuemE6IE1lc3NhZ2VXaXRoQm9keVN0YW56YSwgYXJjaGl2ZURlbGF5RWxlbWVudD86IFN0YW56YSkge1xyXG4gICAgICAgIGNvbnN0IGlzQWRkcmVzc2VkVG9NZSA9IHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS51c2VySmlkLmJhcmUoKVxyXG4gICAgICAgICAgICAuZXF1YWxzKHBhcnNlSmlkKG1lc3NhZ2VTdGFuemEuYXR0cnMudG8pLmJhcmUoKSk7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZURpcmVjdGlvbiA9IGlzQWRkcmVzc2VkVG9NZSA/IERpcmVjdGlvbi5pbiA6IERpcmVjdGlvbi5vdXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VGcm9tQXJjaGl2ZSA9IGFyY2hpdmVEZWxheUVsZW1lbnQgIT0gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsYXlFbGVtZW50ID0gYXJjaGl2ZURlbGF5RWxlbWVudCA/PyBtZXNzYWdlU3RhbnphLmdldENoaWxkKCdkZWxheScpO1xyXG4gICAgICAgIGNvbnN0IGRhdGV0aW1lID0gZGVsYXlFbGVtZW50Py5hdHRycy5zdGFtcFxyXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRlbGF5RWxlbWVudC5hdHRycy5zdGFtcClcclxuICAgICAgICAgICAgOiBuZXcgRGF0ZSgpIC8qIFRPRE86IHJlcGxhY2Ugd2l0aCBlbnRpdHkgdGltZSBwbHVnaW4gKi87XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlRGlyZWN0aW9uID09PSBEaXJlY3Rpb24uaW4gJiYgIW1lc3NhZ2VGcm9tQXJjaGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZGVidWcoJ21lc3NhZ2UgcmVjZWl2ZWQgPD0nLCBtZXNzYWdlU3RhbnphLmdldENoaWxkVGV4dCgnYm9keScpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGJvZHk6IG1lc3NhZ2VTdGFuemEuZ2V0Q2hpbGRUZXh0KCdib2R5JykudHJpbSgpLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IG1lc3NhZ2VEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLFxyXG4gICAgICAgICAgICBkZWxheWVkOiAhIWRlbGF5RWxlbWVudCxcclxuICAgICAgICAgICAgZnJvbUFyY2hpdmU6IG1lc3NhZ2VGcm9tQXJjaGl2ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VSZWNlaXZlZEV2ZW50ID0gbmV3IE1lc3NhZ2VSZWNlaXZlZEV2ZW50KCk7XHJcbiAgICAgICAgdGhpcy54bXBwQ2hhdEFkYXB0ZXIucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uYWZ0ZXJSZWNlaXZlTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlU3RhbnphLCBtZXNzYWdlUmVjZWl2ZWRFdmVudCkpO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZVJlY2VpdmVkRXZlbnQuZGlzY2FyZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWN0SmlkID0gaXNBZGRyZXNzZWRUb01lID8gbWVzc2FnZVN0YW56YS5hdHRycy5mcm9tIDogbWVzc2FnZVN0YW56YS5hdHRycy50bztcclxuICAgICAgICBjb25zdCBjb250YWN0ID0gdGhpcy54bXBwQ2hhdEFkYXB0ZXIuZ2V0T3JDcmVhdGVDb250YWN0QnlJZChjb250YWN0SmlkKTtcclxuICAgICAgICBjb250YWN0LmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlRGlyZWN0aW9uID09PSBEaXJlY3Rpb24uaW4gJiYgIW1lc3NhZ2VGcm9tQXJjaGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5tZXNzYWdlJC5uZXh0KGNvbnRhY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShjb250YWN0OiBDb250YWN0LCBib2R5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlU3RhbnphID0geG1sKCdtZXNzYWdlJywge1xyXG4gICAgICAgICAgICAgICAgdG86IGNvbnRhY3QuamlkQmFyZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogdGhpcy54bXBwQ2hhdEFkYXB0ZXIuY2hhdENvbm5lY3Rpb25TZXJ2aWNlLnVzZXJKaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGF0JyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeG1sKCdib2R5Jywge30sIGJvZHkpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogRGlyZWN0aW9uLm91dCxcclxuICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgZGF0ZXRpbWU6IG5ldyBEYXRlKCksIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBlbnRpdHkgdGltZSBwbHVnaW5cclxuICAgICAgICAgICAgZGVsYXllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZyb21BcmNoaXZlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMueG1wcENoYXRBZGFwdGVyLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmJlZm9yZVNlbmRNZXNzYWdlKG1lc3NhZ2VTdGFuemEsIG1lc3NhZ2UpKTtcclxuICAgICAgICBjb250YWN0LmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgLy8gVE9ETzogb24gcmVqZWN0aW9uIG1hcmsgbWVzc2FnZSB0aGF0IGl0IHdhcyBub3Qgc2VudCBzdWNjZXNzZnVsbHlcclxuICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5jaGF0Q29ubmVjdGlvblNlcnZpY2Uuc2VuZChtZXNzYWdlU3RhbnphKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy54bXBwQ2hhdEFkYXB0ZXIucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uYWZ0ZXJTZW5kTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlU3RhbnphKSk7XHJcbiAgICAgICAgfSwgKHJlaikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ3JlamVjdGVkIG1lc3NhZ2UgJyArIG1lc3NhZ2UuaWQsIHJlaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==