Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

yoomoney-sdk

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

yoomoney-sdk - npm Package Compare versions

Comparing version 1.0.3 to 1.0.5

dist/shared.types.d.ts

65

dist/api.d.ts
import type * as t from "./api.types";
import { QueryStringifiable } from "./fetch";
import { AnyRecord } from "./shared.types";
/**
* Ошибка, которую выбрасывает API при ошибочном ответе от сервера
*/
export declare class YMApiError extends Error {
response: any;
response: AnyRecord;
code: string;
constructor(response: any);
/**
* Объект ответа
* @param {AnyRecord} response
*/
constructor(response: AnyRecord);
}
/**
* Имплементирует [основное API YooMoney](https://yoomoney.ru/docs/wallet)
*
* @see {@link https://yoomoney.ru/docs/wallet|Описание}
*/
export declare class API {
readonly token: string;
readonly endpoint: string;
/**
*
* @param {string} token Токен авторизации пользователя
* @param {string} endpoint
*/
constructor(token: string, endpoint?: string);
call(method: string, params: QueryStringifiable): Promise<any>;
/**
* Позволяет совершить вызов произвольного метода API
*
* @template T
* @param {string} method Название метода
* @param {QueryStringifiable} parameters Параметры метода
*
* @return {Promise<T>}
*/
call<T = any>(method: string, parameters: QueryStringifiable): Promise<T>;
/**
* Получение информации о состоянии счета пользователя.
*
* Требуемые права токена: `account-info`.
*
* @return {t.AccountInfoResponse}
*/

@@ -23,4 +52,7 @@ accountInfo(): Promise<t.AccountInfoResponse>;

* Требуемые права токена: `operation-history`.
*
* @param {t.OperationHistoryParams=} parameters Параметры вызова
* @return {Promise<t.OperationHistoryResponse>}
*/
operationHistory(params?: t.OperationHistoryParams): Promise<t.OperationHistoryResponse>;
operationHistory(parameters?: t.OperationHistoryParams): Promise<t.OperationHistoryResponse>;
/**

@@ -30,4 +62,7 @@ * Позволяет получить детальную информацию об операции из истории.

* Требуемые права токена: `operation-details`.
*
* @param {t.OperationDetailsParams=} parameters Параметры вызова
* @return {Promise<t.Operation>}
*/
operationDetails(params: t.OperationDetailsParams): Promise<t.Operation>;
operationDetails(parameters: t.OperationDetailsParams): Promise<t.Operation>;
/**

@@ -39,8 +74,14 @@ * Создание платежа, проверка параметров и возможности приема платежа магазином или перевода средств на счет пользователя ЮMoney.

* - для перевода средств на счета других пользователей: `payment.to-account` («идентификатор получателя», «тип идентификатора») или `payment-p2p`.
*
* @param {t.RequestPaymentParams=} parameters Параметры вызова
* @return {Promise<t.RequestPaymentResponse>}
*/
requestPayment(params: t.RequestPaymentParams): Promise<t.RequestPaymentResponse>;
requestPayment(parameters: t.RequestPaymentParams): Promise<t.RequestPaymentResponse>;
/**
* Подтверждение платежа, ранее созданного методом [request-payment](https://yoomoney.ru/docs/wallet/process-payments/request-payment). Указание метода проведения платежа.
*
* @param {t.ProcessPaymentParams=} parameters Параметры вызова
* @return {Promise<t.ProcessPaymentResponse>}
*/
processPayment(params: t.ProcessPaymentParams): Promise<t.ProcessPaymentResponse>;
processPayment(parameters: t.ProcessPaymentParams): Promise<t.ProcessPaymentResponse>;
/**

@@ -52,4 +93,7 @@ * Прием входящих переводов, защищенных кодом протекции, и переводов до востребования.

* Требуемые права токена: `incoming-transfers`
*
* @param {t.IncomingTransferAcceptParams=} parameters Параметры вызова
* @return {Promise<t.IncomingTransferAcceptResponse>}
*/
incomingTransferAccept(params: t.IncomingTransferAcceptParams): Promise<t.IncomingTransferAcceptResponse>;
incomingTransferAccept(parameters: t.IncomingTransferAcceptParams): Promise<t.IncomingTransferAcceptResponse>;
/**

@@ -59,4 +103,7 @@ * Отмена входящих переводов, защищенных кодом протекции, и переводов до востребования. При отмене перевода он возвращается отправителю.

* Требуемые права токена: `incoming-transfers`
*
* @param {t.IncomingTransferRejectParams=} parameters Параметры вызова
* @return {Promise<t.IncomingTransferRejectResponse>}
*/
incomingTransferReject(params: t.IncomingTransferRejectParams): Promise<t.IncomingTransferRejectResponse>;
incomingTransferReject(parameters: t.IncomingTransferRejectParams): Promise<t.IncomingTransferRejectResponse>;
}

