Line data Source code
1 : /*
2 : * Famedly Matrix SDK
3 : * Copyright (C) 2021 Famedly GmbH
4 : *
5 : * This program is free software: you can redistribute it and/or modify
6 : * it under the terms of the GNU Affero General Public License as
7 : * published by the Free Software Foundation, either version 3 of the
8 : * License, or (at your option) any later version.
9 : *
10 : * This program is distributed in the hope that it will be useful,
11 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : * GNU Affero General Public License for more details.
14 : *
15 : * You should have received a copy of the GNU Affero General Public License
16 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 : */
18 :
19 : import 'dart:typed_data';
20 :
21 : import 'package:matrix/encryption/utils/olm_session.dart';
22 : import 'package:matrix/encryption/utils/outbound_group_session.dart';
23 : import 'package:matrix/encryption/utils/ssss_cache.dart';
24 : import 'package:matrix/encryption/utils/stored_inbound_group_session.dart';
25 : import 'package:matrix/matrix.dart';
26 : import 'package:matrix/src/utils/queued_to_device_event.dart';
27 :
28 : abstract class DatabaseApi {
29 0 : int get maxFileSize => 1 * 1000 * 1000;
30 :
31 1 : bool get supportsFileStoring => false;
32 :
33 : Future<Map<String, dynamic>?> getClient(String name);
34 :
35 : Future updateClient(
36 : String homeserverUrl,
37 : String token,
38 : DateTime? tokenExpiresAt,
39 : String? refreshToken,
40 : String userId,
41 : String? deviceId,
42 : String? deviceName,
43 : String? prevBatch,
44 : String? olmAccount,
45 : );
46 :
47 : Future insertClient(
48 : String name,
49 : String homeserverUrl,
50 : String token,
51 : DateTime? tokenExpiresAt,
52 : String? refreshToken,
53 : String userId,
54 : String? deviceId,
55 : String? deviceName,
56 : String? prevBatch,
57 : String? olmAccount,
58 : );
59 :
60 : Future<List<Room>> getRoomList(Client client);
61 :
62 : Future<Room?> getSingleRoom(
63 : Client client,
64 : String roomId, {
65 : bool loadImportantStates = true,
66 : });
67 :
68 : Future<Map<String, BasicEvent>> getAccountData();
69 :
70 : /// Stores a RoomUpdate object in the database. Must be called inside of
71 : /// [transaction].
72 : Future<void> storeRoomUpdate(
73 : String roomId,
74 : SyncRoomUpdate roomUpdate,
75 : Event? lastEvent,
76 : Client client,
77 : );
78 :
79 : Future<void> deleteTimelineForRoom(String roomId);
80 :
81 : /// Stores an EventUpdate object in the database. Must be called inside of
82 : /// [transaction].
83 : Future<void> storeEventUpdate(
84 : String roomId,
85 : StrippedStateEvent event,
86 : EventUpdateType type,
87 : Client client,
88 : );
89 :
90 : Future<Event?> getEventById(String eventId, Room room);
91 :
92 : Future<void> forgetRoom(String roomId);
93 :
94 : Future<CachedProfileInformation?> getUserProfile(String userId);
95 :
96 : Future<void> storeUserProfile(
97 : String userId,
98 : CachedProfileInformation profile,
99 : );
100 :
101 : Future<void> markUserProfileAsOutdated(String userId);
102 :
103 : Future<void> clearCache();
104 :
105 : Future<void> clear();
106 :
107 : Future<User?> getUser(String userId, Room room);
108 :
109 : Future<List<User>> getUsers(Room room);
110 :
111 : Future<List<Event>> getEventList(
112 : Room room, {
113 : int start = 0,
114 : bool onlySending = false,
115 : int? limit,
116 : });
117 :
118 : Future<List<String>> getEventIdList(
119 : Room room, {
120 : int start = 0,
121 : bool includeSending = false,
122 : int? limit,
123 : });
124 :
125 : Future<Uint8List?> getFile(Uri mxcUri);
126 :
127 : Future storeFile(Uri mxcUri, Uint8List bytes, int time);
128 :
129 : Future<bool> deleteFile(Uri mxcUri);
130 :
131 : Future storeSyncFilterId(
132 : String syncFilterId,
133 : );
134 :
135 : Future storeAccountData(String type, Map<String, Object?> content);
136 :
137 : Future storeRoomAccountData(String roomId, BasicEvent event);
138 :
139 : Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client);
140 :
141 : Future<SSSSCache?> getSSSSCache(String type);
142 :
143 : Future<OutboundGroupSession?> getOutboundGroupSession(
144 : String roomId,
145 : String userId,
146 : );
147 :
148 : Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions();
149 :
150 : Future<StoredInboundGroupSession?> getInboundGroupSession(
151 : String roomId,
152 : String sessionId,
153 : );
154 :
155 : Future updateInboundGroupSessionIndexes(
156 : String indexes,
157 : String roomId,
158 : String sessionId,
159 : );
160 :
161 : Future storeInboundGroupSession(
162 : String roomId,
163 : String sessionId,
164 : String pickle,
165 : String content,
166 : String indexes,
167 : String allowedAtIndex,
168 : String senderKey,
169 : String senderClaimedKey,
170 : );
171 :
172 : Future markInboundGroupSessionAsUploaded(
173 : String roomId,
174 : String sessionId,
175 : );
176 :
177 : Future updateInboundGroupSessionAllowedAtIndex(
178 : String allowedAtIndex,
179 : String roomId,
180 : String sessionId,
181 : );
182 :
183 : Future removeOutboundGroupSession(String roomId);
184 :
185 : Future storeOutboundGroupSession(
186 : String roomId,
187 : String pickle,
188 : String deviceIds,
189 : int creationTime,
190 : );
191 :
192 : Future updateClientKeys(
193 : String olmAccount,
194 : );
195 :
196 : Future storeOlmSession(
197 : String identityKey,
198 : String sessionId,
199 : String pickle,
200 : int lastReceived,
201 : );
202 :
203 : Future setLastActiveUserDeviceKey(
204 : int lastActive,
205 : String userId,
206 : String deviceId,
207 : );
208 :
209 : Future setLastSentMessageUserDeviceKey(
210 : String lastSentMessage,
211 : String userId,
212 : String deviceId,
213 : );
214 :
215 : Future clearSSSSCache();
216 :
217 : Future storeSSSSCache(
218 : String type,
219 : String keyId,
220 : String ciphertext,
221 : String content,
222 : );
223 :
224 : Future markInboundGroupSessionsAsNeedingUpload();
225 :
226 : Future storePrevBatch(
227 : String prevBatch,
228 : );
229 :
230 : Future deleteOldFiles(int savedAt);
231 :
232 : Future storeUserDeviceKeysInfo(
233 : String userId,
234 : bool outdated,
235 : );
236 :
237 : Future storeUserDeviceKey(
238 : String userId,
239 : String deviceId,
240 : String content,
241 : bool verified,
242 : bool blocked,
243 : int lastActive,
244 : );
245 :
246 : Future removeUserDeviceKey(
247 : String userId,
248 : String deviceId,
249 : );
250 :
251 : Future removeUserCrossSigningKey(
252 : String userId,
253 : String publicKey,
254 : );
255 :
256 : Future storeUserCrossSigningKey(
257 : String userId,
258 : String publicKey,
259 : String content,
260 : bool verified,
261 : bool blocked,
262 : );
263 :
264 : Future deleteFromToDeviceQueue(int id);
265 :
266 : Future removeEvent(String eventId, String roomId);
267 :
268 : Future setRoomPrevBatch(
269 : String? prevBatch,
270 : String roomId,
271 : Client client,
272 : );
273 :
274 : Future setVerifiedUserCrossSigningKey(
275 : bool verified,
276 : String userId,
277 : String publicKey,
278 : );
279 :
280 : Future setBlockedUserCrossSigningKey(
281 : bool blocked,
282 : String userId,
283 : String publicKey,
284 : );
285 :
286 : Future setVerifiedUserDeviceKey(
287 : bool verified,
288 : String userId,
289 : String deviceId,
290 : );
291 :
292 : Future setBlockedUserDeviceKey(
293 : bool blocked,
294 : String userId,
295 : String deviceId,
296 : );
297 :
298 : Future<List<Event>> getUnimportantRoomEventStatesForRoom(
299 : List<String> events,
300 : Room room,
301 : );
302 :
303 : Future<List<OlmSession>> getOlmSessions(
304 : String identityKey,
305 : String userId,
306 : );
307 :
308 : Future<Map<String, Map>> getAllOlmSessions();
309 :
310 : Future<List<OlmSession>> getOlmSessionsForDevices(
311 : List<String> identityKeys,
312 : String userId,
313 : );
314 :
315 : Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue();
316 :
317 : /// Please do `jsonEncode(content)` in your code to stay compatible with
318 : /// auto generated methods here.
319 : Future insertIntoToDeviceQueue(
320 : String type,
321 : String txnId,
322 : String content,
323 : );
324 :
325 : Future<List<String>> getLastSentMessageUserDeviceKey(
326 : String userId,
327 : String deviceId,
328 : );
329 :
330 : Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload();
331 :
332 : Future<void> addSeenDeviceId(
333 : String userId,
334 : String deviceId,
335 : String publicKeys,
336 : );
337 :
338 : Future<void> addSeenPublicKey(String publicKey, String deviceId);
339 :
340 : Future<String?> deviceIdSeen(userId, deviceId);
341 :
342 : Future<String?> publicKeySeen(String publicKey);
343 :
344 : Future<dynamic> close();
345 :
346 : Future<void> transaction(Future<void> Function() action);
347 :
348 : Future<String> exportDump();
349 :
350 : Future<bool> importDump(String export);
351 :
352 : Future<void> storePresence(String userId, CachedPresence presence);
353 :
354 : Future<CachedPresence?> getPresence(String userId);
355 :
356 : Future<void> storeWellKnown(DiscoveryInformation? discoveryInformation);
357 :
358 : Future<DiscoveryInformation?> getWellKnown();
359 :
360 : /// Deletes the whole database. The database needs to be created again after
361 : /// this.
362 : Future<void> delete();
363 : }
|