@pabilo/sdk 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +274 -0
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# @pabilo/sdk
|
|
2
|
+
|
|
3
|
+
TypeScript/JavaScript SDK for [pabilo.app](https://pabilo.app) — the Venezuelan payment platform.
|
|
4
|
+
|
|
5
|
+
- Dual ESM / CommonJS output
|
|
6
|
+
- Full TypeScript types with discriminated unions
|
|
7
|
+
- Zero runtime dependencies
|
|
8
|
+
- Works with Next.js, Node.js, and any modern JS runtime
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @pabilo/sdk
|
|
14
|
+
# or
|
|
15
|
+
pnpm add @pabilo/sdk
|
|
16
|
+
# or
|
|
17
|
+
yarn add @pabilo/sdk
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { PabiloClient } from '@pabilo/sdk';
|
|
24
|
+
|
|
25
|
+
const pabilo = new PabiloClient({ apiKey: 'YOUR_API_KEY' });
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Bank accounts
|
|
31
|
+
|
|
32
|
+
### List bank accounts
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
const banks = await pabilo.bankAccounts.list();
|
|
36
|
+
|
|
37
|
+
for (const bank of banks) {
|
|
38
|
+
console.log(bank.id, bank.provider, bank.description);
|
|
39
|
+
// bank.bank_accounts → BankAccountEntry[]
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Create a bank account
|
|
44
|
+
|
|
45
|
+
Each provider has its own typed request shape — TypeScript will enforce the required fields.
|
|
46
|
+
|
|
47
|
+
**BDV personal (`VE_BAN`)**
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const bank = await pabilo.bankAccounts.create({
|
|
51
|
+
bankProvider: 'VE_BAN',
|
|
52
|
+
description: 'Mi cuenta BDV',
|
|
53
|
+
userBankPhone: '04241234567',
|
|
54
|
+
userBankDni: '12345678',
|
|
55
|
+
username: 'usuario_portal_bdv',
|
|
56
|
+
password: 'contraseña_portal_bdv',
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
console.log(bank.id); // use this id when creating payment links
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**BDV empresa (`VE_BAN_EMP_V2`)**
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
const bank = await pabilo.bankAccounts.create({
|
|
66
|
+
bankProvider: 'VE_BAN_EMP_V2',
|
|
67
|
+
description: 'Cuenta empresa BDV',
|
|
68
|
+
userBankPhone: '04241234567',
|
|
69
|
+
userBankDni: '12345678',
|
|
70
|
+
accountNumber: '0102000000000000000', // account number
|
|
71
|
+
apiKey: 'bdv_api_key_here',
|
|
72
|
+
metadata: [
|
|
73
|
+
{ key_name: 'SHOW_DATE_IN_GENERIC_MOVEMENTS', key_value: 'true' },
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Test bank (`BANK_TEST`)**
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const bank = await pabilo.bankAccounts.create({ bankProvider: 'BANK_TEST' });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Delete a bank account
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
await pabilo.bankAccounts.delete(bank.id);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Payment links
|
|
93
|
+
|
|
94
|
+
### Create a payment link
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
const link = await pabilo.paymentLinks.create({
|
|
98
|
+
amount: 4000,
|
|
99
|
+
description: 'Orden #1234',
|
|
100
|
+
userBankId: bank.id,
|
|
101
|
+
// optional
|
|
102
|
+
redirectUrl: 'https://myapp.com/gracias',
|
|
103
|
+
webhookUrl: 'https://myapp.com/webhook/pabilo',
|
|
104
|
+
notificationByWhatsapp: true,
|
|
105
|
+
name: 'Pago por servicio',
|
|
106
|
+
isUsd: false,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
console.log(link.url); // https://pabilo.app/pay/...
|
|
110
|
+
console.log(link.id);
|
|
111
|
+
console.log(link.status); // 'pending' | 'paid' | 'active' | 'expired' | 'cancelled'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Get payment link info
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const link = await pabilo.paymentLinks.getInfo(linkId);
|
|
118
|
+
console.log(link.status, link.amount);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Check if a payment link was paid
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
const paid = await pabilo.paymentLinks.isPaid(linkId);
|
|
125
|
+
if (paid) {
|
|
126
|
+
// fulfill the order
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Update a payment link
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
const updated = await pabilo.paymentLinks.update(linkId, {
|
|
134
|
+
amount: 5000,
|
|
135
|
+
description: 'Orden actualizada',
|
|
136
|
+
});
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Verify a payment by bank reference
|
|
142
|
+
|
|
143
|
+
Used to confirm that a specific bank transfer exists and matches the expected amount.
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
const result = await pabilo.payments.verify(userBankId, {
|
|
147
|
+
amount: 4000,
|
|
148
|
+
bankReference: '12345678',
|
|
149
|
+
movementType: 'GENERIC', // optional
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
if (result.found) {
|
|
153
|
+
console.log('Payment found!');
|
|
154
|
+
console.log(result.isNew); // true if first time seen
|
|
155
|
+
console.log(result.data.credit_cost);
|
|
156
|
+
console.log(result.data.user_bank_payment); // full payment object
|
|
157
|
+
} else {
|
|
158
|
+
// result.reason → 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND'
|
|
159
|
+
console.log('Not found:', result.reason);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The result is a **discriminated union** on `found`:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
type VerifyPaymentResult =
|
|
167
|
+
| { found: false; reason: 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND' }
|
|
168
|
+
| { found: true; isNew: boolean; data: PaymentData };
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Error handling
|
|
174
|
+
|
|
175
|
+
SDK methods throw `PabiloError` on API or network failures.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import { PabiloClient, PabiloError } from '@pabilo/sdk';
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
await pabilo.paymentLinks.create({ ... });
|
|
182
|
+
} catch (err) {
|
|
183
|
+
if (err instanceof PabiloError) {
|
|
184
|
+
console.error(err.code); // 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | ...
|
|
185
|
+
console.error(err.message); // human-readable message from the API
|
|
186
|
+
console.error(err.raw); // raw API response body
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Common error codes: `BAD_REQUEST`, `UNAUTHORIZED`, `NOT_FOUND`, `USER_BANK_ALREADY_EXISTS`, `INTERNAL_SERVER_ERROR`, `NETWORK_ERROR`.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Custom HTTP client
|
|
196
|
+
|
|
197
|
+
The SDK accepts an `IHttpClient` implementation for custom fetch behavior (retries, logging, etc.).
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
import { PabiloClient, FetchHttpClient, PabiloHttpClient } from '@pabilo/sdk';
|
|
201
|
+
|
|
202
|
+
// Default — uses globalThis.fetch
|
|
203
|
+
const pabilo = new PabiloClient({ apiKey: 'YOUR_API_KEY' });
|
|
204
|
+
|
|
205
|
+
// Custom base URL (e.g. for a proxy or staging environment)
|
|
206
|
+
const pabilo = new PabiloClient({
|
|
207
|
+
apiKey: 'YOUR_API_KEY',
|
|
208
|
+
baseUrl: 'https://staging.api.pabilo.app',
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// Bring your own HTTP client
|
|
212
|
+
class MyHttpClient extends FetchHttpClient { /* override request() */ }
|
|
213
|
+
const pabilo = new PabiloClient({ apiKey: 'YOUR_API_KEY', httpClient: new MyHttpClient() });
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Next.js usage
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
// lib/pabilo.ts
|
|
222
|
+
import { PabiloClient } from '@pabilo/sdk';
|
|
223
|
+
|
|
224
|
+
export const pabilo = new PabiloClient({
|
|
225
|
+
apiKey: process.env.PABILO_API_KEY!,
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
// app/api/checkout/route.ts
|
|
231
|
+
import { pabilo } from '@/lib/pabilo';
|
|
232
|
+
|
|
233
|
+
export async function POST(req: Request) {
|
|
234
|
+
const { bankId, amount } = await req.json();
|
|
235
|
+
|
|
236
|
+
const link = await pabilo.paymentLinks.create({
|
|
237
|
+
amount,
|
|
238
|
+
description: 'Checkout',
|
|
239
|
+
userBankId: bankId,
|
|
240
|
+
redirectUrl: `${process.env.NEXT_PUBLIC_URL}/gracias`,
|
|
241
|
+
webhookUrl: `${process.env.NEXT_PUBLIC_URL}/api/webhook/pabilo`,
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
return Response.json({ url: link.url, id: link.id });
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Types reference
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
import type {
|
|
254
|
+
UserBank,
|
|
255
|
+
BankAccountEntry,
|
|
256
|
+
PaymentLink,
|
|
257
|
+
PaymentLinkStatus, // 'pending' | 'paid' | 'active' | 'expired' | 'cancelled'
|
|
258
|
+
PaymentLinkType, // 'default' | 'fixed'
|
|
259
|
+
VerifyPaymentResult,
|
|
260
|
+
PaymentData,
|
|
261
|
+
UserBankPayment,
|
|
262
|
+
CreateUserBankRequest,
|
|
263
|
+
CreateVeBanRequest,
|
|
264
|
+
CreateVeBanEmpV2Request,
|
|
265
|
+
CreateBankTestRequest,
|
|
266
|
+
PabiloErrorCode,
|
|
267
|
+
} from '@pabilo/sdk';
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## License
|
|
273
|
+
|
|
274
|
+
MIT
|
package/dist/index.cjs
CHANGED
|
@@ -108,6 +108,9 @@ var BankAccountsResource = class {
|
|
|
108
108
|
const raw = res["userbank"] ?? res["user_bank"] ?? res["data"] ?? res;
|
|
109
109
|
return normalizeUserBank(raw);
|
|
110
110
|
}
|
|
111
|
+
async delete(id) {
|
|
112
|
+
await this.http.request({ method: "DELETE", path: `/usersbank/${id}/to-trash` });
|
|
113
|
+
}
|
|
111
114
|
async list() {
|
|
112
115
|
const res = await this.http.request({
|
|
113
116
|
method: "GET",
|
|
@@ -137,6 +140,9 @@ function normalizeBankAccount(raw) {
|
|
|
137
140
|
};
|
|
138
141
|
}
|
|
139
142
|
function buildCreateBody(req, userId) {
|
|
143
|
+
if (req.bankProvider === "BANK_TEST") {
|
|
144
|
+
return { bank_provider: req.bankProvider, user_id: userId };
|
|
145
|
+
}
|
|
140
146
|
const body = {
|
|
141
147
|
bank_provider: req.bankProvider,
|
|
142
148
|
description: req.description,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/domain/errors.ts","../src/infrastructure/fetch-http-client.ts","../src/infrastructure/pabilo-http-client.ts","../src/resources/bank-accounts.resource.ts","../src/resources/payment-links.resource.ts","../src/resources/payments.resource.ts","../src/resources/me.resource.ts","../src/client.ts"],"names":["code"],"mappings":"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","file":"index.cjs","sourcesContent":["export class PabiloError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly raw: unknown;\n\n constructor(opts: {\n message: string;\n code: string;\n statusCode?: number;\n raw?: unknown;\n }) {\n super(opts.message);\n this.name = 'PabiloError';\n this.code = opts.code;\n this.statusCode = opts.statusCode;\n this.raw = opts.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function parsePabiloError(body: unknown, statusCode: number): PabiloError {\n if (statusCode === 401) {\n return new PabiloError({ message: 'Unauthorized', code: 'UNAUTHORIZED', statusCode, raw: body });\n }\n if (statusCode === 404) {\n return new PabiloError({ message: 'Not found', code: 'NOT_FOUND', statusCode, raw: body });\n }\n\n if (body !== null && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n const code = typeof b['error'] === 'string' ? b['error'] : resolveCodeFromStatus(statusCode);\n const message = typeof b['message'] === 'string' ? b['message'] : code;\n return new PabiloError({ message, code, statusCode, raw: body });\n }\n\n const code = resolveCodeFromStatus(statusCode);\n return new PabiloError({ message: code, code, statusCode, raw: body });\n}\n\nfunction resolveCodeFromStatus(statusCode: number): string {\n if (statusCode >= 500) return 'INTERNAL_SERVER_ERROR';\n if (statusCode === 400) return 'BAD_REQUEST';\n return 'REQUEST_FAILED';\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { PabiloError, parsePabiloError } from '../domain/errors.js';\n\ntype FetchFn = typeof globalThis.fetch;\n\nexport class FetchHttpClient implements IHttpClient {\n private readonly fetchFn: FetchFn;\n\n constructor(fetchImpl?: FetchFn) {\n this.fetchFn = fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers = {} } = options;\n\n const init: RequestInit = { method, headers: { ...headers } };\n\n if (body !== undefined) {\n (init.headers as Record<string, string>)['content-type'] = 'application/json';\n init.body = JSON.stringify(body);\n }\n\n let response: Response;\n try {\n response = await this.fetchFn(path, init);\n } catch (cause) {\n throw new PabiloError({\n message: cause instanceof Error ? cause.message : 'Network request failed',\n code: 'NETWORK_ERROR',\n raw: cause,\n });\n }\n\n let responseBody: unknown;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = null;\n }\n\n if (!response.ok) {\n throw parsePabiloError(responseBody, response.status);\n }\n\n return responseBody as T;\n }\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { FetchHttpClient } from './fetch-http-client.js';\n\nexport interface PabiloHttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.pabilo.app';\n\nexport class PabiloHttpClient implements IHttpClient {\n private readonly inner: IHttpClient;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(options: PabiloHttpClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.inner = options.httpClient ?? new FetchHttpClient();\n }\n\n request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`;\n return this.inner.request<T>({\n ...options,\n path: url,\n headers: {\n ...options.headers,\n appKey: this.apiKey,\n },\n });\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IBankAccountsPort } from '../ports/bank-accounts.js';\nimport type { UserBank, BankAccountEntry, CreateUserBankRequest } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreateUserBankRequest): Promise<UserBank> {\n // API requires user_id in the body — fetch it transparently from /me\n const meRes = await this.http.request<Record<string, unknown>>({ method: 'GET', path: '/me' });\n const userId = String(\n (meRes['user'] as Record<string, unknown> | undefined)?.['id'] ?? meRes['id'] ?? ''\n );\n\n const body = buildCreateBody(req, userId);\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/usersbank',\n body,\n });\n\n // Response: { message, userbank: {...} } | { user_bank: {...} } | { data: {...} } | root\n const raw = (res['userbank'] ?? res['user_bank'] ?? res['data'] ?? res) as Record<string, unknown>;\n return normalizeUserBank(raw);\n }\n\n async list(): Promise<UserBank[]> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/usersbank',\n });\n\n const raw =\n Array.isArray(res['user_banks']) ? res['user_banks'] :\n Array.isArray(res['data']) ? res['data'] :\n [];\n\n return (raw as unknown[]).map(normalizeUserBank);\n }\n}\n\nfunction normalizeUserBank(raw: unknown): UserBank {\n const b = raw as Record<string, unknown>;\n const bankAccounts = Array.isArray(b['bank_accounts'])\n ? (b['bank_accounts'] as unknown[]).map(normalizeBankAccount)\n : [];\n\n return {\n id: String(b['id'] ?? ''),\n description: String(b['description'] ?? ''),\n provider: String(b['provider'] ?? ''),\n bank_accounts: bankAccounts,\n ...(typeof b['payment_link'] === 'boolean' ? { payment_link: b['payment_link'] } : {}),\n ...(typeof b['to_trash'] === 'boolean' ? { to_trash: b['to_trash'] } : {}),\n };\n}\n\nfunction normalizeBankAccount(raw: unknown): BankAccountEntry {\n const a = raw as Record<string, unknown>;\n return {\n account_number: String(a['account_number'] ?? ''),\n account_type: String(a['account_type'] ?? a['type'] ?? ''),\n };\n}\n\nfunction buildCreateBody(req: CreateUserBankRequest, userId: string): Record<string, unknown> {\n const body: Record<string, unknown> = {\n bank_provider: req.bankProvider,\n description: req.description,\n user_bank_phone: req.userBankPhone,\n user_bank_dni: req.userBankDni,\n user_id: userId,\n metadata: req.metadata ?? [],\n };\n\n switch (req.bankProvider) {\n case 'VE_BAN':\n body['username'] = req.username;\n body['password'] = req.password;\n break;\n case 'VE_BAN_EMP_V2':\n body['username'] = req.accountNumber;\n body['password'] = req.apiKey;\n break;\n }\n\n return body;\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentLinksPort } from '../ports/payment-links.js';\nimport type {\n PaymentLink,\n CreatePaymentLinkRequest,\n UpdatePaymentLinkRequest,\n} from '../domain/types.js';\n\nexport class PaymentLinksResource implements IPaymentLinksPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {\n amount: req.amount,\n description: req.description,\n user_bank_id: req.userBankId,\n currency: req.currency ?? 'VES',\n };\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.webhookUrl !== undefined) body['webhook_url'] = req.webhookUrl;\n if (req.notificationByWhatsapp !== undefined) body['notification_by_whastapp'] = req.notificationByWhatsapp;\n if (req.name !== undefined) body['name'] = req.name;\n if (req.isUsd !== undefined) body['is_usd'] = req.isUsd;\n if (req.metadata !== undefined) body['metadata'] = req.metadata;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/v1/paymentlink',\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async update(id: string, req: UpdatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {};\n if (req.amount !== undefined) body['amount'] = req.amount;\n if (req.description !== undefined) body['description'] = req.description;\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.currency !== undefined) body['currency'] = req.currency;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'PATCH',\n path: `/paymentlink/${id}/patch`,\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async isPaid(id: string): Promise<boolean> {\n const info = await this.getInfo(id);\n return info.status === 'paid';\n }\n\n async getInfo(id: string): Promise<PaymentLink> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: `/paymentlink/${id}/info`,\n });\n return normalizePaymentLink(res);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shapes: { paymentlink: {...} } | { data: { payment_link: {...} } } | { data: {...} } | root\n const dataWrap = raw['data'] as Record<string, unknown> | undefined;\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (dataWrap?.['payment_link'] as Record<string, unknown> | undefined) ??\n dataWrap ??\n raw;\n\n const userId = typeof src['user_id'] === 'string' ? src['user_id'] :\n typeof src['userId'] === 'string' ? src['userId'] : undefined;\n\n return {\n id: String(src['id'] ?? ''),\n url: String(src['url'] ?? ''),\n ...(typeof src['amount'] === 'number' ? { amount: src['amount'] } : {}),\n ...(typeof src['status'] === 'string' ? { status: src['status'] } : {}),\n ...(typeof src['type'] === 'string' ? { type: src['type'] } : {}),\n ...(userId !== undefined ? { userId } : {}),\n ...(typeof src['name'] === 'string' ? { name: src['name'] } : {}),\n ...(typeof src['description'] === 'string' ? { description: src['description'] } : {}),\n ...(typeof src['is_usd'] === 'boolean' ? { isUsd: src['is_usd'] } : {}),\n ...(typeof src['redirect_url'] === 'string' ? { redirectUrl: src['redirect_url'] } : {}),\n ...(typeof src['webhook_url'] === 'string' ? { webhookUrl: src['webhook_url'] } : {}),\n ...(typeof src['notification_by_whastapp'] === 'boolean' ? { notificationByWhatsapp: src['notification_by_whastapp'] } : {}),\n ...(typeof src['expiration_time'] === 'number' ? { expirationTime: src['expiration_time'] } : {}),\n ...(typeof src['payment_link_origin'] === 'string' ? { paymentLinkOrigin: src['payment_link_origin'] } : {}),\n ...(typeof src['created_at'] === 'string' ? { createdAt: src['created_at'] } : {}),\n ...(typeof src['updated_at'] === 'string' ? { updatedAt: src['updated_at'] } : {}),\n };\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentsPort } from '../ports/payments.js';\nimport type { VerifyPaymentRequest, VerifyPaymentResult, PaymentData } from '../domain/types.js';\n\nexport class PaymentsResource implements IPaymentsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async verify(userBankId: string, req: VerifyPaymentRequest): Promise<VerifyPaymentResult> {\n // This endpoint returns HTTP 200 even for domain errors (BANK_NOT_AVAILABLE, PAYMENT_NOT_FOUND).\n // We read the raw response and interpret it ourselves instead of letting the HTTP client throw.\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: `/userbankpayment/${userBankId}/betaserio`,\n body: {\n amount: req.amount,\n bank_reference: req.bankReference,\n movement_type: req.movementType ?? 'GENERIC',\n },\n });\n\n if (res['error'] === 'BANK_NOT_AVAILABLE') {\n return { found: false, reason: 'BANK_NOT_AVAILABLE' };\n }\n\n if (res['error'] === 'PAYMENT_NOT_FOUND') {\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n\n const data = res['data'] as Record<string, unknown> | undefined;\n if (data !== undefined) {\n return {\n found: true,\n isNew: data['is_new'] === true,\n data: data as PaymentData,\n };\n }\n\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IMePort } from '../ports/me.js';\nimport type { User, Plan } from '../domain/types.js';\n\nexport class MeResource implements IMePort {\n constructor(private readonly http: IHttpClient) {}\n\n async getMe(): Promise<User> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me',\n });\n const u = (res['user'] ?? res) as Record<string, unknown>;\n return {\n id: String(u['id'] ?? ''),\n ...(typeof u['email'] === 'string' ? { email: u['email'] } : {}),\n ...(typeof u['name'] === 'string' ? { name: u['name'] } : {}),\n };\n }\n\n async getPlan(): Promise<Plan> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/plan',\n });\n return {\n name: String(res['name'] ?? ''),\n ...(typeof res['planType'] === 'string' ? { planType: res['planType'] } : {}),\n };\n }\n}\n","import { PabiloHttpClient } from './infrastructure/pabilo-http-client.js';\nimport { BankAccountsResource } from './resources/bank-accounts.resource.js';\nimport { PaymentLinksResource } from './resources/payment-links.resource.js';\nimport { PaymentsResource } from './resources/payments.resource.js';\nimport { MeResource } from './resources/me.resource.js';\nimport type { IHttpClient } from './ports/http.js';\nimport type { IBankAccountsPort } from './ports/bank-accounts.js';\nimport type { IPaymentLinksPort } from './ports/payment-links.js';\nimport type { IPaymentsPort } from './ports/payments.js';\nimport type { IMePort } from './ports/me.js';\n\nexport interface PabiloClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nexport class PabiloClient {\n readonly me: IMePort;\n readonly bankAccounts: IBankAccountsPort;\n readonly paymentLinks: IPaymentLinksPort;\n readonly payments: IPaymentsPort;\n\n constructor(options: PabiloClientOptions) {\n const http: IHttpClient = options.httpClient ?? new PabiloHttpClient({\n apiKey: options.apiKey,\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n });\n\n this.me = new MeResource(http);\n this.bankAccounts = new BankAccountsResource(http);\n this.paymentLinks = new PaymentLinksResource(http);\n this.payments = new PaymentsResource(http);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/domain/errors.ts","../src/infrastructure/fetch-http-client.ts","../src/infrastructure/pabilo-http-client.ts","../src/resources/bank-accounts.resource.ts","../src/resources/payment-links.resource.ts","../src/resources/payments.resource.ts","../src/resources/me.resource.ts","../src/client.ts"],"names":["code"],"mappings":"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","file":"index.cjs","sourcesContent":["export class PabiloError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly raw: unknown;\n\n constructor(opts: {\n message: string;\n code: string;\n statusCode?: number;\n raw?: unknown;\n }) {\n super(opts.message);\n this.name = 'PabiloError';\n this.code = opts.code;\n this.statusCode = opts.statusCode;\n this.raw = opts.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function parsePabiloError(body: unknown, statusCode: number): PabiloError {\n if (statusCode === 401) {\n return new PabiloError({ message: 'Unauthorized', code: 'UNAUTHORIZED', statusCode, raw: body });\n }\n if (statusCode === 404) {\n return new PabiloError({ message: 'Not found', code: 'NOT_FOUND', statusCode, raw: body });\n }\n\n if (body !== null && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n const code = typeof b['error'] === 'string' ? b['error'] : resolveCodeFromStatus(statusCode);\n const message = typeof b['message'] === 'string' ? b['message'] : code;\n return new PabiloError({ message, code, statusCode, raw: body });\n }\n\n const code = resolveCodeFromStatus(statusCode);\n return new PabiloError({ message: code, code, statusCode, raw: body });\n}\n\nfunction resolveCodeFromStatus(statusCode: number): string {\n if (statusCode >= 500) return 'INTERNAL_SERVER_ERROR';\n if (statusCode === 400) return 'BAD_REQUEST';\n return 'REQUEST_FAILED';\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { PabiloError, parsePabiloError } from '../domain/errors.js';\n\ntype FetchFn = typeof globalThis.fetch;\n\nexport class FetchHttpClient implements IHttpClient {\n private readonly fetchFn: FetchFn;\n\n constructor(fetchImpl?: FetchFn) {\n this.fetchFn = fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers = {} } = options;\n\n const init: RequestInit = { method, headers: { ...headers } };\n\n if (body !== undefined) {\n (init.headers as Record<string, string>)['content-type'] = 'application/json';\n init.body = JSON.stringify(body);\n }\n\n let response: Response;\n try {\n response = await this.fetchFn(path, init);\n } catch (cause) {\n throw new PabiloError({\n message: cause instanceof Error ? cause.message : 'Network request failed',\n code: 'NETWORK_ERROR',\n raw: cause,\n });\n }\n\n let responseBody: unknown;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = null;\n }\n\n if (!response.ok) {\n throw parsePabiloError(responseBody, response.status);\n }\n\n return responseBody as T;\n }\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { FetchHttpClient } from './fetch-http-client.js';\n\nexport interface PabiloHttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.pabilo.app';\n\nexport class PabiloHttpClient implements IHttpClient {\n private readonly inner: IHttpClient;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(options: PabiloHttpClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.inner = options.httpClient ?? new FetchHttpClient();\n }\n\n request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`;\n return this.inner.request<T>({\n ...options,\n path: url,\n headers: {\n ...options.headers,\n appKey: this.apiKey,\n },\n });\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IBankAccountsPort } from '../ports/bank-accounts.js';\nimport type { UserBank, BankAccountEntry, CreateUserBankRequest } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreateUserBankRequest): Promise<UserBank> {\n // API requires user_id in the body — fetch it transparently from /me\n const meRes = await this.http.request<Record<string, unknown>>({ method: 'GET', path: '/me' });\n const userId = String(\n (meRes['user'] as Record<string, unknown> | undefined)?.['id'] ?? meRes['id'] ?? ''\n );\n\n const body = buildCreateBody(req, userId);\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/usersbank',\n body,\n });\n\n // Response: { message, userbank: {...} } | { user_bank: {...} } | { data: {...} } | root\n const raw = (res['userbank'] ?? res['user_bank'] ?? res['data'] ?? res) as Record<string, unknown>;\n return normalizeUserBank(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.http.request({ method: 'DELETE', path: `/usersbank/${id}/to-trash` });\n }\n\n async list(): Promise<UserBank[]> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/usersbank',\n });\n\n const raw =\n Array.isArray(res['user_banks']) ? res['user_banks'] :\n Array.isArray(res['data']) ? res['data'] :\n [];\n\n return (raw as unknown[]).map(normalizeUserBank);\n }\n}\n\nfunction normalizeUserBank(raw: unknown): UserBank {\n const b = raw as Record<string, unknown>;\n const bankAccounts = Array.isArray(b['bank_accounts'])\n ? (b['bank_accounts'] as unknown[]).map(normalizeBankAccount)\n : [];\n\n return {\n id: String(b['id'] ?? ''),\n description: String(b['description'] ?? ''),\n provider: String(b['provider'] ?? ''),\n bank_accounts: bankAccounts,\n ...(typeof b['payment_link'] === 'boolean' ? { payment_link: b['payment_link'] } : {}),\n ...(typeof b['to_trash'] === 'boolean' ? { to_trash: b['to_trash'] } : {}),\n };\n}\n\nfunction normalizeBankAccount(raw: unknown): BankAccountEntry {\n const a = raw as Record<string, unknown>;\n return {\n account_number: String(a['account_number'] ?? ''),\n account_type: String(a['account_type'] ?? a['type'] ?? ''),\n };\n}\n\nfunction buildCreateBody(req: CreateUserBankRequest, userId: string): Record<string, unknown> {\n if (req.bankProvider === 'BANK_TEST') {\n return { bank_provider: req.bankProvider, user_id: userId };\n }\n\n const body: Record<string, unknown> = {\n bank_provider: req.bankProvider,\n description: req.description,\n user_bank_phone: req.userBankPhone,\n user_bank_dni: req.userBankDni,\n user_id: userId,\n metadata: req.metadata ?? [],\n };\n\n switch (req.bankProvider) {\n case 'VE_BAN':\n body['username'] = req.username;\n body['password'] = req.password;\n break;\n case 'VE_BAN_EMP_V2':\n body['username'] = req.accountNumber;\n body['password'] = req.apiKey;\n break;\n }\n\n return body;\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentLinksPort } from '../ports/payment-links.js';\nimport type {\n PaymentLink,\n CreatePaymentLinkRequest,\n UpdatePaymentLinkRequest,\n} from '../domain/types.js';\n\nexport class PaymentLinksResource implements IPaymentLinksPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {\n amount: req.amount,\n description: req.description,\n user_bank_id: req.userBankId,\n currency: req.currency ?? 'VES',\n };\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.webhookUrl !== undefined) body['webhook_url'] = req.webhookUrl;\n if (req.notificationByWhatsapp !== undefined) body['notification_by_whastapp'] = req.notificationByWhatsapp;\n if (req.name !== undefined) body['name'] = req.name;\n if (req.isUsd !== undefined) body['is_usd'] = req.isUsd;\n if (req.metadata !== undefined) body['metadata'] = req.metadata;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/v1/paymentlink',\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async update(id: string, req: UpdatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {};\n if (req.amount !== undefined) body['amount'] = req.amount;\n if (req.description !== undefined) body['description'] = req.description;\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.currency !== undefined) body['currency'] = req.currency;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'PATCH',\n path: `/paymentlink/${id}/patch`,\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async isPaid(id: string): Promise<boolean> {\n const info = await this.getInfo(id);\n return info.status === 'paid';\n }\n\n async getInfo(id: string): Promise<PaymentLink> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: `/paymentlink/${id}/info`,\n });\n return normalizePaymentLink(res);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shapes: { paymentlink: {...} } | { data: { payment_link: {...} } } | { data: {...} } | root\n const dataWrap = raw['data'] as Record<string, unknown> | undefined;\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (dataWrap?.['payment_link'] as Record<string, unknown> | undefined) ??\n dataWrap ??\n raw;\n\n const userId = typeof src['user_id'] === 'string' ? src['user_id'] :\n typeof src['userId'] === 'string' ? src['userId'] : undefined;\n\n return {\n id: String(src['id'] ?? ''),\n url: String(src['url'] ?? ''),\n ...(typeof src['amount'] === 'number' ? { amount: src['amount'] } : {}),\n ...(typeof src['status'] === 'string' ? { status: src['status'] } : {}),\n ...(typeof src['type'] === 'string' ? { type: src['type'] } : {}),\n ...(userId !== undefined ? { userId } : {}),\n ...(typeof src['name'] === 'string' ? { name: src['name'] } : {}),\n ...(typeof src['description'] === 'string' ? { description: src['description'] } : {}),\n ...(typeof src['is_usd'] === 'boolean' ? { isUsd: src['is_usd'] } : {}),\n ...(typeof src['redirect_url'] === 'string' ? { redirectUrl: src['redirect_url'] } : {}),\n ...(typeof src['webhook_url'] === 'string' ? { webhookUrl: src['webhook_url'] } : {}),\n ...(typeof src['notification_by_whastapp'] === 'boolean' ? { notificationByWhatsapp: src['notification_by_whastapp'] } : {}),\n ...(typeof src['expiration_time'] === 'number' ? { expirationTime: src['expiration_time'] } : {}),\n ...(typeof src['payment_link_origin'] === 'string' ? { paymentLinkOrigin: src['payment_link_origin'] } : {}),\n ...(typeof src['created_at'] === 'string' ? { createdAt: src['created_at'] } : {}),\n ...(typeof src['updated_at'] === 'string' ? { updatedAt: src['updated_at'] } : {}),\n };\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentsPort } from '../ports/payments.js';\nimport type { VerifyPaymentRequest, VerifyPaymentResult, PaymentData } from '../domain/types.js';\n\nexport class PaymentsResource implements IPaymentsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async verify(userBankId: string, req: VerifyPaymentRequest): Promise<VerifyPaymentResult> {\n // This endpoint returns HTTP 200 even for domain errors (BANK_NOT_AVAILABLE, PAYMENT_NOT_FOUND).\n // We read the raw response and interpret it ourselves instead of letting the HTTP client throw.\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: `/userbankpayment/${userBankId}/betaserio`,\n body: {\n amount: req.amount,\n bank_reference: req.bankReference,\n movement_type: req.movementType ?? 'GENERIC',\n },\n });\n\n if (res['error'] === 'BANK_NOT_AVAILABLE') {\n return { found: false, reason: 'BANK_NOT_AVAILABLE' };\n }\n\n if (res['error'] === 'PAYMENT_NOT_FOUND') {\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n\n const data = res['data'] as Record<string, unknown> | undefined;\n if (data !== undefined) {\n return {\n found: true,\n isNew: data['is_new'] === true,\n data: data as PaymentData,\n };\n }\n\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IMePort } from '../ports/me.js';\nimport type { User, Plan } from '../domain/types.js';\n\nexport class MeResource implements IMePort {\n constructor(private readonly http: IHttpClient) {}\n\n async getMe(): Promise<User> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me',\n });\n const u = (res['user'] ?? res) as Record<string, unknown>;\n return {\n id: String(u['id'] ?? ''),\n ...(typeof u['email'] === 'string' ? { email: u['email'] } : {}),\n ...(typeof u['name'] === 'string' ? { name: u['name'] } : {}),\n };\n }\n\n async getPlan(): Promise<Plan> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/plan',\n });\n return {\n name: String(res['name'] ?? ''),\n ...(typeof res['planType'] === 'string' ? { planType: res['planType'] } : {}),\n };\n }\n}\n","import { PabiloHttpClient } from './infrastructure/pabilo-http-client.js';\nimport { BankAccountsResource } from './resources/bank-accounts.resource.js';\nimport { PaymentLinksResource } from './resources/payment-links.resource.js';\nimport { PaymentsResource } from './resources/payments.resource.js';\nimport { MeResource } from './resources/me.resource.js';\nimport type { IHttpClient } from './ports/http.js';\nimport type { IBankAccountsPort } from './ports/bank-accounts.js';\nimport type { IPaymentLinksPort } from './ports/payment-links.js';\nimport type { IPaymentsPort } from './ports/payments.js';\nimport type { IMePort } from './ports/me.js';\n\nexport interface PabiloClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nexport class PabiloClient {\n readonly me: IMePort;\n readonly bankAccounts: IBankAccountsPort;\n readonly paymentLinks: IPaymentLinksPort;\n readonly payments: IPaymentsPort;\n\n constructor(options: PabiloClientOptions) {\n const http: IHttpClient = options.httpClient ?? new PabiloHttpClient({\n apiKey: options.apiKey,\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n });\n\n this.me = new MeResource(http);\n this.bankAccounts = new BankAccountsResource(http);\n this.paymentLinks = new PaymentLinksResource(http);\n this.payments = new PaymentsResource(http);\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -135,11 +135,15 @@ interface CreateVeBanEmpV2Request extends BaseCreateUserBankRequest {
|
|
|
135
135
|
accountNumber: string;
|
|
136
136
|
apiKey: string;
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
interface CreateBankTestRequest {
|
|
139
|
+
bankProvider: 'BANK_TEST';
|
|
140
|
+
}
|
|
141
|
+
type CreateUserBankRequest = CreateVeBanRequest | CreateVeBanEmpV2Request | CreateBankTestRequest;
|
|
139
142
|
|
|
140
143
|
interface IBankAccountsPort {
|
|
141
144
|
list(): Promise<UserBank[]>;
|
|
142
145
|
create(req: CreateUserBankRequest): Promise<UserBank>;
|
|
146
|
+
delete(id: string): Promise<void>;
|
|
143
147
|
}
|
|
144
148
|
|
|
145
149
|
interface IPaymentLinksPort {
|
|
@@ -203,4 +207,4 @@ declare class PabiloHttpClient implements IHttpClient {
|
|
|
203
207
|
request<T>(options: RequestOptions): Promise<T>;
|
|
204
208
|
}
|
|
205
209
|
|
|
206
|
-
export { type AccountType, type BankAccountEntry, type BankProvider, type CreatePaymentLinkRequest, type CreateUserBankRequest, type CreateVeBanEmpV2Request, type CreateVeBanRequest, FetchHttpClient, type IBankAccountsPort, type IHttpClient, type IMePort, type IPaymentLinksPort, type IPaymentsPort, PabiloClient, type PabiloClientOptions, PabiloError, type PabiloErrorCode, PabiloHttpClient, type PabiloHttpClientOptions, type PaymentData, type PaymentLink, type PaymentLinkStatus, type PaymentLinkType, type PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankMetadataEntry, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
|
|
210
|
+
export { type AccountType, type BankAccountEntry, type BankProvider, type CreateBankTestRequest, type CreatePaymentLinkRequest, type CreateUserBankRequest, type CreateVeBanEmpV2Request, type CreateVeBanRequest, FetchHttpClient, type IBankAccountsPort, type IHttpClient, type IMePort, type IPaymentLinksPort, type IPaymentsPort, PabiloClient, type PabiloClientOptions, PabiloError, type PabiloErrorCode, PabiloHttpClient, type PabiloHttpClientOptions, type PaymentData, type PaymentLink, type PaymentLinkStatus, type PaymentLinkType, type PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankMetadataEntry, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
|
package/dist/index.d.ts
CHANGED
|
@@ -135,11 +135,15 @@ interface CreateVeBanEmpV2Request extends BaseCreateUserBankRequest {
|
|
|
135
135
|
accountNumber: string;
|
|
136
136
|
apiKey: string;
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
interface CreateBankTestRequest {
|
|
139
|
+
bankProvider: 'BANK_TEST';
|
|
140
|
+
}
|
|
141
|
+
type CreateUserBankRequest = CreateVeBanRequest | CreateVeBanEmpV2Request | CreateBankTestRequest;
|
|
139
142
|
|
|
140
143
|
interface IBankAccountsPort {
|
|
141
144
|
list(): Promise<UserBank[]>;
|
|
142
145
|
create(req: CreateUserBankRequest): Promise<UserBank>;
|
|
146
|
+
delete(id: string): Promise<void>;
|
|
143
147
|
}
|
|
144
148
|
|
|
145
149
|
interface IPaymentLinksPort {
|
|
@@ -203,4 +207,4 @@ declare class PabiloHttpClient implements IHttpClient {
|
|
|
203
207
|
request<T>(options: RequestOptions): Promise<T>;
|
|
204
208
|
}
|
|
205
209
|
|
|
206
|
-
export { type AccountType, type BankAccountEntry, type BankProvider, type CreatePaymentLinkRequest, type CreateUserBankRequest, type CreateVeBanEmpV2Request, type CreateVeBanRequest, FetchHttpClient, type IBankAccountsPort, type IHttpClient, type IMePort, type IPaymentLinksPort, type IPaymentsPort, PabiloClient, type PabiloClientOptions, PabiloError, type PabiloErrorCode, PabiloHttpClient, type PabiloHttpClientOptions, type PaymentData, type PaymentLink, type PaymentLinkStatus, type PaymentLinkType, type PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankMetadataEntry, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
|
|
210
|
+
export { type AccountType, type BankAccountEntry, type BankProvider, type CreateBankTestRequest, type CreatePaymentLinkRequest, type CreateUserBankRequest, type CreateVeBanEmpV2Request, type CreateVeBanRequest, FetchHttpClient, type IBankAccountsPort, type IHttpClient, type IMePort, type IPaymentLinksPort, type IPaymentsPort, PabiloClient, type PabiloClientOptions, PabiloError, type PabiloErrorCode, PabiloHttpClient, type PabiloHttpClientOptions, type PaymentData, type PaymentLink, type PaymentLinkStatus, type PaymentLinkType, type PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankMetadataEntry, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
|
package/dist/index.js
CHANGED
|
@@ -106,6 +106,9 @@ var BankAccountsResource = class {
|
|
|
106
106
|
const raw = res["userbank"] ?? res["user_bank"] ?? res["data"] ?? res;
|
|
107
107
|
return normalizeUserBank(raw);
|
|
108
108
|
}
|
|
109
|
+
async delete(id) {
|
|
110
|
+
await this.http.request({ method: "DELETE", path: `/usersbank/${id}/to-trash` });
|
|
111
|
+
}
|
|
109
112
|
async list() {
|
|
110
113
|
const res = await this.http.request({
|
|
111
114
|
method: "GET",
|
|
@@ -135,6 +138,9 @@ function normalizeBankAccount(raw) {
|
|
|
135
138
|
};
|
|
136
139
|
}
|
|
137
140
|
function buildCreateBody(req, userId) {
|
|
141
|
+
if (req.bankProvider === "BANK_TEST") {
|
|
142
|
+
return { bank_provider: req.bankProvider, user_id: userId };
|
|
143
|
+
}
|
|
138
144
|
const body = {
|
|
139
145
|
bank_provider: req.bankProvider,
|
|
140
146
|
description: req.description,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/domain/errors.ts","../src/infrastructure/fetch-http-client.ts","../src/infrastructure/pabilo-http-client.ts","../src/resources/bank-accounts.resource.ts","../src/resources/payment-links.resource.ts","../src/resources/payments.resource.ts","../src/resources/me.resource.ts","../src/client.ts"],"names":["code"],"mappings":"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","file":"index.js","sourcesContent":["export class PabiloError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly raw: unknown;\n\n constructor(opts: {\n message: string;\n code: string;\n statusCode?: number;\n raw?: unknown;\n }) {\n super(opts.message);\n this.name = 'PabiloError';\n this.code = opts.code;\n this.statusCode = opts.statusCode;\n this.raw = opts.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function parsePabiloError(body: unknown, statusCode: number): PabiloError {\n if (statusCode === 401) {\n return new PabiloError({ message: 'Unauthorized', code: 'UNAUTHORIZED', statusCode, raw: body });\n }\n if (statusCode === 404) {\n return new PabiloError({ message: 'Not found', code: 'NOT_FOUND', statusCode, raw: body });\n }\n\n if (body !== null && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n const code = typeof b['error'] === 'string' ? b['error'] : resolveCodeFromStatus(statusCode);\n const message = typeof b['message'] === 'string' ? b['message'] : code;\n return new PabiloError({ message, code, statusCode, raw: body });\n }\n\n const code = resolveCodeFromStatus(statusCode);\n return new PabiloError({ message: code, code, statusCode, raw: body });\n}\n\nfunction resolveCodeFromStatus(statusCode: number): string {\n if (statusCode >= 500) return 'INTERNAL_SERVER_ERROR';\n if (statusCode === 400) return 'BAD_REQUEST';\n return 'REQUEST_FAILED';\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { PabiloError, parsePabiloError } from '../domain/errors.js';\n\ntype FetchFn = typeof globalThis.fetch;\n\nexport class FetchHttpClient implements IHttpClient {\n private readonly fetchFn: FetchFn;\n\n constructor(fetchImpl?: FetchFn) {\n this.fetchFn = fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers = {} } = options;\n\n const init: RequestInit = { method, headers: { ...headers } };\n\n if (body !== undefined) {\n (init.headers as Record<string, string>)['content-type'] = 'application/json';\n init.body = JSON.stringify(body);\n }\n\n let response: Response;\n try {\n response = await this.fetchFn(path, init);\n } catch (cause) {\n throw new PabiloError({\n message: cause instanceof Error ? cause.message : 'Network request failed',\n code: 'NETWORK_ERROR',\n raw: cause,\n });\n }\n\n let responseBody: unknown;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = null;\n }\n\n if (!response.ok) {\n throw parsePabiloError(responseBody, response.status);\n }\n\n return responseBody as T;\n }\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { FetchHttpClient } from './fetch-http-client.js';\n\nexport interface PabiloHttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.pabilo.app';\n\nexport class PabiloHttpClient implements IHttpClient {\n private readonly inner: IHttpClient;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(options: PabiloHttpClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.inner = options.httpClient ?? new FetchHttpClient();\n }\n\n request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`;\n return this.inner.request<T>({\n ...options,\n path: url,\n headers: {\n ...options.headers,\n appKey: this.apiKey,\n },\n });\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IBankAccountsPort } from '../ports/bank-accounts.js';\nimport type { UserBank, BankAccountEntry, CreateUserBankRequest } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreateUserBankRequest): Promise<UserBank> {\n // API requires user_id in the body — fetch it transparently from /me\n const meRes = await this.http.request<Record<string, unknown>>({ method: 'GET', path: '/me' });\n const userId = String(\n (meRes['user'] as Record<string, unknown> | undefined)?.['id'] ?? meRes['id'] ?? ''\n );\n\n const body = buildCreateBody(req, userId);\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/usersbank',\n body,\n });\n\n // Response: { message, userbank: {...} } | { user_bank: {...} } | { data: {...} } | root\n const raw = (res['userbank'] ?? res['user_bank'] ?? res['data'] ?? res) as Record<string, unknown>;\n return normalizeUserBank(raw);\n }\n\n async list(): Promise<UserBank[]> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/usersbank',\n });\n\n const raw =\n Array.isArray(res['user_banks']) ? res['user_banks'] :\n Array.isArray(res['data']) ? res['data'] :\n [];\n\n return (raw as unknown[]).map(normalizeUserBank);\n }\n}\n\nfunction normalizeUserBank(raw: unknown): UserBank {\n const b = raw as Record<string, unknown>;\n const bankAccounts = Array.isArray(b['bank_accounts'])\n ? (b['bank_accounts'] as unknown[]).map(normalizeBankAccount)\n : [];\n\n return {\n id: String(b['id'] ?? ''),\n description: String(b['description'] ?? ''),\n provider: String(b['provider'] ?? ''),\n bank_accounts: bankAccounts,\n ...(typeof b['payment_link'] === 'boolean' ? { payment_link: b['payment_link'] } : {}),\n ...(typeof b['to_trash'] === 'boolean' ? { to_trash: b['to_trash'] } : {}),\n };\n}\n\nfunction normalizeBankAccount(raw: unknown): BankAccountEntry {\n const a = raw as Record<string, unknown>;\n return {\n account_number: String(a['account_number'] ?? ''),\n account_type: String(a['account_type'] ?? a['type'] ?? ''),\n };\n}\n\nfunction buildCreateBody(req: CreateUserBankRequest, userId: string): Record<string, unknown> {\n const body: Record<string, unknown> = {\n bank_provider: req.bankProvider,\n description: req.description,\n user_bank_phone: req.userBankPhone,\n user_bank_dni: req.userBankDni,\n user_id: userId,\n metadata: req.metadata ?? [],\n };\n\n switch (req.bankProvider) {\n case 'VE_BAN':\n body['username'] = req.username;\n body['password'] = req.password;\n break;\n case 'VE_BAN_EMP_V2':\n body['username'] = req.accountNumber;\n body['password'] = req.apiKey;\n break;\n }\n\n return body;\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentLinksPort } from '../ports/payment-links.js';\nimport type {\n PaymentLink,\n CreatePaymentLinkRequest,\n UpdatePaymentLinkRequest,\n} from '../domain/types.js';\n\nexport class PaymentLinksResource implements IPaymentLinksPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {\n amount: req.amount,\n description: req.description,\n user_bank_id: req.userBankId,\n currency: req.currency ?? 'VES',\n };\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.webhookUrl !== undefined) body['webhook_url'] = req.webhookUrl;\n if (req.notificationByWhatsapp !== undefined) body['notification_by_whastapp'] = req.notificationByWhatsapp;\n if (req.name !== undefined) body['name'] = req.name;\n if (req.isUsd !== undefined) body['is_usd'] = req.isUsd;\n if (req.metadata !== undefined) body['metadata'] = req.metadata;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/v1/paymentlink',\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async update(id: string, req: UpdatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {};\n if (req.amount !== undefined) body['amount'] = req.amount;\n if (req.description !== undefined) body['description'] = req.description;\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.currency !== undefined) body['currency'] = req.currency;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'PATCH',\n path: `/paymentlink/${id}/patch`,\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async isPaid(id: string): Promise<boolean> {\n const info = await this.getInfo(id);\n return info.status === 'paid';\n }\n\n async getInfo(id: string): Promise<PaymentLink> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: `/paymentlink/${id}/info`,\n });\n return normalizePaymentLink(res);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shapes: { paymentlink: {...} } | { data: { payment_link: {...} } } | { data: {...} } | root\n const dataWrap = raw['data'] as Record<string, unknown> | undefined;\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (dataWrap?.['payment_link'] as Record<string, unknown> | undefined) ??\n dataWrap ??\n raw;\n\n const userId = typeof src['user_id'] === 'string' ? src['user_id'] :\n typeof src['userId'] === 'string' ? src['userId'] : undefined;\n\n return {\n id: String(src['id'] ?? ''),\n url: String(src['url'] ?? ''),\n ...(typeof src['amount'] === 'number' ? { amount: src['amount'] } : {}),\n ...(typeof src['status'] === 'string' ? { status: src['status'] } : {}),\n ...(typeof src['type'] === 'string' ? { type: src['type'] } : {}),\n ...(userId !== undefined ? { userId } : {}),\n ...(typeof src['name'] === 'string' ? { name: src['name'] } : {}),\n ...(typeof src['description'] === 'string' ? { description: src['description'] } : {}),\n ...(typeof src['is_usd'] === 'boolean' ? { isUsd: src['is_usd'] } : {}),\n ...(typeof src['redirect_url'] === 'string' ? { redirectUrl: src['redirect_url'] } : {}),\n ...(typeof src['webhook_url'] === 'string' ? { webhookUrl: src['webhook_url'] } : {}),\n ...(typeof src['notification_by_whastapp'] === 'boolean' ? { notificationByWhatsapp: src['notification_by_whastapp'] } : {}),\n ...(typeof src['expiration_time'] === 'number' ? { expirationTime: src['expiration_time'] } : {}),\n ...(typeof src['payment_link_origin'] === 'string' ? { paymentLinkOrigin: src['payment_link_origin'] } : {}),\n ...(typeof src['created_at'] === 'string' ? { createdAt: src['created_at'] } : {}),\n ...(typeof src['updated_at'] === 'string' ? { updatedAt: src['updated_at'] } : {}),\n };\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentsPort } from '../ports/payments.js';\nimport type { VerifyPaymentRequest, VerifyPaymentResult, PaymentData } from '../domain/types.js';\n\nexport class PaymentsResource implements IPaymentsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async verify(userBankId: string, req: VerifyPaymentRequest): Promise<VerifyPaymentResult> {\n // This endpoint returns HTTP 200 even for domain errors (BANK_NOT_AVAILABLE, PAYMENT_NOT_FOUND).\n // We read the raw response and interpret it ourselves instead of letting the HTTP client throw.\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: `/userbankpayment/${userBankId}/betaserio`,\n body: {\n amount: req.amount,\n bank_reference: req.bankReference,\n movement_type: req.movementType ?? 'GENERIC',\n },\n });\n\n if (res['error'] === 'BANK_NOT_AVAILABLE') {\n return { found: false, reason: 'BANK_NOT_AVAILABLE' };\n }\n\n if (res['error'] === 'PAYMENT_NOT_FOUND') {\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n\n const data = res['data'] as Record<string, unknown> | undefined;\n if (data !== undefined) {\n return {\n found: true,\n isNew: data['is_new'] === true,\n data: data as PaymentData,\n };\n }\n\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IMePort } from '../ports/me.js';\nimport type { User, Plan } from '../domain/types.js';\n\nexport class MeResource implements IMePort {\n constructor(private readonly http: IHttpClient) {}\n\n async getMe(): Promise<User> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me',\n });\n const u = (res['user'] ?? res) as Record<string, unknown>;\n return {\n id: String(u['id'] ?? ''),\n ...(typeof u['email'] === 'string' ? { email: u['email'] } : {}),\n ...(typeof u['name'] === 'string' ? { name: u['name'] } : {}),\n };\n }\n\n async getPlan(): Promise<Plan> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/plan',\n });\n return {\n name: String(res['name'] ?? ''),\n ...(typeof res['planType'] === 'string' ? { planType: res['planType'] } : {}),\n };\n }\n}\n","import { PabiloHttpClient } from './infrastructure/pabilo-http-client.js';\nimport { BankAccountsResource } from './resources/bank-accounts.resource.js';\nimport { PaymentLinksResource } from './resources/payment-links.resource.js';\nimport { PaymentsResource } from './resources/payments.resource.js';\nimport { MeResource } from './resources/me.resource.js';\nimport type { IHttpClient } from './ports/http.js';\nimport type { IBankAccountsPort } from './ports/bank-accounts.js';\nimport type { IPaymentLinksPort } from './ports/payment-links.js';\nimport type { IPaymentsPort } from './ports/payments.js';\nimport type { IMePort } from './ports/me.js';\n\nexport interface PabiloClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nexport class PabiloClient {\n readonly me: IMePort;\n readonly bankAccounts: IBankAccountsPort;\n readonly paymentLinks: IPaymentLinksPort;\n readonly payments: IPaymentsPort;\n\n constructor(options: PabiloClientOptions) {\n const http: IHttpClient = options.httpClient ?? new PabiloHttpClient({\n apiKey: options.apiKey,\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n });\n\n this.me = new MeResource(http);\n this.bankAccounts = new BankAccountsResource(http);\n this.paymentLinks = new PaymentLinksResource(http);\n this.payments = new PaymentsResource(http);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/domain/errors.ts","../src/infrastructure/fetch-http-client.ts","../src/infrastructure/pabilo-http-client.ts","../src/resources/bank-accounts.resource.ts","../src/resources/payment-links.resource.ts","../src/resources/payments.resource.ts","../src/resources/me.resource.ts","../src/client.ts"],"names":["code"],"mappings":"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","file":"index.js","sourcesContent":["export class PabiloError extends Error {\n readonly code: string;\n readonly statusCode: number | undefined;\n readonly raw: unknown;\n\n constructor(opts: {\n message: string;\n code: string;\n statusCode?: number;\n raw?: unknown;\n }) {\n super(opts.message);\n this.name = 'PabiloError';\n this.code = opts.code;\n this.statusCode = opts.statusCode;\n this.raw = opts.raw;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function parsePabiloError(body: unknown, statusCode: number): PabiloError {\n if (statusCode === 401) {\n return new PabiloError({ message: 'Unauthorized', code: 'UNAUTHORIZED', statusCode, raw: body });\n }\n if (statusCode === 404) {\n return new PabiloError({ message: 'Not found', code: 'NOT_FOUND', statusCode, raw: body });\n }\n\n if (body !== null && typeof body === 'object') {\n const b = body as Record<string, unknown>;\n const code = typeof b['error'] === 'string' ? b['error'] : resolveCodeFromStatus(statusCode);\n const message = typeof b['message'] === 'string' ? b['message'] : code;\n return new PabiloError({ message, code, statusCode, raw: body });\n }\n\n const code = resolveCodeFromStatus(statusCode);\n return new PabiloError({ message: code, code, statusCode, raw: body });\n}\n\nfunction resolveCodeFromStatus(statusCode: number): string {\n if (statusCode >= 500) return 'INTERNAL_SERVER_ERROR';\n if (statusCode === 400) return 'BAD_REQUEST';\n return 'REQUEST_FAILED';\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { PabiloError, parsePabiloError } from '../domain/errors.js';\n\ntype FetchFn = typeof globalThis.fetch;\n\nexport class FetchHttpClient implements IHttpClient {\n private readonly fetchFn: FetchFn;\n\n constructor(fetchImpl?: FetchFn) {\n this.fetchFn = fetchImpl ?? globalThis.fetch.bind(globalThis);\n }\n\n async request<T>(options: RequestOptions): Promise<T> {\n const { method, path, body, headers = {} } = options;\n\n const init: RequestInit = { method, headers: { ...headers } };\n\n if (body !== undefined) {\n (init.headers as Record<string, string>)['content-type'] = 'application/json';\n init.body = JSON.stringify(body);\n }\n\n let response: Response;\n try {\n response = await this.fetchFn(path, init);\n } catch (cause) {\n throw new PabiloError({\n message: cause instanceof Error ? cause.message : 'Network request failed',\n code: 'NETWORK_ERROR',\n raw: cause,\n });\n }\n\n let responseBody: unknown;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = null;\n }\n\n if (!response.ok) {\n throw parsePabiloError(responseBody, response.status);\n }\n\n return responseBody as T;\n }\n}\n","import type { IHttpClient, RequestOptions } from '../ports/http.js';\nimport { FetchHttpClient } from './fetch-http-client.js';\n\nexport interface PabiloHttpClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.pabilo.app';\n\nexport class PabiloHttpClient implements IHttpClient {\n private readonly inner: IHttpClient;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(options: PabiloHttpClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.inner = options.httpClient ?? new FetchHttpClient();\n }\n\n request<T>(options: RequestOptions): Promise<T> {\n const url = `${this.baseUrl}${options.path}`;\n return this.inner.request<T>({\n ...options,\n path: url,\n headers: {\n ...options.headers,\n appKey: this.apiKey,\n },\n });\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IBankAccountsPort } from '../ports/bank-accounts.js';\nimport type { UserBank, BankAccountEntry, CreateUserBankRequest } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreateUserBankRequest): Promise<UserBank> {\n // API requires user_id in the body — fetch it transparently from /me\n const meRes = await this.http.request<Record<string, unknown>>({ method: 'GET', path: '/me' });\n const userId = String(\n (meRes['user'] as Record<string, unknown> | undefined)?.['id'] ?? meRes['id'] ?? ''\n );\n\n const body = buildCreateBody(req, userId);\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/usersbank',\n body,\n });\n\n // Response: { message, userbank: {...} } | { user_bank: {...} } | { data: {...} } | root\n const raw = (res['userbank'] ?? res['user_bank'] ?? res['data'] ?? res) as Record<string, unknown>;\n return normalizeUserBank(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.http.request({ method: 'DELETE', path: `/usersbank/${id}/to-trash` });\n }\n\n async list(): Promise<UserBank[]> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/usersbank',\n });\n\n const raw =\n Array.isArray(res['user_banks']) ? res['user_banks'] :\n Array.isArray(res['data']) ? res['data'] :\n [];\n\n return (raw as unknown[]).map(normalizeUserBank);\n }\n}\n\nfunction normalizeUserBank(raw: unknown): UserBank {\n const b = raw as Record<string, unknown>;\n const bankAccounts = Array.isArray(b['bank_accounts'])\n ? (b['bank_accounts'] as unknown[]).map(normalizeBankAccount)\n : [];\n\n return {\n id: String(b['id'] ?? ''),\n description: String(b['description'] ?? ''),\n provider: String(b['provider'] ?? ''),\n bank_accounts: bankAccounts,\n ...(typeof b['payment_link'] === 'boolean' ? { payment_link: b['payment_link'] } : {}),\n ...(typeof b['to_trash'] === 'boolean' ? { to_trash: b['to_trash'] } : {}),\n };\n}\n\nfunction normalizeBankAccount(raw: unknown): BankAccountEntry {\n const a = raw as Record<string, unknown>;\n return {\n account_number: String(a['account_number'] ?? ''),\n account_type: String(a['account_type'] ?? a['type'] ?? ''),\n };\n}\n\nfunction buildCreateBody(req: CreateUserBankRequest, userId: string): Record<string, unknown> {\n if (req.bankProvider === 'BANK_TEST') {\n return { bank_provider: req.bankProvider, user_id: userId };\n }\n\n const body: Record<string, unknown> = {\n bank_provider: req.bankProvider,\n description: req.description,\n user_bank_phone: req.userBankPhone,\n user_bank_dni: req.userBankDni,\n user_id: userId,\n metadata: req.metadata ?? [],\n };\n\n switch (req.bankProvider) {\n case 'VE_BAN':\n body['username'] = req.username;\n body['password'] = req.password;\n break;\n case 'VE_BAN_EMP_V2':\n body['username'] = req.accountNumber;\n body['password'] = req.apiKey;\n break;\n }\n\n return body;\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentLinksPort } from '../ports/payment-links.js';\nimport type {\n PaymentLink,\n CreatePaymentLinkRequest,\n UpdatePaymentLinkRequest,\n} from '../domain/types.js';\n\nexport class PaymentLinksResource implements IPaymentLinksPort {\n constructor(private readonly http: IHttpClient) {}\n\n async create(req: CreatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {\n amount: req.amount,\n description: req.description,\n user_bank_id: req.userBankId,\n currency: req.currency ?? 'VES',\n };\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.webhookUrl !== undefined) body['webhook_url'] = req.webhookUrl;\n if (req.notificationByWhatsapp !== undefined) body['notification_by_whastapp'] = req.notificationByWhatsapp;\n if (req.name !== undefined) body['name'] = req.name;\n if (req.isUsd !== undefined) body['is_usd'] = req.isUsd;\n if (req.metadata !== undefined) body['metadata'] = req.metadata;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: '/v1/paymentlink',\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async update(id: string, req: UpdatePaymentLinkRequest): Promise<PaymentLink> {\n const body: Record<string, unknown> = {};\n if (req.amount !== undefined) body['amount'] = req.amount;\n if (req.description !== undefined) body['description'] = req.description;\n if (req.redirectUrl !== undefined) body['redirect_url'] = req.redirectUrl;\n if (req.currency !== undefined) body['currency'] = req.currency;\n\n const res = await this.http.request<Record<string, unknown>>({\n method: 'PATCH',\n path: `/paymentlink/${id}/patch`,\n body,\n });\n\n return normalizePaymentLink(res);\n }\n\n async isPaid(id: string): Promise<boolean> {\n const info = await this.getInfo(id);\n return info.status === 'paid';\n }\n\n async getInfo(id: string): Promise<PaymentLink> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: `/paymentlink/${id}/info`,\n });\n return normalizePaymentLink(res);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shapes: { paymentlink: {...} } | { data: { payment_link: {...} } } | { data: {...} } | root\n const dataWrap = raw['data'] as Record<string, unknown> | undefined;\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (dataWrap?.['payment_link'] as Record<string, unknown> | undefined) ??\n dataWrap ??\n raw;\n\n const userId = typeof src['user_id'] === 'string' ? src['user_id'] :\n typeof src['userId'] === 'string' ? src['userId'] : undefined;\n\n return {\n id: String(src['id'] ?? ''),\n url: String(src['url'] ?? ''),\n ...(typeof src['amount'] === 'number' ? { amount: src['amount'] } : {}),\n ...(typeof src['status'] === 'string' ? { status: src['status'] } : {}),\n ...(typeof src['type'] === 'string' ? { type: src['type'] } : {}),\n ...(userId !== undefined ? { userId } : {}),\n ...(typeof src['name'] === 'string' ? { name: src['name'] } : {}),\n ...(typeof src['description'] === 'string' ? { description: src['description'] } : {}),\n ...(typeof src['is_usd'] === 'boolean' ? { isUsd: src['is_usd'] } : {}),\n ...(typeof src['redirect_url'] === 'string' ? { redirectUrl: src['redirect_url'] } : {}),\n ...(typeof src['webhook_url'] === 'string' ? { webhookUrl: src['webhook_url'] } : {}),\n ...(typeof src['notification_by_whastapp'] === 'boolean' ? { notificationByWhatsapp: src['notification_by_whastapp'] } : {}),\n ...(typeof src['expiration_time'] === 'number' ? { expirationTime: src['expiration_time'] } : {}),\n ...(typeof src['payment_link_origin'] === 'string' ? { paymentLinkOrigin: src['payment_link_origin'] } : {}),\n ...(typeof src['created_at'] === 'string' ? { createdAt: src['created_at'] } : {}),\n ...(typeof src['updated_at'] === 'string' ? { updatedAt: src['updated_at'] } : {}),\n };\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IPaymentsPort } from '../ports/payments.js';\nimport type { VerifyPaymentRequest, VerifyPaymentResult, PaymentData } from '../domain/types.js';\n\nexport class PaymentsResource implements IPaymentsPort {\n constructor(private readonly http: IHttpClient) {}\n\n async verify(userBankId: string, req: VerifyPaymentRequest): Promise<VerifyPaymentResult> {\n // This endpoint returns HTTP 200 even for domain errors (BANK_NOT_AVAILABLE, PAYMENT_NOT_FOUND).\n // We read the raw response and interpret it ourselves instead of letting the HTTP client throw.\n const res = await this.http.request<Record<string, unknown>>({\n method: 'POST',\n path: `/userbankpayment/${userBankId}/betaserio`,\n body: {\n amount: req.amount,\n bank_reference: req.bankReference,\n movement_type: req.movementType ?? 'GENERIC',\n },\n });\n\n if (res['error'] === 'BANK_NOT_AVAILABLE') {\n return { found: false, reason: 'BANK_NOT_AVAILABLE' };\n }\n\n if (res['error'] === 'PAYMENT_NOT_FOUND') {\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n\n const data = res['data'] as Record<string, unknown> | undefined;\n if (data !== undefined) {\n return {\n found: true,\n isNew: data['is_new'] === true,\n data: data as PaymentData,\n };\n }\n\n return { found: false, reason: 'PAYMENT_NOT_FOUND' };\n }\n}\n","import type { IHttpClient } from '../ports/http.js';\nimport type { IMePort } from '../ports/me.js';\nimport type { User, Plan } from '../domain/types.js';\n\nexport class MeResource implements IMePort {\n constructor(private readonly http: IHttpClient) {}\n\n async getMe(): Promise<User> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me',\n });\n const u = (res['user'] ?? res) as Record<string, unknown>;\n return {\n id: String(u['id'] ?? ''),\n ...(typeof u['email'] === 'string' ? { email: u['email'] } : {}),\n ...(typeof u['name'] === 'string' ? { name: u['name'] } : {}),\n };\n }\n\n async getPlan(): Promise<Plan> {\n const res = await this.http.request<Record<string, unknown>>({\n method: 'GET',\n path: '/me/plan',\n });\n return {\n name: String(res['name'] ?? ''),\n ...(typeof res['planType'] === 'string' ? { planType: res['planType'] } : {}),\n };\n }\n}\n","import { PabiloHttpClient } from './infrastructure/pabilo-http-client.js';\nimport { BankAccountsResource } from './resources/bank-accounts.resource.js';\nimport { PaymentLinksResource } from './resources/payment-links.resource.js';\nimport { PaymentsResource } from './resources/payments.resource.js';\nimport { MeResource } from './resources/me.resource.js';\nimport type { IHttpClient } from './ports/http.js';\nimport type { IBankAccountsPort } from './ports/bank-accounts.js';\nimport type { IPaymentLinksPort } from './ports/payment-links.js';\nimport type { IPaymentsPort } from './ports/payments.js';\nimport type { IMePort } from './ports/me.js';\n\nexport interface PabiloClientOptions {\n apiKey: string;\n baseUrl?: string;\n httpClient?: IHttpClient;\n}\n\nexport class PabiloClient {\n readonly me: IMePort;\n readonly bankAccounts: IBankAccountsPort;\n readonly paymentLinks: IPaymentLinksPort;\n readonly payments: IPaymentsPort;\n\n constructor(options: PabiloClientOptions) {\n const http: IHttpClient = options.httpClient ?? new PabiloHttpClient({\n apiKey: options.apiKey,\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n });\n\n this.me = new MeResource(http);\n this.bankAccounts = new BankAccountsResource(http);\n this.paymentLinks = new PaymentLinksResource(http);\n this.payments = new PaymentsResource(http);\n }\n}\n"]}
|