social.colibri.beta.voice.defs

colibri.social

Schema Diff

+33 -5

From

CID
bafyreihggcvt4fi...
Indexed At
2026-08-23 12:32 UTC
View this version

To

CID
bafyreihqd5l5cc2...
Indexed At
2026-08-24 09:45 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 9 non-breaking changes.

Breaking Changes (1)
  • KindChanged KindChanged { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", old_kind: "unknown", new_kind: "array" }
Non-Breaking Changes (9)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverMuted" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items" }
  • AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#disconnected", tgt: "social.colibri.beta.voice.defs#disconnected.reason", kind: "prop", name: Some("reason") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened", kind: "prop", name: Some("serverDeafened") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverMuted", kind: "prop", name: Some("serverMuted") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", tgt: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected" }
  • AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason" }
  • AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened" }
  • AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverMuted" }
  • AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items" }

Additional Notes

  • Breaking: KindChanged { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", old_kind: "unknown", new_kind: "array" }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#disconnected", tgt: "social.colibri.beta.voice.defs#disconnected.reason", kind: "prop", name: Some("reason") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened", kind: "prop", name: Some("serverDeafened") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverMuted", kind: "prop", name: Some("serverMuted") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", tgt: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items", kind: "items", name: None }
1 1
{
2 2
  "id": "social.colibri.beta.voice.defs",
3 3
  "defs": {
4 4
    "ack": {
5 5
      "type": "object",
6 6
      "required": [],
7 7
      "properties": {},
8 8
      "description": "Answers a heartbeat."
9 9
    },
10 10
    "join": {
11 11
      "type": "object",
12 12
      "required": [
13 13
        "channel"
14 14
      ],
15 15
      "properties": {
16 16
        "channel": {
17 17
          "type": "string",
18 18
          "format": "space-ref",
19 19
          "description": "The voice channel to join."
20 20
        }
21 21
      },
22 22
      "description": "Joins a voice channel. A connection must join before sending any other frame, and joining a second channel leaves the first."
23 23
    },
24 24
    "error": {
25 25
      "type": "object",
26 26
      "required": [
27 27
        "error"
28 28
      ],
29 29
      "properties": {
30 30
        "error": {
31 31
          "type": "string",
32 32
          "description": "Error name.",
33 33
          "knownValues": [
34 34
            "InvalidFrame",
35 35
            "NotJoined",
36 36
            "ChannelNotFound",
37 37
            "NotVoiceChannel",
38 38
            "Forbidden",
39 39
            "NotFound"
40 40
          ]
41 41
        },
42 42
        "message": {
43 43
          "type": "string",
44 44
          "description": "Human-readable detail."
45 45
        }
46 46
      },
47 47
      "description": "Something the client sent could not be acted on."
48 48
    },
49 49
    "leave": {
50 50
      "type": "object",
51 51
      "required": [],
52 52
      "properties": {},
53 53
      "description": "Leaves the voice channel this connection is joined to."
54 54
    },
55 55
    "joined": {
56 56
      "type": "object",
57 57
      "required": [
58 58
        "channel"
59 59
      ],
60 60
      "properties": {
61 61
        "channel": {
62 62
          "type": "string",
63 63
          "format": "space-ref",
64 64
          "description": "The voice channel now joined."
65 65
        }
66 66
      },
67 67
      "description": "Confirms this connection has joined a voice channel."
68 68
    },
69 69
    "consume": {
70 70
      "type": "object",
71 71
      "required": [
72 72
        "transportId",
73 73
        "producerId",
74 74
        "rtpCapabilities"
75 75
      ],
76 76
      "properties": {
77 77
        "producerId": {
78 78
          "type": "string",
79 79
          "description": "The producer to consume."
80 80
        },
81 81
        "transportId": {
82 82
          "type": "string",
83 83
          "description": "The receive transport to consume on."
84 84
        },
85 85
        "rtpCapabilities": {
86 86
          "type": "unknown",
87 87
          "description": "This connection's opaque mediasoup RTP capabilities blob."
88 88
        }
89 89
      },
90 90
      "description": "Starts consuming another peer's producer on a receive transport this connection created."
91 91
    },
92 92
    "produce": {
93 93
      "type": "object",
94 94
      "required": [
95 95
        "transportId",
96 96
        "kind",
97 97
        "rtpParameters",
98 98
        "source"
99 99
      ],
100 100
      "properties": {
101 101
        "kind": {
102 102
          "type": "string",
103 103
          "description": "The media kind.",
104 104
          "knownValues": [
105 105
            "audio",
106 106
            "video"
107 107
          ]
108 108
        },
109 109
        "source": {
110 110
          "type": "string",
111 111
          "description": "What this producer captures.",
112 112
          "knownValues": [
113 113
            "microphone",
114 114
            "camera",
115 115
            "screen"
116 116
          ]
117 117
        },
118 118
        "transportId": {
119 119
          "type": "string",
120 120
          "description": "The send transport to produce on."
121 121
        },
122 122
        "rtpParameters": {
123 123
          "type": "unknown",
124 124
          "description": "The opaque mediasoup RTP parameters blob."
125 125
        }
126 126
      },
127 127
      "description": "Starts producing media on a send transport this connection created."
128 128
    },
129 129
    "peerLeft": {
130 130
      "type": "object",
131 131
      "required": [
132 132
        "did"
133 133
      ],
134 134
      "properties": {
135 135
        "did": {
136 136
          "type": "string",
137 137
          "format": "did",
138 138
          "description": "Who left."
139 139
        }
140 140
      },
141 141
      "description": "A peer left the voice channel this connection is in."
142 142
    },
143 143
    "heartbeat": {
144 144
      "type": "object",
145 145
      "required": [],
146 146
      "properties": {},
147 147
      "description": "Keeps the connection alive. The server answers with an ack."
148 148
    },
149 149
    "peerJoined": {
150 150
      "type": "object",
151 151
      "required": [
152 152
        "did"
153 153
      ],
154 154
      "properties": {
155 155
        "did": {
156 156
          "type": "string",
157 157
          "format": "did",
158 158
          "description": "Who joined."
159 159
        }
160 160
      },
161 161
      "description": "Another peer joined the voice channel this connection is in."
162 162
    },
163 +
    "disconnected": {
164 +
      "type": "object",
165 +
      "required": [],
166 +
      "properties": {
167 +
        "reason": {
168 +
          "type": "string",
169 +
          "description": "Why it happened.",
170 +
          "knownValues": [
171 +
            "moderator",
172 +
            "superseded",
173 +
            "channelGone"
174 +
          ]
175 +
        }
176 +
      },
177 +
      "description": "The server removed this client from the voice channel. Sent only to the client it applies to."
178 +
    },
163 179
    "producerInfo": {
164 180
      "type": "object",
165 181
      "required": [
166 182
        "producerId",
167 183
        "did",
168 184
        "kind"
169 185
      ],
170 186
      "properties": {
171 187
        "did": {
172 188
          "type": "string",
173 189
          "format": "did",
174 190
          "description": "Who is producing this media."
175 191
        },
176 192
        "kind": {
177 193
          "type": "string",
178 194
          "description": "The media kind.",
179 195
          "knownValues": [
180 196
            "audio",
181 197
            "video"
182 198
          ]
183 199
        },
184 200
        "paused": {
185 201
          "type": "boolean",
186 202
          "description": "Whether the producer is currently paused."
187 203
        },
188 204
        "source": {
189 205
          "type": "string",
190 206
          "description": "What the producer captures.",
191 207
          "knownValues": [
192 208
            "microphone",
193 209
            "camera",
194 210
            "screen"
195 211
          ]
196 212
        },
197 213
        "producerId": {
198 214
          "type": "string",
199 215
          "description": "The producer's identifier."
200 216
        }
201 217
      },
202 218
      "description": "A media producer available to consume."
203 219
    },
204 220
    "setSelfState": {
205 221
      "type": "object",
206 222
      "required": [],
207 223
      "properties": {
208 224
        "muted": {
209 225
          "type": "boolean",
210 226
          "description": "Whether the microphone is muted."
211 227
        },
212 228
        "deafened": {
213 229
          "type": "boolean",
214 230
          "description": "Whether incoming audio is silenced."
215 231
        }
216 232
      },
217 233
      "description": "Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged."
218 234
    },
219 235
    "closeProducer": {
220 236
      "type": "object",
221 237
      "required": [
222 238
        "producerId"
223 239
      ],
224 240
      "properties": {
225 241
        "producerId": {
226 242
          "type": "string",
227 243
          "description": "The producer to close."
228 244
        }
229 245
      },
230 246
      "description": "Closes a producer this connection owns."
231 247
    },
232 248
    "resumeConsumer": {
233 249
      "type": "object",
234 250
      "required": [
235 251
        "consumerId"
236 252
      ],
237 253
      "properties": {
238 254
        "consumerId": {
239 255
          "type": "string",
240 256
          "description": "The consumer to resume."
241 257
        }
242 258
      },
243 259
      "description": "Resumes a consumer this connection created, which is created paused by default."
244 260
    },
245 261
    "speakingUpdate": {
246 262
      "type": "object",
247 263
      "required": [
248 264
        "did",
249 265
        "speaking"
250 266
      ],
251 267
      "properties": {
252 268
        "did": {
253 269
          "type": "string",
254 270
          "format": "did",
255 271
          "description": "Who this update is about."
256 272
        },
257 273
        "level": {
258 274
          "type": "integer",
259 275
          "description": "An audio level in dBFS."
260 276
        },
261 277
        "speaking": {
262 278
          "type": "boolean",
263 279
          "description": "Whether they are currently speaking."
264 280
        }
265 281
      },
266 282
      "description": "A change in whether someone is currently speaking."
267 283
    },
268 284
    "consumerOptions": {
269 285
      "type": "object",
270 286
      "required": [
271 287
        "id",
272 288
        "producerId",
273 289
        "kind",
274 290
        "rtpParameters"
275 291
      ],
276 292
      "properties": {
277 293
        "id": {
278 294
          "type": "string",
279 295
          "description": "The consumer's identifier."
280 296
        },
281 297
        "kind": {
282 298
          "type": "string",
283 299
          "description": "The media kind.",
284 300
          "knownValues": [
285 301
            "audio",
286 302
            "video"
287 303
          ]
288 304
        },
289 305
        "producerId": {
290 306
          "type": "string",
291 307
          "description": "The producer being consumed."
292 308
        },
293 309
        "rtpParameters": {
294 310
          "type": "unknown",
295 311
          "description": "The opaque mediasoup RTP parameters blob."
296 312
        }
297 313
      },
298 314
      "description": "Parameters for consuming one producer."
299 315
    },
300 316
    "createTransport": {
301 317
      "type": "object",
302 318
      "required": [
303 319
        "direction"
304 320
      ],
305 321
      "properties": {
306 322
        "direction": {
307 323
          "type": "string",
308 324
          "description": "Whether this transport will send or receive media.",
309 325
          "knownValues": [
310 326
            "send",
311 327
            "recv"
312 328
          ]
313 329
        }
314 330
      },
315 331
      "description": "Requests a new WebRTC transport for the joined channel."
316 332
    },
317 333
    "producerRemoved": {
318 334
      "type": "object",
319 335
      "required": [
320 336
        "producerId",
321 337
        "did"
322 338
      ],
323 339
      "properties": {
324 340
        "did": {
325 341
          "type": "string",
326 342
          "format": "did",
327 343
          "description": "Whose producer this was."
328 344
        },
329 345
        "producerId": {
330 346
          "type": "string",
331 347
          "description": "The producer that closed."
332 348
        }
333 349
      },
334 350
      "description": "A peer's producer closed."
335 351
    },
336 352
    "rtpCapabilities": {
337 353
      "type": "object",
338 354
      "properties": {
339 355
        "payload": {
340 356
          "type": "unknown",
341 357
          "description": "The opaque mediasoup capability blob."
342 358
        }
343 359
      },
344 360
      "description": "The RTP capabilities a WebRTC endpoint supports."
345 361
    },
346 362
    "connectTransport": {
347 363
      "type": "object",
348 364
      "required": [
349 365
        "transportId",
350 366
        "dtlsParameters"
351 367
      ],
352 368
      "properties": {
353 369
        "transportId": {
354 370
          "type": "string",
355 371
          "description": "The transport to connect."
356 372
        },
357 373
        "dtlsParameters": {
358 374
          "type": "unknown",
359 375
          "description": "The opaque mediasoup DTLS parameters blob."
360 376
        }
361 377
      },
362 378
      "description": "Completes DTLS negotiation for a transport this connection created."
363 379
    },
364 380
    "transportOptions": {
365 381
      "type": "object",
366 382
      "required": [
367 383
        "id",
368 384
        "iceParameters",
369 385
        "iceCandidates",
370 386
        "dtlsParameters"
371 387
      ],
372 388
      "properties": {
373 389
        "id": {
374 390
          "type": "string",
375 391
          "description": "The transport's identifier."
376 392
        },
377 393
        "direction": {
378 394
          "type": "string",
379 395
          "description": "Which side of the call this transport carries.",
380 396
          "knownValues": [
381 397
            "send",
382 398
            "recv"
383 399
          ]
384 400
        },
385 401
        "iceCandidates": {
386 -
          "type": "unknown",
387 -
          "description": "The opaque mediasoup ICE candidates blob."
402 +
          "type": "array",
403 +
          "items": {
404 +
            "type": "unknown",
405 +
            "description": "One opaque mediasoup ICE candidate."
406 +
          },
407 +
          "description": "The mediasoup ICE candidates, one opaque blob per candidate. This is an array, not a single object, because that is what a WebRTC transport hands back."
388 408
        },
389 409
        "iceParameters": {
390 410
          "type": "unknown",
391 411
          "description": "The opaque mediasoup ICE parameters blob."
392 412
        },
393 413
        "dtlsParameters": {
394 414
          "type": "unknown",
395 415
          "description": "The opaque mediasoup DTLS parameters blob."
396 416
        }
397 417
      },
398 418
      "description": "Parameters for creating one side of a WebRTC transport."
399 419
    },
400 420
    "moderationChanged": {
401 421
      "type": "object",
402 422
      "required": [
403 423
        "did",
404 424
        "muted",
405 425
        "deafened"
406 426
      ],
407 427
      "properties": {
408 428
        "did": {
409 429
          "type": "string",
410 430
          "format": "did",
411 431
          "description": "Whose state changed."
412 432
        },
413 433
        "muted": {
414 434
          "type": "boolean",
415 -
          "description": "Whether the microphone is server-muted."
435 +
          "description": "Whether the microphone is muted, for any reason."
416 436
        },
417 437
        "deafened": {
418 438
          "type": "boolean",
419 -
          "description": "Whether incoming audio is server-silenced."
439 +
          "description": "Whether incoming audio is silenced, for any reason."
440 +
        },
441 +
        "serverMuted": {
442 +
          "type": "boolean",
443 +
          "description": "Whether a moderator muted them. When this is true the peer cannot unmute themselves."
444 +
        },
445 +
        "serverDeafened": {
446 +
          "type": "boolean",
447 +
          "description": "Whether a moderator deafened them. When this is true the peer cannot undeafen themselves."
420 448
        }
421 449
      },
422 -
      "description": "A peer's server-enforced mute or deafen state changed."
450 +
      "description": "A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them."
423 451
    },
424 452
    "getRtpCapabilities": {
425 453
      "type": "object",
426 454
      "required": [],
427 455
      "properties": {},
428 456
      "description": "Requests the router's RTP capabilities for the joined channel."
429 457
    }
430 458
  },
431 459
  "$type": "com.atproto.lexicon.schema",
432 460
  "lexicon": 1
433 461
}

Compare Other Versions

Lexicon Garden

@