Pular para o conteúdo principal
O é uma ferramenta essencial para construir integrações financeiras com facilidade e confiança. Ele oferece uma interface amigável para desenvolvedores, totalmente tipada, que encapsula a plataforma de serviços financeiros do Midaz, permitindo que você se concentre na sua lógica de negócio em vez do código. Projetado para clareza e escalabilidade, o SDK permite que você trabalhe com Organizations, Ledgers, Accounts, Transactions e mais, seja criando um workflow simples ou gerenciando operações complexas. Em sua essência, o SDK é construído sobre uma arquitetura modular em camadas que prioriza desempenho, extensibilidade e uma excelente experiência de desenvolvimento.

Por que usar o Midaz SDK para TypeScript?

  • Type-safe por design: Construído com suporte completo a TypeScript e definições de tipos precisas.
  • Builder pattern: Interfaces fluentes e legíveis para ajudar você a construir objetos complexos com facilidade.
  • Tratamento de erros robusto: Estratégias de recuperação inteligentes e sinais de erro claros, para que você mantenha o controle.
  • Observabilidade incluída: Tracing, métricas e logs, prontos para uso.
  • Arquitetura em camadas: Separação clara entre client, entities, API e models. Organizado, previsível, escalável.
  • Retries automáticos: Lide com falhas transitórias com políticas de retry configuráveis.
  • Controles de concorrência: Ferramentas integradas para executar tarefas em paralelo sem perder o controle do throughput.
  • Rápido com caching: Cache em memória para melhorar o desempenho onde mais importa.
  • Validação rigorosa: Detecte inputs inválidos cedo com mensagens de erro claras e acionáveis.

Primeiros passos


Pré-requisito

  • O Midaz SDK para TypeScript requer TypeScript v5.8 ou posterior.

Instalando o SDK

Para começar a usar o Midaz SDK para TypeScript, você deve instalar as dependências usando o seguinte comando:
npm install midaz-sdk
Uma vez instalado, siga os exemplos na seção Guia de início rápido para aprender como usar o Midaz SDK para TypeScript.

Autenticação


O Midaz SDK para TypeScript oferece flexibilidade quando se trata de autenticação. Você pode escolher o método que se adequa ao seu setup:

API key

Você pode usar um método de autenticação simples adicionando uma API Key.
const client = createClient({
  apiKey: 'your-api-key',
  environment: 'sandbox',
});

Autenticação com Access Manager

Para integração com provedores de identidade externos usando OAuth:
const client = createClient({
  accessManager: {
    enabled: true,
    address: 'https://auth.example.com',
    clientId: 'your-client-id',
    clientSecret: 'your-client-secret',
  },
  environment: 'sandbox',
});
O Access Manager cuida do gerenciamento de tokens para você, como aquisição, caching e renovação, para que você não precise se preocupar em gerenciar tokens manualmente.
Oferecemos um plugin Access Manager que você pode usar. Se quiser saber mais sobre ele, entre em contato.

Guia de início rápido


Nas seções a seguir, você encontrará exemplos práticos de código para ajudar a entender como usar o Midaz SDK para TypeScript.

Crie um client

Este é o primeiro, e possivelmente mais importante, passo. O client é seu ponto de entrada principal para o SDK. Ele lida com autenticação e dá acesso a todos os serviços de entidades. Exemplo:
import { createClient } from 'midaz-sdk';

const client = createClient({
  apiKey: 'your-api-key',
  environment: 'sandbox', // Options: 'development', 'sandbox', 'production'
});

Crie um Asset

A melhor forma de criar assets é com o Builder Pattern usando createAssetBuilder. Exemplo:
import { createAssetBuilder } from 'midaz-sdk';

const assetInput = createAssetBuilder('US Dollar', 'USD')
  .withType('currency')
  .withMetadata({ precision: 2, symbol: '$' })
  .build();

const asset = await client.entities.assets.createAsset('org_123', 'ledger_456', assetInput);
Neste código, você adiciona os campos obrigatórios name e assetCode ao builder const assetInput = createAssetBuilder('US Dollar', 'USD'), e então adiciona quaisquer propriedades adicionais com métodos with*.

Crie uma Account

A forma mais fácil de criar contas é com o Builder Pattern usando createAccountBuilder. Exemplo:
import { createAccountBuilder } from 'midaz-sdk';

const accountInput = createAccountBuilder('Savings Account', 'USD')
  .withType('savings')
  .withAlias('personal-savings')
  .build();

const account = await client.entities.accounts.createAccount('org_123', 'ledger_456', accountInput);
Neste código, você adiciona os campos obrigatórios name e assetCode ao builder const accountInput = createAccountBuilder('Savings Account', 'USD'), e então adiciona quaisquer propriedades adicionais com métodos with*.

Crie uma Transaction

