From 14607a7dd65716ad016eb51d8a6c0044da3b77da Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Wed, 30 Apr 2025 23:55:01 +0300 Subject: [PATCH 01/11] Add info to telegram messages --- src/billing/cloudpayments.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 98e11342..06d7d137 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -105,7 +105,12 @@ export default class CloudPaymentsWebhooks { const userId = req.context.user.id; if (!workspaceId || !tariffPlanId || !userId) { - this.sendError(res, 1, `[Billing / Compose payment] No workspace, tariff plan or user id in request body`, req.query); + this.sendError(res, 1, `[Billing / Compose payment] No workspace, tariff plan or user id in request body +Details: +workspaceId: ${workspaceId} +tariffPlanId: ${tariffPlanId} +userId: ${userId}` + , req.query); return; } @@ -479,7 +484,6 @@ export default class CloudPaymentsWebhooks { * Refund the money that were charged to link a card */ if (data.isCardLinkOperation) { - this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Recurrent payments activated for «${workspace.name}». 1 RUB charged`, TelegramBotURLs.Money)); await cloudPaymentsApi.cancelPayment(body.TransactionId); @@ -503,7 +507,11 @@ export default class CloudPaymentsWebhooks { dtCreated: new Date(), }); - this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Recurrent payments activated for «${workspace.name}». 1 RUB returned`, TelegramBotURLs.Money)); + this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Card linked +Transaction details: +workspaceId: ${workspace._id} +date: ${body.DateTime}` + , TelegramBotURLs.Money)); } else { /** * Russia code from ISO 3166-1 @@ -517,7 +525,15 @@ export default class CloudPaymentsWebhooks { await this.sendReceipt(workspace, tariffPlan, userEmail); - this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Payment passed successfully for «${workspace.name}»`, TelegramBotURLs.Money)); + this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] New payment +Transaction details: +amount: ${+body.Amount * PENNY_MULTIPLIER} +currency: ${body.Currency} +workspaceId: ${workspace._id} +date: ${body.DateTime} +subscriptionId: ${body.SubscriptionId}` + , TelegramBotURLs.Money)); + } } catch (e) { const error = e as Error; From 96844896bf94787f4b9ca90c0f35804a693a2d5d Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Thu, 1 May 2025 23:38:00 +0300 Subject: [PATCH 02/11] Add nextPaymentDate to compose-payment --- src/billing/cloudpayments.ts | 16 ++++++++++++++++ src/utils/checksumService.ts | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 06d7d137..ff8c1b63 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -142,6 +142,19 @@ userId: ${userId}` const isCardLinkOperation = workspace.tariffPlanId.toString() === tariffPlanId && !workspace.isTariffPlanExpired(); + // Calculate next payment date + const lastChargeDate = new Date(workspace.lastChargeDate); + const now = new Date(); + let nextPaymentDate: Date; + + if (isCardLinkOperation) { + nextPaymentDate = new Date(lastChargeDate); + nextPaymentDate.setMonth(lastChargeDate.getMonth() + 1); + } else { + nextPaymentDate = new Date(now); + nextPaymentDate.setMonth(nextPaymentDate.getMonth() + 1); + } + let checksum; try { @@ -149,11 +162,13 @@ userId: ${userId}` isCardLinkOperation: true, workspaceId: workspace._id.toString(), userId: userId, + nextPaymentDate: nextPaymentDate.toISOString(), } : { workspaceId: workspace._id.toString(), userId: userId, tariffPlanId: tariffPlan._id.toString(), shouldSaveCard: shouldSaveCard === 'true', + nextPaymentDate: nextPaymentDate.toISOString(), }; checksum = await checksumService.generateChecksum(checksumData); @@ -175,6 +190,7 @@ userId: ${userId}` isCardLinkOperation, currency: 'RUB', checksum, + nextPaymentDate: nextPaymentDate.toISOString(), }); } diff --git a/src/utils/checksumService.ts b/src/utils/checksumService.ts index 666ed0e7..59601fb1 100644 --- a/src/utils/checksumService.ts +++ b/src/utils/checksumService.ts @@ -20,6 +20,10 @@ interface PlanPurchaseChecksumData { * If true, we will save user card */ shouldSaveCard: boolean; + /** + * Next payment date + */ + nextPaymentDate: string; } interface CardLinkChecksumData { @@ -35,6 +39,10 @@ interface CardLinkChecksumData { * True if this is card linking operation – charging minimal amount of money to validate card info */ isCardLinkOperation: boolean; + /** + * Next payment date + */ + nextPaymentDate: string; } /** @@ -67,6 +75,7 @@ class ChecksumService { workspaceId: payload.workspaceId, userId: payload.userId, isCardLinkOperation: payload.isCardLinkOperation, + nextPaymentDate: payload.nextPaymentDate, }; } else { return { @@ -74,6 +83,7 @@ class ChecksumService { userId: payload.userId, tariffPlanId: payload.tariffPlanId, shouldSaveCard: payload.shouldSaveCard, + nextPaymentDate: payload.nextPaymentDate, }; } } From 6f812e5d177c7d78957c0e8b1c4d31b4ea995b9d Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Sat, 31 May 2025 23:48:34 +0300 Subject: [PATCH 03/11] Upd --- src/billing/cloudpayments.ts | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index ff8c1b63..ba730ad5 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -25,7 +25,6 @@ import { PlanDBScheme, PlanProlongationPayload } from '@hawk.so/types'; -import { PENNY_MULTIPLIER } from 'codex-accounting-sdk'; import WorkspaceModel from '../models/workspace'; import HawkCatcher from '@hawk.so/nodejs'; import { publish } from '../rabbitmq'; @@ -45,6 +44,8 @@ import PlanModel from '../models/plan'; import { ClientApi, ClientService, CustomerReceiptItem, ReceiptApi, ReceiptTypes, TaxationSystem } from 'cloudpayments'; import { ComposePaymentPayload } from './types/composePaymentPayload'; +const PENNY_MULTIPLIER = 100; + interface ComposePaymentRequest extends express.Request { query: ComposePaymentPayload & { [key: string]: any }; context: import('../types/graphql').ResolverContextBase; @@ -525,8 +526,10 @@ userId: ${userId}` this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Card linked Transaction details: -workspaceId: ${workspace._id} -date: ${body.DateTime}` +workspace id: ${workspace._id} +date of operation: ${body.DateTime} +first payment date: ${data.cloudPayments?.recurrent.startDate} +sum: ${data.cloudPayments?.recurrent.amount}${body.Currency}` , TelegramBotURLs.Money)); } else { /** @@ -545,9 +548,10 @@ date: ${body.DateTime}` Transaction details: amount: ${+body.Amount * PENNY_MULTIPLIER} currency: ${body.Currency} -workspaceId: ${workspace._id} -date: ${body.DateTime} -subscriptionId: ${body.SubscriptionId}` +next payment date: ${data.cloudPayments?.recurrent.startDate} +workspace id: ${workspace._id} +date of operation: ${body.DateTime} +subscription id: ${body.SubscriptionId}` , TelegramBotURLs.Money)); } @@ -639,7 +643,7 @@ subscriptionId: ${body.SubscriptionId}` return; } - this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Fail] Transaction failed for «${workspace.name}»`, TelegramBotURLs.Money)); + this.handleSendingToTelegramError(telegram.sendMessage(`❌ [Billing / Fail] Transaction failed for «${workspace.name}»`, TelegramBotURLs.Money)); HawkCatcher.send(new Error('[Billing / Fail] Transaction failed'), body as any); @@ -661,7 +665,14 @@ subscriptionId: ${body.SubscriptionId}` console.log('💎 CloudPayments /recurrent request', body); - this.handleSendingToTelegramError(telegram.sendMessage(`[Billing / Recurrent] New recurrent event with ${body.Status} status`, TelegramBotURLs.Money)); + this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Recurrent] New recurrent transaction + Transaction details: + amount: ${+body.Amount * PENNY_MULTIPLIER} + currency: ${body.Currency} + next payment date: ${body.NextTransactionDate} + workspace id: ${body.AccountId} + subscription id: ${body.Id}` + , TelegramBotURLs.Money)); HawkCatcher.send(new Error(`[Billing / Recurrent] New recurrent event with ${body.Status} status`), req.body); switch (body.Status) { From a047258e84f266c06774f92de930c3c2651e79dc Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Sat, 31 May 2025 23:50:17 +0300 Subject: [PATCH 04/11] Lint --- src/billing/cloudpayments.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index ba730ad5..6c7c4b5a 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -111,7 +111,7 @@ Details: workspaceId: ${workspaceId} tariffPlanId: ${tariffPlanId} userId: ${userId}` - , req.query); + , req.query); return; } @@ -501,7 +501,6 @@ userId: ${userId}` * Refund the money that were charged to link a card */ if (data.isCardLinkOperation) { - await cloudPaymentsApi.cancelPayment(body.TransactionId); const member = await this.getMember(data.userId, workspace); @@ -530,7 +529,7 @@ workspace id: ${workspace._id} date of operation: ${body.DateTime} first payment date: ${data.cloudPayments?.recurrent.startDate} sum: ${data.cloudPayments?.recurrent.amount}${body.Currency}` - , TelegramBotURLs.Money)); + , TelegramBotURLs.Money)); } else { /** * Russia code from ISO 3166-1 @@ -552,8 +551,7 @@ next payment date: ${data.cloudPayments?.recurrent.startDate} workspace id: ${workspace._id} date of operation: ${body.DateTime} subscription id: ${body.SubscriptionId}` - , TelegramBotURLs.Money)); - + , TelegramBotURLs.Money)); } } catch (e) { const error = e as Error; @@ -672,7 +670,7 @@ subscription id: ${body.SubscriptionId}` next payment date: ${body.NextTransactionDate} workspace id: ${body.AccountId} subscription id: ${body.Id}` - , TelegramBotURLs.Money)); + , TelegramBotURLs.Money)); HawkCatcher.send(new Error(`[Billing / Recurrent] New recurrent event with ${body.Status} status`), req.body); switch (body.Status) { From 2254176fc009eadba6c6b7a9edc5a9fe7ffbb41f Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 20:22:45 +0300 Subject: [PATCH 05/11] Update amount --- src/billing/cloudpayments.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 6c7c4b5a..3387059f 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -290,7 +290,7 @@ userId: ${userId}` status: BusinessOperationStatus.Pending, payload: { workspaceId: workspace._id, - amount: +body.Amount * PENNY_MULTIPLIER, + amount: +body.Amount, currency: body.Currency, userId: member._id, tariffPlanId: plan._id, @@ -545,7 +545,7 @@ sum: ${data.cloudPayments?.recurrent.amount}${body.Currency}` this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] New payment Transaction details: -amount: ${+body.Amount * PENNY_MULTIPLIER} +amount: ${+body.Amount} currency: ${body.Currency} next payment date: ${data.cloudPayments?.recurrent.startDate} workspace id: ${workspace._id} @@ -665,7 +665,7 @@ subscription id: ${body.SubscriptionId}` this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Recurrent] New recurrent transaction Transaction details: - amount: ${+body.Amount * PENNY_MULTIPLIER} + amount: ${+body.Amount} currency: ${body.Currency} next payment date: ${body.NextTransactionDate} workspace id: ${body.AccountId} From 2a1d7408f873124b6eefd987be64c81e1325fd21 Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 22:22:00 +0300 Subject: [PATCH 06/11] Fix message text --- src/billing/cloudpayments.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 3387059f..1a3fbb69 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -545,8 +545,7 @@ sum: ${data.cloudPayments?.recurrent.amount}${body.Currency}` this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] New payment Transaction details: -amount: ${+body.Amount} -currency: ${body.Currency} +amount: ${+body.Amount} ${body.Currency} next payment date: ${data.cloudPayments?.recurrent.startDate} workspace id: ${workspace._id} date of operation: ${body.DateTime} @@ -665,8 +664,7 @@ subscription id: ${body.SubscriptionId}` this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Recurrent] New recurrent transaction Transaction details: - amount: ${+body.Amount} - currency: ${body.Currency} + amount: ${+body.Amount} ${body.Currency} next payment date: ${body.NextTransactionDate} workspace id: ${body.AccountId} subscription id: ${body.Id}` From e8fd7eccbca4c24aac030d738bb28c5451d42a3e Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 22:31:07 +0300 Subject: [PATCH 07/11] Check if isDebug --- src/billing/cloudpayments.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 1a3fbb69..36f305d8 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -150,9 +150,13 @@ userId: ${userId}` if (isCardLinkOperation) { nextPaymentDate = new Date(lastChargeDate); - nextPaymentDate.setMonth(lastChargeDate.getMonth() + 1); } else { nextPaymentDate = new Date(now); + } + + if (workspace.isDebug) { + nextPaymentDate.setDate(nextPaymentDate.getDate() + 1); + } else { nextPaymentDate.setMonth(nextPaymentDate.getMonth() + 1); } From d2cc77166877c7eaee9e72dce1e7d4cedde2e0fb Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 22:38:33 +0300 Subject: [PATCH 08/11] Fix --- src/billing/cloudpayments.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 36f305d8..2f83d70b 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -528,7 +528,7 @@ userId: ${userId}` }); this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] Card linked -Transaction details: + workspace id: ${workspace._id} date of operation: ${body.DateTime} first payment date: ${data.cloudPayments?.recurrent.startDate} @@ -548,7 +548,7 @@ sum: ${data.cloudPayments?.recurrent.amount}${body.Currency}` await this.sendReceipt(workspace, tariffPlan, userEmail); this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Pay] New payment -Transaction details: + amount: ${+body.Amount} ${body.Currency} next payment date: ${data.cloudPayments?.recurrent.startDate} workspace id: ${workspace._id} @@ -667,12 +667,12 @@ subscription id: ${body.SubscriptionId}` console.log('💎 CloudPayments /recurrent request', body); this.handleSendingToTelegramError(telegram.sendMessage(`✅ [Billing / Recurrent] New recurrent transaction - Transaction details: - amount: ${+body.Amount} ${body.Currency} - next payment date: ${body.NextTransactionDate} - workspace id: ${body.AccountId} - subscription id: ${body.Id}` - , TelegramBotURLs.Money)); + +amount: ${+body.Amount} ${body.Currency} +next payment date: ${body.NextTransactionDate} +workspace id: ${body.AccountId} +subscription id: ${body.Id}` +, TelegramBotURLs.Money)); HawkCatcher.send(new Error(`[Billing / Recurrent] New recurrent event with ${body.Status} status`), req.body); switch (body.Status) { From 3aed5edcc3e6e8449e45a85a626173b5dec16405 Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 22:38:58 +0300 Subject: [PATCH 09/11] Lint --- src/billing/cloudpayments.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/billing/cloudpayments.ts b/src/billing/cloudpayments.ts index 2f83d70b..47a6916f 100644 --- a/src/billing/cloudpayments.ts +++ b/src/billing/cloudpayments.ts @@ -153,7 +153,7 @@ userId: ${userId}` } else { nextPaymentDate = new Date(now); } - + if (workspace.isDebug) { nextPaymentDate.setDate(nextPaymentDate.getDate() + 1); } else { @@ -672,7 +672,7 @@ amount: ${+body.Amount} ${body.Currency} next payment date: ${body.NextTransactionDate} workspace id: ${body.AccountId} subscription id: ${body.Id}` -, TelegramBotURLs.Money)); + , TelegramBotURLs.Money)); HawkCatcher.send(new Error(`[Billing / Recurrent] New recurrent event with ${body.Status} status`), req.body); switch (body.Status) { From 2833cb706be38f1b54f993b80b35ff0f9c3d39cc Mon Sep 17 00:00:00 2001 From: Tanya Fomina Date: Mon, 2 Jun 2025 22:52:56 +0300 Subject: [PATCH 10/11] Fix tests --- test/integration/cases/billing/check.test.ts | 7 +++++++ test/integration/cases/billing/fail.test.ts | 4 +++- test/integration/cases/billing/pay.test.ts | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/test/integration/cases/billing/check.test.ts b/test/integration/cases/billing/check.test.ts index a700d792..2af26fcd 100644 --- a/test/integration/cases/billing/check.test.ts +++ b/test/integration/cases/billing/check.test.ts @@ -151,6 +151,7 @@ describe('Check webhook', () => { userId: admin._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -172,6 +173,7 @@ describe('Check webhook', () => { userId: externalUser._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -193,6 +195,7 @@ describe('Check webhook', () => { userId: member._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -214,6 +217,7 @@ describe('Check webhook', () => { userId: admin._id.toString(), tariffPlanId: '5fe383b0126d28007780641b', shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -236,6 +240,7 @@ describe('Check webhook', () => { userId: admin._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -257,6 +262,7 @@ describe('Check webhook', () => { userId: admin._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -283,6 +289,7 @@ describe('Check webhook', () => { userId: admin._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), cloudPayments: { recurrent: { diff --git a/test/integration/cases/billing/fail.test.ts b/test/integration/cases/billing/fail.test.ts index 02c6618f..be1fd4f2 100644 --- a/test/integration/cases/billing/fail.test.ts +++ b/test/integration/cases/billing/fail.test.ts @@ -50,11 +50,12 @@ const tariffPlan: PlanDBScheme = { name: 'Test plan', }; -const planProlongationPayload: PlanProlongationPayload = { +const planProlongationPayload = { userId: user._id.toString(), workspaceId: workspace._id.toString(), tariffPlanId: tariffPlan._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }; const validRequest: FailRequest = { @@ -239,6 +240,7 @@ describe('Fail webhook', () => { workspaceId: workspace._id.toString(), tariffPlanId: tariffPlan._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); diff --git a/test/integration/cases/billing/pay.test.ts b/test/integration/cases/billing/pay.test.ts index 65695589..0fb4cfef 100644 --- a/test/integration/cases/billing/pay.test.ts +++ b/test/integration/cases/billing/pay.test.ts @@ -127,6 +127,7 @@ describe('Pay webhook', () => { checksum: await checksumService.generateChecksum({ ...paymentSuccessPayload, shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }; @@ -457,6 +458,7 @@ describe('Pay webhook', () => { checksum: await checksumService.generateChecksum({ ...paymentSuccessPayload, shouldSaveCard: true, + nextPaymentDate: new Date().toString(), }), }), ...cardDetails, @@ -502,6 +504,7 @@ describe('Pay webhook', () => { workspaceId: '', tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); @@ -523,6 +526,7 @@ describe('Pay webhook', () => { workspaceId: workspace._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); @@ -544,6 +548,7 @@ describe('Pay webhook', () => { workspaceId: workspace._id.toString(), tariffPlanId: '', shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); @@ -565,6 +570,7 @@ describe('Pay webhook', () => { workspaceId: new ObjectId().toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); @@ -586,6 +592,7 @@ describe('Pay webhook', () => { workspaceId: workspace._id.toString(), tariffPlanId: new ObjectId().toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); @@ -607,6 +614,7 @@ describe('Pay webhook', () => { workspaceId: workspace._id.toString(), tariffPlanId: planToChange._id.toString(), shouldSaveCard: false, + nextPaymentDate: new Date().toString(), }), }), }); From 43729f5d06d6244cec907f79855d95eb2bd574d3 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:31:23 +0000 Subject: [PATCH 11/11] Bump version up to 1.1.20 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2cf072c..78cbc0e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hawk.api", - "version": "1.1.19", + "version": "1.1.20", "main": "index.ts", "license": "UNLICENSED", "scripts": {