@besales/robokassa-sdk 0.1.0 → 0.1.2
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 +94 -10
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/modules/subscriptions.module.d.ts +12 -2
- package/dist/cjs/modules/subscriptions.module.d.ts.map +1 -1
- package/dist/cjs/modules/subscriptions.module.js +28 -1
- package/dist/cjs/modules/subscriptions.module.js.map +1 -1
- package/dist/cjs/types/subscription.types.d.ts +14 -1
- package/dist/cjs/types/subscription.types.d.ts.map +1 -1
- package/dist/cjs/webhooks/express.d.ts +1 -1
- package/dist/cjs/webhooks/express.js +1 -1
- package/dist/cjs/webhooks/fastify.d.ts +1 -1
- package/dist/cjs/webhooks/fastify.js +1 -1
- package/dist/cjs/webhooks/index.d.ts +2 -2
- package/dist/cjs/webhooks/index.d.ts.map +1 -1
- package/dist/cjs/webhooks/index.js +1 -1
- package/dist/cjs/webhooks/types.d.ts +5 -0
- package/dist/cjs/webhooks/types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/modules/subscriptions.module.d.ts +12 -2
- package/dist/esm/modules/subscriptions.module.d.ts.map +1 -1
- package/dist/esm/modules/subscriptions.module.js +28 -1
- package/dist/esm/modules/subscriptions.module.js.map +1 -1
- package/dist/esm/types/subscription.types.d.ts +14 -1
- package/dist/esm/types/subscription.types.d.ts.map +1 -1
- package/dist/esm/webhooks/express.d.ts +1 -1
- package/dist/esm/webhooks/express.js +1 -1
- package/dist/esm/webhooks/fastify.d.ts +1 -1
- package/dist/esm/webhooks/fastify.js +1 -1
- package/dist/esm/webhooks/index.d.ts +2 -2
- package/dist/esm/webhooks/index.d.ts.map +1 -1
- package/dist/esm/webhooks/index.js +1 -1
- package/dist/esm/webhooks/types.d.ts +5 -0
- package/dist/esm/webhooks/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @robokassa-
|
|
1
|
+
# @besales/robokassa-sdk
|
|
2
2
|
|
|
3
3
|
TypeScript SDK для интеграции с микросервисом обработки платежей через Robokassa.
|
|
4
4
|
|
|
@@ -7,9 +7,9 @@ TypeScript SDK для интеграции с микросервисом обр
|
|
|
7
7
|
## Установка
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
yarn add @robokassa-
|
|
10
|
+
yarn add @besales/robokassa-sdk
|
|
11
11
|
# или
|
|
12
|
-
npm install @robokassa-
|
|
12
|
+
npm install @besales/robokassa-sdk
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
**Требования:** Node.js >= 18.0.0 (используется нативный `fetch`)
|
|
@@ -17,12 +17,12 @@ npm install @robokassa-service/sdk
|
|
|
17
17
|
## Быстрый старт
|
|
18
18
|
|
|
19
19
|
```typescript
|
|
20
|
-
import { RobokassaPaymentClient } from '@robokassa-
|
|
20
|
+
import { RobokassaPaymentClient } from '@besales/robokassa-sdk';
|
|
21
21
|
|
|
22
22
|
const client = new RobokassaPaymentClient({
|
|
23
23
|
baseUrl: 'https://payments.example.com',
|
|
24
24
|
apiKey: process.env.PAYMENT_SERVICE_API_KEY!, // глобальный ключ
|
|
25
|
-
clientApiKey: process.env.
|
|
25
|
+
clientApiKey: process.env.PAYMENT_SERVICE_CLIENT_API_KEY!, // ключ клиента
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
// Одноразовый платёж
|
|
@@ -63,10 +63,39 @@ client.subscriptions.getById(id)
|
|
|
63
63
|
client.subscriptions.cancel(id, userId)
|
|
64
64
|
client.subscriptions.pause(id, userId)
|
|
65
65
|
client.subscriptions.resume(id, userId)
|
|
66
|
+
client.subscriptions.changePlan(id, userId, input)
|
|
67
|
+
client.subscriptions.clearScheduledPlanChange(id, userId)
|
|
66
68
|
```
|
|
67
69
|
|
|
68
70
|
Если `clientApiKey` не передан в конструктор, вызов методов с `auth: 'client'` бросит ошибку.
|
|
69
71
|
|
|
72
|
+
## Мультиклиентская Модель
|
|
73
|
+
|
|
74
|
+
Один payment service может хранить данные многих клиентов одновременно.
|
|
75
|
+
|
|
76
|
+
Это значит:
|
|
77
|
+
- `Client` — это внешний сервис;
|
|
78
|
+
- `Product` и `SubscriptionPlan` принадлежат конкретному `clientName`;
|
|
79
|
+
- наличие тарифов у клиента `A` ничего не говорит о наличии тарифов у клиента `B`.
|
|
80
|
+
|
|
81
|
+
Практический вывод:
|
|
82
|
+
- если у вашего backend `PAYMENT_SERVICE_CLIENT_NAME=beprompt`, то вам нужны планы именно для `beprompt`;
|
|
83
|
+
- планы клиента `12astro` не будут “общими” и не закроют каталог для `beprompt`.
|
|
84
|
+
|
|
85
|
+
Рекомендуемый сценарий:
|
|
86
|
+
1. Создать `Client` для внешнего сервиса.
|
|
87
|
+
2. Создать `Product` и/или `SubscriptionPlan` с тем же `clientName`.
|
|
88
|
+
3. Сохранить remote `planId` во внешнем сервисе.
|
|
89
|
+
|
|
90
|
+
Если вы строите каталог подписок, фильтруйте планы по `clientName`:
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
const { data: plans } = await client.plans.list({
|
|
94
|
+
clientName: process.env.PAYMENT_SERVICE_CLIENT_NAME!,
|
|
95
|
+
isActive: true,
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
70
99
|
## Модули
|
|
71
100
|
|
|
72
101
|
### Клиенты (clients)
|
|
@@ -143,6 +172,16 @@ const result = await client.plans.delete('plan-id');
|
|
|
143
172
|
// result.deleted или result.deactivated
|
|
144
173
|
```
|
|
145
174
|
|
|
175
|
+
Удаление работает так:
|
|
176
|
+
- если у плана нет подписок, он удаляется физически;
|
|
177
|
+
- если у плана уже есть подписки, сервис не удаляет его физически, а деактивирует (`isActive=false`).
|
|
178
|
+
|
|
179
|
+
Если нужно просто убрать тариф из каталога, обычно безопаснее сделать:
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
await client.plans.update('plan-id', { isActive: false });
|
|
183
|
+
```
|
|
184
|
+
|
|
146
185
|
### Платежи (payments)
|
|
147
186
|
|
|
148
187
|
```typescript
|
|
@@ -197,11 +236,43 @@ await client.subscriptions.pause('sub-id', 'user-id', 2); // на 2 месяца
|
|
|
197
236
|
// Возобновить (требует clientApiKey)
|
|
198
237
|
await client.subscriptions.resume('sub-id', 'user-id');
|
|
199
238
|
|
|
239
|
+
// Немедленный апгрейд на более дорогой тариф (требует clientApiKey)
|
|
240
|
+
const upgrade = await client.subscriptions.changePlan('sub-id', 'user-id', {
|
|
241
|
+
newPlanId: 'plan-pro',
|
|
242
|
+
applyAt: 'immediately',
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
if (upgrade.requiresPayment) {
|
|
246
|
+
// Для активации апгрейда нужна доплата
|
|
247
|
+
// redirect на upgrade.paymentLink
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Запланированный даунгрейд на конец периода (требует clientApiKey)
|
|
251
|
+
const scheduled = await client.subscriptions.changePlan('sub-id', 'user-id', {
|
|
252
|
+
newPlanId: 'plan-basic',
|
|
253
|
+
applyAt: 'end_of_period',
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
if (scheduled.isScheduled) {
|
|
257
|
+
console.log(
|
|
258
|
+
'Переход запланирован на',
|
|
259
|
+
scheduled.subscription.scheduledPlanChangeAt
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Отменить запланированную смену тарифа (требует clientApiKey)
|
|
264
|
+
await client.subscriptions.clearScheduledPlanChange('sub-id', 'user-id');
|
|
265
|
+
|
|
200
266
|
// Статистика
|
|
201
267
|
const stats = await client.subscriptions.getStats();
|
|
202
268
|
const cronStats = await client.subscriptions.getCronStats();
|
|
203
269
|
```
|
|
204
270
|
|
|
271
|
+
Правила `changePlan()`:
|
|
272
|
+
- `applyAt: 'immediately'` поддерживает только переход на план с большей ценой и возвращает `paymentLink` для доплаты;
|
|
273
|
+
- `applyAt: 'end_of_period'` поддерживает только переход на план с меньшей ценой и записывает `scheduledPlanId`/`scheduledPlanChangeAt`;
|
|
274
|
+
- смена между разными `interval` разрешена, решение принимается только по абсолютной цене нового плана.
|
|
275
|
+
|
|
205
276
|
### Health check
|
|
206
277
|
|
|
207
278
|
```typescript
|
|
@@ -222,7 +293,7 @@ SDK предоставляет готовые обработчики webhook'о
|
|
|
222
293
|
### Express
|
|
223
294
|
|
|
224
295
|
```typescript
|
|
225
|
-
import { createExpressWebhookMiddleware } from '@robokassa-
|
|
296
|
+
import { createExpressWebhookMiddleware } from '@besales/robokassa-sdk/webhooks';
|
|
226
297
|
|
|
227
298
|
// Webhook платежей
|
|
228
299
|
app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
@@ -242,7 +313,11 @@ app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
|
242
313
|
app.post('/api/user/subscription-webhook', ...createExpressWebhookMiddleware({
|
|
243
314
|
apiKey: process.env.WEBHOOK_API_KEY!,
|
|
244
315
|
onSubscription: async (payload) => {
|
|
245
|
-
console.log('Подписка:', payload.subscriptionId, payload.status);
|
|
316
|
+
console.log('Подписка:', payload.subscriptionId, payload.status, payload.eventType);
|
|
317
|
+
|
|
318
|
+
if (payload.eventType === 'PLAN_CHANGED') {
|
|
319
|
+
await recalculateQuota(payload.userId, payload.planId, payload.previousPlanId);
|
|
320
|
+
}
|
|
246
321
|
|
|
247
322
|
if (payload.status === 'CANCELLED') {
|
|
248
323
|
await deactivateUser(payload.userId);
|
|
@@ -254,7 +329,7 @@ app.post('/api/user/subscription-webhook', ...createExpressWebhookMiddleware({
|
|
|
254
329
|
### Fastify
|
|
255
330
|
|
|
256
331
|
```typescript
|
|
257
|
-
import { robokassaWebhookPlugin } from '@robokassa-
|
|
332
|
+
import { robokassaWebhookPlugin } from '@besales/robokassa-sdk/webhooks';
|
|
258
333
|
|
|
259
334
|
fastify.register(robokassaWebhookPlugin, {
|
|
260
335
|
apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -276,7 +351,7 @@ import {
|
|
|
276
351
|
validateWebhookApiKey,
|
|
277
352
|
parsePaymentWebhook,
|
|
278
353
|
parseSubscriptionWebhook,
|
|
279
|
-
} from '@robokassa-
|
|
354
|
+
} from '@besales/robokassa-sdk/webhooks';
|
|
280
355
|
|
|
281
356
|
// В любом фреймворке
|
|
282
357
|
function handleRequest(headers: Record<string, string>, body: unknown) {
|
|
@@ -300,7 +375,7 @@ import {
|
|
|
300
375
|
UnauthorizedError,
|
|
301
376
|
ConflictError,
|
|
302
377
|
OutcomeUnknownError,
|
|
303
|
-
} from '@robokassa-
|
|
378
|
+
} from '@besales/robokassa-sdk';
|
|
304
379
|
|
|
305
380
|
try {
|
|
306
381
|
await client.payments.create({ userId: 'uuid', productId: 'uuid' });
|
|
@@ -384,13 +459,22 @@ const client = new RobokassaPaymentClient({
|
|
|
384
459
|
| `userId` | `string` | ID пользователя |
|
|
385
460
|
| `status` | `string` | Статус: `ACTIVE`, `CANCELLED`, `PAUSED`, `EXPIRED` |
|
|
386
461
|
| `planId` | `string` | ID тарифного плана |
|
|
462
|
+
| `scheduledPlanId` | `string \| null` | ID плана, на который запланирован переход |
|
|
463
|
+
| `scheduledPlanChangeAt` | `string \| null` | Дата автопереключения плана (ISO 8601) |
|
|
464
|
+
| `previousPlanId` | `string \| null` | Предыдущий план при `eventType = PLAN_CHANGED` |
|
|
387
465
|
| `startDate` | `string` | Дата начала (ISO 8601) |
|
|
388
466
|
| `endDate` | `string \| null` | Дата окончания |
|
|
467
|
+
| `nextBillingDate` | `string \| null` | Следующее списание |
|
|
389
468
|
| `isActive` | `boolean` | Активна ли подписка |
|
|
390
469
|
| `autoRenew` | `boolean` | Автопродление |
|
|
391
470
|
| `language` | `string` | Язык |
|
|
471
|
+
| `eventType` | `'STATE_CHANGE' \| 'UPCOMING_BILLING' \| 'PLAN_CHANGED'` | Тип события webhook |
|
|
392
472
|
| `robokassaCode` | `string` | Код Robokassa-конфигурации |
|
|
393
473
|
|
|
474
|
+
`PLAN_CHANGED` приходит при фактическом применении смены тарифа:
|
|
475
|
+
- сразу после успешной доплаты за `applyAt: 'immediately'`;
|
|
476
|
+
- после успешного списания нового периода для `applyAt: 'end_of_period'`.
|
|
477
|
+
|
|
394
478
|
## Лицензия
|
|
395
479
|
|
|
396
480
|
Проприетарный. Только для внутреннего использования.
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @robokassa-
|
|
2
|
+
* @besales/robokassa-sdk
|
|
3
3
|
*
|
|
4
4
|
* SDK клиент для Robokassa Payment Microservice
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
|
-
* import { RobokassaPaymentClient } from '@robokassa-
|
|
10
|
+
* import { RobokassaPaymentClient } from '@besales/robokassa-sdk';
|
|
11
11
|
*
|
|
12
12
|
* const client = new RobokassaPaymentClient({
|
|
13
13
|
* baseUrl: 'https://payments.example.com',
|
|
@@ -28,5 +28,5 @@ export type { Client, CreateClientInput, UpdateClientInput } from './types/clien
|
|
|
28
28
|
export type { Product, CreateProductInput, UpdateProductInput } from './types/product.types';
|
|
29
29
|
export type { SubscriptionPlan, CreatePlanInput, UpdatePlanInput, PlanListFilters, PlanListResponse, PlanDeleteResult, } from './types/plan.types';
|
|
30
30
|
export type { CreatePaymentInput, CreatePaymentResponse, UpdatePaymentInput, } from './types/payment.types';
|
|
31
|
-
export type { Subscription, SubscriptionStatus, SubscriptionInterval, PaymentStatus, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, } from './types/subscription.types';
|
|
31
|
+
export type { Subscription, SubscriptionStatus, SubscriptionInterval, PaymentStatus, CreateSubscriptionInput, CreateSubscriptionResponse, ChangePlanApplyAt, ChangePlanInput, ChangePlanResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, } from './types/subscription.types';
|
|
32
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG7F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG7F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* @robokassa-
|
|
3
|
+
* @besales/robokassa-sdk
|
|
4
4
|
*
|
|
5
5
|
* SDK клиент для Robokassa Payment Microservice
|
|
6
6
|
*
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
|
-
* import { RobokassaPaymentClient } from '@robokassa-
|
|
11
|
+
* import { RobokassaPaymentClient } from '@besales/robokassa-sdk';
|
|
12
12
|
*
|
|
13
13
|
* const client = new RobokassaPaymentClient({
|
|
14
14
|
* baseUrl: 'https://payments.example.com',
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Двойная аутентификация:
|
|
5
5
|
* - create/list/getStats/getCronStats/health → Global API Key
|
|
6
|
-
* - getById/cancel/pause/resume → Client API Key
|
|
6
|
+
* - getById/cancel/pause/resume/changePlan/clearScheduledPlanChange → Client API Key
|
|
7
7
|
*
|
|
8
8
|
* @module modules/subscriptions
|
|
9
9
|
*/
|
|
10
10
|
import { HttpClient } from '../http';
|
|
11
|
-
import type { Subscription, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, CronStats, SubscriptionHealth } from '../types/subscription.types';
|
|
11
|
+
import type { Subscription, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, CronStats, SubscriptionHealth, ChangePlanInput, ChangePlanResponse } from '../types/subscription.types';
|
|
12
12
|
export declare class SubscriptionsModule {
|
|
13
13
|
private readonly http;
|
|
14
14
|
constructor(http: HttpClient);
|
|
@@ -50,5 +50,15 @@ export declare class SubscriptionsModule {
|
|
|
50
50
|
* Требует clientApiKey в конструкторе
|
|
51
51
|
*/
|
|
52
52
|
resume(id: string, userId: string): Promise<Subscription>;
|
|
53
|
+
/**
|
|
54
|
+
* Сменить тариф подписки.
|
|
55
|
+
* Требует clientApiKey в конструкторе.
|
|
56
|
+
*/
|
|
57
|
+
changePlan(id: string, userId: string, input: ChangePlanInput): Promise<ChangePlanResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Отменить запланированную смену тарифа.
|
|
60
|
+
* Требует clientApiKey в конструкторе.
|
|
61
|
+
*/
|
|
62
|
+
clearScheduledPlanChange(id: string, userId: string): Promise<Subscription>;
|
|
53
63
|
}
|
|
54
64
|
//# sourceMappingURL=subscriptions.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.module.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAI7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQhF;;;OAGG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAShF,mCAAmC;IAC7B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAO5C,qCAAqC;IAC/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAOxC,mCAAmC;IAC7B,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAS3C;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhD;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;;OAIG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS5F;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"subscriptions.module.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAI7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQhF;;;OAGG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAShF,mCAAmC;IAC7B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAO5C,qCAAqC;IAC/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAOxC,mCAAmC;IAC7B,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAS3C;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhD;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;;OAIG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS5F;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;OAGG;IACG,UAAU,CACd,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAY9B;;;OAGG;IACG,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAQlF"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Двойная аутентификация:
|
|
6
6
|
* - create/list/getStats/getCronStats/health → Global API Key
|
|
7
|
-
* - getById/cancel/pause/resume → Client API Key
|
|
7
|
+
* - getById/cancel/pause/resume/changePlan/clearScheduledPlanChange → Client API Key
|
|
8
8
|
*
|
|
9
9
|
* @module modules/subscriptions
|
|
10
10
|
*/
|
|
@@ -109,6 +109,33 @@ class SubscriptionsModule {
|
|
|
109
109
|
auth: 'client',
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Сменить тариф подписки.
|
|
114
|
+
* Требует clientApiKey в конструкторе.
|
|
115
|
+
*/
|
|
116
|
+
async changePlan(id, userId, input) {
|
|
117
|
+
return this.http.request({
|
|
118
|
+
method: 'POST',
|
|
119
|
+
path: `/api/subscriptions/${encodeURIComponent(id)}/change-plan`,
|
|
120
|
+
body: {
|
|
121
|
+
userId,
|
|
122
|
+
...input,
|
|
123
|
+
},
|
|
124
|
+
auth: 'client',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Отменить запланированную смену тарифа.
|
|
129
|
+
* Требует clientApiKey в конструкторе.
|
|
130
|
+
*/
|
|
131
|
+
async clearScheduledPlanChange(id, userId) {
|
|
132
|
+
return this.http.request({
|
|
133
|
+
method: 'POST',
|
|
134
|
+
path: `/api/subscriptions/${encodeURIComponent(id)}/clear-scheduled-change`,
|
|
135
|
+
body: { userId },
|
|
136
|
+
auth: 'client',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
112
139
|
}
|
|
113
140
|
exports.SubscriptionsModule = SubscriptionsModule;
|
|
114
141
|
//# sourceMappingURL=subscriptions.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.module.js","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"subscriptions.module.js","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface Subscription {
|
|
|
20
20
|
username?: string | null;
|
|
21
21
|
status: SubscriptionStatus;
|
|
22
22
|
planId: string;
|
|
23
|
+
scheduledPlanId?: string | null;
|
|
24
|
+
scheduledPlanChangeAt?: string | null;
|
|
23
25
|
plan?: SubscriptionPlan;
|
|
24
26
|
startDate: string;
|
|
25
27
|
endDate?: string | null;
|
|
@@ -38,7 +40,7 @@ export interface Subscription {
|
|
|
38
40
|
export interface CreateSubscriptionInput {
|
|
39
41
|
/** UUID пользователя */
|
|
40
42
|
userId: string;
|
|
41
|
-
/**
|
|
43
|
+
/** ID плана */
|
|
42
44
|
planId: string;
|
|
43
45
|
username?: string;
|
|
44
46
|
/** URL редиректа при успешной оплате */
|
|
@@ -101,4 +103,15 @@ export interface SubscriptionHealth {
|
|
|
101
103
|
status: string;
|
|
102
104
|
[key: string]: unknown;
|
|
103
105
|
}
|
|
106
|
+
export type ChangePlanApplyAt = 'immediately' | 'end_of_period';
|
|
107
|
+
export interface ChangePlanInput {
|
|
108
|
+
newPlanId: string;
|
|
109
|
+
applyAt: ChangePlanApplyAt;
|
|
110
|
+
}
|
|
111
|
+
export interface ChangePlanResponse {
|
|
112
|
+
subscription: Subscription;
|
|
113
|
+
paymentLink?: string;
|
|
114
|
+
requiresPayment: boolean;
|
|
115
|
+
isScheduled: boolean;
|
|
116
|
+
}
|
|
104
117
|
//# sourceMappingURL=subscription.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.types.d.ts","sourceRoot":"","sources":["../../../src/types/subscription.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,gBAAgB,CAAC;AAErB,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,qBAAqB;AACrB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,MAAM,GACN,QAAQ,CAAC;AAEb,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"subscription.types.d.ts","sourceRoot":"","sources":["../../../src/types/subscription.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { createExpressWebhookMiddleware } from '@robokassa-
|
|
6
|
+
* import { createExpressWebhookMiddleware } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @example
|
|
6
6
|
* ```typescript
|
|
7
|
-
* import { createExpressWebhookMiddleware } from '@robokassa-
|
|
7
|
+
* import { createExpressWebhookMiddleware } from '@besales/robokassa-sdk/webhooks';
|
|
8
8
|
*
|
|
9
9
|
* app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
10
10
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { robokassaWebhookPlugin } from '@robokassa-
|
|
6
|
+
* import { robokassaWebhookPlugin } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* fastify.register(robokassaWebhookPlugin, {
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @example
|
|
6
6
|
* ```typescript
|
|
7
|
-
* import { robokassaWebhookPlugin } from '@robokassa-
|
|
7
|
+
* import { robokassaWebhookPlugin } from '@besales/robokassa-sdk/webhooks';
|
|
8
8
|
*
|
|
9
9
|
* fastify.register(robokassaWebhookPlugin, {
|
|
10
10
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Webhook handlers для Robokassa Payment Microservice
|
|
3
3
|
*
|
|
4
4
|
* Отдельный entry point для tree-shaking:
|
|
5
|
-
* import { ... } from '@robokassa-
|
|
5
|
+
* import { ... } from '@besales/robokassa-sdk/webhooks'
|
|
6
6
|
*
|
|
7
7
|
* @module webhooks
|
|
8
8
|
*/
|
|
9
9
|
export { validateWebhookApiKey, parsePaymentWebhook, parseSubscriptionWebhook, } from './handler';
|
|
10
10
|
export { createExpressWebhookMiddleware } from './express';
|
|
11
11
|
export { robokassaWebhookPlugin } from './fastify';
|
|
12
|
-
export type { PaymentWebhookPayload, SubscriptionWebhookPayload, PaymentWebhookHandler, SubscriptionWebhookHandler, WebhookConfig, } from './types';
|
|
12
|
+
export type { PaymentWebhookPayload, SubscriptionWebhookEventType, SubscriptionWebhookPayload, PaymentWebhookHandler, SubscriptionWebhookHandler, WebhookConfig, } from './types';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -30,17 +30,22 @@ export interface PaymentWebhookPayload {
|
|
|
30
30
|
recurringToken?: string | null;
|
|
31
31
|
}
|
|
32
32
|
/** Payload webhook изменения подписки (POST {apiUrl}/api/user/subscription-webhook) */
|
|
33
|
+
export type SubscriptionWebhookEventType = 'STATE_CHANGE' | 'UPCOMING_BILLING' | 'PLAN_CHANGED';
|
|
33
34
|
export interface SubscriptionWebhookPayload {
|
|
34
35
|
subscriptionId: string;
|
|
35
36
|
userId: string;
|
|
36
37
|
status: string;
|
|
37
38
|
planId: string;
|
|
39
|
+
scheduledPlanId?: string | null;
|
|
40
|
+
scheduledPlanChangeAt?: string | null;
|
|
41
|
+
previousPlanId?: string | null;
|
|
38
42
|
startDate: string;
|
|
39
43
|
endDate: string | null;
|
|
40
44
|
nextBillingDate?: string | null;
|
|
41
45
|
isActive: boolean;
|
|
42
46
|
autoRenew: boolean;
|
|
43
47
|
language: string;
|
|
48
|
+
eventType: SubscriptionWebhookEventType;
|
|
44
49
|
/** Код Robokassa-конфигурации (для мультикассы) */
|
|
45
50
|
robokassaCode: string;
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webhooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,uFAAuF;AACvF,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvG,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,kCAAkC;IAClC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CAC7C"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webhooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,uFAAuF;AACvF,MAAM,MAAM,4BAA4B,GACpC,cAAc,GACd,kBAAkB,GAClB,cAAc,CAAC;AAEnB,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,4BAA4B,CAAC;IACxC,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvG,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,kCAAkC;IAClC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CAC7C"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @robokassa-
|
|
2
|
+
* @besales/robokassa-sdk
|
|
3
3
|
*
|
|
4
4
|
* SDK клиент для Robokassa Payment Microservice
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
|
-
* import { RobokassaPaymentClient } from '@robokassa-
|
|
10
|
+
* import { RobokassaPaymentClient } from '@besales/robokassa-sdk';
|
|
11
11
|
*
|
|
12
12
|
* const client = new RobokassaPaymentClient({
|
|
13
13
|
* baseUrl: 'https://payments.example.com',
|
|
@@ -28,5 +28,5 @@ export type { Client, CreateClientInput, UpdateClientInput } from './types/clien
|
|
|
28
28
|
export type { Product, CreateProductInput, UpdateProductInput } from './types/product.types';
|
|
29
29
|
export type { SubscriptionPlan, CreatePlanInput, UpdatePlanInput, PlanListFilters, PlanListResponse, PlanDeleteResult, } from './types/plan.types';
|
|
30
30
|
export type { CreatePaymentInput, CreatePaymentResponse, UpdatePaymentInput, } from './types/payment.types';
|
|
31
|
-
export type { Subscription, SubscriptionStatus, SubscriptionInterval, PaymentStatus, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, } from './types/subscription.types';
|
|
31
|
+
export type { Subscription, SubscriptionStatus, SubscriptionInterval, PaymentStatus, CreateSubscriptionInput, CreateSubscriptionResponse, ChangePlanApplyAt, ChangePlanInput, ChangePlanResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, } from './types/subscription.types';
|
|
32
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG7F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG7F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @robokassa-
|
|
2
|
+
* @besales/robokassa-sdk
|
|
3
3
|
*
|
|
4
4
|
* SDK клиент для Robokassa Payment Microservice
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
|
-
* import { RobokassaPaymentClient } from '@robokassa-
|
|
10
|
+
* import { RobokassaPaymentClient } from '@besales/robokassa-sdk';
|
|
11
11
|
*
|
|
12
12
|
* const client = new RobokassaPaymentClient({
|
|
13
13
|
* baseUrl: 'https://payments.example.com',
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Двойная аутентификация:
|
|
5
5
|
* - create/list/getStats/getCronStats/health → Global API Key
|
|
6
|
-
* - getById/cancel/pause/resume → Client API Key
|
|
6
|
+
* - getById/cancel/pause/resume/changePlan/clearScheduledPlanChange → Client API Key
|
|
7
7
|
*
|
|
8
8
|
* @module modules/subscriptions
|
|
9
9
|
*/
|
|
10
10
|
import { HttpClient } from '../http';
|
|
11
|
-
import type { Subscription, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, CronStats, SubscriptionHealth } from '../types/subscription.types';
|
|
11
|
+
import type { Subscription, CreateSubscriptionInput, CreateSubscriptionResponse, SubscriptionListFilters, SubscriptionListResponse, SubscriptionStats, CronStats, SubscriptionHealth, ChangePlanInput, ChangePlanResponse } from '../types/subscription.types';
|
|
12
12
|
export declare class SubscriptionsModule {
|
|
13
13
|
private readonly http;
|
|
14
14
|
constructor(http: HttpClient);
|
|
@@ -50,5 +50,15 @@ export declare class SubscriptionsModule {
|
|
|
50
50
|
* Требует clientApiKey в конструкторе
|
|
51
51
|
*/
|
|
52
52
|
resume(id: string, userId: string): Promise<Subscription>;
|
|
53
|
+
/**
|
|
54
|
+
* Сменить тариф подписки.
|
|
55
|
+
* Требует clientApiKey в конструкторе.
|
|
56
|
+
*/
|
|
57
|
+
changePlan(id: string, userId: string, input: ChangePlanInput): Promise<ChangePlanResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Отменить запланированную смену тарифа.
|
|
60
|
+
* Требует clientApiKey в конструкторе.
|
|
61
|
+
*/
|
|
62
|
+
clearScheduledPlanChange(id: string, userId: string): Promise<Subscription>;
|
|
53
63
|
}
|
|
54
64
|
//# sourceMappingURL=subscriptions.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.module.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAI7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQhF;;;OAGG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAShF,mCAAmC;IAC7B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAO5C,qCAAqC;IAC/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAOxC,mCAAmC;IAC7B,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAS3C;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhD;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;;OAIG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS5F;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"subscriptions.module.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAI7C;;;;OAIG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAQhF;;;OAGG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAShF,mCAAmC;IAC7B,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAO5C,qCAAqC;IAC/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAOxC,mCAAmC;IAC7B,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAS3C;;;OAGG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQhD;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;;OAIG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS5F;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/D;;;OAGG;IACG,UAAU,CACd,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAY9B;;;OAGG;IACG,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAQlF"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Двойная аутентификация:
|
|
5
5
|
* - create/list/getStats/getCronStats/health → Global API Key
|
|
6
|
-
* - getById/cancel/pause/resume → Client API Key
|
|
6
|
+
* - getById/cancel/pause/resume/changePlan/clearScheduledPlanChange → Client API Key
|
|
7
7
|
*
|
|
8
8
|
* @module modules/subscriptions
|
|
9
9
|
*/
|
|
@@ -106,5 +106,32 @@ export class SubscriptionsModule {
|
|
|
106
106
|
auth: 'client',
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Сменить тариф подписки.
|
|
111
|
+
* Требует clientApiKey в конструкторе.
|
|
112
|
+
*/
|
|
113
|
+
async changePlan(id, userId, input) {
|
|
114
|
+
return this.http.request({
|
|
115
|
+
method: 'POST',
|
|
116
|
+
path: `/api/subscriptions/${encodeURIComponent(id)}/change-plan`,
|
|
117
|
+
body: {
|
|
118
|
+
userId,
|
|
119
|
+
...input,
|
|
120
|
+
},
|
|
121
|
+
auth: 'client',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Отменить запланированную смену тарифа.
|
|
126
|
+
* Требует clientApiKey в конструкторе.
|
|
127
|
+
*/
|
|
128
|
+
async clearScheduledPlanChange(id, userId) {
|
|
129
|
+
return this.http.request({
|
|
130
|
+
method: 'POST',
|
|
131
|
+
path: `/api/subscriptions/${encodeURIComponent(id)}/clear-scheduled-change`,
|
|
132
|
+
body: { userId },
|
|
133
|
+
auth: 'client',
|
|
134
|
+
});
|
|
135
|
+
}
|
|
109
136
|
}
|
|
110
137
|
//# sourceMappingURL=subscriptions.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.module.js","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"subscriptions.module.js","sourceRoot":"","sources":["../../../src/modules/subscriptions.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface Subscription {
|
|
|
20
20
|
username?: string | null;
|
|
21
21
|
status: SubscriptionStatus;
|
|
22
22
|
planId: string;
|
|
23
|
+
scheduledPlanId?: string | null;
|
|
24
|
+
scheduledPlanChangeAt?: string | null;
|
|
23
25
|
plan?: SubscriptionPlan;
|
|
24
26
|
startDate: string;
|
|
25
27
|
endDate?: string | null;
|
|
@@ -38,7 +40,7 @@ export interface Subscription {
|
|
|
38
40
|
export interface CreateSubscriptionInput {
|
|
39
41
|
/** UUID пользователя */
|
|
40
42
|
userId: string;
|
|
41
|
-
/**
|
|
43
|
+
/** ID плана */
|
|
42
44
|
planId: string;
|
|
43
45
|
username?: string;
|
|
44
46
|
/** URL редиректа при успешной оплате */
|
|
@@ -101,4 +103,15 @@ export interface SubscriptionHealth {
|
|
|
101
103
|
status: string;
|
|
102
104
|
[key: string]: unknown;
|
|
103
105
|
}
|
|
106
|
+
export type ChangePlanApplyAt = 'immediately' | 'end_of_period';
|
|
107
|
+
export interface ChangePlanInput {
|
|
108
|
+
newPlanId: string;
|
|
109
|
+
applyAt: ChangePlanApplyAt;
|
|
110
|
+
}
|
|
111
|
+
export interface ChangePlanResponse {
|
|
112
|
+
subscription: Subscription;
|
|
113
|
+
paymentLink?: string;
|
|
114
|
+
requiresPayment: boolean;
|
|
115
|
+
isScheduled: boolean;
|
|
116
|
+
}
|
|
104
117
|
//# sourceMappingURL=subscription.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.types.d.ts","sourceRoot":"","sources":["../../../src/types/subscription.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,SAAS,GACT,gBAAgB,CAAC;AAErB,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,qBAAqB;AACrB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,MAAM,GACN,QAAQ,CAAC;AAEb,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"subscription.types.d.ts","sourceRoot":"","sources":["../../../src/types/subscription.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { createExpressWebhookMiddleware } from '@robokassa-
|
|
6
|
+
* import { createExpressWebhookMiddleware } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { createExpressWebhookMiddleware } from '@robokassa-
|
|
6
|
+
* import { createExpressWebhookMiddleware } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* app.post('/api/user/webhook', ...createExpressWebhookMiddleware({
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { robokassaWebhookPlugin } from '@robokassa-
|
|
6
|
+
* import { robokassaWebhookPlugin } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* fastify.register(robokassaWebhookPlugin, {
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```typescript
|
|
6
|
-
* import { robokassaWebhookPlugin } from '@robokassa-
|
|
6
|
+
* import { robokassaWebhookPlugin } from '@besales/robokassa-sdk/webhooks';
|
|
7
7
|
*
|
|
8
8
|
* fastify.register(robokassaWebhookPlugin, {
|
|
9
9
|
* apiKey: process.env.WEBHOOK_API_KEY!,
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Webhook handlers для Robokassa Payment Microservice
|
|
3
3
|
*
|
|
4
4
|
* Отдельный entry point для tree-shaking:
|
|
5
|
-
* import { ... } from '@robokassa-
|
|
5
|
+
* import { ... } from '@besales/robokassa-sdk/webhooks'
|
|
6
6
|
*
|
|
7
7
|
* @module webhooks
|
|
8
8
|
*/
|
|
9
9
|
export { validateWebhookApiKey, parsePaymentWebhook, parseSubscriptionWebhook, } from './handler';
|
|
10
10
|
export { createExpressWebhookMiddleware } from './express';
|
|
11
11
|
export { robokassaWebhookPlugin } from './fastify';
|
|
12
|
-
export type { PaymentWebhookPayload, SubscriptionWebhookPayload, PaymentWebhookHandler, SubscriptionWebhookHandler, WebhookConfig, } from './types';
|
|
12
|
+
export type { PaymentWebhookPayload, SubscriptionWebhookEventType, SubscriptionWebhookPayload, PaymentWebhookHandler, SubscriptionWebhookHandler, WebhookConfig, } from './types';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,YAAY,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -30,17 +30,22 @@ export interface PaymentWebhookPayload {
|
|
|
30
30
|
recurringToken?: string | null;
|
|
31
31
|
}
|
|
32
32
|
/** Payload webhook изменения подписки (POST {apiUrl}/api/user/subscription-webhook) */
|
|
33
|
+
export type SubscriptionWebhookEventType = 'STATE_CHANGE' | 'UPCOMING_BILLING' | 'PLAN_CHANGED';
|
|
33
34
|
export interface SubscriptionWebhookPayload {
|
|
34
35
|
subscriptionId: string;
|
|
35
36
|
userId: string;
|
|
36
37
|
status: string;
|
|
37
38
|
planId: string;
|
|
39
|
+
scheduledPlanId?: string | null;
|
|
40
|
+
scheduledPlanChangeAt?: string | null;
|
|
41
|
+
previousPlanId?: string | null;
|
|
38
42
|
startDate: string;
|
|
39
43
|
endDate: string | null;
|
|
40
44
|
nextBillingDate?: string | null;
|
|
41
45
|
isActive: boolean;
|
|
42
46
|
autoRenew: boolean;
|
|
43
47
|
language: string;
|
|
48
|
+
eventType: SubscriptionWebhookEventType;
|
|
44
49
|
/** Код Robokassa-конфигурации (для мультикассы) */
|
|
45
50
|
robokassaCode: string;
|
|
46
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webhooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,uFAAuF;AACvF,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvG,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,kCAAkC;IAClC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CAC7C"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webhooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,uFAAuF;AACvF,MAAM,MAAM,4BAA4B,GACpC,cAAc,GACd,kBAAkB,GAClB,cAAc,CAAC;AAEnB,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,4BAA4B,CAAC;IACxC,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,kCAAkC;AAClC,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvG,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,kCAAkC;IAClC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CAC7C"}
|