fyi.opensocial.site
Schema Diff
+30 -1
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 8 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.opensocial.site#appview" }AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"appview": {
5
+
"description": "An app server a tab reads for the viewer: what its methods' names start with, and the service, by DID and id.",
6
+
"properties": {
7
+
"prefix": {
8
+
"description": "social.grain",
9
+
"maxLength": 253,
10
+
"type": "string"
11
+
},
12
+
"service": {
13
+
"description": "did:web:grain.social#grain_appview",
14
+
"maxLength": 2048,
15
+
"type": "string"
16
+
}
17
+
},
18
+
"required": [
19
+
"prefix",
20
+
"service"
21
+
],
22
+
"type": "object"
23
+
},
4
24
"channel": {
5
25
"properties": {
6
26
"front": {
7
27
"description": "The site's front page, drawn across the whole window with nothing around it, at every path at the group's address but the channels' (/c/<channel>/<tab>). Members land in the channels at the address itself, and see it at any other of its paths. One tab at most, and one anyone may see.",
8
28
"type": "boolean"
9
29
},
10
30
"members": {
11
31
"description": "Shown to members only.",
12
32
"type": "boolean"
13
33
},
14
34
"name": {
15
35
"maxGraphemes": 64,
16
36
"maxLength": 640,
17
37
"type": "string"
18
38
},
19
39
"roles": {
20
40
"description": "Shown only to members with one of these roles, by the group's role ids: a channel for those who run part of the group. Implies members.",
21
41
"items": {
22
42
"maxLength": 128,
23
43
"type": "string"
24
44
},
25
45
"maxLength": 20,
26
46
"type": "array"
27
47
},
28
48
"slug": {
29
49
"description": "Lowercase letters, digits and dashes; its address within the site.",
30
50
"maxLength": 64,
31
51
"type": "string"
32
52
},
33
53
"tabs": {
34
54
"items": {
35
55
"ref": "#tab",
36
56
"type": "ref"
37
57
},
38
58
"maxLength": 50,
39
59
"type": "array"
40
60
}
41
61
},
42
62
"required": [
43
63
"slug",
44
64
"tabs"
45
65
],
46
66
"type": "object"
47
67
},
48
68
"file": {
49
69
"properties": {
50
70
"file": {
51
71
"maxSize": 5000000,
52
72
"type": "blob"
53
73
},
54
74
"path": {
55
75
"maxLength": 512,
56
76
"type": "string"
57
77
}
58
78
},
59
79
"required": [
60
80
"path",
61
81
"file"
62
82
],
63
83
"type": "object"
64
84
},
65
85
"main": {
66
86
"description": "A group's site, in its members space: channels of tabs, shown one at a time, each a whole HTML document drawn in a sandboxed frame. Authored by the group DID; written through putSite by whoever holds group.configure. Anyone else is handed only its public part, by the host. A group without one is shown the starter.",
67
87
"key": "literal:self",
68
88
"record": {
69
89
"properties": {
70
90
"channels": {
71
91
"items": {
72
92
"ref": "#channel",
73
93
"type": "ref"
74
94
},
75
95
"maxLength": 50,
76
96
"type": "array"
77
97
},
78
98
"files": {
79
99
"description": "Everything the site is made of, by path. A tab's page is `<channel>/<tab>.html`, or `<channel>/<tab>/index.html` with what it uses beside it; `site.css` is put in front of every tab.",
80
100
"items": {
81
101
"ref": "#file",
82
102
"type": "ref"
83
103
},
84
104
"maxLength": 500,
85
105
"type": "array"
86
106
},
87
107
"theme": {
88
108
"ref": "#theme",
89
109
"type": "ref"
90
110
},
91
111
"updatedAt": {
92
112
"format": "datetime",
93
113
"type": "string"
94
114
}
95
115
},
96
116
"required": [
97
117
"channels",
98
118
"files",
99
119
"updatedAt"
100
120
],
101
121
"type": "object"
102
122
},
103
123
"type": "record"
104
124
},
105
125
"tab": {
106
126
"properties": {
107
127
"about": {
108
128
"description": "The one thing it is for, which its page shows: an event's or a chat room's URI in one of the group's spaces, a board's space, or a member's DID. Its tab comes and goes with it.",
109
129
"maxLength": 512,
110
130
"type": "string"
111
131
},
132
+
"appviews": {
133
+
"description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
134
+
"items": {
135
+
"ref": "fyi.opensocial.site#appview",
136
+
"type": "ref"
137
+
},
138
+
"maxLength": 10,
139
+
"type": "array"
140
+
},
112
141
"asGroup": {
113
142
"description": "What it writes as the group rather than as the viewer, and the kind of space each goes in.",
114
143
"items": {
115
144
"ref": "fyi.opensocial.template#asGroup",
116
145
"type": "ref"
117
146
},
118
147
"type": "array"
119
148
},
120
149
"calls": {
121
-
"description": "The host methods it may call for the viewer.",
150
+
"description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
122
151
"items": {
123
152
"format": "nsid",
124
153
"type": "string"
125
154
},
126
155
"maxLength": 50,
127
156
"type": "array"
128
157
},
129
158
"cid": {
130
159
"description": "With a template URI: that version only.",
131
160
"format": "cid",
132
161
"type": "string"
133
162
},
134
163
"labels": {
135
164
"description": "Its words for what it lets people do, by record kind or method.",
136
165
"items": {
137
166
"ref": "fyi.opensocial.template#label",
138
167
"type": "ref"
139
168
},
140
169
"type": "array"
141
170
},
142
171
"members": {
143
172
"description": "Shown to members only.",
144
173
"type": "boolean"
145
174
},
146
175
"page": {
147
176
"description": "One of the site's files to show, which tabs alike share (every event's tab, say). Read before the tab's own file and its template.",
148
177
"maxLength": 256,
149
178
"type": "string"
150
179
},
151
180
"reads": {
152
181
"description": "The collections it may read from the group, its members and its spaces.",
153
182
"items": {
154
183
"format": "nsid",
155
184
"type": "string"
156
185
},
157
186
"maxLength": 50,
158
187
"type": "array"
159
188
},
160
189
"roles": {
161
190
"description": "For members with one of these roles, by the group's role ids. Others don't see it, or its tab. Members only.",
162
191
"items": {
163
192
"maxLength": 64,
164
193
"type": "string"
165
194
},
166
195
"maxLength": 20,
167
196
"type": "array"
168
197
},
169
198
"slug": {
170
199
"maxLength": 64,
171
200
"type": "string"
172
201
},
173
202
"template": {
174
203
"description": "Drawn from a template when the site has no page of its own for it: a bundled one by name, a fyi.opensocial.template by URI, or a member's fyi.opensocial.page by its URI in the group's space for members' work. A member's page is only ever drawn for members.",
175
204
"maxLength": 512,
176
205
"type": "string"
177
206
},
178
207
"title": {
179
208
"maxGraphemes": 64,
180
209
"maxLength": 640,
181
210
"type": "string"
182
211
},
183
212
"writes": {
184
213
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
185
214
"items": {
186
215
"format": "nsid",
187
216
"type": "string"
188
217
},
189
218
"maxLength": 50,
190
219
"type": "array"
191
220
}
192
221
},
193
222
"required": [
194
223
"slug"
195
224
],
196
225
"type": "object"
197
226
},
198
227
"theme": {
199
228
"description": "Colours, fonts and corners as CSS values, and what sits behind the tabs.",
200
229
"properties": {
201
230
"accent": {
202
231
"maxLength": 200,
203
232
"type": "string"
204
233
},
205
234
"accentInk": {
206
235
"maxLength": 200,
207
236
"type": "string"
208
237
},
209
238
"bg": {
210
239
"maxLength": 200,
211
240
"type": "string"
212
241
},
213
242
"fontBody": {
214
243
"maxLength": 200,
215
244
"type": "string"
216
245
},
217
246
"fontDisplay": {
218
247
"maxLength": 200,
219
248
"type": "string"
220
249
},
221
250
"ink": {
222
251
"maxLength": 200,
223
252
"type": "string"
224
253
},
225
254
"line": {
226
255
"maxLength": 200,
227
256
"type": "string"
228
257
},
229
258
"muted": {
230
259
"maxLength": 200,
231
260
"type": "string"
232
261
},
233
262
"radius": {
234
263
"maxLength": 200,
235
264
"type": "string"
236
265
},
237
266
"surface": {
238
267
"maxLength": 200,
239
268
"type": "string"
240
269
},
241
270
"wallpaper": {
242
271
"description": "A built-in wallpaper by name, `banner` for the group's banner, or the path of an image in the site's files.",
243
272
"maxLength": 512,
244
273
"type": "string"
245
274
}
246
275
},
247
276
"type": "object"
248
277
}
249
278
},
250
279
"id": "fyi.opensocial.site",
251
280
"lexicon": 1
252
281
}