ravejs 1.7.3 → 1.9.3
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 +339 -1
- package/README.RU.MD +390 -0
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -2
- package/dist/core/httpworkflow.d.ts +5 -0
- package/dist/core/httpworkflow.d.ts.map +1 -1
- package/dist/core/httpworkflow.js +18 -0
- package/dist/core/mesh-socket.d.ts +16 -0
- package/dist/core/mesh-socket.d.ts.map +1 -0
- package/dist/core/mesh-socket.js +74 -0
- package/dist/core/rave.d.ts +23 -0
- package/dist/core/rave.d.ts.map +1 -1
- package/dist/core/rave.js +70 -4
- package/dist/factories/mesh-factory.d.ts +2 -0
- package/dist/factories/mesh-factory.d.ts.map +1 -1
- package/dist/factories/mesh-factory.js +38 -0
- package/dist/factories/thread-factory.d.ts.map +1 -1
- package/dist/factories/thread-factory.js +2 -2
- package/dist/schemas/configs.d.ts +1 -1
- package/dist/schemas/private.d.ts +10 -0
- package/dist/schemas/private.d.ts.map +1 -1
- package/dist/schemas/private.js +8 -1
- package/dist/schemas/public.d.ts +26 -2
- package/dist/schemas/public.d.ts.map +1 -1
- package/dist/schemas/public.js +8 -6
- package/dist/schemas/rave/account.d.ts +22 -0
- package/dist/schemas/rave/account.d.ts.map +1 -0
- package/dist/schemas/rave/account.js +9 -0
- package/dist/schemas/rave/user.d.ts +3 -3
- package/dist/schemas/rave/user.js +1 -1
- package/dist/schemas/responses.d.ts +31 -5
- package/dist/schemas/responses.d.ts.map +1 -1
- package/dist/schemas/responses.js +8 -1
- package/dist/utils/utils.d.ts +2 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +22 -5
- package/package.json +4 -1
package/README.RU.MD
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>RaveJS</h1>
|
|
3
|
+
<a href="https://t.me/aminodorks"><img src="https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white" alt="Telegram"></a>
|
|
4
|
+
<a href="https://www.npmjs.com/package/ravejs"><img src="https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white" alt="NPM"></a>
|
|
5
|
+
</div>
|
|
6
|
+
<div align="center">
|
|
7
|
+
<img src="https://img.shields.io/npm/dm/ravejs" alt="Downloads">
|
|
8
|
+
<img src="https://img.shields.io/npm/v/ravejs.svg" alt="Version">
|
|
9
|
+
<h2>RaveJS — библиотека на TypeScript для взаимодействия с API приложения Rave: Watch Party</h2>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
- [README на английском](https://github.com/thatcelt/ravejs/blob/master/README.MD)
|
|
13
|
+
- [README на русском](https://github.com/thatcelt/ravejs/blob/master/README.RU.MD)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Содержание
|
|
18
|
+
- [Возможности](#возможности)
|
|
19
|
+
- [Начало работы](#начало-работы)
|
|
20
|
+
- [Использование](#использование)
|
|
21
|
+
- [Документация API](#документация-api)
|
|
22
|
+
- [Участие в разработке](#участие-в-разработке)
|
|
23
|
+
- [Лицензия](#лицензия)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Возможности
|
|
28
|
+
|
|
29
|
+
RaveJS обладает рядом преимуществ:
|
|
30
|
+
- Модульная архитектура
|
|
31
|
+
- Простота в использовании
|
|
32
|
+
- Поддержка всех необходимых функций
|
|
33
|
+
- Первая библиотека на TypeScript для Rave API
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Начало работы
|
|
38
|
+
|
|
39
|
+
Чтобы начать использовать RaveJS, выполните следующие шаги:
|
|
40
|
+
|
|
41
|
+
1. Инициализируйте npm-пакет:
|
|
42
|
+
```bash
|
|
43
|
+
npm init
|
|
44
|
+
```
|
|
45
|
+
2. Установите TypeScript глобально (опционально):
|
|
46
|
+
```bash
|
|
47
|
+
npm install -g typescript
|
|
48
|
+
```
|
|
49
|
+
3. Создайте конфигурацию TypeScript:
|
|
50
|
+
```bash
|
|
51
|
+
tsc --init
|
|
52
|
+
```
|
|
53
|
+
4. Установите RaveJS:
|
|
54
|
+
```bash
|
|
55
|
+
npm install ravejs
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Использование
|
|
61
|
+
|
|
62
|
+
### Базовая авторизация
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { Rave } from 'ravejs';
|
|
66
|
+
|
|
67
|
+
(async () => {
|
|
68
|
+
const rave = new Rave({
|
|
69
|
+
credentials: {
|
|
70
|
+
deviceId: 'ваш_device_id',
|
|
71
|
+
token: 'ваш_токен'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
console.log(`Авторизован как ${(await rave.getAccount()).id}`);
|
|
75
|
+
})();
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Документация API
|
|
81
|
+
|
|
82
|
+
### `Rave(config: RaveConfig)`
|
|
83
|
+
Главный класс для взаимодействия с API Rave.
|
|
84
|
+
|
|
85
|
+
#### Конфигурация (`RaveConfig`)
|
|
86
|
+
- `credentials?`: `{ deviceId: string, token: string }` — данные для авторизации
|
|
87
|
+
- `enableLogging?`: `boolean` — включить логирование
|
|
88
|
+
- `account?`: `Account` — профиль пользователя после авторизации
|
|
89
|
+
|
|
90
|
+
#### Свойства экземпляра `Rave`
|
|
91
|
+
1. `token: string` — Bearer-токен авторизации
|
|
92
|
+
2. `JWT: string` — JWT-токен для Web Mesh API
|
|
93
|
+
3. `account: Account` — информация о профиле пользователя
|
|
94
|
+
4. `proxy?: string` — прокси для запросов (поддерживаются SOCKS-прокси; можно задать через сеттер)
|
|
95
|
+
|
|
96
|
+
#### Методы экземпляра `Rave`
|
|
97
|
+
1. `refreshJWT(deviceId?: string): Promise<string>` — обновить JWT-токен
|
|
98
|
+
2. `getAccount(): Promise<Account>` — получить данные авторизованного пользователя
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### Фабрики
|
|
103
|
+
|
|
104
|
+
RaveJS использует модульную архитектуру, основанную на *фабриках*.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
#### `AuthFactory`
|
|
109
|
+
Фабрика для авторизации и аутентификации. Доступна через `rave.auth`.
|
|
110
|
+
|
|
111
|
+
##### Методы `AuthFactory`
|
|
112
|
+
1. `sendMagicLink(email: string, language = 'ru'): Promise<{ stateId: string }>`
|
|
113
|
+
Отправить «волшебную» ссылку на почту для входа или регистрации.
|
|
114
|
+
|
|
115
|
+
2. `checkRegisterState(stateId: string): Promise<CheckRegisterStateResponse>`
|
|
116
|
+
Проверить статус регистрации по `stateId`.
|
|
117
|
+
**Ответ:**
|
|
118
|
+
```ts
|
|
119
|
+
{
|
|
120
|
+
authenticated: boolean,
|
|
121
|
+
isSecondFactorLogin: boolean,
|
|
122
|
+
oauth: {
|
|
123
|
+
accessToken: string,
|
|
124
|
+
idToken: string,
|
|
125
|
+
refreshToken: string,
|
|
126
|
+
expiresIn: string,
|
|
127
|
+
tokenType: string
|
|
128
|
+
},
|
|
129
|
+
user: {
|
|
130
|
+
createdAt: string,
|
|
131
|
+
updatedAt: string,
|
|
132
|
+
issuer: string,
|
|
133
|
+
userId: string,
|
|
134
|
+
identifier: string,
|
|
135
|
+
email: string
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
3. `parseUserCredentials(idToken: string, email: string): Promise<{ objectId: string; createdAt: string; username: string; sessionToken: string }>`
|
|
141
|
+
Извлечь учётные данные из `idToken` и email.
|
|
142
|
+
|
|
143
|
+
4. `mojoLogin(email: string, parseId: string, parseToken: string, name: string, deviceId?: string, language = 'ru'): Promise<{ data: { isValid: boolean; newUser: boolean; suggestedHandles: string[] } }>`
|
|
144
|
+
Вход через сервис Mojo.
|
|
145
|
+
|
|
146
|
+
5. `login(stateId: string, name?: string, deviceId?: string, language = 'ru'): Promise<AuthenticateResponse>`
|
|
147
|
+
Упрощённый метод входа (комбинирует предыдущие шаги).
|
|
148
|
+
**Ответ (`AuthenticateResponse`):**
|
|
149
|
+
```ts
|
|
150
|
+
{
|
|
151
|
+
isNewUser: boolean,
|
|
152
|
+
email: string,
|
|
153
|
+
username: string,
|
|
154
|
+
deviceId: string,
|
|
155
|
+
token: string
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
6. `register(email: string, name: string, deviceId?: string, language = 'ru'): Promise<RegisterResponse>`
|
|
160
|
+
Регистрация нового пользователя (аналогично `login`, но гарантирует создание аккаунта).
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
#### `MeshFactory`
|
|
165
|
+
Фабрика для работы с *мешами* (комнатами просмотра). Доступна через `rave.mesh`.
|
|
166
|
+
|
|
167
|
+
##### Методы `MeshFactory`
|
|
168
|
+
1. `get(meshId: string): Promise<GetMeshResponse>`
|
|
169
|
+
Получить информацию о меше по ID.
|
|
170
|
+
**Ответ (`GetMeshResponse.data`):**
|
|
171
|
+
```ts
|
|
172
|
+
{
|
|
173
|
+
blurT?: boolean;
|
|
174
|
+
category: string;
|
|
175
|
+
channel: number;
|
|
176
|
+
createdAt: string;
|
|
177
|
+
currentState: 'play' | 'paus';
|
|
178
|
+
explicit: boolean;
|
|
179
|
+
id: string;
|
|
180
|
+
isFriend: boolean;
|
|
181
|
+
isLocal: boolean;
|
|
182
|
+
isPublic: boolean;
|
|
183
|
+
kickMode: string;
|
|
184
|
+
maturity: string;
|
|
185
|
+
mediaUrl: string;
|
|
186
|
+
originator: number;
|
|
187
|
+
playMode: string;
|
|
188
|
+
position: number;
|
|
189
|
+
server: string;
|
|
190
|
+
shareLink: string;
|
|
191
|
+
thumbnails?: {
|
|
192
|
+
channel?: string;
|
|
193
|
+
standard?: string;
|
|
194
|
+
animated?: string;
|
|
195
|
+
maxres?: string;
|
|
196
|
+
medium?: string;
|
|
197
|
+
default?: string;
|
|
198
|
+
high?: string;
|
|
199
|
+
};
|
|
200
|
+
time: number;
|
|
201
|
+
videoAuthor: string;
|
|
202
|
+
videoDuration: number;
|
|
203
|
+
videoProvider: string;
|
|
204
|
+
videoPublishedAt: string;
|
|
205
|
+
videoThumbnail: string;
|
|
206
|
+
videoTitle: string;
|
|
207
|
+
videoUrl: string;
|
|
208
|
+
vikiPass: boolean;
|
|
209
|
+
voipMode: string;
|
|
210
|
+
users: {
|
|
211
|
+
avatar: string;
|
|
212
|
+
country: string;
|
|
213
|
+
displayName?: string;
|
|
214
|
+
handle?: string;
|
|
215
|
+
id: number;
|
|
216
|
+
lang?: string;
|
|
217
|
+
lat: number;
|
|
218
|
+
lng: number;
|
|
219
|
+
name: string;
|
|
220
|
+
}[];
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
2. `getByLink(meshLink: string): Promise<GetMeshResponse>`
|
|
225
|
+
Получить меш по публичной ссылке (`shareLink`).
|
|
226
|
+
|
|
227
|
+
3. `getMany(params: GetManyMeshesParams): Promise<GetMeshResponse[]>`
|
|
228
|
+
Получить список мешей.
|
|
229
|
+
**Параметры (`GetManyMeshesParams`):**
|
|
230
|
+
```ts
|
|
231
|
+
{
|
|
232
|
+
isPublic?: boolean;
|
|
233
|
+
limit: number;
|
|
234
|
+
hasFriends: boolean;
|
|
235
|
+
local: boolean;
|
|
236
|
+
hasInvited: boolean;
|
|
237
|
+
language?: string;
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
4. `join(meshId: string): Promise<MeshSocket>`
|
|
242
|
+
Присоединиться к мешу. Возвращает экземпляр `MeshSocket` для взаимодействия через WebSocket.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
#### `ThreadFactory`
|
|
247
|
+
Фабрика для работы с переписками. Доступна через `rave.thread`.
|
|
248
|
+
|
|
249
|
+
##### Методы `ThreadFactory`
|
|
250
|
+
1. `getMany(): Promise<Thread[]>`
|
|
251
|
+
Получить все переписки.
|
|
252
|
+
**Структура `Thread`:**
|
|
253
|
+
```ts
|
|
254
|
+
{
|
|
255
|
+
expiryMode: number;
|
|
256
|
+
isFriend: boolean;
|
|
257
|
+
myself: number;
|
|
258
|
+
opposingUser: number;
|
|
259
|
+
spokenLangs: string[];
|
|
260
|
+
threadId: string;
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
2. `create(userId: number): Promise<Thread>`
|
|
265
|
+
Создать новую переписку с пользователем.
|
|
266
|
+
|
|
267
|
+
3. `sendMessage(threadId: string, content: string): Promise<SendMessageResponse>`
|
|
268
|
+
Отправить сообщение в переписку.
|
|
269
|
+
**Ответ (`SendMessageResponse.data`):**
|
|
270
|
+
```ts
|
|
271
|
+
{
|
|
272
|
+
correlateId: string;
|
|
273
|
+
threadId: string;
|
|
274
|
+
messageType: string;
|
|
275
|
+
originator: number;
|
|
276
|
+
messageBody: {
|
|
277
|
+
content: string;
|
|
278
|
+
detectedLang: string;
|
|
279
|
+
id: string;
|
|
280
|
+
translations: Record<string, string>;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
#### `UserFactory`
|
|
288
|
+
Фабрика для работы с пользователями. Доступна через `rave.user`.
|
|
289
|
+
|
|
290
|
+
##### Методы `UserFactory`
|
|
291
|
+
1. `get(userId: number): Promise<GetUserResponse>`
|
|
292
|
+
Получить профиль пользователя.
|
|
293
|
+
**Ответ (`GetUserResponse.data`):**
|
|
294
|
+
```ts
|
|
295
|
+
{
|
|
296
|
+
bio: {
|
|
297
|
+
bio?: string;
|
|
298
|
+
metadata: { position: number; privacy: string };
|
|
299
|
+
};
|
|
300
|
+
profile: {
|
|
301
|
+
avatar: string;
|
|
302
|
+
country: string;
|
|
303
|
+
displayName?: string;
|
|
304
|
+
handle?: string;
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
2. `sendFriendship(userId: number): Promise<FriendshipResponse>`
|
|
310
|
+
Отправить запрос на добавление в друзья.
|
|
311
|
+
**Ответ (`FriendshipResponse.data`):**
|
|
312
|
+
```ts
|
|
313
|
+
{
|
|
314
|
+
fromUserId: number;
|
|
315
|
+
state: string;
|
|
316
|
+
toUserId: number;
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
3. `acceptFriendship(userId: number): Promise<void>`
|
|
321
|
+
Принять запрос в друзья.
|
|
322
|
+
|
|
323
|
+
4. `declineFriendship(userId: number): Promise<void>`
|
|
324
|
+
Отклонить запрос в друзья.
|
|
325
|
+
|
|
326
|
+
5. `edit(builder: EditProfileBuilder): Promise<EditProfileResponse>`
|
|
327
|
+
Редактировать профиль.
|
|
328
|
+
**Параметры (`EditProfileBuilder`):**
|
|
329
|
+
```ts
|
|
330
|
+
{
|
|
331
|
+
displayAvatar?: string;
|
|
332
|
+
displayName?: string;
|
|
333
|
+
handle?: string;
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
**Ответ (`EditProfileResponse.data`)** — объект `User`.
|
|
337
|
+
|
|
338
|
+
6. `getAvatarUpload(): Promise<GetAvatarUploadResponse>`
|
|
339
|
+
Получить URL для загрузки аватара.
|
|
340
|
+
**Ответ (`GetAvatarUploadResponse.data`):**
|
|
341
|
+
```ts
|
|
342
|
+
{
|
|
343
|
+
expiresAt: string;
|
|
344
|
+
fileName: string;
|
|
345
|
+
mime: string;
|
|
346
|
+
uploadUrl: string;
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
7. `uploadOnUrl(uploadUrl: string, image: Buffer): Promise<void>`
|
|
351
|
+
Загрузить изображение по полученному URL.
|
|
352
|
+
|
|
353
|
+
8. `uploadAvatar(image: Buffer): Promise<string>`
|
|
354
|
+
Упрощённый метод: получить URL и загрузить аватар за один вызов. Возвращает `displayAvatar` (новый URL аватара).
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
#### `MeshSocket`
|
|
359
|
+
Класс для работы с WebSocket-соединением в меше.
|
|
360
|
+
|
|
361
|
+
##### Методы и свойства `MeshSocket`
|
|
362
|
+
1. `onclose(handler: () => Promise<void>): void`
|
|
363
|
+
Обработчик закрытия соединения.
|
|
364
|
+
|
|
365
|
+
2. `onerror(handler: () => Promise<void>): void`
|
|
366
|
+
Обработчик ошибок.
|
|
367
|
+
|
|
368
|
+
3. `onmessage(handler: (data: string) => Promise<void>): void`
|
|
369
|
+
Обработчик входящих сообщений (сырой JSON-строки).
|
|
370
|
+
|
|
371
|
+
4. `sendMessage(content: string): void`
|
|
372
|
+
Отправить сообщение в меш (например, команды управления воспроизведением).
|
|
373
|
+
|
|
374
|
+
5. `leave(): void`
|
|
375
|
+
Покинуть меш (закрывает сокет).
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Участие в разработке
|
|
380
|
+
|
|
381
|
+
Приветствуются pull request'ы и предложения по улучшению!
|
|
382
|
+
Если вы используете мои генераторы кода — напишите мне в [личные сообщения Telegram](https://t.me/celt_is_god).
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Лицензия
|
|
387
|
+
|
|
388
|
+
RaveJS распространяется под лицензией **MIT**. Подробнее см. в файле [LICENSE](https://github.com/thatcelt/ravejs/blob/master/LICENSE).
|
|
389
|
+
|
|
390
|
+
---
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIErrorData } from './schemas/error';
|
|
2
|
-
export declare const VERSION = "1.
|
|
2
|
+
export declare const VERSION = "1.9.3";
|
|
3
3
|
export declare const API_URL = "https://api1.a-l-p-a.com";
|
|
4
4
|
export declare const PARSE_API_URL = "https://api3.a-l-p-a.com";
|
|
5
5
|
export declare const EVENTS_API_URL = "https://api2.a-l-p-a.com/api";
|
|
@@ -8,6 +8,7 @@ export declare const MOJO_AUTH_URL = "https://api.mojoauth.com";
|
|
|
8
8
|
export declare const HASH_SECRET = "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2";
|
|
9
9
|
export declare const DEFAULT_LANGUAGE = "ru";
|
|
10
10
|
export declare const UUID_PATTERN = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
|
|
11
|
+
export declare const SOCKET_PING_DELAY = 20000;
|
|
11
12
|
export declare const API_HEADERS: {
|
|
12
13
|
'Content-Type': string;
|
|
13
14
|
Accept: string;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,cAAc,iCAAiC,CAAC;AAC7D,eAAO,MAAM,eAAe,mCAAmC,CAAC;AAChE,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,WAAW,qEAC4C,CAAC;AACrE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,YAAY,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,cAAc,iCAAiC,CAAC;AAC7D,eAAO,MAAM,eAAe,mCAAmC,CAAC;AAChE,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,WAAW,qEAC4C,CAAC;AACrE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,YAAY,yCAAyC,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAIvC,eAAO,MAAM,WAAW;;;;;;;;;CASvB,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;CAM7B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAyB1B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;CAwB3B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;CAU/B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAyBlD,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CODES_MAP = exports.PARSE_USERS_HEADERS = exports.PATCHED_IP_DATA = exports.PATCHED_DEVICE = exports.MOJO_AUTH_HEADERS = exports.API_HEADERS = exports.UUID_PATTERN = exports.DEFAULT_LANGUAGE = exports.HASH_SECRET = exports.MOJO_AUTH_URL = exports.WE_MESH_API_URL = exports.EVENTS_API_URL = exports.PARSE_API_URL = exports.API_URL = exports.VERSION = void 0;
|
|
3
|
+
exports.CODES_MAP = exports.PARSE_USERS_HEADERS = exports.PATCHED_IP_DATA = exports.PATCHED_DEVICE = exports.MOJO_AUTH_HEADERS = exports.API_HEADERS = exports.SOCKET_PING_DELAY = exports.UUID_PATTERN = exports.DEFAULT_LANGUAGE = exports.HASH_SECRET = exports.MOJO_AUTH_URL = exports.WE_MESH_API_URL = exports.EVENTS_API_URL = exports.PARSE_API_URL = exports.API_URL = exports.VERSION = void 0;
|
|
4
4
|
// Constants
|
|
5
|
-
exports.VERSION = '1.
|
|
5
|
+
exports.VERSION = '1.9.3';
|
|
6
6
|
exports.API_URL = 'https://api1.a-l-p-a.com';
|
|
7
7
|
exports.PARSE_API_URL = 'https://api3.a-l-p-a.com';
|
|
8
8
|
exports.EVENTS_API_URL = 'https://api2.a-l-p-a.com/api';
|
|
@@ -11,6 +11,7 @@ exports.MOJO_AUTH_URL = 'https://api.mojoauth.com';
|
|
|
11
11
|
exports.HASH_SECRET = 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2';
|
|
12
12
|
exports.DEFAULT_LANGUAGE = 'ru';
|
|
13
13
|
exports.UUID_PATTERN = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
|
|
14
|
+
exports.SOCKET_PING_DELAY = 20000;
|
|
14
15
|
// Structures
|
|
15
16
|
exports.API_HEADERS = {
|
|
16
17
|
'Content-Type': 'application/json',
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { SocksProxies } from 'fetch-socks';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
import { GetRequestConfig, PostRequestConfig, RawRequestConfig } from '../schemas/configs';
|
|
3
4
|
export declare class HttpWorkflow {
|
|
4
5
|
private __headers;
|
|
5
6
|
private __weMeshHeaders;
|
|
7
|
+
private __currentProxy?;
|
|
8
|
+
private __currentDispatcher?;
|
|
6
9
|
get token(): string;
|
|
7
10
|
get weMeshToken(): string;
|
|
11
|
+
get proxy(): string | undefined;
|
|
8
12
|
set token(token: string);
|
|
9
13
|
set weMeshToken(token: string);
|
|
10
14
|
set popHeaders(key: string);
|
|
@@ -17,5 +21,6 @@ export declare class HttpWorkflow {
|
|
|
17
21
|
sendWeMeshGet: <T>(config: GetRequestConfig, schema: z.ZodSchema) => Promise<T>;
|
|
18
22
|
sendWeMeshPost: <T>(config: PostRequestConfig, schema: z.ZodSchema) => Promise<T>;
|
|
19
23
|
sendRaw: <T>(config: RawRequestConfig, schema: z.ZodSchema) => Promise<T>;
|
|
24
|
+
setProxy(rawProxy: string, socksProxy: SocksProxies): void;
|
|
20
25
|
}
|
|
21
26
|
//# sourceMappingURL=httpworkflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpworkflow.d.ts","sourceRoot":"","sources":["../../src/core/httpworkflow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAI5B,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,eAAe,CAAmC;IAE1D,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED,IAAI,WAAW,IAAI,MAAM,CAKxB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAEzB;IAED,OAAO,CAAC,kBAAkB,CAWxB;IAEF,OAAO,CAAC,gBAAgB,CAmBtB;IAEF,OAAO,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"httpworkflow.d.ts","sourceRoot":"","sources":["../../src/core/httpworkflow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAI5B,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,eAAe,CAAmC;IAE1D,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED,IAAI,WAAW,IAAI,MAAM,CAKxB;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAEzB;IAED,OAAO,CAAC,kBAAkB,CAWxB;IAEF,OAAO,CAAC,gBAAgB,CAmBtB;IAEF,OAAO,CAAC,iBAAiB,CAmBvB;IAEK,OAAO,GAAU,CAAC,UACf,gBAAgB,UAChB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CAcX;IAEK,QAAQ,GAAU,CAAC,UAChB,iBAAiB,UACjB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CAEX;IAEK,OAAO,GAAU,CAAC,UACf,iBAAiB,UACjB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CAEX;IAEK,aAAa,GAAU,CAAC,UACrB,gBAAgB,UAChB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CASX;IAEK,cAAc,GAAU,CAAC,UACtB,iBAAiB,UACjB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CAUX;IAEK,OAAO,GAAU,CAAC,UACf,gBAAgB,UAChB,CAAC,CAAC,SAAS,KAClB,OAAO,CAAC,CAAC,CAAC,CASX;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;CAY3D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpWorkflow = void 0;
|
|
4
4
|
const undici_1 = require("undici");
|
|
5
|
+
const fetch_socks_1 = require("fetch-socks");
|
|
5
6
|
const constants_1 = require("../constants");
|
|
6
7
|
const cryptography_1 = require("../utils/cryptography");
|
|
7
8
|
const logger_1 = require("../utils/logger");
|
|
@@ -35,6 +36,7 @@ class HttpWorkflow {
|
|
|
35
36
|
method,
|
|
36
37
|
headers: this.__configureHeaders(config.body, config.headers),
|
|
37
38
|
body: config.body,
|
|
39
|
+
dispatcher: this.__currentDispatcher,
|
|
38
40
|
});
|
|
39
41
|
return await this.__handleResponse(statusCode, `${baseUrl}${config.path}`, body, schema);
|
|
40
42
|
};
|
|
@@ -43,6 +45,7 @@ class HttpWorkflow {
|
|
|
43
45
|
const { statusCode, body } = await (0, undici_1.request)(`${baseUrl}${config.path}`, {
|
|
44
46
|
method: 'GET',
|
|
45
47
|
headers: this.__configureHeaders(undefined, config.headers),
|
|
48
|
+
dispatcher: this.__currentDispatcher,
|
|
46
49
|
});
|
|
47
50
|
return await this.__handleResponse(statusCode, `${baseUrl}${config.path}`, body, schema);
|
|
48
51
|
};
|
|
@@ -63,6 +66,7 @@ class HttpWorkflow {
|
|
|
63
66
|
headers: config.headers,
|
|
64
67
|
method: config.method,
|
|
65
68
|
body: config.body,
|
|
69
|
+
dispatcher: this.__currentDispatcher,
|
|
66
70
|
});
|
|
67
71
|
return await this.__handleResponse(statusCode, config.path, body, schema);
|
|
68
72
|
};
|
|
@@ -73,6 +77,9 @@ class HttpWorkflow {
|
|
|
73
77
|
get weMeshToken() {
|
|
74
78
|
return this.__weMeshHeaders.Authorization.slice(7, this.__weMeshHeaders.Authorization.length);
|
|
75
79
|
}
|
|
80
|
+
get proxy() {
|
|
81
|
+
return this.__currentProxy;
|
|
82
|
+
}
|
|
76
83
|
set token(token) {
|
|
77
84
|
this.__headers.Authorization = `Bearer ${token}`;
|
|
78
85
|
}
|
|
@@ -82,5 +89,16 @@ class HttpWorkflow {
|
|
|
82
89
|
set popHeaders(key) {
|
|
83
90
|
delete this.__headers[key];
|
|
84
91
|
}
|
|
92
|
+
setProxy(rawProxy, socksProxy) {
|
|
93
|
+
if (this.__currentDispatcher)
|
|
94
|
+
this.__currentDispatcher.close();
|
|
95
|
+
this.__currentProxy = rawProxy;
|
|
96
|
+
this.__currentDispatcher = (0, fetch_socks_1.socksDispatcher)(socksProxy, {
|
|
97
|
+
connect: {
|
|
98
|
+
rejectUnauthorized: false,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
logger_1.LOGGER.info({ proxy: rawProxy }, 'Proxy set');
|
|
102
|
+
}
|
|
85
103
|
}
|
|
86
104
|
exports.HttpWorkflow = HttpWorkflow;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MeshSocketConfig } from '../schemas/private';
|
|
2
|
+
export declare class MeshSocket {
|
|
3
|
+
private __config;
|
|
4
|
+
private __url;
|
|
5
|
+
private __websocket;
|
|
6
|
+
constructor(config: MeshSocketConfig);
|
|
7
|
+
private __send;
|
|
8
|
+
private __sendFullyJoined;
|
|
9
|
+
private __pingServer;
|
|
10
|
+
onclose: (handler: () => Promise<void>) => void;
|
|
11
|
+
onerror: (handler: () => Promise<void>) => void;
|
|
12
|
+
onmessage: (handler: (data: string) => Promise<void>) => void;
|
|
13
|
+
sendMessage: (content: string) => void;
|
|
14
|
+
leave: () => void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=mesh-socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-socket.d.ts","sourceRoot":"","sources":["../../src/core/mesh-socket.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAY;gBAEnB,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,MAAM,CAGZ;IAEF,OAAO,CAAC,iBAAiB,CASvB;IAEF,OAAO,CAAC,YAAY,CASlB;IAEK,OAAO,YAAa,MAAM,OAAO,CAAC,IAAI,CAAC,UAG5C;IAEK,OAAO,YAAa,MAAM,OAAO,CAAC,IAAI,CAAC,UAG5C;IAEK,SAAS,YAAa,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,UAG1D;IAEK,WAAW,YAAa,MAAM,KAAG,IAAI,CAe1C;IAEK,KAAK,QAAO,IAAI,CAErB;CACH"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MeshSocket = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
class MeshSocket {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.__send = (data) => {
|
|
11
|
+
logger_1.LOGGER.info({ url: this.__url, data }, 'Sending data');
|
|
12
|
+
this.__websocket.send(data);
|
|
13
|
+
};
|
|
14
|
+
this.__sendFullyJoined = () => {
|
|
15
|
+
this.__send(JSON.stringify({
|
|
16
|
+
data: {},
|
|
17
|
+
id: 1207144,
|
|
18
|
+
method: 'fullyJoined',
|
|
19
|
+
request: true,
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
this.__pingServer = () => {
|
|
23
|
+
this.__send(JSON.stringify({
|
|
24
|
+
data: {},
|
|
25
|
+
id: 8841449,
|
|
26
|
+
method: 'clientPing',
|
|
27
|
+
request: true,
|
|
28
|
+
}));
|
|
29
|
+
};
|
|
30
|
+
this.onclose = (handler) => {
|
|
31
|
+
logger_1.LOGGER.info({ url: this.__url }, 'WebSocket closed');
|
|
32
|
+
this.__websocket.on('close', handler);
|
|
33
|
+
};
|
|
34
|
+
this.onerror = (handler) => {
|
|
35
|
+
logger_1.LOGGER.error({ ur: this.__url }, 'Websocket error');
|
|
36
|
+
this.__websocket.on('error', handler);
|
|
37
|
+
};
|
|
38
|
+
this.onmessage = (handler) => {
|
|
39
|
+
logger_1.LOGGER.info({ url: this.__url }, 'WebSocket message');
|
|
40
|
+
this.__websocket.on('message', handler);
|
|
41
|
+
};
|
|
42
|
+
this.sendMessage = (content) => {
|
|
43
|
+
this.__send(JSON.stringify({
|
|
44
|
+
data: {
|
|
45
|
+
chat: content,
|
|
46
|
+
detected_lang: 'ru',
|
|
47
|
+
id: (0, crypto_1.randomUUID)(),
|
|
48
|
+
translations: {
|
|
49
|
+
ru: content,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
method: 'chatMessage',
|
|
53
|
+
notification: true,
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
this.leave = () => {
|
|
57
|
+
this.__websocket.close();
|
|
58
|
+
};
|
|
59
|
+
this.__config = config;
|
|
60
|
+
this.__url = `wss://${this.__config.server}/?roomId=${this.__config.meshId}&peerId=${this.__config.userId}_${this.__config.credentials.deviceId}`;
|
|
61
|
+
this.__websocket = new ws_1.WebSocket(this.__url, 'protoo', {
|
|
62
|
+
headers: {
|
|
63
|
+
authorization: `Bearer ${this.__config.credentials.token}`,
|
|
64
|
+
'API-Version': '4',
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
this.__websocket.on('open', () => {
|
|
68
|
+
logger_1.LOGGER.info({ url: this.__url }, 'WebSocket opened');
|
|
69
|
+
this.__sendFullyJoined();
|
|
70
|
+
});
|
|
71
|
+
setInterval(this.__pingServer, constants_1.SOCKET_PING_DELAY);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.MeshSocket = MeshSocket;
|
package/dist/core/rave.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { MeshFactory } from '../factories/mesh-factory';
|
|
|
3
3
|
import { UserFactory } from '../factories/user-factory';
|
|
4
4
|
import { RaveConfig } from '../schemas/public';
|
|
5
5
|
import { ThreadFactory } from '../factories/thread-factory';
|
|
6
|
+
import { Account } from '../schemas/rave/account';
|
|
6
7
|
export declare class Rave {
|
|
7
8
|
private __config?;
|
|
8
9
|
private __http;
|
|
@@ -13,10 +14,32 @@ export declare class Rave {
|
|
|
13
14
|
constructor(config?: RaveConfig);
|
|
14
15
|
get token(): string;
|
|
15
16
|
get JWT(): string;
|
|
17
|
+
get account(): {
|
|
18
|
+
acceptDataPolicy: number;
|
|
19
|
+
acceptPrivacy: number;
|
|
20
|
+
acceptTos: number;
|
|
21
|
+
acceptWebIndexing: number;
|
|
22
|
+
gender: string;
|
|
23
|
+
pornScore: number;
|
|
24
|
+
userScore: number;
|
|
25
|
+
yearOfBirth: number;
|
|
26
|
+
avatar: string;
|
|
27
|
+
country: string;
|
|
28
|
+
id: number;
|
|
29
|
+
lat: number;
|
|
30
|
+
lng: number;
|
|
31
|
+
name: string;
|
|
32
|
+
displayName?: string | undefined;
|
|
33
|
+
handle?: string | undefined;
|
|
34
|
+
lang?: string | undefined;
|
|
35
|
+
};
|
|
16
36
|
get auth(): AuthFactory;
|
|
17
37
|
get user(): UserFactory;
|
|
18
38
|
get mesh(): MeshFactory;
|
|
19
39
|
get thread(): ThreadFactory;
|
|
40
|
+
get proxy(): string | undefined;
|
|
41
|
+
set proxy(proxy: string);
|
|
20
42
|
refreshJWT: (deviceId?: string) => Promise<string>;
|
|
43
|
+
getAccount: () => Promise<Account>;
|
|
21
44
|
}
|
|
22
45
|
//# sourceMappingURL=rave.d.ts.map
|
package/dist/core/rave.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rave.d.ts","sourceRoot":"","sources":["../../src/core/rave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"rave.d.ts","sourceRoot":"","sources":["../../src/core/rave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS/C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIlD,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,eAAe,CAAC,CAAgB;gBAE5B,MAAM,GAAE,UAAe;IAcnC,IAAI,KAAK,WAER;IAED,IAAI,GAAG,WAEN;IAED,IAAI,OAAO;;;;;;;;;;;;;;;;;;MAMV;IAED,IAAI,IAAI,gBAIP;IAED,IAAI,IAAI,gBAIP;IAED,IAAI,IAAI,gBAIP;IAED,IAAI,MAAM,kBAIT;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAMtB;IAEM,UAAU,cAAqB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAU5D;IAEK,UAAU,QAAa,OAAO,CAAC,OAAO,CAAC,CAqB5C;CACH"}
|