# SDK TypeScript server-side — candidato interno

Este SDK cobre somente os 18 métodos de `public-consultations-v1`. Ele ainda não foi publicado em registro de pacotes. Os tipos de resultado refletem os exemplos auditados, que são parciais; propriedades adicionais são aceitas e a OpenAPI pública ainda não é um contrato exaustivo de respostas.

Commit auditado: `b49957403d667e1870099ca7506039e7cac66736` (02/10/2026). Isso não comprova a revisão implantada nem a publicação deste candidato em uma instância.

Use Node.js 22.18+ ou 24+ para executar TypeScript nativamente. Dentro de `sdk/typescript`, salve o exemplo abaixo como `exemplo.ts` e execute `node exemplo.ts` com `SYSLED_URL` e `SYSLED_TOKEN` no ambiente. Não instale um pacote homônimo de registro público.

```ts
import { SysledClient } from "./src/index.ts";

const sysled = new SysledClient(); // lê SYSLED_URL e SYSLED_TOKEN
const page = await sysled.call("products.list", { limit: 24, offset: 0 });
console.log(page.items.length, page.next_cursor ?? null);
```

`SYSLED_URL` deve ser somente a origem fornecida pelo administrador (sem caminho, credenciais, query string ou fragmento); `SYSLED_TOKEN` deve permanecer em segredo no servidor. O cliente exige HTTPS fora de loopback, bloqueia redirects, aplica timeout de 10 segundos até a leitura do corpo, valida o envelope e redige tokens de erros de transporte. Não conserva exceções originais em `cause`. Não registre URLs completas, pois o contrato coloca o token no caminho. Um `fetchImpl` injetado precisa respeitar `AbortSignal` para cumprir o timeout.

O cliente não repete requisições automaticamente. Para `429`, leia `SysledApiError.retryAfterMs`. Para timeout, confirme o estado antes de repetir qualquer operação; este SDK deliberadamente só expõe o perfil público atual de consultas/validações.

Em `messages.list`, omita `before` na primeira chamada; nas seguintes, envie `next_cursor` sem modificá-lo. `total` conta o lote e `total_count` o histórico; `hasMore` indica continuação. Confirme a implantação da revisão acima antes de depender desses campos. `messages.get` permanece fora deste SDK/perfil.

Teste sem rede (a partir de `sdk/typescript`; todos os transportes são simulados):

```sh
npm test
```
