From a09fe9d824b4351d1f9879b435669e760a2028d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 23 Feb 2026 15:55:33 -0300 Subject: [PATCH 1/5] feat(managers/v2): add invoices manager Co-Authored-By: Claude Opus 4.6 --- src/lib/core.ts | 3 +++ src/lib/managers/v2/index.ts | 1 + src/lib/managers/v2/invoicesManager.ts | 7 +++++++ src/lib/resources/v2/index.ts | 1 + src/lib/resources/v2/invoice.ts | 4 ++++ src/spec/integration.spec.ts | 23 +++++++++++++++++++++++ 6 files changed, 39 insertions(+) create mode 100644 src/lib/managers/v2/invoicesManager.ts create mode 100644 src/lib/resources/v2/invoice.ts diff --git a/src/lib/core.ts b/src/lib/core.ts index f2032d6..453c52e 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -21,6 +21,7 @@ import { AccountVerificationsManager, CustomersManager, EntitiesManager, + InvoicesManager as V2InvoicesManager, SimulateManager, TransfersManager, AccountsManager as V2AccountsManager, @@ -35,6 +36,7 @@ class FintocV2 { accountNumbers: AccountNumbersManager; simulate: SimulateManager; entities: EntitiesManager; + invoices: V2InvoicesManager; accountVerifications: AccountVerificationsManager; customers: CustomersManager; checkoutSessions: V2CheckoutSessionsManager; @@ -46,6 +48,7 @@ class FintocV2 { this.accountNumbers = new AccountNumbersManager('/v2/account_numbers', client); this.simulate = new SimulateManager('/v2/simulate', client); this.entities = new EntitiesManager('/v2/entities', client); + this.invoices = new V2InvoicesManager('/v2/invoices', client); this.accountVerifications = new AccountVerificationsManager('/v2/account_verifications', client); this.customers = new CustomersManager('/v2/customers', client); this.checkoutSessions = new V2CheckoutSessionsManager('/v2/checkout_sessions', client); diff --git a/src/lib/managers/v2/index.ts b/src/lib/managers/v2/index.ts index e73bb74..1be4bbb 100644 --- a/src/lib/managers/v2/index.ts +++ b/src/lib/managers/v2/index.ts @@ -4,6 +4,7 @@ export * from './accountNumbersManager'; export * from './simulateManager'; export * from './entitiesManager'; export * from './accountVerificationsManager'; +export * from './invoicesManager'; export * from './movementsManager'; export * from './customersManager'; export * from './checkoutSessionsManager'; diff --git a/src/lib/managers/v2/invoicesManager.ts b/src/lib/managers/v2/invoicesManager.ts new file mode 100644 index 0000000..cf98225 --- /dev/null +++ b/src/lib/managers/v2/invoicesManager.ts @@ -0,0 +1,7 @@ +import { ManagerMixin } from '../../mixins'; +import { Invoice } from '../../resources/v2/invoice'; + +export class InvoicesManager extends ManagerMixin { + static resource = 'invoice'; + static methods = ['list', 'get']; +} diff --git a/src/lib/resources/v2/index.ts b/src/lib/resources/v2/index.ts index 1547f3d..4a9ad78 100644 --- a/src/lib/resources/v2/index.ts +++ b/src/lib/resources/v2/index.ts @@ -4,6 +4,7 @@ export * from './accountNumber'; export * from './entity'; export * from './accountVerification'; export * from './checkoutSession'; +export * from './invoice'; export * from './movement'; export * from './customer'; export * from './paymentIntent'; diff --git a/src/lib/resources/v2/invoice.ts b/src/lib/resources/v2/invoice.ts new file mode 100644 index 0000000..c260dc6 --- /dev/null +++ b/src/lib/resources/v2/invoice.ts @@ -0,0 +1,4 @@ +import { ResourceMixin } from '../../mixins/resourceMixin'; + +export class Invoice extends ResourceMixin { +} diff --git a/src/spec/integration.spec.ts b/src/spec/integration.spec.ts index 4f5f1c7..8fe58b4 100644 --- a/src/spec/integration.spec.ts +++ b/src/spec/integration.spec.ts @@ -1159,6 +1159,29 @@ test('fintoc.v2.checkoutSessions.expire()', async (t) => { t.is(checkoutSession.url, `v2/checkout_sessions/${checkoutSessionId}/expire`); }); +test('fintoc.v2.invoices.list()', async (t) => { + const ctx: any = t.context; + const invoices = await ctx.fintoc.v2.invoices.list(); + + let count = 0; + for await (const invoice of invoices) { + count += 1; + t.is(invoice.method, 'get'); + t.is(invoice.url, 'v2/invoices'); + } + + t.true(count > 0); +}); + +test('fintoc.v2.invoices.get()', async (t) => { + const ctx: any = t.context; + const invoiceId = 'invoice_id'; + const invoice = await ctx.fintoc.v2.invoices.get(invoiceId); + + t.is(invoice.method, 'get'); + t.is(invoice.url, `v2/invoices/${invoiceId}`); +}); + test('fintoc.v2.paymentIntents.list()', async (t) => { const ctx: any = t.context; const paymentIntents = await ctx.fintoc.v2.paymentIntents.list(); From 1abc3fe0efb5c79c482389dd74a3bee75577ffb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 23 Feb 2026 15:57:03 -0300 Subject: [PATCH 2/5] feat(managers/v2): add payment methods manager Co-Authored-By: Claude Opus 4.6 --- src/lib/core.ts | 3 +++ src/lib/managers/v2/index.ts | 1 + src/lib/managers/v2/paymentMethodsManager.ts | 7 ++++++ src/lib/resources/v2/index.ts | 1 + src/lib/resources/v2/paymentMethod.ts | 4 ++++ src/spec/integration.spec.ts | 23 ++++++++++++++++++++ 6 files changed, 39 insertions(+) create mode 100644 src/lib/managers/v2/paymentMethodsManager.ts create mode 100644 src/lib/resources/v2/paymentMethod.ts diff --git a/src/lib/core.ts b/src/lib/core.ts index 453c52e..01160f0 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -22,6 +22,7 @@ import { CustomersManager, EntitiesManager, InvoicesManager as V2InvoicesManager, + PaymentMethodsManager, SimulateManager, TransfersManager, AccountsManager as V2AccountsManager, @@ -41,6 +42,7 @@ class FintocV2 { customers: CustomersManager; checkoutSessions: V2CheckoutSessionsManager; paymentIntents: V2PaymentIntentsManager; + paymentMethods: PaymentMethodsManager; constructor(client: Client) { this.accounts = new V2AccountsManager('/v2/accounts', client); @@ -53,6 +55,7 @@ class FintocV2 { this.customers = new CustomersManager('/v2/customers', client); this.checkoutSessions = new V2CheckoutSessionsManager('/v2/checkout_sessions', client); this.paymentIntents = new V2PaymentIntentsManager('/v2/payment_intents', client); + this.paymentMethods = new PaymentMethodsManager('/v2/payment_methods', client); } } diff --git a/src/lib/managers/v2/index.ts b/src/lib/managers/v2/index.ts index 1be4bbb..c296a88 100644 --- a/src/lib/managers/v2/index.ts +++ b/src/lib/managers/v2/index.ts @@ -9,3 +9,4 @@ export * from './movementsManager'; export * from './customersManager'; export * from './checkoutSessionsManager'; export * from './paymentIntentsManager'; +export * from './paymentMethodsManager'; diff --git a/src/lib/managers/v2/paymentMethodsManager.ts b/src/lib/managers/v2/paymentMethodsManager.ts new file mode 100644 index 0000000..dee84d9 --- /dev/null +++ b/src/lib/managers/v2/paymentMethodsManager.ts @@ -0,0 +1,7 @@ +import { ManagerMixin } from '../../mixins'; +import { PaymentMethod } from '../../resources/v2/paymentMethod'; + +export class PaymentMethodsManager extends ManagerMixin { + static resource = 'payment_method'; + static methods = ['list', 'get']; +} diff --git a/src/lib/resources/v2/index.ts b/src/lib/resources/v2/index.ts index 4a9ad78..8d4cf44 100644 --- a/src/lib/resources/v2/index.ts +++ b/src/lib/resources/v2/index.ts @@ -8,3 +8,4 @@ export * from './invoice'; export * from './movement'; export * from './customer'; export * from './paymentIntent'; +export * from './paymentMethod'; diff --git a/src/lib/resources/v2/paymentMethod.ts b/src/lib/resources/v2/paymentMethod.ts new file mode 100644 index 0000000..5637766 --- /dev/null +++ b/src/lib/resources/v2/paymentMethod.ts @@ -0,0 +1,4 @@ +import { ResourceMixin } from '../../mixins/resourceMixin'; + +export class PaymentMethod extends ResourceMixin { +} diff --git a/src/spec/integration.spec.ts b/src/spec/integration.spec.ts index 8fe58b4..f63451d 100644 --- a/src/spec/integration.spec.ts +++ b/src/spec/integration.spec.ts @@ -1220,3 +1220,26 @@ test('fintoc.v2.paymentIntents.create()', async (t) => { t.is(paymentIntent.json.currency, paymentIntentData.currency); t.is(paymentIntent.json.payment_method, paymentIntentData.payment_method); }); + +test('fintoc.v2.paymentMethods.list()', async (t) => { + const ctx: any = t.context; + const paymentMethods = await ctx.fintoc.v2.paymentMethods.list(); + + let count = 0; + for await (const paymentMethod of paymentMethods) { + count += 1; + t.is(paymentMethod.method, 'get'); + t.is(paymentMethod.url, 'v2/payment_methods'); + } + + t.true(count > 0); +}); + +test('fintoc.v2.paymentMethods.get()', async (t) => { + const ctx: any = t.context; + const paymentMethodId = 'payment_method_id'; + const paymentMethod = await ctx.fintoc.v2.paymentMethods.get(paymentMethodId); + + t.is(paymentMethod.method, 'get'); + t.is(paymentMethod.url, `v2/payment_methods/${paymentMethodId}`); +}); From 1d929437818fc0f0c08bdb090dffa9bb4fe42aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 23 Feb 2026 15:58:32 -0300 Subject: [PATCH 3/5] feat(managers/v2): add subscriptions manager Co-Authored-By: Claude Opus 4.6 --- src/lib/core.ts | 3 ++ src/lib/managers/v2/index.ts | 1 + src/lib/managers/v2/subscriptionsManager.ts | 14 +++++++++ src/lib/resources/v2/index.ts | 1 + src/lib/resources/v2/subscription.ts | 4 +++ src/spec/integration.spec.ts | 32 +++++++++++++++++++++ 6 files changed, 55 insertions(+) create mode 100644 src/lib/managers/v2/subscriptionsManager.ts create mode 100644 src/lib/resources/v2/subscription.ts diff --git a/src/lib/core.ts b/src/lib/core.ts index 01160f0..8a9d9d4 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -24,6 +24,7 @@ import { InvoicesManager as V2InvoicesManager, PaymentMethodsManager, SimulateManager, + SubscriptionsManager as V2SubscriptionsManager, TransfersManager, AccountsManager as V2AccountsManager, CheckoutSessionsManager as V2CheckoutSessionsManager, @@ -43,6 +44,7 @@ class FintocV2 { checkoutSessions: V2CheckoutSessionsManager; paymentIntents: V2PaymentIntentsManager; paymentMethods: PaymentMethodsManager; + subscriptions: V2SubscriptionsManager; constructor(client: Client) { this.accounts = new V2AccountsManager('/v2/accounts', client); @@ -56,6 +58,7 @@ class FintocV2 { this.checkoutSessions = new V2CheckoutSessionsManager('/v2/checkout_sessions', client); this.paymentIntents = new V2PaymentIntentsManager('/v2/payment_intents', client); this.paymentMethods = new PaymentMethodsManager('/v2/payment_methods', client); + this.subscriptions = new V2SubscriptionsManager('/v2/subscriptions', client); } } diff --git a/src/lib/managers/v2/index.ts b/src/lib/managers/v2/index.ts index c296a88..13b568b 100644 --- a/src/lib/managers/v2/index.ts +++ b/src/lib/managers/v2/index.ts @@ -10,3 +10,4 @@ export * from './customersManager'; export * from './checkoutSessionsManager'; export * from './paymentIntentsManager'; export * from './paymentMethodsManager'; +export * from './subscriptionsManager'; diff --git a/src/lib/managers/v2/subscriptionsManager.ts b/src/lib/managers/v2/subscriptionsManager.ts new file mode 100644 index 0000000..438f108 --- /dev/null +++ b/src/lib/managers/v2/subscriptionsManager.ts @@ -0,0 +1,14 @@ +import { ResourceArguments } from '../../../types'; +import { ManagerMixin } from '../../mixins'; +import { Subscription } from '../../resources/v2/subscription'; + +export class SubscriptionsManager extends ManagerMixin { + static resource = 'subscription'; + static methods = ['list', 'get', 'cancel']; + + cancel(subscriptionId: string, args?: ResourceArguments): Promise { + const innerArgs = args || {}; + const path = `${this.buildPath()}/${subscriptionId}/cancel`; + return this._create({ path_: path, ...innerArgs }); + } +} diff --git a/src/lib/resources/v2/index.ts b/src/lib/resources/v2/index.ts index 8d4cf44..53fe445 100644 --- a/src/lib/resources/v2/index.ts +++ b/src/lib/resources/v2/index.ts @@ -9,3 +9,4 @@ export * from './movement'; export * from './customer'; export * from './paymentIntent'; export * from './paymentMethod'; +export * from './subscription'; diff --git a/src/lib/resources/v2/subscription.ts b/src/lib/resources/v2/subscription.ts new file mode 100644 index 0000000..fec563a --- /dev/null +++ b/src/lib/resources/v2/subscription.ts @@ -0,0 +1,4 @@ +import { ResourceMixin } from '../../mixins/resourceMixin'; + +export class Subscription extends ResourceMixin { +} diff --git a/src/spec/integration.spec.ts b/src/spec/integration.spec.ts index f63451d..22fc4bb 100644 --- a/src/spec/integration.spec.ts +++ b/src/spec/integration.spec.ts @@ -1243,3 +1243,35 @@ test('fintoc.v2.paymentMethods.get()', async (t) => { t.is(paymentMethod.method, 'get'); t.is(paymentMethod.url, `v2/payment_methods/${paymentMethodId}`); }); + +test('fintoc.v2.subscriptions.list()', async (t) => { + const ctx: any = t.context; + const subscriptions = await ctx.fintoc.v2.subscriptions.list(); + + let count = 0; + for await (const subscription of subscriptions) { + count += 1; + t.is(subscription.method, 'get'); + t.is(subscription.url, 'v2/subscriptions'); + } + + t.true(count > 0); +}); + +test('fintoc.v2.subscriptions.get()', async (t) => { + const ctx: any = t.context; + const subscriptionId = 'subscription_id'; + const subscription = await ctx.fintoc.v2.subscriptions.get(subscriptionId); + + t.is(subscription.method, 'get'); + t.is(subscription.url, `v2/subscriptions/${subscriptionId}`); +}); + +test('fintoc.v2.subscriptions.cancel()', async (t) => { + const ctx: any = t.context; + const subscriptionId = 'subscription_id'; + const subscription = await ctx.fintoc.v2.subscriptions.cancel(subscriptionId); + + t.is(subscription.method, 'post'); + t.is(subscription.url, `v2/subscriptions/${subscriptionId}/cancel`); +}); From 347fb13b35d3bfe766e70c6bd23e0da95989c843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 23 Feb 2026 16:14:13 -0300 Subject: [PATCH 4/5] fix linter --- src/lib/core.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/core.ts b/src/lib/core.ts index 8a9d9d4..ea4f6cc 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -21,14 +21,14 @@ import { AccountVerificationsManager, CustomersManager, EntitiesManager, - InvoicesManager as V2InvoicesManager, PaymentMethodsManager, SimulateManager, - SubscriptionsManager as V2SubscriptionsManager, TransfersManager, AccountsManager as V2AccountsManager, CheckoutSessionsManager as V2CheckoutSessionsManager, + InvoicesManager as V2InvoicesManager, PaymentIntentsManager as V2PaymentIntentsManager, + SubscriptionsManager as V2SubscriptionsManager, } from './managers/v2'; import { version } from './version'; From 0cf52fe530f273b30060e79fe7fc240add143201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 23 Feb 2026 16:15:47 -0300 Subject: [PATCH 5/5] pre-release: prepare 1.15.0 release --- package.json | 2 +- src/lib/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 824140e..f6882ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fintoc", - "version": "1.14.0", + "version": "1.15.0", "description": "The official Node client for the Fintoc API.", "main": "build/main/index.js", "typings": "build/main/index.d.ts", diff --git a/src/lib/version.ts b/src/lib/version.ts index 73a5709..afe33e9 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -1,3 +1,3 @@ -export const versionInfo = [1, 14, 0]; +export const versionInfo = [1, 15, 0]; export const version = versionInfo.join('.');