@pushler/js 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 +243 -0
- package/dist/pushler-ru.esm.js +1233 -0
- package/dist/pushler-ru.esm.js.map +1 -0
- package/dist/pushler-ru.js +1253 -0
- package/dist/pushler-ru.js.map +1 -0
- package/dist/pushler-ru.min.js +2 -0
- package/dist/pushler-ru.min.js.map +1 -0
- package/package.json +48 -0
- package/src/Channel.js +142 -0
- package/src/PushlerClient.js +605 -0
- package/src/PushlerServer.js +403 -0
- package/src/constants.js +51 -0
- package/src/index.js +24 -0
- package/src/utils.js +74 -0
package/README.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# @pushler/js
|
|
2
|
+
|
|
3
|
+
JavaScript SDK для [Pushler.ru](https://pushler.ru) — сервиса real-time сообщений через WebSocket.
|
|
4
|
+
|
|
5
|
+
## Установка
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @pushler/js
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Или через CDN:
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<script src="https://cdn.jsdelivr.net/npm/@pushler/js/dist/pushler-ru.min.js"></script>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Быстрый старт
|
|
18
|
+
|
|
19
|
+
### Браузер (WebSocket клиент)
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
import Pushler from '@pushler/js';
|
|
23
|
+
|
|
24
|
+
// Создание клиента
|
|
25
|
+
const pushler = Pushler.Create({
|
|
26
|
+
appKey: 'your-app-key',
|
|
27
|
+
wsUrl: 'wss://pushler.ru/ws',
|
|
28
|
+
apiUrl: 'https://api.pushler.ru'
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Обработка событий подключения
|
|
32
|
+
pushler.on('connected', ({ socketId }) => {
|
|
33
|
+
console.log('Подключено! Socket ID:', socketId);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
pushler.on('error', (error) => {
|
|
37
|
+
console.error('Ошибка:', error.message);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Подписка на публичный канал
|
|
41
|
+
const channel = pushler.subscribe('my-channel');
|
|
42
|
+
|
|
43
|
+
channel.on('channel_subscribed', () => {
|
|
44
|
+
console.log('Подписка успешна!');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Получение сообщений
|
|
48
|
+
channel.on('new-message', (data) => {
|
|
49
|
+
console.log('Новое сообщение:', data);
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Node.js (Серверный SDK)
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
import Pushler from '@pushler/js';
|
|
57
|
+
|
|
58
|
+
// Создание серверного клиента
|
|
59
|
+
const server = Pushler.Server({
|
|
60
|
+
appKey: 'your-app-key',
|
|
61
|
+
appSecret: 'your-app-secret',
|
|
62
|
+
apiUrl: 'https://api.pushler.ru'
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Отправка сообщения в канал
|
|
66
|
+
await server.trigger('my-channel', 'new-message', {
|
|
67
|
+
text: 'Привет, мир!',
|
|
68
|
+
timestamp: Date.now()
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Отправка в несколько каналов
|
|
72
|
+
await server.trigger(
|
|
73
|
+
['channel-1', 'channel-2'],
|
|
74
|
+
'notification',
|
|
75
|
+
{ message: 'Важное уведомление!' }
|
|
76
|
+
);
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## API
|
|
80
|
+
|
|
81
|
+
### PushlerClient (браузер)
|
|
82
|
+
|
|
83
|
+
#### Создание клиента
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
const pushler = Pushler.Create({
|
|
87
|
+
appKey: 'your-app-key', // Обязательно
|
|
88
|
+
wsUrl: 'wss://pushler.ru/ws', // URL WebSocket сервера
|
|
89
|
+
apiUrl: 'https://api.pushler.ru', // URL API сервера
|
|
90
|
+
authEndpoint: '/pushler/auth', // Путь для авторизации приватных каналов
|
|
91
|
+
autoConnect: true, // Автоподключение (по умолчанию: true)
|
|
92
|
+
reconnectDelay: 1000, // Задержка переподключения (мс)
|
|
93
|
+
maxReconnectAttempts: 5 // Максимум попыток переподключения
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### Методы
|
|
98
|
+
|
|
99
|
+
| Метод | Описание |
|
|
100
|
+
|-------|----------|
|
|
101
|
+
| `connect()` | Подключиться к серверу |
|
|
102
|
+
| `disconnect()` | Отключиться от сервера |
|
|
103
|
+
| `subscribe(channelName, options?)` | Подписаться на канал |
|
|
104
|
+
| `unsubscribe(channelName)` | Отписаться от канала |
|
|
105
|
+
| `channel(channelName)` | Получить объект канала |
|
|
106
|
+
| `getChannels()` | Список подписанных каналов |
|
|
107
|
+
| `getConnectionState()` | Текущее состояние подключения |
|
|
108
|
+
|
|
109
|
+
#### События
|
|
110
|
+
|
|
111
|
+
| Событие | Данные | Описание |
|
|
112
|
+
|---------|--------|----------|
|
|
113
|
+
| `connected` | `{ socketId }` | Подключение установлено |
|
|
114
|
+
| `disconnected` | `event` | Подключение разорвано |
|
|
115
|
+
| `connection_state_changed` | `state` | Изменение состояния |
|
|
116
|
+
| `error` | `{ code, message }` | Ошибка |
|
|
117
|
+
| `message_received` | `{ channel, event, data }` | Получено сообщение |
|
|
118
|
+
|
|
119
|
+
### Channel (канал)
|
|
120
|
+
|
|
121
|
+
#### Методы
|
|
122
|
+
|
|
123
|
+
| Метод | Описание |
|
|
124
|
+
|-------|----------|
|
|
125
|
+
| `on(event, callback)` | Подписка на событие |
|
|
126
|
+
| `off(event, callback)` | Отписка от события |
|
|
127
|
+
| `unsubscribe()` | Отписаться от канала |
|
|
128
|
+
| `isSubscribed()` | Проверка подписки |
|
|
129
|
+
| `getType()` | Тип канала (public/private/presence) |
|
|
130
|
+
|
|
131
|
+
### PushlerServer (Node.js)
|
|
132
|
+
|
|
133
|
+
#### Создание сервера
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
const server = Pushler.Server({
|
|
137
|
+
appKey: 'your-app-key', // Обязательно
|
|
138
|
+
appSecret: 'your-app-secret', // Обязательно
|
|
139
|
+
apiUrl: 'https://api.pushler.ru', // URL API
|
|
140
|
+
timeout: 30000 // Таймаут запросов (мс)
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Методы
|
|
145
|
+
|
|
146
|
+
| Метод | Описание |
|
|
147
|
+
|-------|----------|
|
|
148
|
+
| `trigger(channels, event, data, socketId?)` | Отправить событие в канал(ы) |
|
|
149
|
+
| `authorizeChannel(channelName, socketId)` | Авторизация приватного канала |
|
|
150
|
+
| `authorizePresenceChannel(channelName, socketId, userData)` | Авторизация presence канала |
|
|
151
|
+
| `verifyWebhook(headers, body)` | Проверка подписи вебхука |
|
|
152
|
+
| `getMessageStatus(messageId)` | Статус сообщения |
|
|
153
|
+
| `getMessages(params?)` | Список сообщений |
|
|
154
|
+
|
|
155
|
+
## Типы каналов
|
|
156
|
+
|
|
157
|
+
### Публичные каналы
|
|
158
|
+
|
|
159
|
+
Доступны всем без авторизации:
|
|
160
|
+
|
|
161
|
+
```javascript
|
|
162
|
+
const channel = pushler.subscribe('news');
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Приватные каналы
|
|
166
|
+
|
|
167
|
+
Требуют авторизации на вашем сервере:
|
|
168
|
+
|
|
169
|
+
```javascript
|
|
170
|
+
const channel = pushler.subscribe('private-user-123');
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Presence каналы
|
|
174
|
+
|
|
175
|
+
Для отслеживания онлайн-пользователей:
|
|
176
|
+
|
|
177
|
+
```javascript
|
|
178
|
+
const channel = pushler.subscribe('presence-room-1', {
|
|
179
|
+
user: { id: 'user-123', name: 'Иван' }
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Авторизация каналов
|
|
184
|
+
|
|
185
|
+
Для приватных и presence каналов настройте endpoint авторизации на вашем сервере:
|
|
186
|
+
|
|
187
|
+
```javascript
|
|
188
|
+
// Express.js пример
|
|
189
|
+
app.post('/pushler/auth', (req, res) => {
|
|
190
|
+
const { channel_name, socket_id, app_key, user_data } = req.body;
|
|
191
|
+
|
|
192
|
+
// Проверьте права пользователя на доступ к каналу
|
|
193
|
+
const server = Pushler.Server({
|
|
194
|
+
appKey: process.env.PUSHLER_KEY,
|
|
195
|
+
appSecret: process.env.PUSHLER_SECRET
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
if (channel_name.startsWith('presence-')) {
|
|
199
|
+
const auth = server.authorizePresenceChannel(channel_name, socket_id, user_data);
|
|
200
|
+
res.json(auth);
|
|
201
|
+
} else {
|
|
202
|
+
const auth = server.authorizeChannel(channel_name, socket_id);
|
|
203
|
+
res.json(auth);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Вебхуки
|
|
209
|
+
|
|
210
|
+
Проверка подписи входящих вебхуков:
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
app.post('/webhooks/pushler', (req, res) => {
|
|
214
|
+
try {
|
|
215
|
+
const data = server.verifyWebhook(req.headers, req.rawBody);
|
|
216
|
+
console.log('Получен вебхук:', data);
|
|
217
|
+
res.sendStatus(200);
|
|
218
|
+
} catch (error) {
|
|
219
|
+
console.error('Невалидный вебхук:', error);
|
|
220
|
+
res.sendStatus(403);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Примеры
|
|
226
|
+
|
|
227
|
+
Смотрите папку `examples/` для полных примеров:
|
|
228
|
+
|
|
229
|
+
- `basic.html` — базовый пример в браузере
|
|
230
|
+
- `advanced.html` — продвинутый пример с приватными каналами
|
|
231
|
+
- `send-message.mjs` — отправка сообщений из Node.js
|
|
232
|
+
- `auth-channel.mjs` — авторизация каналов
|
|
233
|
+
|
|
234
|
+
## Поддержка браузеров
|
|
235
|
+
|
|
236
|
+
- Chrome 49+
|
|
237
|
+
- Firefox 52+
|
|
238
|
+
- Safari 10+
|
|
239
|
+
- Edge 14+
|
|
240
|
+
|
|
241
|
+
## Лицензия
|
|
242
|
+
|
|
243
|
+
MIT © [Pushler.ru](https://pushler.ru)
|