@pabilo/sdk 0.1.2 → 0.1.4

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/dist/index.cjs CHANGED
@@ -94,6 +94,20 @@ var BankAccountsResource = class {
94
94
  constructor(http) {
95
95
  this.http = http;
96
96
  }
97
+ async create(req) {
98
+ const meRes = await this.http.request({ method: "GET", path: "/me" });
99
+ const userId = String(
100
+ meRes["user"]?.["id"] ?? meRes["id"] ?? ""
101
+ );
102
+ const body = buildCreateBody(req, userId);
103
+ const res = await this.http.request({
104
+ method: "POST",
105
+ path: "/usersbank",
106
+ body
107
+ });
108
+ const raw = res["userbank"] ?? res["user_bank"] ?? res["data"] ?? res;
109
+ return normalizeUserBank(raw);
110
+ }
97
111
  async list() {
98
112
  const res = await this.http.request({
99
113
  method: "GET",
@@ -122,6 +136,27 @@ function normalizeBankAccount(raw) {
122
136
  account_type: String(a["account_type"] ?? a["type"] ?? "")
123
137
  };
124
138
  }
139
+ function buildCreateBody(req, userId) {
140
+ const body = {
141
+ bank_provider: req.bankProvider,
142
+ description: req.description,
143
+ user_bank_phone: req.userBankPhone,
144
+ user_bank_dni: req.userBankDni,
145
+ user_id: userId,
146
+ metadata: req.metadata ?? []
147
+ };
148
+ switch (req.bankProvider) {
149
+ case "VE_BAN":
150
+ body["username"] = req.username;
151
+ body["password"] = req.password;
152
+ break;
153
+ case "VE_BAN_EMP_V2":
154
+ body["username"] = req.accountNumber;
155
+ body["password"] = req.apiKey;
156
+ break;
157
+ }
158
+ return body;
159
+ }
125
160
 
126
161
  // src/resources/payment-links.resource.ts
127
162
  var PaymentLinksResource = class {
@@ -170,19 +205,30 @@ var PaymentLinksResource = class {
170
205
  method: "GET",
171
206
  path: `/paymentlink/${id}/info`
172
207
  });
173
- const inner = res["data"]?.["payment_link"] ?? res["data"] ?? res;
174
- return normalizePaymentLink(inner);
208
+ return normalizePaymentLink(res);
175
209
  }
176
210
  };
177
211
  function normalizePaymentLink(raw) {
178
- const src = raw["paymentlink"] ?? raw["data"] ?? raw;
212
+ const dataWrap = raw["data"];
213
+ const src = raw["paymentlink"] ?? dataWrap?.["payment_link"] ?? dataWrap ?? raw;
179
214
  const userId = typeof src["user_id"] === "string" ? src["user_id"] : typeof src["userId"] === "string" ? src["userId"] : void 0;
180
215
  return {
181
216
  id: String(src["id"] ?? ""),
182
217
  url: String(src["url"] ?? ""),
183
218
  ...typeof src["amount"] === "number" ? { amount: src["amount"] } : {},
184
219
  ...typeof src["status"] === "string" ? { status: src["status"] } : {},
185
- ...userId !== void 0 ? { userId } : {}
220
+ ...typeof src["type"] === "string" ? { type: src["type"] } : {},
221
+ ...userId !== void 0 ? { userId } : {},
222
+ ...typeof src["name"] === "string" ? { name: src["name"] } : {},
223
+ ...typeof src["description"] === "string" ? { description: src["description"] } : {},
224
+ ...typeof src["is_usd"] === "boolean" ? { isUsd: src["is_usd"] } : {},
225
+ ...typeof src["redirect_url"] === "string" ? { redirectUrl: src["redirect_url"] } : {},
226
+ ...typeof src["webhook_url"] === "string" ? { webhookUrl: src["webhook_url"] } : {},
227
+ ...typeof src["notification_by_whastapp"] === "boolean" ? { notificationByWhatsapp: src["notification_by_whastapp"] } : {},
228
+ ...typeof src["expiration_time"] === "number" ? { expirationTime: src["expiration_time"] } : {},
229
+ ...typeof src["payment_link_origin"] === "string" ? { paymentLinkOrigin: src["payment_link_origin"] } : {},
230
+ ...typeof src["created_at"] === "string" ? { createdAt: src["created_at"] } : {},
231
+ ...typeof src["updated_at"] === "string" ? { updatedAt: src["updated_at"] } : {}
186
232
  };
187
233
  }
188
234
 
@@ -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 } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\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","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\n // Shape: { data: { payment_link: {...} } } or { data: {...} } or root\n const inner =\n (res['data'] as Record<string, unknown> | undefined)?.['payment_link'] ??\n res['data'] ??\n res;\n\n return normalizePaymentLink(inner as Record<string, unknown>);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shape: { paymentlink: { id, url } } or { data: { id, url } } or root { id, url }\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (raw['data'] as Record<string, unknown> | undefined) ??\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 ...(userId !== undefined ? { userId } : {}),\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":";;;AAAO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EAKrC,YAAY,IAAA,EAKT;AACD,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA;AAChB,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AACF;AAEO,SAAS,gBAAA,CAAiB,MAAe,UAAA,EAAiC;AAC/E,EAAA,IAAI,eAAe,GAAA,EAAK;AACtB,IAAA,OAAO,IAAI,WAAA,CAAY,EAAE,OAAA,EAAS,cAAA,EAAgB,MAAM,cAAA,EAAgB,UAAA,EAAY,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,EACjG;AACA,EAAA,IAAI,eAAe,GAAA,EAAK;AACtB,IAAA,OAAO,IAAI,WAAA,CAAY,EAAE,OAAA,EAAS,WAAA,EAAa,MAAM,WAAA,EAAa,UAAA,EAAY,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAC7C,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,MAAMA,KAAAA,GAAO,OAAO,CAAA,CAAE,OAAO,CAAA,KAAM,WAAW,CAAA,CAAE,OAAO,CAAA,GAAI,qBAAA,CAAsB,UAAU,CAAA;AAC3F,IAAA,MAAM,OAAA,GAAU,OAAO,CAAA,CAAE,SAAS,MAAM,QAAA,GAAW,CAAA,CAAE,SAAS,CAAA,GAAIA,KAAAA;AAClE,IAAA,OAAO,IAAI,YAAY,EAAE,OAAA,EAAS,MAAAA,KAAAA,EAAM,UAAA,EAAY,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,IAAA,GAAO,sBAAsB,UAAU,CAAA;AAC7C,EAAA,OAAO,IAAI,YAAY,EAAE,OAAA,EAAS,MAAM,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,IAAA,EAAM,CAAA;AACvE;AAEA,SAAS,sBAAsB,UAAA,EAA4B;AACzD,EAAA,IAAI,UAAA,IAAc,KAAK,OAAO,uBAAA;AAC9B,EAAA,IAAI,UAAA,KAAe,KAAK,OAAO,aAAA;AAC/B,EAAA,OAAO,gBAAA;AACT;;;ACtCO,IAAM,kBAAN,MAA6C;AAAA,EAGlD,YAAY,SAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,OAAA,GAAU,SAAA,IAAa,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAM,QAAW,OAAA,EAAqC;AACpD,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAM,OAAA,GAAU,IAAG,GAAI,OAAA;AAE7C,IAAA,MAAM,OAAoB,EAAE,MAAA,EAAQ,SAAS,EAAE,GAAG,SAAQ,EAAE;AAE5D,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAC,IAAA,CAAK,OAAA,CAAmC,cAAc,CAAA,GAAI,kBAAA;AAC3D,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,wBAAA;AAAA,QAClD,IAAA,EAAM,eAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI;AACF,MAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,IACrC,CAAA,CAAA,MAAQ;AACN,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,gBAAA,CAAiB,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AACF;;;ACrCA,IAAM,gBAAA,GAAmB,wBAAA;AAElB,IAAM,mBAAN,MAA8C;AAAA,EAKnD,YAAY,OAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA,IAAW,gBAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtE,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,UAAA,IAAc,IAAI,eAAA,EAAgB;AAAA,EACzD;AAAA,EAEA,QAAW,OAAA,EAAqC;AAC9C,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAG,QAAQ,IAAI,CAAA,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,MAAM,OAAA,CAAW;AAAA,MAC3B,GAAG,OAAA;AAAA,MACH,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP,GAAG,OAAA,CAAQ,OAAA;AAAA,QACX,QAAQ,IAAA,CAAK;AAAA;AACf,KACD,CAAA;AAAA,EACH;AACF;;;AC7BO,IAAM,uBAAN,MAAwD;AAAA,EAC7D,YAA6B,IAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAoB;AAAA,EAEjD,MAAM,OAAO,GAAA,EAA+C;AAE1D,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,CAAA;AAC7F,IAAA,MAAM,MAAA,GAAS,MAAA;AAAA,MACZ,MAAM,MAAM,CAAA,GAA4C,IAAI,CAAA,IAAK,KAAA,CAAM,IAAI,CAAA,IAAK;AAAA,KACnF;AAEA,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,EAAK,MAAM,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,YAAA;AAAA,MACN;AAAA,KACD,CAAA;AAGD,IAAA,MAAM,GAAA,GAAO,IAAI,UAAU,CAAA,IAAK,IAAI,WAAW,CAAA,IAAK,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AACnE,IAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,IAAA,GAA4B;AAChC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,MAAM,MACJ,KAAA,CAAM,OAAA,CAAQ,IAAI,YAAY,CAAC,IAAI,GAAA,CAAI,YAAY,IACnD,KAAA,CAAM,OAAA,CAAQ,IAAI,MAAM,CAAC,IAAI,GAAA,CAAI,MAAM,IACvC,EAAC;AAEH,IAAA,OAAQ,GAAA,CAAkB,IAAI,iBAAiB,CAAA;AAAA,EACjD;AACF,CAAA;AAEA,SAAS,kBAAkB,GAAA,EAAwB;AACjD,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,eAAe,CAAC,CAAA,GAChD,CAAA,CAAE,eAAe,CAAA,CAAgB,GAAA,CAAI,oBAAoB,IAC1D,EAAC;AAEL,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,IAAI,KAAK,EAAE,CAAA;AAAA,IACxB,WAAA,EAAa,MAAA,CAAO,CAAA,CAAE,aAAa,KAAK,EAAE,CAAA;AAAA,IAC1C,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,UAAU,KAAK,EAAE,CAAA;AAAA,IACpC,aAAA,EAAe,YAAA;AAAA,IACf,GAAI,OAAO,CAAA,CAAE,cAAc,CAAA,KAAM,SAAA,GAAY,EAAE,YAAA,EAAc,CAAA,CAAE,cAAc,CAAA,EAAE,GAAI,EAAC;AAAA,IACpF,GAAI,OAAO,CAAA,CAAE,UAAU,CAAA,KAAM,SAAA,GAAY,EAAE,QAAA,EAAU,CAAA,CAAE,UAAU,CAAA,EAAE,GAAI;AAAC,GAC1E;AACF;AAEA,SAAS,qBAAqB,GAAA,EAAgC;AAC5D,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,MAAA,CAAO,CAAA,CAAE,gBAAgB,KAAK,EAAE,CAAA;AAAA,IAChD,YAAA,EAAc,OAAO,CAAA,CAAE,cAAc,KAAK,CAAA,CAAE,MAAM,KAAK,EAAE;AAAA,GAC3D;AACF;AAEA,SAAS,eAAA,CAAgB,KAA4B,MAAA,EAAyC;AAC5F,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,eAAe,GAAA,CAAI,YAAA;AAAA,IACnB,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,iBAAiB,GAAA,CAAI,aAAA;AAAA,IACrB,eAAe,GAAA,CAAI,WAAA;AAAA,IACnB,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY;AAAC,GAC7B;AAEA,EAAA,QAAQ,IAAI,YAAA;AAAc,IACxB,KAAK,QAAA;AACH,MAAA,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,QAAA;AACvB,MAAA,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,QAAA;AACvB,MAAA;AAAA,IACF,KAAK,eAAA;AACH,MAAA,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,aAAA;AACvB,MAAA,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,MAAA;AACvB,MAAA;AAAA;AAGJ,EAAA,OAAO,IAAA;AACT;;;AC/EO,IAAM,uBAAN,MAAwD;AAAA,EAC7D,YAA6B,IAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAoB;AAAA,EAEjD,MAAM,OAAO,GAAA,EAAqD;AAChE,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,cAAc,GAAA,CAAI,UAAA;AAAA,MAClB,QAAA,EAAU,IAAI,QAAA,IAAY;AAAA,KAC5B;AACA,IAAA,IAAI,IAAI,WAAA,KAAgB,MAAA,EAAW,IAAA,CAAK,cAAc,IAAI,GAAA,CAAI,WAAA;AAC9D,IAAA,IAAI,IAAI,UAAA,KAAe,MAAA,EAAW,IAAA,CAAK,aAAa,IAAI,GAAA,CAAI,UAAA;AAC5D,IAAA,IAAI,IAAI,sBAAA,KAA2B,MAAA,EAAW,IAAA,CAAK,0BAA0B,IAAI,GAAA,CAAI,sBAAA;AACrF,IAAA,IAAI,IAAI,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,MAAM,IAAI,GAAA,CAAI,IAAA;AAC/C,IAAA,IAAI,IAAI,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,QAAQ,IAAI,GAAA,CAAI,KAAA;AAClD,IAAA,IAAI,IAAI,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,QAAA;AAEvD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,iBAAA;AAAA,MACN;AAAA,KACD,CAAA;AAED,IAAA,OAAO,qBAAqB,GAAG,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,MAAA,CAAO,EAAA,EAAY,GAAA,EAAqD;AAC5E,IAAA,MAAM,OAAgC,EAAC;AACvC,IAAA,IAAI,IAAI,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,QAAQ,IAAI,GAAA,CAAI,MAAA;AACnD,IAAA,IAAI,IAAI,WAAA,KAAgB,MAAA,EAAW,IAAA,CAAK,aAAa,IAAI,GAAA,CAAI,WAAA;AAC7D,IAAA,IAAI,IAAI,WAAA,KAAgB,MAAA,EAAW,IAAA,CAAK,cAAc,IAAI,GAAA,CAAI,WAAA;AAC9D,IAAA,IAAI,IAAI,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,QAAA;AAEvD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,EAAE,CAAA,MAAA,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,OAAO,qBAAqB,GAAG,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO,EAAA,EAA8B;AACzC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA;AAClC,IAAA,OAAO,KAAK,MAAA,KAAW,MAAA;AAAA,EACzB;AAAA,EAEA,MAAM,QAAQ,EAAA,EAAkC;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,gBAAgB,EAAE,CAAA,KAAA;AAAA,KACzB,CAAA;AACD,IAAA,OAAO,qBAAqB,GAAG,CAAA;AAAA,EACjC;AACF,CAAA;AAEA,SAAS,qBAAqB,GAAA,EAA2C;AAEvE,EAAA,MAAM,QAAA,GAAW,IAAI,MAAM,CAAA;AAC3B,EAAA,MAAM,MACH,GAAA,CAAI,aAAa,KACjB,QAAA,GAAW,cAAc,KAC1B,QAAA,IACA,GAAA;AAEF,EAAA,MAAM,SAAS,OAAO,GAAA,CAAI,SAAS,CAAA,KAAM,WAAW,GAAA,CAAI,SAAS,CAAA,GAClD,OAAO,IAAI,QAAQ,CAAA,KAAM,QAAA,GAAW,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAA;AAEnE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,EAAE,CAAA;AAAA,IAC1B,GAAA,EAAK,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,EAAE,CAAA;AAAA,IAC5B,GAAI,OAAO,GAAA,CAAI,QAAQ,CAAA,KAAM,QAAA,GAA2B,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA,EAAE,GAAgC,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,QAAQ,CAAA,KAAM,QAAA,GAA2B,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA,EAAE,GAAgC,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,MAAM,CAAA,KAAM,QAAA,GAA6B,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,EAAE,GAAoC,EAAC;AAAA,IACjH,GAAI,MAAA,KAAW,MAAA,GAAyC,EAAE,MAAA,KAAuD,EAAC;AAAA,IAClH,GAAI,OAAO,GAAA,CAAI,MAAM,CAAA,KAAM,QAAA,GAA6B,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,EAAE,GAAoC,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,aAAa,CAAA,KAAM,QAAA,GAAsB,EAAE,WAAA,EAAa,GAAA,CAAI,aAAa,CAAA,EAAE,GAAsB,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,QAAQ,CAAA,KAAM,SAAA,GAA2B,EAAE,KAAA,EAAO,GAAA,CAAI,QAAQ,CAAA,EAAE,GAAiC,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,cAAc,CAAA,KAAM,QAAA,GAAqB,EAAE,WAAA,EAAa,GAAA,CAAI,cAAc,CAAA,EAAE,GAAqB,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,aAAa,CAAA,KAAM,QAAA,GAAsB,EAAE,UAAA,EAAY,GAAA,CAAI,aAAa,CAAA,EAAE,GAAuB,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,0BAA0B,CAAA,KAAM,SAAA,GAAY,EAAE,sBAAA,EAAwB,GAAA,CAAI,0BAA0B,CAAA,EAAE,GAAI,EAAC;AAAA,IAC1H,GAAI,OAAO,GAAA,CAAI,iBAAiB,CAAA,KAAM,QAAA,GAAkB,EAAE,cAAA,EAAgB,GAAA,CAAI,iBAAiB,CAAA,EAAE,GAAe,EAAC;AAAA,IACjH,GAAI,OAAO,GAAA,CAAI,qBAAqB,CAAA,KAAM,QAAA,GAAc,EAAE,iBAAA,EAAmB,GAAA,CAAI,qBAAqB,CAAA,EAAE,GAAO,EAAC;AAAA,IAChH,GAAI,OAAO,GAAA,CAAI,YAAY,CAAA,KAAM,QAAA,GAAuB,EAAE,SAAA,EAAW,GAAA,CAAI,YAAY,CAAA,EAAE,GAAwB,EAAC;AAAA,IAChH,GAAI,OAAO,GAAA,CAAI,YAAY,CAAA,KAAM,QAAA,GAAuB,EAAE,SAAA,EAAW,GAAA,CAAI,YAAY,CAAA,EAAE,GAAwB;AAAC,GAClH;AACF;;;AC1FO,IAAM,mBAAN,MAAgD;AAAA,EACrD,YAA6B,IAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAoB;AAAA,EAEjD,MAAM,MAAA,CAAO,UAAA,EAAoB,GAAA,EAAyD;AAGxF,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,oBAAoB,UAAU,CAAA,UAAA,CAAA;AAAA,MACpC,IAAA,EAAM;AAAA,QACJ,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,gBAAgB,GAAA,CAAI,aAAA;AAAA,QACpB,aAAA,EAAe,IAAI,YAAA,IAAgB;AAAA;AACrC,KACD,CAAA;AAED,IAAA,IAAI,GAAA,CAAI,OAAO,CAAA,KAAM,oBAAA,EAAsB;AACzC,MAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,oBAAA,EAAqB;AAAA,IACtD;AAEA,IAAA,IAAI,GAAA,CAAI,OAAO,CAAA,KAAM,mBAAA,EAAqB;AACxC,MAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,mBAAA,EAAoB;AAAA,IACrD;AAEA,IAAA,MAAM,IAAA,GAAO,IAAI,MAAM,CAAA;AACvB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,KAAM,IAAA;AAAA,QAC1B;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,mBAAA,EAAoB;AAAA,EACrD;AACF,CAAA;;;ACnCO,IAAM,aAAN,MAAoC;AAAA,EACzC,YAA6B,IAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAoB;AAAA,EAEjD,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,MAAM,CAAA,GAAK,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AAC1B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,IAAI,KAAK,EAAE,CAAA;AAAA,MACxB,GAAI,OAAO,CAAA,CAAE,OAAO,CAAA,KAAM,QAAA,GAAW,EAAE,KAAA,EAAO,CAAA,CAAE,OAAO,CAAA,EAAE,GAAI,EAAC;AAAA,MAC9D,GAAI,OAAO,CAAA,CAAE,MAAM,CAAA,KAAM,QAAA,GAAW,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,CAAA,EAAE,GAAI;AAAC,KAC7D;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAiC;AAAA,MAC3D,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAAA,MAC9B,GAAI,OAAO,GAAA,CAAI,UAAU,CAAA,KAAM,QAAA,GAAW,EAAE,QAAA,EAAU,GAAA,CAAI,UAAU,CAAA,EAAE,GAAI;AAAC,KAC7E;AAAA,EACF;AACF,CAAA;;;ACbO,IAAM,eAAN,MAAmB;AAAA,EAMxB,YAAY,OAAA,EAA8B;AACxC,IAAA,MAAM,IAAA,GAAoB,OAAA,CAAQ,UAAA,IAAc,IAAI,gBAAA,CAAiB;AAAA,MACnE,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,GAAI;AAAC,KACrE,CAAA;AAED,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,UAAA,CAAW,IAAI,CAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,gBAAA,CAAiB,IAAI,CAAA;AAAA,EAC3C;AACF","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"]}
package/dist/index.d.cts CHANGED
@@ -10,8 +10,9 @@ interface IHttpClient {
10
10
 
11
11
  type BankProvider = 'BANESCO' | 'MERCANTIL' | 'BDV' | 'PROVINCIAL' | (string & Record<never, never>);
12
12
  type AccountType = 'SAVINGS' | 'CHECKING' | (string & Record<never, never>);
13
- type PaymentLinkStatus = 'pending' | 'paid' | 'expired' | 'cancelled' | (string & Record<never, never>);
14
- type PabiloErrorCode = 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND' | 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'NETWORK_ERROR' | 'REQUEST_FAILED' | (string & Record<never, never>);
13
+ type PaymentLinkStatus = 'pending' | 'paid' | 'active' | 'expired' | 'cancelled' | (string & Record<never, never>);
14
+ type PaymentLinkType = 'default' | 'fixed' | (string & Record<never, never>);
15
+ type PabiloErrorCode = 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND' | 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'NETWORK_ERROR' | 'REQUEST_FAILED' | 'USER_BANK_ALREADY_EXISTS' | 'USER_BANCK_NOT_FOUND' | (string & Record<never, never>);
15
16
  interface BankAccountEntry {
16
17
  account_number: string;
17
18
  account_type: AccountType;
@@ -38,7 +39,18 @@ interface PaymentLink {
38
39
  url: string;
39
40
  amount?: number;
40
41
  status?: PaymentLinkStatus;
42
+ type?: PaymentLinkType;
41
43
  userId?: string;
44
+ name?: string;
45
+ description?: string;
46
+ isUsd?: boolean;
47
+ redirectUrl?: string;
48
+ webhookUrl?: string;
49
+ notificationByWhatsapp?: boolean;
50
+ expirationTime?: number;
51
+ paymentLinkOrigin?: string;
52
+ createdAt?: string;
53
+ updatedAt?: string;
42
54
  }
43
55
  interface PaymentParams {
44
56
  amount: number;
@@ -103,9 +115,31 @@ type VerifyPaymentResult = {
103
115
  isNew: boolean;
104
116
  data: PaymentData;
105
117
  };
118
+ interface UserBankMetadataEntry {
119
+ key_name: string;
120
+ key_value: string;
121
+ }
122
+ interface BaseCreateUserBankRequest {
123
+ description: string;
124
+ userBankPhone: string;
125
+ userBankDni: string;
126
+ metadata?: UserBankMetadataEntry[];
127
+ }
128
+ interface CreateVeBanRequest extends BaseCreateUserBankRequest {
129
+ bankProvider: 'VE_BAN';
130
+ username: string;
131
+ password: string;
132
+ }
133
+ interface CreateVeBanEmpV2Request extends BaseCreateUserBankRequest {
134
+ bankProvider: 'VE_BAN_EMP_V2';
135
+ accountNumber: string;
136
+ apiKey: string;
137
+ }
138
+ type CreateUserBankRequest = CreateVeBanRequest | CreateVeBanEmpV2Request;
106
139
 
107
140
  interface IBankAccountsPort {
108
141
  list(): Promise<UserBank[]>;
142
+ create(req: CreateUserBankRequest): Promise<UserBank>;
109
143
  }
110
144
 
111
145
  interface IPaymentLinksPort {
@@ -169,4 +203,4 @@ declare class PabiloHttpClient implements IHttpClient {
169
203
  request<T>(options: RequestOptions): Promise<T>;
170
204
  }
171
205
 
172
- export { type AccountType, type BankAccountEntry, type BankProvider, type CreatePaymentLinkRequest, 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 PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
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 };
package/dist/index.d.ts CHANGED
@@ -10,8 +10,9 @@ interface IHttpClient {
10
10
 
11
11
  type BankProvider = 'BANESCO' | 'MERCANTIL' | 'BDV' | 'PROVINCIAL' | (string & Record<never, never>);
12
12
  type AccountType = 'SAVINGS' | 'CHECKING' | (string & Record<never, never>);
13
- type PaymentLinkStatus = 'pending' | 'paid' | 'expired' | 'cancelled' | (string & Record<never, never>);
14
- type PabiloErrorCode = 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND' | 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'NETWORK_ERROR' | 'REQUEST_FAILED' | (string & Record<never, never>);
13
+ type PaymentLinkStatus = 'pending' | 'paid' | 'active' | 'expired' | 'cancelled' | (string & Record<never, never>);
14
+ type PaymentLinkType = 'default' | 'fixed' | (string & Record<never, never>);
15
+ type PabiloErrorCode = 'BANK_NOT_AVAILABLE' | 'PAYMENT_NOT_FOUND' | 'BAD_REQUEST' | 'UNAUTHORIZED' | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'NETWORK_ERROR' | 'REQUEST_FAILED' | 'USER_BANK_ALREADY_EXISTS' | 'USER_BANCK_NOT_FOUND' | (string & Record<never, never>);
15
16
  interface BankAccountEntry {
16
17
  account_number: string;
17
18
  account_type: AccountType;
@@ -38,7 +39,18 @@ interface PaymentLink {
38
39
  url: string;
39
40
  amount?: number;
40
41
  status?: PaymentLinkStatus;
42
+ type?: PaymentLinkType;
41
43
  userId?: string;
44
+ name?: string;
45
+ description?: string;
46
+ isUsd?: boolean;
47
+ redirectUrl?: string;
48
+ webhookUrl?: string;
49
+ notificationByWhatsapp?: boolean;
50
+ expirationTime?: number;
51
+ paymentLinkOrigin?: string;
52
+ createdAt?: string;
53
+ updatedAt?: string;
42
54
  }
43
55
  interface PaymentParams {
44
56
  amount: number;
@@ -103,9 +115,31 @@ type VerifyPaymentResult = {
103
115
  isNew: boolean;
104
116
  data: PaymentData;
105
117
  };
118
+ interface UserBankMetadataEntry {
119
+ key_name: string;
120
+ key_value: string;
121
+ }
122
+ interface BaseCreateUserBankRequest {
123
+ description: string;
124
+ userBankPhone: string;
125
+ userBankDni: string;
126
+ metadata?: UserBankMetadataEntry[];
127
+ }
128
+ interface CreateVeBanRequest extends BaseCreateUserBankRequest {
129
+ bankProvider: 'VE_BAN';
130
+ username: string;
131
+ password: string;
132
+ }
133
+ interface CreateVeBanEmpV2Request extends BaseCreateUserBankRequest {
134
+ bankProvider: 'VE_BAN_EMP_V2';
135
+ accountNumber: string;
136
+ apiKey: string;
137
+ }
138
+ type CreateUserBankRequest = CreateVeBanRequest | CreateVeBanEmpV2Request;
106
139
 
107
140
  interface IBankAccountsPort {
108
141
  list(): Promise<UserBank[]>;
142
+ create(req: CreateUserBankRequest): Promise<UserBank>;
109
143
  }
110
144
 
111
145
  interface IPaymentLinksPort {
@@ -169,4 +203,4 @@ declare class PabiloHttpClient implements IHttpClient {
169
203
  request<T>(options: RequestOptions): Promise<T>;
170
204
  }
171
205
 
172
- export { type AccountType, type BankAccountEntry, type BankProvider, type CreatePaymentLinkRequest, 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 PaymentParams, type Plan, type RequestOptions, type UpdatePaymentLinkRequest, type User, type UserBank, type UserBankPayment, type VerifyPaymentRequest, type VerifyPaymentResult };
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 };
package/dist/index.js CHANGED
@@ -92,6 +92,20 @@ var BankAccountsResource = class {
92
92
  constructor(http) {
93
93
  this.http = http;
94
94
  }
95
+ async create(req) {
96
+ const meRes = await this.http.request({ method: "GET", path: "/me" });
97
+ const userId = String(
98
+ meRes["user"]?.["id"] ?? meRes["id"] ?? ""
99
+ );
100
+ const body = buildCreateBody(req, userId);
101
+ const res = await this.http.request({
102
+ method: "POST",
103
+ path: "/usersbank",
104
+ body
105
+ });
106
+ const raw = res["userbank"] ?? res["user_bank"] ?? res["data"] ?? res;
107
+ return normalizeUserBank(raw);
108
+ }
95
109
  async list() {
96
110
  const res = await this.http.request({
97
111
  method: "GET",
@@ -120,6 +134,27 @@ function normalizeBankAccount(raw) {
120
134
  account_type: String(a["account_type"] ?? a["type"] ?? "")
121
135
  };
122
136
  }
137
+ function buildCreateBody(req, userId) {
138
+ const body = {
139
+ bank_provider: req.bankProvider,
140
+ description: req.description,
141
+ user_bank_phone: req.userBankPhone,
142
+ user_bank_dni: req.userBankDni,
143
+ user_id: userId,
144
+ metadata: req.metadata ?? []
145
+ };
146
+ switch (req.bankProvider) {
147
+ case "VE_BAN":
148
+ body["username"] = req.username;
149
+ body["password"] = req.password;
150
+ break;
151
+ case "VE_BAN_EMP_V2":
152
+ body["username"] = req.accountNumber;
153
+ body["password"] = req.apiKey;
154
+ break;
155
+ }
156
+ return body;
157
+ }
123
158
 
124
159
  // src/resources/payment-links.resource.ts
125
160
  var PaymentLinksResource = class {
@@ -168,19 +203,30 @@ var PaymentLinksResource = class {
168
203
  method: "GET",
169
204
  path: `/paymentlink/${id}/info`
170
205
  });
171
- const inner = res["data"]?.["payment_link"] ?? res["data"] ?? res;
172
- return normalizePaymentLink(inner);
206
+ return normalizePaymentLink(res);
173
207
  }
174
208
  };
175
209
  function normalizePaymentLink(raw) {
176
- const src = raw["paymentlink"] ?? raw["data"] ?? raw;
210
+ const dataWrap = raw["data"];
211
+ const src = raw["paymentlink"] ?? dataWrap?.["payment_link"] ?? dataWrap ?? raw;
177
212
  const userId = typeof src["user_id"] === "string" ? src["user_id"] : typeof src["userId"] === "string" ? src["userId"] : void 0;
178
213
  return {
179
214
  id: String(src["id"] ?? ""),
180
215
  url: String(src["url"] ?? ""),
181
216
  ...typeof src["amount"] === "number" ? { amount: src["amount"] } : {},
182
217
  ...typeof src["status"] === "string" ? { status: src["status"] } : {},
183
- ...userId !== void 0 ? { userId } : {}
218
+ ...typeof src["type"] === "string" ? { type: src["type"] } : {},
219
+ ...userId !== void 0 ? { userId } : {},
220
+ ...typeof src["name"] === "string" ? { name: src["name"] } : {},
221
+ ...typeof src["description"] === "string" ? { description: src["description"] } : {},
222
+ ...typeof src["is_usd"] === "boolean" ? { isUsd: src["is_usd"] } : {},
223
+ ...typeof src["redirect_url"] === "string" ? { redirectUrl: src["redirect_url"] } : {},
224
+ ...typeof src["webhook_url"] === "string" ? { webhookUrl: src["webhook_url"] } : {},
225
+ ...typeof src["notification_by_whastapp"] === "boolean" ? { notificationByWhatsapp: src["notification_by_whastapp"] } : {},
226
+ ...typeof src["expiration_time"] === "number" ? { expirationTime: src["expiration_time"] } : {},
227
+ ...typeof src["payment_link_origin"] === "string" ? { paymentLinkOrigin: src["payment_link_origin"] } : {},
228
+ ...typeof src["created_at"] === "string" ? { createdAt: src["created_at"] } : {},
229
+ ...typeof src["updated_at"] === "string" ? { updatedAt: src["updated_at"] } : {}
184
230
  };
185
231
  }
186
232
 
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 } from '../domain/types.js';\n\nexport class BankAccountsResource implements IBankAccountsPort {\n constructor(private readonly http: IHttpClient) {}\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","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\n // Shape: { data: { payment_link: {...} } } or { data: {...} } or root\n const inner =\n (res['data'] as Record<string, unknown> | undefined)?.['payment_link'] ??\n res['data'] ??\n res;\n\n return normalizePaymentLink(inner as Record<string, unknown>);\n }\n}\n\nfunction normalizePaymentLink(raw: Record<string, unknown>): PaymentLink {\n // Shape: { paymentlink: { id, url } } or { data: { id, url } } or root { id, url }\n const src =\n (raw['paymentlink'] as Record<string, unknown> | undefined) ??\n (raw['data'] as Record<string, unknown> | undefined) ??\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 ...(userId !== undefined ? { userId } : {}),\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 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pabilo/sdk",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Official TypeScript SDK for the Pabilo payment platform",
5
5
  "license": "MIT",
6
6
  "keywords": ["pabilo", "payments", "venezuela", "pago-movil", "sdk"],