A forma mais fácil de criar transações é com o Builder Pattern usando createTransactionBuilder. Exemplo:
import { createTransactionBuilder } from 'midaz-sdk';

const transactionInput = createTransactionBuilder()
  .withCode('payment_001')
  .withOperations([
    {
      accountId: 'source_account_id',
      assetCode: 'USD',
      amount: 100 * 100, // $100.00
      type: 'debit',
    },
    {
      accountId: 'destination_account_id',
      assetCode: 'USD',
      amount: 100 * 100, // $100.00
      type: 'credit',
    },
  ])
  .withMetadata({ purpose: 'Monthly payment' })
  .build();
Neste código, você adiciona todas as propriedades com métodos with*.

Recuperação de erros

Use a recuperação aprimorada de erros para operações críticas
import { withEnhancedRecovery } from 'midaz-sdk/util/error';

const result = await withEnhancedRecovery(
  () => client.entities.transactions.createTransaction('org_123', 'ledger_456', transactionInput),
  {
    maxRetries: 3,
    enableSmartRecovery: true,
  }
);

Limpar recursos

client.close();

Usando Access Manager para autenticação

import { createClientConfigWithAccessManager, MidazClient } from 'midaz-sdk';

// Initialize the client with Access Manager authentication
const client = new MidazClient(
  createClientConfigWithAccessManager({
    address: 'https://auth.example.com', // Identity provider address
    clientId: 'your-client-id', // OAuth client ID
    clientSecret: 'your-client-secret', // OAuth client secret
    tokenEndpoint: '/oauth/token', // Optional, defaults to '/oauth/token'
    refreshThresholdSeconds: 300, // Optional, defaults to 300 (5 minutes)
  })
    .withEnvironment('sandbox')
    .withApiVersion('v1')
);

// The SDK will automatically handle token acquisition and renewal
// You can now use the client as normal
const organizations = await client.entities.organizations.listOrganizations();

// For environment-specific configurations with Access Manager
const sandboxClient = new MidazClient(
  createSandboxConfigWithAccessManager({
    address: 'https://auth.example.com',
    clientId: 'your-client-id',
    clientSecret: 'your-client-secret',
  })
);

// Clean up resources when done
client.close();

Arquitetura do SDK


O Midaz SDK usa uma arquitetura de serviços em múltiplas camadas para fornecer uma experiência de desenvolvimento limpa, modular e escalável. Ele é organizado em três camadas principais, como mostrado na Figura 1, cada uma servindo a um propósito distinto.
  • Interface do Client: Este é o ponto de entrada principal para os usuários do SDK. Ele gerencia configurações como API keys e ambientes, inicializa serviços de forma lazy e expõe toda a funcionalidade disponível de maneira unificada e descobrível.
  • Camada de Entity Services: Esta camada contém serviços específicos de domínio (ex.: Accounts, Assets e Transactions) e oferece métodos consistentes para operações como create, get, update, delete e list. Além disso, operações especializadas são incluídas com base nas necessidades específicas de cada entidade.
  • Camada de Core Services: Esses utilitários fundamentais são usados por todos os entity services. Eles lidam com requisições HTTP, validação de input, processamento de erros, observabilidade, configuração e caching.
A arquitetura do SDK enfatiza:
  • Consistência através de padrões compartilhados entre serviços.
  • Escalabilidade via injeção de dependência e factories de serviços.
  • Confiabilidade através de tratamento aprimorado de erros e respostas tipadas.
  • Testabilidade com suporte para mocking, integração e testes de contrato.
Quer se aprofundar? Confira as seguintes páginas para mais informações sobre a arquitetura:

Builder pattern


O Midaz SDK para TypeScript emprega um design pattern builder para ajudar você a montar objetos avançados de forma direta, segura e adaptável. Em vez de pré-definir um conjunto de inputs, ele fornece uma interface fluente, encadeável e passo a passo que guia você por todo o processo. Funções builder no SDK:
  • Ajudam informando os parâmetros antecipadamente.
  • Permitem modificar campos opcionais usando métodos .with*() e encadeá-los.
  • Ajudam a evitar estados inválidos através de uma estrutura guiada.
  • Ocultam complexidade interna, resultando em melhor legibilidade.

Exemplo

Aqui vai um exemplo rápido:
const assetInput = createAssetBuilder('USD Currency', 'USD')
  .withType('currency')
  .withMetadata({ precision: 2 })
  .build();
Você pode então passar esse assetInput para o método de criação correspondente no SDK.
Quer se aprofundar? Confira a página Builder Pattern no Midaz SDK para mais informações.

Trabalhando com entidades