80

dist/api.js

@@ -5,11 +5,28 @@ "use strict";

const fetch_1 = require("./fetch");
/**
* Ошибка, которую выбрасывает API при ошибочном ответе от сервера
*/
class YMApiError extends Error {
/**
* Объект ответа
* @param {AnyRecord} response
*/
constructor(response) {
super(`API returned error code: ${response.error}`);
super(`API returned error code: ${response["error"]}`);
this.response = response;
this.code = response.error;
this.code = response["error"];
}
}
exports.YMApiError = YMApiError;
/**
* Имплементирует [основное API YooMoney](https://yoomoney.ru/docs/wallet)
*
* @see {@link https://yoomoney.ru/docs/wallet|Описание}
*/
class API {
/**
*
* @param {string} token Токен авторизации пользователя
* @param {string} endpoint
*/
constructor(token, endpoint = "https://yoomoney.ru/api") {

@@ -19,5 +36,14 @@ this.token = token;

}
async call(method, params) {
const response = await fetch_1.fetch(`${this.endpoint}/${method}`, params, {
Authorization: `Bearer ${this.token}`,
/**
* Позволяет совершить вызов произвольного метода API
*
* @template T
* @param {string} method Название метода
* @param {QueryStringifiable} parameters Параметры метода
*
* @return {Promise<T>}
*/
async call(method, parameters) {
const response = await fetch_1.fetch(`${this.endpoint}/${method}`, parameters, {
Authorization: `Bearer ${this.token}`
});

@@ -33,2 +59,4 @@ const data = await response.json();

* Требуемые права токена: `account-info`.
*
* @return {t.AccountInfoResponse}
*/

@@ -42,5 +70,8 @@ async accountInfo() {

* Требуемые права токена: `operation-history`.
*
* @param {t.OperationHistoryParams=} parameters Параметры вызова
* @return {Promise<t.OperationHistoryResponse>}
*/
async operationHistory(params = {}) {
return await this.call("operation-history", params);
async operationHistory(parameters = {}) {
return await this.call("operation-history", parameters);
}

@@ -51,5 +82,8 @@ /**

* Требуемые права токена: `operation-details`.
*
* @param {t.OperationDetailsParams=} parameters Параметры вызова
* @return {Promise<t.Operation>}
*/
async operationDetails(params) {
return await this.call("operation-history", params);
async operationDetails(parameters) {
return await this.call("operation-history", parameters);
}

@@ -62,11 +96,17 @@ /**

* - для перевода средств на счета других пользователей: `payment.to-account` («идентификатор получателя», «тип идентификатора») или `payment-p2p`.
*
* @param {t.RequestPaymentParams=} parameters Параметры вызова
* @return {Promise<t.RequestPaymentResponse>}
*/
async requestPayment(params) {
return await this.call("request-payment", params);
async requestPayment(parameters) {
return await this.call("request-payment", parameters);
}
/**
* Подтверждение платежа, ранее созданного методом [request-payment](https://yoomoney.ru/docs/wallet/process-payments/request-payment). Указание метода проведения платежа.
*
* @param {t.ProcessPaymentParams=} parameters Параметры вызова
* @return {Promise<t.ProcessPaymentResponse>}
*/
async processPayment(params) {
return await this.call("process-payment", params);
async processPayment(parameters) {
return await this.call("process-payment", parameters);
}

@@ -79,5 +119,8 @@ /**

* Требуемые права токена: `incoming-transfers`
*
* @param {t.IncomingTransferAcceptParams=} parameters Параметры вызова
* @return {Promise<t.IncomingTransferAcceptResponse>}
*/
async incomingTransferAccept(params) {
return await this.call("incoming-transfer-accept", params);
async incomingTransferAccept(parameters) {
return await this.call("incoming-transfer-accept", parameters);
}

@@ -88,7 +131,10 @@ /**

* Требуемые права токена: `incoming-transfers`
*
* @param {t.IncomingTransferRejectParams=} parameters Параметры вызова
* @return {Promise<t.IncomingTransferRejectResponse>}
*/
async incomingTransferReject(params) {
return await this.call("incoming-transfer-accept", params);
async incomingTransferReject(parameters) {
return await this.call("incoming-transfer-accept", parameters);
}
}
exports.API = API;
"use strict";
/* eslint-disable unicorn/prevent-abbreviations */
/* eslint-disable camelcase */
Object.defineProperty(exports, "__esModule", { value: true });
declare type AuthScope = "account-info" | "operation-history" | "operation-details" | "incoming-transfers" | "payment" | "payment-shop" | "payment-p2p" | "money-source";
/**
* Ошибка в процессе авторизации
*/
export declare class YMAuthError extends Error {
code: string;
/**
*
* @param {string} code Код ошибки
*/
constructor(code: string);
}
/**
* Реализует всё необходимое для [авторизации через YooMoney](https://yoomoney.ru/docs/wallet/using-api/authorization/basics)
*
* @see {@link https://yoomoney.ru/docs/wallet/using-api/authorization/basics|Описание протокола}
*/
export declare class Auth {

@@ -11,6 +23,25 @@ readonly clientId: string;

readonly endpoint: string;
/**
*
* @param {string} clientId ID приложения
* @param {string} redirectUrl URL-перенаправления
* @param {string=} clientSecret Секретное Слово
* @param {string=} endpoint
*/
constructor(clientId: string, redirectUrl: string, clientSecret?: string | undefined, endpoint?: string);
/**
* Генерирует html-форму перенаправления пользователя на авторизацию
*
* @param {AuthScope[]} scopes
* @param {string=} instanceName
* @return {string}
*/
getAuthForm(scopes: AuthScope[], instanceName?: string): string;
/**
*
* @param {string} code Временный токен (authorization code), подлежащий обмену на постоянный токен авторизации
* @return {Promise<string>} Токен авторизации
*/
exchangeCode2Token(code: string): Promise<string>;
}
export {};

@@ -6,3 +6,10 @@ "use strict";

const fetch_1 = require("./fetch");
/**
* Ошибка в процессе авторизации
*/
class YMAuthError extends Error {
/**
*
* @param {string} code Код ошибки
*/
constructor(code) {

@@ -14,3 +21,15 @@ super(`API returned error: ${code}`);

exports.YMAuthError = YMAuthError;
/**
* Реализует всё необходимое для [авторизации через YooMoney](https://yoomoney.ru/docs/wallet/using-api/authorization/basics)
*
* @see {@link https://yoomoney.ru/docs/wallet/using-api/authorization/basics|Описание протокола}
*/
class Auth {
/**
*
* @param {string} clientId ID приложения
* @param {string} redirectUrl URL-перенаправления
* @param {string=} clientSecret Секретное Слово
* @param {string=} endpoint
*/
constructor(clientId, redirectUrl, clientSecret, endpoint = "https://yoomoney.ru/oauth") {

@@ -22,2 +41,9 @@ this.clientId = clientId;

}
/**
* Генерирует html-форму перенаправления пользователя на авторизацию
*
* @param {AuthScope[]} scopes
* @param {string=} instanceName
* @return {string}
*/
getAuthForm(scopes, instanceName) {

@@ -34,2 +60,7 @@ const builder = new redirect_form_builder_1.FormBuilder()

}
/**
*
* @param {string} code Временный токен (authorization code), подлежащий обмену на постоянный токен авторизации
* @return {Promise<string>} Токен авторизации
*/
async exchangeCode2Token(code) {

@@ -41,3 +72,3 @@ const response = await fetch_1.fetch(`${this.endpoint}/token`, {

redirect_uri: this.redirectUrl,
client_secret: this.clientSecret,
client_secret: this.clientSecret
});

@@ -44,0 +75,0 @@ const json = await response.json();

@@ -0,2 +1,10 @@

import { Response } from "node-fetch";
export declare type QueryStringifiable = Record<string, string | number | boolean | ReadonlyArray<string> | ReadonlyArray<number> | ReadonlyArray<boolean> | null | undefined>;
export declare function fetch(url: string, params: QueryStringifiable, headers?: Record<string, string>): Promise<import("node-fetch").Response>;
/**
*
* @param {string} url URL адрес запроса
* @param {QueryStringifiable} parameters Параметры запроса
* @param {Record<string, string>=} headers Заголовки запроса
* @return {Promise<Response>} Ответ
*/
export declare function fetch(url: string, parameters: QueryStringifiable, headers?: Record<string, string>): Promise<Response>;

@@ -9,13 +9,20 @@ "use strict";

const querystring_1 = require("querystring");
async function fetch(url, params, headers = {}) {
/**
*
* @param {string} url URL адрес запроса
* @param {QueryStringifiable} parameters Параметры запроса
* @param {Record<string, string>=} headers Заголовки запроса
* @return {Promise<Response>} Ответ
*/
async function fetch(url, parameters, headers = {}) {
return await node_fetch_1.default(url, {
method: "POST",
body: querystring_1.stringify(params),
body: querystring_1.stringify(parameters),
headers: {
...headers,
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
Accept: "application/json"
}
});
}
exports.fetch = fetch;
export { API as YMApi, YMApiError } from "./api";
export * as ymTypes from "./api.types";
export { Auth as YMAuth, YMAuthError } from "./auth";
export { NotificationChecker as YMNotificationChecker, NotificationDTO as YMNotificationDTO, YMNotificationError, } from "./notifications";
export { FormConfig as YMFormConfig, PaymentFromBuilder as YMPaymentFromBuilder, } from "./payment-form-builder";
export { NotificationChecker as YMNotificationChecker, NotificationDTO as YMNotificationDTO, YMNotificationError } from "./notifications";
export { FormConfig as YMFormConfig, PaymentFromBuilder as YMPaymentFromBuilder } from "./payment-form-builder";

@@ -26,8 +26,25 @@ export declare type NotificationDTO = {

};
/**
* Ошибка проверки уведомления от YooMoney
*/
export declare class YMNotificationError extends Error {
}
/**
* Класс, который реализует [механизм проверки уведомлений от YooMoney](https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security)
*
* @see {@link https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security|Описание механизма}
*/
export declare class NotificationChecker {
private readonly secret;
/**
*
* @param {string} secret Секретное слово
*/
constructor(secret: string);
/**
*
* @param {*} notification Объект уведомления
* @return {*}
*/
check(notification: Record<keyof NotificationDTO, string>): NotificationDTO;
}

@@ -5,13 +5,30 @@ "use strict";

const crypto_1 = require("crypto");
/**
* Ошибка проверки уведомления от YooMoney
*/
class YMNotificationError extends Error {
}
exports.YMNotificationError = YMNotificationError;
/**
* Класс, который реализует [механизм проверки уведомлений от YooMoney](https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security)
*
* @see {@link https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security|Описание механизма}
*/
class NotificationChecker {
/**
*
* @param {string} secret Секретное слово
*/
constructor(secret) {
this.secret = secret;
}
/**
*
* @param {*} notification Объект уведомления
* @return {*}
*/
check(notification) {
const notificationWithSecret = {
...notification,
notification_secret: this.secret,
notification_secret: this.secret
};

@@ -21,5 +38,6 @@ const pattern = "notification_type&operation_id&amount&currency&datetime&sender&codepro&notification_secret&label";

.split("&")
.map(key => notificationWithSecret[key])
.map((key) => notificationWithSecret[key])
.join("&");
const hash = crypto_1.createHash("sha1").update(signature).digest("hex");
// eslint-disable-next-line security/detect-possible-timing-attacks
if (hash !== notification.sha1_hash) {

@@ -30,9 +48,9 @@ throw new YMNotificationError(`Hash sum not matched: ${hash} !== ${notification.sha1_hash}`);

...notification,
amount: parseFloat(notification.amount),
amount: Number.parseFloat(notification.amount),
notification_type: notification.notification_type,
withdraw_amount: parseFloat(notification.withdraw_amount) || 0,
withdraw_amount: Number.parseFloat(notification.withdraw_amount) || 0,
currency: notification.currency,
codepro: Boolean(notification.codepro),
test_notification: Boolean(notification.test_notification),
unaccepted: Boolean(notification.unaccepted),
unaccepted: Boolean(notification.unaccepted)
};

@@ -39,0 +57,0 @@ }

@@ -59,8 +59,39 @@ /// <reference types="node" />

};
/**
* Генерирует HTML формы для переводов
*/
export declare class PaymentFromBuilder {
readonly config: FormConfig;
/**
*
* @param {FormConfig=} config Изначальные настройки формы
*/
constructor(config?: FormConfig);
/**
* Генерирует стандартные сеттеры
*
* @param {string} field
* @return {Function}
*/
private _makeSetter;
/**
* Задаёт сумму платежа
*
* @param {string | number} amount Сумма
* @return {this}
*/
setAmount(amount: number | string): this;
/**
* Задаёт получателя платежа
*
* @param {string | number} receiver Получатель
* @return {this}
*/
setReceiver(receiver: number | string): this;
/**
* Задаёт URL перенаправления после успешного платежа
*
* @param {string | URL} url URL
* @return {this}
*/
setSuccessURL(url: string | URL): this;

@@ -75,7 +106,31 @@ readonly setTargets: (value: string) => this;

readonly setComment: (value: string | undefined) => this;
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireFio(doRequire?: boolean): this;
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireAddress(doRequire?: boolean): this;
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireEmail(doRequire?: boolean): this;
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requirePhone(doRequire?: boolean): this;
/**
* Генерирует HTML на основе заданных параметров
* @return {string}
*/
buildHtml(): string;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PaymentFromBuilder = void 0;
/* eslint-disable no-invalid-this */
const redirect_form_builder_1 = require("redirect-form-builder");
/**
*
* @param {FormConfig} config
* @return {FormQueryObject}
*/
function convert(config) {

@@ -20,6 +26,13 @@ return {

label: config.label,
successURL: config.successURL,
successURL: config.successURL
};
}
/**
* Генерирует HTML формы для переводов
*/
class PaymentFromBuilder {
/**
*
* @param {FormConfig=} config Изначальные настройки формы
*/
constructor(config = {

@@ -30,3 +43,3 @@ paymentType: "PC",

quickPayForm: "shop",
targets: "",
targets: ""
}) {

@@ -43,2 +56,8 @@ this.config = config;

}
/**
* Генерирует стандартные сеттеры
*
* @param {string} field
* @return {Function}
*/
_makeSetter(field) {

@@ -50,6 +69,18 @@ return (value) => {

}
/**
* Задаёт сумму платежа
*
* @param {string | number} amount Сумма
* @return {this}
*/
setAmount(amount) {
this.config.sum = parseFloat(amount.toString());
this.config.sum = Number.parseFloat(amount.toString());
return this;
}
/**
* Задаёт получателя платежа
*
* @param {string | number} receiver Получатель
* @return {this}
*/
setReceiver(receiver) {

@@ -59,2 +90,8 @@ this.config.receiver = receiver.toString();

}
/**
* Задаёт URL перенаправления после успешного платежа
*
* @param {string | URL} url URL
* @return {this}
*/
setSuccessURL(url) {

@@ -64,2 +101,7 @@ this.config.successURL = url.toString();

}
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireFio(doRequire = true) {

@@ -69,2 +111,7 @@ this.config.needFio = doRequire;

}
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireAddress(doRequire = true) {

@@ -74,2 +121,7 @@ this.config.needAddress = doRequire;

}
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requireEmail(doRequire = true) {

@@ -79,2 +131,7 @@ this.config.needEmail = doRequire;

}
/**
*
* @param {boolean} doRequire
* @return {this}
*/
requirePhone(doRequire = true) {

@@ -84,2 +141,6 @@ this.config.needPhone = doRequire;

}
/**
* Генерирует HTML на основе заданных параметров
* @return {string}
*/
buildHtml() {

@@ -86,0 +147,0 @@ return new redirect_form_builder_1.FormBuilder("https://yoomoney.ru/quickpay/confirm.xml", "POST", convert(this.config)).buildHtml();

{
"name": "yoomoney-sdk",
"version": "1.0.3",
"version": "1.0.5",
"description": "YooMoney typed SDK",

@@ -15,3 +15,5 @@ "main": "dist/index.js",

"generate-lock-files": "npm i && yarn install",
"glf": "npm run generate-lock-files"
"glf": "npm run generate-lock-files",
"lint": "eslint src/*",
"prettify": "prettier --write src/**/*"
},

@@ -43,3 +45,4 @@ "files": [

"bugs": {
"url": "https://github.com/AlexXanderGrib/yoomoney-sdk/issues"
"url": "https://github.com/AlexXanderGrib/yoomoney-sdk/issues",
"email": "me@alexxgrib.me"
},

@@ -53,10 +56,15 @@ "homepage": "https://github.com/AlexXanderGrib/yoomoney-sdk#readme",

"eslint": "^7.24.0",
"eslint-config-prettier": "^8.1.0",
"eslint-config-google": "^0.14.0",
"eslint-config-prettier": "^8.2.0",
"eslint-config-standard": "^16.0.2",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-promise": "^4.3.1",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-security": "^1.4.0",
"eslint-plugin-unicorn": "^30.0.0",
"husky": "^6.0.0",
"jest": "^26.6.3",
"prettier": "^2.2.1",
"rimraf": "^3.0.2",
"ts-jest": "^26.5.4",

@@ -69,3 +77,9 @@ "ts-node": "^9.1.1",

"redirect-form-builder": "^1.0.0"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint && npm run prettify",
"pre-push": "npm test"
}
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc