From 7a6c1f11165745ec564eec5c8b9e6c95c74eb552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pablo=20Castro=20Leal?= Date: Mon, 13 Apr 2026 19:13:35 -0400 Subject: [PATCH] feature: add support for products api --- src/lib/core.ts | 3 +++ src/lib/managers/v2/index.ts | 1 + src/lib/managers/v2/productsManager.ts | 7 +++++ src/lib/resources/v2/index.ts | 1 + src/lib/resources/v2/product.ts | 4 +++ src/spec/integration.spec.ts | 37 ++++++++++++++++++++++++++ 6 files changed, 53 insertions(+) create mode 100644 src/lib/managers/v2/productsManager.ts create mode 100644 src/lib/resources/v2/product.ts diff --git a/src/lib/core.ts b/src/lib/core.ts index ea4f6cc..4dce599 100644 --- a/src/lib/core.ts +++ b/src/lib/core.ts @@ -22,6 +22,7 @@ import { CustomersManager, EntitiesManager, PaymentMethodsManager, + ProductsManager, SimulateManager, TransfersManager, AccountsManager as V2AccountsManager, @@ -44,6 +45,7 @@ class FintocV2 { checkoutSessions: V2CheckoutSessionsManager; paymentIntents: V2PaymentIntentsManager; paymentMethods: PaymentMethodsManager; + products: ProductsManager; subscriptions: V2SubscriptionsManager; constructor(client: Client) { @@ -58,6 +60,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.products = new ProductsManager('/v2/products', 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 d69b966..d520808 100644 --- a/src/lib/managers/v2/index.ts +++ b/src/lib/managers/v2/index.ts @@ -10,5 +10,6 @@ export * from './customersManager'; export * from './checkoutSessionsManager'; export * from './paymentIntentsManager'; export * from './paymentMethodsManager'; +export * from './productsManager'; export * from './subscriptionsManager'; export * from './accountStatementsManager'; diff --git a/src/lib/managers/v2/productsManager.ts b/src/lib/managers/v2/productsManager.ts new file mode 100644 index 0000000..6b8716f --- /dev/null +++ b/src/lib/managers/v2/productsManager.ts @@ -0,0 +1,7 @@ +import { ManagerMixin } from '../../mixins'; +import { Product } from '../../resources/v2/product'; + +export class ProductsManager extends ManagerMixin { + static resource = 'product'; + static methods = ['create', 'get', 'list']; +} diff --git a/src/lib/resources/v2/index.ts b/src/lib/resources/v2/index.ts index 7bcb400..4c17868 100644 --- a/src/lib/resources/v2/index.ts +++ b/src/lib/resources/v2/index.ts @@ -9,5 +9,6 @@ export * from './movement'; export * from './customer'; export * from './paymentIntent'; export * from './paymentMethod'; +export * from './product'; export * from './subscription'; export * from './accountStatement'; diff --git a/src/lib/resources/v2/product.ts b/src/lib/resources/v2/product.ts new file mode 100644 index 0000000..2912b7b --- /dev/null +++ b/src/lib/resources/v2/product.ts @@ -0,0 +1,4 @@ +import { ResourceMixin } from '../../mixins/resourceMixin'; + +export class Product extends ResourceMixin { +} diff --git a/src/spec/integration.spec.ts b/src/spec/integration.spec.ts index 60720ec..654ce32 100644 --- a/src/spec/integration.spec.ts +++ b/src/spec/integration.spec.ts @@ -1301,3 +1301,40 @@ test('fintoc.v2.subscriptions.cancel()', async (t) => { t.is(subscription.method, 'post'); t.is(subscription.url, `v2/subscriptions/${subscriptionId}/cancel`); }); + +test('fintoc.v2.products.list()', async (t) => { + const ctx: any = t.context; + const products = await ctx.fintoc.v2.products.list(); + + let count = 0; + for await (const product of products) { + count += 1; + t.is(product.method, 'get'); + t.is(product.url, 'v2/products'); + } + + t.true(count > 0); +}); + +test('fintoc.v2.products.get()', async (t) => { + const ctx: any = t.context; + const productId = 'product_id'; + const product = await ctx.fintoc.v2.products.get(productId); + + t.is(product.method, 'get'); + t.is(product.url, `v2/products/${productId}`); +}); + +test('fintoc.v2.products.create()', async (t) => { + const ctx: any = t.context; + const productData = { + name: 'Test Product', + currency: 'CLP', + }; + const product = await ctx.fintoc.v2.products.create(productData); + + t.is(product.method, 'post'); + t.is(product.url, 'v2/products'); + t.is(product.json.name, productData.name); + t.is(product.json.currency, productData.currency); +});