matrix-js-sdk 41.7.0 → 41.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/lib/@types/event.d.ts +6 -1
- package/lib/@types/event.d.ts.map +1 -1
- package/lib/@types/event.js +3 -0
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/retention.d.ts +15 -0
- package/lib/@types/retention.d.ts.map +1 -0
- package/lib/@types/retention.js +13 -0
- package/lib/@types/retention.js.map +1 -0
- package/lib/capabilityPoller.d.ts +38 -0
- package/lib/capabilityPoller.d.ts.map +1 -0
- package/lib/capabilityPoller.js +96 -0
- package/lib/capabilityPoller.js.map +1 -0
- package/lib/client.d.ts +7 -0
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +15 -5
- package/lib/client.js.map +1 -1
- package/lib/matrix.d.ts +1 -0
- package/lib/matrix.d.ts.map +1 -1
- package/lib/matrix.js +1 -0
- package/lib/matrix.js.map +1 -1
- package/lib/matrixrtc/MembershipManager.d.ts +2 -0
- package/lib/matrixrtc/MembershipManager.d.ts.map +1 -1
- package/lib/matrixrtc/MembershipManager.js +2 -0
- package/lib/matrixrtc/MembershipManager.js.map +1 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.d.ts.map +1 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.js +4 -1
- package/lib/matrixrtc/MembershipManagerActionScheduler.js.map +1 -1
- package/lib/models/room-retention.d.ts +28 -0
- package/lib/models/room-retention.d.ts.map +1 -0
- package/lib/models/room-retention.js +201 -0
- package/lib/models/room-retention.js.map +1 -0
- package/lib/models/room.d.ts +2 -1
- package/lib/models/room.d.ts.map +1 -1
- package/lib/models/room.js +29 -3
- package/lib/models/room.js.map +1 -1
- package/lib/retentionPolicy.d.ts +33 -0
- package/lib/retentionPolicy.d.ts.map +1 -0
- package/lib/retentionPolicy.js +42 -0
- package/lib/retentionPolicy.js.map +1 -0
- package/lib/rust-crypto/backup.d.ts +7 -2
- package/lib/rust-crypto/backup.d.ts.map +1 -1
- package/lib/rust-crypto/backup.js +13 -4
- package/lib/rust-crypto/backup.js.map +1 -1
- package/lib/serverCapabilities.d.ts +4 -23
- package/lib/serverCapabilities.d.ts.map +1 -1
- package/lib/serverCapabilities.js +8 -61
- package/lib/serverCapabilities.js.map +1 -1
- package/lib/store/index.d.ts +7 -0
- package/lib/store/index.d.ts.map +1 -1
- package/lib/store/index.js.map +1 -1
- package/lib/store/indexeddb-local-backend.d.ts +1 -0
- package/lib/store/indexeddb-local-backend.d.ts.map +1 -1
- package/lib/store/indexeddb-local-backend.js +15 -3
- package/lib/store/indexeddb-local-backend.js.map +1 -1
- package/lib/store/indexeddb-remote-backend.d.ts +3 -1
- package/lib/store/indexeddb-remote-backend.d.ts.map +1 -1
- package/lib/store/indexeddb-remote-backend.js +29 -8
- package/lib/store/indexeddb-remote-backend.js.map +1 -1
- package/lib/store/indexeddb.d.ts +7 -5
- package/lib/store/indexeddb.d.ts.map +1 -1
- package/lib/store/indexeddb.js +20 -10
- package/lib/store/indexeddb.js.map +1 -1
- package/lib/store/memory.d.ts +1 -0
- package/lib/store/memory.d.ts.map +1 -1
- package/lib/store/memory.js +3 -0
- package/lib/store/memory.js.map +1 -1
- package/lib/store/stub.d.ts +1 -0
- package/lib/store/stub.d.ts.map +1 -1
- package/lib/store/stub.js +3 -0
- package/lib/store/stub.js.map +1 -1
- package/lib/sync-accumulator.d.ts +1 -0
- package/lib/sync-accumulator.d.ts.map +1 -1
- package/lib/sync-accumulator.js +4 -0
- package/lib/sync-accumulator.js.map +1 -1
- package/package.json +3 -3
- package/src/@types/event.ts +9 -0
- package/src/@types/retention.ts +16 -0
- package/src/capabilityPoller.ts +102 -0
- package/src/client.ts +18 -4
- package/src/matrix.ts +1 -0
- package/src/matrixrtc/MembershipManager.ts +2 -0
- package/src/matrixrtc/MembershipManagerActionScheduler.ts +4 -1
- package/src/models/room-retention.ts +230 -0
- package/src/models/room.ts +17 -1
- package/src/retentionPolicy.ts +65 -0
- package/src/rust-crypto/backup.ts +15 -4
- package/src/serverCapabilities.ts +8 -67
- package/src/store/index.ts +8 -0
- package/src/store/indexeddb-local-backend.ts +10 -0
- package/src/store/indexeddb-remote-backend.ts +24 -5
- package/src/store/indexeddb.ts +20 -8
- package/src/store/memory.ts +4 -0
- package/src/store/stub.ts +3 -0
- package/src/sync-accumulator.ts +9 -0
|
@@ -29,7 +29,7 @@ export class RemoteIndexedDBStoreBackend implements IIndexedDBBackend {
|
|
|
29
29
|
private inFlight: Record<number, PromiseWithResolvers<any>> = {}; // seq: promise
|
|
30
30
|
// Once we start connecting, we keep the promise and re-use it
|
|
31
31
|
// if we try to connect again
|
|
32
|
-
private
|
|
32
|
+
private startPromiseResolvers?: PromiseWithResolvers<void>;
|
|
33
33
|
// Callback for when the IndexedDB gets closed unexpectedly
|
|
34
34
|
private onClose?(): void;
|
|
35
35
|
|
|
@@ -158,17 +158,31 @@ export class RemoteIndexedDBStoreBackend implements IIndexedDBBackend {
|
|
|
158
158
|
await this.doCmd("removeUserProfiles", [userIds]);
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
public async removeEventsFromRoom(roomId: string, eventIds: string[]): Promise<void> {
|
|
162
|
+
await this.doCmd("removeEventsFromRoom", [roomId, eventIds]);
|
|
163
|
+
}
|
|
164
|
+
|
|
161
165
|
private ensureStarted(): Promise<void> {
|
|
162
|
-
if (!this.
|
|
163
|
-
this.
|
|
166
|
+
if (!this.startPromiseResolvers) {
|
|
167
|
+
this.startPromiseResolvers = Promise.withResolvers();
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
this.worker = this.workerFactory();
|
|
171
|
+
} catch (e) {
|
|
172
|
+
logger.error("IndexedDB worker failed to start", e);
|
|
173
|
+
this.startPromiseResolvers.reject(new Error("IndexedDB worker failed to start"));
|
|
174
|
+
return this.startPromiseResolvers.promise;
|
|
175
|
+
}
|
|
164
176
|
this.worker.onmessage = this.onWorkerMessage;
|
|
177
|
+
this.worker.onerror = this.onWorkerError;
|
|
165
178
|
|
|
166
179
|
// tell the worker the db name.
|
|
167
|
-
this.
|
|
180
|
+
this.doCmd("setupWorker", [this.dbName]).then(() => {
|
|
168
181
|
logger.log("IndexedDB worker is ready");
|
|
182
|
+
this.startPromiseResolvers?.resolve();
|
|
169
183
|
});
|
|
170
184
|
}
|
|
171
|
-
return this.
|
|
185
|
+
return this.startPromiseResolvers.promise;
|
|
172
186
|
}
|
|
173
187
|
|
|
174
188
|
private doCmd<T>(command: string, args?: any): Promise<T> {
|
|
@@ -186,6 +200,11 @@ export class RemoteIndexedDBStoreBackend implements IIndexedDBBackend {
|
|
|
186
200
|
});
|
|
187
201
|
}
|
|
188
202
|
|
|
203
|
+
private onWorkerError = (ev: ErrorEvent): void => {
|
|
204
|
+
logger.error("IndexedDB worker failed to connect", ev);
|
|
205
|
+
this.startPromiseResolvers?.reject(ev.message ?? new Error("IndexedDB worker failed to connect"));
|
|
206
|
+
};
|
|
207
|
+
|
|
189
208
|
private onWorkerMessage = (ev: MessageEvent): void => {
|
|
190
209
|
const msg = ev.data;
|
|
191
210
|
|
package/src/store/indexeddb.ts
CHANGED
|
@@ -64,11 +64,7 @@ export class IndexedDBStore extends MemoryStore {
|
|
|
64
64
|
return LocalIndexedDBStoreBackend.exists(indexedDB, dbName);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
* The backend instance.
|
|
69
|
-
* Call through to this API if you need to perform specific indexeddb actions like deleting the database.
|
|
70
|
-
*/
|
|
71
|
-
public readonly backend: IIndexedDBBackend;
|
|
67
|
+
public _backend: IIndexedDBBackend;
|
|
72
68
|
|
|
73
69
|
private startedUp = false;
|
|
74
70
|
private syncTs = 0;
|
|
@@ -105,7 +101,7 @@ export class IndexedDBStore extends MemoryStore {
|
|
|
105
101
|
*
|
|
106
102
|
* @param opts - Options object.
|
|
107
103
|
*/
|
|
108
|
-
public constructor(opts: IOpts) {
|
|
104
|
+
public constructor(private readonly opts: IOpts) {
|
|
109
105
|
super(opts);
|
|
110
106
|
|
|
111
107
|
if (!opts.indexedDB) {
|
|
@@ -113,12 +109,20 @@ export class IndexedDBStore extends MemoryStore {
|
|
|
113
109
|
}
|
|
114
110
|
|
|
115
111
|
if (opts.workerFactory) {
|
|
116
|
-
this.
|
|
112
|
+
this._backend = new RemoteIndexedDBStoreBackend(opts.workerFactory, opts.dbName);
|
|
117
113
|
} else {
|
|
118
|
-
this.
|
|
114
|
+
this._backend = new LocalIndexedDBStoreBackend(opts.indexedDB, opts.dbName);
|
|
119
115
|
}
|
|
120
116
|
}
|
|
121
117
|
|
|
118
|
+
/**
|
|
119
|
+
* The backend instance.
|
|
120
|
+
* Call through to this API if you need to perform specific indexeddb actions like deleting the database.
|
|
121
|
+
*/
|
|
122
|
+
public get backend(): IIndexedDBBackend {
|
|
123
|
+
return this._backend;
|
|
124
|
+
}
|
|
125
|
+
|
|
122
126
|
/** Re-exports `TypedEventEmitter.on` */
|
|
123
127
|
public on(event: EventEmitterEvents | "degraded" | "closed", handler: (...args: any[]) => void): void {
|
|
124
128
|
this.emitter.on(event, handler);
|
|
@@ -136,6 +140,14 @@ export class IndexedDBStore extends MemoryStore {
|
|
|
136
140
|
logger.log(`IndexedDBStore.startup: connecting to backend`);
|
|
137
141
|
return this.backend
|
|
138
142
|
.connect(this.onClose)
|
|
143
|
+
.catch((e) => {
|
|
144
|
+
if (this.opts.workerFactory) {
|
|
145
|
+
logger.log("Falling back to local indexeddb backend");
|
|
146
|
+
this._backend = new LocalIndexedDBStoreBackend(this.opts.indexedDB!, this.opts.dbName);
|
|
147
|
+
return this.backend.connect(this.onClose);
|
|
148
|
+
}
|
|
149
|
+
throw e;
|
|
150
|
+
})
|
|
139
151
|
.then(() => {
|
|
140
152
|
logger.log(`IndexedDBStore.startup: loading presence events`);
|
|
141
153
|
return this.backend.getUserPresenceEvents();
|
package/src/store/memory.ts
CHANGED
|
@@ -455,6 +455,10 @@ export class MemoryStore implements IStore {
|
|
|
455
455
|
userIds.forEach((userId) => this.userProfiles.delete(userId));
|
|
456
456
|
}
|
|
457
457
|
|
|
458
|
+
public async removeEventsFromRoom(roomId: string, eventIds: string[]): Promise<void> {
|
|
459
|
+
// Can ignore as there is no backing store.
|
|
460
|
+
}
|
|
461
|
+
|
|
458
462
|
public async destroy(): Promise<void> {
|
|
459
463
|
// Nothing to do
|
|
460
464
|
}
|
package/src/store/stub.ts
CHANGED
package/src/sync-accumulator.ts
CHANGED
|
@@ -781,6 +781,15 @@ export class SyncAccumulator {
|
|
|
781
781
|
public getNextBatchToken(): string {
|
|
782
782
|
return this.nextBatch!;
|
|
783
783
|
}
|
|
784
|
+
|
|
785
|
+
public removeEventsFromRoom(roomId: string, eventIds: string[]): void {
|
|
786
|
+
this.joinRooms[roomId]._timeline = this.joinRooms[roomId]._timeline.filter(
|
|
787
|
+
(ev) => !eventIds.includes(ev.event.event_id),
|
|
788
|
+
);
|
|
789
|
+
this.joinRooms[roomId]._stickyEvents = this.joinRooms[roomId]._stickyEvents.filter(
|
|
790
|
+
(ev) => !eventIds.includes(ev.event.event_id),
|
|
791
|
+
);
|
|
792
|
+
}
|
|
784
793
|
}
|
|
785
794
|
|
|
786
795
|
function setState(eventMap: Record<string, Record<string, IStateEvent>>, event: IRoomEvent | IStateEvent): void {
|