@hsaadawy/ngx-chat
Version:
87 lines • 14.5 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXp6bmV0d29yay9uZ3gtY2hhdC9zcmMvbGliL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9tZXNzYWdlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBSTlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sT0FBTyxvQkFBb0I7SUFBakM7UUFDSSxZQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsa0JBQWtCO0lBRWpELFlBQ3FCLGVBQWdDLEVBQ2hDLFVBQXNCO1FBRXZDLEtBQUssRUFBRSxDQUFDO1FBSFMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQVk7SUFHM0MsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsbUJBQTRCO1FBQ3JELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDdEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYzs7UUFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVM7ZUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVztlQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLElB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RUFBRTtZQUNuRSxJQUFJLEVBQUUsTUFBTTtTQUNmLEVBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQ3hCLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBWTtZQUNyQixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDeEIsSUFBSTtZQUNKLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLEVBQUUsS0FBSztZQUNkLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgamlkIGFzIHBhcnNlSmlkLCB4bWwgfSBmcm9tICdAeG1wcC9jbGllbnQnO1xyXG5pbXBvcnQgeyBDb250YWN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9jb250YWN0JztcclxuaW1wb3J0IHsgRGlyZWN0aW9uLCBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tZXNzYWdlJztcclxuaW1wb3J0IHsgTWVzc2FnZVdpdGhCb2R5U3RhbnphLCBTdGFuemEgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0YW56YSc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0QWRhcHRlciB9IGZyb20gJy4uL3htcHAtY2hhdC1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdFhtcHBQbHVnaW4gfSBmcm9tICcuL2Fic3RyYWN0LXhtcHAtcGx1Z2luJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlUmVjZWl2ZWRFdmVudCB7XHJcbiAgICBkaXNjYXJkID0gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJ0IG9mIHRoZSBYTVBQIENvcmUgU3BlY2lmaWNhdGlvblxyXG4gKiBzZWU6IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL3JmYzYxMjAvXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWVzc2FnZVBsdWdpbiBleHRlbmRzIEFic3RyYWN0WG1wcFBsdWdpbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB4bXBwQ2hhdEFkYXB0ZXI6IFhtcHBDaGF0QWRhcHRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVN0YW56YShzdGFuemE6IFN0YW56YSwgYXJjaGl2ZURlbGF5RWxlbWVudD86IFN0YW56YSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWVzc2FnZVN0YW56YShzdGFuemEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZVN0YW56YShzdGFuemEsIGFyY2hpdmVEZWxheUVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNNZXNzYWdlU3RhbnphKHN0YW56YTogU3RhbnphKTogc3RhbnphIGlzIE1lc3NhZ2VXaXRoQm9keVN0YW56YSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YW56YS5uYW1lID09PSAnbWVzc2FnZSdcclxuICAgICAgICAgICAgJiYgc3RhbnphLmF0dHJzLnR5cGUgIT09ICdncm91cGNoYXQnXHJcbiAgICAgICAgICAgICYmIHN0YW56YS5hdHRycy50eXBlICE9PSAnZXJyb3InXHJcbiAgICAgICAgICAgICYmICEhc3RhbnphLmdldENoaWxkVGV4dCgnYm9keScpPy50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVNZXNzYWdlU3RhbnphKG1lc3NhZ2VTdGFuemE6IE1lc3NhZ2VXaXRoQm9keVN0YW56YSwgYXJjaGl2ZURlbGF5RWxlbWVudD86IFN0YW56YSkge1xyXG4gICAgICAgIGNvbnN0IGlzQWRkcmVzc2VkVG9NZSA9IHRoaXMueG1wcENoYXRBZGFwdGVyLmNoYXRDb25uZWN0aW9uU2VydmljZS51c2VySmlkLmJhcmUoKVxyXG4gICAgICAgICAgICAuZXF1YWxzKHBhcnNlSmlkKG1lc3NhZ2VTdGFuemEuYXR0cnMudG8pLmJhcmUoKSk7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZURpcmVjdGlvbiA9IGlzQWRkcmVzc2VkVG9NZSA/IERpcmVjdGlvbi5pbiA6IERpcmVjdGlvbi5vdXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VGcm9tQXJjaGl2ZSA9IGFyY2hpdmVEZWxheUVsZW1lbnQgIT0gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsYXlFbGVtZW50ID0gYXJjaGl2ZURlbGF5RWxlbWVudCA/PyBtZXNzYWdlU3RhbnphLmdldENoaWxkKCdkZWxheScpO1xyXG4gICAgICAgIGNvbnN0IGRhdGV0aW1lID0gZGVsYXlFbGVtZW50Py5hdHRycy5zdGFtcFxyXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRlbGF5RWxlbWVudC5hdHRycy5zdGFtcClcclxuICAgICAgICAgICAgOiBuZXcgRGF0ZSgpIC8qIFRPRE86IHJlcGxhY2Ugd2l0aCBlbnRpdHkgdGltZSBwbHVnaW4gKi87XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlRGlyZWN0aW9uID09PSBEaXJlY3Rpb24uaW4gJiYgIW1lc3NhZ2VGcm9tQXJjaGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZGVidWcoJ21lc3NhZ2UgcmVjZWl2ZWQgPD0nLCBtZXNzYWdlU3RhbnphLmdldENoaWxkVGV4dCgnYm9keScpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGJvZHk6IG1lc3NhZ2VTdGFuemEuZ2V0Q2hpbGRUZXh0KCdib2R5JykudHJpbSgpLFxyXG4gICAgICAgICAgICBkaXJlY3Rpb246IG1lc3NhZ2VEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLFxyXG4gICAgICAgICAgICBkZWxheWVkOiAhIWRlbGF5RWxlbWVudCxcclxuICAgICAgICAgICAgZnJvbUFyY2hpdmU6IG1lc3NhZ2VGcm9tQXJjaGl2ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VSZWNlaXZlZEV2ZW50ID0gbmV3IE1lc3NhZ2VSZWNlaXZlZEV2ZW50KCk7XHJcbiAgICAgICAgdGhpcy54bXBwQ2hhdEFkYXB0ZXIucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uYWZ0ZXJSZWNlaXZlTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlU3RhbnphLCBtZXNzYWdlUmVjZWl2ZWRFdmVudCkpO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZVJlY2VpdmVkRXZlbnQuZGlzY2FyZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWN0SmlkID0gaXNBZGRyZXNzZWRUb01lID8gbWVzc2FnZVN0YW56YS5hdHRycy5mcm9tIDogbWVzc2FnZVN0YW56YS5hdHRycy50bztcclxuICAgICAgICBjb25zdCBjb250YWN0ID0gdGhpcy54bXBwQ2hhdEFkYXB0ZXIuZ2V0T3JDcmVhdGVDb250YWN0QnlJZChjb250YWN0SmlkKTtcclxuICAgICAgICBjb250YWN0LmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlRGlyZWN0aW9uID09PSBEaXJlY3Rpb24uaW4gJiYgIW1lc3NhZ2VGcm9tQXJjaGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5tZXNzYWdlJC5uZXh0KGNvbnRhY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZW5kTWVzc2FnZShjb250YWN0OiBDb250YWN0LCBib2R5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlU3RhbnphID0geG1sKCdtZXNzYWdlJywge1xyXG4gICAgICAgICAgICAgICAgdG86IGNvbnRhY3QuamlkQmFyZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZnJvbTogdGhpcy54bXBwQ2hhdEFkYXB0ZXIuY2hhdENvbm5lY3Rpb25TZXJ2aWNlLnVzZXJKaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGF0JyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeG1sKCdib2R5Jywge30sIGJvZHkpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogRGlyZWN0aW9uLm91dCxcclxuICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgZGF0ZXRpbWU6IG5ldyBEYXRlKCksIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBlbnRpdHkgdGltZSBwbHVnaW5cclxuICAgICAgICAgICAgZGVsYXllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZyb21BcmNoaXZlOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMueG1wcENoYXRBZGFwdGVyLnBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4gcGx1Z2luLmJlZm9yZVNlbmRNZXNzYWdlKG1lc3NhZ2VTdGFuemEsIG1lc3NhZ2UpKTtcclxuICAgICAgICBjb250YWN0LmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgLy8gVE9ETzogb24gcmVqZWN0aW9uIG1hcmsgbWVzc2FnZSB0aGF0IGl0IHdhcyBub3Qgc2VudCBzdWNjZXNzZnVsbHlcclxuICAgICAgICB0aGlzLnhtcHBDaGF0QWRhcHRlci5jaGF0Q29ubmVjdGlvblNlcnZpY2Uuc2VuZChtZXNzYWdlU3RhbnphKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy54bXBwQ2hhdEFkYXB0ZXIucGx1Z2lucy5mb3JFYWNoKHBsdWdpbiA9PiBwbHVnaW4uYWZ0ZXJTZW5kTWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlU3RhbnphKSk7XHJcbiAgICAgICAgfSwgKHJlaikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoJ3JlamVjdGVkIG1lc3NhZ2UgJyArIG1lc3NhZ2UuaWQsIHJlaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==