webmaxsocket 1.0.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/README.md ADDED
@@ -0,0 +1,411 @@
1
+ # WebMaxSocket - Node.js Client for Max Messenger
2
+
3
+ ## 📖 Описание / Description
4
+
5
+ **WebMaxSocket** — async Node.js библиотека для работы с внутренним API мессенджера Max. Позволяет создавать WebSocket соединение с **QR-кодом авторизацией**.
6
+
7
+ ## ✨ Особенности / Features
8
+
9
+ - ✅ **QR-код авторизация** / QR code authentication
10
+ - ✅ **WebSocket соединение** / WebSocket connection
11
+ - ✅ **Автоматическое сохранение сессий** / Automatic session storage
12
+ - ✅ **Отправка и получение сообщений** / Send and receive messages
13
+ - ✅ **Редактирование и удаление сообщений** / Edit and delete messages
14
+ - ✅ **Event-driven архитектура** / Event-driven architecture
15
+ - ✅ **Обработка входящих уведомлений** / Handle incoming notifications
16
+ - ✅ **TypeScript-ready** структура / TypeScript-ready structure
17
+
18
+ ## 📦 Установка / Installation
19
+
20
+ ```bash
21
+ npm install webmaxsocket
22
+ ```
23
+
24
+ ## 🚀 Быстрый старт / Quick Start
25
+
26
+ ### Базовый пример / Basic Example
27
+
28
+ ```javascript
29
+ const { WebMaxClient } = require('webmaxsocket');
30
+
31
+ async function main() {
32
+ // Инициализация клиента / Initialize client
33
+ const client = new WebMaxClient({
34
+ name: 'my_session' // Имя сессии / Session name
35
+ });
36
+
37
+ // Обработчик запуска / Start handler
38
+ client.onStart(async () => {
39
+ console.log('✅ Бот запущен!');
40
+ console.log(`👤 Вы вошли как: ${client.me.fullname}`);
41
+ });
42
+
43
+ // Обработчик сообщений / Message handler
44
+ client.onMessage(async (message) => {
45
+ // Не отвечаем на свои сообщения / Don't reply to own messages
46
+ if (message.senderId === client.me.id) return;
47
+
48
+ console.log(`💬 ${message.getSenderName()}: ${message.text}`);
49
+
50
+ // Автоответ / Auto-reply
51
+ await message.reply({
52
+ text: `Привет! Я получил: "${message.text}"`,
53
+ cid: Date.now()
54
+ });
55
+ });
56
+
57
+ // Запуск / Start
58
+ await client.start();
59
+ }
60
+
61
+ main().catch(console.error);
62
+ ```
63
+
64
+ ### Авторизация / Authentication
65
+
66
+ При первом запуске вы увидите QR-код в консоли:
67
+
68
+ On first run, you'll see a QR code in the console:
69
+
70
+ ```
71
+ 🔐 АВТОРИЗАЦИЯ ЧЕРЕЗ QR-КОД
72
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
73
+
74
+ 📱 Откройте приложение Max на телефоне
75
+ ➡️ Настройки → Устройства → Подключить устройство
76
+ 📸 Отсканируйте QR-код
77
+
78
+ █████████████████████████████
79
+ █████████████████████████████
80
+ ████ ▄▄▄▄▄ █▀█ █▄▄█ ▄▄▄▄▄ ████
81
+ ████ █ █ █▀▀▀█ ▄█ █ █ ████
82
+ ...
83
+ ```
84
+
85
+ После сканирования токен сохраняется автоматически.
86
+
87
+ After scanning, the token is saved automatically.
88
+
89
+ ## API
90
+
91
+ ### WebMaxClient
92
+
93
+ Основной класс для работы с API Max.
94
+
95
+ #### Конструктор
96
+
97
+ ```javascript
98
+ const client = new WebMaxClient({
99
+ name: 'session', // Имя сессии (для сохранения авторизации)
100
+ phone: '+1234567890', // Номер телефона
101
+ apiUrl: 'wss://...', // URL WebSocket API (опционально)
102
+ maxReconnectAttempts: 5,// Максимальное количество попыток переподключения
103
+ reconnectDelay: 3000 // Задержка между попытками переподключения (мс)
104
+ });
105
+ ```
106
+
107
+ #### Методы
108
+
109
+ ##### `start()`
110
+
111
+ Запускает клиент и устанавливает соединение.
112
+
113
+ ```javascript
114
+ await client.start();
115
+ ```
116
+
117
+ ##### `sendMessage(options)`
118
+
119
+ Отправляет сообщение в чат.
120
+
121
+ ```javascript
122
+ const message = await client.sendMessage({
123
+ chatId: 123,
124
+ text: 'Привет!',
125
+ cid: Date.now(),
126
+ replyTo: null, // ID сообщения для ответа (опционально)
127
+ attachments: [] // Вложения (опционально)
128
+ });
129
+ ```
130
+
131
+ ##### `editMessage(options)`
132
+
133
+ Редактирует сообщение.
134
+
135
+ ```javascript
136
+ await client.editMessage({
137
+ messageId: 456,
138
+ chatId: 123,
139
+ text: 'Исправленный текст'
140
+ });
141
+ ```
142
+
143
+ ##### `deleteMessage(options)`
144
+
145
+ Удаляет сообщение.
146
+
147
+ ```javascript
148
+ await client.deleteMessage({
149
+ messageId: 456,
150
+ chatId: 123
151
+ });
152
+ ```
153
+
154
+ ##### `forwardMessage(options)`
155
+
156
+ Пересылает сообщение.
157
+
158
+ ```javascript
159
+ await client.forwardMessage({
160
+ messageId: 456,
161
+ fromChatId: 123,
162
+ toChatId: 789
163
+ });
164
+ ```
165
+
166
+ ##### `sendChatAction(chatId, action)`
167
+
168
+ Отправляет действие в чате (печатает, выбирает стикер и т.д.).
169
+
170
+ ```javascript
171
+ await client.sendChatAction(123, ChatActions.TYPING);
172
+ ```
173
+
174
+ ##### `getUser(userId)`
175
+
176
+ Получает информацию о пользователе.
177
+
178
+ ```javascript
179
+ const user = await client.getUser(123);
180
+ ```
181
+
182
+ ##### `getChats(limit, offset)`
183
+
184
+ Получает список чатов.
185
+
186
+ ```javascript
187
+ const chats = await client.getChats(50, 0);
188
+ ```
189
+
190
+ ##### `getHistory(chatId, limit, offset)`
191
+
192
+ Получает историю сообщений.
193
+
194
+ ```javascript
195
+ const messages = await client.getHistory(123, 50, 0);
196
+ ```
197
+
198
+ ##### `stop()`
199
+
200
+ Останавливает клиент.
201
+
202
+ ```javascript
203
+ await client.stop();
204
+ ```
205
+
206
+ ##### `logout()`
207
+
208
+ Выполняет выход из аккаунта и удаляет сессию.
209
+
210
+ ```javascript
211
+ await client.logout();
212
+ ```
213
+
214
+ #### Обработчики событий
215
+
216
+ ##### `onStart(handler)`
217
+
218
+ Регистрирует обработчик запуска клиента.
219
+
220
+ ```javascript
221
+ client.onStart(async () => {
222
+ console.log('Клиент запущен!');
223
+ });
224
+ ```
225
+
226
+ ##### `onMessage(handler)`
227
+
228
+ Регистрирует обработчик новых сообщений.
229
+
230
+ ```javascript
231
+ client.onMessage(async (message) => {
232
+ console.log('Новое сообщение:', message.text);
233
+ });
234
+ ```
235
+
236
+ ##### `onMessageRemoved(handler)`
237
+
238
+ Регистрирует обработчик удаленных сообщений.
239
+
240
+ ```javascript
241
+ client.onMessageRemoved(async (message) => {
242
+ console.log('Сообщение удалено:', message.text);
243
+ });
244
+ ```
245
+
246
+ ##### `onChatAction(handler)`
247
+
248
+ Регистрирует обработчик действий в чате.
249
+
250
+ ```javascript
251
+ client.onChatAction(async (action) => {
252
+ console.log('Действие в чате:', action.type);
253
+ });
254
+ ```
255
+
256
+ ##### `onError(handler)`
257
+
258
+ Регистрирует обработчик ошибок.
259
+
260
+ ```javascript
261
+ client.onError(async (error) => {
262
+ console.error('Ошибка:', error.message);
263
+ });
264
+ ```
265
+
266
+ ### Message
267
+
268
+ Класс, представляющий сообщение.
269
+
270
+ #### Свойства
271
+
272
+ - `id` - ID сообщения
273
+ - `cid` - Client ID сообщения
274
+ - `chatId` - ID чата
275
+ - `text` - Текст сообщения
276
+ - `senderId` - ID отправителя
277
+ - `sender` - Объект отправителя (User)
278
+ - `timestamp` - Время отправки
279
+ - `type` - Тип сообщения
280
+ - `isEdited` - Флаг редактирования
281
+ - `replyTo` - ID сообщения, на которое это является ответом
282
+ - `attachments` - Вложения
283
+
284
+ #### Методы
285
+
286
+ ##### `reply(options)`
287
+
288
+ Отвечает на сообщение.
289
+
290
+ ```javascript
291
+ await message.reply({
292
+ text: 'Ответ на сообщение',
293
+ cid: Date.now()
294
+ });
295
+ ```
296
+
297
+ ##### `edit(options)`
298
+
299
+ Редактирует сообщение.
300
+
301
+ ```javascript
302
+ await message.edit({
303
+ text: 'Новый текст'
304
+ });
305
+ ```
306
+
307
+ ##### `delete()`
308
+
309
+ Удаляет сообщение.
310
+
311
+ ```javascript
312
+ await message.delete();
313
+ ```
314
+
315
+ ##### `forward(chatId)`
316
+
317
+ Пересылает сообщение.
318
+
319
+ ```javascript
320
+ await message.forward(789);
321
+ ```
322
+
323
+ ### User
324
+
325
+ Класс, представляющий пользователя.
326
+
327
+ #### Свойства
328
+
329
+ - `id` - ID пользователя
330
+ - `firstname` - Имя
331
+ - `lastname` - Фамилия
332
+ - `username` - Имя пользователя
333
+ - `phone` - Номер телефона
334
+ - `avatar` - URL аватара
335
+ - `status` - Статус
336
+ - `bio` - Биография
337
+ - `fullname` - Полное имя (getter)
338
+
339
+ ### ChatAction
340
+
341
+ Класс, представляющий действие в чате.
342
+
343
+ #### Свойства
344
+
345
+ - `type` - Тип действия
346
+ - `chatId` - ID чата
347
+ - `userId` - ID пользователя
348
+ - `user` - Объект пользователя (User)
349
+ - `timestamp` - Время действия
350
+
351
+ ### Константы
352
+
353
+ #### ChatActions
354
+
355
+ ```javascript
356
+ const { ChatActions } = require('webmaxsocket');
357
+
358
+ ChatActions.TYPING // Печатает
359
+ ChatActions.STICKER // Выбирает стикер
360
+ ChatActions.FILE // Отправляет файл
361
+ ChatActions.RECORDING_VOICE // Записывает голосовое
362
+ ChatActions.RECORDING_VIDEO // Записывает видео
363
+ ```
364
+
365
+ ## Структура проекта
366
+
367
+ ```
368
+ webmaxsocket/
369
+ ├── lib/
370
+ │ ├── client.js # Основной клиент
371
+ │ ├── session.js # Управление сессиями
372
+ │ ├── constants.js # Константы
373
+ │ └── entities/
374
+ │ ├── User.js # Класс пользователя
375
+ │ ├── Message.js # Класс сообщения
376
+ │ ├── ChatAction.js # Класс действия в чате
377
+ │ └── index.js # Экспорт сущностей
378
+ ├── sessions/ # Директория с сохраненными сессиями
379
+ ├── index.js # Точка входа
380
+ ├── example.js # Пример использования
381
+ ├── package.json
382
+ └── README.md
383
+ ```
384
+
385
+ ## Сессии
386
+
387
+ Библиотека автоматически сохраняет сессии в директории `sessions/`. При повторном запуске с тем же именем сессии авторизация не требуется.
388
+
389
+ ```javascript
390
+ // Создание новой сессии
391
+ const client1 = new WebMaxClient({ name: 'account1', phone: '+1234567890' });
392
+
393
+ // Использование существующей сессии
394
+ const client2 = new WebMaxClient({ name: 'account1' }); // phone не требуется
395
+ ```
396
+
397
+ ## Обработка ошибок
398
+
399
+ Рекомендуется всегда оборачивать вызовы API в try-catch блоки:
400
+
401
+ ```javascript
402
+ try {
403
+ const message = await client.sendMessage({
404
+ chatId: 123,
405
+ text: 'Привет!',
406
+ cid: Date.now()
407
+ });
408
+ } catch (error) {
409
+ console.error('Ошибка:', error.message);
410
+ }
411
+ ```
package/example.js ADDED
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Пример использования WebMax клиента
3
+ * Демонстрирует основные возможности библиотеки
4
+ */
5
+
6
+ const { WebMaxClient } = require('./index');
7
+
8
+ async function main() {
9
+ // Инициализация клиента
10
+ const client = new WebMaxClient({
11
+ name: 'example_session', // Имя сессии
12
+ appVersion: '25.12.14'
13
+ });
14
+
15
+ // Обработчик запуска
16
+ client.onStart(async () => {
17
+
18
+ if (client.me) {
19
+ console.log(`👤 Вы вошли как: ${client.me.fullname || client.me.firstname}`);
20
+ console.log(`🆔 ID: ${client.me.id}`);
21
+ console.log(`📱 Телефон: +${client.me.phone}\n`);
22
+ }
23
+ });
24
+
25
+ // Обработчик входящих сообщений
26
+ client.onMessage(async (message) => {
27
+ const senderName = message.getSenderName();
28
+ console.log(`\n💬 Сообщение от ${senderName}:`);
29
+ console.log(`📝 ${message.text}`);
30
+ console.log(`🕐 ${new Date(message.timestamp).toLocaleString()}`);
31
+
32
+ // Не отвечаем на свои сообщения
33
+ if (message.senderId === client.me.id) {
34
+ return;
35
+ }
36
+
37
+ // Обработка команд
38
+ const text = message.text.trim().toLowerCase();
39
+
40
+ if (text === '/start' || text === '/help') {
41
+ await message.reply({
42
+ text: '🤖 Доступные команды:\n' +
43
+ '/start - Показать это меню\n' +
44
+ '/info - Информация о боте\n' +
45
+ '/ping - Проверка связи\n' +
46
+ '/echo <текст> - Повторить текст',
47
+ cid: Date.now()
48
+ });
49
+ console.log('✅ Отправлено меню команд');
50
+ }
51
+ else if (text === '/info') {
52
+ await message.reply({
53
+ text: '📊 WebMax Node.js Client\n' +
54
+ 'Версия: 1.0.0\n' +
55
+ 'GitHub: https://github.com/Tellarion/webmaxsocket',
56
+ cid: Date.now()
57
+ });
58
+ console.log('✅ Отправлена информация');
59
+ }
60
+ else if (text === '/ping') {
61
+ await message.reply({
62
+ text: '🏓 Pong!',
63
+ cid: Date.now()
64
+ });
65
+ console.log('✅ Отправлен pong');
66
+ }
67
+ else if (text.startsWith('/echo ')) {
68
+ const echoText = message.text.substring(6);
69
+ await message.reply({
70
+ text: echoText,
71
+ cid: Date.now()
72
+ });
73
+ console.log('✅ Отправлено эхо');
74
+ }
75
+ else {
76
+ // Обычный автоответ
77
+ await message.fetchSender();
78
+ const name = message.sender ? (message.sender.firstname || 'друг') : 'друг';
79
+
80
+ await message.reply({
81
+ text: `Привет, ${name}! 👋\nНапиши /help чтобы увидеть доступные команды.`,
82
+ cid: Date.now()
83
+ });
84
+ console.log(`✅ Отправлен приветственный ответ`);
85
+ }
86
+ });
87
+
88
+ // Обработчик удаленных сообщений
89
+ client.onMessageRemoved(async (message) => {
90
+ console.log(`\n🗑️ Сообщение удалено (ID: ${message.id})`);
91
+ });
92
+
93
+ // Обработчик действий в чате
94
+ client.onChatAction(async (action) => {
95
+ console.log(`\n👁️ Действие в чате:`, action);
96
+ });
97
+
98
+ // Обработчик ошибок
99
+ client.onError(async (error) => {
100
+ console.error('\n❌ Ошибка:', error.message);
101
+ });
102
+
103
+ // Запуск клиента
104
+ try {
105
+ await client.start();
106
+ console.log('🤖 Бот готов к работе. Нажмите Ctrl+C для выхода.\n');
107
+ } catch (error) {
108
+ console.error('❌ Ошибка запуска:', error);
109
+ process.exit(1);
110
+ }
111
+ }
112
+
113
+ // Обработка завершения
114
+ process.on('SIGINT', async () => {
115
+ console.log('\n\n👋 Завершение работы...');
116
+ process.exit(0);
117
+ });
118
+
119
+ // Запуск
120
+ main().catch(console.error);
package/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * WebMaxSocket - Node.js библиотека для работы с API мессенджера Max
3
+ * tellarion.dev
4
+ *
5
+ * @module webmaxsocket
6
+ */
7
+
8
+ const WebMaxClient = require('./lib/client');
9
+ const { User, Message, ChatAction } = require('./lib/entities');
10
+ const { ChatActions, EventTypes, MessageTypes } = require('./lib/constants');
11
+ const { Opcode, getOpcodeName } = require('./lib/opcodes');
12
+ const { UserAgentPayload } = require('./lib/userAgent');
13
+
14
+ module.exports = {
15
+ WebMaxClient,
16
+ User,
17
+ Message,
18
+ ChatAction,
19
+ ChatActions,
20
+ EventTypes,
21
+ MessageTypes,
22
+ Opcode,
23
+ getOpcodeName,
24
+ UserAgentPayload
25
+ };
26
+