fyi.opensocial.defs
Schema Diff
+48 -1
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 21 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.defs#groupViewBasic", src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.handle", kind: "prop", name: Some("handle") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.defs#groupViewBasic", src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.did", kind: "prop", name: Some("did") }
Non-Breaking Changes (21)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#actorView.description" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.avatar" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.did" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.displayName" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.handle" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.url" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes:items" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy:items" }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#actorView", tgt: "fyi.opensocial.defs#actorView.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.avatar", kind: "prop", name: Some("avatar") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.displayName", kind: "prop", name: Some("displayName") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.url", kind: "prop", name: Some("url") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.writableBy", kind: "prop", name: Some("writableBy") }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes", tgt: "fyi.opensocial.defs#spaceView.credentialScopes:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.defs#spaceView.writableBy", tgt: "fyi.opensocial.defs#spaceView.writableBy:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }AddedVertex { vertex_id: "fyi.opensocial.defs#actorView.description" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.avatar" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.did" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.displayName" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.handle" }AddedVertex { vertex_id: "fyi.opensocial.defs#groupViewBasic.url" }AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes" }AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.credentialScopes:items" }AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy" }AddedVertex { vertex_id: "fyi.opensocial.defs#spaceView.writableBy:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.defs#groupViewBasic", src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.handle", kind: "prop", name: Some("handle") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.defs#groupViewBasic", src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.did", kind: "prop", name: Some("did") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#actorView", tgt: "fyi.opensocial.defs#actorView.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.avatar", kind: "prop", name: Some("avatar") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.displayName", kind: "prop", name: Some("displayName") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#groupViewBasic", tgt: "fyi.opensocial.defs#groupViewBasic.url", kind: "prop", name: Some("url") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView", tgt: "fyi.opensocial.defs#spaceView.writableBy", kind: "prop", name: Some("writableBy") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes", tgt: "fyi.opensocial.defs#spaceView.credentialScopes:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.defs#spaceView.writableBy", tgt: "fyi.opensocial.defs#spaceView.writableBy:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"actorView": {
5
-
"description": "A person, as a view names them: their handle from their DID document, their name and face from the Bluesky profile in their own repo.",
5
+
"description": "A person, as a view names them: their handle from their DID document, their name, words about themselves and face from the Bluesky profile in their own repo, or Grain's for somebody with none.",
6
6
"properties": {
7
7
"avatar": {
8
8
"description": "Served renderably by the host, at /img/actor/{did}/{cid}.",
9
9
"format": "uri",
10
10
"type": "string"
11
11
},
12
+
"description": {
13
+
"type": "string"
14
+
},
12
15
"did": {
13
16
"format": "did",
14
17
"type": "string"
15
18
},
16
19
"displayName": {
17
20
"type": "string"
18
21
},
19
22
"handle": {
20
23
"format": "handle",
21
24
"type": "string"
22
25
}
23
26
},
24
27
"required": [
25
28
"did"
26
29
],
27
30
"type": "object"
28
31
},
29
32
"eventView": {
30
33
"properties": {
31
34
"actor": {
32
35
"format": "did",
33
36
"type": "string"
34
37
},
35
38
"createdAt": {
36
39
"format": "datetime",
37
40
"type": "string"
38
41
},
39
42
"note": {
40
43
"type": "string"
41
44
},
42
45
"reason": {
43
46
"type": "string"
44
47
},
45
48
"reasonType": {
46
49
"type": "string"
47
50
},
48
51
"type": {
49
52
"knownValues": [
50
53
"report",
51
54
"label",
52
55
"negate",
53
56
"resolve",
54
57
"escalate",
55
58
"note",
56
59
"eject"
57
60
],
58
61
"type": "string"
59
62
},
60
63
"val": {
61
64
"type": "string"
62
65
}
63
66
},
64
67
"required": [
65
68
"type",
66
69
"createdAt"
67
70
],
68
71
"type": "object"
69
72
},
70
73
"groupRule": {
71
74
"properties": {
72
75
"createdAt": {
73
76
"format": "datetime",
74
77
"type": "string"
75
78
},
76
79
"rkey": {
77
80
"type": "string"
78
81
},
79
82
"text": {
80
83
"type": "string"
81
84
},
82
85
"title": {
83
86
"type": "string"
84
87
}
85
88
},
86
89
"required": [
87
90
"rkey",
88
91
"title"
89
92
],
90
93
"type": "object"
91
94
},
92
95
"groupView": {
93
96
"properties": {
94
97
"avatar": {
95
98
"description": "CID of the avatar blob; the host serves it at /img/{did}/avatar.",
96
99
"type": "string"
97
100
},
98
101
"banner": {
99
102
"description": "CID of the banner blob; the host serves it at /img/{did}/banner.",
100
103
"type": "string"
101
104
},
102
105
"deactivated": {
103
106
"description": "Set while a steward has the group switched off. Its spaces cannot be read until one of the stewards who could switch it off switches it back on.",
104
107
"type": "boolean"
105
108
},
106
109
"description": {
107
110
"type": "string"
108
111
},
109
112
"did": {
110
113
"format": "did",
111
114
"type": "string"
112
115
},
113
116
"displayName": {
114
117
"type": "string"
115
118
},
116
119
"handle": {
117
120
"format": "handle",
118
121
"type": "string"
119
122
},
120
123
"joinPolicy": {
121
124
"description": "How new members get in, as the profile states it.",
122
125
"type": "string"
123
126
},
124
127
"members": {
125
128
"format": "space-ref",
126
129
"type": "string"
127
130
},
128
131
"meta": {
129
132
"format": "space-ref",
130
133
"type": "string"
131
134
},
132
135
"rules": {
133
136
"items": {
134
137
"ref": "#groupRule",
135
138
"type": "ref"
136
139
},
137
140
"type": "array"
138
141
},
139
142
"url": {
140
143
"description": "The group's own site, if it keeps one.",
141
144
"format": "uri",
142
145
"type": "string"
143
146
}
144
147
},
145
148
"required": [
146
149
"did",
147
150
"handle",
148
151
"meta",
149
152
"members"
150
153
],
151
154
"type": "object"
152
155
},
156
+
"groupViewBasic": {
157
+
"properties": {
158
+
"avatar": {
159
+
"description": "CID of the group's picture.",
160
+
"type": "string"
161
+
},
162
+
"did": {
163
+
"format": "did",
164
+
"type": "string"
165
+
},
166
+
"displayName": {
167
+
"type": "string"
168
+
},
169
+
"handle": {
170
+
"format": "handle",
171
+
"type": "string"
172
+
},
173
+
"url": {
174
+
"description": "The group's own site, if not at its handle.",
175
+
"format": "uri",
176
+
"type": "string"
177
+
}
178
+
},
179
+
"required": [
180
+
"did",
181
+
"handle"
182
+
],
183
+
"type": "object"
184
+
},
153
185
"groupViewDetailed": {
154
186
"description": "A group in full, as the viewer may see it. Profile fields and rules are present only when the viewer may read the meta space.",
155
187
"properties": {
156
188
"avatar": {
157
189
"description": "CID of the avatar blob; the host serves it at /img/{did}/avatar.",
158
190
"type": "string"
159
191
},
160
192
"banner": {
161
193
"description": "CID of the banner blob; the host serves it at /img/{did}/banner.",
162
194
"type": "string"
163
195
},
164
196
"deactivated": {
165
197
"description": "Set while a steward has the group switched off. Its spaces cannot be read until one of the stewards who could switch it off switches it back on.",
166
198
"type": "boolean"
167
199
},
168
200
"description": {
169
201
"type": "string"
170
202
},
171
203
"did": {
172
204
"format": "did",
173
205
"type": "string"
174
206
},
175
207
"displayName": {
176
208
"type": "string"
177
209
},
178
210
"handle": {
179
211
"format": "handle",
180
212
"type": "string"
181
213
},
182
214
"joinPolicy": {
183
215
"description": "How new members get in, as the profile states it.",
184
216
"type": "string"
185
217
},
186
218
"members": {
187
219
"format": "space-ref",
188
220
"type": "string"
189
221
},
190
222
"meta": {
191
223
"format": "space-ref",
192
224
"type": "string"
193
225
},
194
226
"rules": {
195
227
"description": "In the order they are presented. Absent when the meta space is closed to the viewer.",
196
228
"items": {
197
229
"ref": "#groupRule",
198
230
"type": "ref"
199
231
},
200
232
"type": "array"
201
233
},
202
234
"url": {
203
235
"description": "The group's own site, if it keeps one.",
204
236
"format": "uri",
205
237
"type": "string"
206
238
},
207
239
"viewer": {
208
240
"ref": "#viewerState",
209
241
"type": "ref"
210
242
}
211
243
},
212
244
"required": [
213
245
"did",
214
246
"handle",
215
247
"meta",
216
248
"members"
217
249
],
218
250
"type": "object"
219
251
},
220
252
"inviteView": {
221
253
"properties": {
222
254
"createdAt": {
223
255
"format": "datetime",
224
256
"type": "string"
225
257
},
226
258
"expiresAt": {
227
259
"format": "datetime",
228
260
"type": "string"
229
261
},
230
262
"invitee": {
231
263
"format": "did",
232
264
"type": "string"
233
265
},
234
266
"message": {
235
267
"type": "string"
236
268
},
237
269
"uri": {
238
270
"format": "at-uri",
239
271
"type": "string"
240
272
}
241
273
},
242
274
"required": [
243
275
"uri",
244
276
"invitee",
245
277
"createdAt"
246
278
],
247
279
"type": "object"
248
280
},
249
281
"joinRequestView": {
250
282
"properties": {
251
283
"actor": {
252
284
"description": "Who is asking, as a view names them.",
253
285
"ref": "#actorView",
254
286
"type": "ref"
255
287
},
256
288
"createdAt": {
257
289
"format": "datetime",
258
290
"type": "string"
259
291
},
260
292
"did": {
261
293
"format": "did",
262
294
"type": "string"
263
295
},
264
296
"invite": {
265
297
"format": "at-uri",
266
298
"type": "string"
267
299
},
268
300
"message": {
269
301
"type": "string"
270
302
}
271
303
},
272
304
"required": [
273
305
"did",
274
306
"createdAt"
275
307
],
276
308
"type": "object"
277
309
},
278
310
"memberView": {
279
311
"properties": {
280
312
"actor": {
281
313
"ref": "#actorView",
282
314
"type": "ref"
283
315
},
284
316
"roles": {
285
317
"items": {
286
318
"type": "string"
287
319
},
288
320
"type": "array"
289
321
}
290
322
},
291
323
"required": [
292
324
"actor",
293
325
"roles"
294
326
],
295
327
"type": "object"
296
328
},
297
329
"roleView": {
298
330
"properties": {
299
331
"description": {
300
332
"type": "string"
301
333
},
302
334
"key": {
303
335
"description": "The role id: its record key.",
304
336
"type": "string"
305
337
},
306
338
"name": {
307
339
"type": "string"
308
340
}
309
341
},
310
342
"required": [
311
343
"key"
312
344
],
313
345
"type": "object"
314
346
},
315
347
"spaceView": {
316
348
"properties": {
349
+
"credentialScopes": {
350
+
"description": "What each role may write there as the group, when the viewer may read the space.",
351
+
"items": {
352
+
"ref": "fyi.opensocial.access#roleScopes",
353
+
"type": "ref"
354
+
},
355
+
"type": "array"
356
+
},
317
357
"name": {
318
358
"type": "string"
319
359
},
320
360
"readableBy": {
321
361
"description": "The space's read gate, when the viewer may read the space.",
322
362
"items": {
323
363
"type": "string"
324
364
},
325
365
"type": "array"
326
366
},
327
367
"type": {
328
368
"format": "nsid",
329
369
"type": "string"
330
370
},
331
371
"uri": {
332
372
"format": "space-ref",
333
373
"type": "string"
374
+
},
375
+
"writableBy": {
376
+
"description": "Who may write there in their own name, when the viewer may read the space. Absent is any member.",
377
+
"items": {
378
+
"type": "string"
379
+
},
380
+
"type": "array"
334
381
}
335
382
},
336
383
"required": [
337
384
"uri",
338
385
"type"
339
386
],
340
387
"type": "object"
341
388
},
342
389
"subjectView": {
343
390
"properties": {
344
391
"createdAt": {
345
392
"format": "datetime",
346
393
"type": "string"
347
394
},
348
395
"lastReportedAt": {
349
396
"format": "datetime",
350
397
"type": "string"
351
398
},
352
399
"reportCount": {
353
400
"type": "integer"
354
401
},
355
402
"status": {
356
403
"knownValues": [
357
404
"open",
358
405
"escalated",
359
406
"resolved"
360
407
],
361
408
"type": "string"
362
409
},
363
410
"subject": {
364
411
"description": "A record's at-uri, or an account's DID.",
365
412
"format": "uri",
366
413
"type": "string"
367
414
},
368
415
"updatedAt": {
369
416
"format": "datetime",
370
417
"type": "string"
371
418
}
372
419
},
373
420
"required": [
374
421
"subject",
375
422
"status",
376
423
"createdAt"
377
424
],
378
425
"type": "object"
379
426
},
380
427
"viewerState": {
381
428
"description": "The requesting account's standing in the group. Only present for authed requests.",
382
429
"properties": {
383
430
"accepted": {
384
431
"description": "For a member: whether their own acceptance is in the members space.",
385
432
"type": "boolean"
386
433
},
387
434
"actions": {
388
435
"description": "The union of actions across the viewer's roles: what the host would let them do.",
389
436
"items": {
390
437
"ref": "fyi.opensocial.permissions#action",
391
438
"type": "ref"
392
439
},
393
440
"type": "array"
394
441
},
395
442
"member": {
396
443
"type": "boolean"
397
444
},
398
445
"request": {
399
446
"description": "The viewer's own pending request to join, when they are not a member and have one.",
400
447
"ref": "#joinRequestView",
401
448
"type": "ref"
402
449
},
403
450
"roles": {
404
451
"items": {
405
452
"type": "string"
406
453
},
407
454
"type": "array"
408
455
}
409
456
},
410
457
"required": [
411
458
"member",
412
459
"roles",
413
460
"actions"
414
461
],
415
462
"type": "object"
416
463
}
417
464
},
418
465
"id": "fyi.opensocial.defs",
419
466
"lexicon": 1
420
467
}