nestjs-monobank 1.2.8
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/LICENSE +661 -0
- package/README.md +18 -0
- package/dist/common/enums/discount.enum.d.ts +24 -0
- package/dist/common/enums/discount.enum.js +2 -0
- package/dist/common/enums/index.d.ts +1 -0
- package/dist/common/enums/index.js +17 -0
- package/dist/common/interfaces/common.interface.d.ts +177 -0
- package/dist/common/interfaces/common.interface.js +2 -0
- package/dist/common/interfaces/index.d.ts +2 -0
- package/dist/common/interfaces/index.js +18 -0
- package/dist/common/interfaces/monobank-options.interface.d.ts +15 -0
- package/dist/common/interfaces/monobank-options.interface.js +4 -0
- package/dist/core/config/monobank.constants.d.ts +1 -0
- package/dist/core/config/monobank.constants.js +4 -0
- package/dist/core/http/monobank.error.d.ts +6 -0
- package/dist/core/http/monobank.error.js +13 -0
- package/dist/core/http/monobank.http-client.d.ts +16 -0
- package/dist/core/http/monobank.http-client.js +66 -0
- package/dist/core/http/monobank.interceptor.d.ts +2 -0
- package/dist/core/http/monobank.interceptor.js +19 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +19 -0
- package/dist/modules/invoice/enums/cancel-status.enum.d.ts +18 -0
- package/dist/modules/invoice/enums/cancel-status.enum.js +22 -0
- package/dist/modules/invoice/enums/charge-status.enum.d.ts +14 -0
- package/dist/modules/invoice/enums/charge-status.enum.js +18 -0
- package/dist/modules/invoice/enums/index.d.ts +3 -0
- package/dist/modules/invoice/enums/index.js +19 -0
- package/dist/modules/invoice/enums/invoice-status.enum.d.ts +34 -0
- package/dist/modules/invoice/enums/invoice-status.enum.js +38 -0
- package/dist/modules/invoice/interfaces/index.d.ts +2 -0
- package/dist/modules/invoice/interfaces/index.js +18 -0
- package/dist/modules/invoice/interfaces/requests/create-cancel.request.d.ts +22 -0
- package/dist/modules/invoice/interfaces/requests/create-cancel.request.js +2 -0
- package/dist/modules/invoice/interfaces/requests/create-charge.request.d.ts +42 -0
- package/dist/modules/invoice/interfaces/requests/create-charge.request.js +2 -0
- package/dist/modules/invoice/interfaces/requests/create-finalize.request.d.ts +19 -0
- package/dist/modules/invoice/interfaces/requests/create-finalize.request.js +2 -0
- package/dist/modules/invoice/interfaces/requests/create-invoice.request.d.ts +88 -0
- package/dist/modules/invoice/interfaces/requests/create-invoice.request.js +2 -0
- package/dist/modules/invoice/interfaces/requests/index.d.ts +4 -0
- package/dist/modules/invoice/interfaces/requests/index.js +20 -0
- package/dist/modules/invoice/interfaces/responses/cancel.response.d.ts +18 -0
- package/dist/modules/invoice/interfaces/responses/cancel.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/charge.response.d.ts +35 -0
- package/dist/modules/invoice/interfaces/responses/charge.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/create-cancel.response.d.ts +7 -0
- package/dist/modules/invoice/interfaces/responses/create-cancel.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/create-charge.response.d.ts +7 -0
- package/dist/modules/invoice/interfaces/responses/create-charge.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/create-finalize.response.d.ts +7 -0
- package/dist/modules/invoice/interfaces/responses/create-finalize.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/create-invoice.response.d.ts +7 -0
- package/dist/modules/invoice/interfaces/responses/create-invoice.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/finalize.response.d.ts +9 -0
- package/dist/modules/invoice/interfaces/responses/finalize.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/fiscal-checks.response.d.ts +42 -0
- package/dist/modules/invoice/interfaces/responses/fiscal-checks.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/index.d.ts +9 -0
- package/dist/modules/invoice/interfaces/responses/index.js +25 -0
- package/dist/modules/invoice/interfaces/responses/invoice-status.response.d.ts +116 -0
- package/dist/modules/invoice/interfaces/responses/invoice-status.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/invoice.response.d.ts +13 -0
- package/dist/modules/invoice/interfaces/responses/invoice.response.js +2 -0
- package/dist/modules/invoice/interfaces/responses/receipt.response.d.ts +6 -0
- package/dist/modules/invoice/interfaces/responses/receipt.response.js +2 -0
- package/dist/modules/invoice/invoice.module.d.ts +2 -0
- package/dist/modules/invoice/invoice.module.js +20 -0
- package/dist/modules/invoice/invoice.service.d.ts +154 -0
- package/dist/modules/invoice/invoice.service.js +187 -0
- package/dist/modules/merchant/interfaces/index.d.ts +1 -0
- package/dist/modules/merchant/interfaces/index.js +17 -0
- package/dist/modules/merchant/interfaces/responses/index.d.ts +2 -0
- package/dist/modules/merchant/interfaces/responses/index.js +18 -0
- package/dist/modules/merchant/interfaces/responses/merchant.response.d.ts +17 -0
- package/dist/modules/merchant/interfaces/responses/merchant.response.js +2 -0
- package/dist/modules/merchant/interfaces/responses/pubkey.response.d.ts +10 -0
- package/dist/modules/merchant/interfaces/responses/pubkey.response.js +2 -0
- package/dist/modules/merchant/merchant.module.d.ts +2 -0
- package/dist/modules/merchant/merchant.module.js +20 -0
- package/dist/modules/merchant/merchant.service.d.ts +36 -0
- package/dist/modules/merchant/merchant.service.js +58 -0
- package/dist/modules/qr/enums/amount-type.enum.d.ts +11 -0
- package/dist/modules/qr/enums/amount-type.enum.js +15 -0
- package/dist/modules/qr/enums/index.d.ts +1 -0
- package/dist/modules/qr/enums/index.js +17 -0
- package/dist/modules/qr/interfaces/index.d.ts +0 -0
- package/dist/modules/qr/interfaces/index.js +0 -0
- package/dist/modules/qr/interfaces/responses/index.d.ts +2 -0
- package/dist/modules/qr/interfaces/responses/index.js +18 -0
- package/dist/modules/qr/interfaces/responses/list.response.d.ts +8 -0
- package/dist/modules/qr/interfaces/responses/list.response.js +2 -0
- package/dist/modules/qr/interfaces/responses/qr.response.d.ts +14 -0
- package/dist/modules/qr/interfaces/responses/qr.response.js +2 -0
- package/dist/modules/qr/qr.module.d.ts +2 -0
- package/dist/modules/qr/qr.module.js +20 -0
- package/dist/modules/qr/qr.service.d.ts +32 -0
- package/dist/modules/qr/qr.service.js +56 -0
- package/dist/modules/statement/interfaces/index.d.ts +1 -0
- package/dist/modules/statement/interfaces/index.js +17 -0
- package/dist/modules/statement/interfaces/responses/index.d.ts +1 -0
- package/dist/modules/statement/interfaces/responses/index.js +17 -0
- package/dist/modules/statement/interfaces/responses/statement.response.d.ts +99 -0
- package/dist/modules/statement/interfaces/responses/statement.response.js +2 -0
- package/dist/modules/statement/statement.module.d.ts +2 -0
- package/dist/modules/statement/statement.module.js +20 -0
- package/dist/modules/statement/statement.service.d.ts +17 -0
- package/dist/modules/statement/statement.service.js +38 -0
- package/dist/modules/subscription/enums/index.d.ts +2 -0
- package/dist/modules/subscription/enums/index.js +18 -0
- package/dist/modules/subscription/enums/subscription-status.enum.d.ts +13 -0
- package/dist/modules/subscription/enums/subscription-status.enum.js +17 -0
- package/dist/modules/subscription/enums/wallet-status.enum.d.ts +17 -0
- package/dist/modules/subscription/enums/wallet-status.enum.js +21 -0
- package/dist/modules/subscription/interfaces/index.d.ts +2 -0
- package/dist/modules/subscription/interfaces/index.js +18 -0
- package/dist/modules/subscription/interfaces/requests/client-subscriptions.request.d.ts +26 -0
- package/dist/modules/subscription/interfaces/requests/client-subscriptions.request.js +2 -0
- package/dist/modules/subscription/interfaces/requests/create-subscription.request.d.ts +32 -0
- package/dist/modules/subscription/interfaces/requests/create-subscription.request.js +2 -0
- package/dist/modules/subscription/interfaces/requests/edit-subscription.request.d.ts +18 -0
- package/dist/modules/subscription/interfaces/requests/edit-subscription.request.js +2 -0
- package/dist/modules/subscription/interfaces/requests/history.request.d.ts +15 -0
- package/dist/modules/subscription/interfaces/requests/history.request.js +2 -0
- package/dist/modules/subscription/interfaces/requests/index.d.ts +4 -0
- package/dist/modules/subscription/interfaces/requests/index.js +20 -0
- package/dist/modules/subscription/interfaces/responses/client-subscriptions.response.d.ts +27 -0
- package/dist/modules/subscription/interfaces/responses/client-subscriptions.response.js +2 -0
- package/dist/modules/subscription/interfaces/responses/create-subscription.response.d.ts +5 -0
- package/dist/modules/subscription/interfaces/responses/create-subscription.response.js +2 -0
- package/dist/modules/subscription/interfaces/responses/history.response.d.ts +9 -0
- package/dist/modules/subscription/interfaces/responses/history.response.js +2 -0
- package/dist/modules/subscription/interfaces/responses/index.d.ts +5 -0
- package/dist/modules/subscription/interfaces/responses/index.js +21 -0
- package/dist/modules/subscription/interfaces/responses/subscription-status.response.d.ts +29 -0
- package/dist/modules/subscription/interfaces/responses/subscription-status.response.js +2 -0
- package/dist/modules/subscription/interfaces/responses/subscription.response.d.ts +9 -0
- package/dist/modules/subscription/interfaces/responses/subscription.response.js +2 -0
- package/dist/modules/subscription/subscription.module.d.ts +2 -0
- package/dist/modules/subscription/subscription.module.js +20 -0
- package/dist/modules/subscription/subscription.service.d.ts +91 -0
- package/dist/modules/subscription/subscription.service.js +121 -0
- package/dist/modules/wallet/interfaces/index.d.ts +2 -0
- package/dist/modules/wallet/interfaces/index.js +18 -0
- package/dist/modules/wallet/interfaces/requests/create-card-token.request.d.ts +42 -0
- package/dist/modules/wallet/interfaces/requests/create-card-token.request.js +2 -0
- package/dist/modules/wallet/interfaces/requests/index.d.ts +1 -0
- package/dist/modules/wallet/interfaces/requests/index.js +17 -0
- package/dist/modules/wallet/interfaces/responses/card-token.response.d.ts +37 -0
- package/dist/modules/wallet/interfaces/responses/card-token.response.js +2 -0
- package/dist/modules/wallet/interfaces/responses/create-card-token.response.d.ts +7 -0
- package/dist/modules/wallet/interfaces/responses/create-card-token.response.js +2 -0
- package/dist/modules/wallet/interfaces/responses/index.d.ts +2 -0
- package/dist/modules/wallet/interfaces/responses/index.js +18 -0
- package/dist/modules/wallet/wallet.module.d.ts +2 -0
- package/dist/modules/wallet/wallet.module.js +20 -0
- package/dist/modules/wallet/wallet.service.d.ts +54 -0
- package/dist/modules/wallet/wallet.service.js +78 -0
- package/dist/modules/webhook/webhook.module.d.ts +2 -0
- package/dist/modules/webhook/webhook.module.js +24 -0
- package/dist/modules/webhook/webhook.service.d.ts +44 -0
- package/dist/modules/webhook/webhook.service.js +72 -0
- package/dist/monobank.module.d.ts +36 -0
- package/dist/monobank.module.js +117 -0
- package/dist/monobank.service.d.ts +17 -0
- package/dist/monobank.service.js +42 -0
- package/package.json +68 -0
- package/src/common/enums/discount.enum.ts +26 -0
- package/src/common/enums/index.ts +1 -0
- package/src/common/interfaces/common.interface.ts +206 -0
- package/src/common/interfaces/index.ts +2 -0
- package/src/common/interfaces/monobank-options.interface.ts +18 -0
- package/src/core/config/monobank.constants.ts +1 -0
- package/src/core/http/monobank.error.ts +10 -0
- package/src/core/http/monobank.http-client.ts +66 -0
- package/src/core/http/monobank.interceptor.ts +24 -0
- package/src/index.ts +3 -0
- package/src/modules/invoice/enums/cancel-status.enum.ts +20 -0
- package/src/modules/invoice/enums/charge-status.enum.ts +16 -0
- package/src/modules/invoice/enums/index.ts +3 -0
- package/src/modules/invoice/enums/invoice-status.enum.ts +40 -0
- package/src/modules/invoice/interfaces/index.ts +2 -0
- package/src/modules/invoice/interfaces/requests/create-cancel.request.ts +26 -0
- package/src/modules/invoice/interfaces/requests/create-charge.request.ts +52 -0
- package/src/modules/invoice/interfaces/requests/create-finalize.request.ts +22 -0
- package/src/modules/invoice/interfaces/requests/create-invoice.request.ts +103 -0
- package/src/modules/invoice/interfaces/requests/index.ts +4 -0
- package/src/modules/invoice/interfaces/responses/cancel.response.ts +21 -0
- package/src/modules/invoice/interfaces/responses/charge.response.ts +43 -0
- package/src/modules/invoice/interfaces/responses/create-cancel.response.ts +7 -0
- package/src/modules/invoice/interfaces/responses/create-charge.response.ts +7 -0
- package/src/modules/invoice/interfaces/responses/create-finalize.response.ts +7 -0
- package/src/modules/invoice/interfaces/responses/create-invoice.response.ts +7 -0
- package/src/modules/invoice/interfaces/responses/finalize.response.ts +9 -0
- package/src/modules/invoice/interfaces/responses/fiscal-checks.response.ts +49 -0
- package/src/modules/invoice/interfaces/responses/index.ts +10 -0
- package/src/modules/invoice/interfaces/responses/invoice-status.response.ts +142 -0
- package/src/modules/invoice/interfaces/responses/invoice.response.ts +14 -0
- package/src/modules/invoice/interfaces/responses/receipt.response.ts +6 -0
- package/src/modules/invoice/invoice.module.ts +8 -0
- package/src/modules/invoice/invoice.service.ts +191 -0
- package/src/modules/merchant/interfaces/index.ts +1 -0
- package/src/modules/merchant/interfaces/responses/index.ts +2 -0
- package/src/modules/merchant/interfaces/responses/merchant.response.ts +19 -0
- package/src/modules/merchant/interfaces/responses/pubkey.response.ts +10 -0
- package/src/modules/merchant/merchant.module.ts +8 -0
- package/src/modules/merchant/merchant.service.ts +46 -0
- package/src/modules/qr/enums/amount-type.enum.ts +13 -0
- package/src/modules/qr/enums/index.ts +1 -0
- package/src/modules/qr/interfaces/index.ts +0 -0
- package/src/modules/qr/interfaces/responses/index.ts +2 -0
- package/src/modules/qr/interfaces/responses/list.response.ts +11 -0
- package/src/modules/qr/interfaces/responses/qr.response.ts +18 -0
- package/src/modules/qr/qr.module.ts +8 -0
- package/src/modules/qr/qr.service.ts +43 -0
- package/src/modules/statement/interfaces/index.ts +1 -0
- package/src/modules/statement/interfaces/responses/index.ts +1 -0
- package/src/modules/statement/interfaces/responses/statement.response.ts +119 -0
- package/src/modules/statement/statement.module.ts +8 -0
- package/src/modules/statement/statement.service.ts +25 -0
- package/src/modules/subscription/enums/index.ts +2 -0
- package/src/modules/subscription/enums/subscription-status.enum.ts +14 -0
- package/src/modules/subscription/enums/wallet-status.enum.ts +19 -0
- package/src/modules/subscription/interfaces/index.ts +2 -0
- package/src/modules/subscription/interfaces/requests/client-subscriptions.request.ts +31 -0
- package/src/modules/subscription/interfaces/requests/create-subscription.request.ts +38 -0
- package/src/modules/subscription/interfaces/requests/edit-subscription.request.ts +20 -0
- package/src/modules/subscription/interfaces/requests/history.request.ts +20 -0
- package/src/modules/subscription/interfaces/requests/index.ts +4 -0
- package/src/modules/subscription/interfaces/responses/client-subscriptions.response.ts +36 -0
- package/src/modules/subscription/interfaces/responses/create-subscription.response.ts +6 -0
- package/src/modules/subscription/interfaces/responses/history.response.ts +12 -0
- package/src/modules/subscription/interfaces/responses/index.ts +5 -0
- package/src/modules/subscription/interfaces/responses/subscription-status.response.ts +40 -0
- package/src/modules/subscription/interfaces/responses/subscription.response.ts +11 -0
- package/src/modules/subscription/subscription.module.ts +8 -0
- package/src/modules/subscription/subscription.service.ts +121 -0
- package/src/modules/wallet/interfaces/index.ts +2 -0
- package/src/modules/wallet/interfaces/requests/create-card-token.request.ts +50 -0
- package/src/modules/wallet/interfaces/requests/index.ts +1 -0
- package/src/modules/wallet/interfaces/responses/card-token.response.ts +44 -0
- package/src/modules/wallet/interfaces/responses/create-card-token.response.ts +7 -0
- package/src/modules/wallet/interfaces/responses/index.ts +2 -0
- package/src/modules/wallet/wallet.module.ts +8 -0
- package/src/modules/wallet/wallet.service.ts +71 -0
- package/src/modules/webhook/webhook.module.ts +12 -0
- package/src/modules/webhook/webhook.service.ts +60 -0
- package/src/monobank.module.ts +115 -0
- package/src/monobank.service.ts +21 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { InvoiceStatusEnum } from '../../modules/invoice/enums';
|
|
2
|
+
import { Discount } from '../enums/discount.enum'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Позиція в кошику замовлення.
|
|
6
|
+
*/
|
|
7
|
+
export interface BasketItem {
|
|
8
|
+
/**
|
|
9
|
+
* Назва товару або послуги.
|
|
10
|
+
* Обов’язкове поле.
|
|
11
|
+
*/
|
|
12
|
+
name: string;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Кількість одиниць товару.
|
|
16
|
+
* Обов’язкове поле.
|
|
17
|
+
*/
|
|
18
|
+
qty: number;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Ціна за одиницю товару у мінімальних одиницях валюти (наприклад, копійки для гривні).
|
|
22
|
+
* Обов’язкове поле.
|
|
23
|
+
*/
|
|
24
|
+
sum: number;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Загальна сума за позицію (sum * qty).
|
|
28
|
+
* Якщо не передано — може бути обрахована на бекенді.
|
|
29
|
+
* Необов’язкове поле.
|
|
30
|
+
*/
|
|
31
|
+
total?: number;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Посилання на зображення товару.
|
|
35
|
+
* Необов’язкове поле.
|
|
36
|
+
*/
|
|
37
|
+
icon?: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Назва одиниці виміру товару (наприклад: шт, кг, м).
|
|
41
|
+
* Необов’язкове поле.
|
|
42
|
+
*/
|
|
43
|
+
unit?: string;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Код товару (обов’язкове поле для фіскалізації).
|
|
47
|
+
* Обов’язкове поле.
|
|
48
|
+
*/
|
|
49
|
+
code: string;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Значення штрих-коду, яке може бути використане при фіскалізації.
|
|
53
|
+
* Необов’язкове поле.
|
|
54
|
+
*/
|
|
55
|
+
barcode?: string;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Текст, що буде виводитись перед назвою товару (наприклад, категорія).
|
|
59
|
+
* Необов’язкове поле.
|
|
60
|
+
*/
|
|
61
|
+
header?: string;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Текст, що буде виводитись після назви товару.
|
|
65
|
+
* Необов’язкове поле.
|
|
66
|
+
*/
|
|
67
|
+
footer?: string;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Масив податкових ставок, вибраних під час налаштування каси в Checkbox.
|
|
71
|
+
* У випадку з ПРРО monopay ставки поки що не використовуються.
|
|
72
|
+
* Необов’язкове поле.
|
|
73
|
+
*/
|
|
74
|
+
tax?: number[];
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Код УКТ ЗЕД для товару.
|
|
78
|
+
* Необов’язкове поле.
|
|
79
|
+
*/
|
|
80
|
+
uktzed?: string;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Знижки або надбавки, що застосовуються саме до цієї позиції.
|
|
84
|
+
* Необов’язкове поле.
|
|
85
|
+
*/
|
|
86
|
+
discounts?: Discount[];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Інформація про платіж для клієнта та фіскалізації.
|
|
91
|
+
*/
|
|
92
|
+
export interface MerchantPaymInfoItem {
|
|
93
|
+
/**
|
|
94
|
+
* Номер замовлення або чека, який задає продавець.
|
|
95
|
+
* Необов’язкове поле.
|
|
96
|
+
*/
|
|
97
|
+
reference?: string;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Призначення платежу, що буде відображене у чеку.
|
|
101
|
+
* Максимальна довжина — 280 символів.
|
|
102
|
+
* Необов’язкове поле.
|
|
103
|
+
*/
|
|
104
|
+
destination?: string;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Службове поле для додаткової інформації.
|
|
108
|
+
* Не відображається клієнту. Максимум 280 символів.
|
|
109
|
+
* Необов’язкове поле.
|
|
110
|
+
*/
|
|
111
|
+
comment?: string;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Масив email-адрес клієнтів, на які буде відправлено фіскальний чек.
|
|
115
|
+
* Працює лише за наявності зв’язки з checkbox.
|
|
116
|
+
* Необов’язкове поле.
|
|
117
|
+
*/
|
|
118
|
+
customerEmails?: string[];
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Знижки або надбавки, які застосовуються до всього кошика.
|
|
122
|
+
* Враховуються під час фіскалізації (checkbox).
|
|
123
|
+
* Необов’язкове поле.
|
|
124
|
+
*/
|
|
125
|
+
discounts?: Discount[];
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Склад замовлення — деталі позицій у кошику.
|
|
129
|
+
* Обов’язкове поле при активній зв’язці з ПРРО.
|
|
130
|
+
*/
|
|
131
|
+
basketOrder?: BasketItem[];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Дані про токенізовану картку у гаманці користувача.
|
|
136
|
+
*/
|
|
137
|
+
export interface WalletData {
|
|
138
|
+
/**
|
|
139
|
+
* Токен картки.
|
|
140
|
+
*/
|
|
141
|
+
cardToken: string;
|
|
142
|
+
/**
|
|
143
|
+
* Ідентифікатор гаманця покупця.
|
|
144
|
+
*/
|
|
145
|
+
walletId: string;
|
|
146
|
+
/**
|
|
147
|
+
* Статус токенізації картки.
|
|
148
|
+
*/
|
|
149
|
+
status: "new" | "created" | "failed";
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Статистика платежів по підписці
|
|
154
|
+
*/
|
|
155
|
+
export interface SubscriptionSummary {
|
|
156
|
+
/** Загальна сума успішно сплачених платежів */
|
|
157
|
+
totalPaid: number;
|
|
158
|
+
|
|
159
|
+
/** Загальна сума невдалих платежів */
|
|
160
|
+
totalFailed: number;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Інформація про виплату чайових співробітнику.
|
|
165
|
+
*/
|
|
166
|
+
export interface TipsInfo {
|
|
167
|
+
/**
|
|
168
|
+
* Ідентифікатор співробітника, якому можна виплатити чайові.
|
|
169
|
+
*/
|
|
170
|
+
employeeId: string;
|
|
171
|
+
/**
|
|
172
|
+
* Сума успішно сплачених чайових у мінімальних одиницях валюти.
|
|
173
|
+
*/
|
|
174
|
+
amount: number;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Дані для пагінації
|
|
179
|
+
*/
|
|
180
|
+
export interface Pagination {
|
|
181
|
+
/** Загальна кількість елементів */
|
|
182
|
+
totalItems: number;
|
|
183
|
+
|
|
184
|
+
/** Кількість елементів на сторінці */
|
|
185
|
+
itemsPerPage: number;
|
|
186
|
+
|
|
187
|
+
/** Поточна сторінка (починаючи з 1) */
|
|
188
|
+
currentPage: number;
|
|
189
|
+
|
|
190
|
+
/** Загальна кількість сторінок */
|
|
191
|
+
totalPages: number;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export interface PaginatedResponse<T> {
|
|
195
|
+
items: T[];
|
|
196
|
+
pagination: Pagination;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Інформація про оплату, включаючи дані щодо токенізації картки та чайових.
|
|
201
|
+
*/
|
|
202
|
+
export interface InvoiceCancelItem {
|
|
203
|
+
status: Exclude<InvoiceStatusEnum, InvoiceStatusEnum.CREATED>;
|
|
204
|
+
walletData: WalletData;
|
|
205
|
+
tipsInfo?: TipsInfo;
|
|
206
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FactoryProvider, ModuleMetadata } from "@nestjs/common";
|
|
2
|
+
|
|
3
|
+
export const MonobankOptionsSymbol = Symbol();
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Тип, що представляє параметри для налаштування Monobank.
|
|
7
|
+
*/
|
|
8
|
+
export type MonobankModuleOptions = {
|
|
9
|
+
/**
|
|
10
|
+
* Ключ API для автентифікації в Monobank.
|
|
11
|
+
*/
|
|
12
|
+
apiKey: string; // Токен доступу або тестовий токен з особистого кабінету Monobank
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Тип для асинхронного налаштування Monobank.
|
|
17
|
+
*/
|
|
18
|
+
export type MonobankModuleAsyncOptions = Pick<ModuleMetadata, "imports"> & Pick<FactoryProvider<MonobankModuleOptions>, "useFactory" | "inject">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const MONOBANK_API_URL = "https://api.monobank.ua/api"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MONOBANK_API_URL,
|
|
3
|
+
} from '../config/monobank.constants'
|
|
4
|
+
import { MonobankError } from './monobank.error'
|
|
5
|
+
import { Inject, Injectable } from '@nestjs/common'
|
|
6
|
+
import { Dispatcher, request } from 'undici'
|
|
7
|
+
|
|
8
|
+
import { MonobankOptionsSymbol, type MonobankModuleOptions } from '../../common/interfaces'
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class MonobankHttpClient {
|
|
12
|
+
public constructor(
|
|
13
|
+
@Inject(MonobankOptionsSymbol)
|
|
14
|
+
private readonly config: MonobankModuleOptions
|
|
15
|
+
) {}
|
|
16
|
+
|
|
17
|
+
public async request<T>(options: {
|
|
18
|
+
method: Dispatcher.HttpMethod
|
|
19
|
+
url: string
|
|
20
|
+
data?: any
|
|
21
|
+
params?: any
|
|
22
|
+
}): Promise<T> {
|
|
23
|
+
const url = this.buildUrl(options.url, options.params)
|
|
24
|
+
|
|
25
|
+
const response = await request(url, {
|
|
26
|
+
method: options.method,
|
|
27
|
+
headersTimeout: 15000,
|
|
28
|
+
bodyTimeout: 15000,
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
'X-Token': this.config.apiKey,
|
|
32
|
+
},
|
|
33
|
+
body: options.data ? JSON.stringify(options.data) : undefined
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
if (response.statusCode >= 400) {
|
|
37
|
+
const text = await response.body.text()
|
|
38
|
+
throw new MonobankError('monobank_error', text, text)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return (await response.body.json()) as T
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public get<T>(url: string, params?: any) {
|
|
45
|
+
return this.request<T>({ method: 'GET', url, params })
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public post<T>(url: string, data?: any) {
|
|
49
|
+
return this.request<T>({ method: 'POST', url, data })
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public delete<T>(url: string, params?: any) {
|
|
53
|
+
return this.request<T>({ method: 'DELETE', url, params })
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private buildUrl(url: string, params?: any): string {
|
|
57
|
+
let fullUrl = `${MONOBANK_API_URL}${url}`
|
|
58
|
+
|
|
59
|
+
if (params && typeof params === 'object') {
|
|
60
|
+
const qp = new URLSearchParams(params)
|
|
61
|
+
fullUrl += `?${qp.toString()}`
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return fullUrl
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios'
|
|
2
|
+
|
|
3
|
+
export function attachMonobankInterceptors(http: AxiosInstance) {
|
|
4
|
+
http.interceptors.request.use(config => {
|
|
5
|
+
console.log(
|
|
6
|
+
`[Monobank Request] → ${config.method?.toUpperCase()} ${config.url}`
|
|
7
|
+
)
|
|
8
|
+
return config
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
http.interceptors.response.use(
|
|
12
|
+
res => res,
|
|
13
|
+
async error => {
|
|
14
|
+
const status = error?.response?.status
|
|
15
|
+
|
|
16
|
+
if (status >= 500) {
|
|
17
|
+
console.log('[Monobank] Retrying request after server error...')
|
|
18
|
+
return await http.request(error.config)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return Promise.reject(error)
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Статус операції скасування інвойсу.
|
|
3
|
+
* @enum {string}
|
|
4
|
+
*/
|
|
5
|
+
export enum CancelStatusEnum {
|
|
6
|
+
/**
|
|
7
|
+
* Заявка на скасування знаходиться в обробці.
|
|
8
|
+
*/
|
|
9
|
+
PROCESSING = 'processing',
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Заявка на скасування виконана успішно.
|
|
13
|
+
*/
|
|
14
|
+
SUCCESS = 'success',
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Неуспішна заявка на скасування.
|
|
18
|
+
*/
|
|
19
|
+
FAILURE = 'failure',
|
|
20
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Перечисление возможных статусов инвойса.
|
|
3
|
+
* @enum {string}
|
|
4
|
+
*/
|
|
5
|
+
export enum InvoiceStatusEnum {
|
|
6
|
+
/**
|
|
7
|
+
* Інвойс створено, очікується оплата.
|
|
8
|
+
*/
|
|
9
|
+
CREATED = "created",
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Платіж обробляється.
|
|
13
|
+
*/
|
|
14
|
+
PROCESSING = "processing",
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Сума заблокована.
|
|
18
|
+
*/
|
|
19
|
+
HOLD = "hold",
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Успішна оплата.
|
|
23
|
+
*/
|
|
24
|
+
SUCCESS = "success",
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Неуспішна оплата.
|
|
28
|
+
*/
|
|
29
|
+
FAILURE = "failure",
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Оплата повернена після успіху.
|
|
33
|
+
*/
|
|
34
|
+
REVERSED = "reversed",
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Час дії інвойсу вичерпано.
|
|
38
|
+
*/
|
|
39
|
+
EXPIRED = "expired",
|
|
40
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BasketItem } from "../../../../common/interfaces";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Тіло запиту на скасування інвойсу.
|
|
5
|
+
*/
|
|
6
|
+
export interface CreateCancelRequest {
|
|
7
|
+
/**
|
|
8
|
+
* Унікальний ідентифікатор інвойсу, який необхідно скасувати.
|
|
9
|
+
*/
|
|
10
|
+
invoiceId: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Унікальний зовнішній ідентифікатор запиту на скасування, визначений продавцем (необов’язковий).
|
|
14
|
+
*/
|
|
15
|
+
extRef?: string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Сума повернення у мінімальних одиницях валюти (необов’язкова, використовується при частковому поверненні).
|
|
19
|
+
*/
|
|
20
|
+
amount?: number;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Список товарів, які необхідно скасувати, обов'язковий при активованій фіскалізації.
|
|
24
|
+
*/
|
|
25
|
+
items?: BasketItem[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { MerchantPaymInfoItem } from "../../../../common/interfaces";
|
|
2
|
+
import type { InvoiceSaveCardData } from "./create-invoice.request";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Дані картки для проведення оплати
|
|
6
|
+
*/
|
|
7
|
+
export interface CardData {
|
|
8
|
+
/** PAN картки (номер) без пробілів */
|
|
9
|
+
pan: string;
|
|
10
|
+
/** Термін дії картки у форматі MMYY */
|
|
11
|
+
exp: string;
|
|
12
|
+
/** CVV/CVC код картки */
|
|
13
|
+
cvv: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Дані для проведення прямого платежу (Charge) через Monobank
|
|
18
|
+
*/
|
|
19
|
+
export interface CreateChargeRequest {
|
|
20
|
+
/** Сума оплати у мінімальних одиницях (копійки для гривні) */
|
|
21
|
+
amount: number;
|
|
22
|
+
|
|
23
|
+
/** Валюта у форматі ISO 4217 (за замовчуванням 980 — гривня) */
|
|
24
|
+
ccy?: number;
|
|
25
|
+
|
|
26
|
+
/** Дані картки */
|
|
27
|
+
cardData: CardData;
|
|
28
|
+
|
|
29
|
+
/** Інформація про замовлення/мерчанта */
|
|
30
|
+
merchantPaymInfo?: MerchantPaymInfoItem;
|
|
31
|
+
|
|
32
|
+
/** URL для отримання сповіщень про зміну статусу платежу */
|
|
33
|
+
webhookUrl?: string;
|
|
34
|
+
|
|
35
|
+
/** URL для повернення користувача після завершення оплати */
|
|
36
|
+
redirectUrl?: string;
|
|
37
|
+
|
|
38
|
+
/** Тип операції:
|
|
39
|
+
* - "debit" — списання коштів одразу
|
|
40
|
+
* - "hold" — утримання коштів (9 днів)
|
|
41
|
+
*/
|
|
42
|
+
paymentType?: "debit" | "hold";
|
|
43
|
+
|
|
44
|
+
/** Дані для збереження картки (токенізація), якщо підключено */
|
|
45
|
+
saveCardData?: InvoiceSaveCardData;
|
|
46
|
+
|
|
47
|
+
/** Ініціатор платежу:
|
|
48
|
+
* - "merchant" — ініційовано мерчантом (регулярні платежі)
|
|
49
|
+
* - "client" — ініційовано клієнтом (за запитом користувача)
|
|
50
|
+
*/
|
|
51
|
+
initiationKind: "merchant" | "client";
|
|
52
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BasketItem } from "../../../../common/interfaces";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Запит на підтвердження (списання) коштів із раніше створеного холду.
|
|
5
|
+
*/
|
|
6
|
+
export interface CreateFinalizeRequest {
|
|
7
|
+
/**
|
|
8
|
+
* Ідентифікатор рахунку (invoice), який потрібно підтвердити.
|
|
9
|
+
*/
|
|
10
|
+
invoiceId: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* (Необов'язково) Сума для списання в мінімальних одиницях.
|
|
14
|
+
* Якщо не вказано — буде списано повну суму холду.
|
|
15
|
+
*/
|
|
16
|
+
amount?: number;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* (Необов'язково) Список товарів для фіскалізації або звітності.
|
|
20
|
+
*/
|
|
21
|
+
items?: BasketItem[];
|
|
22
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { type MerchantPaymInfoItem } from "../../../../common/interfaces";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Дані для збереження картки (токенізації).
|
|
5
|
+
*/
|
|
6
|
+
export interface InvoiceSaveCardData {
|
|
7
|
+
/**
|
|
8
|
+
* Ознака збереження картки після оплати.
|
|
9
|
+
* Обов’язкове поле.
|
|
10
|
+
*/
|
|
11
|
+
saveCard: boolean;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Ідентифікатор гаманця користувача.
|
|
15
|
+
* Необов’язкове поле.
|
|
16
|
+
*/
|
|
17
|
+
walletId?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Тип, що представляє запит на створення інвойсу (рахунку).
|
|
22
|
+
*/
|
|
23
|
+
export interface CreateInvoiceRequest {
|
|
24
|
+
/**
|
|
25
|
+
* Сума оплати у мінімальних одиницях (наприклад, копійки для гривні).
|
|
26
|
+
* Обов’язкове поле.
|
|
27
|
+
*/
|
|
28
|
+
amount: number;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Код валюти за стандартом ISO 4217. За замовчуванням — 980 (гривня).
|
|
32
|
+
* Необов’язкове поле.
|
|
33
|
+
*/
|
|
34
|
+
ccy?: number;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Адреса для повернення (GET) після завершення оплати (успішно або з помилкою).
|
|
38
|
+
* Необов’язкове поле.
|
|
39
|
+
*/
|
|
40
|
+
redirectUrl?: string;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Адреса для зворотного виклику (webhook, POST), на яку надсилатиметься інформація про зміну статусу рахунку.
|
|
44
|
+
* Необов’язкове поле.
|
|
45
|
+
*/
|
|
46
|
+
webHookUrl?: string;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Строк дії рахунку в секундах. За замовчуванням — 24 години.
|
|
50
|
+
* Необов’язкове поле.
|
|
51
|
+
*/
|
|
52
|
+
validity?: number;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Тип операції.
|
|
56
|
+
* 'debit' — списання,
|
|
57
|
+
* 'hold' — холд коштів на 9 днів.
|
|
58
|
+
* Необов’язкове поле.
|
|
59
|
+
*/
|
|
60
|
+
paymentType?: "debit" | "hold";
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Ідентифікатор QR-каси для встановлення суми на існуючих касах.
|
|
64
|
+
* Необов’язкове поле.
|
|
65
|
+
*/
|
|
66
|
+
qrId?: string;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Код терміналу субмерчанта. Доступний лише окремим мерчантам.
|
|
70
|
+
* Необов’язкове поле.
|
|
71
|
+
*/
|
|
72
|
+
code?: string;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Відсоток комісії, який агент встановлює для себе.
|
|
76
|
+
* Необов’язкове поле.
|
|
77
|
+
*/
|
|
78
|
+
agentFeePercent?: number;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Ідентифікатор працівника, який може отримати чайові.
|
|
82
|
+
* Необов’язкове поле.
|
|
83
|
+
*/
|
|
84
|
+
tipsEmployeeId?: string;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Тип відображення платіжної форми. Якщо не вказано — буде звичайне посилання.
|
|
88
|
+
* Необов’язкове поле.
|
|
89
|
+
*/
|
|
90
|
+
displayType?: "iframe";
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Інформація про платіж, яка може використовуватись для фіскалізації (checkbox).
|
|
94
|
+
* Необов’язкове поле.
|
|
95
|
+
*/
|
|
96
|
+
merchantPaymInfo?: MerchantPaymInfoItem;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Дані для збереження (токенізації) картки після оплати.
|
|
100
|
+
* Необов’язкове поле.
|
|
101
|
+
*/
|
|
102
|
+
saveCardData?: InvoiceSaveCardData;
|
|
103
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CancelStatusEnum } from "../../enums";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Відповідь на запит про скасування інвойсу.
|
|
5
|
+
*/
|
|
6
|
+
export interface Cancel {
|
|
7
|
+
/**
|
|
8
|
+
* Статус операції скасування.
|
|
9
|
+
*/
|
|
10
|
+
status: CancelStatusEnum;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Дата створення операції скасування.
|
|
14
|
+
*/
|
|
15
|
+
createdDate: string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Дата останньої модифікації операції.
|
|
19
|
+
*/
|
|
20
|
+
modifiedDate: string;
|
|
21
|
+
}
|