fyi.atstore.listing.detail
Schema Diff
+45 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 10 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.url", kind: "prop", name: Some("url") }
Non-Breaking Changes (10)
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link" }
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.label" }
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.type" }
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.url" }
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links" }
- AddedVertex AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links:items" }
- AddedEdge AddedEdge { src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.label", kind: "prop", name: Some("label") }
- AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.links", kind: "prop", name: Some("links") }
- AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body.links", tgt: "fyi.atstore.listing.detail:body.links:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.atstore.listing.detail:body.links:items", tgt: "fyi.atstore.listing.detail#link", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.atstore.listing.detail#link" }AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.label" }AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.type" }AddedVertex { vertex_id: "fyi.atstore.listing.detail#link.url" }AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links" }AddedVertex { vertex_id: "fyi.atstore.listing.detail:body.links:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.atstore.listing.detail#link", src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.url", kind: "prop", name: Some("url") }
- Non-breaking: AddedEdge { src: "fyi.atstore.listing.detail#link", tgt: "fyi.atstore.listing.detail#link.label", kind: "prop", name: Some("label") }
- Non-breaking: AddedEdge { src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.links", kind: "prop", name: Some("links") }
- Non-breaking: AddedEdge { src: "fyi.atstore.listing.detail:body.links", tgt: "fyi.atstore.listing.detail:body.links:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.atstore.listing.detail:body.links:items", tgt: "fyi.atstore.listing.detail#link", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"link": {
5
+
"properties": {
6
+
"label": {
7
+
"description": "Optional human-readable label, especially useful when type is 'other'.",
8
+
"maxGraphemes": 50,
9
+
"maxLength": 100,
10
+
"type": "string"
11
+
},
12
+
"type": {
13
+
"description": "The kind of link.",
14
+
"knownValues": [
15
+
"privacy",
16
+
"terms",
17
+
"support",
18
+
"contact",
19
+
"docs",
20
+
"blog",
21
+
"changelog",
22
+
"source",
23
+
"status",
24
+
"other"
25
+
],
26
+
"type": "string"
27
+
},
28
+
"url": {
29
+
"description": "The destination URL.",
30
+
"format": "uri",
31
+
"type": "string"
32
+
}
33
+
},
34
+
"required": [
35
+
"type",
36
+
"url"
37
+
],
38
+
"type": "object"
39
+
},
4
40
"main": {
5
41
"description": "Public protocol or app listing in the AT Store directory. Images are stored as repo blobs (Kitchen-style); the web app caches HTTPS URLs in Postgres separately.",
6
42
"key": "tid",
7
43
"record": {
8
44
"properties": {
9
45
"appTags": {
10
46
"items": {
11
47
"maxLength": 96,
12
48
"type": "string"
13
49
},
14
50
"maxLength": 64,
15
51
"type": "array"
16
52
},
17
53
"categorySlug": {
18
54
"description": "Browse category keys (e.g. protocol/pds). First entry is the primary category for legacy surfaces.",
19
55
"items": {
20
56
"maxLength": 256,
21
57
"type": "string"
22
58
},
23
59
"maxLength": 32,
24
60
"minLength": 1,
25
61
"type": "array"
26
62
},
27
63
"createdAt": {
28
64
"format": "datetime",
29
65
"type": "string"
30
66
},
31
67
"description": {
32
68
"maxLength": 20000,
33
69
"type": "string"
34
70
},
35
71
"externalUrl": {
36
72
"description": "Primary product or project URL.",
37
73
"format": "uri",
38
74
"maxLength": 2048,
39
75
"type": "string"
40
76
},
41
77
"heroImage": {
42
78
"accept": [
43
79
"image/png",
44
80
"image/jpeg",
45
81
"image/webp",
46
82
"image/gif",
47
83
"image/svg+xml"
48
84
],
49
85
"description": "Hero / cover image blob.",
50
86
"maxSize": 12000000,
51
87
"type": "blob"
52
88
},
53
89
"icon": {
54
90
"accept": [
55
91
"image/png",
56
92
"image/jpeg",
57
93
"image/webp",
58
94
"image/gif",
59
95
"image/svg+xml"
60
96
],
61
97
"description": "Square / app icon (uploaded to repo via com.atproto.repo.uploadBlob).",
62
98
"maxSize": 2000000,
63
99
"type": "blob"
64
100
},
101
+
"links": {
102
+
"description": "Relevant links for the app, including trust/compliance, support, and project resources.",
103
+
"items": {
104
+
"ref": "#link",
105
+
"type": "ref"
106
+
},
107
+
"maxLength": 12,
108
+
"type": "array"
109
+
},
65
110
"migratedFromAtUri": {
66
111
"description": "When this listing.detail record supersedes a prior record in another repo (e.g. moved from the AT Store publisher to a product owner PDS), the at:// URI of that prior fyi.atstore.listing.detail record.",
67
112
"format": "at-uri",
68
113
"maxLength": 8192,
69
114
"type": "string"
70
115
},
71
116
"name": {
72
117
"maxLength": 640,
73
118
"type": "string"
74
119
},
75
120
"productAccountDid": {
76
121
"description": "Bluesky DID for the product, app, or tool (not the AT Store publisher). Handle is resolved and stored in Postgres only.",
77
122
"maxLength": 2048,
78
123
"type": "string"
79
124
},
80
125
"screenshots": {
81
126
"items": {
82
127
"accept": [
83
128
"image/png",
84
129
"image/jpeg",
85
130
"image/webp",
86
131
"image/gif",
87
132
"image/svg+xml"
88
133
],
89
134
"maxSize": 12000000,
90
135
"type": "blob"
91
136
},
92
137
"maxLength": 20,
93
138
"type": "array"
94
139
},
95
140
"slug": {
96
141
"description": "Stable URL slug; unique within the publishing account.",
97
142
"maxLength": 512,
98
143
"minLength": 1,
99
144
"type": "string"
100
145
},
101
146
"tagline": {
102
147
"maxLength": 300,
103
148
"type": "string"
104
149
},
105
150
"updatedAt": {
106
151
"format": "datetime",
107
152
"type": "string"
108
153
}
109
154
},
110
155
"required": [
111
156
"slug",
112
157
"name",
113
158
"tagline",
114
159
"externalUrl",
115
160
"icon",
116
161
"heroImage",
117
162
"categorySlug",
118
163
"createdAt",
119
164
"updatedAt"
120
165
],
121
166
"type": "object"
122
167
},
123
168
"type": "record"
124
169
}
125
170
},
126
171
"id": "fyi.atstore.listing.detail",
127
172
"lexicon": 1
128
173
}