Cada entity service foca em aspectos distintos do domínio financeiro, como contas, assets ou transações. Esses serviços fornecem um método confiável para criar, recuperar, atualizar e excluir dados, permitindo interações significativas com cada tipo de entidade. Além disso, oferecem funcionalidades especializadas projetadas para seus casos de uso específicos, permitindo que você lide com dados financeiros com maior confiança e eficiência.
EntidadeDescrição
OrganizationsGerencie unidades de negócio e dados organizacionais.
LedgersEstruture e gerencie registros financeiros.
AssetsTrabalhe com assets como moedas, commodities e outras unidades de valor.
AccountsCrie, recupere, atualize e exclua contas dentro de um Ledger.
SegmentsOrganize Portfólios para analytics e relatórios.
PortfóliosAgrupe contas e assets em coleções financeiras significativas.
BalancesRecupere e calcule saldos de assets para contas.
Asset RatesGerencie taxas de câmbio entre diferentes tipos de assets.
TransactionsCrie e gerencie transações que movem assets entre contas.
OperationsGerencie débitos e créditos atômicos que compõem uma transação.
Você pode acessar cada um desses serviços através do client do SDK. Eles seguem uma estrutura consistente, facilitando a construção e manutenção de funcionalidades financeiras.
Quer se aprofundar? Confira as páginas de Entidades para mais informações.

Usando utilitários


O SDK fornece um conjunto de módulos utilitários para simplificar operações comuns, seja otimizando desempenho, tratando erros, gerenciando configurações ou melhorando a observabilidade. Essas ferramentas são projetadas para funcionar perfeitamente com o resto do SDK e ajudar você a construir aplicações financeiras robustas com menos esforço.
UtilitárioDescrição
Account HelpersSimplifica lógica e transformações comuns relacionadas a contas.
CacheHabilita caching leve para melhor desempenho em runtime.
ConcurrencyAjuda a coordenar e limitar tarefas concorrentes de forma segura e eficiente.
ConfigConfiguração centralizada e acesso.
DataAuxilia com formatação de dados e tarefas de paginação.
Error HandlingOferece estratégias de recuperação e mecanismos de processamento de erros.
HTTP ClientFornece uma interface HTTP de baixo nível para chamadas diretas à API.
NetworkAdiciona funcionalidades de rede de alto nível como retries e backoff.
ObservabilityCaptura traces, métricas e logs para suportar monitoramento e depuração.
PaginationLida com respostas paginadas com helpers previsíveis e consistentes.
ValidationValida dados de entrada e saída para ajudar a manter a integridade dos dados.
Quer se aprofundar? Confira as páginas de Utilitários para mais informações.

Tratamento de erros


O Midaz SDK para TypeScript ajuda você a tratar erros de forma clara e consistente. Quando um erro ocorre durante uma operação do SDK, um erro estruturado é lançado. Este erro inclui campos chave para ajudar você a entender e resolver o problema:
  • code: Um identificador curto e consistente para o tipo de erro.
  • message: Uma descrição legível.
  • details: (Opcional) Contexto ou metadados adicionais.
  • status: O código de status HTTP, quando disponível.
Veja como você pode tratar um erro:
try {
  await client.transactions.create(transaction);
} catch (err) {
  console.error(`Error (${err.code}): ${err.message}`);
  // Optionally: inspect err.details or err.status
}

Códigos de erro comuns

CódigoDescriçãoStatus HTTP
invalid_inputSua requisição está faltando dados obrigatórios ou tem valores inválidos.400
unauthorizedAutenticação falhou ou credenciais estão faltando.401
forbiddenVocê não tem permissão para realizar esta ação.403
not_foundO recurso que você está tentando acessar não existe.404
conflictA operação conflita com um recurso existente.409
internal_errorAlgo deu errado do nosso lado.500
service_unavailableInterrupção temporária — tente novamente mais tarde.503

Boas práticas

  • Valide o input antes de chamar métodos do SDK para evitar invalid_input.
  • Verifique a autenticação ao enfrentar unauthorized ou forbidden.
  • Faça retry em problemas transitórios como internal_error ou service_unavailable.
  • Use details para exibir informações úteis de depuração nos logs de desenvolvimento.
O SDK é construído para manter erros previsíveis e acionáveis, para que você possa focar em construir, não em depurar.
DicaQuer se aprofundar? Confira as seguintes páginas para mais informações:

Pipeline CI/CD


Usamos GitHub Actions para manter tudo fluido, automatizado e pronto para produção:
  • Executa testes em múltiplas versões do Node.js.
  • Aplica qualidade de código com ESLint e Prettier.
  • Mantém dependências atualizadas com Dependabot.
  • Lida com releases automaticamente usando versionamento semântico.
  • Gera changelogs para total transparência.

Quer contribuir?


Se você está pensando em contribuir com o Midaz SDK para TypeScript, comece com nosso guia de contribuição no GitHub. Ele cobre tudo que você precisa saber para começar.

Licença


Este projeto é licenciado sob a Elastic License 2.0. Para detalhes, confira a página de Licença.