UNPKG

@hsaadawy/ngx-chat

Version:
121 lines 17.2 kB
import { HttpHeaders } from "@angular/common/http"; import { jid as parseJid } from "@xmpp/client"; import { BehaviorSubject } from "rxjs"; import { chatAdminPassword, chatAdminUserName, dummyAvatarContact, getAvatarUrl } from "./contact-avatar"; import { MessageStore } from "./message-store"; import { Presence } from "./presence"; import { isJid } from "./recipient"; import { ContactSubscription } from "./subscription"; export class Contact { /** * Do not call directly, use {@link ContactFactoryService#createContact} instead. */ constructor(httpClinet, jidPlain, name, nick, logService, avatar) { this.httpClinet = httpClinet; this.name = name; this.nick = nick; this.recipientType = "contact"; this.avatar = dummyAvatarContact; this.chatUserName = chatAdminUserName; this.chatPassword = chatAdminPassword; this.avatarUrl = getAvatarUrl; this.metadata = {}; // private _httpHandler: HttpHandler; this.presence$ = new BehaviorSubject(Presence.unavailable); this.subscription$ = new BehaviorSubject(ContactSubscription.none); this.pendingOut$ = new BehaviorSubject(false); this.pendingIn$ = new BehaviorSubject(false); this.resources$ = new BehaviorSubject(new Map()); this._httpClient = httpClinet; const jid = parseJid(jidPlain); this.jidFull = jid; this.jidBare = jid.bare(); let user = { user: jid.local, host: jid.domain, name: "URL", }; let credentials = this.chatUserName + ":" + this.chatPassword; debugger; const httpOptions = { headers: new HttpHeaders({ "Content-Type": "application/json", Authorization: //"Basic " + btoa("admin@chat.mahamma.com:tDm2R&nMRr47w!dL"), "Basic " + btoa(credentials), }), }; this._httpClient.post(this.avatarUrl, user, httpOptions) .subscribe((result) => { debugger; this.avatar = result.content; }); // this.avatar ="https://picsum.photos/200/300"; this.messageStore = new MessageStore(logService); } get messages$() { return this.messageStore.messages$; } get messages() { return this.messageStore.messages; } get dateMessagesGroups() { return this.messageStore.dateMessageGroups; } get oldestMessage() { return this.messageStore.oldestMessage; } get mostRecentMessage() { return this.messageStore.mostRecentMessage; } get mostRecentMessageReceived() { return this.messageStore.mostRecentMessageReceived; } get mostRecentMessageSent() { return this.messageStore.mostRecentMessageSent; } addMessage(message) { this.messageStore.addMessage(message); } equalsBareJid(other) { if (other instanceof Contact || isJid(other)) { const otherJid = other instanceof Contact ? other.jidBare : other.bare(); return this.jidBare.equals(otherJid); } return false; } isSubscribed() { const subscription = this.subscription$.getValue(); return (subscription === ContactSubscription.both || subscription === ContactSubscription.to); } isUnaffiliated() { return (!this.isSubscribed() && !this.pendingIn$.getValue() && !this.pendingOut$.getValue()); } updateResourcePresence(jid, presence) { const resources = this.resources$.getValue(); resources.set(jid, presence); this.presence$.next(this.determineOverallPresence(resources)); this.resources$.next(resources); } getMessageById(id) { return this.messageStore.messageIdToMessage.get(id); } determineOverallPresence(jidToPresence) { let result = Presence.unavailable; [...jidToPresence.values()].some((presence) => { if (presence === Presence.present) { result = presence; return true; } else if (presence === Presence.away) { result = Presence.away; } return false; }); return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhenpuZXR3b3JrL25neC1jaGF0L3NyYy9saWIvY29yZS9jb250YWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUdoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUcsT0FBTyxFQUFxQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQWEsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRckQsTUFBTSxPQUFPLE9BQU87SUFzRGxCOztPQUVHO0lBQ0gsWUFDUyxVQUFzQixFQUM3QixRQUFnQixFQUNULElBQVksRUFDWixJQUFZLEVBQ25CLFVBQXVCLEVBQ3ZCLE1BQWU7UUFMUixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBNURaLGtCQUFhLEdBQUcsU0FBUyxDQUFDO1FBQzVCLFdBQU0sR0FBRyxrQkFBa0IsQ0FBQztRQUM1QixpQkFBWSxHQUFHLGlCQUFpQixDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsaUJBQWlCLENBQUM7UUFDakMsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUN6QixhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQU12QyxxQ0FB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QUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM1QyxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNqQyxNQUFNLEdBQUcsUUFBUSxDQUFDO2dCQUNsQixPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ3hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIYW5kbGVyLCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBqaWQgYXMgcGFyc2VKaWQgfSBmcm9tIFwiQHhtcHAvY2xpZW50XCI7XHJcbmltcG9ydCB7IEpJRCB9IGZyb20gXCJAeG1wcC9qaWRcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgY2hhdEFkbWluUGFzc3dvcmQsIGNoYXRBZG1pblVzZXJOYW1lLCBkdW1teUF2YXRhckNvbnRhY3QsIGdldEF2YXRhclVybCB9IGZyb20gXCIuL2NvbnRhY3QtYXZhdGFyXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi9tZXNzYWdlXCI7XHJcbmltcG9ydCB7IERhdGVNZXNzYWdlc0dyb3VwLCBNZXNzYWdlU3RvcmUgfSBmcm9tIFwiLi9tZXNzYWdlLXN0b3JlXCI7XHJcbmltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSBcIi4vcHJlc2VuY2VcIjtcclxuaW1wb3J0IHsgaXNKaWQsIFJlY2lwaWVudCB9IGZyb20gXCIuL3JlY2lwaWVudFwiO1xyXG5pbXBvcnQgeyBDb250YWN0U3Vic2NyaXB0aW9uIH0gZnJvbSBcIi4vc3Vic2NyaXB0aW9uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhY3RNZXRhZGF0YSB7XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBKaWRUb1ByZXNlbmNlID0gTWFwPHN0cmluZywgUHJlc2VuY2U+O1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRhY3Qge1xyXG4gIHJlYWRvbmx5IHJlY2lwaWVudFR5cGUgPSBcImNvbnRhY3RcIjtcclxuICBwdWJsaWMgYXZhdGFyID0gZHVtbXlBdmF0YXJDb250YWN0O1xyXG4gIHB1YmxpYyBjaGF0VXNlck5hbWUgPSBjaGF0QWRtaW5Vc2VyTmFtZTtcclxuICBwdWJsaWMgY2hhdFBhc3N3b3JkID0gY2hhdEFkbWluUGFzc3dvcmQ7XHJcbiAgcHVibGljIGF2YXRhclVybCA9IGdldEF2YXRhclVybDtcclxuICBwdWJsaWMgbWV0YWRhdGE6IENvbnRhY3RNZXRhZGF0YSA9IHt9O1xyXG5cclxuICAvKiogdXNlIHtAbGluayBqaWRCYXJlfSwgamlkIHJlc291cmNlIGlzIG9ubHkgc2V0IGZvciBjaGF0IHJvb20gY29udGFjdHMgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgamlkRnVsbDogSklEO1xyXG4gIHB1YmxpYyByZWFkb25seSBqaWRCYXJlOiBKSUQ7XHJcbiAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudDtcclxuIC8vIHByaXZhdGUgX2h0dHBIYW5kbGVyOiBIdHRwSGFuZGxlcjtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHByZXNlbmNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlc2VuY2U+KFxyXG4gICAgUHJlc2VuY2UudW5hdmFpbGFibGVcclxuICApO1xyXG4gIHB1YmxpYyByZWFkb25seSBzdWJzY3JpcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb250YWN0U3Vic2NyaXB0aW9uPihcclxuICAgIENvbnRhY3RTdWJzY3JpcHRpb24ubm9uZVxyXG4gICk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHBlbmRpbmdPdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHBlbmRpbmdJbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SmlkVG9QcmVzZW5jZT4obmV3IE1hcCgpKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU3RvcmU6IE1lc3NhZ2VTdG9yZTxNZXNzYWdlPjtcclxuXHJcbiAgZ2V0IG1lc3NhZ2VzJCgpOiBTdWJqZWN0PE1lc3NhZ2U+IHtcclxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdG9yZS5tZXNzYWdlcyQ7XHJcbiAgfVxyXG5cclxuICBnZXQgbWVzc2FnZXMoKTogTWVzc2FnZVtdIHtcclxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdG9yZS5tZXNzYWdlcztcclxuICB9XHJcblxyXG4gIGdldCBkYXRlTWVzc2FnZXNHcm91cHMoKTogRGF0ZU1lc3NhZ2VzR3JvdXA8TWVzc2FnZT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3RvcmUuZGF0ZU1lc3NhZ2VHcm91cHM7XHJcbiAgfVxyXG5cclxuICBnZXQgb2xkZXN0TWVzc2FnZSgpOiBNZXNzYWdlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdG9yZS5vbGRlc3RNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1vc3RSZWNlbnRNZXNzYWdlKCk6IE1lc3NhZ2UgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVN0b3JlLm1vc3RSZWNlbnRNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1vc3RSZWNlbnRNZXNzYWdlUmVjZWl2ZWQoKTogTWVzc2FnZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3RvcmUubW9zdFJlY2VudE1lc3NhZ2VSZWNlaXZlZDtcclxuICB9XHJcblxyXG4gIGdldCBtb3N0UmVjZW50TWVzc2FnZVNlbnQoKTogTWVzc2FnZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3RvcmUubW9zdFJlY2VudE1lc3NhZ2VTZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG8gbm90IGNhbGwgZGlyZWN0bHksIHVzZSB7QGxpbmsgQ29udGFjdEZhY3RvcnlTZXJ2aWNlI2NyZWF0ZUNvbnRhY3R9IGluc3RlYWQuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaHR0cENsaW5ldDogSHR0cENsaWVudCxcclxuICAgIGppZFBsYWluOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxyXG4gICAgcHVibGljIG5pY2s6IHN0cmluZyxcclxuICAgIGxvZ1NlcnZpY2U/OiBMb2dTZXJ2aWNlLFxyXG4gICAgYXZhdGFyPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9odHRwQ2xpZW50ID0gaHR0cENsaW5ldDtcclxuICAgIFxyXG4gICAgY29uc3QgamlkID0gcGFyc2VKaWQoamlkUGxhaW4pO1xyXG4gICAgdGhpcy5qaWRGdWxsID0gamlkO1xyXG4gICAgdGhpcy5qaWRCYXJlID0gamlkLmJhcmUoKTtcclxuICAgIGxldCB1c2VyID0ge1xyXG4gICAgICB1c2VyOiBqaWQubG9jYWwsXHJcbiAgICAgIGhvc3Q6IGppZC5kb21haW4sXHJcbiAgICAgIG5hbWU6IFwiVVJMXCIsXHJcbiAgICB9O1xyXG4gICAgbGV0IGNyZWRlbnRpYWxzPSB0aGlzLmNoYXRVc2VyTmFtZStcIjpcIit0aGlzLmNoYXRQYXNzd29yZFxyXG4gICAgZGVidWdnZXI7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICBBdXRob3JpemF0aW9uOlxyXG4gICAgICAgICAgLy9cIkJhc2ljIFwiICsgYnRvYShcImFkbWluQGNoYXQubWFoYW1tYS5jb206dERtMlImbk1ScjQ3dyFkTFwiKSxcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgXCJCYXNpYyBcIiArIGJ0b2EoY3JlZGVudGlhbHMpLFxyXG4gICAgICB9KSxcclxuICAgIH07XHJcblxyXG4gICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdDxhbnk+KFxyXG4gICAgICB0aGlzLmF2YXRhclVybCxcclxuICAgICAgICB1c2VyLFxyXG4gICAgICAgIGh0dHBPcHRpb25zXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OmFueSkgPT4ge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgdGhpcy5hdmF0YXIgPXJlc3VsdC5jb250ZW50O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyB0aGlzLmF2YXRhciA9XCJodHRwczovL3BpY3N1bS5waG90b3MvMjAwLzMwMFwiO1xyXG5cclxuICAgIHRoaXMubWVzc2FnZVN0b3JlID0gbmV3IE1lc3NhZ2VTdG9yZShsb2dTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlU3RvcmUuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlcXVhbHNCYXJlSmlkKG90aGVyOiBSZWNpcGllbnQgfCBKSUQpOiBib29sZWFuIHtcclxuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIENvbnRhY3QgfHwgaXNKaWQob3RoZXIpKSB7XHJcbiAgICAgIGNvbnN0IG90aGVySmlkID0gb3RoZXIgaW5zdGFuY2VvZiBDb250YWN0ID8gb3RoZXIuamlkQmFyZSA6IG90aGVyLmJhcmUoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuamlkQmFyZS5lcXVhbHMob3RoZXJKaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNTdWJzY3JpYmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpcHRpb24kLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBzdWJzY3JpcHRpb24gPT09IENvbnRhY3RTdWJzY3JpcHRpb24uYm90aCB8fFxyXG4gICAgICBzdWJzY3JpcHRpb24gPT09IENvbnRhY3RTdWJzY3JpcHRpb24udG9cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1VuYWZmaWxpYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLmlzU3Vic2NyaWJlZCgpICYmXHJcbiAgICAgICF0aGlzLnBlbmRpbmdJbiQuZ2V0VmFsdWUoKSAmJlxyXG4gICAgICAhdGhpcy5wZW5kaW5nT3V0JC5nZXRWYWx1ZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUmVzb3VyY2VQcmVzZW5jZShqaWQ6IHN0cmluZywgcHJlc2VuY2U6IFByZXNlbmNlKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcyQuZ2V0VmFsdWUoKTtcclxuICAgIHJlc291cmNlcy5zZXQoamlkLCBwcmVzZW5jZSk7XHJcbiAgICB0aGlzLnByZXNlbmNlJC5uZXh0KHRoaXMuZGV0ZXJtaW5lT3ZlcmFsbFByZXNlbmNlKHJlc291cmNlcykpO1xyXG4gICAgdGhpcy5yZXNvdXJjZXMkLm5leHQocmVzb3VyY2VzKTtcclxuICB9XHJcblxyXG4gIGdldE1lc3NhZ2VCeUlkKGlkOiBzdHJpbmcpOiBNZXNzYWdlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3RvcmUubWVzc2FnZUlkVG9NZXNzYWdlLmdldChpZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRldGVybWluZU92ZXJhbGxQcmVzZW5jZShqaWRUb1ByZXNlbmNlOiBKaWRUb1ByZXNlbmNlKTogUHJlc2VuY2Uge1xyXG4gICAgbGV0IHJlc3VsdCA9IFByZXNlbmNlLnVuYXZhaWxhYmxlO1xyXG5cclxuICAgIFsuLi5qaWRUb1ByZXNlbmNlLnZhbHVlcygpXS5zb21lKChwcmVzZW5jZSkgPT4ge1xyXG4gICAgICBpZiAocHJlc2VuY2UgPT09IFByZXNlbmNlLnByZXNlbnQpIHtcclxuICAgICAgICByZXN1bHQgPSBwcmVzZW5jZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChwcmVzZW5jZSA9PT0gUHJlc2VuY2UuYXdheSkge1xyXG4gICAgICAgIHJlc3VsdCA9IFByZXNlbmNlLmF3YXk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgXHJcbn1cclxuIl19