social.colibri.beta.voice.defs

colibri.social

Schema Diff

+17 -5

From

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

To

CID
bafyreif6mlqemtq...
Indexed At
2026-08-23 17:25 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 6 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 (6)
  • 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#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#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#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 163
    "producerInfo": {
164 164
      "type": "object",
165 165
      "required": [
166 166
        "producerId",
167 167
        "did",
168 168
        "kind"
169 169
      ],
170 170
      "properties": {
171 171
        "did": {
172 172
          "type": "string",
173 173
          "format": "did",
174 174
          "description": "Who is producing this media."
175 175
        },
176 176
        "kind": {
177 177
          "type": "string",
178 178
          "description": "The media kind.",
179 179
          "knownValues": [
180 180
            "audio",
181 181
            "video"
182 182
          ]
183 183
        },
184 184
        "paused": {
185 185
          "type": "boolean",
186 186
          "description": "Whether the producer is currently paused."
187 187
        },
188 188
        "source": {
189 189
          "type": "string",
190 190
          "description": "What the producer captures.",
191 191
          "knownValues": [
192 192
            "microphone",
193 193
            "camera",
194 194
            "screen"
195 195
          ]
196 196
        },
197 197
        "producerId": {
198 198
          "type": "string",
199 199
          "description": "The producer's identifier."
200 200
        }
201 201
      },
202 202
      "description": "A media producer available to consume."
203 203
    },
204 204
    "setSelfState": {
205 205
      "type": "object",
206 206
      "required": [],
207 207
      "properties": {
208 208
        "muted": {
209 209
          "type": "boolean",
210 210
          "description": "Whether the microphone is muted."
211 211
        },
212 212
        "deafened": {
213 213
          "type": "boolean",
214 214
          "description": "Whether incoming audio is silenced."
215 215
        }
216 216
      },
217 217
      "description": "Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged."
218 218
    },
219 219
    "closeProducer": {
220 220
      "type": "object",
221 221
      "required": [
222 222
        "producerId"
223 223
      ],
224 224
      "properties": {
225 225
        "producerId": {
226 226
          "type": "string",
227 227
          "description": "The producer to close."
228 228
        }
229 229
      },
230 230
      "description": "Closes a producer this connection owns."
231 231
    },
232 232
    "resumeConsumer": {
233 233
      "type": "object",
234 234
      "required": [
235 235
        "consumerId"
236 236
      ],
237 237
      "properties": {
238 238
        "consumerId": {
239 239
          "type": "string",
240 240
          "description": "The consumer to resume."
241 241
        }
242 242
      },
243 243
      "description": "Resumes a consumer this connection created, which is created paused by default."
244 244
    },
245 245
    "speakingUpdate": {
246 246
      "type": "object",
247 247
      "required": [
248 248
        "did",
249 249
        "speaking"
250 250
      ],
251 251
      "properties": {
252 252
        "did": {
253 253
          "type": "string",
254 254
          "format": "did",
255 255
          "description": "Who this update is about."
256 256
        },
257 257
        "level": {
258 258
          "type": "integer",
259 259
          "description": "An audio level in dBFS."
260 260
        },
261 261
        "speaking": {
262 262
          "type": "boolean",
263 263
          "description": "Whether they are currently speaking."
264 264
        }
265 265
      },
266 266
      "description": "A change in whether someone is currently speaking."
267 267
    },
268 268
    "consumerOptions": {
269 269
      "type": "object",
270 270
      "required": [
271 271
        "id",
272 272
        "producerId",
273 273
        "kind",
274 274
        "rtpParameters"
275 275
      ],
276 276
      "properties": {
277 277
        "id": {
278 278
          "type": "string",
279 279
          "description": "The consumer's identifier."
280 280
        },
281 281
        "kind": {
282 282
          "type": "string",
283 283
          "description": "The media kind.",
284 284
          "knownValues": [
285 285
            "audio",
286 286
            "video"
287 287
          ]
288 288
        },
289 289
        "producerId": {
290 290
          "type": "string",
291 291
          "description": "The producer being consumed."
292 292
        },
293 293
        "rtpParameters": {
294 294
          "type": "unknown",
295 295
          "description": "The opaque mediasoup RTP parameters blob."
296 296
        }
297 297
      },
298 298
      "description": "Parameters for consuming one producer."
299 299
    },
300 300
    "createTransport": {
301 301
      "type": "object",
302 302
      "required": [
303 303
        "direction"
304 304
      ],
305 305
      "properties": {
306 306
        "direction": {
307 307
          "type": "string",
308 308
          "description": "Whether this transport will send or receive media.",
309 309
          "knownValues": [
310 310
            "send",
311 311
            "recv"
312 312
          ]
313 313
        }
314 314
      },
315 315
      "description": "Requests a new WebRTC transport for the joined channel."
316 316
    },
