You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
matrix-chat/src/lib/matrixHandler.js

83 lines
2.4 KiB
JavaScript

import matrix from 'matrix-js-sdk';
3 years ago
export class MatrixHandler {
constructor(clientDisplayName = 'matrix-chat') {
this.clientDisplayName = clientDisplayName;
this.accessToken;
this.client = undefined;
3 years ago
this.rooms = [];
this.loading = undefined;
this.user = undefined;
this.baseUrl = undefined;
}
3 years ago
login(user, password, baseUrl, onError, callback = ()=>{}){
if (this.client){ console.log('there is already an active session'); return; }
this.client = new matrix.createClient({
baseUrl: baseUrl,
3 years ago
sessionStore: new matrix.WebStorageSessionStore(localStorage)
});
this.client.login('m.login.password', {
user: user,
password: password,
initial_device_display_name: this.clientDisplayName,
}).then((response) => {
if (response.error) {
3 years ago
this.logout();
console.log(`login error => ${response.error}`);
onError(response.error);
}
3 years ago
if (response.access_token){
console.log(`access token => ${response.access_token}`);
callback(response.access_token);
3 years ago
this.user = user;
this.baseUrl = baseUrl;
3 years ago
this.startSync()
3 years ago
}
}).catch(error => {
this.logout();
console.log(error);
onError(error.toString());
})
}
tokenLogin(baseUrl, accessToken, userId){
if (this.client){ console.log('there is already an active session'); return; }
this.client = new matrix.createClient({
baseUrl,
accessToken,
userId,
3 years ago
sessionStore: new matrix.WebStorageSessionStore(localStorage)
});
3 years ago
this.user = userId;
this.baseUrl = baseUrl;
3 years ago
this.startSync();
}
async logout(){
await this.client.stopClient();
3 years ago
this.client = undefined;
}
3 years ago
startSync(callback = ()=>{}){
this.loading = true;
this.client.startClient();
this.client.once('sync', (state) => {
console.log(state);
this.rooms = this.client.getRooms();
console.log(this.rooms)
3 years ago
this.loading = false;
callback();
});
}
async sendEvent(msg, roomId){
const msgSend = {
type: msg.type,
content: {
3 years ago
body: msg.content.body.trim(),
msgtype: msg.content.msgtype,
},
};
await this.client.sendEvent(roomId, msgSend.type, msgSend.content, '').then(() => {
console.log('message sent successfully');
}).catch((err) => {
console.log(`error while sending message => ${err}`);
});
}
}