at.inlay.component
Schema Diff
+9 -12
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 2 non-breaking changes.
Breaking Changes (3)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.inlay.component:body", src: "at.inlay.component:body", tgt: "at.inlay.component:body.type", kind: "prop", name: Some("type") }
- RemovedVertex RemovedVertex { vertex_id: "at.inlay.component:body.type" }
- ConstraintTightened ConstraintTightened { vertex_id: "at.inlay.component:body.imports:items", sort: "format", old_value: "at-uri", new_value: "did" }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "at.inlay.component#bodyExternal.personalized" }
- AddedEdge AddedEdge { src: "at.inlay.component#bodyExternal", tgt: "at.inlay.component#bodyExternal.personalized", kind: "prop", name: Some("personalized") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "at.inlay.component:body.type" }
Added Elements
AddedVertex { vertex_id: "at.inlay.component#bodyExternal.personalized" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "at.inlay.component:body.imports:items", sort: "format", old_value: "at-uri", new_value: "did" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "at.inlay.component:body", src: "at.inlay.component:body", tgt: "at.inlay.component:body.type", kind: "prop", name: Some("type") }
- Non-breaking: AddedEdge { src: "at.inlay.component#bodyExternal", tgt: "at.inlay.component#bodyExternal.personalized", kind: "prop", name: Some("personalized") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"bodyExternal": {
5
5
"description": "Component rendered by calling a remote XRPC endpoint",
6
6
"properties": {
7
7
"did": {
8
8
"description": "DID of the service hosting this component",
9
9
"format": "did",
10
10
"type": "string"
11
+
},
12
+
"personalized": {
13
+
"description": "When true, host sends a signed JWT identifying the viewer with each call.",
14
+
"type": "boolean"
11
15
}
12
16
},
13
17
"required": [
14
18
"did"
15
19
],
16
20
"type": "object"
17
21
},
18
22
"bodyTemplate": {
19
23
"description": "Component rendered by the host from a serialized element tree",
20
24
"properties": {
21
25
"node": {
22
26
"description": "Serialized element tree with bindings",
23
27
"type": "unknown"
24
28
}
25
29
},
26
30
"required": [
27
31
"node"
28
32
],
29
33
"type": "object"
30
34
},
31
35
"main": {
32
-
"description": "Component record - declares an implementation of a type",
33
-
"key": "tid",
36
+
"description": "Component record. The rkey is the type NSID this component implements.",
37
+
"key": "nsid",
34
38
"record": {
35
39
"properties": {
36
40
"body": {
37
41
"description": "How this component is rendered. Omit for primitives rendered by the host.",
38
42
"refs": [
39
43
"#bodyExternal",
40
44
"#bodyTemplate"
41
45
],
42
46
"type": "union"
43
47
},
44
48
"createdAt": {
45
49
"format": "datetime",
46
50
"type": "string"
47
51
},
48
52
"description": {
49
53
"maxGraphemes": 1000,
50
54
"maxLength": 10000,
51
55
"type": "string"
52
56
},
53
57
"imports": {
54
-
"description": "Ordered list of pack URIs (import stack). First pack that exports an NSID wins.",
58
+
"description": "Ordered list of DIDs (import stack). For each NSID, the first DID that has a component with that rkey wins.",
55
59
"items": {
56
-
"format": "at-uri",
60
+
"format": "did",
57
61
"type": "string"
58
62
},
59
63
"type": "array"
60
64
},
61
-
"type": {
62
-
"description": "NSID this component implements (also the XRPC procedure)",
63
-
"format": "nsid",
64
-
"type": "string"
65
-
},
66
65
"updatedAt": {
67
66
"description": "Last update timestamp. Set by the publish flow to bust cached responses.",
68
67
"format": "datetime",
69
68
"type": "string"
70
69
},
71
70
"via": {
72
71
"description": "Platform-managed deployment metadata",
73
72
"refs": [
74
73
"at.inlay.defs#viaValtown"
75
74
],
76
75
"type": "union"
77
76
},
78
77
"view": {
79
78
"description": "What data this component views and which prop receives it",
80
79
"ref": "#view",
81
80
"type": "ref"
82
81
}
83
82
},
84
-
"required": [
85
-
"type"
86
-
],
83
+
"required": [],
87
84
"type": "object"
88
85
},
89
86
"type": "record"
90
87
},
91
88
"view": {
92
89
"description": "Declares what data this component views and which prop receives it.",
93
90
"properties": {
94
91
"accepts": {
95
92
"description": "Data types this view accepts.",
96
93
"items": {
97
94
"refs": [
98
95
"#viewRecord",
99
96
"#viewPrimitive"
100
97
],
101
98
"type": "union"
102
99
},
103
100
"minLength": 1,
104
101
"type": "array"
105
102
},
106
103
"prop": {
107
104
"description": "Which component prop receives the view data.",
108
105
"maxLength": 256,
109
106
"type": "string"
110
107
}
111
108
},
112
109
"required": [
113
110
"prop",
114
111
"accepts"
115
112
],
116
113
"type": "object"
117
114
},
118
115
"viewPrimitive": {
119
116
"description": "View accepts a primitive value type.",
120
117
"properties": {
121
118
"format": {
122
119
"description": "String format constraint. Only applies when type is 'string'.",
123
120
"knownValues": [
124
121
"at-uri",
125
122
"did",
126
123
"datetime",
127
124
"uri",
128
125
"handle",
129
126
"at-identifier",
130
127
"nsid",
131
128
"cid",
132
129
"language",
133
130
"record-key",
134
131
"tid"
135
132
],
136
133
"maxLength": 64,
137
134
"type": "string"
138
135
},
139
136
"type": {
140
137
"description": "Lexicon primitive type.",
141
138
"knownValues": [
142
139
"string",
143
140
"integer",
144
141
"boolean",
145
142
"blob",
146
143
"cid-link",
147
144
"bytes"
148
145
],
149
146
"maxLength": 128,
150
147
"type": "string"
151
148
}
152
149
},
153
150
"required": [
154
151
"type"
155
152
],
156
153
"type": "object"
157
154
},
158
155
"viewRecord": {
159
156
"description": "View accepts individual records of a collection. Omit collection for a generic record view. When rkey is present, the component accepts bare DIDs (expanded to full AT URIs) and appears on identity pages.",
160
157
"properties": {
161
158
"collection": {
162
159
"description": "The collection this component views. Omit for any-collection.",
163
160
"format": "nsid",
164
161
"type": "string"
165
162
},
166
163
"rkey": {
167
164
"description": "The record key, baked from the collection's lexicon at authoring time. Presence enables DID expansion and identity page routing.",
168
165
"maxLength": 512,
169
166
"type": "string"
170
167
}
171
168
},
172
169
"type": "object"
173
170
}
174
171
},
175
172
"id": "at.inlay.component",
176
173
"lexicon": 1
177
174
}