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