social.colibri.sync.subscribeEvents
Schema Diff
+6 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 2 non-breaking changes.
Breaking Changes (2)
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#categoryEventData.channelOrder:items", sort: "format", value: "at-uri" }
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.categoryOrder:items", sort: "format", value: "at-uri" }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#channelEventData.category" }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#channelEventData", tgt: "social.colibri.sync.subscribeEvents#channelEventData.category", kind: "prop", name: Some("category") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#channelEventData.category" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#categoryEventData.channelOrder:items", sort: "format", value: "at-uri" }
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.categoryOrder:items", sort: "format", value: "at-uri" }
Additional Notes
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#channelEventData", tgt: "social.colibri.sync.subscribeEvents#channelEventData.category", kind: "prop", name: Some("category") }
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
+
"format": "at-uri",
39
40
"type": "string"
40
41
},
41
42
"type": "array"
42
43
},
43
44
"community": {
44
45
"format": "at-uri",
45
46
"type": "string"
46
47
},
47
48
"event": {
48
49
"knownValues": [
49
50
"upsert",
50
51
"delete"
51
52
],
52
53
"type": "string"
53
54
},
54
55
"name": {
55
56
"type": "string"
56
57
},
57
58
"uri": {
58
59
"format": "at-uri",
59
60
"type": "string"
60
61
}
61
62
},
62
63
"required": [
63
64
"event",
64
65
"uri",
65
66
"community"
66
67
],
67
68
"type": "object"
68
69
},
69
70
"channelEvent": {
70
71
"description": "Sent when a channel has been created, updated, or deleted.",
71
72
"properties": {
72
73
"data": {
73
74
"ref": "lex:social.colibri.sync.subscribeEvents#channelEventData",
74
75
"type": "ref"
75
76
},
76
77
"type": {
77
78
"const": "channel_event",
78
79
"type": "string"
79
80
}
80
81
},
81
82
"required": [
82
83
"type",
83
84
"data"
84
85
],
85
86
"type": "object"
86
87
},
87
88
"channelEventData": {
88
89
"properties": {
90
+
"category": {
91
+
"format": "at-uri",
92
+
"type": "string"
93
+
},
89
94
"community": {
90
95
"format": "at-uri",
91
96
"type": "string"
92
97
},
93
98
"description": {
94
99
"type": "string"
95
100
},
96
101
"event": {
97
102
"knownValues": [
98
103
"upsert",
99
104
"delete"
100
105
],
101
106
"type": "string"
102
107
},
103
108
"name": {
104
109
"type": "string"
105
110
},
106
111
"type": {
107
112
"type": "string"
108
113
},
109
114
"uri": {
110
115
"format": "at-uri",
111
116
"type": "string"
112
117
}
113
118
},
114
119
"required": [
115
120
"event",
116
121
"uri",
117
122
"community"
118
123
],
119
124
"type": "object"
120
125
},
121
126
"communityEvent": {
122
127
"description": "Sent when a community has been updated or deleted.",
123
128
"properties": {
124
129
"data": {
125
130
"ref": "lex:social.colibri.sync.subscribeEvents#communityEventData",
126
131
"type": "ref"
127
132
},
128
133
"type": {
129
134
"const": "community_event",
130
135
"type": "string"
131
136
}
132
137
},
133
138
"required": [
134
139
"type",
135
140
"data"
136
141
],
137
142
"type": "object"
138
143
},
139
144
"communityEventData": {
140
145
"properties": {
141
146
"categoryOrder": {
142
147
"items": {
148
+
"format": "at-uri",
143
149
"type": "string"
144
150
},
145
151
"type": "array"
146
152
},
147
153
"description": {
148
154
"type": "string"
149
155
},
150
156
"event": {
151
157
"knownValues": [
152
158
"upsert",
153
159
"delete"
154
160
],
155
161
"type": "string"
156
162
},
157
163
"name": {
158
164
"type": "string"
159
165
},
160
166
"picture": {
161
167
"type": "blob"
162
168
},
163
169
"uri": {
164
170
"format": "at-uri",
165
171
"type": "string"
166
172
}
167
173
},
168
174
"required": [
169
175
"event",
170
176
"uri"
171
177
],
172
178
"type": "object"
173
179
},
174
180
"humEnvelope": {
175
181
"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.",
176
182
"properties": {
177
183
"community": {
178
184
"description": "Community the event is scoped to. Receiver relays to local clients only if they are members of this community.",
179
185
"format": "at-uri",
180
186
"type": "string"
181
187
},
182
188
"event": {
183
189
"description": "Ephemeral event payload. Only off-protocol types are permitted.",
184
190
"refs": [
185
191
"lex:social.colibri.sync.subscribeEvents#userEvent",
186
192
"lex:social.colibri.sync.subscribeEvents#typingEvent",
187
193
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
188
194
],
189
195
"type": "union"
190
196
},
191
197
"id": {
192
198
"description": "Unique id for this Hum, used by receivers to dedup across relay paths.",
193
199
"maxLength": 64,
194
200
"type": "string"
195
201
},
196
202
"origin": {
197
203
"description": "DID of the AppView that first emitted this Hum.",
198
204
"format": "did",
199
205
"type": "string"
200
206
},
201
207
"subject": {
202
208
"description": "The user this event is about. Receiver MUST verify origin equals subject's declared presenceService before trusting or relaying.",
203
209
"format": "did",
204
210
"type": "string"
205
211
},
206
212
"ttl": {
207
213
"description": "Remaining relay hops. Decremented on each forward; a Hum at ttl 0 is delivered locally but never relayed.",
208
214
"maximum": 8,
209
215
"minimum": 0,
210
216
"type": "integer"
211
217
}
212
218
},
213
219
"required": [
214
220
"origin",
215
221
"id",
216
222
"ttl",
217
223
"subject",
218
224
"community",
219
225
"event"
220
226
],
221
227
"type": "object"
222
228
},
223
229
"main": {
224
230
"description": "Opens a WebSocket stream that transmits relevant events for the authenticated user.",
225
231
"errors": [
226
232
{
227
233
"name": "AuthRequired"
228
234
}
229
235
],
230
236
"message": {
231
237
"schema": {
232
238
"refs": [
233
239
"lex:social.colibri.sync.subscribeEvents#ack",
234
240
"lex:social.colibri.sync.subscribeEvents#communityEvent",
235
241
"lex:social.colibri.sync.subscribeEvents#memberEvent",
236
242
"lex:social.colibri.sync.subscribeEvents#categoryEvent",
237
243
"lex:social.colibri.sync.subscribeEvents#channelEvent",
238
244
"lex:social.colibri.sync.subscribeEvents#messageEvent",
239
245
"lex:social.colibri.sync.subscribeEvents#reactionEvent",
240
246
"lex:social.colibri.sync.subscribeEvents#userEvent",
241
247
"lex:social.colibri.sync.subscribeEvents#typingEvent",
242
248
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
243
249
],
244
250
"type": "union"
245
251
}
246
252
},
247
253
"type": "subscription"
248
254
},
249
255
"memberEvent": {
250
256
"description": "Sent when a member has joined or left a community.",
251
257
"properties": {
252
258
"data": {
253
259
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
254
260
"type": "ref"
255
261
},
256
262
"type": {
257
263
"const": "member_event",
258
264
"type": "string"
259
265
}
260
266
},
261
267
"required": [
262
268
"type",
263
269
"data"
264
270
],
265
271
"type": "object"
266
272
},
267
273
"memberEventData": {
268
274
"properties": {
269
275
"community": {
270
276
"format": "at-uri",
271
277
"type": "string"
272
278
},
273
279
"event": {
274
280
"knownValues": [
275
281
"join",
276
282
"leave"
277
283
],
278
284
"type": "string"
279
285
},
280
286
"membership": {
281
287
"format": "at-uri",
282
288
"type": "string"
283
289
}
284
290
},
285
291
"required": [
286
292
"event",
287
293
"community",
288
294
"membership"
289
295
],
290
296
"type": "object"
291
297
},
292
298
"messageEvent": {
293
299
"description": "Sent when a message has been sent, edited, or deleted.",
294
300
"properties": {
295
301
"data": {
296
302
"ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
297
303
"type": "ref"
298
304
},
299
305
"type": {
300
306
"const": "message_event",
301
307
"type": "string"
302
308
}
303
309
},
304
310
"required": [
305
311
"type",
306
312
"data"
307
313
],
308
314
"type": "object"
309
315
},
310
316
"messageEventData": {
311
317
"properties": {
312
318
"attachments": {
313
319
"items": {
314
320
"type": "blob"
315
321
},
316
322
"type": "array"
317
323
},
318
324
"channel": {
319
325
"format": "at-uri",
320
326
"type": "string"
321
327
},
322
328
"createdAt": {
323
329
"format": "datetime",
324
330
"type": "string"
325
331
},
326
332
"edited": {
327
333
"type": "boolean"
328
334
},
329
335
"event": {
330
336
"knownValues": [
331
337
"upsert",
332
338
"delete"
333
339
],
334
340
"type": "string"
335
341
},
336
342
"facets": {
337
343
"items": {
338
344
"ref": "lex:social.colibri.richtext.facet",
339
345
"type": "ref"
340
346
},
341
347
"type": "array"
342
348
},
343
349
"indexedAt": {
344
350
"format": "datetime",
345
351
"type": "string"
346
352
},
347
353
"parent": {
348
354
"format": "at-uri",
349
355
"type": "string"
350
356
},
351
357
"text": {
352
358
"type": "string"
353
359
},
354
360
"uri": {
355
361
"format": "at-uri",
356
362
"type": "string"
357
363
}
358
364
},
359
365
"required": [
360
366
"event",
361
367
"uri",
362
368
"channel"
363
369
],
364
370
"type": "object"
365
371
},
366
372
"reactionEvent": {
367
373
"description": "Sent when a reaction has been added to or removed from a message.",
368
374
"properties": {
369
375
"data": {
370
376
"ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
371
377
"type": "ref"
372
378
},
373
379
"type": {
374
380
"const": "reaction_event",
375
381
"type": "string"
376
382
}
377
383
},
378
384
"required": [
379
385
"type",
380
386
"data"
381
387
],
382
388
"type": "object"
383
389
},
384
390
"reactionEventData": {
385
391
"properties": {
386
392
"channel": {
387
393
"format": "at-uri",
388
394
"type": "string"
389
395
},
390
396
"emoji": {
391
397
"type": "string"
392
398
},
393
399
"event": {
394
400
"knownValues": [
395
401
"added",
396
402
"removed"
397
403
],
398
404
"type": "string"
399
405
},
400
406
"target": {
401
407
"format": "at-uri",
402
408
"type": "string"
403
409
},
404
410
"uri": {
405
411
"format": "at-uri",
406
412
"type": "string"
407
413
}
408
414
},
409
415
"required": [
410
416
"event",
411
417
"uri",
412
418
"emoji",
413
419
"target",
414
420
"channel"
415
421
],
416
422
"type": "object"
417
423
},
418
424
"typingEvent": {
419
425
"description": "Sent when a user is typing in a channel the client is viewing.",
420
426
"properties": {
421
427
"data": {
422
428
"ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
423
429
"type": "ref"
424
430
},
425
431
"type": {
426
432
"const": "typing_event",
427
433
"type": "string"
428
434
}
429
435
},
430
436
"required": [
431
437
"type",
432
438
"data"
433
439
],
434
440
"type": "object"
435
441
},
436
442
"typingEventData": {
437
443
"properties": {
438
444
"channel": {
439
445
"format": "at-uri",
440
446
"type": "string"
441
447
},
442
448
"did": {
443
449
"format": "did",
444
450
"type": "string"
445
451
},
446
452
"event": {
447
453
"knownValues": [
448
454
"start",
449
455
"stop"
450
456
],
451
457
"type": "string"
452
458
}
453
459
},
454
460
"required": [
455
461
"event",
456
462
"channel",
457
463
"did"
458
464
],
459
465
"type": "object"
460
466
},
461
467
"userEvent": {
462
468
"description": "Sent when a known user has updated their profile or Colibri status.",
463
469
"properties": {
464
470
"data": {
465
471
"ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
466
472
"type": "ref"
467
473
},
468
474
"type": {
469
475
"const": "user_event",
470
476
"type": "string"
471
477
}
472
478
},
473
479
"required": [
474
480
"type",
475
481
"data"
476
482
],
477
483
"type": "object"
478
484
},
479
485
"userEventData": {
480
486
"properties": {
481
487
"did": {
482
488
"format": "did",
483
489
"type": "string"
484
490
},
485
491
"profile": {
486
492
"ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
487
493
"type": "ref"
488
494
},
489
495
"status": {
490
496
"ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
491
497
"type": "ref"
492
498
}
493
499
},
494
500
"required": [
495
501
"did",
496
502
"profile"
497
503
],
498
504
"type": "object"
499
505
},
500
506
"userProfile": {
501
507
"properties": {
502
508
"avatar": {
503
509
"type": "blob"
504
510
},
505
511
"banner": {
506
512
"type": "blob"
507
513
},
508
514
"description": {
509
515
"type": "string"
510
516
},
511
517
"displayName": {
512
518
"type": "string"
513
519
},
514
520
"handle": {
515
521
"format": "handle",
516
522
"type": "string"
517
523
}
518
524
},
519
525
"required": [
520
526
"handle"
521
527
],
522
528
"type": "object"
523
529
},
524
530
"userStatus": {
525
531
"properties": {
526
532
"emoji": {
527
533
"type": "string"
528
534
},
529
535
"state": {
530
536
"knownValues": [
531
537
"online",
532
538
"away",
533
539
"dnd",
534
540
"offline"
535
541
],
536
542
"type": "string"
537
543
},
538
544
"text": {
539
545
"type": "string"
540
546
}
541
547
},
542
548
"required": [
543
549
"state",
544
550
"text"
545
551
],
546
552
"type": "object"
547
553
},
548
554
"voicePresenceEvent": {
549
555
"description": "Sent when a user joins or leaves a voice channel.",
550
556
"properties": {
551
557
"data": {
552
558
"ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
553
559
"type": "ref"
554
560
},
555
561
"type": {
556
562
"const": "voice_presence_event",
557
563
"type": "string"
558
564
}
559
565
},
560
566
"required": [
561
567
"type",
562
568
"data"
563
569
],
564
570
"type": "object"
565
571
},
566
572
"voicePresenceEventData": {
567
573
"properties": {
568
574
"channel": {
569
575
"format": "at-uri",
570
576
"type": "string"
571
577
},
572
578
"did": {
573
579
"format": "did",
574
580
"type": "string"
575
581
},
576
582
"event": {
577
583
"knownValues": [
578
584
"join",
579
585
"leave"
580
586
],
581
587
"type": "string"
582
588
}
583
589
},
584
590
"required": [
585
591
"event",
586
592
"channel",
587
593
"did"
588
594
],
589
595
"type": "object"
590
596
}
591
597
},
592
598
"id": "social.colibri.sync.subscribeEvents",
593
599
"lexicon": 1,
594
600
"revision": 1
595
601
}