1---2name: web-lina-pay-sdk3description: Documentação e integração do pacote npm @lina-openx/web-lina-pay-sdk (Lina OpenX / Open Finance). Use este skill sempre que o utilizador pedir ajuda com este SDK: exemplos de chamadas, payloads TypeScript, tipos exportados, fluxos de consentimento, payment request, getPaymentRequest, pagamento OAuth, enrollment e FIDO, participantes, configure / ambientes IAM e API, LinaPayError, ou organização do repo web-lina-pay-sdk. Inclua também pagamento automático/recorrente: createAutomaticPaymentRequest, getAutomaticPaymentRequest, CreateAutomaticPaymentRequest, AutomaticPaymentRequestCreated, GetAutomaticPaymentRequest, AutomaticPaymentRequest, autenticação com LinaPayCredentials ou TokenCredentials (access_token direto, sem IAM no SDK para esse fluxo), sweeping/automatic. Inclua contas de recebimento e identificadores bancários (ISPB): createReceivingAccount, listReceivingAccounts, getReceivingAccount, updateReceivingAccount, deleteReceivingAccount, getBankIdentifiers, getBankIdentifier, tipos ReceivingAccount, Ban4---5
6# Web Lina Pay SDK — skill de documentação
7
8Skill para orientar assistentes e desenvolvedores com base na documentação oficial do SDK e nas tipagens de referência.
9
10## Fonte da verdade (ordem de consulta)
11
121. **`README.md`** na raiz do repositório — descrição, instalação, métodos, exemplos, estrutura de pastas, execução local, erros e tipos principais.
132. **`reference.md`** (nesta pasta) — catálogo consolidado de tipagens alinhado ao README e ao que o pacote exporta em `src/types/index.ts` e `src/index.ts` (inclui **pagamento automático / recorrente** e **contas de recebimento** em § dedicados).
143. **Código em `src/`** — quando o README não cobrir um detalhe ou houver divergência; prefira citar arquivos concretos (`controllers/`, `services/`, `types/`).
15
16## Mapa do README (seções → conteúdo)
17
18| Seção README | O que cobre |
19|--------------|-------------|
20| Descrição | Escopo do SDK (consentimento, payment request, pagamento automático/recorrente, contas de recebimento do subtenant, consulta de payment request, pagamento, enrollment, participantes, FIDO/WebAuthn). |
21| Instalação | `npm` / `yarn` / `pnpm` para `@lina-openx/web-lina-pay-sdk`. |
22| Como usar → Importação | Funções e `LinaPayError` exportados pelo pacote. |
23| Configuração inicial | `configure({ iamBaseUrl, apiBaseUrl })` — HML vs produção. |
24| Métodos 1–12 + §13 contas / ISPB | API pública: 1–11 README; **§12** pagamento automático (**12.1** criação, **12.2** consulta `getAutomaticPaymentRequest`); **§13** cinco funções de contas de recebimento + **§13.6–13.7** `getBankIdentifiers` / `getBankIdentifier` (identificadores bancários); ver tabela abaixo. |
25| Organização de pastas | `src/config`, `controllers`, `services`, `types`, `utils`, `index.ts`. |
26| Como rodar localmente | Node 18+, scripts `dev`, `test`, `format`, `build`, `ci`, clone, pasta `example/`. |
27| Tratamento de erros | `try/catch`, `instanceof LinaPayError`, `statusCode`. |
28| Tipos principais | Credenciais (`LinaPayCredentials`, **`TokenCredentials`** para automatic-payments e para contas/ISPB quando aplicável), consentimento, `CreatePaymentRequestDTO`, `CreateAutomaticPaymentRequest` / `AutomaticPaymentRequestCreated` / **`GetAutomaticPaymentRequest`** / **`AutomaticPaymentRequest`**, `ReceivingAccount`, **`BankIdentifier`**, **`GetBankIdentifiersRequest`**, **`GetBankIdentifierRequest`**, DTOs de contas de recebimento, `PaymentRequestCreated`, `PaymentRequestData` + `PaymentRequestPaymentItem`, demais tipos citados nos exemplos. |
29| Licença / Suporte | MIT, contatos e issues GitLab. |
30
31## Métodos públicos (ordem do README)
32
33| # | Função | Resumo |
34|---|--------|--------|
35| 1 | `configure` | URLs base IAM e API (`LinaPayConfig`). |
36| 2 | `createConsent` | Consentimento de pagamento (`CreateConsentRequest` → `CreateConsentResponse`). |
37| 3 | `createPayment` | Pagamento pós-OAuth (`CreatePaymentRequest`: state, code, idToken, tenantId → `CreatePaymentResponse`). |
38| 4 | `createPaymentRequest` | Solicitação de pagamento distinta de `createPayment` (`CreatePaymentRequestDTO` → `Promise<PaymentRequestCreated>`: `id`, `redirectUri`); validação Zod; erro `Invalid payload`. |
39| 5 | `getPaymentRequest` | Consulta detalhes (`GET` …/requests/:id); `(credentials, id)` → `Promise<PaymentRequestData>`; o `id` costuma ser `PaymentRequestCreated.id`; SDK devolve só o `data` do envelope; datas ISO em **string** (não `Date` em runtime) — ver tabela de campos no README §5. |
40| 6 | `createEnrollment` | Enrollment FIDO (`CreateEnrollmentRequest` → `CreateEnrollmentResponse`). |
41| 7 | `registerDevice` | Callback pós-enrollment (`RegisterDeviceRequest` → tipo exportado como `Enrollment`). |
42| 8 | `getEnrollmentList` | Lista por CPF (`EnrollmentList`). |
43| 9 | `revokeEnrollment` | Revoga por ID (`RevokeEnrollmentResponse`). |
44| 10 | `createPaymentWithEnrollment` | Pagamento com enrollment (`PaymentWithEnrollmentRequest` → `RetornoJsrPaymentDto`). |
45| 11 | `getParticipants` | Participantes (`Participant[]`). |
46| 12.1 | `createAutomaticPaymentRequest` | **Criação** de solicitação de pagamento automático/recorrente. Parâmetro **`credentials`**: `LinaPayCredentials` (IAM + cache) **ou** `TokenCredentials` (`access_token` Bearer já obtido). `CreateAutomaticPaymentRequest` → `Promise<AutomaticPaymentRequestCreated>`; `POST` em `PAYMENTS_REQUEST`; validação Zod; `Invalid payload` se falhar. |
47| 12.2 | `getAutomaticPaymentRequest` | **Consulta** por `paymentRequestId`: `GET …/payments/request/:paymentRequestId` (base `PAYMENTS_REQUEST`). Mesmo union de **`credentials`** que 12.1. Payload `GetAutomaticPaymentRequest`; retorno `Promise<AutomaticPaymentRequest>` (unwrap `data`). Validação `getAutomaticPaymentRequestSchema` / `validateGetAutomaticPaymentRequestPayload`. |
48| 13 | `createReceivingAccount` | `POST` em `apiBaseUrl` + **`/api/v1/sub-tenants-accounts/:subTenantId/receiving-accounts`** — corpo só **`account`** (JSON). `CreateReceivingAccountRequest` → `Promise<ReceivingAccount>`. Validação em `receiving-accounts.utils`. |
49| 14 | `listReceivingAccounts` | `GET …/:subTenantId/receiving-accounts`. Payload `{ subTenantId }` → `Promise<ReceivingAccount[]>`. |
50| 15 | `getReceivingAccount` | `GET …/:subTenantId/:accountId`. Exige **`accountId`**. → `Promise<ReceivingAccount>`. |
51| 16 | `updateReceivingAccount` | `PATCH …/:subTenantId/:accountId` — corpo serializado = **payload completo** (`UpdateReceivingAccountRequest`). → `Promise<ReceivingAccount>`. |
52| 17 | `deleteReceivingAccount` | `DELETE …/:subTenantId/:accountId`. Exige **`accountId`**. → `Promise<ReceivingAccount>`. |
53| 18 | `getBankIdentifiers` | `GET …/sub-tenants-accounts/bank-identifiers` com query opcional **`search`** / **`limit`** (só enviados se não vazios). `GetBankIdentifiersRequest` → `Promise<BankIdentifier[]>`. **`LinaPayCredentials | TokenCredentials`**. Validação Zod (`getBankIdentifiersRequestSchema`). |
54| 19 | `getBankIdentifier` | `GET …/sub-tenants-accounts/bank-identifiers/:bankIspb` (ISPB na rota, URL-encoded). `GetBankIdentifierRequest` → `Promise<BankIdentifier>`. **`LinaPayCredentials | TokenCredentials`**. Validação Zod (`bankIspb` não vazio). |
55
56## Distinções importantes (evitar confusão)
57
58- **`createPayment`** vs **`createPaymentRequest`**: o primeiro finaliza fluxo com tokens OAuth; o segundo envia dados do pagamento (valor, credor, redirect, schedule etc.) e retorna **`PaymentRequestCreated`** (`id`, `redirectUri`).
59- **`createPaymentRequest`** vs **`getPaymentRequest`**: o primeiro cria a solicitação (`POST`) e retorna **`PaymentRequestCreated`** (`id`, `redirectUri`); o segundo consulta (`GET`) e retorna **`PaymentRequestData`** (objeto completo tipado no README e em `reference.md`).
60- **`createPaymentRequest`** vs **`createAutomaticPaymentRequest`**: ambos usam `POST` no mesmo path base de pagamentos (`PAYMENTS_REQUEST`), mas o **payload** é diferente — DTO de solicitação simples (`redirectUri`, `value`, `creditor`, `schedule`…) vs **consentimento recorrente** (`redirectUrl`, `details`, `recurringConsent` com `automatic` ou `sweeping`). Retornos distintos: `PaymentRequestCreated` (`id`) vs **`AutomaticPaymentRequestCreated`** (`paymentRequestId`, `redirectUrl`). Ver README §12.1 e `reference.md` § pagamento automático.
61- **`createAutomaticPaymentRequest`** vs **`getAutomaticPaymentRequest`**: primeiro cria (`POST`); segundo consulta (`GET` com `paymentRequestId` no path). Ambos aceitam **`LinaPayCredentials | TokenCredentials`** — ver README §12.
62- **`LinaPayCredentials`** vs **`TokenCredentials`**: no primeiro o SDK obtém o Bearer no IAM quando `subtenantId` está presente; com **`TokenCredentials`** o integrador passa **`access_token`** já válido. **Pagamento automático** e **contas de recebimento / identificadores bancários** (`createReceivingAccount` … `getBankIdentifier`) aceitam o **union** `LinaPayCredentials | TokenCredentials` no primeiro argumento — ver controllers. Outros métodos (ex.: consentimento clássico, `createPaymentRequest`) podem continuar só com `LinaPayCredentials`; confirmar assinatura em `src/index.ts` se houver dúvida.
63- **`CreatePaymentRequest`** (OAuth) vs **`CreatePaymentRequestDTO`** (solicitação de pagamento): nomes parecidos, payloads completamente diferentes — ver `reference.md`.
64- **Credenciais IAM** (`LinaPayCredentials.subtenantId` / `subtenantSecret`) vs **`subTenantId` no payload** das contas de recebimento: o primeiro serve para obter o Bearer; o segundo é o segmento **`:subTenantId`** na URL da API de contas (`/api/v1/sub-tenants-accounts/...`). Podem coincidir ou não, conforme o modelo da integração — ver README §13.
65- **`listReceivingAccounts`** vs **`getReceivingAccount` / `deleteReceivingAccount`**: a listagem valida só `subTenantId`; consulta e exclusão exigem também **`accountId`** (schemas distintos em `receiving-accounts.utils.ts`).
66## Como responder perguntas sobre o SDK
67
68- Preferir exemplos em TypeScript alinhados ao README (nomes de campos e enums: `PESSOA_NATURAL`, `CACC`, dias da semana em português com `_FEIRA`, etc.).
69- Mencionar `configure` quando o ambiente não for o padrão.
70- Para payloads de **`createPaymentRequest`**, lembrar que a validação runtime exige `schedule` presente (pode ser `{}`) conforme documentação do README.
71- Para **`createAutomaticPaymentRequest`** e **`getAutomaticPaymentRequest`**, o primeiro argumento pode ser **`{ access_token }`** (`TokenCredentials`) quando o token já existir; caso contrário **`{ subtenantId, subtenantSecret }`**. Resolução em `resolveAutomaticPaymentsAccessToken` em `automatic-payments.controller.ts`.
72- Para **`createAutomaticPaymentRequest`**, o payload é inferido do schema Zod (`CreateAutomaticPaymentRequest`): `recurringConfiguration` deve ter **apenas um** ramo (`automatic` **ou** `sweeping`); dentro de `sweeping.periodicLimits`, **apenas um** de `day` | `week` | `month` | `year`. Campos monetários/configuração vêm em grande parte como **string** (ex.: `amount`, `totalAllowedAmount`). Detalhe completo em **`reference.md`**.
73- Para **`getAutomaticPaymentRequest`**, validar `paymentRequestId` não vazio; retorno **`AutomaticPaymentRequest`** é extenso — remeter a `reference.md` / `automatic-payment.types.ts`.
74- Para **`getPaymentRequest`**, usar `created.id` após `createPaymentRequest` (padrão do README §5); implementação em `src/controllers/payment.controller.ts` / `getPaymentRequestService` em `src/services/payment.service.ts`.
75- Para **contas de recebimento** e **identificadores bancários**, lembrar validação Zod (`Invalid payload`): listagem de contas ≠ por `accountId`; **`updateReceivingAccount`** envia o objeto payload completo no `PATCH` (inclui `subTenantId` e `accountId` no corpo, conforme serviço atual). **`getBankIdentifiers`** / **`getBankIdentifier`** não usam `subTenantId` na URL (endpoints globais sob `RECEIVING_ACCOUNTS`); retornam **`BankIdentifier`** (`name`, `ispb`).
76- Tipos exportados: **`PaymentRequestCreated`**, **`PaymentRequestData`**, **`PaymentRequestPaymentItem`**, **`TokenCredentials`**, **`CreateAutomaticPaymentRequest`**, **`AutomaticPaymentRequestCreated`**, **`GetAutomaticPaymentRequest`**, **`AutomaticPaymentRequest`**, **`ReceivingAccount`**, **`BankIdentifier`**, **`GetBankIdentifiersRequest`**, **`GetBankIdentifierRequest`** e DTOs de contas de recebimento — ver README “Tipos principais” e `reference.md`.
77- Erros: descrever `LinaPayError` e uso de `statusCode` quando aplicável.
78
79## Progressive disclosure
80
81- Para **assinaturas completas, unions e interfaces aninhadas**, abrir **`reference.md`** nesta pasta em vez de duplicar tudo no corpo deste skill (inclui § **Autenticação** com `TokenCredentials`, § **Pagamento automático** com criação/consulta e tipo `AutomaticPaymentRequest`, e § **Contas de recebimento** com **identificadores bancários** e tipos `BankIdentifier` / requests associados).
82- Para **comportamento HTTP ou endpoints**, seguir `src/config/environment.ts` (`ENDPOINTS`: `RECEIVING_ACCOUNTS` = `/api/v1/sub-tenants-accounts`, `PAYMENTS_REQUEST`, etc.) e serviços em `src/services/` (`receiving-accounts.service.ts`, `automatic-payments.service.ts`).
83
84## Idioma
85
86- Responder em **português** quando o usuário do projeto utilizar português (alinhado ao README e ao repositório).