node-vkcoinapi
Advanced tools
Comparing version 1.6.1 to 1.7.0
68
index.js
@@ -183,3 +183,3 @@ const WebSocket = require('ws'); | ||
); | ||
if (result.response === 'ON') { | ||
@@ -213,2 +213,33 @@ this.app.use( | ||
} | ||
/** | ||
* Возвращает middleware для Express | ||
* @param {String} [path] Путь для запросов | ||
*/ | ||
getExpressMiddleware(path = null) { | ||
this.isStarted = true; | ||
return async (req, res, next) => { | ||
res.sendStatus(200); | ||
if ( | ||
path !== null && ( | ||
req.path !== path || | ||
req.method !== 'POST' | ||
) | ||
) { | ||
return next(); | ||
} | ||
if (!req.body || typeof req.body !== 'object') { | ||
throw new ReferenceError( | ||
'Не удалось получить `Request.body`' | ||
); | ||
} | ||
this.transferHandler(req.body); | ||
next(); | ||
}; | ||
} | ||
} | ||
@@ -424,2 +455,37 @@ | ||
/** | ||
* Изменяет адрес для получения событий | ||
* @param {String} callback Адрес для получения событий | ||
*/ | ||
async setCallback(callback) { | ||
if (!callback) { | ||
throw new ParameterError('callback'); | ||
} | ||
const result = await request( | ||
'https://coin-without-bugs.vkforms.ru/merchant/set/', | ||
{ | ||
callback, | ||
key: this.key, | ||
merchantId: this.userId, | ||
} | ||
); | ||
if (result.error) { | ||
const { code, message } = result.error; | ||
throw new APIError({ | ||
code, message | ||
}); | ||
} | ||
return result.response; | ||
} | ||
/** | ||
* Удаляет адрес для получения событий | ||
*/ | ||
removeCallback() { | ||
return this.setCallback(null); | ||
} | ||
/** | ||
* @param {Number} coins - Входящее значение коинов | ||
@@ -426,0 +492,0 @@ * @description |
{ | ||
"name": "node-vkcoinapi", | ||
"version": "1.6.1", | ||
"version": "1.7.0", | ||
"description": "Работа с API VK Coin", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
100
README.md
@@ -210,6 +210,36 @@ # node-vkcoinapi | ||
|name|String|Новое имя для магазина| | ||
# | ||
setCallback - Изменяет адрес для получения событий | ||
```js | ||
async function run() { | ||
const result = await vkcoin.api.setCallback(callback); | ||
console.log(result); | ||
} | ||
run().catch(console.error); | ||
``` | ||
|Параметр|Тип|Описание| | ||
|-|-|-| | ||
|callback|String|Новый адрес с указанием пути| | ||
# | ||
removeCallback - Удаляет адрес для получения событий | ||
```js | ||
async function run() { | ||
const result = await vkcoin.api.removeCallback(); | ||
console.log(result); | ||
} | ||
run().catch(console.error); | ||
``` | ||
Параметров не принимает | ||
# Updates | ||
**updates** - Позволяет "прослушивать" события в VK Coin. Пока что я реализовал перехват входящего платежа, но вскоре придумаю что-нибудь ещё. И да, впервые работаю с сокетами :) | ||
### Запуск | ||
Для запуска прослушивания есть 2 метода: startPolling и startWebHook | ||
Для запуска прослушивания есть 3 способа. Longpoll, webhook и отдельный middleware для Express | ||
# | ||
@@ -268,6 +298,46 @@ startPolling - Запускает обмен запросами между клиентом и сервером в режиме реального времени (WebSocket). Является лучшим и быстрым способом получения событий: | ||
При использовании startWebHook, вы лишаетесь многого: получение топов, места, онлайна и информации об объёме рынка. Всё это можно получить при использовании startPolling | ||
# | ||
getExpressMiddleware - Получает функцию цепи middleware для Express. | ||
Перед использованием этого способа, нужно указать VKCOIN'у адрес для получения событий **с указанием пути**: | ||
```js | ||
vkcoin.api.setCallback('http://my-address.ru/vkcoin'); | ||
``` | ||
Дальше уже можно использовать | ||
```js | ||
const express = require('express'); | ||
const app = express(); | ||
/** | ||
* Это действие нужно обязательно | ||
* Нужно для получения тела запроса | ||
*/ | ||
app.use(express.json()); | ||
// Дальше есть два варианта развития событий | ||
// 1: Добавление функции в цепь middleware | ||
app.use( | ||
vkcoin.updates.getExpressMiddleware('/vkcoin') | ||
); | ||
// 2: Или определить функцию на свой роут | ||
app.post( | ||
'/vkcoin', | ||
vkcoin.updates.getExpressMiddleware() | ||
); | ||
// Выбирайте на свой вкус :) | ||
/* Тут ваши действия со слушателем */ | ||
``` | ||
### События | ||
updates.onTransfer - Перехватывает входящие платежи, принимает один аргумент | ||
**Метод ```updates.onTransfer``` нужно писать после ```updates.startPolling``` или ```updates.startWebHook```, иначе у вас ничего не сработает** | ||
**Метод ```updates.onTransfer``` нужно писать после ```updates.startPolling```, ```updates.startWebHook``` или ```app.use(updates.getExpressMiddleware('/'))```, иначе у вас ничего не сработает** | ||
@@ -285,12 +355,2 @@ ```js | ||
```js | ||
vkcoin.updates.startPolling(console.log).then(() => { | ||
vkcoin.updates.onTransfer((event) => { | ||
console.log(event); | ||
}); | ||
}); | ||
``` | ||
Или | ||
```js | ||
vkcoin.updates.startWebHook({ | ||
@@ -307,2 +367,18 @@ url: '123.123.123.123', // Тут ваша ссылка или IP-адрес сервера | ||
Или | ||
```js | ||
async function run() { | ||
await vkcoin.api.setCallback('http://my-address.ru/vkcoin'); | ||
app.use( | ||
vkcoin.updates.getExpressMiddleware('/vkcoin') | ||
) | ||
vkcoin.updates.onTransfer((event) => { | ||
console.log(event); | ||
}); | ||
} | ||
``` | ||
event - Объект, который хранит в себе информацию о платеже: | ||
@@ -309,0 +385,0 @@ |
@@ -35,2 +35,8 @@ import * as Responses from './responses'; | ||
/** | ||
* Возвращает middleware для Express | ||
* @param path Путь для запросов | ||
*/ | ||
getExpressMiddleware(path?: string): Function; | ||
/** | ||
* | ||
@@ -98,2 +104,13 @@ * @param callback Функция, принимающая данные перевода | ||
getLink(amount: number, fixation: boolean): string; | ||
/** | ||
* Изменяет адрес для получения событий | ||
* @param {String} callback Адрес для получения событий | ||
*/ | ||
setCallback(callback: string): Promise<string>; | ||
/** | ||
* Удаляет адрес для получения событий | ||
*/ | ||
removeCallback(): Promise<string>; | ||
} | ||
@@ -100,0 +117,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
54695
873
486