max-account-api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/auth.d.ts +85 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +204 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +724 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +1601 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/media.d.ts +67 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +233 -0
- package/dist/media.js.map +1 -0
- package/dist/opcodes.d.ts +435 -0
- package/dist/opcodes.d.ts.map +1 -0
- package/dist/opcodes.js +456 -0
- package/dist/opcodes.js.map +1 -0
- package/dist/qr-bind.d.ts +60 -0
- package/dist/qr-bind.d.ts.map +1 -0
- package/dist/qr-bind.js +102 -0
- package/dist/qr-bind.js.map +1 -0
- package/dist/raw-transport.d.ts +125 -0
- package/dist/raw-transport.d.ts.map +1 -0
- package/dist/raw-transport.js +510 -0
- package/dist/raw-transport.js.map +1 -0
- package/dist/storage.d.ts +56 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +70 -0
- package/dist/storage.js.map +1 -0
- package/dist/transport.d.ts +52 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +193 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +1141 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/opcodes.js
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MAX protocol opcode catalogue.
|
|
3
|
+
*
|
|
4
|
+
* Source: extracted from decompiled `ru.oneme.app` (v26.15.1, build 6690) —
|
|
5
|
+
* specifically the `exc` enum class. Numbers + canonical names match the
|
|
6
|
+
* Android client's source-of-truth; the wire protocol uses the same numbers
|
|
7
|
+
* over WS (`ws-api.oneme.ru/websocket`, JSON frames) and TLS
|
|
8
|
+
* (`api.oneme.ru:443`, msgpack-+-LZ4 binary frames).
|
|
9
|
+
*
|
|
10
|
+
* **Transport overlap:**
|
|
11
|
+
* - **shared** ops (work on both transports): everything except auth/QR
|
|
12
|
+
* specifics. E.g. op 64 (MSG_SEND), op 49 (CHAT_HISTORY), op 128
|
|
13
|
+
* (NOTIF_MESSAGE), …
|
|
14
|
+
* - **mobile-only** (binary): 17 (AUTH_REQUEST), 18 (AUTH), 115
|
|
15
|
+
* (AUTH_LOGIN_CHECK_PASSWORD), 290 (AUTH_QR_APPROVE) — phone-auth +
|
|
16
|
+
* headless QR confirm.
|
|
17
|
+
* - **web-only** (WS): 288, 289, 291 — QR-code generation/poll/claim for a
|
|
18
|
+
* web device (the mobile enum doesn't include them; web client owns the
|
|
19
|
+
* QR side).
|
|
20
|
+
*
|
|
21
|
+
* **Backward compatibility:** every name that used to exist in this file is
|
|
22
|
+
* kept as an alias to the same number — no breaking changes. New canonical
|
|
23
|
+
* names from the decompilation are added alongside.
|
|
24
|
+
*/
|
|
25
|
+
export const Opcode = {
|
|
26
|
+
// ───────── infra ─────────
|
|
27
|
+
PING: 1,
|
|
28
|
+
DEBUG: 2,
|
|
29
|
+
RECONNECT: 3,
|
|
30
|
+
LOG: 5,
|
|
31
|
+
/** Alias of {@link Opcode.LOG}. */
|
|
32
|
+
EVENT_LOG: 5,
|
|
33
|
+
// ───────── session / auth ─────────
|
|
34
|
+
SESSION_INIT: 6,
|
|
35
|
+
/** Alias of {@link Opcode.SESSION_INIT}. */
|
|
36
|
+
HELLO: 6,
|
|
37
|
+
PROFILE: 16,
|
|
38
|
+
/** Alias of {@link Opcode.PROFILE}. */
|
|
39
|
+
PROFILE_UPDATE: 16,
|
|
40
|
+
/**
|
|
41
|
+
* Mobile phone-auth START (op 17). Body prefix: `f0 15` (START_AUTH) or
|
|
42
|
+
* `f0 11` (RESEND). Returns short-lived `{token}` for op 18.
|
|
43
|
+
*/
|
|
44
|
+
AUTH_REQUEST: 17,
|
|
45
|
+
/** Alias of {@link Opcode.AUTH_REQUEST}. */
|
|
46
|
+
PHONE_AUTH_START: 17,
|
|
47
|
+
/**
|
|
48
|
+
* Mobile phone-auth verify (op 18). Body prefix: `f0 ad`. Returns LOGIN
|
|
49
|
+
* token or `passwordChallenge` for 2FA.
|
|
50
|
+
*/
|
|
51
|
+
AUTH: 18,
|
|
52
|
+
/** Alias of {@link Opcode.AUTH}. */
|
|
53
|
+
PHONE_AUTH_VERIFY: 18,
|
|
54
|
+
LOGIN: 19,
|
|
55
|
+
LOGOUT: 20,
|
|
56
|
+
SYNC: 21,
|
|
57
|
+
CONFIG: 22,
|
|
58
|
+
/** Alias of {@link Opcode.CONFIG}. */
|
|
59
|
+
SETTINGS: 22,
|
|
60
|
+
AUTH_CONFIRM: 23,
|
|
61
|
+
AUTH_LOGIN_RESTORE_PASSWORD: 101,
|
|
62
|
+
AUTH_2FA_DETAILS: 104,
|
|
63
|
+
/** Alias of {@link Opcode.AUTH_2FA_DETAILS}. */
|
|
64
|
+
AUTH_PASSWORD_INFO: 104,
|
|
65
|
+
AUTH_VALIDATE_PASSWORD: 107,
|
|
66
|
+
/** Alias of {@link Opcode.AUTH_VALIDATE_PASSWORD}. */
|
|
67
|
+
AUTH_PASSWORD_VALIDATE: 107,
|
|
68
|
+
AUTH_VALIDATE_HINT: 108,
|
|
69
|
+
/** Alias of {@link Opcode.AUTH_VALIDATE_HINT}. */
|
|
70
|
+
AUTH_PASSWORD_HINT: 108,
|
|
71
|
+
AUTH_VERIFY_EMAIL: 109,
|
|
72
|
+
/** Alias of {@link Opcode.AUTH_VERIFY_EMAIL}. */
|
|
73
|
+
AUTH_EMAIL_SEND_CODE: 109,
|
|
74
|
+
AUTH_CHECK_EMAIL: 110,
|
|
75
|
+
/** Alias of {@link Opcode.AUTH_CHECK_EMAIL}. */
|
|
76
|
+
AUTH_EMAIL_VERIFY_CODE: 110,
|
|
77
|
+
AUTH_SET_2FA: 111,
|
|
78
|
+
/** Alias of {@link Opcode.AUTH_SET_2FA}. */
|
|
79
|
+
AUTH_PASSWORD_COMMIT: 111,
|
|
80
|
+
AUTH_CREATE_TRACK: 112,
|
|
81
|
+
/** Alias of {@link Opcode.AUTH_CREATE_TRACK}. */
|
|
82
|
+
AUTH_TRACK_START: 112,
|
|
83
|
+
AUTH_CHECK_PASSWORD: 113,
|
|
84
|
+
/** Alias of {@link Opcode.AUTH_CHECK_PASSWORD}. */
|
|
85
|
+
AUTH_PASSWORD_VERIFY: 113,
|
|
86
|
+
/**
|
|
87
|
+
* Op 115: submit a 2FA cloud password (mobile binary uses prefix `f0 33`,
|
|
88
|
+
* flags=1). On mobile: completes phone-auth verifyCode → LOGIN token.
|
|
89
|
+
* On web: completes QR-claim → LOGIN token. Same op, both paths.
|
|
90
|
+
*/
|
|
91
|
+
AUTH_LOGIN_CHECK_PASSWORD: 115,
|
|
92
|
+
/** Alias of {@link Opcode.AUTH_LOGIN_CHECK_PASSWORD}. */
|
|
93
|
+
AUTH_QR_PASSWORD_LOGIN: 115,
|
|
94
|
+
AUTH_LOGIN_PROFILE_DELETE: 116,
|
|
95
|
+
/**
|
|
96
|
+
* Op 290: **mobile** confirms a web-side QR-login (body `{qrLink}`, prefix
|
|
97
|
+
* `f0 34`, flags=1). The web client's op 289 long-poll flips to
|
|
98
|
+
* `loginAvailable:true` after this lands.
|
|
99
|
+
*/
|
|
100
|
+
AUTH_QR_APPROVE: 290,
|
|
101
|
+
/** Alias of {@link Opcode.AUTH_QR_APPROVE}. */
|
|
102
|
+
QR_CONFIRM: 290,
|
|
103
|
+
// ───────── assets (stickers / emoji / animoji) ─────────
|
|
104
|
+
PRESET_AVATARS: 25,
|
|
105
|
+
ASSETS_GET: 26,
|
|
106
|
+
/** Alias of {@link Opcode.ASSETS_GET}. */
|
|
107
|
+
STICKER_LIST: 26,
|
|
108
|
+
ASSETS_UPDATE: 27,
|
|
109
|
+
/** Alias of {@link Opcode.ASSETS_UPDATE}. */
|
|
110
|
+
STICKER_SYNC: 27,
|
|
111
|
+
ASSETS_GET_BY_IDS: 28,
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated Mis-named alias of {@link Opcode.ASSETS_GET_BY_IDS} (op 28).
|
|
114
|
+
* The canonical "contact info" op is **32** ({@link Opcode.CONTACT_INFO}).
|
|
115
|
+
* Old name kept only so existing imports continue to compile; do not use
|
|
116
|
+
* for new code.
|
|
117
|
+
*/
|
|
118
|
+
CONTACT_INFO_LEGACY_28: 28,
|
|
119
|
+
ASSETS_ADD: 29,
|
|
120
|
+
/** Alias of {@link Opcode.ASSETS_ADD}. */
|
|
121
|
+
STICKER_PACK_ACTION: 29,
|
|
122
|
+
ASSETS_REMOVE: 259,
|
|
123
|
+
ASSETS_MOVE: 260,
|
|
124
|
+
ASSETS_LIST_MODIFY: 261,
|
|
125
|
+
// ───────── contacts ─────────
|
|
126
|
+
CONTACT_INFO: 32,
|
|
127
|
+
/** Alias of {@link Opcode.CONTACT_INFO}. */
|
|
128
|
+
CONTACTS_GET: 32,
|
|
129
|
+
CONTACT_ADD: 33,
|
|
130
|
+
CONTACT_UPDATE: 34,
|
|
131
|
+
/**
|
|
132
|
+
* @deprecated Mis-named alias of {@link Opcode.CONTACT_UPDATE} (op 34).
|
|
133
|
+
* `CONTACT_ACTION` is the historic name used by helpers like
|
|
134
|
+
* `contactAction(...)`; the canonical name is {@link Opcode.CONTACT_UPDATE}.
|
|
135
|
+
*/
|
|
136
|
+
CONTACT_ACTION: 34,
|
|
137
|
+
CONTACT_PRESENCE: 35,
|
|
138
|
+
/** Alias of {@link Opcode.CONTACT_PRESENCE}. */
|
|
139
|
+
PRESENCE_GET: 35,
|
|
140
|
+
CONTACT_LIST: 36,
|
|
141
|
+
/** Alias of {@link Opcode.CONTACT_LIST}. */
|
|
142
|
+
CONTACTS_LIST_BY_STATUS: 36,
|
|
143
|
+
CONTACT_SEARCH: 37,
|
|
144
|
+
CONTACT_MUTUAL: 38,
|
|
145
|
+
CONTACT_PHOTOS: 39,
|
|
146
|
+
CONTACT_SORT: 40,
|
|
147
|
+
CONTACT_ADD_BY_PHONE: 41,
|
|
148
|
+
CONTACT_VERIFY: 42,
|
|
149
|
+
REMOVE_CONTACT_PHOTO: 43,
|
|
150
|
+
CONTACT_INFO_BY_PHONE: 46,
|
|
151
|
+
/** Alias of {@link Opcode.CONTACT_INFO_BY_PHONE}. */
|
|
152
|
+
CONTACT_LOOKUP_BY_PHONE: 46,
|
|
153
|
+
// ───────── chats ─────────
|
|
154
|
+
CHAT_INFO: 48,
|
|
155
|
+
/** Alias of {@link Opcode.CHAT_INFO}. */
|
|
156
|
+
CHATS_GET: 48,
|
|
157
|
+
CHAT_HISTORY: 49,
|
|
158
|
+
/** Alias of {@link Opcode.CHAT_HISTORY}. */
|
|
159
|
+
HISTORY_GET: 49,
|
|
160
|
+
CHAT_MARK: 50,
|
|
161
|
+
/** Alias of {@link Opcode.CHAT_MARK}. */
|
|
162
|
+
CHAT_EVENT: 50,
|
|
163
|
+
CHAT_MEDIA: 51,
|
|
164
|
+
/** Alias of {@link Opcode.CHAT_MEDIA}. */
|
|
165
|
+
HISTORY_BY_ATTACH: 51,
|
|
166
|
+
/**
|
|
167
|
+
* Op 52: fully delete the chat (removes it from the list). Use op 54
|
|
168
|
+
* ({@link Opcode.CHAT_CLEAR}) for clear-history-only.
|
|
169
|
+
*/
|
|
170
|
+
CHAT_DELETE: 52,
|
|
171
|
+
CHATS_LIST: 53,
|
|
172
|
+
/** Alias of {@link Opcode.CHATS_LIST}. */
|
|
173
|
+
CHATS_SYNC: 53,
|
|
174
|
+
/**
|
|
175
|
+
* Op 54: clear history of a chat without removing it. The pre-decompile
|
|
176
|
+
* version of this file had op 52 and 54 SWAPPED. Use {@link Opcode.CHAT_DELETE}
|
|
177
|
+
* (op 52) for full delete.
|
|
178
|
+
*/
|
|
179
|
+
CHAT_CLEAR: 54,
|
|
180
|
+
CHAT_UPDATE: 55,
|
|
181
|
+
/** Alias of {@link Opcode.CHAT_UPDATE}. */
|
|
182
|
+
CHAT_SETTINGS: 55,
|
|
183
|
+
/** Op 56: resolve a public link without joining. */
|
|
184
|
+
CHAT_CHECK_LINK: 56,
|
|
185
|
+
/** Op 57: actually join a chat (after CHECK_LINK). */
|
|
186
|
+
CHAT_JOIN: 57,
|
|
187
|
+
/**
|
|
188
|
+
* @deprecated Misleading alias: the pre-decompile name `CHAT_RESOLVE_LINK`
|
|
189
|
+
* (op 57) actually performs **CHAT_JOIN**. Use {@link Opcode.CHAT_CHECK_LINK}
|
|
190
|
+
* (op 56) if you only want to resolve.
|
|
191
|
+
*/
|
|
192
|
+
CHAT_RESOLVE_LINK: 57,
|
|
193
|
+
CHAT_LEAVE: 58,
|
|
194
|
+
CHAT_MEMBERS: 59,
|
|
195
|
+
/** Alias of {@link Opcode.CHAT_MEMBERS}. */
|
|
196
|
+
MEMBERS_LIST: 59,
|
|
197
|
+
PUBLIC_SEARCH: 60,
|
|
198
|
+
/** Alias of {@link Opcode.PUBLIC_SEARCH}. */
|
|
199
|
+
GLOBAL_SEARCH_BY_TYPE: 60,
|
|
200
|
+
CHAT_PERSONAL_CONFIG: 61,
|
|
201
|
+
CHAT_LIVESTREAM_INFO: 62,
|
|
202
|
+
CHAT_CREATE: 63,
|
|
203
|
+
CHAT_SEARCH: 68,
|
|
204
|
+
/** Alias of {@link Opcode.CHAT_SEARCH}. */
|
|
205
|
+
GLOBAL_SEARCH: 68,
|
|
206
|
+
MSG_SEARCH_TOUCH: 72,
|
|
207
|
+
/**
|
|
208
|
+
* @deprecated Misleading alias: op 72 is `MSG_SEARCH_TOUCH` (focus the
|
|
209
|
+
* chat for search), not "open chat". Renamed for accuracy.
|
|
210
|
+
*/
|
|
211
|
+
CHAT_OPEN: 72,
|
|
212
|
+
MSG_SEARCH: 73,
|
|
213
|
+
/** Alias of {@link Opcode.MSG_SEARCH}. */
|
|
214
|
+
MESSAGE_SEARCH: 73,
|
|
215
|
+
MSG_GET_STAT: 74,
|
|
216
|
+
/** Alias of {@link Opcode.MSG_GET_STAT}. */
|
|
217
|
+
MESSAGE_STATS: 74,
|
|
218
|
+
CHAT_SUBSCRIBE: 75,
|
|
219
|
+
CHAT_MEMBERS_UPDATE: 77,
|
|
220
|
+
/** Alias of {@link Opcode.CHAT_MEMBERS_UPDATE}. */
|
|
221
|
+
GROUP_PARTICIPANTS: 77,
|
|
222
|
+
CHAT_PIN_SET_VISIBILITY: 86,
|
|
223
|
+
CHAT_COMPLAIN: 117,
|
|
224
|
+
CHAT_HIDE: 196,
|
|
225
|
+
CHAT_SEARCH_COMMON_PARTICIPANTS: 198,
|
|
226
|
+
/** Alias of {@link Opcode.CHAT_SEARCH_COMMON_PARTICIPANTS}. */
|
|
227
|
+
COMMON_CHATS: 198,
|
|
228
|
+
CHAT_SUGGEST: 300,
|
|
229
|
+
// ───────── messages ─────────
|
|
230
|
+
MSG_SEND: 64,
|
|
231
|
+
/** Alias of {@link Opcode.MSG_SEND}. */
|
|
232
|
+
SEND_MESSAGE: 64,
|
|
233
|
+
MSG_TYPING: 65,
|
|
234
|
+
/** Alias of {@link Opcode.MSG_TYPING}. */
|
|
235
|
+
TYPING: 65,
|
|
236
|
+
MSG_DELETE: 66,
|
|
237
|
+
/** Alias of {@link Opcode.MSG_DELETE}. */
|
|
238
|
+
DELETE_MESSAGES: 66,
|
|
239
|
+
MSG_EDIT: 67,
|
|
240
|
+
/** Alias of {@link Opcode.MSG_EDIT}. */
|
|
241
|
+
EDIT_MESSAGE: 67,
|
|
242
|
+
MSG_SHARE_PREVIEW: 70,
|
|
243
|
+
/** Alias of {@link Opcode.MSG_SHARE_PREVIEW}. */
|
|
244
|
+
LINK_PREVIEW: 70,
|
|
245
|
+
MSG_GET: 71,
|
|
246
|
+
MSG_DELETE_RANGE: 92,
|
|
247
|
+
MSG_SEND_CALLBACK: 118,
|
|
248
|
+
MSG_REACTION: 178,
|
|
249
|
+
/** Alias of {@link Opcode.MSG_REACTION}. */
|
|
250
|
+
REACTION_SET: 178,
|
|
251
|
+
MSG_CANCEL_REACTION: 179,
|
|
252
|
+
/** Alias of {@link Opcode.MSG_CANCEL_REACTION}. */
|
|
253
|
+
REACTION_REMOVE: 179,
|
|
254
|
+
MSG_GET_REACTIONS: 180,
|
|
255
|
+
/** Alias of {@link Opcode.MSG_GET_REACTIONS}. */
|
|
256
|
+
REACTIONS_GET: 180,
|
|
257
|
+
MSG_GET_DETAILED_REACTIONS: 181,
|
|
258
|
+
/** Alias of {@link Opcode.MSG_GET_DETAILED_REACTIONS}. */
|
|
259
|
+
REACTIONS_LIST: 181,
|
|
260
|
+
MSG_DELIVERY: 303,
|
|
261
|
+
// ───────── video calls (rtc signalling) ─────────
|
|
262
|
+
VIDEO_CHAT_START: 76,
|
|
263
|
+
VIDEO_CHAT_START_ACTIVE: 78,
|
|
264
|
+
/**
|
|
265
|
+
* @deprecated Op 78 is canonically `VIDEO_CHAT_START_ACTIVE`. The historic
|
|
266
|
+
* `CALL_START` alias points at it for back-compat.
|
|
267
|
+
*/
|
|
268
|
+
CALL_START: 78,
|
|
269
|
+
VIDEO_CHAT_HISTORY: 79,
|
|
270
|
+
/** Alias of {@link Opcode.VIDEO_CHAT_HISTORY}. */
|
|
271
|
+
CALL_HISTORY: 79,
|
|
272
|
+
VIDEO_CHAT_CREATE_JOIN_LINK: 84,
|
|
273
|
+
VIDEO_CHAT_JOIN: 166,
|
|
274
|
+
VIDEO_CHAT_MEMBERS: 195,
|
|
275
|
+
GET_INBOUND_CALLS: 103,
|
|
276
|
+
EXTERNAL_CALLBACK: 105,
|
|
277
|
+
// ───────── media uploads ─────────
|
|
278
|
+
PHOTO_UPLOAD: 80,
|
|
279
|
+
/** Alias of {@link Opcode.PHOTO_UPLOAD}. */
|
|
280
|
+
PHOTO_UPLOAD_URL: 80,
|
|
281
|
+
STICKER_UPLOAD: 81,
|
|
282
|
+
VIDEO_UPLOAD: 82,
|
|
283
|
+
/** Alias of {@link Opcode.VIDEO_UPLOAD}. */
|
|
284
|
+
VIDEO_UPLOAD_URL: 82,
|
|
285
|
+
VIDEO_PLAY: 83,
|
|
286
|
+
/** Alias of {@link Opcode.VIDEO_PLAY}. */
|
|
287
|
+
EXTERNAL_VIDEO_RESOLVE: 83,
|
|
288
|
+
FILE_UPLOAD: 87,
|
|
289
|
+
/** Alias of {@link Opcode.FILE_UPLOAD}. */
|
|
290
|
+
FILE_UPLOAD_URL: 87,
|
|
291
|
+
FILE_DOWNLOAD: 88,
|
|
292
|
+
/** Alias of {@link Opcode.FILE_DOWNLOAD}. */
|
|
293
|
+
FILE_DOWNLOAD_URL: 88,
|
|
294
|
+
LINK_INFO: 89,
|
|
295
|
+
STICKER_CREATE: 193,
|
|
296
|
+
STICKER_SUGGEST: 194,
|
|
297
|
+
// ───────── sessions ─────────
|
|
298
|
+
SESSIONS_INFO: 96,
|
|
299
|
+
/** Alias of {@link Opcode.SESSIONS_INFO}. */
|
|
300
|
+
SESSIONS_LIST: 96,
|
|
301
|
+
SESSIONS_CLOSE: 97,
|
|
302
|
+
PHONE_BIND_REQUEST: 98,
|
|
303
|
+
PHONE_BIND_CONFIRM: 99,
|
|
304
|
+
PHONE_WEBAPP_SHARE: 106,
|
|
305
|
+
// ───────── location ─────────
|
|
306
|
+
LOCATION_SEND: 125,
|
|
307
|
+
LOCATION_REQUEST: 126,
|
|
308
|
+
// ───────── mentions / drafts ─────────
|
|
309
|
+
GET_LAST_MENTIONS: 127,
|
|
310
|
+
DRAFT_SAVE: 176,
|
|
311
|
+
/**
|
|
312
|
+
* Op 177: discard a draft. The pre-decompile name
|
|
313
|
+
* `PRESENCE_SUBSCRIBE: 177` was incorrect — that op actually exists, but
|
|
314
|
+
* the WS protocol uses a different number for presence subscribe. Confirm
|
|
315
|
+
* before using {@link Opcode.PRESENCE_SUBSCRIBE} below.
|
|
316
|
+
*/
|
|
317
|
+
DRAFT_DISCARD: 177,
|
|
318
|
+
/**
|
|
319
|
+
* @deprecated The pre-decompile binding said this is op 177, but the
|
|
320
|
+
* canonical Android enum slots `DRAFT_DISCARD` at 177. WS-side
|
|
321
|
+
* `presence/subscribe` likely uses a different opcode — not yet verified.
|
|
322
|
+
*/
|
|
323
|
+
PRESENCE_SUBSCRIBE: 177,
|
|
324
|
+
// ───────── profile management ─────────
|
|
325
|
+
PROFILE_DELETE: 199,
|
|
326
|
+
PROFILE_DELETE_TIME: 200,
|
|
327
|
+
/**
|
|
328
|
+
* @deprecated The pre-decompile name `KEEPALIVE_TS: 200` was wrong —
|
|
329
|
+
* op 200 is `PROFILE_DELETE_TIME`, not a keep-alive. Use op 1 ({@link
|
|
330
|
+
* Opcode.PING}) for keep-alive. Kept for back-compat only.
|
|
331
|
+
*/
|
|
332
|
+
KEEPALIVE_TS: 200,
|
|
333
|
+
// ───────── push events (server → client) ─────────
|
|
334
|
+
NOTIF_MESSAGE: 128,
|
|
335
|
+
/** Alias of {@link Opcode.NOTIF_MESSAGE}. */
|
|
336
|
+
MESSAGE_INCOMING: 128,
|
|
337
|
+
NOTIF_TYPING: 129,
|
|
338
|
+
/**
|
|
339
|
+
* @deprecated Wrong canonical name. Op 129 is `NOTIF_TYPING`, not
|
|
340
|
+
* `MEMBER_LEAVE_PUSH`. Renamed via deprecation; old name kept for compat.
|
|
341
|
+
*/
|
|
342
|
+
MEMBER_LEAVE_PUSH: 129,
|
|
343
|
+
NOTIF_MARK: 130,
|
|
344
|
+
/** Alias of {@link Opcode.NOTIF_MARK}. */
|
|
345
|
+
READ_MARK_PUSH: 130,
|
|
346
|
+
NOTIF_CONTACT: 131,
|
|
347
|
+
NOTIF_PRESENCE: 132,
|
|
348
|
+
/** Alias of {@link Opcode.NOTIF_PRESENCE}. */
|
|
349
|
+
PRESENCE_PUSH: 132,
|
|
350
|
+
NOTIF_CONFIG: 134,
|
|
351
|
+
/** Alias of {@link Opcode.NOTIF_CONFIG}. */
|
|
352
|
+
CONFIG_HASH_PUSH: 134,
|
|
353
|
+
NOTIF_CHAT: 135,
|
|
354
|
+
/** Alias of {@link Opcode.NOTIF_CHAT}. */
|
|
355
|
+
CHAT_UPDATE_PUSH: 135,
|
|
356
|
+
NOTIF_ATTACH: 136,
|
|
357
|
+
/** Alias of {@link Opcode.NOTIF_ATTACH}. */
|
|
358
|
+
FILE_UPLOAD_DONE_PUSH: 136,
|
|
359
|
+
NOTIF_CALL_START: 137,
|
|
360
|
+
NOTIF_CONTACT_SORT: 139,
|
|
361
|
+
NOTIF_MSG_DELETE_RANGE: 140,
|
|
362
|
+
NOTIF_MSG_DELETE: 142,
|
|
363
|
+
NOTIF_CALLBACK_ANSWER: 143,
|
|
364
|
+
NOTIF_LOCATION: 147,
|
|
365
|
+
NOTIF_LOCATION_REQUEST: 148,
|
|
366
|
+
NOTIF_ASSETS_UPDATE: 150,
|
|
367
|
+
/** Alias of {@link Opcode.NOTIF_ASSETS_UPDATE}. */
|
|
368
|
+
STICKER_RECENTS_PUSH: 150,
|
|
369
|
+
NOTIF_DRAFT: 152,
|
|
370
|
+
NOTIF_DRAFT_DISCARD: 153,
|
|
371
|
+
NOTIF_MSG_DELAYED: 154,
|
|
372
|
+
NOTIF_MSG_REACTIONS_CHANGED: 155,
|
|
373
|
+
NOTIF_MSG_YOU_REACTED: 156,
|
|
374
|
+
NOTIF_PROFILE: 159,
|
|
375
|
+
/** Alias of {@link Opcode.NOTIF_PROFILE}. */
|
|
376
|
+
PROFILE_UPDATE_PUSH: 159,
|
|
377
|
+
NOTIF_FOLDERS: 277,
|
|
378
|
+
NOTIF_BANNERS: 292,
|
|
379
|
+
/** Alias of {@link Opcode.NOTIF_BANNERS}. */
|
|
380
|
+
BANNERS: 292,
|
|
381
|
+
NOTIF_TRANSCRIPTION: 293,
|
|
382
|
+
// ───────── bots / web apps ─────────
|
|
383
|
+
CHAT_BOT_COMMANDS: 144,
|
|
384
|
+
BOT_INFO: 145,
|
|
385
|
+
WEB_APP_INIT_DATA: 160,
|
|
386
|
+
/** Alias of {@link Opcode.WEB_APP_INIT_DATA}. */
|
|
387
|
+
BOT_MINI_APP_OPEN: 160,
|
|
388
|
+
// ───────── complaints ─────────
|
|
389
|
+
COMPLAIN: 161,
|
|
390
|
+
COMPLAIN_REASONS_GET: 162,
|
|
391
|
+
/** Alias of {@link Opcode.COMPLAIN_REASONS_GET}. */
|
|
392
|
+
COMPLAINS_SYNC: 162,
|
|
393
|
+
// ───────── tokens / 3rd-party ─────────
|
|
394
|
+
/**
|
|
395
|
+
* Op 158: short-lived OK-group access token (~14-min lifetime). Used to
|
|
396
|
+
* authenticate HTTP requests to `i.oneme.ru` / `videowebrtc.okcdn.ru`.
|
|
397
|
+
* Refresh before `token_refresh_ts`.
|
|
398
|
+
*/
|
|
399
|
+
OK_TOKEN: 158,
|
|
400
|
+
/** Alias of {@link Opcode.OK_TOKEN}. */
|
|
401
|
+
WEB_TOKEN: 158,
|
|
402
|
+
// ───────── transcribe / audio ─────────
|
|
403
|
+
TRANSCRIBE_MEDIA: 202,
|
|
404
|
+
AUDIO_PLAY: 301,
|
|
405
|
+
// ───────── org / banners ─────────
|
|
406
|
+
ORG_INFO: 256,
|
|
407
|
+
BANNERS_GET: 302,
|
|
408
|
+
// ───────── reactions config ─────────
|
|
409
|
+
CHAT_REACTIONS_SETTINGS_SET: 257,
|
|
410
|
+
/** Alias of {@link Opcode.CHAT_REACTIONS_SETTINGS_SET}. */
|
|
411
|
+
CHAT_REACTIONS_SETTINGS: 257,
|
|
412
|
+
REACTIONS_SETTINGS_GET_BY_CHAT_ID: 258,
|
|
413
|
+
/** Alias of {@link Opcode.REACTIONS_SETTINGS_GET_BY_CHAT_ID}. */
|
|
414
|
+
CHAT_REACTIONS_SETTINGS_GET: 258,
|
|
415
|
+
// ───────── folders ─────────
|
|
416
|
+
FOLDERS_GET: 272,
|
|
417
|
+
/** Alias of {@link Opcode.FOLDERS_GET}. */
|
|
418
|
+
FOLDERS_SYNC: 272,
|
|
419
|
+
FOLDERS_GET_BY_ID: 273,
|
|
420
|
+
FOLDERS_UPDATE: 274,
|
|
421
|
+
/** Alias of {@link Opcode.FOLDERS_UPDATE}. */
|
|
422
|
+
FOLDER_UPSERT: 274,
|
|
423
|
+
FOLDERS_REORDER: 275,
|
|
424
|
+
/**
|
|
425
|
+
* Op 276: **delete** a folder. The pre-decompile name `FOLDERS_ORDER: 276`
|
|
426
|
+
* was wrong — reorder lives at op 275 ({@link Opcode.FOLDERS_REORDER}).
|
|
427
|
+
*/
|
|
428
|
+
FOLDERS_DELETE: 276,
|
|
429
|
+
/**
|
|
430
|
+
* @deprecated Pre-decompile alias. Op 276 is **FOLDERS_DELETE**, not
|
|
431
|
+
* "reorder". For reordering use {@link Opcode.FOLDERS_REORDER} (op 275).
|
|
432
|
+
*/
|
|
433
|
+
FOLDERS_ORDER: 276,
|
|
434
|
+
// ───────── polls ─────────
|
|
435
|
+
SEND_VOTE: 304,
|
|
436
|
+
/** Alias of {@link Opcode.SEND_VOTE}. */
|
|
437
|
+
POLL_VOTE: 304,
|
|
438
|
+
VOTERS_LIST_BY_ANSWER: 305,
|
|
439
|
+
GET_POLL_UPDATES: 306,
|
|
440
|
+
/** Alias of {@link Opcode.GET_POLL_UPDATES}. */
|
|
441
|
+
POLL_GET: 306,
|
|
442
|
+
// ───────── web-only (not in mobile enum) ─────────
|
|
443
|
+
/** Web WS: request a fresh QR session (returns `{qrLink, trackId, ttl}`). */
|
|
444
|
+
QR_START: 288,
|
|
445
|
+
/** Web WS: long-poll for `loginAvailable:true` flip. */
|
|
446
|
+
QR_POLL: 289,
|
|
447
|
+
/** Web WS: claim LOGIN token after `loginAvailable:true`. */
|
|
448
|
+
QR_LOGIN: 291,
|
|
449
|
+
};
|
|
450
|
+
export const Cmd = {
|
|
451
|
+
REQUEST: 0,
|
|
452
|
+
RESPONSE: 1,
|
|
453
|
+
ERROR: 3,
|
|
454
|
+
};
|
|
455
|
+
export const PROTOCOL_VERSION = 11;
|
|
456
|
+
//# sourceMappingURL=opcodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opcodes.js","sourceRoot":"","sources":["../src/opcodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,4BAA4B;IAC5B,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,mCAAmC;IACnC,SAAS,EAAE,CAAC;IAEZ,qCAAqC;IACrC,YAAY,EAAE,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,EAAE;IACX,uCAAuC;IACvC,cAAc,EAAE,EAAE;IAClB;;;OAGG;IACH,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,gBAAgB,EAAE,EAAE;IACpB;;;OAGG;IACH,IAAI,EAAE,EAAE;IACR,oCAAoC;IACpC,iBAAiB,EAAE,EAAE;IACrB,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,sCAAsC;IACtC,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,EAAE;IAChB,2BAA2B,EAAE,GAAG;IAChC,gBAAgB,EAAE,GAAG;IACrB,gDAAgD;IAChD,kBAAkB,EAAE,GAAG;IACvB,sBAAsB,EAAE,GAAG;IAC3B,sDAAsD;IACtD,sBAAsB,EAAE,GAAG;IAC3B,kBAAkB,EAAE,GAAG;IACvB,kDAAkD;IAClD,kBAAkB,EAAE,GAAG;IACvB,iBAAiB,EAAE,GAAG;IACtB,iDAAiD;IACjD,oBAAoB,EAAE,GAAG;IACzB,gBAAgB,EAAE,GAAG;IACrB,gDAAgD;IAChD,sBAAsB,EAAE,GAAG;IAC3B,YAAY,EAAE,GAAG;IACjB,4CAA4C;IAC5C,oBAAoB,EAAE,GAAG;IACzB,iBAAiB,EAAE,GAAG;IACtB,iDAAiD;IACjD,gBAAgB,EAAE,GAAG;IACrB,mBAAmB,EAAE,GAAG;IACxB,mDAAmD;IACnD,oBAAoB,EAAE,GAAG;IACzB;;;;OAIG;IACH,yBAAyB,EAAE,GAAG;IAC9B,yDAAyD;IACzD,sBAAsB,EAAE,GAAG;IAC3B,yBAAyB,EAAE,GAAG;IAC9B;;;;OAIG;IACH,eAAe,EAAE,GAAG;IACpB,+CAA+C;IAC/C,UAAU,EAAE,GAAG;IAEf,0DAA0D;IAC1D,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,6CAA6C;IAC7C,YAAY,EAAE,EAAE;IAChB,iBAAiB,EAAE,EAAE;IACrB;;;;;OAKG;IACH,sBAAsB,EAAE,EAAE;IAC1B,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,mBAAmB,EAAE,EAAE;IACvB,aAAa,EAAE,GAAG;IAClB,WAAW,EAAE,GAAG;IAChB,kBAAkB,EAAE,GAAG;IAEvB,+BAA+B;IAC/B,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB;;;;OAIG;IACH,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,gDAAgD;IAChD,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,uBAAuB,EAAE,EAAE;IAC3B,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,EAAE;IAChB,oBAAoB,EAAE,EAAE;IACxB,cAAc,EAAE,EAAE;IAClB,oBAAoB,EAAE,EAAE;IACxB,qBAAqB,EAAE,EAAE;IACzB,qDAAqD;IACrD,uBAAuB,EAAE,EAAE;IAE3B,4BAA4B;IAC5B,SAAS,EAAE,EAAE;IACb,yCAAyC;IACzC,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,yCAAyC;IACzC,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,iBAAiB,EAAE,EAAE;IACrB;;;OAGG;IACH,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,UAAU,EAAE,EAAE;IACd;;;;OAIG;IACH,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,2CAA2C;IAC3C,aAAa,EAAE,EAAE;IACjB,oDAAoD;IACpD,eAAe,EAAE,EAAE;IACnB,sDAAsD;IACtD,SAAS,EAAE,EAAE;IACb;;;;OAIG;IACH,iBAAiB,EAAE,EAAE;IACrB,UAAU,EAAE,EAAE;IACd,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,6CAA6C;IAC7C,qBAAqB,EAAE,EAAE;IACzB,oBAAoB,EAAE,EAAE;IACxB,oBAAoB,EAAE,EAAE;IACxB,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,2CAA2C;IAC3C,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,EAAE;IACpB;;;OAGG;IACH,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,mBAAmB,EAAE,EAAE;IACvB,mDAAmD;IACnD,kBAAkB,EAAE,EAAE;IACtB,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,GAAG;IACd,+BAA+B,EAAE,GAAG;IACpC,+DAA+D;IAC/D,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IAEjB,+BAA+B;IAC/B,QAAQ,EAAE,EAAE;IACZ,wCAAwC;IACxC,YAAY,EAAE,EAAE;IAChB,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,eAAe,EAAE,EAAE;IACnB,QAAQ,EAAE,EAAE;IACZ,wCAAwC;IACxC,YAAY,EAAE,EAAE;IAChB,iBAAiB,EAAE,EAAE;IACrB,iDAAiD;IACjD,YAAY,EAAE,EAAE;IAChB,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,GAAG;IACtB,YAAY,EAAE,GAAG;IACjB,4CAA4C;IAC5C,YAAY,EAAE,GAAG;IACjB,mBAAmB,EAAE,GAAG;IACxB,mDAAmD;IACnD,eAAe,EAAE,GAAG;IACpB,iBAAiB,EAAE,GAAG;IACtB,iDAAiD;IACjD,aAAa,EAAE,GAAG;IAClB,0BAA0B,EAAE,GAAG;IAC/B,0DAA0D;IAC1D,cAAc,EAAE,GAAG;IACnB,YAAY,EAAE,GAAG;IAEjB,mDAAmD;IACnD,gBAAgB,EAAE,EAAE;IACpB,uBAAuB,EAAE,EAAE;IAC3B;;;OAGG;IACH,UAAU,EAAE,EAAE;IACd,kBAAkB,EAAE,EAAE;IACtB,kDAAkD;IAClD,YAAY,EAAE,EAAE;IAChB,2BAA2B,EAAE,EAAE;IAC/B,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE,GAAG;IACvB,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IAEtB,oCAAoC;IACpC,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,gBAAgB,EAAE,EAAE;IACpB,UAAU,EAAE,EAAE;IACd,0CAA0C;IAC1C,sBAAsB,EAAE,EAAE;IAC1B,WAAW,EAAE,EAAE;IACf,2CAA2C;IAC3C,eAAe,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE;IACjB,6CAA6C;IAC7C,iBAAiB,EAAE,EAAE;IACrB,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,GAAG;IACnB,eAAe,EAAE,GAAG;IAEpB,+BAA+B;IAC/B,aAAa,EAAE,EAAE;IACjB,6CAA6C;IAC7C,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,GAAG;IAEvB,+BAA+B;IAC/B,aAAa,EAAE,GAAG;IAClB,gBAAgB,EAAE,GAAG;IAErB,wCAAwC;IACxC,iBAAiB,EAAE,GAAG;IACtB,UAAU,EAAE,GAAG;IACf;;;;;OAKG;IACH,aAAa,EAAE,GAAG;IAClB;;;;OAIG;IACH,kBAAkB,EAAE,GAAG;IAEvB,yCAAyC;IACzC,cAAc,EAAE,GAAG;IACnB,mBAAmB,EAAE,GAAG;IACxB;;;;OAIG;IACH,YAAY,EAAE,GAAG;IAEjB,oDAAoD;IACpD,aAAa,EAAE,GAAG;IAClB,6CAA6C;IAC7C,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,GAAG;IACjB;;;OAGG;IACH,iBAAiB,EAAE,GAAG;IACtB,UAAU,EAAE,GAAG;IACf,0CAA0C;IAC1C,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,GAAG;IAClB,cAAc,EAAE,GAAG;IACnB,8CAA8C;IAC9C,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,GAAG;IACjB,4CAA4C;IAC5C,gBAAgB,EAAE,GAAG;IACrB,UAAU,EAAE,GAAG;IACf,0CAA0C;IAC1C,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,GAAG;IACjB,4CAA4C;IAC5C,qBAAqB,EAAE,GAAG;IAC1B,gBAAgB,EAAE,GAAG;IACrB,kBAAkB,EAAE,GAAG;IACvB,sBAAsB,EAAE,GAAG;IAC3B,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,GAAG;IAC1B,cAAc,EAAE,GAAG;IACnB,sBAAsB,EAAE,GAAG;IAC3B,mBAAmB,EAAE,GAAG;IACxB,mDAAmD;IACnD,oBAAoB,EAAE,GAAG;IACzB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,GAAG;IACtB,2BAA2B,EAAE,GAAG;IAChC,qBAAqB,EAAE,GAAG;IAC1B,aAAa,EAAE,GAAG;IAClB,6CAA6C;IAC7C,mBAAmB,EAAE,GAAG;IACxB,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,GAAG;IAClB,6CAA6C;IAC7C,OAAO,EAAE,GAAG;IACZ,mBAAmB,EAAE,GAAG;IAExB,sCAAsC;IACtC,iBAAiB,EAAE,GAAG;IACtB,QAAQ,EAAE,GAAG;IACb,iBAAiB,EAAE,GAAG;IACtB,iDAAiD;IACjD,iBAAiB,EAAE,GAAG;IAEtB,iCAAiC;IACjC,QAAQ,EAAE,GAAG;IACb,oBAAoB,EAAE,GAAG;IACzB,oDAAoD;IACpD,cAAc,EAAE,GAAG;IAEnB,yCAAyC;IACzC;;;;OAIG;IACH,QAAQ,EAAE,GAAG;IACb,wCAAwC;IACxC,SAAS,EAAE,GAAG;IAEd,yCAAyC;IACzC,gBAAgB,EAAE,GAAG;IACrB,UAAU,EAAE,GAAG;IAEf,oCAAoC;IACpC,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,GAAG;IAEhB,uCAAuC;IACvC,2BAA2B,EAAE,GAAG;IAChC,2DAA2D;IAC3D,uBAAuB,EAAE,GAAG;IAC5B,iCAAiC,EAAE,GAAG;IACtC,iEAAiE;IACjE,2BAA2B,EAAE,GAAG;IAEhC,8BAA8B;IAC9B,WAAW,EAAE,GAAG;IAChB,2CAA2C;IAC3C,YAAY,EAAE,GAAG;IACjB,iBAAiB,EAAE,GAAG;IACtB,cAAc,EAAE,GAAG;IACnB,8CAA8C;IAC9C,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,GAAG;IACpB;;;OAGG;IACH,cAAc,EAAE,GAAG;IACnB;;;OAGG;IACH,aAAa,EAAE,GAAG;IAElB,4BAA4B;IAC5B,SAAS,EAAE,GAAG;IACd,yCAAyC;IACzC,SAAS,EAAE,GAAG;IACd,qBAAqB,EAAE,GAAG;IAC1B,gBAAgB,EAAE,GAAG;IACrB,gDAAgD;IAChD,QAAQ,EAAE,GAAG;IAEb,oDAAoD;IACpD,6EAA6E;IAC7E,QAAQ,EAAE,GAAG;IACb,wDAAwD;IACxD,OAAO,EAAE,GAAG;IACZ,6DAA6D;IAC7D,QAAQ,EAAE,GAAG;CACL,CAAC;AAIX,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { RawTransport } from './raw-transport.js';
|
|
2
|
+
import type { LoginResponse, PasswordChallenge, UserAgent } from './types.js';
|
|
3
|
+
export interface QrBindOptions {
|
|
4
|
+
/** WS endpoint. Default `wss://ws-api.oneme.ru/websocket`. */
|
|
5
|
+
wsUrl?: string;
|
|
6
|
+
/** UA for the web side. Default = bundled WEB Chrome on macOS UA. */
|
|
7
|
+
webUserAgent?: UserAgent;
|
|
8
|
+
/**
|
|
9
|
+
* Web-side `deviceId` UUID. Generated automatically if absent; pass an
|
|
10
|
+
* existing one to maintain device identity across runs (so the WS token
|
|
11
|
+
* issued here can be reused by a regular `MaxClient`).
|
|
12
|
+
*/
|
|
13
|
+
webDeviceId?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Resolver for the 2FA cloud-password challenge. Required when the account
|
|
16
|
+
* has 2FA enabled — otherwise this function throws on the password step.
|
|
17
|
+
*/
|
|
18
|
+
resolvePassword?: (challenge: PasswordChallenge) => Promise<string | null>;
|
|
19
|
+
/** How many chats the final LOGIN (op 19) should preload. Default 40. */
|
|
20
|
+
chatsCount?: number;
|
|
21
|
+
/** Per-request timeout for the web WS in ms. Default 20_000. */
|
|
22
|
+
requestTimeoutMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface QrBindResult {
|
|
25
|
+
/**
|
|
26
|
+
* Web-bound LOGIN token. Persist this as `StoredSession.loginToken` and
|
|
27
|
+
* pass to {@link import('./client.js').MaxClient} for subsequent runs.
|
|
28
|
+
*/
|
|
29
|
+
webToken: string;
|
|
30
|
+
/**
|
|
31
|
+
* Web-side `deviceId` UUID used for HELLO/LOGIN. Persist this as
|
|
32
|
+
* `StoredSession.deviceId` — the token is bound to it.
|
|
33
|
+
*/
|
|
34
|
+
webDeviceId: string;
|
|
35
|
+
/** Final `LoginResponse` (profile + chats + contacts + config). */
|
|
36
|
+
loginResponse: LoginResponse;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Bind a new **web** session using an already-authenticated **mobile** binary
|
|
40
|
+
* transport. This is the headless equivalent of the in-app camera QR scan.
|
|
41
|
+
*
|
|
42
|
+
* Flow:
|
|
43
|
+
* 1. open WS to `wss://ws-api.oneme.ru/websocket` → op 6 HELLO (`deviceType:'WEB'`)
|
|
44
|
+
* 2. op 288 → server returns `{qrLink, trackId, ttl, pollingInterval}`
|
|
45
|
+
* 3. **mobile** transport: op 290 with `{qrLink}` (the QR-confirm; same op as
|
|
46
|
+
* what the camera-scan path eventually invokes)
|
|
47
|
+
* 4. web side: poll op 289 until `status.loginAvailable === true`
|
|
48
|
+
* 5. web side: op 291 → either LOGIN token, or `passwordChallenge` if 2FA
|
|
49
|
+
* 6. if 2FA: op 115 with the password → LOGIN token
|
|
50
|
+
* 7. web side: op 19 LOGIN → full `LoginResponse`
|
|
51
|
+
*
|
|
52
|
+
* The returned `webToken` is the LOGIN token MaxClient (WS) expects.
|
|
53
|
+
*
|
|
54
|
+
* @param raw An authenticated `RawTransport` — must have already passed
|
|
55
|
+
* `hello()` + `mobileLogin()` (or `sendPhoneAuthCode` →
|
|
56
|
+
* `verifyPhoneAuthCode` → `mobileLogin`). Op 290 fails without
|
|
57
|
+
* a logged-in mobile session.
|
|
58
|
+
*/
|
|
59
|
+
export declare function qrBindWebSession(raw: RawTransport, opts?: QrBindOptions): Promise<QrBindResult>;
|
|
60
|
+
//# sourceMappingURL=qr-bind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-bind.d.ts","sourceRoot":"","sources":["../src/qr-bind.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAIjB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3E,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,YAAY,EACjB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,YAAY,CAAC,CAwFvB"}
|
package/dist/qr-bind.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { Opcode } from './opcodes.js';
|
|
3
|
+
import { Transport } from './transport.js';
|
|
4
|
+
import { DEFAULT_USER_AGENT } from './auth.js';
|
|
5
|
+
/**
|
|
6
|
+
* Bind a new **web** session using an already-authenticated **mobile** binary
|
|
7
|
+
* transport. This is the headless equivalent of the in-app camera QR scan.
|
|
8
|
+
*
|
|
9
|
+
* Flow:
|
|
10
|
+
* 1. open WS to `wss://ws-api.oneme.ru/websocket` → op 6 HELLO (`deviceType:'WEB'`)
|
|
11
|
+
* 2. op 288 → server returns `{qrLink, trackId, ttl, pollingInterval}`
|
|
12
|
+
* 3. **mobile** transport: op 290 with `{qrLink}` (the QR-confirm; same op as
|
|
13
|
+
* what the camera-scan path eventually invokes)
|
|
14
|
+
* 4. web side: poll op 289 until `status.loginAvailable === true`
|
|
15
|
+
* 5. web side: op 291 → either LOGIN token, or `passwordChallenge` if 2FA
|
|
16
|
+
* 6. if 2FA: op 115 with the password → LOGIN token
|
|
17
|
+
* 7. web side: op 19 LOGIN → full `LoginResponse`
|
|
18
|
+
*
|
|
19
|
+
* The returned `webToken` is the LOGIN token MaxClient (WS) expects.
|
|
20
|
+
*
|
|
21
|
+
* @param raw An authenticated `RawTransport` — must have already passed
|
|
22
|
+
* `hello()` + `mobileLogin()` (or `sendPhoneAuthCode` →
|
|
23
|
+
* `verifyPhoneAuthCode` → `mobileLogin`). Op 290 fails without
|
|
24
|
+
* a logged-in mobile session.
|
|
25
|
+
*/
|
|
26
|
+
export async function qrBindWebSession(raw, opts = {}) {
|
|
27
|
+
const wsUrl = opts.wsUrl ?? 'wss://ws-api.oneme.ru/websocket';
|
|
28
|
+
const webDeviceId = opts.webDeviceId ?? randomUUID();
|
|
29
|
+
const userAgent = opts.webUserAgent ?? DEFAULT_USER_AGENT;
|
|
30
|
+
const ws = new Transport({
|
|
31
|
+
url: wsUrl,
|
|
32
|
+
headers: {
|
|
33
|
+
'User-Agent': userAgent.headerUserAgent,
|
|
34
|
+
Origin: 'https://web.max.ru',
|
|
35
|
+
},
|
|
36
|
+
...(opts.requestTimeoutMs !== undefined ? { requestTimeoutMs: opts.requestTimeoutMs } : {}),
|
|
37
|
+
});
|
|
38
|
+
await ws.connect();
|
|
39
|
+
try {
|
|
40
|
+
// 1. HELLO (web side)
|
|
41
|
+
await ws.request(Opcode.HELLO, { userAgent, deviceId: webDeviceId });
|
|
42
|
+
// 2. QR_START — ask for a fresh trackId
|
|
43
|
+
const qrStart = await ws.request(Opcode.QR_START);
|
|
44
|
+
// 3. Mobile side confirms the QR (op 290)
|
|
45
|
+
await raw.confirmQrAuth(qrStart.qrLink);
|
|
46
|
+
// 4. Long-poll op 289 until `loginAvailable` flips
|
|
47
|
+
const pollIntervalMs = Math.max(1_000, qrStart.pollingInterval ?? 2_000);
|
|
48
|
+
const deadline = qrStart.expiresAt ?? Date.now() + Math.max(qrStart.ttl ?? 120_000, 30_000);
|
|
49
|
+
let approved = false;
|
|
50
|
+
while (Date.now() < deadline) {
|
|
51
|
+
const poll = await ws.request(Opcode.QR_POLL, {
|
|
52
|
+
trackId: qrStart.trackId,
|
|
53
|
+
});
|
|
54
|
+
if (poll.status?.loginAvailable === true) {
|
|
55
|
+
approved = true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
await sleep(pollIntervalMs);
|
|
59
|
+
}
|
|
60
|
+
if (!approved) {
|
|
61
|
+
throw new Error(`QR-bind timed out: trackId ${qrStart.trackId} did not flip to loginAvailable`);
|
|
62
|
+
}
|
|
63
|
+
// 5. CLAIM (op 291) — returns either LOGIN token or 2FA challenge
|
|
64
|
+
const claim = await ws.request(Opcode.QR_LOGIN, {
|
|
65
|
+
trackId: qrStart.trackId,
|
|
66
|
+
});
|
|
67
|
+
let webToken = claim.tokenAttrs?.LOGIN?.token;
|
|
68
|
+
// 6. 2FA: exchange password for LOGIN token (op 115)
|
|
69
|
+
if (!webToken && claim.passwordChallenge) {
|
|
70
|
+
if (!opts.resolvePassword) {
|
|
71
|
+
throw new Error('Account has a 2FA cloud password — pass `resolvePassword` in QrBindOptions');
|
|
72
|
+
}
|
|
73
|
+
const pw = await opts.resolvePassword(claim.passwordChallenge);
|
|
74
|
+
if (pw === null || pw === undefined || pw === '') {
|
|
75
|
+
throw new Error('2FA password not provided — QR-bind aborted');
|
|
76
|
+
}
|
|
77
|
+
const final = await ws.request(Opcode.AUTH_QR_PASSWORD_LOGIN, { trackId: claim.passwordChallenge.trackId, password: pw });
|
|
78
|
+
webToken = final.tokenAttrs?.LOGIN?.token;
|
|
79
|
+
}
|
|
80
|
+
if (!webToken) {
|
|
81
|
+
throw new Error('QR-bind completed without a LOGIN token (server response missing tokenAttrs.LOGIN)');
|
|
82
|
+
}
|
|
83
|
+
// 7. Final LOGIN (op 19) — also gives us profile + chats snapshot
|
|
84
|
+
const loginResponse = await ws.request(Opcode.LOGIN, {
|
|
85
|
+
token: webToken,
|
|
86
|
+
chatsCount: opts.chatsCount ?? 40,
|
|
87
|
+
interactive: true,
|
|
88
|
+
chatsSync: 0,
|
|
89
|
+
contactsSync: 0,
|
|
90
|
+
presenceSync: -1,
|
|
91
|
+
draftsSync: 0,
|
|
92
|
+
});
|
|
93
|
+
return { webToken, webDeviceId, loginResponse };
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
ws.close();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function sleep(ms) {
|
|
100
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=qr-bind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-bind.js","sourceRoot":"","sources":["../src/qr-bind.ts"],"names":[],"mappings":"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"}
|