fyi.opensocial.defs
Schema Diff
+19 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 12 non-breaking changes.
Non-Breaking Changes (12)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#actorView.description" }
- 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#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#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
- 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#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
},
153
156
"groupViewBasic": {
154
157
"properties": {
155
158
"avatar": {
156
159
"description": "CID of the group's picture.",
157
160
"type": "string"
158
161
},
159
162
"did": {
160
163
"format": "did",
161
164
"type": "string"
162
165
},
163
166
"displayName": {
164
167
"type": "string"
165
168
},
166
169
"handle": {
167
170
"format": "handle",
168
171
"type": "string"
169
172
},
170
173
"url": {
171
174
"description": "The group's own site, if not at its handle.",
172
175
"format": "uri",
173
176
"type": "string"
174
177
}
175
178
},
176
179
"required": [
177
180
"did",
178
181
"handle"
179
182
],
180
183
"type": "object"
181
184
},
182
185
"groupViewDetailed": {
183
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.",
184
187
"properties": {
185
188
"avatar": {
186
189
"description": "CID of the avatar blob; the host serves it at /img/{did}/avatar.",
187
190
"type": "string"
188
191
},
189
192
"banner": {
190
193
"description": "CID of the banner blob; the host serves it at /img/{did}/banner.",
191
194
"type": "string"
192
195
},
193
196
"deactivated": {
194
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.",
195
198
"type": "boolean"
196
199
},
197
200
"description": {
198
201
"type": "string"
199
202
},
200
203
"did": {
201
204
"format": "did",
202
205
"type": "string"
203
206
},
204
207
"displayName": {
205
208
"type": "string"
206
209
},
207
210
"handle": {
208
211
"format": "handle",
209
212
"type": "string"
210
213
},
211
214
"joinPolicy": {
212
215
"description": "How new members get in, as the profile states it.",
213
216
"type": "string"
214
217
},
215
218
"members": {
216
219
"format": "space-ref",
217
220
"type": "string"
218
221
},
219
222
"meta": {
220
223
"format": "space-ref",
221
224
"type": "string"
222
225
},
223
226
"rules": {
224
227
"description": "In the order they are presented. Absent when the meta space is closed to the viewer.",
225
228
"items": {
226
229
"ref": "#groupRule",
227
230
"type": "ref"
228
231
},
229
232
"type": "array"
230
233
},
231
234
"url": {
232
235
"description": "The group's own site, if it keeps one.",
233
236
"format": "uri",
234
237
"type": "string"
235
238
},
236
239
"viewer": {
237
240
"ref": "#viewerState",
238
241
"type": "ref"
239
242
}
240
243
},
241
244
"required": [
242
245
"did",
243
246
"handle",
244
247
"meta",
245
248
"members"
246
249
],
247
250
"type": "object"
248
251
},
249
252
"inviteView": {
250
253
"properties": {
251
254
"createdAt": {
252
255
"format": "datetime",
253
256
"type": "string"
254
257
},
255
258
"expiresAt": {
256
259
"format": "datetime",
257
260
"type": "string"
258
261
},
259
262
"invitee": {
260
263
"format": "did",
261
264
"type": "string"
262
265
},
263
266
"message": {
264
267
"type": "string"
265
268
},
266
269
"uri": {
267
270
"format": "at-uri",
268
271
"type": "string"
269
272
}
270
273
},
271
274
"required": [
272
275
"uri",
273
276
"invitee",
274
277
"createdAt"
275
278
],
276
279
"type": "object"
277
280
},
278
281
"joinRequestView": {
279
282
"properties": {
280
283
"actor": {
281
284
"description": "Who is asking, as a view names them.",
282
285
"ref": "#actorView",
283
286
"type": "ref"
284
287
},
285
288
"createdAt": {
286
289
"format": "datetime",
287
290
"type": "string"
288
291
},
289
292
"did": {
290
293
"format": "did",
291
294
"type": "string"
292
295
},
293
296
"invite": {
294
297
"format": "at-uri",
295
298
"type": "string"
296
299
},
297
300
"message": {
298
301
"type": "string"
299
302
}
300
303
},
301
304
"required": [
302
305
"did",
303
306
"createdAt"
304
307
],
305
308
"type": "object"
306
309
},
307
310
"memberView": {
308
311
"properties": {
309
312
"actor": {
310
313
"ref": "#actorView",
311
314
"type": "ref"
312
315
},
313
316
"roles": {
314
317
"items": {
315
318
"type": "string"
316
319
},
317
320
"type": "array"
318
321
}
319
322
},
320
323
"required": [
321
324
"actor",
322
325
"roles"
323
326
],
324
327
"type": "object"
325
328
},
326
329
"roleView": {
327
330
"properties": {
328
331
"description": {
329
332
"type": "string"
330
333
},
331
334
"key": {
332
335
"description": "The role id: its record key.",
333
336
"type": "string"
334
337
},
335
338
"name": {
336
339
"type": "string"
337
340
}
338
341
},
339
342
"required": [
340
343
"key"
341
344
],
342
345
"type": "object"
343
346
},
344
347
"spaceView": {
345
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
+
},
346
357
"name": {
347
358
"type": "string"
348
359
},
349
360
"readableBy": {
350
361
"description": "The space's read gate, when the viewer may read the space.",
351
362
"items": {
352
363
"type": "string"
353
364
},
354
365
"type": "array"
355
366
},
356
367
"type": {
357
368
"format": "nsid",
358
369
"type": "string"
359
370
},
360
371
"uri": {
361
372
"format": "space-ref",
362
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"
363
381
}
364
382
},
365
383
"required": [
366
384
"uri",
367
385
"type"
368
386
],
369
387
"type": "object"
370
388
},
371
389
"subjectView": {
372
390
"properties": {
373
391
"createdAt": {
374
392
"format": "datetime",
375
393
"type": "string"
376
394
},
377
395
"lastReportedAt": {
378
396
"format": "datetime",
379
397
"type": "string"
380
398
},
381
399
"reportCount": {
382
400
"type": "integer"
383
401
},
384
402
"status": {
385
403
"knownValues": [
386
404
"open",
387
405
"escalated",
388
406
"resolved"
389
407
],
390
408
"type": "string"
391
409
},
392
410
"subject": {
393
411
"description": "A record's at-uri, or an account's DID.",
394
412
"format": "uri",
395
413
"type": "string"
396
414
},
397
415
"updatedAt": {
398
416
"format": "datetime",
399
417
"type": "string"
400
418
}
401
419
},
402
420
"required": [
403
421
"subject",
404
422
"status",
405
423
"createdAt"
406
424
],
407
425
"type": "object"
408
426
},
409
427
"viewerState": {
410
428
"description": "The requesting account's standing in the group. Only present for authed requests.",
411
429
"properties": {
412
430
"accepted": {
413
431
"description": "For a member: whether their own acceptance is in the members space.",
414
432
"type": "boolean"
415
433
},
416
434
"actions": {
417
435
"description": "The union of actions across the viewer's roles: what the host would let them do.",
418
436
"items": {
419
437
"ref": "fyi.opensocial.permissions#action",
420
438
"type": "ref"
421
439
},
422
440
"type": "array"
423
441
},
424
442
"member": {
425
443
"type": "boolean"
426
444
},
427
445
"request": {
428
446
"description": "The viewer's own pending request to join, when they are not a member and have one.",
429
447
"ref": "#joinRequestView",
430
448
"type": "ref"
431
449
},
432
450
"roles": {
433
451
"items": {
434
452
"type": "string"
435
453
},
436
454
"type": "array"
437
455
}
438
456
},
439
457
"required": [
440
458
"member",
441
459
"roles",
442
460
"actions"
443
461
],
444
462
"type": "object"
445
463
}
446
464
},
447
465
"id": "fyi.opensocial.defs",
448
466
"lexicon": 1
449
467
}