vkpl-server-client
v0.1.3
Published
Библиотека для взаимодействия с VK Play Live DevApi
Downloads
4
Readme
VKPL Клиент для DevApi (Сервер)
Эта библиотека в данный момент предоставляет методы для упрощения авторизации в DevApi VKPL
Также реализован набор классов событий WebHook
О классах
Класс авторизации (VkplAuth)
Класс имеет два статических метода
- redirectToAuthCode - для генерации ссылки перенаправления на окно авторизации
- codeFlowAuth - обмен
code
полученного после перенаправления из окна авторизации или обменrefresh_token
на новые токены авторизации
redirectToAuthCode(scope = [], state = "")
Принимает на вход:
scope
- массив строк scope, которые есть в документацииstate
- произвольная строка, которая будет возвращена вместе сcode
после авторизации
Возвращает URL строку со всеми необходимыми параметрами https://....
async codeFlowAuth(type, codeOrToken)
Принимает на вход:
type
- может быть"auth"
или"refresh"
"auth"
- для первичной авторизации используяcode
"refresh"
- для обновления токенов используяrefresh_token
codeOrToken
- передайте сюда либоcode
, либоrefresh_token
Возвращает объект в соответствии с документацией
Класс WebHook (VkplWH)
- Автоматически анализирует сигнатуру (
signature
) - Предоставляет стандартную структуру для ответов на хук
- Выбрасывает исключение при:
- отсутствии ключевых свойств
- ошибке парсинга
- недействительной подписи запроса
- При исключении в
error
есть свойствоanswer
, которое следует отправить в ответ на хук ('invalid_signature'
|'unprocessable'
)
При успешном анализе хука класс имеет структуру:
| Свойство | Тип | Описание | |---|---|---| | id | String | Getter Идентификатор события | | time | Date | Getter Время события | | userId | Number | Getter Идентификатор пользователя VK Play Live | | type | ENUM('channel_stream_start','channel_stream_pause','channel_stream_resume','channel_stream_stop','channel_stream_settings_change','channel_stream_record_new','channel_points_reward_demand_create','raid_start','channel_subscription_create','channel_subscription_renew','channel_subscription_change','channel_subscription_delete','channel_follow_create','channel_follow_delete','channel_subscription_gift_buy','channel_subscription_gift_give') | Getter Тип события | | hook | ENUM(ChannelStreamStart,ChannelStreamPause,ChannelStreamResume,ChannelStreamStop,ChannelStreamSettingsChange,ChannelStreamRecordNew,ChannelPointsRewardDemandCreate,RaidStart,ChannelSubscriptionCreate,ChannelSubscriptionRenew,ChannelSubscriptionChange,ChannelSubscriptionDelete,ChannelFollowCreate,ChannelFollowDelete,ChannelSubscriptionGiftBuy,ChannelSubscriptionGiftGive) | Один из классов события основанный на полезной нагрузке | | data | Object | Getter Полезная нагрузка события | | ok | Object | Getter Структура для ответа на хук | | alreadyProcessed | Object | Getter Структура для ответа на хук | | notLinked | Object | Getter Структура для ответа на хук | | invalidSignature | Object | Getter Структура для ответа на хук | | unprocessable | Object | Getter Структура для ответа на хук | | body | Object | Исходные данные |
Необходимые переменные окружения (env)
Переменные можно добавить как через пакет dotenv, так и указанием при запуске сервера, главное их наличие в process.env
| Имя | Описание |
|---|---|
| APP_HOST | Ссылка на корень сайтаПример https://domain.com
|
| VKPL_AUTH_REDIRECT_PATH | Путь от адреса для редиректа авторизации, который указывался при регистрации приложенияПример /auth/vkpl
|
| VKPL_ID | client_id |
| VKPL_SECRET | client_secret |
| VKPL_SIGNATURE_KEY | signature_key |
Пример использования на основе expressjs
require("dotenv").config();
const { VkplAuth, VkplWH } = require("vkpl-server-client");
const express = require("express");
const app = express();
const urlencoded = express.urlencoded({ extended: true });
const port = 3000;
app.use(urlencoded);
app.get("/vkpl", (req, res) => {
res.redirect(
VkplAuth.redirectToAuthCode([
"chat:message:send",
"chat:settings",
"channel:points:rewards",
"channel:points"
])
);
});
app.get("/auth/vkpl", async (req, res) => {
try {
const tokens = await VkplAuth.codeFlowAuth("auth", req.query.code);
console.log(tokens)
res.status(200).send('ok');
} catch (error) {
res.status(500).send(error);
}
});
app.post("/webhook", (req, res) => {
try {
const webhook = new VkplWH(req.body);
console.log('Id --> ' + webhook.id);
console.log('Time --> ' + webhook.time);
console.log('User Id --> ' + webhook.userId);
console.log('Type --> ' + webhook.type);
console.log('')
console.log('Data --> ', webhook.data);
console.log('')
console.log('All --> ', webhook.event);
console.log('');
console.log('Hook --> ', webhook.hook);
res.json(webhook.ok);
} catch (error) {
console.error(error);
res.json(error.answer);
}
});
app.listen(port, () => {
console.log("App listen " + process.env.APP_HOST);
});