RefreshToken support and matrix fixes

Also, some initial TypeScript.
This commit is contained in:
N-Pex 2025-05-22 10:22:19 +02:00
parent f8f6c2ed94
commit a6d932ddb5
8 changed files with 169 additions and 120 deletions

View file

@ -85,19 +85,19 @@ export default {
joinedRooms() {
return this.rooms.filter((room) => {
return room.selfMembership === "join";
return room.getMyMembership() === "join";
});
},
invites() {
return this.rooms.filter((room) => {
return room.selfMembership === "invite";
return room.getMyMembership() === "invite";
});
},
joinedAndInvitedRooms() {
return this.rooms.filter((room) => {
return room.selfMembership === "join" || room.selfMembership === "invite";
return room.getMyMembership() === "join" || room.getMyMembership() === "invite";
});
},
},
@ -313,6 +313,8 @@ export default {
store: matrixStore,
deviceId: user.device_id,
accessToken: user.access_token,
refreshToken: user.refresh_token,
tokenRefreshFunction: this.onSessionRefresh,
timelineSupport: true,
unstableClientRelationAggregation: true,
cryptoStore: cryptoStore
@ -413,7 +415,7 @@ export default {
case "m.room.join_rules":
{
const room = this.matrixClient.getRoom(event.getRoomId());
if (room && room.getJoinRule() == "private" && room.selfMembership == "invite") {
if (room && room.getJoinRule() == "private" && room.getMyMembership() == "invite") {
// We have an invite to a room that's now "private"? This is most probably a deleted DM room.
// Reject the invite, i.e. call "leave" on it.
this.matrixClient.leave(room.roomId);
@ -451,7 +453,7 @@ export default {
},
onRoom(room) {
if (room.selfMembership === "invite") {
if (room.getMyMembership() === "invite") {
this.matrixClient
.getRoomTags(room.roomId)
.then((reply) => {
@ -468,7 +470,7 @@ export default {
},
onRoomMyMembership(room) {
if (room.selfMembership === "invite") {
if (room.getMyMembership() === "invite") {
// Invitation. Need to call "recalculate" to pick
// up room name, not sure why exactly.
room.recalculate();
@ -476,6 +478,28 @@ export default {
this.reloadRooms();
},
onSessionRefresh(refreshToken) {
const now = Date.now();
return this.matrixClient.refreshToken(refreshToken).then((result) => {
// Store new one!
var user = this.$store.state.auth.user;
user.access_token = result.access_token;
user.refresh_token = result.refresh_token;
user.expires_in_ms = result.expires_in_ms;
this.$store.commit("setUser", user);
// Return AccessTokens struct
let accesssTokens = {
accessToken: result.access_token,
refreshToken: result.refresh_token
};
if (result.expires_in_ms) {
accesssTokens.expiry = new Date(now + result.expires_in_ms);
};
return accesssTokens;
});
},
onSessionLoggedOut() {
console.log("Logged out!");
if (this.matrixClient) {
@ -517,7 +541,7 @@ export default {
// each time!
var updatedRooms = this.matrixClient.getVisibleRooms();
updatedRooms = updatedRooms.filter((room) => {
return room.selfMembership && (room.selfMembership == "invite" || room.selfMembership == "join") && room.currentState.getStateEvents(STATE_EVENT_ROOM_DELETED).length == 0;
return room.getMyMembership() && (room.getMyMembership() == "invite" || room.getMyMembership() == "join") && room.currentState.getStateEvents(STATE_EVENT_ROOM_DELETED).length == 0;
});
updatedRooms.forEach((room) => {
room["avatar"] = room.getAvatarUrl(this.matrixClient.getHomeserverUrl(), 80, 80, "scale", true, this.useAuthedMedia);
@ -567,7 +591,7 @@ export default {
var ids = {};
const ret = [];
for (const room of this.rooms) {
if (room.selfMembership == "join" && this.getRoomJoinRule(room) == "invite") {
if (room.getMyMembership() == "join" && this.getRoomJoinRule(room) == "invite") {
for (const member of room.getJoinedMembers()) {
if (member.userId != this.currentUserId && !ids[member.userId]) {
ids[member.userId] = member;
@ -842,7 +866,7 @@ export default {
})
.then(() => {
//console.log("Purge: create timeline");
return timelineWindow.load(null, 100);
return timelineWindow.load(undefined, 100);
})
.then(() => {
const getMoreIfAvailable = function _getMoreIfAvailable() {
@ -1234,7 +1258,7 @@ export default {
since: response.next_batch,
})
.then((response) => {
return _findOrGetMore(client, response);
return _findOrGetMore(client, useAuthedMedia, response);
})
.catch((err) => {
return Promise.reject("Failed to find room: " + err);