com.suibari.nagi.getPreferences
Schema Diff
+72 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 20 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
Non-Breaking Changes (20)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
1
1
{
2
2
"id": "com.suibari.nagi.getPreferences",
3
3
"defs": {
4
4
"main": {
5
5
"type": "query",
6
6
"errors": [
7
7
{
8
8
"name": "AuthRequired"
9
9
}
10
10
],
11
11
"output": {
12
12
"schema": {
13
13
"type": "object",
14
14
"required": [
15
15
"readPositions",
16
16
"emojiFavorites"
17
17
],
18
18
"properties": {
19
+
"feedTabs": {
20
+
"type": "array",
21
+
"items": {
22
+
"ref": "#feedTab",
23
+
"type": "ref"
24
+
},
25
+
"maxLength": 16,
26
+
"description": "フィードのタブ。表示順そのまま。"
27
+
},
19
28
"readPositions": {
20
29
"type": "array",
21
30
"items": {
22
31
"ref": "#readPosition",
23
32
"type": "ref"
24
33
}
25
34
},
26
35
"emojiFavorites": {
27
36
"type": "array",
28
37
"items": {
29
38
"type": "unknown"
30
39
},
31
40
"maxLength": 32,
32
41
"description": "お気に入り絵文字パレット。表示順そのまま。要素は #unicodeFavorite または #customFavorite。"
33
42
},
43
+
"feedTabsUpdatedAt": {
44
+
"type": "string",
45
+
"format": "datetime",
46
+
"description": "省略時は、この利用者がまだ一度もタブをカスタムしていないことを表す(クライアントは既定タブを使う)。"
47
+
},
34
48
"emojiFavoritesUpdatedAt": {
35
49
"type": "string",
36
50
"format": "datetime",
37
51
"description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。"
38
52
}
39
53
}
40
54
},
41
55
"encoding": "application/json"
42
56
},
43
57
"description": "端末をまたいで同期する本人の設定(my Nagi の既読位置とお気に入り絵文字)を返す。他ユーザーからは参照できない。"
44
58
},
59
+
"feedTab": {
60
+
"type": "object",
61
+
"required": [
62
+
"id",
63
+
"kind"
64
+
],
65
+
"properties": {
66
+
"id": {
67
+
"type": "string",
68
+
"maxLength": 64
69
+
},
70
+
"uri": {
71
+
"type": "string",
72
+
"format": "at-uri",
73
+
"maxLength": 2048,
74
+
"description": "kind が channel のときのチャンネル。"
75
+
},
76
+
"kind": {
77
+
"type": "string",
78
+
"maxLength": 32,
79
+
"knownValues": [
80
+
"list",
81
+
"global",
82
+
"custom",
83
+
"channel",
84
+
"search"
85
+
]
86
+
},
87
+
"label": {
88
+
"type": "string",
89
+
"maxLength": 64,
90
+
"description": "表示名のスナップショット。権威は uri / query 側。"
91
+
},
92
+
"query": {
93
+
"type": "string",
94
+
"maxLength": 128,
95
+
"description": "kind が search のときの保存クエリ。"
96
+
},
97
+
"source": {
98
+
"type": "string",
99
+
"maxLength": 32,
100
+
"description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
101
+
"knownValues": [
102
+
"home",
103
+
"affirmation"
104
+
]
105
+
},
106
+
"queryKind": {
107
+
"type": "string",
108
+
"maxLength": 32,
109
+
"knownValues": [
110
+
"keyword",
111
+
"tag"
112
+
]
113
+
}
114
+
},
115
+
"description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。"
116
+
},
45
117
"readPosition": {
46
118
"type": "object",
47
119
"required": [
48
120
"section",
49
121
"indexedAt",
50
122
"uri"
51
123
],
52
124
"properties": {
53
125
"uri": {
54
126
"type": "string",
55
127
"format": "at-uri",
56
128
"maxLength": 2048
57
129
},
58
130
"section": {
59
131
"type": "string",
60
132
"maxLength": 32,
61
133
"knownValues": [
62
134
"bot",
63
135
"community",
64
136
"list",
65
137
"channels",
66
138
"news"
67
139
]
68
140
},
69
141
"indexedAt": {
70
142
"type": "string",
71
143
"format": "datetime"
72
144
}
73
145
},
74
146
"description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。"
75
147
},
76
148
"customFavorite": {
77
149
"type": "object",
78
150
"required": [
79
151
"kind",
80
152
"emoji"
81
153
],
82
154
"properties": {
83
155
"kind": {
84
156
"type": "string",
85
157
"const": "custom"
86
158
},
87
159
"emoji": {
88
160
"type": "unknown"
89
161
}
90
162
},
91
163
"description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。"
92
164
},
93
165
"unicodeFavorite": {
94
166
"type": "object",
95
167
"required": [
96
168
"kind",
97
169
"emoji"
98
170
],
99
171
"properties": {
100
172
"kind": {
101
173
"type": "string",
102
174
"const": "unicode"
103
175
},
104
176
"emoji": {
105
177
"type": "string",
106
178
"maxLength": 64
107
179
}
108
180
}
109
181
}
110
182
},
111
183
"$type": "com.atproto.lexicon.schema",
112
184
"lexicon": 1
113
185
}