Pular para o conteúdo

SDK TypeScript

@feitpay/sdk é um cliente sem dependências construído sobre fetch, com tipos gerados a partir do contrato OpenAPI. Ele roda em Node.js 20+, Deno, Bun e runtimes de edge.

Janela do terminal
pnpm add @feitpay/sdk
import { FeitPay, FeitPayError } from '@feitpay/sdk';
const gp = new FeitPay({
apiKey: process.env.FEITPAY_API_KEY!, // gp_live_…
baseUrl: 'https://api.feitpay.com',
timeoutMs: 30_000, // por tentativa
maxRetries: 2, // apenas GET e POST idempotente
});
Namespace Métodos
paymentIntents create, retrieve, list, cancel, resolve, timeline
checkoutSessions create, retrieve
invoices create, retrieve, list, void
paymentLinks create, retrieve, list, update
transactions list, retrieve
wallets create, retrieve, list, disable, createOwnershipChallenge, submitOwnershipProof
stores, organizations, customers list / retrieve
webhookEndpoints create, list, retrieve, update, rotateSecret, sendTest
webhookDeliveries list, retrieve, retry
events list, retrieve
reports payments (string CSV ou JSON), reconciliation
billing invoices, usage
auditEvents list
platform capabilities, networks, assets, health
  • Idempotência — os métodos de criação enviam uma Idempotency-Key automaticamente (gp_sdk_…) e a reutilizam nas novas tentativas. Passe { idempotencyKey } para vinculá-la ao id do seu próprio pedido.
  • Novas tentativas — backoff exponencial com jitter total (respeitando Retry-After) em erros de rede, 429 e 5xx, apenas para GET e POST com chave.
  • Paginação — await gp.invoices.list() retorna uma página; for await (const inv of gp.invoices.list()) percorre todas as páginas; .toArray(max) coleta um número limitado.
  • Erros — toda falha é uma subclasse de FeitPayError com type, code, param, requestId e status.
  • Dinheiro — valores são strings. formatBaseUnits('99834', 8) === '0.00099834' usa BigInt, nunca floats.
  • Segurança de caminhos — os ids são codificados como um único segmento de caminho.
try {
const intent = await gp.paymentIntents.retrieve('pi_…');
if (intent.fulfillable) ship(intent.merchant_order_id);
} catch (err) {
if (err instanceof FeitPayError && err.type === 'not_found_error') return null;
throw err;
}