ravejs 1.8.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 +1 -1
- package/dist/constants.js +1 -1
- package/dist/core/mesh-socket.d.ts +1 -0
- package/dist/core/mesh-socket.d.ts.map +1 -1
- package/dist/core/mesh-socket.js +3 -0
- package/dist/factories/mesh-factory.d.ts.map +1 -1
- package/package.json +1 -1
package/README.MD
CHANGED
|
@@ -1 +1,339 @@
|
|
|
1
|
-
|
|
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 is a TypeScript library that interacts with the Rave: Watch Party App API.</h2>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
## [README on English](https://github.com/thatcelt/ravejs/blob/master/README.MD)
|
|
13
|
+
## [README на Русском](https://github.com/thatcelt/ravejs/blob/master/README.RU.MD)
|
|
14
|
+
|
|
15
|
+
## Table of Contents
|
|
16
|
+
-----------------
|
|
17
|
+
|
|
18
|
+
* [Features](#features)
|
|
19
|
+
* [Getting Started](#getting-started)
|
|
20
|
+
* [Usage](#usage)
|
|
21
|
+
* [API Documentation](#api-documentation)
|
|
22
|
+
* [Contributing](#contributing)
|
|
23
|
+
* [License](#license)
|
|
24
|
+
|
|
25
|
+
## Features
|
|
26
|
+
--------
|
|
27
|
+
|
|
28
|
+
RaveJS contains a many features for example:
|
|
29
|
+
- Modular structure
|
|
30
|
+
- Easy to use
|
|
31
|
+
- Support any functions for using
|
|
32
|
+
- This is the first TypeScript library for this app
|
|
33
|
+
|
|
34
|
+
## Getting Started
|
|
35
|
+
---------------
|
|
36
|
+
|
|
37
|
+
To get started with RaveJS, follow these steps:
|
|
38
|
+
1. Initialize npm package: `npm init`
|
|
39
|
+
2. Install TypeScript: `npm i -g typescript`
|
|
40
|
+
3. Initialize TypeScript config and configure it: `tsc --init`
|
|
41
|
+
4. Install package via npm: `npm i ravejs`
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
-----
|
|
45
|
+
### Basic authorization
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { Rave } from 'ravejs';
|
|
49
|
+
|
|
50
|
+
(async () => {
|
|
51
|
+
const rave = new Rave({
|
|
52
|
+
credentials: {
|
|
53
|
+
deviceId: 'your_device_id',
|
|
54
|
+
token: 'your_token'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
console.log(`logged as ${(await rave.getAccount()).id}`);
|
|
58
|
+
})();
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
-----------------
|
|
63
|
+
|
|
64
|
+
### `Rave(config: RaveConfig)`
|
|
65
|
+
A main class to interacting with API in global namespace of app.
|
|
66
|
+
config - configuration for library, you can find it in `RaveConfig` type...
|
|
67
|
+
`RaveConfig` =>
|
|
68
|
+
* credentials?: { deviceId: string, token: string } - main credentials for authorization
|
|
69
|
+
* enableLogging?: boolean - enable logging for library
|
|
70
|
+
* account?: Account - Your user profile information after authorization
|
|
71
|
+
|
|
72
|
+
#### Rave Properties
|
|
73
|
+
|
|
74
|
+
1. `Rave.token: string` - Authorization bearer token
|
|
75
|
+
2. `Rave.JWT: string` - Authorization JWT token for we mesh API
|
|
76
|
+
3. `Rave.account: Account` - Your user profile information after authorization
|
|
77
|
+
4. `Rave.proxy: string | undefined` - Proxy for requests (you can set socks proxy with proxy property setter too)
|
|
78
|
+
|
|
79
|
+
#### Rave Methods
|
|
80
|
+
|
|
81
|
+
1. `refreshJWT = async (deviceId?: string): Promise<string>` - Refresh JWT token for we mesh API
|
|
82
|
+
2. `getAccount = async (): Promise<Account>` - Get your user profile information after authorization
|
|
83
|
+
|
|
84
|
+
-----------------
|
|
85
|
+
Rave haves the fully modular structure and parts called `Factories`. Now i will describe them:
|
|
86
|
+
|
|
87
|
+
### `AuthFactory`
|
|
88
|
+
The main factory for authorization and authentication. Can be called with `Rave.auth` property
|
|
89
|
+
|
|
90
|
+
#### Authenticate Factory methods
|
|
91
|
+
|
|
92
|
+
1. `sendMagicLink = async (email: string, language: string = DEFAULT_LANGUAGE): Promise<SendMagicLinkResponse> - Send magic link to email for authorization, if you doesn't know your credentials or just wanna register`
|
|
93
|
+
* DEFAULT_LANGUAGE = 'ru'
|
|
94
|
+
* SendMagicLinkResponse - { stateId: string } - stateId for magic link
|
|
95
|
+
|
|
96
|
+
2. `checkRegisterState = async (stateId: string): Promise<CheckRegisterStateResponse> - Check stateId for magic link`
|
|
97
|
+
* CheckRegisterStateResponse - {
|
|
98
|
+
authenticated: boolean,
|
|
99
|
+
isSecondFactorLogin: boolean,
|
|
100
|
+
oauth: {
|
|
101
|
+
accessToken: string,
|
|
102
|
+
idToken: string,
|
|
103
|
+
refreshToken: string,
|
|
104
|
+
expiresIn: string,
|
|
105
|
+
tokenType: string
|
|
106
|
+
},
|
|
107
|
+
user: {
|
|
108
|
+
createdAt: string,
|
|
109
|
+
updatedAt: string,
|
|
110
|
+
issuer: string
|
|
111
|
+
userId: string
|
|
112
|
+
identifier: string
|
|
113
|
+
email: string
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
3. `parseUserCredentials = async (idToken: string, email: string): Promise<ParseUserCredentialsResponse> - Parse user credentials from idToken and email`
|
|
118
|
+
* ParseUserCredentialsResponse - {
|
|
119
|
+
objectId: string,
|
|
120
|
+
createdAt: string,
|
|
121
|
+
username: string,
|
|
122
|
+
sessionToken: string,
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
4. `mojoLogin = async (email: string, parseId: string, parseToken: string, name: string, deviceId?: string, language = DEFAULT_LANGUAGE): Promise<MojoLoginResponse> - Login with mojo service to Rave`
|
|
126
|
+
* MojoLoginResponse - { data: {
|
|
127
|
+
isValid: boolean,
|
|
128
|
+
newUser: boolean,
|
|
129
|
+
suggestedHandles: string[],
|
|
130
|
+
}}
|
|
131
|
+
|
|
132
|
+
5. `login = async (stateId: string, name?: string, deviceId?: string, language = DEFAULT_LANGUAGE): Promise<AuthenticateResponse> - Simply summary of previous functions for login`
|
|
133
|
+
* AuthenticateResponse - {
|
|
134
|
+
isNewUser: boolean,
|
|
135
|
+
email: string,
|
|
136
|
+
username: string,
|
|
137
|
+
deviceId: string,
|
|
138
|
+
token: string,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
6. `register = async (email: string, name: string, deviceId?: string, language = DEFAULT_LANGUAGE): Promise<AuthenticateResponse> - Register a new user`
|
|
142
|
+
* RegisterResponse - {
|
|
143
|
+
isNewUser: boolean,
|
|
144
|
+
email: string,
|
|
145
|
+
username: string,
|
|
146
|
+
deviceId: string,
|
|
147
|
+
token: string,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
### `MeshFactory`
|
|
151
|
+
Factory for interacting with Meshes (rooms in Rave where you can watch videos). Can be called with `Rave.mesh` property
|
|
152
|
+
|
|
153
|
+
#### Mesh Factory methods
|
|
154
|
+
|
|
155
|
+
1. `get = async (meshId: string): Promise<GetMeshResponse>` - Get a mesh by its ID
|
|
156
|
+
* GetMeshResponse - {
|
|
157
|
+
data: {
|
|
158
|
+
blurT?: boolean,
|
|
159
|
+
category: string,
|
|
160
|
+
channel: number,
|
|
161
|
+
createdAt: string,
|
|
162
|
+
currentState: 'play' | 'paus',
|
|
163
|
+
explicit: boolean,
|
|
164
|
+
id: string,
|
|
165
|
+
isFriend: boolean,
|
|
166
|
+
isLocal: boolean,
|
|
167
|
+
isPublic: boolean,
|
|
168
|
+
kickMode: string,
|
|
169
|
+
maturity: string,
|
|
170
|
+
mediaUrl: string,
|
|
171
|
+
originator: number,
|
|
172
|
+
playMode: string,
|
|
173
|
+
position: number,
|
|
174
|
+
server: string,
|
|
175
|
+
shareLink: string,
|
|
176
|
+
thumbnails?: {
|
|
177
|
+
channel?: string,
|
|
178
|
+
standard?: string,
|
|
179
|
+
animated?: string,
|
|
180
|
+
maxres?: string,
|
|
181
|
+
medium?: string,
|
|
182
|
+
default?: string,
|
|
183
|
+
high?: string,
|
|
184
|
+
},
|
|
185
|
+
time: number,
|
|
186
|
+
videoAuthor: string,
|
|
187
|
+
videoDuration: number,
|
|
188
|
+
videoProvider: string,
|
|
189
|
+
videoPublishedAt: string,
|
|
190
|
+
videoThumbnail: string,
|
|
191
|
+
videoTitle: string,
|
|
192
|
+
videoUrl: string,
|
|
193
|
+
vikiPass: boolean,
|
|
194
|
+
voipMode: string,
|
|
195
|
+
users: {
|
|
196
|
+
avatar: string,
|
|
197
|
+
country: string,
|
|
198
|
+
displayName?: string,
|
|
199
|
+
handle?: string,
|
|
200
|
+
id: number,
|
|
201
|
+
lang?: string
|
|
202
|
+
lat: number,
|
|
203
|
+
lng: number,
|
|
204
|
+
name: string
|
|
205
|
+
}[]
|
|
206
|
+
},
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
2. `getByLink = async (meshLink: string): Promise<GetMeshResponse>` - Get a mesh by its link
|
|
210
|
+
|
|
211
|
+
3. `getMany = async (params: GetManyMeshesParams): Promise<GetManyMeshesResponse>` - Get multiple meshes from recently board
|
|
212
|
+
* GetManyMeshesParams - {
|
|
213
|
+
isPublic?: boolean,
|
|
214
|
+
limit: number,
|
|
215
|
+
hasFriends: boolean,
|
|
216
|
+
local: boolean,
|
|
217
|
+
hasInvited: boolean,
|
|
218
|
+
language?: string,
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
4. `join = async (meshId: string): Promise<MeshSocket>` - Join a mesh by its ID
|
|
222
|
+
* MeshSocket - special class for working with mesh socket workflow, events and unique methods. Will be described later
|
|
223
|
+
|
|
224
|
+
### `ThreadFactory`
|
|
225
|
+
Factory for interacting with threads (your chats with friends etc). Can be called with `Rave.thread` property
|
|
226
|
+
|
|
227
|
+
#### Thread Factory methods
|
|
228
|
+
|
|
229
|
+
1. `getMany = async (): Promise<Thread[]>` - Get all threads from your account
|
|
230
|
+
* Thread - {
|
|
231
|
+
expiryMode: number,
|
|
232
|
+
isFriend: boolean,
|
|
233
|
+
myself: number,
|
|
234
|
+
opposingUser: number,
|
|
235
|
+
spokenLangs: string[],
|
|
236
|
+
threadId: string,
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
2. `create = async (userId: number): Promise<Thread>` - Create a new thread with a user
|
|
240
|
+
|
|
241
|
+
3. `sendMessage async (threadId: string, content: string): Promise<SendMessageResponse>` - Send a message to a thread
|
|
242
|
+
* SendMessageResponse - {
|
|
243
|
+
data: {
|
|
244
|
+
correlateId: string,
|
|
245
|
+
threadId: string,
|
|
246
|
+
messageType: string,
|
|
247
|
+
originator: number,
|
|
248
|
+
messageBody: {
|
|
249
|
+
content: string,
|
|
250
|
+
detectedLang: string,
|
|
251
|
+
id: string,
|
|
252
|
+
translations: Record<string, string>,
|
|
253
|
+
},
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
### `UserFactory`
|
|
258
|
+
Factory for globally interacting with users from app. Can be called with `Rave.user` property
|
|
259
|
+
|
|
260
|
+
#### User Factory methods
|
|
261
|
+
|
|
262
|
+
1. `get = async (userId: number): Promise<GetUserResponse>` - Get user by id
|
|
263
|
+
* GetUserResponse - {
|
|
264
|
+
data: {
|
|
265
|
+
bio: {
|
|
266
|
+
bio?: string,
|
|
267
|
+
metadata: {
|
|
268
|
+
position: number,
|
|
269
|
+
privacy: string
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
profile: {
|
|
273
|
+
avatar: string,
|
|
274
|
+
country: string,
|
|
275
|
+
displayName?: string,
|
|
276
|
+
handle?: string,
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
2. `sendFriendship = async (userId: number): Promise<FriendshipResponse>` - Send a friendship request to a user
|
|
282
|
+
* FriendshipResponse - {
|
|
283
|
+
data: {
|
|
284
|
+
fromUserId: number,
|
|
285
|
+
state: string,
|
|
286
|
+
toUserId: number,
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
3. `acceptFriendship = async (userId: number): Promise<FriendshipResponse>` - Accept a friendship requests from a user
|
|
291
|
+
|
|
292
|
+
4. `declineFriendship = async (userId: number): Promise<FriendshipResponse>` - Decline a friendship request from a user
|
|
293
|
+
|
|
294
|
+
5. `edit = async (builder: EditProfileBuilder): Promise<EditProfileResponse>` - Edit user profile
|
|
295
|
+
* EditProfileBuilder - {
|
|
296
|
+
displayAvatar?: string,
|
|
297
|
+
displayName?: string,
|
|
298
|
+
handle?: string,
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
* EditProfileResponse - {
|
|
302
|
+
data: User
|
|
303
|
+
} - User Schema equals to previous `user` models
|
|
304
|
+
|
|
305
|
+
6. `getAvatarUpload = async (): Promise<GetAvatarUploadResponse>` - Get avatar upload url
|
|
306
|
+
* GetAvatarUploadResponse - {
|
|
307
|
+
data: {
|
|
308
|
+
expiresAt: string,
|
|
309
|
+
fileName: string,
|
|
310
|
+
mime: string,
|
|
311
|
+
uploadUrl: string,
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
7. `uploadOnUrl = async (uploadUrl: string, image: Buffer): Promise<any>` - Upload avatar on url
|
|
316
|
+
|
|
317
|
+
8. `uploadAvatar = async (image: Buffer): Promise<string>` - Fast using of `getAvatarUpload` and `uploadOnUrl`
|
|
318
|
+
|
|
319
|
+
### `MeshSocket`
|
|
320
|
+
The main class of opened mesh socket to interact with mesh
|
|
321
|
+
|
|
322
|
+
#### Mesh Socket methods
|
|
323
|
+
|
|
324
|
+
1. `onclose = (handler: () => Promise<void>)` - Register a handler to be called when the socket is closed
|
|
325
|
+
2. `onerror = (handler: () => Promise<void>)` - Register a handler to be called when the socket encounters an error
|
|
326
|
+
3. `onmessage = (handler: (data: string) => Promise<void>)` - Register a handler to be called when the socket receives a message
|
|
327
|
+
4. `sendMessage = (content: string): void` - Send a message to the mesh
|
|
328
|
+
5. `leave = (): void` - Leave the mesh
|
|
329
|
+
|
|
330
|
+
## Contributing
|
|
331
|
+
------------
|
|
332
|
+
|
|
333
|
+
Contributions are welcome! Please submit a pull request with your changes.
|
|
334
|
+
|
|
335
|
+
## License
|
|
336
|
+
-------
|
|
337
|
+
|
|
338
|
+
RaveJS is licensed under the MIT License. See LICENSE for more information.
|
|
339
|
+
If you're will use my generators - write about it to my [DM](https://t.me/celt_is_god)
|
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";
|
package/dist/constants.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
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,5 +11,6 @@ export declare class MeshSocket {
|
|
|
11
11
|
onerror: (handler: () => Promise<void>) => void;
|
|
12
12
|
onmessage: (handler: (data: string) => Promise<void>) => void;
|
|
13
13
|
sendMessage: (content: string) => void;
|
|
14
|
+
leave: () => void;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=mesh-socket.d.ts.map
|
|
@@ -1 +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;CACH"}
|
|
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"}
|
package/dist/core/mesh-socket.js
CHANGED
|
@@ -53,6 +53,9 @@ class MeshSocket {
|
|
|
53
53
|
notification: true,
|
|
54
54
|
}));
|
|
55
55
|
};
|
|
56
|
+
this.leave = () => {
|
|
57
|
+
this.__websocket.close();
|
|
58
|
+
};
|
|
56
59
|
this.__config = config;
|
|
57
60
|
this.__url = `wss://${this.__config.server}/?roomId=${this.__config.meshId}&peerId=${this.__config.userId}_${this.__config.credentials.deviceId}`;
|
|
58
61
|
this.__websocket = new ws_1.WebSocket(this.__url, 'protoo', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-factory.d.ts","sourceRoot":"","sources":["../../src/factories/mesh-factory.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,qBAAqB,EAErB,eAAe,EAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,UAAU,YAAK,EAAE,IAAI,EAAE,YAAY;IAKhD,GAAG,WAAkB,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC,CAO3D;IAEK,SAAS,aAAoB,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC,CAYnE;IAEK,OAAO,YACJ,mBAAmB,KAK1B,OAAO,CAAC,qBAAqB,CAAC,CAO/B;IAEK,IAAI,WAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"mesh-factory.d.ts","sourceRoot":"","sources":["../../src/factories/mesh-factory.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,qBAAqB,EAErB,eAAe,EAIhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,UAAU,YAAK,EAAE,IAAI,EAAE,YAAY;IAKhD,GAAG,WAAkB,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC,CAO3D;IAEK,SAAS,aAAoB,MAAM,KAAG,OAAO,CAAC,eAAe,CAAC,CAYnE;IAEK,OAAO,YACJ,mBAAmB,KAK1B,OAAO,CAAC,qBAAqB,CAAC,CAO/B;IAEK,IAAI,WAAkB,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC,CAyCvD;CACH"}
|