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