com.getorbyt.getServiceInfo
Schema Diff
+132 -0
Compatibility Analysis
Breaking Changes Detected
7 breaking changes, 37 non-breaking changes.
Breaking Changes (7)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.value", kind: "prop", name: Some("value") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.key", kind: "prop", name: Some("key") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.version", kind: "prop", name: Some("version") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items", kind: "prop", name: Some("items") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNote", src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.title", kind: "prop", name: Some("title") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#config", src: "com.getorbyt.getServiceInfo#config", tgt: "com.getorbyt.getServiceInfo#config.values", kind: "prop", name: Some("values") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#providers", src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.network", kind: "prop", name: Some("network") }
Non-Breaking Changes (37)
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values:items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.key" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.value" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.appView" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.chat" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.discoveryFeed" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.discoveryFeedService" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.network" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.detail" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.title" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items:items" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.version" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.config" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.providers" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.releaseNotes" }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#config.values", tgt: "com.getorbyt.getServiceInfo#config.values:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#config.values:items", tgt: "com.getorbyt.getServiceInfo#configValue", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.appView", kind: "prop", name: Some("appView") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.chat", kind: "prop", name: Some("chat") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.discoveryFeed", kind: "prop", name: Some("discoveryFeed") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.discoveryFeedService", kind: "prop", name: Some("discoveryFeedService") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.detail", kind: "prop", name: Some("detail") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items:items", tgt: "com.getorbyt.getServiceInfo#releaseNote", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.providers", kind: "prop", name: Some("providers") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.providers", tgt: "com.getorbyt.getServiceInfo#providers", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#config.values:items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.key" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#configValue.value" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.appView" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.chat" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.discoveryFeed" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.discoveryFeedService" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#providers.network" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.detail" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNote.title" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.items:items" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes.version" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.config" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.providers" }AddedVertex { vertex_id: "com.getorbyt.getServiceInfo:output.releaseNotes" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.value", kind: "prop", name: Some("value") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#configValue", src: "com.getorbyt.getServiceInfo#configValue", tgt: "com.getorbyt.getServiceInfo#configValue.key", kind: "prop", name: Some("key") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#providers", src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.network", kind: "prop", name: Some("network") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#config", src: "com.getorbyt.getServiceInfo#config", tgt: "com.getorbyt.getServiceInfo#config.values", kind: "prop", name: Some("values") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.version", kind: "prop", name: Some("version") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNotes", src: "com.getorbyt.getServiceInfo#releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items", kind: "prop", name: Some("items") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.getorbyt.getServiceInfo#releaseNote", src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.title", kind: "prop", name: Some("title") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#config.values", tgt: "com.getorbyt.getServiceInfo#config.values:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#config.values:items", tgt: "com.getorbyt.getServiceInfo#configValue", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.appView", kind: "prop", name: Some("appView") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.chat", kind: "prop", name: Some("chat") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.discoveryFeed", kind: "prop", name: Some("discoveryFeed") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#providers", tgt: "com.getorbyt.getServiceInfo#providers.discoveryFeedService", kind: "prop", name: Some("discoveryFeedService") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNote", tgt: "com.getorbyt.getServiceInfo#releaseNote.detail", kind: "prop", name: Some("detail") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items", tgt: "com.getorbyt.getServiceInfo#releaseNotes.items:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo#releaseNotes.items:items", tgt: "com.getorbyt.getServiceInfo#releaseNote", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.providers", kind: "prop", name: Some("providers") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output", tgt: "com.getorbyt.getServiceInfo:output.releaseNotes", kind: "prop", name: Some("releaseNotes") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.providers", tgt: "com.getorbyt.getServiceInfo#providers", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.releaseNotes", tgt: "com.getorbyt.getServiceInfo#releaseNotes", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"config": {
5
+
"description": "Client settings decided by the service. Every value is optional for the client: it keeps a built-in default for each key it reads and ignores keys it does not know.",
6
+
"properties": {
7
+
"values": {
8
+
"description": "Already filtered to the requesting platform and version.",
9
+
"items": {
10
+
"ref": "#configValue",
11
+
"type": "ref"
12
+
},
13
+
"maxLength": 64,
14
+
"type": "array"
15
+
}
16
+
},
17
+
"required": [
18
+
"values"
19
+
],
20
+
"type": "object"
21
+
},
22
+
"configValue": {
23
+
"description": "One setting. Values are strings so new keys need no schema change; the client parses each key it reads and falls back to its default when the value does not parse.",
24
+
"properties": {
25
+
"key": {
26
+
"maxLength": 64,
27
+
"type": "string"
28
+
},
29
+
"value": {
30
+
"maxLength": 256,
31
+
"type": "string"
32
+
}
33
+
},
34
+
"required": [
35
+
"key",
36
+
"value"
37
+
],
38
+
"type": "object"
39
+
},
4
40
"main": {
5
41
"description": "What this deployment of the Orbyt service can currently do, for clients that cannot be upgraded in step with it. Clients feature-detect against `capabilities` rather than comparing version numbers: only one version of this service is ever live, while many client builds run for months. Every field is optional and the whole call is optional — a client that cannot reach it, or reads an older service that does not serve it, must behave exactly as it did before. Unauthenticated.",
6
42
"output": {
7
43
"encoding": "application/json",
8
44
"schema": {
9
45
"properties": {
10
46
"capabilities": {
11
47
"description": "Behaviours this deployment supports, as opaque identifiers a client tests for membership of. Deliberately not `knownValues`: the whole point is that a client meets identifiers it has never heard of and ignores them. Removing one is how a feature is turned off in already-installed clients.",
12
48
"items": {
13
49
"maxLength": 64,
14
50
"type": "string"
15
51
},
16
52
"maxLength": 128,
17
53
"type": "array"
18
54
},
55
+
"config": {
56
+
"description": "Values the client reads instead of building them in, so they can change without a release. Absent from an older service; a client that finds it absent, or a key missing from it, keeps its built-in default.",
57
+
"ref": "#config",
58
+
"type": "ref"
59
+
},
19
60
"minimumClient": {
20
61
"description": "The oldest client version this service still answers correctly for the requested platform, as a semantic version. Advisory: this service does not refuse older clients, it tells them. A client below it should prompt for an update.",
21
62
"maxLength": 32,
22
63
"type": "string"
23
64
},
24
65
"notices": {
25
66
"description": "Messages for the viewer, such as a degraded subsystem or a scheduled maintenance window.",
26
67
"items": {
27
68
"ref": "#notice",
28
69
"type": "ref"
29
70
},
30
71
"maxLength": 8,
31
72
"type": "array"
32
73
},
74
+
"providers": {
75
+
"description": "Which external services this deployment is attached to, so a client can aim `atproto-proxy` at them without a release. Absent from an older service; a client that finds it absent keeps its built-in defaults.",
76
+
"ref": "#providers",
77
+
"type": "ref"
78
+
},
33
79
"recommendedClient": {
34
80
"description": "The newest released client version for the requested platform, so a client can offer a soft update prompt without a separate service.",
35
81
"maxLength": 32,
36
82
"type": "string"
83
+
},
84
+
"releaseNotes": {
85
+
"description": "What is new in the asking client's own version, for the sheet a client shows once on its first launch after an update. Present only when the request names a platform and a readable version this service has notes for. Absent from an older service; a client that finds it absent shows nothing.",
86
+
"ref": "#releaseNotes",
87
+
"type": "ref"
37
88
}
38
89
},
39
90
"required": [
40
91
"capabilities"
41
92
],
42
93
"type": "object"
43
94
}
44
95
},
45
96
"parameters": {
46
97
"properties": {
47
98
"platform": {
48
99
"description": "Which client is asking, so version advice can be answered for it. An unknown or absent platform is answered without version advice rather than refused.",
49
100
"knownValues": [
50
101
"ios",
51
102
"web"
52
103
],
53
104
"type": "string"
105
+
},
106
+
"version": {
107
+
"description": "The asking client's own version, as a semantic version. Lets the service aim `config` values at particular builds, for example to turn something off only in the builds that have a bug. Absent or unreadable is answered as if no build were targeted.",
108
+
"maxLength": 32,
109
+
"type": "string"
54
110
}
55
111
},
56
112
"type": "params"
57
113
},
58
114
"type": "query"
59
115
},
60
116
"notice": {
61
117
"description": "One operator message. `id` is stable so a client can remember that this viewer has already dismissed it.",
62
118
"properties": {
63
119
"id": {
64
120
"maxLength": 64,
65
121
"type": "string"
66
122
},
67
123
"message": {
68
124
"maxLength": 1000,
69
125
"type": "string"
70
126
},
71
127
"severity": {
72
128
"description": "Absent means info. A severity this client does not recognise must be presented as info rather than dropped or treated as blocking.",
73
129
"knownValues": [
74
130
"info",
75
131
"warning",
76
132
"blocking"
77
133
],
78
134
"type": "string"
79
135
},
80
136
"url": {
81
137
"format": "uri",
82
138
"type": "string"
83
139
}
84
140
},
85
141
"required": [
86
142
"id",
87
143
"message"
88
144
],
89
145
"type": "object"
146
+
},
147
+
"providers": {
148
+
"description": "Service identities only, never operational endpoints. Each service field is absent when this deployment has none; for `appView` that means standard social reads are unavailable and the client should not attempt them.",
149
+
"properties": {
150
+
"appView": {
151
+
"description": "Service DID with fragment answering `app.bsky.*` reads, e.g. `did:web:api.bsky.app#bsky_appview`.",
152
+
"maxLength": 256,
153
+
"type": "string"
154
+
},
155
+
"chat": {
156
+
"description": "Service DID with fragment for chat.",
157
+
"maxLength": 256,
158
+
"type": "string"
159
+
},
160
+
"discoveryFeed": {
161
+
"description": "The feed generator behind Your Mix.",
162
+
"format": "at-uri",
163
+
"type": "string"
164
+
},
165
+
"discoveryFeedService": {
166
+
"description": "Service DID with fragment for `discoveryFeed`.",
167
+
"maxLength": 256,
168
+
"type": "string"
169
+
},
170
+
"network": {
171
+
"description": "A stable label for the connected network, such as `bluesky`.",
172
+
"maxLength": 32,
173
+
"type": "string"
174
+
}
175
+
},
176
+
"required": [
177
+
"network"
178
+
],
179
+
"type": "object"
180
+
},
181
+
"releaseNote": {
182
+
"description": "One new thing: a short name and a sentence or two about it.",
183
+
"properties": {
184
+
"detail": {
185
+
"maxLength": 500,
186
+
"type": "string"
187
+
},
188
+
"title": {
189
+
"maxLength": 100,
190
+
"type": "string"
191
+
}
192
+
},
193
+
"required": [
194
+
"title"
195
+
],
196
+
"type": "object"
197
+
},
198
+
"releaseNotes": {
199
+
"description": "Notes for one released client version. Written by people for people, in the service so they can be written or corrected without a release.",
200
+
"properties": {
201
+
"items": {
202
+
"description": "What is new, most important first.",
203
+
"items": {
204
+
"ref": "#releaseNote",
205
+
"type": "ref"
206
+
},
207
+
"maxLength": 8,
208
+
"minLength": 1,
209
+
"type": "array"
210
+
},
211
+
"version": {
212
+
"description": "The version these notes describe, as a semantic version. A client shows them only when it is its own version.",
213
+
"maxLength": 32,
214
+
"type": "string"
215
+
}
216
+
},
217
+
"required": [
218
+
"version",
219
+
"items"
220
+
],
221
+
"type": "object"
90
222
}
91
223
},
92
224
"id": "com.getorbyt.getServiceInfo",
93
225
"lexicon": 1
94
226
}