com.getorbyt.getServiceInfo
Schema Diff
+46 -0
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 11 non-breaking changes.
Breaking Changes (3)
- 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#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") }
Non-Breaking Changes (11)
- 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:output.config" }
- 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:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- AddedEdge AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", 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:output.config" }
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#config", src: "com.getorbyt.getServiceInfo#config", tgt: "com.getorbyt.getServiceInfo#config.values", kind: "prop", name: Some("values") }
- 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:output", tgt: "com.getorbyt.getServiceInfo:output.config", kind: "prop", name: Some("config") }
- Non-breaking: AddedEdge { src: "com.getorbyt.getServiceInfo:output.config", tgt: "com.getorbyt.getServiceInfo#config", 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
},
33
74
"providers": {
34
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.",
35
76
"ref": "#providers",
36
77
"type": "ref"
37
78
},
38
79
"recommendedClient": {
39
80
"description": "The newest released client version for the requested platform, so a client can offer a soft update prompt without a separate service.",
40
81
"maxLength": 32,
41
82
"type": "string"
42
83
}
43
84
},
44
85
"required": [
45
86
"capabilities"
46
87
],
47
88
"type": "object"
48
89
}
49
90
},
50
91
"parameters": {
51
92
"properties": {
52
93
"platform": {
53
94
"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.",
54
95
"knownValues": [
55
96
"ios",
56
97
"web"
57
98
],
58
99
"type": "string"
100
+
},
101
+
"version": {
102
+
"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.",
103
+
"maxLength": 32,
104
+
"type": "string"
59
105
}
60
106
},
61
107
"type": "params"
62
108
},
63
109
"type": "query"
64
110
},
65
111
"notice": {
66
112
"description": "One operator message. `id` is stable so a client can remember that this viewer has already dismissed it.",
67
113
"properties": {
68
114
"id": {
69
115
"maxLength": 64,
70
116
"type": "string"
71
117
},
72
118
"message": {
73
119
"maxLength": 1000,
74
120
"type": "string"
75
121
},
76
122
"severity": {
77
123
"description": "Absent means info. A severity this client does not recognise must be presented as info rather than dropped or treated as blocking.",
78
124
"knownValues": [
79
125
"info",
80
126
"warning",
81
127
"blocking"
82
128
],
83
129
"type": "string"
84
130
},
85
131
"url": {
86
132
"format": "uri",
87
133
"type": "string"
88
134
}
89
135
},
90
136
"required": [
91
137
"id",
92
138
"message"
93
139
],
94
140
"type": "object"
95
141
},
96
142
"providers": {
97
143
"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.",
98
144
"properties": {
99
145
"appView": {
100
146
"description": "Service DID with fragment answering `app.bsky.*` reads, e.g. `did:web:api.bsky.app#bsky_appview`.",
101
147
"maxLength": 256,
102
148
"type": "string"
103
149
},
104
150
"chat": {
105
151
"description": "Service DID with fragment for chat.",
106
152
"maxLength": 256,
107
153
"type": "string"
108
154
},
109
155
"discoveryFeed": {
110
156
"description": "The feed generator behind Your Mix.",
111
157
"format": "at-uri",
112
158
"type": "string"
113
159
},
114
160
"discoveryFeedService": {
115
161
"description": "Service DID with fragment for `discoveryFeed`.",
116
162
"maxLength": 256,
117
163
"type": "string"
118
164
},
119
165
"network": {
120
166
"description": "A stable label for the connected network, such as `bluesky`.",
121
167
"maxLength": 32,
122
168
"type": "string"
123
169
}
124
170
},
125
171
"required": [
126
172
"network"
127
173
],
128
174
"type": "object"
129
175
}
130
176
},
131
177
"id": "com.getorbyt.getServiceInfo",
132
178
"lexicon": 1
133
179
}