@hsaadawy/ngx-chat
Version:
121 lines • 17.2 kB
JavaScript
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