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(EventUpdate eventUpdate, Client client);
84 :
85 : Future<Event?> getEventById(String eventId, Room room);
86 :
87 : Future<void> forgetRoom(String roomId);
88 :
89 : Future<CachedProfileInformation?> getUserProfile(String userId);
90 :
91 : Future<void> storeUserProfile(
92 : String userId,
93 : CachedProfileInformation profile,
94 : );
95 :
96 : Future<void> markUserProfileAsOutdated(String userId);
97 :
98 : Future<void> clearCache();
99 :
100 : Future<void> clear();
101 :
102 : Future<User?> getUser(String userId, Room room);
103 :
104 : Future<List<User>> getUsers(Room room);
105 :
106 : Future<List<Event>> getEventList(
107 : Room room, {
108 : int start = 0,
109 : bool onlySending = false,
110 : int? limit,
111 : });
112 :
113 : Future<List<String>> getEventIdList(
114 : Room room, {
115 : int start = 0,
116 : bool includeSending = false,
117 : int? limit,
118 : });
119 :
120 : Future<Uint8List?> getFile(Uri mxcUri);
121 :
122 : Future storeFile(Uri mxcUri, Uint8List bytes, int time);
123 :
124 : Future<bool> deleteFile(Uri mxcUri);
125 :
126 : Future storeSyncFilterId(
127 : String syncFilterId,
128 : );
129 :
130 : Future storeAccountData(String type, Map<String, Object?> content);
131 :
132 : Future storeRoomAccountData(BasicRoomEvent event);
133 :
134 : Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client);
135 :
136 : Future<SSSSCache?> getSSSSCache(String type);
137 :
138 : Future<OutboundGroupSession?> getOutboundGroupSession(
139 : String roomId,
140 : String userId,
141 : );
142 :
143 : Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions();
144 :
145 : Future<StoredInboundGroupSession?> getInboundGroupSession(
146 : String roomId,
147 : String sessionId,
148 : );
149 :
150 : Future updateInboundGroupSessionIndexes(
151 : String indexes,
152 : String roomId,
153 : String sessionId,
154 : );
155 :
156 : Future storeInboundGroupSession(
157 : String roomId,
158 : String sessionId,
159 : String pickle,
160 : String content,
161 : String indexes,
162 : String allowedAtIndex,
163 : String senderKey,
164 : String senderClaimedKey,
165 : );
166 :
167 : Future markInboundGroupSessionAsUploaded(
168 : String roomId,
169 : String sessionId,
170 : );
171 :
172 : Future updateInboundGroupSessionAllowedAtIndex(
173 : String allowedAtIndex,
174 : String roomId,
175 : String sessionId,
176 : );
177 :
178 : Future removeOutboundGroupSession(String roomId);
179 :
180 : Future storeOutboundGroupSession(
181 : String roomId,
182 : String pickle,
183 : String deviceIds,
184 : int creationTime,
185 : );
186 :
187 : Future updateClientKeys(
188 : String olmAccount,
189 : );
190 :
191 : Future storeOlmSession(
192 : String identityKey,
193 : String sessionId,
194 : String pickle,
195 : int lastReceived,
196 : );
197 :
198 : Future setLastActiveUserDeviceKey(
199 : int lastActive,
200 : String userId,
201 : String deviceId,
202 : );
203 :
204 : Future setLastSentMessageUserDeviceKey(
205 : String lastSentMessage,
206 : String userId,
207 : String deviceId,
208 : );
209 :
210 : Future clearSSSSCache();
211 :
212 : Future storeSSSSCache(
213 : String type,
214 : String keyId,
215 : String ciphertext,
216 : String content,
217 : );
218 :
219 : Future markInboundGroupSessionsAsNeedingUpload();
220 :
221 : Future storePrevBatch(
222 : String prevBatch,
223 : );
224 :
225 : Future deleteOldFiles(int savedAt);
226 :
227 : Future storeUserDeviceKeysInfo(
228 : String userId,
229 : bool outdated,
230 : );
231 :
232 : Future storeUserDeviceKey(
233 : String userId,
234 : String deviceId,
235 : String content,
236 : bool verified,
237 : bool blocked,
238 : int lastActive,
239 : );
240 :
241 : Future removeUserDeviceKey(
242 : String userId,
243 : String deviceId,
244 : );
245 :
246 : Future removeUserCrossSigningKey(
247 : String userId,
248 : String publicKey,
249 : );
250 :
251 : Future storeUserCrossSigningKey(
252 : String userId,
253 : String publicKey,
254 : String content,
255 : bool verified,
256 : bool blocked,
257 : );
258 :
259 : Future deleteFromToDeviceQueue(int id);
260 :
261 : Future removeEvent(String eventId, String roomId);
262 :
263 : Future setRoomPrevBatch(
264 : String? prevBatch,
265 : String roomId,
266 : Client client,
267 : );
268 :
269 : Future setVerifiedUserCrossSigningKey(
270 : bool verified,
271 : String userId,
272 : String publicKey,
273 : );
274 :
275 : Future setBlockedUserCrossSigningKey(
276 : bool blocked,
277 : String userId,
278 : String publicKey,
279 : );
280 :
281 : Future setVerifiedUserDeviceKey(
282 : bool verified,
283 : String userId,
284 : String deviceId,
285 : );
286 :
287 : Future setBlockedUserDeviceKey(
288 : bool blocked,
289 : String userId,
290 : String deviceId,
291 : );
292 :
293 : Future<List<Event>> getUnimportantRoomEventStatesForRoom(
294 : List<String> events,
295 : Room room,
296 : );
297 :
298 : Future<List<OlmSession>> getOlmSessions(
299 : String identityKey,
300 : String userId,
301 : );
302 :
303 : Future<Map<String, Map>> getAllOlmSessions();
304 :
305 : Future<List<OlmSession>> getOlmSessionsForDevices(
306 : List<String> identityKeys,
307 : String userId,
308 : );
309 :
310 : Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue();
311 :
312 : /// Please do `jsonEncode(content)` in your code to stay compatible with
313 : /// auto generated methods here.
314 : Future insertIntoToDeviceQueue(
315 : String type,
316 : String txnId,
317 : String content,
318 : );
319 :
320 : Future<List<String>> getLastSentMessageUserDeviceKey(
321 : String userId,
322 : String deviceId,
323 : );
324 :
325 : Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload();
326 :
327 : Future<void> addSeenDeviceId(
328 : String userId,
329 : String deviceId,
330 : String publicKeys,
331 : );
332 :
333 : Future<void> addSeenPublicKey(String publicKey, String deviceId);
334 :
335 : Future<String?> deviceIdSeen(userId, deviceId);
336 :
337 : Future<String?> publicKeySeen(String publicKey);
338 :
339 : Future<dynamic> close();
340 :
341 : Future<void> transaction(Future<void> Function() action);
342 :
343 : Future<String> exportDump();
344 :
345 : Future<bool> importDump(String export);
346 :
347 : Future<void> storePresence(String userId, CachedPresence presence);
348 :
349 : Future<CachedPresence?> getPresence(String userId);
350 :
351 : Future<void> storeWellKnown(DiscoveryInformation? discoveryInformation);
352 :
353 : Future<DiscoveryInformation?> getWellKnown();
354 :
355 : /// Deletes the whole database. The database needs to be created again after
356 : /// this.
357 : Future<void> delete();
358 : }
|