com.suibari.nagi.getPreferences
Schema Diff
+47 -1
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 14 non-breaking changes.
Breaking Changes (4)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.provider", kind: "prop", name: Some("provider") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.post", kind: "prop", name: Some("post") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.translation", kind: "prop", name: Some("translation") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate", kind: "prop", name: Some("autoTranslate") }
Non-Breaking Changes (14)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.post" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.provider" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.translation" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.post" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.provider" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences.translation" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.provider", kind: "prop", name: Some("provider") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.post", kind: "prop", name: Some("post") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.translation", kind: "prop", name: Some("translation") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences", src: "com.suibari.nagi.getPreferences#languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences.autoTranslate", kind: "prop", name: Some("autoTranslate") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", 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
19
"feedTabs": {
20
20
"type": "array",
21
21
"items": {
22
22
"ref": "#feedTab",
23
23
"type": "ref"
24
24
},
25
25
"maxLength": 16,
26
26
"description": "フィードのタブ。表示順そのまま。"
27
27
},
28
28
"replyFreq": {
29
29
"type": "integer",
30
30
"maximum": 100,
31
31
"minimum": 0,
32
32
"description": "botたんからの返信確率(0〜100%)。Bluesky側のfreq設定と共用。"
33
33
},
34
34
"preferredName": {
35
35
"type": "string",
36
36
"maxLength": 120,
37
37
"description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
38
38
"maxGraphemes": 40
39
39
},
40
40
"readPositions": {
41
41
"type": "array",
42
42
"items": {
43
43
"ref": "#readPosition",
44
44
"type": "ref"
45
45
}
46
46
},
47
47
"emojiFavorites": {
48
48
"type": "array",
49
49
"items": {
50
50
"type": "unknown"
51
51
},
52
52
"maxLength": 32,
53
53
"description": "お気に入り絵文字パレット。表示順そのまま。要素は #unicodeFavorite または #customFavorite。"
54
54
},
55
55
"feedTabsUpdatedAt": {
56
56
"type": "string",
57
57
"format": "datetime",
58
58
"description": "省略時は、この利用者がまだ一度もタブをカスタムしていないことを表す(クライアントは既定タブを使う)。"
59
59
},
60
+
"languagePreferences": {
61
+
"ref": "#languagePreferences",
62
+
"type": "ref"
63
+
},
64
+
"lastBookmarkFolderId": {
65
+
"type": "string",
66
+
"maxLength": 64
67
+
},
60
68
"emojiFavoritesUpdatedAt": {
61
69
"type": "string",
62
70
"format": "datetime",
63
71
"description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。"
72
+
},
73
+
"lastBookmarkFolderUpdatedAt": {
74
+
"type": "string",
75
+
"format": "datetime"
76
+
},
77
+
"languagePreferencesUpdatedAt": {
78
+
"type": "string",
79
+
"format": "datetime"
64
80
}
65
81
}
66
82
},
67
83
"encoding": "application/json"
68
84
},
69
-
"description": "端末をまたいで同期する本人の設定(my Nagi の既読位置とお気に入り絵文字)を返す。他ユーザーからは参照できない。"
85
+
"description": "端末をまたいで同期する本人の設定(既読位置、お気に入り絵文字、フィードタブ、投稿・翻訳言語、最後のブックマークフォルダ)を返す。他ユーザーからは参照できない。"
70
86
},
71
87
"feedTab": {
72
88
"type": "object",
73
89
"required": [
74
90
"id",
75
91
"kind"
76
92
],
77
93
"properties": {
78
94
"id": {
79
95
"type": "string",
80
96
"maxLength": 64
81
97
},
82
98
"uri": {
83
99
"type": "string",
84
100
"format": "at-uri",
85
101
"maxLength": 2048,
86
102
"description": "kind が channel のときのチャンネル。"
87
103
},
88
104
"kind": {
89
105
"type": "string",
90
106
"maxLength": 32,
91
107
"knownValues": [
92
108
"list",
93
109
"global",
94
110
"custom",
95
111
"channel",
96
112
"search"
97
113
]
98
114
},
99
115
"label": {
100
116
"type": "string",
101
117
"maxLength": 64,
102
118
"description": "表示名のスナップショット。権威は uri / query 側。"
103
119
},
104
120
"query": {
105
121
"type": "string",
106
122
"maxLength": 128,
107
123
"description": "kind が search のときの保存クエリ。"
108
124
},
109
125
"source": {
110
126
"type": "string",
111
127
"maxLength": 32,
112
128
"description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
113
129
"knownValues": [
114
130
"home",
115
131
"affirmation"
116
132
]
117
133
},
118
134
"queryKind": {
119
135
"type": "string",
120
136
"maxLength": 32,
121
137
"knownValues": [
122
138
"keyword",
123
139
"tag"
124
140
]
125
141
}
126
142
},
127
143
"description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。"
128
144
},
129
145
"readPosition": {
130
146
"type": "object",
131
147
"required": [
132
148
"section",
133
149
"indexedAt",
134
150
"uri"
135
151
],
136
152
"properties": {
137
153
"uri": {
138
154
"type": "string",
139
155
"format": "at-uri",
140
156
"maxLength": 2048
141
157
},
142
158
"section": {
143
159
"type": "string",
144
160
"maxLength": 32,
145
161
"knownValues": [
146
162
"bot",
147
163
"community",
148
164
"list",
149
165
"channels",
150
166
"news"
151
167
]
152
168
},
153
169
"indexedAt": {
154
170
"type": "string",
155
171
"format": "datetime"
156
172
}
157
173
},
158
174
"description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。"
159
175
},
160
176
"customFavorite": {
161
177
"type": "object",
162
178
"required": [
163
179
"kind",
164
180
"emoji"
165
181
],
166
182
"properties": {
167
183
"kind": {
168
184
"type": "string",
169
185
"const": "custom"
170
186
},
171
187
"emoji": {
172
188
"type": "unknown"
173
189
}
174
190
},
175
191
"description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。"
176
192
},
177
193
"unicodeFavorite": {
178
194
"type": "object",
179
195
"required": [
180
196
"kind",
181
197
"emoji"
182
198
],
183
199
"properties": {
184
200
"kind": {
185
201
"type": "string",
186
202
"const": "unicode"
187
203
},
188
204
"emoji": {
189
205
"type": "string",
190
206
"maxLength": 64
191
207
}
192
208
}
209
+
},
210
+
"languagePreferences": {
211
+
"type": "object",
212
+
"required": [
213
+
"post",
214
+
"translation",
215
+
"provider",
216
+
"autoTranslate"
217
+
],
218
+
"properties": {
219
+
"post": {
220
+
"type": "string",
221
+
"maxLength": 16
222
+
},
223
+
"provider": {
224
+
"type": "string",
225
+
"knownValues": [
226
+
"kagi",
227
+
"deepl",
228
+
"google"
229
+
]
230
+
},
231
+
"translation": {
232
+
"type": "string",
233
+
"maxLength": 16
234
+
},
235
+
"autoTranslate": {
236
+
"type": "boolean"
237
+
}
238
+
}
193
239
}
194
240
},
195
241
"$type": "com.atproto.lexicon.schema",
196
242
"lexicon": 1
197
243
}