social.colibri.sync.subscribeEvents
Schema Diff
+1 -0
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"ack": {
5
5
"description": "Sent in response to a heartbeat message.",
6
6
"properties": {
7
7
"type": {
8
8
"const": "ack",
9
9
"type": "string"
10
10
}
11
11
},
12
12
"required": [
13
13
"type"
14
14
],
15
15
"type": "object"
16
16
},
17
17
"categoryEvent": {
18
18
"description": "Sent when a category has been created, updated, or deleted.",
19
19
"properties": {
20
20
"data": {
21
21
"ref": "lex:social.colibri.sync.subscribeEvents#categoryEventData",
22
22
"type": "ref"
23
23
},
24
24
"type": {
25
25
"const": "category_event",
26
26
"type": "string"
27
27
}
28
28
},
29
29
"required": [
30
30
"type",
31
31
"data"
32
32
],
33
33
"type": "object"
34
34
},
35
35
"categoryEventData": {
36
36
"properties": {
37
37
"channelOrder": {
38
38
"items": {
39
39
"format": "at-uri",
40
40
"type": "string"
41
41
},
42
42
"type": "array"
43
43
},
44
44
"community": {
45
45
"format": "at-uri",
46
46
"type": "string"
47
47
},
48
48
"event": {
49
49
"knownValues": [
50
50
"upsert",
51
51
"delete"
52
52
],
53
53
"type": "string"
54
54
},
55
55
"name": {
56
56
"type": "string"
57
57
},
58
58
"uri": {
59
59
"format": "at-uri",
60
60
"type": "string"
61
61
}
62
62
},
63
63
"required": [
64
64
"event",
65
65
"uri",
66
66
"community"
67
67
],
68
68
"type": "object"
69
69
},
70
70
"channelEvent": {
71
71
"description": "Sent when a channel has been created, updated, or deleted.",
72
72
"properties": {
73
73
"data": {
74
74
"ref": "lex:social.colibri.sync.subscribeEvents#channelEventData",
75
75
"type": "ref"
76
76
},
77
77
"type": {
78
78
"const": "channel_event",
79
79
"type": "string"
80
80
}
81
81
},
82
82
"required": [
83
83
"type",
84
84
"data"
85
85
],
86
86
"type": "object"
87
87
},
88
88
"channelEventData": {
89
89
"properties": {
90
90
"category": {
91
91
"format": "at-uri",
92
92
"type": "string"
93
93
},
94
94
"community": {
95
95
"format": "at-uri",
96
96
"type": "string"
97
97
},
98
98
"description": {
99
99
"type": "string"
100
100
},
101
101
"event": {
102
102
"knownValues": [
103
103
"upsert",
104
104
"delete"
105
105
],
106
106
"type": "string"
107
107
},
108
108
"name": {
109
109
"type": "string"
110
110
},
111
111
"type": {
112
112
"type": "string"
113
113
},
114
114
"uri": {
115
115
"format": "at-uri",
116
116
"type": "string"
117
117
}
118
118
},
119
119
"required": [
120
120
"event",
121
121
"uri",
122
122
"community"
123
123
],
124
124
"type": "object"
125
125
},
126
126
"communityEvent": {
127
127
"description": "Sent when a community has been updated or deleted.",
128
128
"properties": {
129
129
"data": {
130
130
"ref": "lex:social.colibri.sync.subscribeEvents#communityEventData",
131
131
"type": "ref"
132
132
},
133
133
"type": {
134
134
"const": "community_event",
135
135
"type": "string"
136
136
}
137
137
},
138
138
"required": [
139
139
"type",
140
140
"data"
141
141
],
142
142
"type": "object"
143
143
},
144
144
"communityEventData": {
145
145
"properties": {
146
146
"banner": {
147
147
"type": "blob"
148
148
},
149
149
"categoryOrder": {
150
150
"items": {
151
151
"format": "at-uri",
152
152
"type": "string"
153
153
},
154
154
"type": "array"
155
155
},
156
156
"description": {
157
157
"type": "string"
158
158
},
159
159
"event": {
160
160
"knownValues": [
161
161
"upsert",
162
162
"delete"
163
163
],
164
164
"type": "string"
165
165
},
166
166
"name": {
167
167
"type": "string"
168
168
},
169
169
"picture": {
170
170
"type": "blob"
171
171
},
172
172
"requiresApprovalToJoin": {
173
173
"type": "boolean"
174
174
},
175
175
"uri": {
176
176
"format": "at-uri",
177
177
"type": "string"
178
178
}
179
179
},
180
180
"required": [
181
181
"event",
182
182
"uri"
183
183
],
184
184
"type": "object"
185
185
},
186
186
"humEnvelope": {
187
187
"description": "An off-protocol event relayed between AppViews. The authenticated sender (inter-service auth JWT: aud = receiving AppView did:web, lxm = social.colibri.sync.sendHum) is the origin of record; `origin` is echoed for relay/loop control and MUST match the JWT issuer. Only off-protocol event types are permitted — on-protocol events are never carried by a Hum and are derived from the firehose instead.",
188
188
"properties": {
189
189
"community": {
190
190
"description": "Community the event is scoped to. Receiver relays to local clients only if they are members of this community.",
191
191
"format": "at-uri",
192
192
"type": "string"
193
193
},
194
194
"event": {
195
195
"description": "Ephemeral event payload. Only off-protocol types are permitted.",
196
196
"refs": [
197
197
"lex:social.colibri.sync.subscribeEvents#userEvent",
198
198
"lex:social.colibri.sync.subscribeEvents#typingEvent",
199
199
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
200
200
"lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
201
201
],
202
202
"type": "union"
203
203
},
204
204
"id": {
205
205
"description": "Unique id for this Hum, used by receivers to dedup across relay paths.",
206
206
"maxLength": 64,
207
207
"type": "string"
208
208
},
209
209
"origin": {
210
210
"description": "DID of the AppView that first emitted this Hum.",
211
211
"format": "did",
212
212
"type": "string"
213
213
},
214
214
"subject": {
215
215
"description": "The user this event is about. Receiver MUST verify origin equals subject's declared presenceService before trusting or relaying.",
216
216
"format": "did",
217
217
"type": "string"
218
218
},
219
219
"ttl": {
220
220
"description": "Remaining relay hops. Decremented on each forward; a Hum at ttl 0 is delivered locally but never relayed.",
221
221
"maximum": 8,
222
222
"minimum": 0,
223
223
"type": "integer"
224
224
}
225
225
},
226
226
"required": [
227
227
"origin",
228
228
"id",
229
229
"ttl",
230
230
"subject",
231
231
"community",
232
232
"event"
233
233
],
234
234
"type": "object"
235
235
},
236
236
"main": {
237
237
"description": "Opens a WebSocket stream that transmits relevant events for the authenticated user.",
238
238
"errors": [
239
239
{
240
+
"description": "Missing, malformed, or unverifiable service auth.",
240
241
"name": "AuthRequired"
241
242
}
242
243
],
243
244
"message": {
244
245
"schema": {
245
246
"refs": [
246
247
"lex:social.colibri.sync.subscribeEvents#ack",
247
248
"lex:social.colibri.sync.subscribeEvents#communityEvent",
248
249
"lex:social.colibri.sync.subscribeEvents#memberEvent",
249
250
"lex:social.colibri.sync.subscribeEvents#categoryEvent",
250
251
"lex:social.colibri.sync.subscribeEvents#channelEvent",
251
252
"lex:social.colibri.sync.subscribeEvents#messageEvent",
252
253
"lex:social.colibri.sync.subscribeEvents#reactionEvent",
253
254
"lex:social.colibri.sync.subscribeEvents#userEvent",
254
255
"lex:social.colibri.sync.subscribeEvents#typingEvent",
255
256
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
256
257
"lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
257
258
],
258
259
"type": "union"
259
260
}
260
261
},
261
262
"type": "subscription"
262
263
},
263
264
"memberEvent": {
264
265
"description": "Sent when a member has joined or left a community.",
265
266
"properties": {
266
267
"data": {
267
268
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
268
269
"type": "ref"
269
270
},
270
271
"type": {
271
272
"const": "member_event",
272
273
"type": "string"
273
274
}
274
275
},
275
276
"required": [
276
277
"type",
277
278
"data"
278
279
],
279
280
"type": "object"
280
281
},
281
282
"memberEventData": {
282
283
"properties": {
283
284
"community": {
284
285
"format": "at-uri",
285
286
"type": "string"
286
287
},
287
288
"event": {
288
289
"knownValues": [
289
290
"join",
290
291
"leave",
291
292
"roles_updated"
292
293
],
293
294
"type": "string"
294
295
},
295
296
"member": {
296
297
"description": "The affected member, hydrated. Present on `join` and `roles_updated`.",
297
298
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventMember",
298
299
"type": "ref"
299
300
},
300
301
"memberDid": {
301
302
"description": "DID of the member who left. Present on `leave`.",
302
303
"format": "did",
303
304
"type": "string"
304
305
},
305
306
"membership": {
306
307
"format": "at-uri",
307
308
"type": "string"
308
309
}
309
310
},
310
311
"required": [
311
312
"event",
312
313
"community"
313
314
],
314
315
"type": "object"
315
316
},
316
317
"memberEventMember": {
317
318
"description": "The affected member as carried by a member event. Mirrors `social.colibri.community.defs#memberView`, including the member's current voice channel state so a receiving client can place them in a voice channel without refetching.",
318
319
"properties": {
319
320
"data": {
320
321
"ref": "lex:social.colibri.actor.defs#actorData",
321
322
"type": "ref"
322
323
},
323
324
"did": {
324
325
"format": "did",
325
326
"type": "string"
326
327
},
327
328
"handle": {
328
329
"format": "handle",
329
330
"type": "string"
330
331
},
331
332
"joinedAt": {
332
333
"format": "datetime",
333
334
"type": "string"
334
335
},
335
336
"nickname": {
336
337
"type": "string"
337
338
},
338
339
"roles": {
339
340
"items": {
340
341
"format": "at-uri",
341
342
"type": "string"
342
343
},
343
344
"type": "array"
344
345
},
345
346
"vc": {
346
347
"description": "AT-URI of the voice channel the member is currently connected to, if any. Only set when that channel belongs to `community`.",
347
348
"format": "at-uri",
348
349
"type": "string"
349
350
},
350
351
"vcDeafened": {
351
352
"type": "boolean"
352
353
},
353
354
"vcMuted": {
354
355
"type": "boolean"
355
356
}
356
357
},
357
358
"required": [
358
359
"did",
359
360
"handle",
360
361
"roles",
361
362
"data"
362
363
],
363
364
"type": "object"
364
365
},
365
366
"messageEvent": {
366
367
"description": "Sent when a message has been sent, edited, or deleted.",
367
368
"properties": {
368
369
"data": {
369
370
"ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
370
371
"type": "ref"
371
372
},
372
373
"type": {
373
374
"const": "message_event",
374
375
"type": "string"
375
376
}
376
377
},
377
378
"required": [
378
379
"type",
379
380
"data"
380
381
],
381
382
"type": "object"
382
383
},
383
384
"messageEventData": {
384
385
"properties": {
385
386
"attachments": {
386
387
"items": {
387
388
"type": "blob"
388
389
},
389
390
"type": "array"
390
391
},
391
392
"channel": {
392
393
"format": "at-uri",
393
394
"type": "string"
394
395
},
395
396
"createdAt": {
396
397
"format": "datetime",
397
398
"type": "string"
398
399
},
399
400
"edited": {
400
401
"type": "boolean"
401
402
},
402
403
"event": {
403
404
"knownValues": [
404
405
"upsert",
405
406
"delete"
406
407
],
407
408
"type": "string"
408
409
},
409
410
"facets": {
410
411
"items": {
411
412
"ref": "lex:social.colibri.richtext.facet",
412
413
"type": "ref"
413
414
},
414
415
"type": "array"
415
416
},
416
417
"indexedAt": {
417
418
"format": "datetime",
418
419
"type": "string"
419
420
},
420
421
"parent": {
421
422
"format": "at-uri",
422
423
"type": "string"
423
424
},
424
425
"text": {
425
426
"type": "string"
426
427
},
427
428
"uri": {
428
429
"format": "at-uri",
429
430
"type": "string"
430
431
}
431
432
},
432
433
"required": [
433
434
"event",
434
435
"uri",
435
436
"channel"
436
437
],
437
438
"type": "object"
438
439
},
439
440
"reactionEvent": {
440
441
"description": "Sent when a reaction has been added to or removed from a message.",
441
442
"properties": {
442
443
"data": {
443
444
"ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
444
445
"type": "ref"
445
446
},
446
447
"type": {
447
448
"const": "reaction_event",
448
449
"type": "string"
449
450
}
450
451
},
451
452
"required": [
452
453
"type",
453
454
"data"
454
455
],
455
456
"type": "object"
456
457
},
457
458
"reactionEventData": {
458
459
"properties": {
459
460
"channel": {
460
461
"format": "at-uri",
461
462
"type": "string"
462
463
},
463
464
"emoji": {
464
465
"type": "string"
465
466
},
466
467
"event": {
467
468
"knownValues": [
468
469
"added",
469
470
"removed"
470
471
],
471
472
"type": "string"
472
473
},
473
474
"target": {
474
475
"format": "at-uri",
475
476
"type": "string"
476
477
},
477
478
"uri": {
478
479
"format": "at-uri",
479
480
"type": "string"
480
481
}
481
482
},
482
483
"required": [
483
484
"event",
484
485
"uri",
485
486
"emoji",
486
487
"target",
487
488
"channel"
488
489
],
489
490
"type": "object"
490
491
},
491
492
"typingEvent": {
492
493
"description": "Sent when a user is typing in a channel the client is viewing.",
493
494
"properties": {
494
495
"data": {
495
496
"ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
496
497
"type": "ref"
497
498
},
498
499
"type": {
499
500
"const": "typing_event",
500
501
"type": "string"
501
502
}
502
503
},
503
504
"required": [
504
505
"type",
505
506
"data"
506
507
],
507
508
"type": "object"
508
509
},
509
510
"typingEventData": {
510
511
"properties": {
511
512
"channel": {
512
513
"format": "at-uri",
513
514
"type": "string"
514
515
},
515
516
"did": {
516
517
"format": "did",
517
518
"type": "string"
518
519
},
519
520
"event": {
520
521
"knownValues": [
521
522
"start",
522
523
"stop"
523
524
],
524
525
"type": "string"
525
526
}
526
527
},
527
528
"required": [
528
529
"event",
529
530
"channel",
530
531
"did"
531
532
],
532
533
"type": "object"
533
534
},
534
535
"userEvent": {
535
536
"description": "Sent when a known user has updated their profile or Colibri status.",
536
537
"properties": {
537
538
"data": {
538
539
"ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
539
540
"type": "ref"
540
541
},
541
542
"type": {
542
543
"const": "user_event",
543
544
"type": "string"
544
545
}
545
546
},
546
547
"required": [
547
548
"type",
548
549
"data"
549
550
],
550
551
"type": "object"
551
552
},
552
553
"userEventData": {
553
554
"properties": {
554
555
"did": {
555
556
"format": "did",
556
557
"type": "string"
557
558
},
558
559
"profile": {
559
560
"ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
560
561
"type": "ref"
561
562
},
562
563
"status": {
563
564
"ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
564
565
"type": "ref"
565
566
}
566
567
},
567
568
"required": [
568
569
"did",
569
570
"profile"
570
571
],
571
572
"type": "object"
572
573
},
573
574
"userProfile": {
574
575
"properties": {
575
576
"avatar": {
576
577
"type": "blob"
577
578
},
578
579
"banner": {
579
580
"type": "blob"
580
581
},
581
582
"description": {
582
583
"type": "string"
583
584
},
584
585
"displayName": {
585
586
"type": "string"
586
587
},
587
588
"handle": {
588
589
"format": "handle",
589
590
"type": "string"
590
591
}
591
592
},
592
593
"required": [
593
594
"handle"
594
595
],
595
596
"type": "object"
596
597
},
597
598
"userStatus": {
598
599
"properties": {
599
600
"emoji": {
600
601
"type": "string"
601
602
},
602
603
"state": {
603
604
"knownValues": [
604
605
"online",
605
606
"away",
606
607
"dnd",
607
608
"offline"
608
609
],
609
610
"type": "string"
610
611
},
611
612
"text": {
612
613
"type": "string"
613
614
}
614
615
},
615
616
"required": [
616
617
"state",
617
618
"text"
618
619
],
619
620
"type": "object"
620
621
},
621
622
"voicePresenceEvent": {
622
623
"description": "Sent when a user joins or leaves a voice channel.",
623
624
"properties": {
624
625
"data": {
625
626
"ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
626
627
"type": "ref"
627
628
},
628
629
"type": {
629
630
"const": "voice_presence_event",
630
631
"type": "string"
631
632
}
632
633
},
633
634
"required": [
634
635
"type",
635
636
"data"
636
637
],
637
638
"type": "object"
638
639
},
639
640
"voicePresenceEventData": {
640
641
"properties": {
641
642
"channel": {
642
643
"format": "at-uri",
643
644
"type": "string"
644
645
},
645
646
"did": {
646
647
"format": "did",
647
648
"type": "string"
648
649
},
649
650
"event": {
650
651
"knownValues": [
651
652
"join",
652
653
"leave"
653
654
],
654
655
"type": "string"
655
656
}
656
657
},
657
658
"required": [
658
659
"event",
659
660
"channel",
660
661
"did"
661
662
],
662
663
"type": "object"
663
664
},
664
665
"voiceStateEvent": {
665
666
"description": "Sent when a user's voice state changes within a voice channel. `muted` and `deafened` are the user's own choices; `serverMuted` and `serverDeafened` are moderator-applied and enforced by the SFU. Each field is absent when unchanged.",
666
667
"properties": {
667
668
"data": {
668
669
"ref": "lex:social.colibri.sync.subscribeEvents#voiceStateEventData",
669
670
"type": "ref"
670
671
},
671
672
"type": {
672
673
"const": "voice_state_event",
673
674
"type": "string"
674
675
}
675
676
},
676
677
"required": [
677
678
"type",
678
679
"data"
679
680
],
680
681
"type": "object"
681
682
},
682
683
"voiceStateEventData": {
683
684
"properties": {
684
685
"channel": {
685
686
"format": "at-uri",
686
687
"type": "string"
687
688
},
688
689
"deafened": {
689
690
"type": "boolean"
690
691
},
691
692
"did": {
692
693
"format": "did",
693
694
"type": "string"
694
695
},
695
696
"muted": {
696
697
"type": "boolean"
697
698
},
698
699
"serverDeafened": {
699
700
"type": "boolean"
700
701
},
701
702
"serverMuted": {
702
703
"type": "boolean"
703
704
}
704
705
},
705
706
"required": [
706
707
"channel",
707
708
"did"
708
709
],
709
710
"type": "object"
710
711
}
711
712
},
712
713
"id": "social.colibri.sync.subscribeEvents",
713
714
"lexicon": 1,
714
715
"revision": 1
715
716
}