UNPKG

@hsaadawy/ngx-chat

Version:
54 lines 9.46 kB
import { __awaiter } from "tslib"; import { xml } from '@xmpp/client'; import { Direction } from '../../../../core/message'; import { AbstractXmppPlugin } from './abstract-xmpp-plugin'; import { MessageReceivedEvent } from './message.plugin'; /** * XEP-0280 Message Carbons */ export class MessageCarbonsPlugin extends AbstractXmppPlugin { constructor(xmppChatAdapter) { super(); this.xmppChatAdapter = xmppChatAdapter; } onBeforeOnline() { return __awaiter(this, void 0, void 0, function* () { return yield this.xmppChatAdapter.chatConnectionService.sendIq(xml('iq', { type: 'set' }, xml('enable', { xmlns: 'urn:xmpp:carbons:2' }))); }); } handleStanza(stanza) { const receivedOrSentElement = stanza.getChildByAttr('xmlns', 'urn:xmpp:carbons:2'); const forwarded = receivedOrSentElement && receivedOrSentElement.getChild('forwarded', 'urn:xmpp:forward:0'); const messageElement = forwarded && forwarded.getChild('message', 'jabber:client'); const carbonFrom = stanza.attrs.from; const userJid = this.xmppChatAdapter.chatConnectionService.userJid; if (stanza.is('message') && receivedOrSentElement && forwarded && messageElement && userJid && userJid.bare().toString() === carbonFrom) { return this.handleCarbonMessageStanza(messageElement, receivedOrSentElement); } return false; } handleCarbonMessageStanza(messageElement, receivedOrSent) { const direction = receivedOrSent.is('received') ? Direction.in : Direction.out; const message = { body: messageElement.getChildText('body').trim(), direction, datetime: new Date(), delayed: false, fromArchive: false, }; const messageReceivedEvent = new MessageReceivedEvent(); this.xmppChatAdapter.plugins.forEach(plugin => plugin.afterReceiveMessage(message, messageElement, messageReceivedEvent)); if (!messageReceivedEvent.discard) { const { from, to } = messageElement.attrs; const contactJid = direction === Direction.in ? from : to; const contact = this.xmppChatAdapter.getOrCreateContactById(contactJid); contact.addMessage(message); if (direction === Direction.in) { this.xmppChatAdapter.message$.next(contact); } } return true; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1jYXJib25zLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhenpuZXR3b3JrL25neC1jaGF0L3NyYy9saWIvc2VydmljZXMvYWRhcHRlcnMveG1wcC9wbHVnaW5zL21lc3NhZ2UtY2FyYm9ucy5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGtCQUFrQjtJQUV4RCxZQUE2QixlQUFnQztRQUN6RCxLQUFLLEVBQUUsQ0FBQztRQURpQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFFN0QsQ0FBQztJQUVLLGNBQWM7O1lBQ2hCLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FDMUQsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFDbkIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBQyxDQUFDLENBQy9DLENBQ0osQ0FBQztRQUNOLENBQUM7S0FBQTtJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNuRixNQUFNLFNBQVMsR0FBRyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDN0csTUFBTSxjQUFjLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQ25FLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxxQkFBcUIsSUFBSSxTQUFTLElBQUksY0FBYyxJQUFJLE9BQU87ZUFDcEYsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxjQUF1QixFQUFFLGNBQXVCO1FBQzlFLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFFL0UsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDaEQsU0FBUztZQUNULFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLEVBQUUsS0FBSztZQUNkLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDMUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRTtZQUMvQixNQUFNLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU1QixJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDL0M7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHhtbCB9IGZyb20gJ0B4bXBwL2NsaWVudCc7XHJcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICdsdHgnO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21lc3NhZ2UnO1xyXG5pbXBvcnQgeyBJcVJlc3BvbnNlU3RhbnphLCBTdGFuemEgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0YW56YSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcclxuaW1wb3J0IHsgTWVzc2FnZVJlY2VpdmVkRXZlbnQgfSBmcm9tICcuL21lc3NhZ2UucGx1Z2luJztcclxuXHJcbi8qKlxyXG4gKiBYRVAtMDI4MCBNZXNzYWdlIENhcmJvbnNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ2FyYm9uc1BsdWdpbiBleHRlbmRzIEFic3RyYWN0WG1wcFBsdWdpbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB4bXBwQ2hhdEFkYXB0ZXI6IFhtcHBDaGF0QWRhcHRlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25CZWZvcmVPbmxpbmUoKTogUHJvbWlzZTxJcVJlc3BvbnNlU3RhbnphPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS5zZW5kSXEoXHJcbiAgICAgICAgICAgIHhtbCgnaXEnLCB7dHlwZTogJ3NldCd9LFxyXG4gICAgICAgICAgICAgICAgeG1sKCdlbmFibGUnLCB7eG1sbnM6ICd1cm46eG1wcDpjYXJib25zOjInfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU3RhbnphKHN0YW56YTogU3RhbnphKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRPclNlbnRFbGVtZW50ID0gc3RhbnphLmdldENoaWxkQnlBdHRyKCd4bWxucycsICd1cm46eG1wcDpjYXJib25zOjInKTtcclxuICAgICAgICBjb25zdCBmb3J3YXJkZWQgPSByZWNlaXZlZE9yU2VudEVsZW1lbnQgJiYgcmVjZWl2ZWRPclNlbnRFbGVtZW50LmdldENoaWxkKCdmb3J3YXJkZWQnLCAndXJuOnhtcHA6Zm9yd2FyZDowJyk7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZUVsZW1lbnQgPSBmb3J3YXJkZWQgJiYgZm9yd2FyZGVkLmdldENoaWxkKCdtZXNzYWdlJywgJ2phYmJlcjpjbGllbnQnKTtcclxuICAgICAgICBjb25zdCBjYXJib25Gcm9tID0gc3RhbnphLmF0dHJzLmZyb207XHJcbiAgICAgICAgY29uc3QgdXNlckppZCA9IHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS51c2VySmlkO1xyXG4gICAgICAgIGlmIChzdGFuemEuaXMoJ21lc3NhZ2UnKSAmJiByZWNlaXZlZE9yU2VudEVsZW1lbnQgJiYgZm9yd2FyZGVkICYmIG1lc3NhZ2VFbGVtZW50ICYmIHVzZXJKaWRcclxuICAgICAgICAgICAgJiYgdXNlckppZC5iYXJlKCkudG9TdHJpbmcoKSA9PT0gY2FyYm9uRnJvbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVDYXJib25NZXNzYWdlU3RhbnphKG1lc3NhZ2VFbGVtZW50LCByZWNlaXZlZE9yU2VudEVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVDYXJib25NZXNzYWdlU3RhbnphKG1lc3NhZ2VFbGVtZW50OiBFbGVtZW50LCByZWNlaXZlZE9yU2VudDogRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHJlY2VpdmVkT3JTZW50LmlzKCdyZWNlaXZlZCcpID8gRGlyZWN0aW9uLmluIDogRGlyZWN0aW9uLm91dDtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgYm9keTogbWVzc2FnZUVsZW1lbnQuZ2V0Q2hpbGRUZXh0KCdib2R5JykudHJpbSgpLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGRhdGV0aW1lOiBuZXcgRGF0ZSgpLCAvLyBUT0RPOiByZXBsYWNlIHdpdGggZW50aXR5IHRpbWUgcGx1Z2luXHJcbiAgICAgICAgICAgIGRlbGF5ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBmcm9tQXJjaGl2ZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZVJlY2VpdmVkRXZlbnQgPSBuZXcgTWVzc2FnZVJlY2VpdmVkRXZlbnQoKTtcclxuICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5wbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHBsdWdpbi5hZnRlclJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VFbGVtZW50LCBtZXNzYWdlUmVjZWl2ZWRFdmVudCkpO1xyXG4gICAgICAgIGlmICghbWVzc2FnZVJlY2VpdmVkRXZlbnQuZGlzY2FyZCkge1xyXG4gICAgICAgICAgICBjb25zdCB7ZnJvbSwgdG99ID0gbWVzc2FnZUVsZW1lbnQuYXR0cnM7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhY3RKaWQgPSBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5pbiA/IGZyb20gOiB0bztcclxuICAgICAgICAgICAgY29uc3QgY29udGFjdCA9IHRoaXMueG1wcENoYXRBZGFwdGVyLmdldE9yQ3JlYXRlQ29udGFjdEJ5SWQoY29udGFjdEppZCk7XHJcbiAgICAgICAgICAgIGNvbnRhY3QuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5pbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy54bXBwQ2hhdEFkYXB0ZXIubWVzc2FnZSQubmV4dChjb250YWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==