@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.
Files changed (38) hide show
  1. package/README.md +94 -10
  2. package/dist/cjs/index.d.ts +3 -3
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/modules/subscriptions.module.d.ts +12 -2
  6. package/dist/cjs/modules/subscriptions.module.d.ts.map +1 -1
  7. package/dist/cjs/modules/subscriptions.module.js +28 -1
  8. package/dist/cjs/modules/subscriptions.module.js.map +1 -1
  9. package/dist/cjs/types/subscription.types.d.ts +14 -1
  10. package/dist/cjs/types/subscription.types.d.ts.map +1 -1
  11. package/dist/cjs/webhooks/express.d.ts +1 -1
  12. package/dist/cjs/webhooks/express.js +1 -1
  13. package/dist/cjs/webhooks/fastify.d.ts +1 -1
  14. package/dist/cjs/webhooks/fastify.js +1 -1
  15. package/dist/cjs/webhooks/index.d.ts +2 -2
  16. package/dist/cjs/webhooks/index.d.ts.map +1 -1
  17. package/dist/cjs/webhooks/index.js +1 -1
  18. package/dist/cjs/webhooks/types.d.ts +5 -0
  19. package/dist/cjs/webhooks/types.d.ts.map +1 -1
  20. package/dist/esm/index.d.ts +3 -3
  21. package/dist/esm/index.d.ts.map +1 -1
  22. package/dist/esm/index.js +2 -2
  23. package/dist/esm/modules/subscriptions.module.d.ts +12 -2
  24. package/dist/esm/modules/subscriptions.module.d.ts.map +1 -1
  25. package/dist/esm/modules/subscriptions.module.js +28 -1
  26. package/dist/esm/modules/subscriptions.module.js.map +1 -1
  27. package/dist/esm/types/subscription.types.d.ts +14 -1
  28. package/dist/esm/types/subscription.types.d.ts.map +1 -1
  29. package/dist/esm/webhooks/express.d.ts +1 -1
  30. package/dist/esm/webhooks/express.js +1 -1
  31. package/dist/esm/webhooks/fastify.d.ts +1 -1
  32. package/dist/esm/webhooks/fastify.js +1 -1
  33. package/dist/esm/webhooks/index.d.ts +2 -2
  34. package/dist/esm/webhooks/index.d.ts.map +1 -1
  35. package/dist/esm/webhooks/index.js +1 -1
  36. package/dist/esm/webhooks/types.d.ts +5 -0
  37. package/dist/esm/webhooks/types.d.ts.map +1 -1
  38. package/package.json +1 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @robokassa-service/sdk
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-service/sdk
10
+ yarn add @besales/robokassa-sdk
11
11
  # или
12
- npm install @robokassa-service/sdk
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-service/sdk';
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.PAYMENT_SERVICE_CLIENT_KEY!, // ключ клиента
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk';
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
  Проприетарный. Только для внутреннего использования.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @robokassa-service/sdk
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-service/sdk';
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
@@ -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-service/sdk
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-service/sdk';
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;CAQhE"}
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;;;AAcH,MAAa,mBAAmB;IAC9B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,6BAA6B;IAE7B;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAA6B;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA6B;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAiC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA2B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,OAAgE;YACvE,GAAG,EAAE,IAAI,EAAE,kBAAkB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YAC1C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAY;YAClC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,+BAA+B;SACtC,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAqB;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,2BAA2B;SAClC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAE7B;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACpD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,MAAc,EAAE,mBAA4B;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,QAAQ;YAC1D,IAAI,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;YACrC,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;CACF;AA5GD,kDA4GC"}
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
- /** UUID плана */
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":"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"}
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks'
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"}
@@ -3,7 +3,7 @@
3
3
  * Webhook handlers для Robokassa Payment Microservice
4
4
  *
5
5
  * Отдельный entry point для tree-shaking:
6
- * import { ... } from '@robokassa-service/sdk/webhooks'
6
+ * import { ... } from '@besales/robokassa-sdk/webhooks'
7
7
  *
8
8
  * @module webhooks
9
9
  */
@@ -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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @robokassa-service/sdk
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-service/sdk';
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
@@ -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-service/sdk
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-service/sdk';
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;CAQhE"}
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;AAcH,MAAM,OAAO,mBAAmB;IAC9B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,6BAA6B;IAE7B;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,IAA6B;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA6B;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAiC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA2B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,OAAgE;YACvE,GAAG,EAAE,IAAI,EAAE,kBAAkB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB;YAC1C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAY;YAClC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,+BAA+B;SACtC,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAqB;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,2BAA2B;SAClC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAE7B;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACpD,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,MAAc,EAAE,mBAA4B;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,QAAQ;YAC1D,IAAI,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;YACrC,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,sBAAsB,kBAAkB,CAAC,EAAE,CAAC,SAAS;YAC3D,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;CACF"}
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
- /** UUID плана */
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":"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"}
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks';
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-service/sdk/webhooks'
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"}
@@ -2,7 +2,7 @@
2
2
  * Webhook handlers для Robokassa Payment Microservice
3
3
  *
4
4
  * Отдельный entry point для tree-shaking:
5
- * import { ... } from '@robokassa-service/sdk/webhooks'
5
+ * import { ... } from '@besales/robokassa-sdk/webhooks'
6
6
  *
7
7
  * @module webhooks
8
8
  */
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@besales/robokassa-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "SDK клиент для Robokassa Payment Microservice (server-side only)",
5
5
  "author": "Vlad Petlyuk",
6
6
  "license": "ISC",