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