317 317
    "producerRemoved": {
318 318
      "type": "object",
319 319
      "required": [
320 320
        "producerId",
321 321
        "did"
322 322
      ],
323 323
      "properties": {
324 324
        "did": {
325 325
          "type": "string",
326 326
          "format": "did",
327 327
          "description": "Whose producer this was."
328 328
        },
329 329
        "producerId": {
330 330
          "type": "string",
331 331
          "description": "The producer that closed."
332 332
        }
333 333
      },
334 334
      "description": "A peer's producer closed."
335 335
    },
336 336
    "rtpCapabilities": {
337 337
      "type": "object",
338 338
      "properties": {
339 339
        "payload": {
340 340
          "type": "unknown",
341 341
          "description": "The opaque mediasoup capability blob."
342 342
        }
343 343
      },
344 344
      "description": "The RTP capabilities a WebRTC endpoint supports."
345 345
    },
346 346
    "connectTransport": {
347 347
      "type": "object",
348 348
      "required": [
349 349
        "transportId",
350 350
        "dtlsParameters"
351 351
      ],
352 352
      "properties": {
353 353
        "transportId": {
354 354
          "type": "string",
355 355
          "description": "The transport to connect."
356 356
        },
357 357
        "dtlsParameters": {
358 358
          "type": "unknown",
359 359
          "description": "The opaque mediasoup DTLS parameters blob."
360 360
        }
361 361
      },
362 362
      "description": "Completes DTLS negotiation for a transport this connection created."
363 363
    },
364 364
    "transportOptions": {
365 365
      "type": "object",
366 366
      "required": [
367 367
        "id",
368 368
        "iceParameters",
369 369
        "iceCandidates",
370 370
        "dtlsParameters"
371 371
      ],
372 372
      "properties": {
373 373
        "id": {
374 374
          "type": "string",
375 375
          "description": "The transport's identifier."
376 376
        },
377 377
        "direction": {
378 378
          "type": "string",
379 379
          "description": "Which side of the call this transport carries.",
380 380
          "knownValues": [
381 381
            "send",
382 382
            "recv"
383 383
          ]
384 384
        },
385 385
        "iceCandidates": {
386 -
          "type": "unknown",
387 -
          "description": "The opaque mediasoup ICE candidates blob."
386 +
          "type": "array",
387 +
          "items": {
388 +
            "type": "unknown",
389 +
            "description": "One opaque mediasoup ICE candidate."
390 +
          },
391 +
          "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 392
        },
389 393
        "iceParameters": {
390 394
          "type": "unknown",
391 395
          "description": "The opaque mediasoup ICE parameters blob."
392 396
        },
393 397
        "dtlsParameters": {
394 398
          "type": "unknown",
395 399
          "description": "The opaque mediasoup DTLS parameters blob."
396 400
        }
397 401
      },
398 402
      "description": "Parameters for creating one side of a WebRTC transport."
399 403
    },
400 404
    "moderationChanged": {
401 405
      "type": "object",
402 406
      "required": [
403 407
        "did",
404 408
        "muted",
405 409
        "deafened"
406 410
      ],
407 411
      "properties": {
408 412
        "did": {
409 413
          "type": "string",
410 414
          "format": "did",
411 415
          "description": "Whose state changed."
412 416
        },
413 417
        "muted": {
414 418
          "type": "boolean",
415 -
          "description": "Whether the microphone is server-muted."
419 +
          "description": "Whether the microphone is muted, for any reason."
416 420
        },
417 421
        "deafened": {
418 422
          "type": "boolean",
419 -
          "description": "Whether incoming audio is server-silenced."
423 +
          "description": "Whether incoming audio is silenced, for any reason."
424 +
        },
425 +
        "serverMuted": {
426 +
          "type": "boolean",
427 +
          "description": "Whether a moderator muted them. When this is true the peer cannot unmute themselves."
428 +
        },
429 +
        "serverDeafened": {
430 +
          "type": "boolean",
431 +
          "description": "Whether a moderator deafened them. When this is true the peer cannot undeafen themselves."
420 432
        }
421 433
      },
422 -
      "description": "A peer's server-enforced mute or deafen state changed."
434 +
      "description": "A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them."
423 435
    },
424 436
    "getRtpCapabilities": {
425 437
      "type": "object",
426 438
      "required": [],
427 439
      "properties": {},
428 440
      "description": "Requests the router's RTP capabilities for the joined channel."
429 441
    }
430 442
  },
431 443
  "$type": "com.atproto.lexicon.schema",
432 444
  "lexicon": 1
433 445
}

Compare Other Versions

Lexicon Garden

@