Line data Source code
1 : import 'package:enhanced_enum/enhanced_enum.dart';
2 :
3 : import 'package:matrix/matrix_api_lite/model/children_state.dart';
4 : import 'package:matrix/matrix_api_lite/model/matrix_event.dart';
5 : import 'package:matrix/matrix_api_lite/model/matrix_keys.dart';
6 :
7 : part 'model.g.dart';
8 :
9 : class _NameSource {
10 : final String source;
11 82 : const _NameSource(this.source);
12 : }
13 :
14 : ///
15 : @_NameSource('spec')
16 : class HomeserverInformation {
17 0 : HomeserverInformation({
18 : required this.baseUrl,
19 : });
20 :
21 4 : HomeserverInformation.fromJson(Map<String, Object?> json)
22 8 : : baseUrl = Uri.parse(json['base_url'] as String);
23 2 : Map<String, Object?> toJson() => {
24 2 : 'base_url': baseUrl.toString(),
25 : };
26 :
27 : /// The base URL for the homeserver for client-server connections.
28 : Uri baseUrl;
29 : }
30 :
31 : ///
32 : @_NameSource('spec')
33 : class IdentityServerInformation {
34 0 : IdentityServerInformation({
35 : required this.baseUrl,
36 : });
37 :
38 4 : IdentityServerInformation.fromJson(Map<String, Object?> json)
39 8 : : baseUrl = Uri.parse(json['base_url'] as String);
40 2 : Map<String, Object?> toJson() => {
41 2 : 'base_url': baseUrl.toString(),
42 : };
43 :
44 : /// The base URL for the identity server for client-server connections.
45 : Uri baseUrl;
46 : }
47 :
48 : /// Used by clients to determine the homeserver, identity server, and other
49 : /// optional components they should be interacting with.
50 : @_NameSource('spec')
51 : class DiscoveryInformation {
52 0 : DiscoveryInformation({
53 : required this.mHomeserver,
54 : this.mIdentityServer,
55 : this.additionalProperties = const {},
56 : });
57 :
58 4 : DiscoveryInformation.fromJson(Map<String, Object?> json)
59 4 : : mHomeserver = HomeserverInformation.fromJson(
60 4 : json['m.homeserver'] as Map<String, Object?>),
61 4 : mIdentityServer = ((v) => v != null
62 4 : ? IdentityServerInformation.fromJson(v as Map<String, Object?>)
63 8 : : null)(json['m.identity_server']),
64 8 : additionalProperties = Map.fromEntries(json.entries
65 4 : .where(
66 16 : (e) => !['m.homeserver', 'm.identity_server'].contains(e.key))
67 8 : .map((e) => MapEntry(e.key, e.value as Map<String, Object?>)));
68 1 : Map<String, Object?> toJson() {
69 1 : final mIdentityServer = this.mIdentityServer;
70 1 : return {
71 1 : ...additionalProperties,
72 3 : 'm.homeserver': mHomeserver.toJson(),
73 : if (mIdentityServer != null)
74 2 : 'm.identity_server': mIdentityServer.toJson(),
75 : };
76 : }
77 :
78 : /// Used by clients to discover homeserver information.
79 : HomeserverInformation mHomeserver;
80 :
81 : /// Used by clients to discover identity server information.
82 : IdentityServerInformation? mIdentityServer;
83 :
84 : Map<String, Map<String, Object?>> additionalProperties;
85 : }
86 :
87 : ///
88 : @_NameSource('spec')
89 : class PublicRoomsChunk {
90 0 : PublicRoomsChunk({
91 : this.avatarUrl,
92 : this.canonicalAlias,
93 : required this.guestCanJoin,
94 : this.joinRule,
95 : this.name,
96 : required this.numJoinedMembers,
97 : required this.roomId,
98 : this.roomType,
99 : this.topic,
100 : required this.worldReadable,
101 : });
102 :
103 0 : PublicRoomsChunk.fromJson(Map<String, Object?> json)
104 0 : : avatarUrl = ((v) =>
105 0 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
106 : canonicalAlias =
107 0 : ((v) => v != null ? v as String : null)(json['canonical_alias']),
108 0 : guestCanJoin = json['guest_can_join'] as bool,
109 0 : joinRule = ((v) => v != null ? v as String : null)(json['join_rule']),
110 0 : name = ((v) => v != null ? v as String : null)(json['name']),
111 0 : numJoinedMembers = json['num_joined_members'] as int,
112 0 : roomId = json['room_id'] as String,
113 0 : roomType = ((v) => v != null ? v as String : null)(json['room_type']),
114 0 : topic = ((v) => v != null ? v as String : null)(json['topic']),
115 0 : worldReadable = json['world_readable'] as bool;
116 0 : Map<String, Object?> toJson() {
117 0 : final avatarUrl = this.avatarUrl;
118 0 : final canonicalAlias = this.canonicalAlias;
119 0 : final joinRule = this.joinRule;
120 0 : final name = this.name;
121 0 : final roomType = this.roomType;
122 0 : final topic = this.topic;
123 0 : return {
124 0 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
125 0 : if (canonicalAlias != null) 'canonical_alias': canonicalAlias,
126 0 : 'guest_can_join': guestCanJoin,
127 0 : if (joinRule != null) 'join_rule': joinRule,
128 0 : if (name != null) 'name': name,
129 0 : 'num_joined_members': numJoinedMembers,
130 0 : 'room_id': roomId,
131 0 : if (roomType != null) 'room_type': roomType,
132 0 : if (topic != null) 'topic': topic,
133 0 : 'world_readable': worldReadable,
134 : };
135 : }
136 :
137 : /// The URL for the room's avatar, if one is set.
138 : Uri? avatarUrl;
139 :
140 : /// The canonical alias of the room, if any.
141 : String? canonicalAlias;
142 :
143 : /// Whether guest users may join the room and participate in it.
144 : /// If they can, they will be subject to ordinary power level
145 : /// rules like any other user.
146 : bool guestCanJoin;
147 :
148 : /// The room's join rule. When not present, the room is assumed to
149 : /// be `public`.
150 : String? joinRule;
151 :
152 : /// The name of the room, if any.
153 : String? name;
154 :
155 : /// The number of members joined to the room.
156 : int numJoinedMembers;
157 :
158 : /// The ID of the room.
159 : String roomId;
160 :
161 : /// The `type` of room (from [`m.room.create`](https://spec.matrix.org/unstable/client-server-api/#mroomcreate)), if any.
162 : String? roomType;
163 :
164 : /// The topic of the room, if any.
165 : String? topic;
166 :
167 : /// Whether the room may be viewed by guest users without joining.
168 : bool worldReadable;
169 : }
170 :
171 : ///
172 : @_NameSource('spec')
173 : class ChildRoomsChunk {
174 0 : ChildRoomsChunk({
175 : required this.childrenState,
176 : this.roomType,
177 : });
178 :
179 0 : ChildRoomsChunk.fromJson(Map<String, Object?> json)
180 0 : : childrenState = (json['children_state'] as List)
181 0 : .map((v) => ChildrenState.fromJson(v as Map<String, Object?>))
182 0 : .toList(),
183 0 : roomType = ((v) => v != null ? v as String : null)(json['room_type']);
184 0 : Map<String, Object?> toJson() {
185 0 : final roomType = this.roomType;
186 0 : return {
187 0 : 'children_state': childrenState.map((v) => v.toJson()).toList(),
188 0 : if (roomType != null) 'room_type': roomType,
189 : };
190 : }
191 :
192 : /// The [`m.space.child`](#mspacechild) events of the space-room, represented
193 : /// as [Stripped State Events](#stripped-state) with an added `origin_server_ts` key.
194 : ///
195 : /// If the room is not a space-room, this should be empty.
196 : List<ChildrenState> childrenState;
197 :
198 : /// The `type` of room (from [`m.room.create`](https://spec.matrix.org/unstable/client-server-api/#mroomcreate)), if any.
199 : String? roomType;
200 : }
201 :
202 : ///
203 : @_NameSource('rule override generated')
204 : class SpaceRoomsChunk implements PublicRoomsChunk, ChildRoomsChunk {
205 0 : SpaceRoomsChunk({
206 : this.avatarUrl,
207 : this.canonicalAlias,
208 : required this.guestCanJoin,
209 : this.joinRule,
210 : this.name,
211 : required this.numJoinedMembers,
212 : required this.roomId,
213 : this.roomType,
214 : this.topic,
215 : required this.worldReadable,
216 : required this.childrenState,
217 : });
218 :
219 0 : SpaceRoomsChunk.fromJson(Map<String, Object?> json)
220 0 : : avatarUrl = ((v) =>
221 0 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
222 : canonicalAlias =
223 0 : ((v) => v != null ? v as String : null)(json['canonical_alias']),
224 0 : guestCanJoin = json['guest_can_join'] as bool,
225 0 : joinRule = ((v) => v != null ? v as String : null)(json['join_rule']),
226 0 : name = ((v) => v != null ? v as String : null)(json['name']),
227 0 : numJoinedMembers = json['num_joined_members'] as int,
228 0 : roomId = json['room_id'] as String,
229 0 : roomType = ((v) => v != null ? v as String : null)(json['room_type']),
230 0 : topic = ((v) => v != null ? v as String : null)(json['topic']),
231 0 : worldReadable = json['world_readable'] as bool,
232 0 : childrenState = (json['children_state'] as List)
233 0 : .map((v) => ChildrenState.fromJson(v as Map<String, Object?>))
234 0 : .toList();
235 0 : @override
236 : Map<String, Object?> toJson() {
237 0 : final avatarUrl = this.avatarUrl;
238 0 : final canonicalAlias = this.canonicalAlias;
239 0 : final joinRule = this.joinRule;
240 0 : final name = this.name;
241 0 : final roomType = this.roomType;
242 0 : final topic = this.topic;
243 0 : return {
244 0 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
245 0 : if (canonicalAlias != null) 'canonical_alias': canonicalAlias,
246 0 : 'guest_can_join': guestCanJoin,
247 0 : if (joinRule != null) 'join_rule': joinRule,
248 0 : if (name != null) 'name': name,
249 0 : 'num_joined_members': numJoinedMembers,
250 0 : 'room_id': roomId,
251 0 : if (roomType != null) 'room_type': roomType,
252 0 : if (topic != null) 'topic': topic,
253 0 : 'world_readable': worldReadable,
254 0 : 'children_state': childrenState.map((v) => v.toJson()).toList(),
255 : };
256 : }
257 :
258 : /// The URL for the room's avatar, if one is set.
259 : @override
260 : Uri? avatarUrl;
261 :
262 : /// The canonical alias of the room, if any.
263 : @override
264 : String? canonicalAlias;
265 :
266 : /// Whether guest users may join the room and participate in it.
267 : /// If they can, they will be subject to ordinary power level
268 : /// rules like any other user.
269 : @override
270 : bool guestCanJoin;
271 :
272 : /// The room's join rule. When not present, the room is assumed to
273 : /// be `public`.
274 : @override
275 : String? joinRule;
276 :
277 : /// The name of the room, if any.
278 : @override
279 : String? name;
280 :
281 : /// The number of members joined to the room.
282 : @override
283 : int numJoinedMembers;
284 :
285 : /// The ID of the room.
286 : @override
287 : String roomId;
288 :
289 : /// The `type` of room (from [`m.room.create`](https://spec.matrix.org/unstable/client-server-api/#mroomcreate)), if any.
290 : @override
291 : String? roomType;
292 :
293 : /// The topic of the room, if any.
294 : @override
295 : String? topic;
296 :
297 : /// Whether the room may be viewed by guest users without joining.
298 : @override
299 : bool worldReadable;
300 :
301 : /// The [`m.space.child`](#mspacechild) events of the space-room, represented
302 : /// as [Stripped State Events](#stripped-state) with an added `origin_server_ts` key.
303 : ///
304 : /// If the room is not a space-room, this should be empty.
305 : @override
306 : List<ChildrenState> childrenState;
307 : }
308 :
309 : ///
310 : @_NameSource('generated')
311 : class GetSpaceHierarchyResponse {
312 0 : GetSpaceHierarchyResponse({
313 : this.nextBatch,
314 : required this.rooms,
315 : });
316 :
317 0 : GetSpaceHierarchyResponse.fromJson(Map<String, Object?> json)
318 0 : : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
319 0 : rooms = (json['rooms'] as List)
320 0 : .map((v) => SpaceRoomsChunk.fromJson(v as Map<String, Object?>))
321 0 : .toList();
322 0 : Map<String, Object?> toJson() {
323 0 : final nextBatch = this.nextBatch;
324 0 : return {
325 0 : if (nextBatch != null) 'next_batch': nextBatch,
326 0 : 'rooms': rooms.map((v) => v.toJson()).toList(),
327 : };
328 : }
329 :
330 : /// A token to supply to `from` to keep paginating the responses. Not present when there are
331 : /// no further results.
332 : String? nextBatch;
333 :
334 : /// The rooms for the current page, with the current filters.
335 : List<SpaceRoomsChunk> rooms;
336 : }
337 :
338 : ///
339 : @_NameSource('rule override generated')
340 : @EnhancedEnum()
341 : enum Direction {
342 : @EnhancedEnumValue(name: 'b')
343 : b,
344 : @EnhancedEnumValue(name: 'f')
345 : f
346 : }
347 :
348 : ///
349 : @_NameSource('generated')
350 : class GetRelatingEventsResponse {
351 0 : GetRelatingEventsResponse({
352 : required this.chunk,
353 : this.nextBatch,
354 : this.prevBatch,
355 : });
356 :
357 0 : GetRelatingEventsResponse.fromJson(Map<String, Object?> json)
358 0 : : chunk = (json['chunk'] as List)
359 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
360 0 : .toList(),
361 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
362 0 : prevBatch = ((v) => v != null ? v as String : null)(json['prev_batch']);
363 0 : Map<String, Object?> toJson() {
364 0 : final nextBatch = this.nextBatch;
365 0 : final prevBatch = this.prevBatch;
366 0 : return {
367 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
368 0 : if (nextBatch != null) 'next_batch': nextBatch,
369 0 : if (prevBatch != null) 'prev_batch': prevBatch,
370 : };
371 : }
372 :
373 : /// The child events of the requested event, ordered topologically most-recent first.
374 : List<MatrixEvent> chunk;
375 :
376 : /// An opaque string representing a pagination token. The absence of this token
377 : /// means there are no more results to fetch and the client should stop paginating.
378 : String? nextBatch;
379 :
380 : /// An opaque string representing a pagination token. The absence of this token
381 : /// means this is the start of the result set, i.e. this is the first batch/page.
382 : String? prevBatch;
383 : }
384 :
385 : ///
386 : @_NameSource('generated')
387 : class GetRelatingEventsWithRelTypeResponse {
388 0 : GetRelatingEventsWithRelTypeResponse({
389 : required this.chunk,
390 : this.nextBatch,
391 : this.prevBatch,
392 : });
393 :
394 0 : GetRelatingEventsWithRelTypeResponse.fromJson(Map<String, Object?> json)
395 0 : : chunk = (json['chunk'] as List)
396 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
397 0 : .toList(),
398 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
399 0 : prevBatch = ((v) => v != null ? v as String : null)(json['prev_batch']);
400 0 : Map<String, Object?> toJson() {
401 0 : final nextBatch = this.nextBatch;
402 0 : final prevBatch = this.prevBatch;
403 0 : return {
404 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
405 0 : if (nextBatch != null) 'next_batch': nextBatch,
406 0 : if (prevBatch != null) 'prev_batch': prevBatch,
407 : };
408 : }
409 :
410 : /// The child events of the requested event, ordered topologically
411 : /// most-recent first. The events returned will match the `relType`
412 : /// supplied in the URL.
413 : List<MatrixEvent> chunk;
414 :
415 : /// An opaque string representing a pagination token. The absence of this token
416 : /// means there are no more results to fetch and the client should stop paginating.
417 : String? nextBatch;
418 :
419 : /// An opaque string representing a pagination token. The absence of this token
420 : /// means this is the start of the result set, i.e. this is the first batch/page.
421 : String? prevBatch;
422 : }
423 :
424 : ///
425 : @_NameSource('generated')
426 : class GetRelatingEventsWithRelTypeAndEventTypeResponse {
427 0 : GetRelatingEventsWithRelTypeAndEventTypeResponse({
428 : required this.chunk,
429 : this.nextBatch,
430 : this.prevBatch,
431 : });
432 :
433 0 : GetRelatingEventsWithRelTypeAndEventTypeResponse.fromJson(
434 : Map<String, Object?> json)
435 0 : : chunk = (json['chunk'] as List)
436 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
437 0 : .toList(),
438 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
439 0 : prevBatch = ((v) => v != null ? v as String : null)(json['prev_batch']);
440 0 : Map<String, Object?> toJson() {
441 0 : final nextBatch = this.nextBatch;
442 0 : final prevBatch = this.prevBatch;
443 0 : return {
444 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
445 0 : if (nextBatch != null) 'next_batch': nextBatch,
446 0 : if (prevBatch != null) 'prev_batch': prevBatch,
447 : };
448 : }
449 :
450 : /// The child events of the requested event, ordered topologically most-recent
451 : /// first. The events returned will match the `relType` and `eventType` supplied
452 : /// in the URL.
453 : List<MatrixEvent> chunk;
454 :
455 : /// An opaque string representing a pagination token. The absence of this token
456 : /// means there are no more results to fetch and the client should stop paginating.
457 : String? nextBatch;
458 :
459 : /// An opaque string representing a pagination token. The absence of this token
460 : /// means this is the start of the result set, i.e. this is the first batch/page.
461 : String? prevBatch;
462 : }
463 :
464 : ///
465 : @_NameSource('generated')
466 : @EnhancedEnum()
467 : enum Include {
468 : @EnhancedEnumValue(name: 'all')
469 : all,
470 : @EnhancedEnumValue(name: 'participated')
471 : participated
472 : }
473 :
474 : ///
475 : @_NameSource('generated')
476 : class GetThreadRootsResponse {
477 0 : GetThreadRootsResponse({
478 : required this.chunk,
479 : this.nextBatch,
480 : });
481 :
482 0 : GetThreadRootsResponse.fromJson(Map<String, Object?> json)
483 0 : : chunk = (json['chunk'] as List)
484 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
485 0 : .toList(),
486 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']);
487 0 : Map<String, Object?> toJson() {
488 0 : final nextBatch = this.nextBatch;
489 0 : return {
490 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
491 0 : if (nextBatch != null) 'next_batch': nextBatch,
492 : };
493 : }
494 :
495 : /// The thread roots, ordered by the `latest_event` in each event's aggregation bundle. All events
496 : /// returned include bundled [aggregations](https://spec.matrix.org/unstable/client-server-api/#aggregations).
497 : ///
498 : /// If the thread root event was sent by an [ignored user](https://spec.matrix.org/unstable/client-server-api/#ignoring-users), the
499 : /// event is returned redacted to the caller. This is to simulate the same behaviour of a client doing
500 : /// aggregation locally on the thread.
501 : List<MatrixEvent> chunk;
502 :
503 : /// A token to supply to `from` to keep paginating the responses. Not present when there are
504 : /// no further results.
505 : String? nextBatch;
506 : }
507 :
508 : ///
509 : @_NameSource('generated')
510 : class GetEventByTimestampResponse {
511 0 : GetEventByTimestampResponse({
512 : required this.eventId,
513 : required this.originServerTs,
514 : });
515 :
516 0 : GetEventByTimestampResponse.fromJson(Map<String, Object?> json)
517 0 : : eventId = json['event_id'] as String,
518 0 : originServerTs = json['origin_server_ts'] as int;
519 0 : Map<String, Object?> toJson() => {
520 0 : 'event_id': eventId,
521 0 : 'origin_server_ts': originServerTs,
522 : };
523 :
524 : /// The ID of the event found
525 : String eventId;
526 :
527 : /// The event's timestamp, in milliseconds since the Unix epoch.
528 : /// This makes it easy to do a quick comparison to see if the
529 : /// `event_id` fetched is too far out of range to be useful for your
530 : /// use case.
531 : int originServerTs;
532 : }
533 :
534 : ///
535 : @_NameSource('rule override generated')
536 : @EnhancedEnum()
537 : enum ThirdPartyIdentifierMedium {
538 : @EnhancedEnumValue(name: 'email')
539 : email,
540 : @EnhancedEnumValue(name: 'msisdn')
541 : msisdn
542 : }
543 :
544 : ///
545 : @_NameSource('spec')
546 : class ThirdPartyIdentifier {
547 0 : ThirdPartyIdentifier({
548 : required this.addedAt,
549 : required this.address,
550 : required this.medium,
551 : required this.validatedAt,
552 : });
553 :
554 0 : ThirdPartyIdentifier.fromJson(Map<String, Object?> json)
555 0 : : addedAt = json['added_at'] as int,
556 0 : address = json['address'] as String,
557 : medium = ThirdPartyIdentifierMedium.values
558 0 : .fromString(json['medium'] as String)!,
559 0 : validatedAt = json['validated_at'] as int;
560 0 : Map<String, Object?> toJson() => {
561 0 : 'added_at': addedAt,
562 0 : 'address': address,
563 0 : 'medium': medium.name,
564 0 : 'validated_at': validatedAt,
565 : };
566 :
567 : /// The timestamp, in milliseconds, when the homeserver associated the third party identifier with the user.
568 : int addedAt;
569 :
570 : /// The third party identifier address.
571 : String address;
572 :
573 : /// The medium of the third party identifier.
574 : ThirdPartyIdentifierMedium medium;
575 :
576 : /// The timestamp, in milliseconds, when the identifier was
577 : /// validated by the identity server.
578 : int validatedAt;
579 : }
580 :
581 : ///
582 : @_NameSource('spec')
583 : class ThreePidCredentials {
584 0 : ThreePidCredentials({
585 : required this.clientSecret,
586 : required this.idAccessToken,
587 : required this.idServer,
588 : required this.sid,
589 : });
590 :
591 0 : ThreePidCredentials.fromJson(Map<String, Object?> json)
592 0 : : clientSecret = json['client_secret'] as String,
593 0 : idAccessToken = json['id_access_token'] as String,
594 0 : idServer = json['id_server'] as String,
595 0 : sid = json['sid'] as String;
596 0 : Map<String, Object?> toJson() => {
597 0 : 'client_secret': clientSecret,
598 0 : 'id_access_token': idAccessToken,
599 0 : 'id_server': idServer,
600 0 : 'sid': sid,
601 : };
602 :
603 : /// The client secret used in the session with the identity server.
604 : String clientSecret;
605 :
606 : /// An access token previously registered with the identity server. Servers
607 : /// can treat this as optional to distinguish between r0.5-compatible clients
608 : /// and this specification version.
609 : String idAccessToken;
610 :
611 : /// The identity server to use.
612 : String idServer;
613 :
614 : /// The session identifier given by the identity server.
615 : String sid;
616 : }
617 :
618 : ///
619 : @_NameSource('generated')
620 : @EnhancedEnum()
621 : enum IdServerUnbindResult {
622 : @EnhancedEnumValue(name: 'no-support')
623 : noSupport,
624 : @EnhancedEnumValue(name: 'success')
625 : success
626 : }
627 :
628 : ///
629 : @_NameSource('spec')
630 : class RequestTokenResponse {
631 0 : RequestTokenResponse({
632 : required this.sid,
633 : this.submitUrl,
634 : });
635 :
636 0 : RequestTokenResponse.fromJson(Map<String, Object?> json)
637 0 : : sid = json['sid'] as String,
638 0 : submitUrl = ((v) =>
639 0 : v != null ? Uri.parse(v as String) : null)(json['submit_url']);
640 0 : Map<String, Object?> toJson() {
641 0 : final submitUrl = this.submitUrl;
642 0 : return {
643 0 : 'sid': sid,
644 0 : if (submitUrl != null) 'submit_url': submitUrl.toString(),
645 : };
646 : }
647 :
648 : /// The session ID. Session IDs are opaque strings that must consist entirely
649 : /// of the characters `[0-9a-zA-Z.=_-]`. Their length must not exceed 255
650 : /// characters and they must not be empty.
651 : String sid;
652 :
653 : /// An optional field containing a URL where the client must submit the
654 : /// validation token to, with identical parameters to the Identity Service
655 : /// API's `POST /validate/email/submitToken` endpoint (without the requirement
656 : /// for an access token). The homeserver must send this token to the user (if
657 : /// applicable), who should then be prompted to provide it to the client.
658 : ///
659 : /// If this field is not present, the client can assume that verification
660 : /// will happen without the client's involvement provided the homeserver
661 : /// advertises this specification version in the `/versions` response
662 : /// (ie: r0.5.0).
663 : Uri? submitUrl;
664 : }
665 :
666 : ///
667 : @_NameSource('rule override generated')
668 : class TokenOwnerInfo {
669 0 : TokenOwnerInfo({
670 : this.deviceId,
671 : this.isGuest,
672 : required this.userId,
673 : });
674 :
675 0 : TokenOwnerInfo.fromJson(Map<String, Object?> json)
676 0 : : deviceId = ((v) => v != null ? v as String : null)(json['device_id']),
677 0 : isGuest = ((v) => v != null ? v as bool : null)(json['is_guest']),
678 0 : userId = json['user_id'] as String;
679 0 : Map<String, Object?> toJson() {
680 0 : final deviceId = this.deviceId;
681 0 : final isGuest = this.isGuest;
682 0 : return {
683 0 : if (deviceId != null) 'device_id': deviceId,
684 0 : if (isGuest != null) 'is_guest': isGuest,
685 0 : 'user_id': userId,
686 : };
687 : }
688 :
689 : /// Device ID associated with the access token. If no device
690 : /// is associated with the access token (such as in the case
691 : /// of application services) then this field can be omitted.
692 : /// Otherwise this is required.
693 : String? deviceId;
694 :
695 : /// When `true`, the user is a [Guest User](#guest-access). When
696 : /// not present or `false`, the user is presumed to be a non-guest
697 : /// user.
698 : bool? isGuest;
699 :
700 : /// The user ID that owns the access token.
701 : String userId;
702 : }
703 :
704 : ///
705 : @_NameSource('spec')
706 : class ConnectionInfo {
707 0 : ConnectionInfo({
708 : this.ip,
709 : this.lastSeen,
710 : this.userAgent,
711 : });
712 :
713 0 : ConnectionInfo.fromJson(Map<String, Object?> json)
714 0 : : ip = ((v) => v != null ? v as String : null)(json['ip']),
715 0 : lastSeen = ((v) => v != null ? v as int : null)(json['last_seen']),
716 0 : userAgent = ((v) => v != null ? v as String : null)(json['user_agent']);
717 0 : Map<String, Object?> toJson() {
718 0 : final ip = this.ip;
719 0 : final lastSeen = this.lastSeen;
720 0 : final userAgent = this.userAgent;
721 0 : return {
722 0 : if (ip != null) 'ip': ip,
723 0 : if (lastSeen != null) 'last_seen': lastSeen,
724 0 : if (userAgent != null) 'user_agent': userAgent,
725 : };
726 : }
727 :
728 : /// Most recently seen IP address of the session.
729 : String? ip;
730 :
731 : /// Unix timestamp that the session was last active.
732 : int? lastSeen;
733 :
734 : /// User agent string last seen in the session.
735 : String? userAgent;
736 : }
737 :
738 : ///
739 : @_NameSource('spec')
740 : class SessionInfo {
741 0 : SessionInfo({
742 : this.connections,
743 : });
744 :
745 0 : SessionInfo.fromJson(Map<String, Object?> json)
746 0 : : connections = ((v) => v != null
747 : ? (v as List)
748 0 : .map((v) => ConnectionInfo.fromJson(v as Map<String, Object?>))
749 0 : .toList()
750 0 : : null)(json['connections']);
751 0 : Map<String, Object?> toJson() {
752 0 : final connections = this.connections;
753 0 : return {
754 : if (connections != null)
755 0 : 'connections': connections.map((v) => v.toJson()).toList(),
756 : };
757 : }
758 :
759 : /// Information particular connections in the session.
760 : List<ConnectionInfo>? connections;
761 : }
762 :
763 : ///
764 : @_NameSource('spec')
765 : class DeviceInfo {
766 0 : DeviceInfo({
767 : this.sessions,
768 : });
769 :
770 0 : DeviceInfo.fromJson(Map<String, Object?> json)
771 0 : : sessions = ((v) => v != null
772 : ? (v as List)
773 0 : .map((v) => SessionInfo.fromJson(v as Map<String, Object?>))
774 0 : .toList()
775 0 : : null)(json['sessions']);
776 0 : Map<String, Object?> toJson() {
777 0 : final sessions = this.sessions;
778 0 : return {
779 : if (sessions != null)
780 0 : 'sessions': sessions.map((v) => v.toJson()).toList(),
781 : };
782 : }
783 :
784 : /// A user's sessions (i.e. what they did with an access token from one login).
785 : List<SessionInfo>? sessions;
786 : }
787 :
788 : ///
789 : @_NameSource('rule override generated')
790 : class WhoIsInfo {
791 0 : WhoIsInfo({
792 : this.devices,
793 : this.userId,
794 : });
795 :
796 0 : WhoIsInfo.fromJson(Map<String, Object?> json)
797 0 : : devices = ((v) => v != null
798 0 : ? (v as Map<String, Object?>).map((k, v) =>
799 0 : MapEntry(k, DeviceInfo.fromJson(v as Map<String, Object?>)))
800 0 : : null)(json['devices']),
801 0 : userId = ((v) => v != null ? v as String : null)(json['user_id']);
802 0 : Map<String, Object?> toJson() {
803 0 : final devices = this.devices;
804 0 : final userId = this.userId;
805 0 : return {
806 : if (devices != null)
807 0 : 'devices': devices.map((k, v) => MapEntry(k, v.toJson())),
808 0 : if (userId != null) 'user_id': userId,
809 : };
810 : }
811 :
812 : /// Each key is an identifier for one of the user's devices.
813 : Map<String, DeviceInfo>? devices;
814 :
815 : /// The Matrix user ID of the user.
816 : String? userId;
817 : }
818 :
819 : ///
820 : @_NameSource('spec')
821 : class ChangePasswordCapability {
822 0 : ChangePasswordCapability({
823 : required this.enabled,
824 : });
825 :
826 0 : ChangePasswordCapability.fromJson(Map<String, Object?> json)
827 0 : : enabled = json['enabled'] as bool;
828 0 : Map<String, Object?> toJson() => {
829 0 : 'enabled': enabled,
830 : };
831 :
832 : /// True if the user can change their password, false otherwise.
833 : bool enabled;
834 : }
835 :
836 : /// The stability of the room version.
837 : @_NameSource('rule override generated')
838 : @EnhancedEnum()
839 : enum RoomVersionAvailable {
840 : @EnhancedEnumValue(name: 'stable')
841 : stable,
842 : @EnhancedEnumValue(name: 'unstable')
843 : unstable
844 : }
845 :
846 : ///
847 : @_NameSource('spec')
848 : class RoomVersionsCapability {
849 0 : RoomVersionsCapability({
850 : required this.available,
851 : required this.default$,
852 : });
853 :
854 0 : RoomVersionsCapability.fromJson(Map<String, Object?> json)
855 0 : : available = (json['available'] as Map<String, Object?>).map((k, v) =>
856 0 : MapEntry(k, RoomVersionAvailable.values.fromString(v as String)!)),
857 0 : default$ = json['default'] as String;
858 0 : Map<String, Object?> toJson() => {
859 0 : 'available': available.map((k, v) => MapEntry(k, v.name)),
860 0 : 'default': default$,
861 : };
862 :
863 : /// A detailed description of the room versions the server supports.
864 : Map<String, RoomVersionAvailable> available;
865 :
866 : /// The default room version the server is using for new rooms.
867 : String default$;
868 : }
869 :
870 : ///
871 : @_NameSource('spec')
872 : class Capabilities {
873 0 : Capabilities({
874 : this.mChangePassword,
875 : this.mRoomVersions,
876 : this.additionalProperties = const {},
877 : });
878 :
879 0 : Capabilities.fromJson(Map<String, Object?> json)
880 0 : : mChangePassword = ((v) => v != null
881 0 : ? ChangePasswordCapability.fromJson(v as Map<String, Object?>)
882 0 : : null)(json['m.change_password']),
883 0 : mRoomVersions = ((v) => v != null
884 0 : ? RoomVersionsCapability.fromJson(v as Map<String, Object?>)
885 0 : : null)(json['m.room_versions']),
886 0 : additionalProperties = Map.fromEntries(json.entries
887 0 : .where((e) =>
888 0 : !['m.change_password', 'm.room_versions'].contains(e.key))
889 0 : .map((e) => MapEntry(e.key, e.value as Map<String, Object?>)));
890 0 : Map<String, Object?> toJson() {
891 0 : final mChangePassword = this.mChangePassword;
892 0 : final mRoomVersions = this.mRoomVersions;
893 0 : return {
894 0 : ...additionalProperties,
895 : if (mChangePassword != null)
896 0 : 'm.change_password': mChangePassword.toJson(),
897 0 : if (mRoomVersions != null) 'm.room_versions': mRoomVersions.toJson(),
898 : };
899 : }
900 :
901 : /// Capability to indicate if the user can change their password.
902 : ChangePasswordCapability? mChangePassword;
903 :
904 : /// The room versions the server supports.
905 : RoomVersionsCapability? mRoomVersions;
906 :
907 : Map<String, Map<String, Object?>> additionalProperties;
908 : }
909 :
910 : ///
911 : @_NameSource('spec')
912 : class StateEvent {
913 2 : StateEvent({
914 : required this.content,
915 : this.stateKey,
916 : required this.type,
917 : });
918 :
919 0 : StateEvent.fromJson(Map<String, Object?> json)
920 0 : : content = json['content'] as Map<String, Object?>,
921 0 : stateKey = ((v) => v != null ? v as String : null)(json['state_key']),
922 0 : type = json['type'] as String;
923 2 : Map<String, Object?> toJson() {
924 2 : final stateKey = this.stateKey;
925 2 : return {
926 4 : 'content': content,
927 0 : if (stateKey != null) 'state_key': stateKey,
928 4 : 'type': type,
929 : };
930 : }
931 :
932 : /// The content of the event.
933 : Map<String, Object?> content;
934 :
935 : /// The state_key of the state event. Defaults to an empty string.
936 : String? stateKey;
937 :
938 : /// The type of event to send.
939 : String type;
940 : }
941 :
942 : ///
943 : @_NameSource('spec')
944 : class Invite3pid {
945 0 : Invite3pid({
946 : required this.address,
947 : required this.idAccessToken,
948 : required this.idServer,
949 : required this.medium,
950 : });
951 :
952 0 : Invite3pid.fromJson(Map<String, Object?> json)
953 0 : : address = json['address'] as String,
954 0 : idAccessToken = json['id_access_token'] as String,
955 0 : idServer = json['id_server'] as String,
956 0 : medium = json['medium'] as String;
957 0 : Map<String, Object?> toJson() => {
958 0 : 'address': address,
959 0 : 'id_access_token': idAccessToken,
960 0 : 'id_server': idServer,
961 0 : 'medium': medium,
962 : };
963 :
964 : /// The invitee's third party identifier.
965 : String address;
966 :
967 : /// An access token previously registered with the identity server. Servers
968 : /// can treat this as optional to distinguish between r0.5-compatible clients
969 : /// and this specification version.
970 : String idAccessToken;
971 :
972 : /// The hostname+port of the identity server which should be used for third party identifier lookups.
973 : String idServer;
974 :
975 : /// The kind of address being passed in the address field, for example `email`
976 : /// (see [the list of recognised values](https://spec.matrix.org/unstable/appendices/#3pid-types)).
977 : String medium;
978 : }
979 :
980 : ///
981 : @_NameSource('rule override generated')
982 : @EnhancedEnum()
983 : enum CreateRoomPreset {
984 : @EnhancedEnumValue(name: 'private_chat')
985 : privateChat,
986 : @EnhancedEnumValue(name: 'public_chat')
987 : publicChat,
988 : @EnhancedEnumValue(name: 'trusted_private_chat')
989 : trustedPrivateChat
990 : }
991 :
992 : ///
993 : @_NameSource('generated')
994 : @EnhancedEnum()
995 : enum Visibility {
996 : @EnhancedEnumValue(name: 'private')
997 : private,
998 : @EnhancedEnumValue(name: 'public')
999 : public
1000 : }
1001 :
1002 : /// A client device
1003 : @_NameSource('spec')
1004 : class Device {
1005 0 : Device({
1006 : required this.deviceId,
1007 : this.displayName,
1008 : this.lastSeenIp,
1009 : this.lastSeenTs,
1010 : });
1011 :
1012 0 : Device.fromJson(Map<String, Object?> json)
1013 0 : : deviceId = json['device_id'] as String,
1014 : displayName =
1015 0 : ((v) => v != null ? v as String : null)(json['display_name']),
1016 : lastSeenIp =
1017 0 : ((v) => v != null ? v as String : null)(json['last_seen_ip']),
1018 0 : lastSeenTs = ((v) => v != null ? v as int : null)(json['last_seen_ts']);
1019 0 : Map<String, Object?> toJson() {
1020 0 : final displayName = this.displayName;
1021 0 : final lastSeenIp = this.lastSeenIp;
1022 0 : final lastSeenTs = this.lastSeenTs;
1023 0 : return {
1024 0 : 'device_id': deviceId,
1025 0 : if (displayName != null) 'display_name': displayName,
1026 0 : if (lastSeenIp != null) 'last_seen_ip': lastSeenIp,
1027 0 : if (lastSeenTs != null) 'last_seen_ts': lastSeenTs,
1028 : };
1029 : }
1030 :
1031 : /// Identifier of this device.
1032 : String deviceId;
1033 :
1034 : /// Display name set by the user for this device. Absent if no name has been
1035 : /// set.
1036 : String? displayName;
1037 :
1038 : /// The IP address where this device was last seen. (May be a few minutes out
1039 : /// of date, for efficiency reasons).
1040 : String? lastSeenIp;
1041 :
1042 : /// The timestamp (in milliseconds since the unix epoch) when this devices
1043 : /// was last seen. (May be a few minutes out of date, for efficiency
1044 : /// reasons).
1045 : int? lastSeenTs;
1046 : }
1047 :
1048 : ///
1049 : @_NameSource('generated')
1050 : class GetRoomIdByAliasResponse {
1051 0 : GetRoomIdByAliasResponse({
1052 : this.roomId,
1053 : this.servers,
1054 : });
1055 :
1056 0 : GetRoomIdByAliasResponse.fromJson(Map<String, Object?> json)
1057 0 : : roomId = ((v) => v != null ? v as String : null)(json['room_id']),
1058 0 : servers = ((v) => v != null
1059 0 : ? (v as List).map((v) => v as String).toList()
1060 0 : : null)(json['servers']);
1061 0 : Map<String, Object?> toJson() {
1062 0 : final roomId = this.roomId;
1063 0 : final servers = this.servers;
1064 0 : return {
1065 0 : if (roomId != null) 'room_id': roomId,
1066 0 : if (servers != null) 'servers': servers.map((v) => v).toList(),
1067 : };
1068 : }
1069 :
1070 : /// The room ID for this room alias.
1071 : String? roomId;
1072 :
1073 : /// A list of servers that are aware of this room alias.
1074 : List<String>? servers;
1075 : }
1076 :
1077 : ///
1078 : @_NameSource('generated')
1079 : class GetEventsResponse {
1080 0 : GetEventsResponse({
1081 : this.chunk,
1082 : this.end,
1083 : this.start,
1084 : });
1085 :
1086 0 : GetEventsResponse.fromJson(Map<String, Object?> json)
1087 0 : : chunk = ((v) => v != null
1088 : ? (v as List)
1089 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
1090 0 : .toList()
1091 0 : : null)(json['chunk']),
1092 0 : end = ((v) => v != null ? v as String : null)(json['end']),
1093 0 : start = ((v) => v != null ? v as String : null)(json['start']);
1094 0 : Map<String, Object?> toJson() {
1095 0 : final chunk = this.chunk;
1096 0 : final end = this.end;
1097 0 : final start = this.start;
1098 0 : return {
1099 0 : if (chunk != null) 'chunk': chunk.map((v) => v.toJson()).toList(),
1100 0 : if (end != null) 'end': end,
1101 0 : if (start != null) 'start': start,
1102 : };
1103 : }
1104 :
1105 : /// An array of events.
1106 : List<MatrixEvent>? chunk;
1107 :
1108 : /// A token which correlates to the end of `chunk`. This
1109 : /// token should be used in the next request to `/events`.
1110 : String? end;
1111 :
1112 : /// A token which correlates to the start of `chunk`. This
1113 : /// is usually the same token supplied to `from=`.
1114 : String? start;
1115 : }
1116 :
1117 : ///
1118 : @_NameSource('generated')
1119 : class PeekEventsResponse {
1120 0 : PeekEventsResponse({
1121 : this.chunk,
1122 : this.end,
1123 : this.start,
1124 : });
1125 :
1126 0 : PeekEventsResponse.fromJson(Map<String, Object?> json)
1127 0 : : chunk = ((v) => v != null
1128 : ? (v as List)
1129 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
1130 0 : .toList()
1131 0 : : null)(json['chunk']),
1132 0 : end = ((v) => v != null ? v as String : null)(json['end']),
1133 0 : start = ((v) => v != null ? v as String : null)(json['start']);
1134 0 : Map<String, Object?> toJson() {
1135 0 : final chunk = this.chunk;
1136 0 : final end = this.end;
1137 0 : final start = this.start;
1138 0 : return {
1139 0 : if (chunk != null) 'chunk': chunk.map((v) => v.toJson()).toList(),
1140 0 : if (end != null) 'end': end,
1141 0 : if (start != null) 'start': start,
1142 : };
1143 : }
1144 :
1145 : /// An array of events.
1146 : List<MatrixEvent>? chunk;
1147 :
1148 : /// A token which correlates to the last value in `chunk`. This
1149 : /// token should be used in the next request to `/events`.
1150 : String? end;
1151 :
1152 : /// A token which correlates to the first value in `chunk`. This
1153 : /// is usually the same token supplied to `from=`.
1154 : String? start;
1155 : }
1156 :
1157 : /// A signature of an `m.third_party_invite` token to prove that this user
1158 : /// owns a third party identity which has been invited to the room.
1159 : @_NameSource('spec')
1160 : class ThirdPartySigned {
1161 0 : ThirdPartySigned({
1162 : required this.mxid,
1163 : required this.sender,
1164 : required this.signatures,
1165 : required this.token,
1166 : });
1167 :
1168 0 : ThirdPartySigned.fromJson(Map<String, Object?> json)
1169 0 : : mxid = json['mxid'] as String,
1170 0 : sender = json['sender'] as String,
1171 0 : signatures = (json['signatures'] as Map<String, Object?>).map((k, v) =>
1172 0 : MapEntry(
1173 : k,
1174 : (v as Map<String, Object?>)
1175 0 : .map((k, v) => MapEntry(k, v as String)))),
1176 0 : token = json['token'] as String;
1177 0 : Map<String, Object?> toJson() => {
1178 0 : 'mxid': mxid,
1179 0 : 'sender': sender,
1180 0 : 'signatures': signatures
1181 0 : .map((k, v) => MapEntry(k, v.map((k, v) => MapEntry(k, v)))),
1182 0 : 'token': token,
1183 : };
1184 :
1185 : /// The Matrix ID of the invitee.
1186 : String mxid;
1187 :
1188 : /// The Matrix ID of the user who issued the invite.
1189 : String sender;
1190 :
1191 : /// A signatures object containing a signature of the entire signed object.
1192 : Map<String, Map<String, String>> signatures;
1193 :
1194 : /// The state key of the m.third_party_invite event.
1195 : String token;
1196 : }
1197 :
1198 : ///
1199 : @_NameSource('generated')
1200 : class GetKeysChangesResponse {
1201 0 : GetKeysChangesResponse({
1202 : this.changed,
1203 : this.left,
1204 : });
1205 :
1206 0 : GetKeysChangesResponse.fromJson(Map<String, Object?> json)
1207 0 : : changed = ((v) => v != null
1208 0 : ? (v as List).map((v) => v as String).toList()
1209 0 : : null)(json['changed']),
1210 0 : left = ((v) => v != null
1211 0 : ? (v as List).map((v) => v as String).toList()
1212 0 : : null)(json['left']);
1213 0 : Map<String, Object?> toJson() {
1214 0 : final changed = this.changed;
1215 0 : final left = this.left;
1216 0 : return {
1217 0 : if (changed != null) 'changed': changed.map((v) => v).toList(),
1218 0 : if (left != null) 'left': left.map((v) => v).toList(),
1219 : };
1220 : }
1221 :
1222 : /// The Matrix User IDs of all users who updated their device
1223 : /// identity keys.
1224 : List<String>? changed;
1225 :
1226 : /// The Matrix User IDs of all users who may have left all
1227 : /// the end-to-end encrypted rooms they previously shared
1228 : /// with the user.
1229 : List<String>? left;
1230 : }
1231 :
1232 : ///
1233 : @_NameSource('generated')
1234 : class ClaimKeysResponse {
1235 0 : ClaimKeysResponse({
1236 : this.failures,
1237 : required this.oneTimeKeys,
1238 : });
1239 :
1240 10 : ClaimKeysResponse.fromJson(Map<String, Object?> json)
1241 10 : : failures = ((v) => v != null
1242 : ? (v as Map<String, Object?>)
1243 10 : .map((k, v) => MapEntry(k, v as Map<String, Object?>))
1244 20 : : null)(json['failures']),
1245 20 : oneTimeKeys = (json['one_time_keys'] as Map<String, Object?>).map(
1246 20 : (k, v) => MapEntry(
1247 : k,
1248 : (v as Map<String, Object?>)
1249 30 : .map((k, v) => MapEntry(k, v as Map<String, Object?>))));
1250 0 : Map<String, Object?> toJson() {
1251 0 : final failures = this.failures;
1252 0 : return {
1253 0 : if (failures != null) 'failures': failures.map((k, v) => MapEntry(k, v)),
1254 0 : 'one_time_keys': oneTimeKeys
1255 0 : .map((k, v) => MapEntry(k, v.map((k, v) => MapEntry(k, v)))),
1256 : };
1257 : }
1258 :
1259 : /// If any remote homeservers could not be reached, they are
1260 : /// recorded here. The names of the properties are the names of
1261 : /// the unreachable servers.
1262 : ///
1263 : /// If the homeserver could be reached, but the user or device
1264 : /// was unknown, no failure is recorded. Instead, the corresponding
1265 : /// user or device is missing from the `one_time_keys` result.
1266 : Map<String, Map<String, Object?>>? failures;
1267 :
1268 : /// One-time keys for the queried devices. A map from user ID, to a
1269 : /// map from devices to a map from `<algorithm>:<key_id>` to the key object.
1270 : ///
1271 : /// See the [key algorithms](https://spec.matrix.org/unstable/client-server-api/#key-algorithms) section for information
1272 : /// on the Key Object format.
1273 : ///
1274 : /// If necessary, the claimed key might be a fallback key. Fallback
1275 : /// keys are re-used by the server until replaced by the device.
1276 : Map<String, Map<String, Map<String, Object?>>> oneTimeKeys;
1277 : }
1278 :
1279 : ///
1280 : @_NameSource('generated')
1281 : class QueryKeysResponse {
1282 0 : QueryKeysResponse({
1283 : this.deviceKeys,
1284 : this.failures,
1285 : this.masterKeys,
1286 : this.selfSigningKeys,
1287 : this.userSigningKeys,
1288 : });
1289 :
1290 31 : QueryKeysResponse.fromJson(Map<String, Object?> json)
1291 31 : : deviceKeys = ((v) => v != null
1292 93 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
1293 : k,
1294 93 : (v as Map<String, Object?>).map((k, v) => MapEntry(
1295 31 : k, MatrixDeviceKeys.fromJson(v as Map<String, Object?>)))))
1296 62 : : null)(json['device_keys']),
1297 31 : failures = ((v) => v != null
1298 : ? (v as Map<String, Object?>)
1299 31 : .map((k, v) => MapEntry(k, v as Map<String, Object?>))
1300 62 : : null)(json['failures']),
1301 31 : masterKeys = ((v) => v != null
1302 93 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
1303 31 : k, MatrixCrossSigningKey.fromJson(v as Map<String, Object?>)))
1304 62 : : null)(json['master_keys']),
1305 31 : selfSigningKeys = ((v) => v != null
1306 93 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
1307 31 : k, MatrixCrossSigningKey.fromJson(v as Map<String, Object?>)))
1308 62 : : null)(json['self_signing_keys']),
1309 31 : userSigningKeys = ((v) => v != null
1310 93 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
1311 31 : k, MatrixCrossSigningKey.fromJson(v as Map<String, Object?>)))
1312 62 : : null)(json['user_signing_keys']);
1313 0 : Map<String, Object?> toJson() {
1314 0 : final deviceKeys = this.deviceKeys;
1315 0 : final failures = this.failures;
1316 0 : final masterKeys = this.masterKeys;
1317 0 : final selfSigningKeys = this.selfSigningKeys;
1318 0 : final userSigningKeys = this.userSigningKeys;
1319 0 : return {
1320 : if (deviceKeys != null)
1321 0 : 'device_keys': deviceKeys.map(
1322 0 : (k, v) => MapEntry(k, v.map((k, v) => MapEntry(k, v.toJson())))),
1323 0 : if (failures != null) 'failures': failures.map((k, v) => MapEntry(k, v)),
1324 : if (masterKeys != null)
1325 0 : 'master_keys': masterKeys.map((k, v) => MapEntry(k, v.toJson())),
1326 : if (selfSigningKeys != null)
1327 0 : 'self_signing_keys':
1328 0 : selfSigningKeys.map((k, v) => MapEntry(k, v.toJson())),
1329 : if (userSigningKeys != null)
1330 0 : 'user_signing_keys':
1331 0 : userSigningKeys.map((k, v) => MapEntry(k, v.toJson())),
1332 : };
1333 : }
1334 :
1335 : /// Information on the queried devices. A map from user ID, to a
1336 : /// map from device ID to device information. For each device,
1337 : /// the information returned will be the same as uploaded via
1338 : /// `/keys/upload`, with the addition of an `unsigned`
1339 : /// property.
1340 : Map<String, Map<String, MatrixDeviceKeys>>? deviceKeys;
1341 :
1342 : /// If any remote homeservers could not be reached, they are
1343 : /// recorded here. The names of the properties are the names of
1344 : /// the unreachable servers.
1345 : ///
1346 : /// If the homeserver could be reached, but the user or device
1347 : /// was unknown, no failure is recorded. Instead, the corresponding
1348 : /// user or device is missing from the `device_keys` result.
1349 : Map<String, Map<String, Object?>>? failures;
1350 :
1351 : /// Information on the master cross-signing keys of the queried users.
1352 : /// A map from user ID, to master key information. For each key, the
1353 : /// information returned will be the same as uploaded via
1354 : /// `/keys/device_signing/upload`, along with the signatures
1355 : /// uploaded via `/keys/signatures/upload` that the requesting user
1356 : /// is allowed to see.
1357 : Map<String, MatrixCrossSigningKey>? masterKeys;
1358 :
1359 : /// Information on the self-signing keys of the queried users. A map
1360 : /// from user ID, to self-signing key information. For each key, the
1361 : /// information returned will be the same as uploaded via
1362 : /// `/keys/device_signing/upload`.
1363 : Map<String, MatrixCrossSigningKey>? selfSigningKeys;
1364 :
1365 : /// Information on the user-signing key of the user making the
1366 : /// request, if they queried their own device information. A map
1367 : /// from user ID, to user-signing key information. The
1368 : /// information returned will be the same as uploaded via
1369 : /// `/keys/device_signing/upload`.
1370 : Map<String, MatrixCrossSigningKey>? userSigningKeys;
1371 : }
1372 :
1373 : ///
1374 : @_NameSource('spec')
1375 : class LoginFlow {
1376 0 : LoginFlow({
1377 : this.type,
1378 : });
1379 :
1380 34 : LoginFlow.fromJson(Map<String, Object?> json)
1381 102 : : type = ((v) => v != null ? v as String : null)(json['type']);
1382 0 : Map<String, Object?> toJson() {
1383 0 : final type = this.type;
1384 0 : return {
1385 0 : if (type != null) 'type': type,
1386 : };
1387 : }
1388 :
1389 : /// The login type. This is supplied as the `type` when
1390 : /// logging in.
1391 : String? type;
1392 : }
1393 :
1394 : ///
1395 : @_NameSource('rule override generated')
1396 : @EnhancedEnum()
1397 : enum LoginType {
1398 : @EnhancedEnumValue(name: 'm.login.password')
1399 : mLoginPassword,
1400 : @EnhancedEnumValue(name: 'm.login.token')
1401 : mLoginToken,
1402 : @EnhancedEnumValue(name: 'org.matrix.login.jwt')
1403 : mLoginJWT
1404 : }
1405 :
1406 : ///
1407 : @_NameSource('generated')
1408 : class LoginResponse {
1409 0 : LoginResponse({
1410 : required this.accessToken,
1411 : required this.deviceId,
1412 : this.expiresInMs,
1413 : this.homeServer,
1414 : this.refreshToken,
1415 : required this.userId,
1416 : this.wellKnown,
1417 : });
1418 :
1419 4 : LoginResponse.fromJson(Map<String, Object?> json)
1420 4 : : accessToken = json['access_token'] as String,
1421 4 : deviceId = json['device_id'] as String,
1422 : expiresInMs =
1423 12 : ((v) => v != null ? v as int : null)(json['expires_in_ms']),
1424 : homeServer =
1425 12 : ((v) => v != null ? v as String : null)(json['home_server']),
1426 : refreshToken =
1427 12 : ((v) => v != null ? v as String : null)(json['refresh_token']),
1428 4 : userId = json['user_id'] as String,
1429 4 : wellKnown = ((v) => v != null
1430 4 : ? DiscoveryInformation.fromJson(v as Map<String, Object?>)
1431 8 : : null)(json['well_known']);
1432 0 : Map<String, Object?> toJson() {
1433 0 : final expiresInMs = this.expiresInMs;
1434 0 : final homeServer = this.homeServer;
1435 0 : final refreshToken = this.refreshToken;
1436 0 : final wellKnown = this.wellKnown;
1437 0 : return {
1438 0 : 'access_token': accessToken,
1439 0 : 'device_id': deviceId,
1440 0 : if (expiresInMs != null) 'expires_in_ms': expiresInMs,
1441 0 : if (homeServer != null) 'home_server': homeServer,
1442 0 : if (refreshToken != null) 'refresh_token': refreshToken,
1443 0 : 'user_id': userId,
1444 0 : if (wellKnown != null) 'well_known': wellKnown.toJson(),
1445 : };
1446 : }
1447 :
1448 : /// An access token for the account.
1449 : /// This access token can then be used to authorize other requests.
1450 : String accessToken;
1451 :
1452 : /// ID of the logged-in device. Will be the same as the
1453 : /// corresponding parameter in the request, if one was specified.
1454 : String deviceId;
1455 :
1456 : /// The lifetime of the access token, in milliseconds. Once
1457 : /// the access token has expired a new access token can be
1458 : /// obtained by using the provided refresh token. If no
1459 : /// refresh token is provided, the client will need to re-log in
1460 : /// to obtain a new access token. If not given, the client can
1461 : /// assume that the access token will not expire.
1462 : int? expiresInMs;
1463 :
1464 : /// The server_name of the homeserver on which the account has
1465 : /// been registered.
1466 : ///
1467 : /// **Deprecated**. Clients should extract the server_name from
1468 : /// `user_id` (by splitting at the first colon) if they require
1469 : /// it. Note also that `homeserver` is not spelt this way.
1470 : String? homeServer;
1471 :
1472 : /// A refresh token for the account. This token can be used to
1473 : /// obtain a new access token when it expires by calling the
1474 : /// `/refresh` endpoint.
1475 : String? refreshToken;
1476 :
1477 : /// The fully-qualified Matrix ID for the account.
1478 : String userId;
1479 :
1480 : /// Optional client configuration provided by the server. If present,
1481 : /// clients SHOULD use the provided object to reconfigure themselves,
1482 : /// optionally validating the URLs within. This object takes the same
1483 : /// form as the one returned from .well-known autodiscovery.
1484 : DiscoveryInformation? wellKnown;
1485 : }
1486 :
1487 : ///
1488 : @_NameSource('spec')
1489 : class Notification {
1490 0 : Notification({
1491 : required this.actions,
1492 : required this.event,
1493 : this.profileTag,
1494 : required this.read,
1495 : required this.roomId,
1496 : required this.ts,
1497 : });
1498 :
1499 0 : Notification.fromJson(Map<String, Object?> json)
1500 0 : : actions = (json['actions'] as List).map((v) => v as Object?).toList(),
1501 0 : event = MatrixEvent.fromJson(json['event'] as Map<String, Object?>),
1502 : profileTag =
1503 0 : ((v) => v != null ? v as String : null)(json['profile_tag']),
1504 0 : read = json['read'] as bool,
1505 0 : roomId = json['room_id'] as String,
1506 0 : ts = json['ts'] as int;
1507 0 : Map<String, Object?> toJson() {
1508 0 : final profileTag = this.profileTag;
1509 0 : return {
1510 0 : 'actions': actions.map((v) => v).toList(),
1511 0 : 'event': event.toJson(),
1512 0 : if (profileTag != null) 'profile_tag': profileTag,
1513 0 : 'read': read,
1514 0 : 'room_id': roomId,
1515 0 : 'ts': ts,
1516 : };
1517 : }
1518 :
1519 : /// The action(s) to perform when the conditions for this rule are met.
1520 : /// See [Push Rules: API](https://spec.matrix.org/unstable/client-server-api/#push-rules-api).
1521 : List<Object?> actions;
1522 :
1523 : /// The Event object for the event that triggered the notification.
1524 : MatrixEvent event;
1525 :
1526 : /// The profile tag of the rule that matched this event.
1527 : String? profileTag;
1528 :
1529 : /// Indicates whether the user has sent a read receipt indicating
1530 : /// that they have read this message.
1531 : bool read;
1532 :
1533 : /// The ID of the room in which the event was posted.
1534 : String roomId;
1535 :
1536 : /// The unix timestamp at which the event notification was sent,
1537 : /// in milliseconds.
1538 : int ts;
1539 : }
1540 :
1541 : ///
1542 : @_NameSource('generated')
1543 : class GetNotificationsResponse {
1544 0 : GetNotificationsResponse({
1545 : this.nextToken,
1546 : required this.notifications,
1547 : });
1548 :
1549 0 : GetNotificationsResponse.fromJson(Map<String, Object?> json)
1550 0 : : nextToken = ((v) => v != null ? v as String : null)(json['next_token']),
1551 0 : notifications = (json['notifications'] as List)
1552 0 : .map((v) => Notification.fromJson(v as Map<String, Object?>))
1553 0 : .toList();
1554 0 : Map<String, Object?> toJson() {
1555 0 : final nextToken = this.nextToken;
1556 0 : return {
1557 0 : if (nextToken != null) 'next_token': nextToken,
1558 0 : 'notifications': notifications.map((v) => v.toJson()).toList(),
1559 : };
1560 : }
1561 :
1562 : /// The token to supply in the `from` param of the next
1563 : /// `/notifications` request in order to request more
1564 : /// events. If this is absent, there are no more results.
1565 : String? nextToken;
1566 :
1567 : /// The list of events that triggered notifications.
1568 : List<Notification> notifications;
1569 : }
1570 :
1571 : ///
1572 : @_NameSource('rule override generated')
1573 : @EnhancedEnum()
1574 : enum PresenceType {
1575 : @EnhancedEnumValue(name: 'offline')
1576 : offline,
1577 : @EnhancedEnumValue(name: 'online')
1578 : online,
1579 : @EnhancedEnumValue(name: 'unavailable')
1580 : unavailable
1581 : }
1582 :
1583 : ///
1584 : @_NameSource('generated')
1585 : class GetPresenceResponse {
1586 0 : GetPresenceResponse({
1587 : this.currentlyActive,
1588 : this.lastActiveAgo,
1589 : required this.presence,
1590 : this.statusMsg,
1591 : });
1592 :
1593 0 : GetPresenceResponse.fromJson(Map<String, Object?> json)
1594 : : currentlyActive =
1595 0 : ((v) => v != null ? v as bool : null)(json['currently_active']),
1596 : lastActiveAgo =
1597 0 : ((v) => v != null ? v as int : null)(json['last_active_ago']),
1598 0 : presence = PresenceType.values.fromString(json['presence'] as String)!,
1599 0 : statusMsg = ((v) => v != null ? v as String : null)(json['status_msg']);
1600 0 : Map<String, Object?> toJson() {
1601 0 : final currentlyActive = this.currentlyActive;
1602 0 : final lastActiveAgo = this.lastActiveAgo;
1603 0 : final statusMsg = this.statusMsg;
1604 0 : return {
1605 0 : if (currentlyActive != null) 'currently_active': currentlyActive,
1606 0 : if (lastActiveAgo != null) 'last_active_ago': lastActiveAgo,
1607 0 : 'presence': presence.name,
1608 0 : if (statusMsg != null) 'status_msg': statusMsg,
1609 : };
1610 : }
1611 :
1612 : /// Whether the user is currently active
1613 : bool? currentlyActive;
1614 :
1615 : /// The length of time in milliseconds since an action was performed
1616 : /// by this user.
1617 : int? lastActiveAgo;
1618 :
1619 : /// This user's presence.
1620 : PresenceType presence;
1621 :
1622 : /// The state message for this user if one was set.
1623 : String? statusMsg;
1624 : }
1625 :
1626 : ///
1627 : @_NameSource('rule override generated')
1628 : class ProfileInformation {
1629 4 : ProfileInformation({
1630 : this.avatarUrl,
1631 : this.displayname,
1632 : });
1633 :
1634 4 : ProfileInformation.fromJson(Map<String, Object?> json)
1635 4 : : avatarUrl = ((v) =>
1636 12 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
1637 : displayname =
1638 12 : ((v) => v != null ? v as String : null)(json['displayname']);
1639 4 : Map<String, Object?> toJson() {
1640 4 : final avatarUrl = this.avatarUrl;
1641 4 : final displayname = this.displayname;
1642 4 : return {
1643 8 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
1644 4 : if (displayname != null) 'displayname': displayname,
1645 : };
1646 : }
1647 :
1648 : /// The user's avatar URL if they have set one, otherwise not present.
1649 : Uri? avatarUrl;
1650 :
1651 : /// The user's display name if they have set one, otherwise not present.
1652 : String? displayname;
1653 : }
1654 :
1655 : /// A list of the rooms on the server.
1656 : @_NameSource('generated')
1657 : class GetPublicRoomsResponse {
1658 0 : GetPublicRoomsResponse({
1659 : required this.chunk,
1660 : this.nextBatch,
1661 : this.prevBatch,
1662 : this.totalRoomCountEstimate,
1663 : });
1664 :
1665 0 : GetPublicRoomsResponse.fromJson(Map<String, Object?> json)
1666 0 : : chunk = (json['chunk'] as List)
1667 0 : .map((v) => PublicRoomsChunk.fromJson(v as Map<String, Object?>))
1668 0 : .toList(),
1669 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
1670 0 : prevBatch = ((v) => v != null ? v as String : null)(json['prev_batch']),
1671 0 : totalRoomCountEstimate = ((v) =>
1672 0 : v != null ? v as int : null)(json['total_room_count_estimate']);
1673 0 : Map<String, Object?> toJson() {
1674 0 : final nextBatch = this.nextBatch;
1675 0 : final prevBatch = this.prevBatch;
1676 0 : final totalRoomCountEstimate = this.totalRoomCountEstimate;
1677 0 : return {
1678 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
1679 0 : if (nextBatch != null) 'next_batch': nextBatch,
1680 0 : if (prevBatch != null) 'prev_batch': prevBatch,
1681 : if (totalRoomCountEstimate != null)
1682 0 : 'total_room_count_estimate': totalRoomCountEstimate,
1683 : };
1684 : }
1685 :
1686 : /// A paginated chunk of public rooms.
1687 : List<PublicRoomsChunk> chunk;
1688 :
1689 : /// A pagination token for the response. The absence of this token
1690 : /// means there are no more results to fetch and the client should
1691 : /// stop paginating.
1692 : String? nextBatch;
1693 :
1694 : /// A pagination token that allows fetching previous results. The
1695 : /// absence of this token means there are no results before this
1696 : /// batch, i.e. this is the first batch.
1697 : String? prevBatch;
1698 :
1699 : /// An estimate on the total number of public rooms, if the
1700 : /// server has an estimate.
1701 : int? totalRoomCountEstimate;
1702 : }
1703 :
1704 : ///
1705 : @_NameSource('rule override spec')
1706 : class PublicRoomQueryFilter {
1707 0 : PublicRoomQueryFilter({
1708 : this.genericSearchTerm,
1709 : this.roomTypes,
1710 : });
1711 :
1712 0 : PublicRoomQueryFilter.fromJson(Map<String, Object?> json)
1713 0 : : genericSearchTerm = ((v) =>
1714 0 : v != null ? v as String : null)(json['generic_search_term']),
1715 0 : roomTypes = ((v) => v != null
1716 0 : ? (v as List).map((v) => v as String).toList()
1717 0 : : null)(json['room_types']);
1718 0 : Map<String, Object?> toJson() {
1719 0 : final genericSearchTerm = this.genericSearchTerm;
1720 0 : final roomTypes = this.roomTypes;
1721 0 : return {
1722 0 : if (genericSearchTerm != null) 'generic_search_term': genericSearchTerm,
1723 0 : if (roomTypes != null) 'room_types': roomTypes.map((v) => v).toList(),
1724 : };
1725 : }
1726 :
1727 : /// An optional string to search for in the room metadata, e.g. name,
1728 : /// topic, canonical alias, etc.
1729 : String? genericSearchTerm;
1730 :
1731 : /// An optional list of [room types](https://spec.matrix.org/unstable/client-server-api/#types) to search
1732 : /// for. To include rooms without a room type, specify `null` within this
1733 : /// list. When not specified, all applicable rooms (regardless of type)
1734 : /// are returned.
1735 : List<String>? roomTypes;
1736 : }
1737 :
1738 : /// A list of the rooms on the server.
1739 : @_NameSource('generated')
1740 : class QueryPublicRoomsResponse {
1741 0 : QueryPublicRoomsResponse({
1742 : required this.chunk,
1743 : this.nextBatch,
1744 : this.prevBatch,
1745 : this.totalRoomCountEstimate,
1746 : });
1747 :
1748 0 : QueryPublicRoomsResponse.fromJson(Map<String, Object?> json)
1749 0 : : chunk = (json['chunk'] as List)
1750 0 : .map((v) => PublicRoomsChunk.fromJson(v as Map<String, Object?>))
1751 0 : .toList(),
1752 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
1753 0 : prevBatch = ((v) => v != null ? v as String : null)(json['prev_batch']),
1754 0 : totalRoomCountEstimate = ((v) =>
1755 0 : v != null ? v as int : null)(json['total_room_count_estimate']);
1756 0 : Map<String, Object?> toJson() {
1757 0 : final nextBatch = this.nextBatch;
1758 0 : final prevBatch = this.prevBatch;
1759 0 : final totalRoomCountEstimate = this.totalRoomCountEstimate;
1760 0 : return {
1761 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
1762 0 : if (nextBatch != null) 'next_batch': nextBatch,
1763 0 : if (prevBatch != null) 'prev_batch': prevBatch,
1764 : if (totalRoomCountEstimate != null)
1765 0 : 'total_room_count_estimate': totalRoomCountEstimate,
1766 : };
1767 : }
1768 :
1769 : /// A paginated chunk of public rooms.
1770 : List<PublicRoomsChunk> chunk;
1771 :
1772 : /// A pagination token for the response. The absence of this token
1773 : /// means there are no more results to fetch and the client should
1774 : /// stop paginating.
1775 : String? nextBatch;
1776 :
1777 : /// A pagination token that allows fetching previous results. The
1778 : /// absence of this token means there are no results before this
1779 : /// batch, i.e. this is the first batch.
1780 : String? prevBatch;
1781 :
1782 : /// An estimate on the total number of public rooms, if the
1783 : /// server has an estimate.
1784 : int? totalRoomCountEstimate;
1785 : }
1786 :
1787 : ///
1788 : @_NameSource('spec')
1789 : class PusherData {
1790 0 : PusherData({
1791 : this.format,
1792 : this.url,
1793 : this.additionalProperties = const {},
1794 : });
1795 :
1796 0 : PusherData.fromJson(Map<String, Object?> json)
1797 0 : : format = ((v) => v != null ? v as String : null)(json['format']),
1798 0 : url = ((v) => v != null ? Uri.parse(v as String) : null)(json['url']),
1799 0 : additionalProperties = Map.fromEntries(json.entries
1800 0 : .where((e) => !['format', 'url'].contains(e.key))
1801 0 : .map((e) => MapEntry(e.key, e.value)));
1802 0 : Map<String, Object?> toJson() {
1803 0 : final format = this.format;
1804 0 : final url = this.url;
1805 0 : return {
1806 0 : ...additionalProperties,
1807 0 : if (format != null) 'format': format,
1808 0 : if (url != null) 'url': url.toString(),
1809 : };
1810 : }
1811 :
1812 : /// The format to use when sending notifications to the Push
1813 : /// Gateway.
1814 : String? format;
1815 :
1816 : /// Required if `kind` is `http`. The URL to use to send
1817 : /// notifications to.
1818 : Uri? url;
1819 :
1820 : Map<String, Object?> additionalProperties;
1821 : }
1822 :
1823 : ///
1824 : @_NameSource('spec')
1825 : class PusherId {
1826 0 : PusherId({
1827 : required this.appId,
1828 : required this.pushkey,
1829 : });
1830 :
1831 0 : PusherId.fromJson(Map<String, Object?> json)
1832 0 : : appId = json['app_id'] as String,
1833 0 : pushkey = json['pushkey'] as String;
1834 0 : Map<String, Object?> toJson() => {
1835 0 : 'app_id': appId,
1836 0 : 'pushkey': pushkey,
1837 : };
1838 :
1839 : /// This is a reverse-DNS style identifier for the application.
1840 : /// Max length, 64 chars.
1841 : String appId;
1842 :
1843 : /// This is a unique identifier for this pusher. See `/set` for
1844 : /// more detail.
1845 : /// Max length, 512 bytes.
1846 : String pushkey;
1847 : }
1848 :
1849 : ///
1850 : @_NameSource('spec')
1851 : class Pusher implements PusherId {
1852 0 : Pusher({
1853 : required this.appId,
1854 : required this.pushkey,
1855 : required this.appDisplayName,
1856 : required this.data,
1857 : required this.deviceDisplayName,
1858 : required this.kind,
1859 : required this.lang,
1860 : this.profileTag,
1861 : });
1862 :
1863 0 : Pusher.fromJson(Map<String, Object?> json)
1864 0 : : appId = json['app_id'] as String,
1865 0 : pushkey = json['pushkey'] as String,
1866 0 : appDisplayName = json['app_display_name'] as String,
1867 0 : data = PusherData.fromJson(json['data'] as Map<String, Object?>),
1868 0 : deviceDisplayName = json['device_display_name'] as String,
1869 0 : kind = json['kind'] as String,
1870 0 : lang = json['lang'] as String,
1871 : profileTag =
1872 0 : ((v) => v != null ? v as String : null)(json['profile_tag']);
1873 0 : @override
1874 : Map<String, Object?> toJson() {
1875 0 : final profileTag = this.profileTag;
1876 0 : return {
1877 0 : 'app_id': appId,
1878 0 : 'pushkey': pushkey,
1879 0 : 'app_display_name': appDisplayName,
1880 0 : 'data': data.toJson(),
1881 0 : 'device_display_name': deviceDisplayName,
1882 0 : 'kind': kind,
1883 0 : 'lang': lang,
1884 0 : if (profileTag != null) 'profile_tag': profileTag,
1885 : };
1886 : }
1887 :
1888 : /// This is a reverse-DNS style identifier for the application.
1889 : /// Max length, 64 chars.
1890 : @override
1891 : String appId;
1892 :
1893 : /// This is a unique identifier for this pusher. See `/set` for
1894 : /// more detail.
1895 : /// Max length, 512 bytes.
1896 : @override
1897 : String pushkey;
1898 :
1899 : /// A string that will allow the user to identify what application
1900 : /// owns this pusher.
1901 : String appDisplayName;
1902 :
1903 : /// A dictionary of information for the pusher implementation
1904 : /// itself.
1905 : PusherData data;
1906 :
1907 : /// A string that will allow the user to identify what device owns
1908 : /// this pusher.
1909 : String deviceDisplayName;
1910 :
1911 : /// The kind of pusher. `"http"` is a pusher that
1912 : /// sends HTTP pokes.
1913 : String kind;
1914 :
1915 : /// The preferred language for receiving notifications (e.g. 'en'
1916 : /// or 'en-US')
1917 : String lang;
1918 :
1919 : /// This string determines which set of device specific rules this
1920 : /// pusher executes.
1921 : String? profileTag;
1922 : }
1923 :
1924 : ///
1925 : @_NameSource('spec')
1926 : class PushCondition {
1927 32 : PushCondition({
1928 : this.is$,
1929 : this.key,
1930 : required this.kind,
1931 : this.pattern,
1932 : });
1933 :
1934 32 : PushCondition.fromJson(Map<String, Object?> json)
1935 96 : : is$ = ((v) => v != null ? v as String : null)(json['is']),
1936 96 : key = ((v) => v != null ? v as String : null)(json['key']),
1937 32 : kind = json['kind'] as String,
1938 96 : pattern = ((v) => v != null ? v as String : null)(json['pattern']);
1939 0 : Map<String, Object?> toJson() {
1940 0 : final is$ = this.is$;
1941 0 : final key = this.key;
1942 0 : final pattern = this.pattern;
1943 0 : return {
1944 0 : if (is$ != null) 'is': is$,
1945 0 : if (key != null) 'key': key,
1946 0 : 'kind': kind,
1947 0 : if (pattern != null) 'pattern': pattern,
1948 : };
1949 : }
1950 :
1951 : /// Required for `room_member_count` conditions. A decimal integer
1952 : /// optionally prefixed by one of, ==, <, >, >= or <=. A prefix of < matches
1953 : /// rooms where the member count is strictly less than the given number and
1954 : /// so forth. If no prefix is present, this parameter defaults to ==.
1955 : String? is$;
1956 :
1957 : /// Required for `event_match` conditions. The dot-separated field of the
1958 : /// event to match.
1959 : ///
1960 : /// Required for `sender_notification_permission` conditions. The field in
1961 : /// the power level event the user needs a minimum power level for. Fields
1962 : /// must be specified under the `notifications` property in the power level
1963 : /// event's `content`.
1964 : String? key;
1965 :
1966 : /// The kind of condition to apply. See [conditions](https://spec.matrix.org/unstable/client-server-api/#conditions) for
1967 : /// more information on the allowed kinds and how they work.
1968 : String kind;
1969 :
1970 : /// Required for `event_match` conditions. The glob-style pattern to
1971 : /// match against.
1972 : String? pattern;
1973 : }
1974 :
1975 : ///
1976 : @_NameSource('spec')
1977 : class PushRule {
1978 32 : PushRule({
1979 : required this.actions,
1980 : this.conditions,
1981 : required this.default$,
1982 : required this.enabled,
1983 : this.pattern,
1984 : required this.ruleId,
1985 : });
1986 :
1987 32 : PushRule.fromJson(Map<String, Object?> json)
1988 128 : : actions = (json['actions'] as List).map((v) => v as Object?).toList(),
1989 32 : conditions = ((v) => v != null
1990 : ? (v as List)
1991 96 : .map((v) => PushCondition.fromJson(v as Map<String, Object?>))
1992 32 : .toList()
1993 64 : : null)(json['conditions']),
1994 32 : default$ = json['default'] as bool,
1995 32 : enabled = json['enabled'] as bool,
1996 96 : pattern = ((v) => v != null ? v as String : null)(json['pattern']),
1997 32 : ruleId = json['rule_id'] as String;
1998 0 : Map<String, Object?> toJson() {
1999 0 : final conditions = this.conditions;
2000 0 : final pattern = this.pattern;
2001 0 : return {
2002 0 : 'actions': actions.map((v) => v).toList(),
2003 : if (conditions != null)
2004 0 : 'conditions': conditions.map((v) => v.toJson()).toList(),
2005 0 : 'default': default$,
2006 0 : 'enabled': enabled,
2007 0 : if (pattern != null) 'pattern': pattern,
2008 0 : 'rule_id': ruleId,
2009 : };
2010 : }
2011 :
2012 : /// The actions to perform when this rule is matched.
2013 : List<Object?> actions;
2014 :
2015 : /// The conditions that must hold true for an event in order for a rule to be
2016 : /// applied to an event. A rule with no conditions always matches. Only
2017 : /// applicable to `underride` and `override` rules.
2018 : List<PushCondition>? conditions;
2019 :
2020 : /// Whether this is a default rule, or has been set explicitly.
2021 : bool default$;
2022 :
2023 : /// Whether the push rule is enabled or not.
2024 : bool enabled;
2025 :
2026 : /// The glob-style pattern to match against. Only applicable to `content`
2027 : /// rules.
2028 : String? pattern;
2029 :
2030 : /// The ID of this rule.
2031 : String ruleId;
2032 : }
2033 :
2034 : ///
2035 : @_NameSource('rule override generated')
2036 : class PushRuleSet {
2037 2 : PushRuleSet({
2038 : this.content,
2039 : this.override,
2040 : this.room,
2041 : this.sender,
2042 : this.underride,
2043 : });
2044 :
2045 32 : PushRuleSet.fromJson(Map<String, Object?> json)
2046 32 : : content = ((v) => v != null
2047 : ? (v as List)
2048 96 : .map((v) => PushRule.fromJson(v as Map<String, Object?>))
2049 32 : .toList()
2050 64 : : null)(json['content']),
2051 32 : override = ((v) => v != null
2052 : ? (v as List)
2053 96 : .map((v) => PushRule.fromJson(v as Map<String, Object?>))
2054 32 : .toList()
2055 64 : : null)(json['override']),
2056 32 : room = ((v) => v != null
2057 : ? (v as List)
2058 96 : .map((v) => PushRule.fromJson(v as Map<String, Object?>))
2059 32 : .toList()
2060 64 : : null)(json['room']),
2061 32 : sender = ((v) => v != null
2062 : ? (v as List)
2063 32 : .map((v) => PushRule.fromJson(v as Map<String, Object?>))
2064 32 : .toList()
2065 64 : : null)(json['sender']),
2066 32 : underride = ((v) => v != null
2067 : ? (v as List)
2068 96 : .map((v) => PushRule.fromJson(v as Map<String, Object?>))
2069 32 : .toList()
2070 64 : : null)(json['underride']);
2071 0 : Map<String, Object?> toJson() {
2072 0 : final content = this.content;
2073 0 : final override = this.override;
2074 0 : final room = this.room;
2075 0 : final sender = this.sender;
2076 0 : final underride = this.underride;
2077 0 : return {
2078 0 : if (content != null) 'content': content.map((v) => v.toJson()).toList(),
2079 : if (override != null)
2080 0 : 'override': override.map((v) => v.toJson()).toList(),
2081 0 : if (room != null) 'room': room.map((v) => v.toJson()).toList(),
2082 0 : if (sender != null) 'sender': sender.map((v) => v.toJson()).toList(),
2083 : if (underride != null)
2084 0 : 'underride': underride.map((v) => v.toJson()).toList(),
2085 : };
2086 : }
2087 :
2088 : ///
2089 : List<PushRule>? content;
2090 :
2091 : ///
2092 : List<PushRule>? override;
2093 :
2094 : ///
2095 : List<PushRule>? room;
2096 :
2097 : ///
2098 : List<PushRule>? sender;
2099 :
2100 : ///
2101 : List<PushRule>? underride;
2102 : }
2103 :
2104 : ///
2105 : @_NameSource('rule override generated')
2106 : @EnhancedEnum()
2107 : enum PushRuleKind {
2108 : @EnhancedEnumValue(name: 'content')
2109 : content,
2110 : @EnhancedEnumValue(name: 'override')
2111 : override,
2112 : @EnhancedEnumValue(name: 'room')
2113 : room,
2114 : @EnhancedEnumValue(name: 'sender')
2115 : sender,
2116 : @EnhancedEnumValue(name: 'underride')
2117 : underride
2118 : }
2119 :
2120 : ///
2121 : @_NameSource('generated')
2122 : class RefreshResponse {
2123 0 : RefreshResponse({
2124 : required this.accessToken,
2125 : this.expiresInMs,
2126 : this.refreshToken,
2127 : });
2128 :
2129 1 : RefreshResponse.fromJson(Map<String, Object?> json)
2130 1 : : accessToken = json['access_token'] as String,
2131 : expiresInMs =
2132 3 : ((v) => v != null ? v as int : null)(json['expires_in_ms']),
2133 : refreshToken =
2134 3 : ((v) => v != null ? v as String : null)(json['refresh_token']);
2135 0 : Map<String, Object?> toJson() {
2136 0 : final expiresInMs = this.expiresInMs;
2137 0 : final refreshToken = this.refreshToken;
2138 0 : return {
2139 0 : 'access_token': accessToken,
2140 0 : if (expiresInMs != null) 'expires_in_ms': expiresInMs,
2141 0 : if (refreshToken != null) 'refresh_token': refreshToken,
2142 : };
2143 : }
2144 :
2145 : /// The new access token to use.
2146 : String accessToken;
2147 :
2148 : /// The lifetime of the access token, in milliseconds. If not
2149 : /// given, the client can assume that the access token will not
2150 : /// expire.
2151 : int? expiresInMs;
2152 :
2153 : /// The new refresh token to use when the access token needs to
2154 : /// be refreshed again. If not given, the old refresh token can
2155 : /// be re-used.
2156 : String? refreshToken;
2157 : }
2158 :
2159 : ///
2160 : @_NameSource('rule override generated')
2161 : @EnhancedEnum()
2162 : enum AccountKind {
2163 : @EnhancedEnumValue(name: 'guest')
2164 : guest,
2165 : @EnhancedEnumValue(name: 'user')
2166 : user
2167 : }
2168 :
2169 : ///
2170 : @_NameSource('generated')
2171 : class RegisterResponse {
2172 0 : RegisterResponse({
2173 : this.accessToken,
2174 : this.deviceId,
2175 : this.expiresInMs,
2176 : this.homeServer,
2177 : this.refreshToken,
2178 : required this.userId,
2179 : });
2180 :
2181 0 : RegisterResponse.fromJson(Map<String, Object?> json)
2182 : : accessToken =
2183 0 : ((v) => v != null ? v as String : null)(json['access_token']),
2184 0 : deviceId = ((v) => v != null ? v as String : null)(json['device_id']),
2185 : expiresInMs =
2186 0 : ((v) => v != null ? v as int : null)(json['expires_in_ms']),
2187 : homeServer =
2188 0 : ((v) => v != null ? v as String : null)(json['home_server']),
2189 : refreshToken =
2190 0 : ((v) => v != null ? v as String : null)(json['refresh_token']),
2191 0 : userId = json['user_id'] as String;
2192 0 : Map<String, Object?> toJson() {
2193 0 : final accessToken = this.accessToken;
2194 0 : final deviceId = this.deviceId;
2195 0 : final expiresInMs = this.expiresInMs;
2196 0 : final homeServer = this.homeServer;
2197 0 : final refreshToken = this.refreshToken;
2198 0 : return {
2199 0 : if (accessToken != null) 'access_token': accessToken,
2200 0 : if (deviceId != null) 'device_id': deviceId,
2201 0 : if (expiresInMs != null) 'expires_in_ms': expiresInMs,
2202 0 : if (homeServer != null) 'home_server': homeServer,
2203 0 : if (refreshToken != null) 'refresh_token': refreshToken,
2204 0 : 'user_id': userId,
2205 : };
2206 : }
2207 :
2208 : /// An access token for the account.
2209 : /// This access token can then be used to authorize other requests.
2210 : /// Required if the `inhibit_login` option is false.
2211 : String? accessToken;
2212 :
2213 : /// ID of the registered device. Will be the same as the
2214 : /// corresponding parameter in the request, if one was specified.
2215 : /// Required if the `inhibit_login` option is false.
2216 : String? deviceId;
2217 :
2218 : /// The lifetime of the access token, in milliseconds. Once
2219 : /// the access token has expired a new access token can be
2220 : /// obtained by using the provided refresh token. If no
2221 : /// refresh token is provided, the client will need to re-log in
2222 : /// to obtain a new access token. If not given, the client can
2223 : /// assume that the access token will not expire.
2224 : ///
2225 : /// Omitted if the `inhibit_login` option is true.
2226 : int? expiresInMs;
2227 :
2228 : /// The server_name of the homeserver on which the account has
2229 : /// been registered.
2230 : ///
2231 : /// **Deprecated**. Clients should extract the server_name from
2232 : /// `user_id` (by splitting at the first colon) if they require
2233 : /// it. Note also that `homeserver` is not spelt this way.
2234 : String? homeServer;
2235 :
2236 : /// A refresh token for the account. This token can be used to
2237 : /// obtain a new access token when it expires by calling the
2238 : /// `/refresh` endpoint.
2239 : ///
2240 : /// Omitted if the `inhibit_login` option is true.
2241 : String? refreshToken;
2242 :
2243 : /// The fully-qualified Matrix user ID (MXID) that has been registered.
2244 : ///
2245 : /// Any user ID returned by this API must conform to the grammar given in the
2246 : /// [Matrix specification](https://spec.matrix.org/unstable/appendices/#user-identifiers).
2247 : String userId;
2248 : }
2249 :
2250 : ///
2251 : @_NameSource('spec')
2252 : class RoomKeysUpdateResponse {
2253 0 : RoomKeysUpdateResponse({
2254 : required this.count,
2255 : required this.etag,
2256 : });
2257 :
2258 4 : RoomKeysUpdateResponse.fromJson(Map<String, Object?> json)
2259 4 : : count = json['count'] as int,
2260 4 : etag = json['etag'] as String;
2261 0 : Map<String, Object?> toJson() => {
2262 0 : 'count': count,
2263 0 : 'etag': etag,
2264 : };
2265 :
2266 : /// The number of keys stored in the backup
2267 : int count;
2268 :
2269 : /// The new etag value representing stored keys in the backup.
2270 : /// See `GET /room_keys/version/{version}` for more details.
2271 : String etag;
2272 : }
2273 :
2274 : /// The key data
2275 : @_NameSource('spec')
2276 : class KeyBackupData {
2277 4 : KeyBackupData({
2278 : required this.firstMessageIndex,
2279 : required this.forwardedCount,
2280 : required this.isVerified,
2281 : required this.sessionData,
2282 : });
2283 :
2284 1 : KeyBackupData.fromJson(Map<String, Object?> json)
2285 1 : : firstMessageIndex = json['first_message_index'] as int,
2286 1 : forwardedCount = json['forwarded_count'] as int,
2287 1 : isVerified = json['is_verified'] as bool,
2288 1 : sessionData = json['session_data'] as Map<String, Object?>;
2289 8 : Map<String, Object?> toJson() => {
2290 4 : 'first_message_index': firstMessageIndex,
2291 4 : 'forwarded_count': forwardedCount,
2292 4 : 'is_verified': isVerified,
2293 4 : 'session_data': sessionData,
2294 : };
2295 :
2296 : /// The index of the first message in the session that the key can decrypt.
2297 : int firstMessageIndex;
2298 :
2299 : /// The number of times this key has been forwarded via key-sharing between devices.
2300 : int forwardedCount;
2301 :
2302 : /// Whether the device backing up the key verified the device that the key
2303 : /// is from.
2304 : bool isVerified;
2305 :
2306 : /// Algorithm-dependent data. See the documentation for the backup
2307 : /// algorithms in [Server-side key backups](https://spec.matrix.org/unstable/client-server-api/#server-side-key-backups) for more information on the
2308 : /// expected format of the data.
2309 : Map<String, Object?> sessionData;
2310 : }
2311 :
2312 : /// The backed up keys for a room.
2313 : @_NameSource('spec')
2314 : class RoomKeyBackup {
2315 4 : RoomKeyBackup({
2316 : required this.sessions,
2317 : });
2318 :
2319 1 : RoomKeyBackup.fromJson(Map<String, Object?> json)
2320 3 : : sessions = (json['sessions'] as Map<String, Object?>).map((k, v) =>
2321 2 : MapEntry(k, KeyBackupData.fromJson(v as Map<String, Object?>)));
2322 8 : Map<String, Object?> toJson() => {
2323 20 : 'sessions': sessions.map((k, v) => MapEntry(k, v.toJson())),
2324 : };
2325 :
2326 : /// A map of session IDs to key data.
2327 : Map<String, KeyBackupData> sessions;
2328 : }
2329 :
2330 : ///
2331 : @_NameSource('rule override generated')
2332 : class RoomKeys {
2333 4 : RoomKeys({
2334 : required this.rooms,
2335 : });
2336 :
2337 1 : RoomKeys.fromJson(Map<String, Object?> json)
2338 3 : : rooms = (json['rooms'] as Map<String, Object?>).map((k, v) =>
2339 2 : MapEntry(k, RoomKeyBackup.fromJson(v as Map<String, Object?>)));
2340 8 : Map<String, Object?> toJson() => {
2341 20 : 'rooms': rooms.map((k, v) => MapEntry(k, v.toJson())),
2342 : };
2343 :
2344 : /// A map of room IDs to room key backup data.
2345 : Map<String, RoomKeyBackup> rooms;
2346 : }
2347 :
2348 : ///
2349 : @_NameSource('rule override generated')
2350 : @EnhancedEnum()
2351 : enum BackupAlgorithm {
2352 : @EnhancedEnumValue(name: 'm.megolm_backup.v1.curve25519-aes-sha2')
2353 : mMegolmBackupV1Curve25519AesSha2
2354 : }
2355 :
2356 : ///
2357 : @_NameSource('generated')
2358 : class GetRoomKeysVersionCurrentResponse {
2359 0 : GetRoomKeysVersionCurrentResponse({
2360 : required this.algorithm,
2361 : required this.authData,
2362 : required this.count,
2363 : required this.etag,
2364 : required this.version,
2365 : });
2366 :
2367 5 : GetRoomKeysVersionCurrentResponse.fromJson(Map<String, Object?> json)
2368 : : algorithm =
2369 10 : BackupAlgorithm.values.fromString(json['algorithm'] as String)!,
2370 5 : authData = json['auth_data'] as Map<String, Object?>,
2371 5 : count = json['count'] as int,
2372 5 : etag = json['etag'] as String,
2373 5 : version = json['version'] as String;
2374 0 : Map<String, Object?> toJson() => {
2375 0 : 'algorithm': algorithm.name,
2376 0 : 'auth_data': authData,
2377 0 : 'count': count,
2378 0 : 'etag': etag,
2379 0 : 'version': version,
2380 : };
2381 :
2382 : /// The algorithm used for storing backups.
2383 : BackupAlgorithm algorithm;
2384 :
2385 : /// Algorithm-dependent data. See the documentation for the backup
2386 : /// algorithms in [Server-side key backups](https://spec.matrix.org/unstable/client-server-api/#server-side-key-backups) for more information on the
2387 : /// expected format of the data.
2388 : Map<String, Object?> authData;
2389 :
2390 : /// The number of keys stored in the backup.
2391 : int count;
2392 :
2393 : /// An opaque string representing stored keys in the backup.
2394 : /// Clients can compare it with the `etag` value they received
2395 : /// in the request of their last key storage request. If not
2396 : /// equal, another client has modified the backup.
2397 : String etag;
2398 :
2399 : /// The backup version.
2400 : String version;
2401 : }
2402 :
2403 : ///
2404 : @_NameSource('generated')
2405 : class GetRoomKeysVersionResponse {
2406 0 : GetRoomKeysVersionResponse({
2407 : required this.algorithm,
2408 : required this.authData,
2409 : required this.count,
2410 : required this.etag,
2411 : required this.version,
2412 : });
2413 :
2414 0 : GetRoomKeysVersionResponse.fromJson(Map<String, Object?> json)
2415 : : algorithm =
2416 0 : BackupAlgorithm.values.fromString(json['algorithm'] as String)!,
2417 0 : authData = json['auth_data'] as Map<String, Object?>,
2418 0 : count = json['count'] as int,
2419 0 : etag = json['etag'] as String,
2420 0 : version = json['version'] as String;
2421 0 : Map<String, Object?> toJson() => {
2422 0 : 'algorithm': algorithm.name,
2423 0 : 'auth_data': authData,
2424 0 : 'count': count,
2425 0 : 'etag': etag,
2426 0 : 'version': version,
2427 : };
2428 :
2429 : /// The algorithm used for storing backups.
2430 : BackupAlgorithm algorithm;
2431 :
2432 : /// Algorithm-dependent data. See the documentation for the backup
2433 : /// algorithms in [Server-side key backups](https://spec.matrix.org/unstable/client-server-api/#server-side-key-backups) for more information on the
2434 : /// expected format of the data.
2435 : Map<String, Object?> authData;
2436 :
2437 : /// The number of keys stored in the backup.
2438 : int count;
2439 :
2440 : /// An opaque string representing stored keys in the backup.
2441 : /// Clients can compare it with the `etag` value they received
2442 : /// in the request of their last key storage request. If not
2443 : /// equal, another client has modified the backup.
2444 : String etag;
2445 :
2446 : /// The backup version.
2447 : String version;
2448 : }
2449 :
2450 : /// The events and state surrounding the requested event.
2451 : @_NameSource('rule override generated')
2452 : class EventContext {
2453 0 : EventContext({
2454 : this.end,
2455 : this.event,
2456 : this.eventsAfter,
2457 : this.eventsBefore,
2458 : this.start,
2459 : this.state,
2460 : });
2461 :
2462 0 : EventContext.fromJson(Map<String, Object?> json)
2463 0 : : end = ((v) => v != null ? v as String : null)(json['end']),
2464 0 : event = ((v) => v != null
2465 0 : ? MatrixEvent.fromJson(v as Map<String, Object?>)
2466 0 : : null)(json['event']),
2467 0 : eventsAfter = ((v) => v != null
2468 : ? (v as List)
2469 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
2470 0 : .toList()
2471 0 : : null)(json['events_after']),
2472 0 : eventsBefore = ((v) => v != null
2473 : ? (v as List)
2474 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
2475 0 : .toList()
2476 0 : : null)(json['events_before']),
2477 0 : start = ((v) => v != null ? v as String : null)(json['start']),
2478 0 : state = ((v) => v != null
2479 : ? (v as List)
2480 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
2481 0 : .toList()
2482 0 : : null)(json['state']);
2483 0 : Map<String, Object?> toJson() {
2484 0 : final end = this.end;
2485 0 : final event = this.event;
2486 0 : final eventsAfter = this.eventsAfter;
2487 0 : final eventsBefore = this.eventsBefore;
2488 0 : final start = this.start;
2489 0 : final state = this.state;
2490 0 : return {
2491 0 : if (end != null) 'end': end,
2492 0 : if (event != null) 'event': event.toJson(),
2493 : if (eventsAfter != null)
2494 0 : 'events_after': eventsAfter.map((v) => v.toJson()).toList(),
2495 : if (eventsBefore != null)
2496 0 : 'events_before': eventsBefore.map((v) => v.toJson()).toList(),
2497 0 : if (start != null) 'start': start,
2498 0 : if (state != null) 'state': state.map((v) => v.toJson()).toList(),
2499 : };
2500 : }
2501 :
2502 : /// A token that can be used to paginate forwards with.
2503 : String? end;
2504 :
2505 : /// Details of the requested event.
2506 : MatrixEvent? event;
2507 :
2508 : /// A list of room events that happened just after the
2509 : /// requested event, in chronological order.
2510 : List<MatrixEvent>? eventsAfter;
2511 :
2512 : /// A list of room events that happened just before the
2513 : /// requested event, in reverse-chronological order.
2514 : List<MatrixEvent>? eventsBefore;
2515 :
2516 : /// A token that can be used to paginate backwards with.
2517 : String? start;
2518 :
2519 : /// The state of the room at the last event returned.
2520 : List<MatrixEvent>? state;
2521 : }
2522 :
2523 : ///
2524 : @_NameSource('spec')
2525 : class RoomMember {
2526 0 : RoomMember({
2527 : this.avatarUrl,
2528 : this.displayName,
2529 : });
2530 :
2531 0 : RoomMember.fromJson(Map<String, Object?> json)
2532 0 : : avatarUrl = ((v) =>
2533 0 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
2534 : displayName =
2535 0 : ((v) => v != null ? v as String : null)(json['display_name']);
2536 0 : Map<String, Object?> toJson() {
2537 0 : final avatarUrl = this.avatarUrl;
2538 0 : final displayName = this.displayName;
2539 0 : return {
2540 0 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
2541 0 : if (displayName != null) 'display_name': displayName,
2542 : };
2543 : }
2544 :
2545 : /// The mxc avatar url of the user this object is representing.
2546 : Uri? avatarUrl;
2547 :
2548 : /// The display name of the user this object is representing.
2549 : String? displayName;
2550 : }
2551 :
2552 : ///
2553 : @_NameSource('(generated, rule override generated)')
2554 : @EnhancedEnum()
2555 : enum Membership {
2556 : @EnhancedEnumValue(name: 'ban')
2557 : ban,
2558 : @EnhancedEnumValue(name: 'invite')
2559 : invite,
2560 : @EnhancedEnumValue(name: 'join')
2561 : join,
2562 : @EnhancedEnumValue(name: 'knock')
2563 : knock,
2564 : @EnhancedEnumValue(name: 'leave')
2565 : leave
2566 : }
2567 :
2568 : /// A list of messages with a new token to request more.
2569 : @_NameSource('generated')
2570 : class GetRoomEventsResponse {
2571 0 : GetRoomEventsResponse({
2572 : required this.chunk,
2573 : this.end,
2574 : required this.start,
2575 : this.state,
2576 : });
2577 :
2578 4 : GetRoomEventsResponse.fromJson(Map<String, Object?> json)
2579 4 : : chunk = (json['chunk'] as List)
2580 12 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
2581 4 : .toList(),
2582 12 : end = ((v) => v != null ? v as String : null)(json['end']),
2583 4 : start = json['start'] as String,
2584 4 : state = ((v) => v != null
2585 : ? (v as List)
2586 4 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
2587 4 : .toList()
2588 8 : : null)(json['state']);
2589 0 : Map<String, Object?> toJson() {
2590 0 : final end = this.end;
2591 0 : final state = this.state;
2592 0 : return {
2593 0 : 'chunk': chunk.map((v) => v.toJson()).toList(),
2594 0 : if (end != null) 'end': end,
2595 0 : 'start': start,
2596 0 : if (state != null) 'state': state.map((v) => v.toJson()).toList(),
2597 : };
2598 : }
2599 :
2600 : /// A list of room events. The order depends on the `dir` parameter.
2601 : /// For `dir=b` events will be in reverse-chronological order,
2602 : /// for `dir=f` in chronological order. (The exact definition of `chronological`
2603 : /// is dependent on the server implementation.)
2604 : ///
2605 : /// Note that an empty `chunk` does not *necessarily* imply that no more events
2606 : /// are available. Clients should continue to paginate until no `end` property
2607 : /// is returned.
2608 : List<MatrixEvent> chunk;
2609 :
2610 : /// A token corresponding to the end of `chunk`. This token can be passed
2611 : /// back to this endpoint to request further events.
2612 : ///
2613 : /// If no further events are available (either because we have
2614 : /// reached the start of the timeline, or because the user does
2615 : /// not have permission to see any more events), this property
2616 : /// is omitted from the response.
2617 : String? end;
2618 :
2619 : /// A token corresponding to the start of `chunk`. This will be the same as
2620 : /// the value given in `from`.
2621 : String start;
2622 :
2623 : /// A list of state events relevant to showing the `chunk`. For example, if
2624 : /// `lazy_load_members` is enabled in the filter then this may contain
2625 : /// the membership events for the senders of events in the `chunk`.
2626 : ///
2627 : /// Unless `include_redundant_members` is `true`, the server
2628 : /// may remove membership events which would have already been
2629 : /// sent to the client in prior calls to this endpoint, assuming
2630 : /// the membership of those members has not changed.
2631 : List<MatrixEvent>? state;
2632 : }
2633 :
2634 : ///
2635 : @_NameSource('generated')
2636 : @EnhancedEnum()
2637 : enum ReceiptType {
2638 : @EnhancedEnumValue(name: 'm.fully_read')
2639 : mFullyRead,
2640 : @EnhancedEnumValue(name: 'm.read')
2641 : mRead,
2642 : @EnhancedEnumValue(name: 'm.read.private')
2643 : mReadPrivate
2644 : }
2645 :
2646 : ///
2647 : @_NameSource('spec')
2648 : class IncludeEventContext {
2649 0 : IncludeEventContext({
2650 : this.afterLimit,
2651 : this.beforeLimit,
2652 : this.includeProfile,
2653 : });
2654 :
2655 0 : IncludeEventContext.fromJson(Map<String, Object?> json)
2656 0 : : afterLimit = ((v) => v != null ? v as int : null)(json['after_limit']),
2657 : beforeLimit =
2658 0 : ((v) => v != null ? v as int : null)(json['before_limit']),
2659 : includeProfile =
2660 0 : ((v) => v != null ? v as bool : null)(json['include_profile']);
2661 0 : Map<String, Object?> toJson() {
2662 0 : final afterLimit = this.afterLimit;
2663 0 : final beforeLimit = this.beforeLimit;
2664 0 : final includeProfile = this.includeProfile;
2665 0 : return {
2666 0 : if (afterLimit != null) 'after_limit': afterLimit,
2667 0 : if (beforeLimit != null) 'before_limit': beforeLimit,
2668 0 : if (includeProfile != null) 'include_profile': includeProfile,
2669 : };
2670 : }
2671 :
2672 : /// How many events after the result are
2673 : /// returned. By default, this is `5`.
2674 : int? afterLimit;
2675 :
2676 : /// How many events before the result are
2677 : /// returned. By default, this is `5`.
2678 : int? beforeLimit;
2679 :
2680 : /// Requests that the server returns the
2681 : /// historic profile information for the users
2682 : /// that sent the events that were returned.
2683 : /// By default, this is `false`.
2684 : bool? includeProfile;
2685 : }
2686 :
2687 : ///
2688 : @_NameSource('spec')
2689 : class EventFilter {
2690 0 : EventFilter({
2691 : this.limit,
2692 : this.notSenders,
2693 : this.notTypes,
2694 : this.senders,
2695 : this.types,
2696 : });
2697 :
2698 0 : EventFilter.fromJson(Map<String, Object?> json)
2699 0 : : limit = ((v) => v != null ? v as int : null)(json['limit']),
2700 0 : notSenders = ((v) => v != null
2701 0 : ? (v as List).map((v) => v as String).toList()
2702 0 : : null)(json['not_senders']),
2703 0 : notTypes = ((v) => v != null
2704 0 : ? (v as List).map((v) => v as String).toList()
2705 0 : : null)(json['not_types']),
2706 0 : senders = ((v) => v != null
2707 0 : ? (v as List).map((v) => v as String).toList()
2708 0 : : null)(json['senders']),
2709 0 : types = ((v) => v != null
2710 0 : ? (v as List).map((v) => v as String).toList()
2711 0 : : null)(json['types']);
2712 0 : Map<String, Object?> toJson() {
2713 0 : final limit = this.limit;
2714 0 : final notSenders = this.notSenders;
2715 0 : final notTypes = this.notTypes;
2716 0 : final senders = this.senders;
2717 0 : final types = this.types;
2718 0 : return {
2719 0 : if (limit != null) 'limit': limit,
2720 0 : if (notSenders != null) 'not_senders': notSenders.map((v) => v).toList(),
2721 0 : if (notTypes != null) 'not_types': notTypes.map((v) => v).toList(),
2722 0 : if (senders != null) 'senders': senders.map((v) => v).toList(),
2723 0 : if (types != null) 'types': types.map((v) => v).toList(),
2724 : };
2725 : }
2726 :
2727 : /// The maximum number of events to return.
2728 : int? limit;
2729 :
2730 : /// A list of sender IDs to exclude. If this list is absent then no senders are excluded. A matching sender will be excluded even if it is listed in the `'senders'` filter.
2731 : List<String>? notSenders;
2732 :
2733 : /// A list of event types to exclude. If this list is absent then no event types are excluded. A matching type will be excluded even if it is listed in the `'types'` filter. A '*' can be used as a wildcard to match any sequence of characters.
2734 : List<String>? notTypes;
2735 :
2736 : /// A list of senders IDs to include. If this list is absent then all senders are included.
2737 : List<String>? senders;
2738 :
2739 : /// A list of event types to include. If this list is absent then all event types are included. A `'*'` can be used as a wildcard to match any sequence of characters.
2740 : List<String>? types;
2741 : }
2742 :
2743 : ///
2744 : @_NameSource('spec')
2745 : class RoomEventFilter {
2746 0 : RoomEventFilter({
2747 : this.containsUrl,
2748 : this.includeRedundantMembers,
2749 : this.lazyLoadMembers,
2750 : this.notRooms,
2751 : this.rooms,
2752 : this.unreadThreadNotifications,
2753 : });
2754 :
2755 0 : RoomEventFilter.fromJson(Map<String, Object?> json)
2756 : : containsUrl =
2757 0 : ((v) => v != null ? v as bool : null)(json['contains_url']),
2758 0 : includeRedundantMembers = ((v) =>
2759 0 : v != null ? v as bool : null)(json['include_redundant_members']),
2760 : lazyLoadMembers =
2761 0 : ((v) => v != null ? v as bool : null)(json['lazy_load_members']),
2762 0 : notRooms = ((v) => v != null
2763 0 : ? (v as List).map((v) => v as String).toList()
2764 0 : : null)(json['not_rooms']),
2765 0 : rooms = ((v) => v != null
2766 0 : ? (v as List).map((v) => v as String).toList()
2767 0 : : null)(json['rooms']),
2768 0 : unreadThreadNotifications = ((v) =>
2769 0 : v != null ? v as bool : null)(json['unread_thread_notifications']);
2770 0 : Map<String, Object?> toJson() {
2771 0 : final containsUrl = this.containsUrl;
2772 0 : final includeRedundantMembers = this.includeRedundantMembers;
2773 0 : final lazyLoadMembers = this.lazyLoadMembers;
2774 0 : final notRooms = this.notRooms;
2775 0 : final rooms = this.rooms;
2776 0 : final unreadThreadNotifications = this.unreadThreadNotifications;
2777 0 : return {
2778 0 : if (containsUrl != null) 'contains_url': containsUrl,
2779 : if (includeRedundantMembers != null)
2780 0 : 'include_redundant_members': includeRedundantMembers,
2781 0 : if (lazyLoadMembers != null) 'lazy_load_members': lazyLoadMembers,
2782 0 : if (notRooms != null) 'not_rooms': notRooms.map((v) => v).toList(),
2783 0 : if (rooms != null) 'rooms': rooms.map((v) => v).toList(),
2784 : if (unreadThreadNotifications != null)
2785 0 : 'unread_thread_notifications': unreadThreadNotifications,
2786 : };
2787 : }
2788 :
2789 : /// If `true`, includes only events with a `url` key in their content. If `false`, excludes those events. If omitted, `url` key is not considered for filtering.
2790 : bool? containsUrl;
2791 :
2792 : /// If `true`, sends all membership events for all events, even if they have already
2793 : /// been sent to the client. Does not
2794 : /// apply unless `lazy_load_members` is `true`. See
2795 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
2796 : /// for more information. Defaults to `false`.
2797 : bool? includeRedundantMembers;
2798 :
2799 : /// If `true`, enables lazy-loading of membership events. See
2800 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
2801 : /// for more information. Defaults to `false`.
2802 : bool? lazyLoadMembers;
2803 :
2804 : /// A list of room IDs to exclude. If this list is absent then no rooms are excluded. A matching room will be excluded even if it is listed in the `'rooms'` filter.
2805 : List<String>? notRooms;
2806 :
2807 : /// A list of room IDs to include. If this list is absent then all rooms are included.
2808 : List<String>? rooms;
2809 :
2810 : /// If `true`, enables per-[thread](https://spec.matrix.org/unstable/client-server-api/#threading) notification
2811 : /// counts. Only applies to the `/sync` endpoint. Defaults to `false`.
2812 : bool? unreadThreadNotifications;
2813 : }
2814 :
2815 : ///
2816 : @_NameSource('rule override generated')
2817 : class SearchFilter implements EventFilter, RoomEventFilter {
2818 0 : SearchFilter({
2819 : this.limit,
2820 : this.notSenders,
2821 : this.notTypes,
2822 : this.senders,
2823 : this.types,
2824 : this.containsUrl,
2825 : this.includeRedundantMembers,
2826 : this.lazyLoadMembers,
2827 : this.notRooms,
2828 : this.rooms,
2829 : this.unreadThreadNotifications,
2830 : });
2831 :
2832 0 : SearchFilter.fromJson(Map<String, Object?> json)
2833 0 : : limit = ((v) => v != null ? v as int : null)(json['limit']),
2834 0 : notSenders = ((v) => v != null
2835 0 : ? (v as List).map((v) => v as String).toList()
2836 0 : : null)(json['not_senders']),
2837 0 : notTypes = ((v) => v != null
2838 0 : ? (v as List).map((v) => v as String).toList()
2839 0 : : null)(json['not_types']),
2840 0 : senders = ((v) => v != null
2841 0 : ? (v as List).map((v) => v as String).toList()
2842 0 : : null)(json['senders']),
2843 0 : types = ((v) => v != null
2844 0 : ? (v as List).map((v) => v as String).toList()
2845 0 : : null)(json['types']),
2846 : containsUrl =
2847 0 : ((v) => v != null ? v as bool : null)(json['contains_url']),
2848 0 : includeRedundantMembers = ((v) =>
2849 0 : v != null ? v as bool : null)(json['include_redundant_members']),
2850 : lazyLoadMembers =
2851 0 : ((v) => v != null ? v as bool : null)(json['lazy_load_members']),
2852 0 : notRooms = ((v) => v != null
2853 0 : ? (v as List).map((v) => v as String).toList()
2854 0 : : null)(json['not_rooms']),
2855 0 : rooms = ((v) => v != null
2856 0 : ? (v as List).map((v) => v as String).toList()
2857 0 : : null)(json['rooms']),
2858 0 : unreadThreadNotifications = ((v) =>
2859 0 : v != null ? v as bool : null)(json['unread_thread_notifications']);
2860 0 : @override
2861 : Map<String, Object?> toJson() {
2862 0 : final limit = this.limit;
2863 0 : final notSenders = this.notSenders;
2864 0 : final notTypes = this.notTypes;
2865 0 : final senders = this.senders;
2866 0 : final types = this.types;
2867 0 : final containsUrl = this.containsUrl;
2868 0 : final includeRedundantMembers = this.includeRedundantMembers;
2869 0 : final lazyLoadMembers = this.lazyLoadMembers;
2870 0 : final notRooms = this.notRooms;
2871 0 : final rooms = this.rooms;
2872 0 : final unreadThreadNotifications = this.unreadThreadNotifications;
2873 0 : return {
2874 0 : if (limit != null) 'limit': limit,
2875 0 : if (notSenders != null) 'not_senders': notSenders.map((v) => v).toList(),
2876 0 : if (notTypes != null) 'not_types': notTypes.map((v) => v).toList(),
2877 0 : if (senders != null) 'senders': senders.map((v) => v).toList(),
2878 0 : if (types != null) 'types': types.map((v) => v).toList(),
2879 0 : if (containsUrl != null) 'contains_url': containsUrl,
2880 : if (includeRedundantMembers != null)
2881 0 : 'include_redundant_members': includeRedundantMembers,
2882 0 : if (lazyLoadMembers != null) 'lazy_load_members': lazyLoadMembers,
2883 0 : if (notRooms != null) 'not_rooms': notRooms.map((v) => v).toList(),
2884 0 : if (rooms != null) 'rooms': rooms.map((v) => v).toList(),
2885 : if (unreadThreadNotifications != null)
2886 0 : 'unread_thread_notifications': unreadThreadNotifications,
2887 : };
2888 : }
2889 :
2890 : /// The maximum number of events to return.
2891 : @override
2892 : int? limit;
2893 :
2894 : /// A list of sender IDs to exclude. If this list is absent then no senders are excluded. A matching sender will be excluded even if it is listed in the `'senders'` filter.
2895 : @override
2896 : List<String>? notSenders;
2897 :
2898 : /// A list of event types to exclude. If this list is absent then no event types are excluded. A matching type will be excluded even if it is listed in the `'types'` filter. A '*' can be used as a wildcard to match any sequence of characters.
2899 : @override
2900 : List<String>? notTypes;
2901 :
2902 : /// A list of senders IDs to include. If this list is absent then all senders are included.
2903 : @override
2904 : List<String>? senders;
2905 :
2906 : /// A list of event types to include. If this list is absent then all event types are included. A `'*'` can be used as a wildcard to match any sequence of characters.
2907 : @override
2908 : List<String>? types;
2909 :
2910 : /// If `true`, includes only events with a `url` key in their content. If `false`, excludes those events. If omitted, `url` key is not considered for filtering.
2911 : @override
2912 : bool? containsUrl;
2913 :
2914 : /// If `true`, sends all membership events for all events, even if they have already
2915 : /// been sent to the client. Does not
2916 : /// apply unless `lazy_load_members` is `true`. See
2917 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
2918 : /// for more information. Defaults to `false`.
2919 : @override
2920 : bool? includeRedundantMembers;
2921 :
2922 : /// If `true`, enables lazy-loading of membership events. See
2923 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
2924 : /// for more information. Defaults to `false`.
2925 : @override
2926 : bool? lazyLoadMembers;
2927 :
2928 : /// A list of room IDs to exclude. If this list is absent then no rooms are excluded. A matching room will be excluded even if it is listed in the `'rooms'` filter.
2929 : @override
2930 : List<String>? notRooms;
2931 :
2932 : /// A list of room IDs to include. If this list is absent then all rooms are included.
2933 : @override
2934 : List<String>? rooms;
2935 :
2936 : /// If `true`, enables per-[thread](https://spec.matrix.org/unstable/client-server-api/#threading) notification
2937 : /// counts. Only applies to the `/sync` endpoint. Defaults to `false`.
2938 : @override
2939 : bool? unreadThreadNotifications;
2940 : }
2941 :
2942 : ///
2943 : @_NameSource('rule override generated')
2944 : @EnhancedEnum()
2945 : enum GroupKey {
2946 : @EnhancedEnumValue(name: 'room_id')
2947 : roomId,
2948 : @EnhancedEnumValue(name: 'sender')
2949 : sender
2950 : }
2951 :
2952 : /// Configuration for group.
2953 : @_NameSource('spec')
2954 : class Group {
2955 0 : Group({
2956 : this.key,
2957 : });
2958 :
2959 0 : Group.fromJson(Map<String, Object?> json)
2960 0 : : key = ((v) => v != null
2961 0 : ? GroupKey.values.fromString(v as String)!
2962 0 : : null)(json['key']);
2963 0 : Map<String, Object?> toJson() {
2964 0 : final key = this.key;
2965 0 : return {
2966 0 : if (key != null) 'key': key.name,
2967 : };
2968 : }
2969 :
2970 : /// Key that defines the group.
2971 : GroupKey? key;
2972 : }
2973 :
2974 : ///
2975 : @_NameSource('spec')
2976 : class Groupings {
2977 0 : Groupings({
2978 : this.groupBy,
2979 : });
2980 :
2981 0 : Groupings.fromJson(Map<String, Object?> json)
2982 0 : : groupBy = ((v) => v != null
2983 : ? (v as List)
2984 0 : .map((v) => Group.fromJson(v as Map<String, Object?>))
2985 0 : .toList()
2986 0 : : null)(json['group_by']);
2987 0 : Map<String, Object?> toJson() {
2988 0 : final groupBy = this.groupBy;
2989 0 : return {
2990 0 : if (groupBy != null) 'group_by': groupBy.map((v) => v.toJson()).toList(),
2991 : };
2992 : }
2993 :
2994 : /// List of groups to request.
2995 : List<Group>? groupBy;
2996 : }
2997 :
2998 : ///
2999 : @_NameSource('rule override generated')
3000 : @EnhancedEnum()
3001 : enum KeyKind {
3002 : @EnhancedEnumValue(name: 'content.body')
3003 : contentBody,
3004 : @EnhancedEnumValue(name: 'content.name')
3005 : contentName,
3006 : @EnhancedEnumValue(name: 'content.topic')
3007 : contentTopic
3008 : }
3009 :
3010 : ///
3011 : @_NameSource('rule override generated')
3012 : @EnhancedEnum()
3013 : enum SearchOrder {
3014 : @EnhancedEnumValue(name: 'rank')
3015 : rank,
3016 : @EnhancedEnumValue(name: 'recent')
3017 : recent
3018 : }
3019 :
3020 : ///
3021 : @_NameSource('spec')
3022 : class RoomEventsCriteria {
3023 0 : RoomEventsCriteria({
3024 : this.eventContext,
3025 : this.filter,
3026 : this.groupings,
3027 : this.includeState,
3028 : this.keys,
3029 : this.orderBy,
3030 : required this.searchTerm,
3031 : });
3032 :
3033 0 : RoomEventsCriteria.fromJson(Map<String, Object?> json)
3034 0 : : eventContext = ((v) => v != null
3035 0 : ? IncludeEventContext.fromJson(v as Map<String, Object?>)
3036 0 : : null)(json['event_context']),
3037 0 : filter = ((v) => v != null
3038 0 : ? SearchFilter.fromJson(v as Map<String, Object?>)
3039 0 : : null)(json['filter']),
3040 0 : groupings = ((v) => v != null
3041 0 : ? Groupings.fromJson(v as Map<String, Object?>)
3042 0 : : null)(json['groupings']),
3043 : includeState =
3044 0 : ((v) => v != null ? v as bool : null)(json['include_state']),
3045 0 : keys = ((v) => v != null
3046 : ? (v as List)
3047 0 : .map((v) => KeyKind.values.fromString(v as String)!)
3048 0 : .toList()
3049 0 : : null)(json['keys']),
3050 0 : orderBy = ((v) => v != null
3051 0 : ? SearchOrder.values.fromString(v as String)!
3052 0 : : null)(json['order_by']),
3053 0 : searchTerm = json['search_term'] as String;
3054 0 : Map<String, Object?> toJson() {
3055 0 : final eventContext = this.eventContext;
3056 0 : final filter = this.filter;
3057 0 : final groupings = this.groupings;
3058 0 : final includeState = this.includeState;
3059 0 : final keys = this.keys;
3060 0 : final orderBy = this.orderBy;
3061 0 : return {
3062 0 : if (eventContext != null) 'event_context': eventContext.toJson(),
3063 0 : if (filter != null) 'filter': filter.toJson(),
3064 0 : if (groupings != null) 'groupings': groupings.toJson(),
3065 0 : if (includeState != null) 'include_state': includeState,
3066 0 : if (keys != null) 'keys': keys.map((v) => v.name).toList(),
3067 0 : if (orderBy != null) 'order_by': orderBy.name,
3068 0 : 'search_term': searchTerm,
3069 : };
3070 : }
3071 :
3072 : /// Configures whether any context for the events
3073 : /// returned are included in the response.
3074 : IncludeEventContext? eventContext;
3075 :
3076 : /// This takes a [filter](https://spec.matrix.org/unstable/client-server-api/#filtering).
3077 : SearchFilter? filter;
3078 :
3079 : /// Requests that the server partitions the result set
3080 : /// based on the provided list of keys.
3081 : Groupings? groupings;
3082 :
3083 : /// Requests the server return the current state for
3084 : /// each room returned.
3085 : bool? includeState;
3086 :
3087 : /// The keys to search. Defaults to all.
3088 : List<KeyKind>? keys;
3089 :
3090 : /// The order in which to search for results.
3091 : /// By default, this is `"rank"`.
3092 : SearchOrder? orderBy;
3093 :
3094 : /// The string to search events for
3095 : String searchTerm;
3096 : }
3097 :
3098 : ///
3099 : @_NameSource('spec')
3100 : class Categories {
3101 0 : Categories({
3102 : this.roomEvents,
3103 : });
3104 :
3105 0 : Categories.fromJson(Map<String, Object?> json)
3106 0 : : roomEvents = ((v) => v != null
3107 0 : ? RoomEventsCriteria.fromJson(v as Map<String, Object?>)
3108 0 : : null)(json['room_events']);
3109 0 : Map<String, Object?> toJson() {
3110 0 : final roomEvents = this.roomEvents;
3111 0 : return {
3112 0 : if (roomEvents != null) 'room_events': roomEvents.toJson(),
3113 : };
3114 : }
3115 :
3116 : /// Mapping of category name to search criteria.
3117 : RoomEventsCriteria? roomEvents;
3118 : }
3119 :
3120 : /// The results for a particular group value.
3121 : @_NameSource('spec')
3122 : class GroupValue {
3123 0 : GroupValue({
3124 : this.nextBatch,
3125 : this.order,
3126 : this.results,
3127 : });
3128 :
3129 0 : GroupValue.fromJson(Map<String, Object?> json)
3130 0 : : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
3131 0 : order = ((v) => v != null ? v as int : null)(json['order']),
3132 0 : results = ((v) => v != null
3133 0 : ? (v as List).map((v) => v as String).toList()
3134 0 : : null)(json['results']);
3135 0 : Map<String, Object?> toJson() {
3136 0 : final nextBatch = this.nextBatch;
3137 0 : final order = this.order;
3138 0 : final results = this.results;
3139 0 : return {
3140 0 : if (nextBatch != null) 'next_batch': nextBatch,
3141 0 : if (order != null) 'order': order,
3142 0 : if (results != null) 'results': results.map((v) => v).toList(),
3143 : };
3144 : }
3145 :
3146 : /// Token that can be used to get the next batch
3147 : /// of results in the group, by passing as the
3148 : /// `next_batch` parameter to the next call. If
3149 : /// this field is absent, there are no more
3150 : /// results in this group.
3151 : String? nextBatch;
3152 :
3153 : /// Key that can be used to order different
3154 : /// groups.
3155 : int? order;
3156 :
3157 : /// Which results are in this group.
3158 : List<String>? results;
3159 : }
3160 :
3161 : ///
3162 : @_NameSource('spec')
3163 : class UserProfile {
3164 0 : UserProfile({
3165 : this.avatarUrl,
3166 : this.displayname,
3167 : });
3168 :
3169 0 : UserProfile.fromJson(Map<String, Object?> json)
3170 0 : : avatarUrl = ((v) =>
3171 0 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
3172 : displayname =
3173 0 : ((v) => v != null ? v as String : null)(json['displayname']);
3174 0 : Map<String, Object?> toJson() {
3175 0 : final avatarUrl = this.avatarUrl;
3176 0 : final displayname = this.displayname;
3177 0 : return {
3178 0 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
3179 0 : if (displayname != null) 'displayname': displayname,
3180 : };
3181 : }
3182 :
3183 : ///
3184 : Uri? avatarUrl;
3185 :
3186 : ///
3187 : String? displayname;
3188 : }
3189 :
3190 : ///
3191 : @_NameSource('rule override spec')
3192 : class SearchResultsEventContext {
3193 0 : SearchResultsEventContext({
3194 : this.end,
3195 : this.eventsAfter,
3196 : this.eventsBefore,
3197 : this.profileInfo,
3198 : this.start,
3199 : });
3200 :
3201 0 : SearchResultsEventContext.fromJson(Map<String, Object?> json)
3202 0 : : end = ((v) => v != null ? v as String : null)(json['end']),
3203 0 : eventsAfter = ((v) => v != null
3204 : ? (v as List)
3205 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
3206 0 : .toList()
3207 0 : : null)(json['events_after']),
3208 0 : eventsBefore = ((v) => v != null
3209 : ? (v as List)
3210 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
3211 0 : .toList()
3212 0 : : null)(json['events_before']),
3213 0 : profileInfo = ((v) => v != null
3214 0 : ? (v as Map<String, Object?>).map((k, v) =>
3215 0 : MapEntry(k, UserProfile.fromJson(v as Map<String, Object?>)))
3216 0 : : null)(json['profile_info']),
3217 0 : start = ((v) => v != null ? v as String : null)(json['start']);
3218 0 : Map<String, Object?> toJson() {
3219 0 : final end = this.end;
3220 0 : final eventsAfter = this.eventsAfter;
3221 0 : final eventsBefore = this.eventsBefore;
3222 0 : final profileInfo = this.profileInfo;
3223 0 : final start = this.start;
3224 0 : return {
3225 0 : if (end != null) 'end': end,
3226 : if (eventsAfter != null)
3227 0 : 'events_after': eventsAfter.map((v) => v.toJson()).toList(),
3228 : if (eventsBefore != null)
3229 0 : 'events_before': eventsBefore.map((v) => v.toJson()).toList(),
3230 : if (profileInfo != null)
3231 0 : 'profile_info': profileInfo.map((k, v) => MapEntry(k, v.toJson())),
3232 0 : if (start != null) 'start': start,
3233 : };
3234 : }
3235 :
3236 : /// Pagination token for the end of the chunk
3237 : String? end;
3238 :
3239 : /// Events just after the result.
3240 : List<MatrixEvent>? eventsAfter;
3241 :
3242 : /// Events just before the result.
3243 : List<MatrixEvent>? eventsBefore;
3244 :
3245 : /// The historic profile information of the
3246 : /// users that sent the events returned.
3247 : ///
3248 : /// The `string` key is the user ID for which
3249 : /// the profile belongs to.
3250 : Map<String, UserProfile>? profileInfo;
3251 :
3252 : /// Pagination token for the start of the chunk
3253 : String? start;
3254 : }
3255 :
3256 : /// The result object.
3257 : @_NameSource('spec')
3258 : class Result {
3259 0 : Result({
3260 : this.context,
3261 : this.rank,
3262 : this.result,
3263 : });
3264 :
3265 0 : Result.fromJson(Map<String, Object?> json)
3266 0 : : context = ((v) => v != null
3267 0 : ? SearchResultsEventContext.fromJson(v as Map<String, Object?>)
3268 0 : : null)(json['context']),
3269 0 : rank = ((v) => v != null ? (v as num).toDouble() : null)(json['rank']),
3270 0 : result = ((v) => v != null
3271 0 : ? MatrixEvent.fromJson(v as Map<String, Object?>)
3272 0 : : null)(json['result']);
3273 0 : Map<String, Object?> toJson() {
3274 0 : final context = this.context;
3275 0 : final rank = this.rank;
3276 0 : final result = this.result;
3277 0 : return {
3278 0 : if (context != null) 'context': context.toJson(),
3279 0 : if (rank != null) 'rank': rank,
3280 0 : if (result != null) 'result': result.toJson(),
3281 : };
3282 : }
3283 :
3284 : /// Context for result, if requested.
3285 : SearchResultsEventContext? context;
3286 :
3287 : /// A number that describes how closely this result matches the search. Higher is closer.
3288 : double? rank;
3289 :
3290 : /// The event that matched.
3291 : MatrixEvent? result;
3292 : }
3293 :
3294 : ///
3295 : @_NameSource('spec')
3296 : class ResultRoomEvents {
3297 0 : ResultRoomEvents({
3298 : this.count,
3299 : this.groups,
3300 : this.highlights,
3301 : this.nextBatch,
3302 : this.results,
3303 : this.state,
3304 : });
3305 :
3306 0 : ResultRoomEvents.fromJson(Map<String, Object?> json)
3307 0 : : count = ((v) => v != null ? v as int : null)(json['count']),
3308 0 : groups = ((v) => v != null
3309 0 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
3310 : k,
3311 0 : (v as Map<String, Object?>).map((k, v) => MapEntry(
3312 0 : k, GroupValue.fromJson(v as Map<String, Object?>)))))
3313 0 : : null)(json['groups']),
3314 0 : highlights = ((v) => v != null
3315 0 : ? (v as List).map((v) => v as String).toList()
3316 0 : : null)(json['highlights']),
3317 0 : nextBatch = ((v) => v != null ? v as String : null)(json['next_batch']),
3318 0 : results = ((v) => v != null
3319 : ? (v as List)
3320 0 : .map((v) => Result.fromJson(v as Map<String, Object?>))
3321 0 : .toList()
3322 0 : : null)(json['results']),
3323 0 : state = ((v) => v != null
3324 0 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(
3325 : k,
3326 : (v as List)
3327 0 : .map((v) => MatrixEvent.fromJson(v as Map<String, Object?>))
3328 0 : .toList()))
3329 0 : : null)(json['state']);
3330 0 : Map<String, Object?> toJson() {
3331 0 : final count = this.count;
3332 0 : final groups = this.groups;
3333 0 : final highlights = this.highlights;
3334 0 : final nextBatch = this.nextBatch;
3335 0 : final results = this.results;
3336 0 : final state = this.state;
3337 0 : return {
3338 0 : if (count != null) 'count': count,
3339 : if (groups != null)
3340 0 : 'groups': groups.map(
3341 0 : (k, v) => MapEntry(k, v.map((k, v) => MapEntry(k, v.toJson())))),
3342 0 : if (highlights != null) 'highlights': highlights.map((v) => v).toList(),
3343 0 : if (nextBatch != null) 'next_batch': nextBatch,
3344 0 : if (results != null) 'results': results.map((v) => v.toJson()).toList(),
3345 : if (state != null)
3346 0 : 'state':
3347 0 : state.map((k, v) => MapEntry(k, v.map((v) => v.toJson()).toList())),
3348 : };
3349 : }
3350 :
3351 : /// An approximate count of the total number of results found.
3352 : int? count;
3353 :
3354 : /// Any groups that were requested.
3355 : ///
3356 : /// The outer `string` key is the group key requested (eg: `room_id`
3357 : /// or `sender`). The inner `string` key is the grouped value (eg:
3358 : /// a room's ID or a user's ID).
3359 : Map<String, Map<String, GroupValue>>? groups;
3360 :
3361 : /// List of words which should be highlighted, useful for stemming which may change the query terms.
3362 : List<String>? highlights;
3363 :
3364 : /// Token that can be used to get the next batch of
3365 : /// results, by passing as the `next_batch` parameter to
3366 : /// the next call. If this field is absent, there are no
3367 : /// more results.
3368 : String? nextBatch;
3369 :
3370 : /// List of results in the requested order.
3371 : List<Result>? results;
3372 :
3373 : /// The current state for every room in the results.
3374 : /// This is included if the request had the
3375 : /// `include_state` key set with a value of `true`.
3376 : ///
3377 : /// The `string` key is the room ID for which the `State
3378 : /// Event` array belongs to.
3379 : Map<String, List<MatrixEvent>>? state;
3380 : }
3381 :
3382 : ///
3383 : @_NameSource('spec')
3384 : class ResultCategories {
3385 0 : ResultCategories({
3386 : this.roomEvents,
3387 : });
3388 :
3389 0 : ResultCategories.fromJson(Map<String, Object?> json)
3390 0 : : roomEvents = ((v) => v != null
3391 0 : ? ResultRoomEvents.fromJson(v as Map<String, Object?>)
3392 0 : : null)(json['room_events']);
3393 0 : Map<String, Object?> toJson() {
3394 0 : final roomEvents = this.roomEvents;
3395 0 : return {
3396 0 : if (roomEvents != null) 'room_events': roomEvents.toJson(),
3397 : };
3398 : }
3399 :
3400 : /// Mapping of category name to search criteria.
3401 : ResultRoomEvents? roomEvents;
3402 : }
3403 :
3404 : ///
3405 : @_NameSource('rule override spec')
3406 : class SearchResults {
3407 0 : SearchResults({
3408 : required this.searchCategories,
3409 : });
3410 :
3411 0 : SearchResults.fromJson(Map<String, Object?> json)
3412 0 : : searchCategories = ResultCategories.fromJson(
3413 0 : json['search_categories'] as Map<String, Object?>);
3414 0 : Map<String, Object?> toJson() => {
3415 0 : 'search_categories': searchCategories.toJson(),
3416 : };
3417 :
3418 : /// Describes which categories to search in and their criteria.
3419 : ResultCategories searchCategories;
3420 : }
3421 :
3422 : ///
3423 : @_NameSource('spec')
3424 : class Location {
3425 0 : Location({
3426 : required this.alias,
3427 : required this.fields,
3428 : required this.protocol,
3429 : });
3430 :
3431 0 : Location.fromJson(Map<String, Object?> json)
3432 0 : : alias = json['alias'] as String,
3433 0 : fields = json['fields'] as Map<String, Object?>,
3434 0 : protocol = json['protocol'] as String;
3435 0 : Map<String, Object?> toJson() => {
3436 0 : 'alias': alias,
3437 0 : 'fields': fields,
3438 0 : 'protocol': protocol,
3439 : };
3440 :
3441 : /// An alias for a matrix room.
3442 : String alias;
3443 :
3444 : /// Information used to identify this third party location.
3445 : Map<String, Object?> fields;
3446 :
3447 : /// The protocol ID that the third party location is a part of.
3448 : String protocol;
3449 : }
3450 :
3451 : /// Definition of valid values for a field.
3452 : @_NameSource('spec')
3453 : class FieldType {
3454 0 : FieldType({
3455 : required this.placeholder,
3456 : required this.regexp,
3457 : });
3458 :
3459 0 : FieldType.fromJson(Map<String, Object?> json)
3460 0 : : placeholder = json['placeholder'] as String,
3461 0 : regexp = json['regexp'] as String;
3462 0 : Map<String, Object?> toJson() => {
3463 0 : 'placeholder': placeholder,
3464 0 : 'regexp': regexp,
3465 : };
3466 :
3467 : /// An placeholder serving as a valid example of the field value.
3468 : String placeholder;
3469 :
3470 : /// A regular expression for validation of a field's value. This may be relatively
3471 : /// coarse to verify the value as the application service providing this protocol
3472 : /// may apply additional validation or filtering.
3473 : String regexp;
3474 : }
3475 :
3476 : ///
3477 : @_NameSource('spec')
3478 : class ProtocolInstance {
3479 0 : ProtocolInstance({
3480 : required this.desc,
3481 : required this.fields,
3482 : this.icon,
3483 : required this.networkId,
3484 : });
3485 :
3486 0 : ProtocolInstance.fromJson(Map<String, Object?> json)
3487 0 : : desc = json['desc'] as String,
3488 0 : fields = json['fields'] as Map<String, Object?>,
3489 0 : icon = ((v) => v != null ? v as String : null)(json['icon']),
3490 0 : networkId = json['network_id'] as String;
3491 0 : Map<String, Object?> toJson() {
3492 0 : final icon = this.icon;
3493 0 : return {
3494 0 : 'desc': desc,
3495 0 : 'fields': fields,
3496 0 : if (icon != null) 'icon': icon,
3497 0 : 'network_id': networkId,
3498 : };
3499 : }
3500 :
3501 : /// A human-readable description for the protocol, such as the name.
3502 : String desc;
3503 :
3504 : /// Preset values for `fields` the client may use to search by.
3505 : Map<String, Object?> fields;
3506 :
3507 : /// An optional content URI representing the protocol. Overrides the one provided
3508 : /// at the higher level Protocol object.
3509 : String? icon;
3510 :
3511 : /// A unique identifier across all instances.
3512 : String networkId;
3513 : }
3514 :
3515 : ///
3516 : @_NameSource('spec')
3517 : class Protocol {
3518 0 : Protocol({
3519 : required this.fieldTypes,
3520 : required this.icon,
3521 : required this.instances,
3522 : required this.locationFields,
3523 : required this.userFields,
3524 : });
3525 :
3526 0 : Protocol.fromJson(Map<String, Object?> json)
3527 0 : : fieldTypes = (json['field_types'] as Map<String, Object?>).map((k, v) =>
3528 0 : MapEntry(k, FieldType.fromJson(v as Map<String, Object?>))),
3529 0 : icon = json['icon'] as String,
3530 0 : instances = (json['instances'] as List)
3531 0 : .map((v) => ProtocolInstance.fromJson(v as Map<String, Object?>))
3532 0 : .toList(),
3533 : locationFields =
3534 0 : (json['location_fields'] as List).map((v) => v as String).toList(),
3535 : userFields =
3536 0 : (json['user_fields'] as List).map((v) => v as String).toList();
3537 0 : Map<String, Object?> toJson() => {
3538 0 : 'field_types': fieldTypes.map((k, v) => MapEntry(k, v.toJson())),
3539 0 : 'icon': icon,
3540 0 : 'instances': instances.map((v) => v.toJson()).toList(),
3541 0 : 'location_fields': locationFields.map((v) => v).toList(),
3542 0 : 'user_fields': userFields.map((v) => v).toList(),
3543 : };
3544 :
3545 : /// The type definitions for the fields defined in the `user_fields` and
3546 : /// `location_fields`. Each entry in those arrays MUST have an entry here. The
3547 : /// `string` key for this object is field name itself.
3548 : ///
3549 : /// May be an empty object if no fields are defined.
3550 : Map<String, FieldType> fieldTypes;
3551 :
3552 : /// A content URI representing an icon for the third party protocol.
3553 : String icon;
3554 :
3555 : /// A list of objects representing independent instances of configuration.
3556 : /// For example, multiple networks on IRC if multiple are provided by the
3557 : /// same application service.
3558 : List<ProtocolInstance> instances;
3559 :
3560 : /// Fields which may be used to identify a third party location. These should be
3561 : /// ordered to suggest the way that entities may be grouped, where higher
3562 : /// groupings are ordered first. For example, the name of a network should be
3563 : /// searched before the name of a channel.
3564 : List<String> locationFields;
3565 :
3566 : /// Fields which may be used to identify a third party user. These should be
3567 : /// ordered to suggest the way that entities may be grouped, where higher
3568 : /// groupings are ordered first. For example, the name of a network should be
3569 : /// searched before the nickname of a user.
3570 : List<String> userFields;
3571 : }
3572 :
3573 : ///
3574 : @_NameSource('rule override spec')
3575 : class ThirdPartyUser {
3576 0 : ThirdPartyUser({
3577 : required this.fields,
3578 : required this.protocol,
3579 : required this.userid,
3580 : });
3581 :
3582 0 : ThirdPartyUser.fromJson(Map<String, Object?> json)
3583 0 : : fields = json['fields'] as Map<String, Object?>,
3584 0 : protocol = json['protocol'] as String,
3585 0 : userid = json['userid'] as String;
3586 0 : Map<String, Object?> toJson() => {
3587 0 : 'fields': fields,
3588 0 : 'protocol': protocol,
3589 0 : 'userid': userid,
3590 : };
3591 :
3592 : /// Information used to identify this third party location.
3593 : Map<String, Object?> fields;
3594 :
3595 : /// The protocol ID that the third party location is a part of.
3596 : String protocol;
3597 :
3598 : /// A Matrix User ID represting a third party user.
3599 : String userid;
3600 : }
3601 :
3602 : ///
3603 : @_NameSource('generated')
3604 : @EnhancedEnum()
3605 : enum EventFormat {
3606 : @EnhancedEnumValue(name: 'client')
3607 : client,
3608 : @EnhancedEnumValue(name: 'federation')
3609 : federation
3610 : }
3611 :
3612 : ///
3613 : @_NameSource('rule override generated')
3614 : class StateFilter implements EventFilter, RoomEventFilter {
3615 39 : StateFilter({
3616 : this.limit,
3617 : this.notSenders,
3618 : this.notTypes,
3619 : this.senders,
3620 : this.types,
3621 : this.containsUrl,
3622 : this.includeRedundantMembers,
3623 : this.lazyLoadMembers,
3624 : this.notRooms,
3625 : this.rooms,
3626 : this.unreadThreadNotifications,
3627 : });
3628 :
3629 0 : StateFilter.fromJson(Map<String, Object?> json)
3630 0 : : limit = ((v) => v != null ? v as int : null)(json['limit']),
3631 0 : notSenders = ((v) => v != null
3632 0 : ? (v as List).map((v) => v as String).toList()
3633 0 : : null)(json['not_senders']),
3634 0 : notTypes = ((v) => v != null
3635 0 : ? (v as List).map((v) => v as String).toList()
3636 0 : : null)(json['not_types']),
3637 0 : senders = ((v) => v != null
3638 0 : ? (v as List).map((v) => v as String).toList()
3639 0 : : null)(json['senders']),
3640 0 : types = ((v) => v != null
3641 0 : ? (v as List).map((v) => v as String).toList()
3642 0 : : null)(json['types']),
3643 : containsUrl =
3644 0 : ((v) => v != null ? v as bool : null)(json['contains_url']),
3645 0 : includeRedundantMembers = ((v) =>
3646 0 : v != null ? v as bool : null)(json['include_redundant_members']),
3647 : lazyLoadMembers =
3648 0 : ((v) => v != null ? v as bool : null)(json['lazy_load_members']),
3649 0 : notRooms = ((v) => v != null
3650 0 : ? (v as List).map((v) => v as String).toList()
3651 0 : : null)(json['not_rooms']),
3652 0 : rooms = ((v) => v != null
3653 0 : ? (v as List).map((v) => v as String).toList()
3654 0 : : null)(json['rooms']),
3655 0 : unreadThreadNotifications = ((v) =>
3656 0 : v != null ? v as bool : null)(json['unread_thread_notifications']);
3657 32 : @override
3658 : Map<String, Object?> toJson() {
3659 32 : final limit = this.limit;
3660 32 : final notSenders = this.notSenders;
3661 32 : final notTypes = this.notTypes;
3662 32 : final senders = this.senders;
3663 32 : final types = this.types;
3664 32 : final containsUrl = this.containsUrl;
3665 32 : final includeRedundantMembers = this.includeRedundantMembers;
3666 32 : final lazyLoadMembers = this.lazyLoadMembers;
3667 32 : final notRooms = this.notRooms;
3668 32 : final rooms = this.rooms;
3669 32 : final unreadThreadNotifications = this.unreadThreadNotifications;
3670 32 : return {
3671 0 : if (limit != null) 'limit': limit,
3672 0 : if (notSenders != null) 'not_senders': notSenders.map((v) => v).toList(),
3673 0 : if (notTypes != null) 'not_types': notTypes.map((v) => v).toList(),
3674 0 : if (senders != null) 'senders': senders.map((v) => v).toList(),
3675 0 : if (types != null) 'types': types.map((v) => v).toList(),
3676 0 : if (containsUrl != null) 'contains_url': containsUrl,
3677 : if (includeRedundantMembers != null)
3678 0 : 'include_redundant_members': includeRedundantMembers,
3679 32 : if (lazyLoadMembers != null) 'lazy_load_members': lazyLoadMembers,
3680 0 : if (notRooms != null) 'not_rooms': notRooms.map((v) => v).toList(),
3681 0 : if (rooms != null) 'rooms': rooms.map((v) => v).toList(),
3682 : if (unreadThreadNotifications != null)
3683 0 : 'unread_thread_notifications': unreadThreadNotifications,
3684 : };
3685 : }
3686 :
3687 : /// The maximum number of events to return.
3688 : @override
3689 : int? limit;
3690 :
3691 : /// A list of sender IDs to exclude. If this list is absent then no senders are excluded. A matching sender will be excluded even if it is listed in the `'senders'` filter.
3692 : @override
3693 : List<String>? notSenders;
3694 :
3695 : /// A list of event types to exclude. If this list is absent then no event types are excluded. A matching type will be excluded even if it is listed in the `'types'` filter. A '*' can be used as a wildcard to match any sequence of characters.
3696 : @override
3697 : List<String>? notTypes;
3698 :
3699 : /// A list of senders IDs to include. If this list is absent then all senders are included.
3700 : @override
3701 : List<String>? senders;
3702 :
3703 : /// A list of event types to include. If this list is absent then all event types are included. A `'*'` can be used as a wildcard to match any sequence of characters.
3704 : @override
3705 : List<String>? types;
3706 :
3707 : /// If `true`, includes only events with a `url` key in their content. If `false`, excludes those events. If omitted, `url` key is not considered for filtering.
3708 : @override
3709 : bool? containsUrl;
3710 :
3711 : /// If `true`, sends all membership events for all events, even if they have already
3712 : /// been sent to the client. Does not
3713 : /// apply unless `lazy_load_members` is `true`. See
3714 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
3715 : /// for more information. Defaults to `false`.
3716 : @override
3717 : bool? includeRedundantMembers;
3718 :
3719 : /// If `true`, enables lazy-loading of membership events. See
3720 : /// [Lazy-loading room members](https://spec.matrix.org/unstable/client-server-api/#lazy-loading-room-members)
3721 : /// for more information. Defaults to `false`.
3722 : @override
3723 : bool? lazyLoadMembers;
3724 :
3725 : /// A list of room IDs to exclude. If this list is absent then no rooms are excluded. A matching room will be excluded even if it is listed in the `'rooms'` filter.
3726 : @override
3727 : List<String>? notRooms;
3728 :
3729 : /// A list of room IDs to include. If this list is absent then all rooms are included.
3730 : @override
3731 : List<String>? rooms;
3732 :
3733 : /// If `true`, enables per-[thread](https://spec.matrix.org/unstable/client-server-api/#threading) notification
3734 : /// counts. Only applies to the `/sync` endpoint. Defaults to `false`.
3735 : @override
3736 : bool? unreadThreadNotifications;
3737 : }
3738 :
3739 : ///
3740 : @_NameSource('spec')
3741 : class RoomFilter {
3742 39 : RoomFilter({
3743 : this.accountData,
3744 : this.ephemeral,
3745 : this.includeLeave,
3746 : this.notRooms,
3747 : this.rooms,
3748 : this.state,
3749 : this.timeline,
3750 : });
3751 :
3752 0 : RoomFilter.fromJson(Map<String, Object?> json)
3753 0 : : accountData = ((v) => v != null
3754 0 : ? StateFilter.fromJson(v as Map<String, Object?>)
3755 0 : : null)(json['account_data']),
3756 0 : ephemeral = ((v) => v != null
3757 0 : ? StateFilter.fromJson(v as Map<String, Object?>)
3758 0 : : null)(json['ephemeral']),
3759 : includeLeave =
3760 0 : ((v) => v != null ? v as bool : null)(json['include_leave']),
3761 0 : notRooms = ((v) => v != null
3762 0 : ? (v as List).map((v) => v as String).toList()
3763 0 : : null)(json['not_rooms']),
3764 0 : rooms = ((v) => v != null
3765 0 : ? (v as List).map((v) => v as String).toList()
3766 0 : : null)(json['rooms']),
3767 0 : state = ((v) => v != null
3768 0 : ? StateFilter.fromJson(v as Map<String, Object?>)
3769 0 : : null)(json['state']),
3770 0 : timeline = ((v) => v != null
3771 0 : ? StateFilter.fromJson(v as Map<String, Object?>)
3772 0 : : null)(json['timeline']);
3773 32 : Map<String, Object?> toJson() {
3774 32 : final accountData = this.accountData;
3775 32 : final ephemeral = this.ephemeral;
3776 32 : final includeLeave = this.includeLeave;
3777 32 : final notRooms = this.notRooms;
3778 32 : final rooms = this.rooms;
3779 32 : final state = this.state;
3780 32 : final timeline = this.timeline;
3781 32 : return {
3782 0 : if (accountData != null) 'account_data': accountData.toJson(),
3783 0 : if (ephemeral != null) 'ephemeral': ephemeral.toJson(),
3784 0 : if (includeLeave != null) 'include_leave': includeLeave,
3785 0 : if (notRooms != null) 'not_rooms': notRooms.map((v) => v).toList(),
3786 0 : if (rooms != null) 'rooms': rooms.map((v) => v).toList(),
3787 64 : if (state != null) 'state': state.toJson(),
3788 0 : if (timeline != null) 'timeline': timeline.toJson(),
3789 : };
3790 : }
3791 :
3792 : /// The per user account data to include for rooms.
3793 : StateFilter? accountData;
3794 :
3795 : /// The ephemeral events to include for rooms. These are the events that appear in the `ephemeral` property in the `/sync` response.
3796 : StateFilter? ephemeral;
3797 :
3798 : /// Include rooms that the user has left in the sync, default false
3799 : bool? includeLeave;
3800 :
3801 : /// A list of room IDs to exclude. If this list is absent then no rooms are excluded. A matching room will be excluded even if it is listed in the `'rooms'` filter. This filter is applied before the filters in `ephemeral`, `state`, `timeline` or `account_data`
3802 : List<String>? notRooms;
3803 :
3804 : /// A list of room IDs to include. If this list is absent then all rooms are included. This filter is applied before the filters in `ephemeral`, `state`, `timeline` or `account_data`
3805 : List<String>? rooms;
3806 :
3807 : /// The state events to include for rooms.
3808 : StateFilter? state;
3809 :
3810 : /// The message and state update events to include for rooms.
3811 : StateFilter? timeline;
3812 : }
3813 :
3814 : ///
3815 : @_NameSource('spec')
3816 : class Filter {
3817 39 : Filter({
3818 : this.accountData,
3819 : this.eventFields,
3820 : this.eventFormat,
3821 : this.presence,
3822 : this.room,
3823 : });
3824 :
3825 0 : Filter.fromJson(Map<String, Object?> json)
3826 0 : : accountData = ((v) => v != null
3827 0 : ? EventFilter.fromJson(v as Map<String, Object?>)
3828 0 : : null)(json['account_data']),
3829 0 : eventFields = ((v) => v != null
3830 0 : ? (v as List).map((v) => v as String).toList()
3831 0 : : null)(json['event_fields']),
3832 0 : eventFormat = ((v) => v != null
3833 0 : ? EventFormat.values.fromString(v as String)!
3834 0 : : null)(json['event_format']),
3835 0 : presence = ((v) => v != null
3836 0 : ? EventFilter.fromJson(v as Map<String, Object?>)
3837 0 : : null)(json['presence']),
3838 0 : room = ((v) => v != null
3839 0 : ? RoomFilter.fromJson(v as Map<String, Object?>)
3840 0 : : null)(json['room']);
3841 32 : Map<String, Object?> toJson() {
3842 32 : final accountData = this.accountData;
3843 32 : final eventFields = this.eventFields;
3844 32 : final eventFormat = this.eventFormat;
3845 32 : final presence = this.presence;
3846 32 : final room = this.room;
3847 32 : return {
3848 0 : if (accountData != null) 'account_data': accountData.toJson(),
3849 : if (eventFields != null)
3850 0 : 'event_fields': eventFields.map((v) => v).toList(),
3851 0 : if (eventFormat != null) 'event_format': eventFormat.name,
3852 0 : if (presence != null) 'presence': presence.toJson(),
3853 64 : if (room != null) 'room': room.toJson(),
3854 : };
3855 : }
3856 :
3857 : /// The user account data that isn't associated with rooms to include.
3858 : EventFilter? accountData;
3859 :
3860 : /// List of event fields to include. If this list is absent then all fields are included. The entries may include '.' characters to indicate sub-fields. So ['content.body'] will include the 'body' field of the 'content' object. A literal '.' character in a field name may be escaped using a '\\'. A server may include more fields than were requested.
3861 : List<String>? eventFields;
3862 :
3863 : /// The format to use for events. 'client' will return the events in a format suitable for clients. 'federation' will return the raw event as received over federation. The default is 'client'.
3864 : EventFormat? eventFormat;
3865 :
3866 : /// The presence updates to include.
3867 : EventFilter? presence;
3868 :
3869 : /// Filters to be applied to room data.
3870 : RoomFilter? room;
3871 : }
3872 :
3873 : ///
3874 : @_NameSource('spec')
3875 : class OpenIdCredentials {
3876 0 : OpenIdCredentials({
3877 : required this.accessToken,
3878 : required this.expiresIn,
3879 : required this.matrixServerName,
3880 : required this.tokenType,
3881 : });
3882 :
3883 0 : OpenIdCredentials.fromJson(Map<String, Object?> json)
3884 0 : : accessToken = json['access_token'] as String,
3885 0 : expiresIn = json['expires_in'] as int,
3886 0 : matrixServerName = json['matrix_server_name'] as String,
3887 0 : tokenType = json['token_type'] as String;
3888 0 : Map<String, Object?> toJson() => {
3889 0 : 'access_token': accessToken,
3890 0 : 'expires_in': expiresIn,
3891 0 : 'matrix_server_name': matrixServerName,
3892 0 : 'token_type': tokenType,
3893 : };
3894 :
3895 : /// An access token the consumer may use to verify the identity of
3896 : /// the person who generated the token. This is given to the federation
3897 : /// API `GET /openid/userinfo` to verify the user's identity.
3898 : String accessToken;
3899 :
3900 : /// The number of seconds before this token expires and a new one must
3901 : /// be generated.
3902 : int expiresIn;
3903 :
3904 : /// The homeserver domain the consumer should use when attempting to
3905 : /// verify the user's identity.
3906 : String matrixServerName;
3907 :
3908 : /// The string `Bearer`.
3909 : String tokenType;
3910 : }
3911 :
3912 : ///
3913 : @_NameSource('spec')
3914 : class Tag {
3915 32 : Tag({
3916 : this.order,
3917 : this.additionalProperties = const {},
3918 : });
3919 :
3920 0 : Tag.fromJson(Map<String, Object?> json)
3921 : : order =
3922 0 : ((v) => v != null ? (v as num).toDouble() : null)(json['order']),
3923 0 : additionalProperties = Map.fromEntries(json.entries
3924 0 : .where((e) => !['order'].contains(e.key))
3925 0 : .map((e) => MapEntry(e.key, e.value)));
3926 0 : Map<String, Object?> toJson() {
3927 0 : final order = this.order;
3928 0 : return {
3929 0 : ...additionalProperties,
3930 0 : if (order != null) 'order': order,
3931 : };
3932 : }
3933 :
3934 : /// A number in a range `[0,1]` describing a relative
3935 : /// position of the room under the given tag.
3936 : double? order;
3937 :
3938 : Map<String, Object?> additionalProperties;
3939 : }
3940 :
3941 : ///
3942 : @_NameSource('rule override spec')
3943 : class Profile {
3944 1 : Profile({
3945 : this.avatarUrl,
3946 : this.displayName,
3947 : required this.userId,
3948 : });
3949 :
3950 0 : Profile.fromJson(Map<String, Object?> json)
3951 0 : : avatarUrl = ((v) =>
3952 0 : v != null ? Uri.parse(v as String) : null)(json['avatar_url']),
3953 : displayName =
3954 0 : ((v) => v != null ? v as String : null)(json['display_name']),
3955 0 : userId = json['user_id'] as String;
3956 0 : Map<String, Object?> toJson() {
3957 0 : final avatarUrl = this.avatarUrl;
3958 0 : final displayName = this.displayName;
3959 0 : return {
3960 0 : if (avatarUrl != null) 'avatar_url': avatarUrl.toString(),
3961 0 : if (displayName != null) 'display_name': displayName,
3962 0 : 'user_id': userId,
3963 : };
3964 : }
3965 :
3966 : /// The avatar url, as an MXC, if one exists.
3967 : Uri? avatarUrl;
3968 :
3969 : /// The display name of the user, if one exists.
3970 : String? displayName;
3971 :
3972 : /// The user's matrix user ID.
3973 : String userId;
3974 : }
3975 :
3976 : ///
3977 : @_NameSource('generated')
3978 : class SearchUserDirectoryResponse {
3979 0 : SearchUserDirectoryResponse({
3980 : required this.limited,
3981 : required this.results,
3982 : });
3983 :
3984 0 : SearchUserDirectoryResponse.fromJson(Map<String, Object?> json)
3985 0 : : limited = json['limited'] as bool,
3986 0 : results = (json['results'] as List)
3987 0 : .map((v) => Profile.fromJson(v as Map<String, Object?>))
3988 0 : .toList();
3989 0 : Map<String, Object?> toJson() => {
3990 0 : 'limited': limited,
3991 0 : 'results': results.map((v) => v.toJson()).toList(),
3992 : };
3993 :
3994 : /// Indicates if the result list has been truncated by the limit.
3995 : bool limited;
3996 :
3997 : /// Ordered by rank and then whether or not profile info is available.
3998 : List<Profile> results;
3999 : }
4000 :
4001 : ///
4002 : @_NameSource('rule override generated')
4003 : class TurnServerCredentials {
4004 0 : TurnServerCredentials({
4005 : required this.password,
4006 : required this.ttl,
4007 : required this.uris,
4008 : required this.username,
4009 : });
4010 :
4011 2 : TurnServerCredentials.fromJson(Map<String, Object?> json)
4012 2 : : password = json['password'] as String,
4013 2 : ttl = json['ttl'] as int,
4014 8 : uris = (json['uris'] as List).map((v) => v as String).toList(),
4015 2 : username = json['username'] as String;
4016 0 : Map<String, Object?> toJson() => {
4017 0 : 'password': password,
4018 0 : 'ttl': ttl,
4019 0 : 'uris': uris.map((v) => v).toList(),
4020 0 : 'username': username,
4021 : };
4022 :
4023 : /// The password to use.
4024 : String password;
4025 :
4026 : /// The time-to-live in seconds
4027 : int ttl;
4028 :
4029 : /// A list of TURN URIs
4030 : List<String> uris;
4031 :
4032 : /// The username to use.
4033 : String username;
4034 : }
4035 :
4036 : ///
4037 : @_NameSource('generated')
4038 : class GetVersionsResponse {
4039 0 : GetVersionsResponse({
4040 : this.unstableFeatures,
4041 : required this.versions,
4042 : });
4043 :
4044 34 : GetVersionsResponse.fromJson(Map<String, Object?> json)
4045 34 : : unstableFeatures = ((v) => v != null
4046 102 : ? (v as Map<String, Object?>).map((k, v) => MapEntry(k, v as bool))
4047 68 : : null)(json['unstable_features']),
4048 136 : versions = (json['versions'] as List).map((v) => v as String).toList();
4049 0 : Map<String, Object?> toJson() {
4050 0 : final unstableFeatures = this.unstableFeatures;
4051 0 : return {
4052 : if (unstableFeatures != null)
4053 0 : 'unstable_features': unstableFeatures.map((k, v) => MapEntry(k, v)),
4054 0 : 'versions': versions.map((v) => v).toList(),
4055 : };
4056 : }
4057 :
4058 : /// Experimental features the server supports. Features not listed here,
4059 : /// or the lack of this property all together, indicate that a feature is
4060 : /// not supported.
4061 : Map<String, bool>? unstableFeatures;
4062 :
4063 : /// The supported versions.
4064 : List<String> versions;
4065 : }
4066 :
4067 : ///
4068 : @_NameSource('rule override generated')
4069 : class ServerConfig {
4070 0 : ServerConfig({
4071 : this.mUploadSize,
4072 : });
4073 :
4074 4 : ServerConfig.fromJson(Map<String, Object?> json)
4075 : : mUploadSize =
4076 12 : ((v) => v != null ? v as int : null)(json['m.upload.size']);
4077 0 : Map<String, Object?> toJson() {
4078 0 : final mUploadSize = this.mUploadSize;
4079 0 : return {
4080 0 : if (mUploadSize != null) 'm.upload.size': mUploadSize,
4081 : };
4082 : }
4083 :
4084 : /// The maximum size an upload can be in bytes.
4085 : /// Clients SHOULD use this as a guide when uploading content.
4086 : /// If not listed or null, the size limit should be treated as unknown.
4087 : int? mUploadSize;
4088 : }
4089 :
4090 : ///
4091 : @_NameSource('generated')
4092 : class GetUrlPreviewResponse {
4093 0 : GetUrlPreviewResponse({
4094 : this.matrixImageSize,
4095 : this.ogImage,
4096 : });
4097 :
4098 0 : GetUrlPreviewResponse.fromJson(Map<String, Object?> json)
4099 : : matrixImageSize =
4100 0 : ((v) => v != null ? v as int : null)(json['matrix:image:size']),
4101 0 : ogImage = ((v) =>
4102 0 : v != null ? Uri.parse(v as String) : null)(json['og:image']);
4103 0 : Map<String, Object?> toJson() {
4104 0 : final matrixImageSize = this.matrixImageSize;
4105 0 : final ogImage = this.ogImage;
4106 0 : return {
4107 0 : if (matrixImageSize != null) 'matrix:image:size': matrixImageSize,
4108 0 : if (ogImage != null) 'og:image': ogImage.toString(),
4109 : };
4110 : }
4111 :
4112 : /// The byte-size of the image. Omitted if there is no image attached.
4113 : int? matrixImageSize;
4114 :
4115 : /// An [MXC URI](https://spec.matrix.org/unstable/client-server-api/#matrix-content-mxc-uris) to the image. Omitted if there is no image.
4116 : Uri? ogImage;
4117 : }
4118 :
4119 : ///
4120 : @_NameSource('generated')
4121 : @EnhancedEnum()
4122 : enum Method {
4123 : @EnhancedEnumValue(name: 'crop')
4124 : crop,
4125 : @EnhancedEnumValue(name: 'scale')
4126 : scale
4127 : }
|