Pular para o conteúdo principal

BSO Resolver

O BSO Resolver traduz nomes de domínio .bso em suas chaves públicas correspondentes lendo registros Bitsocial TXT armazenados no ENS. Ele fornece um cliente viem compartilhado, cache persistente e funciona em ambientes Node.js e de navegador.

Instalação

npm install @bitsocial/bso-resolver

Criando um resolvedor

Instancie o resolvedor passando um objeto de configuração para o construtor:

const resolver = new BsoResolver({ key, provider, dataPath });
ParâmetroObrigatórioDescrição
keySimIdentificador da instância do resolvedor.
providerSimConfiguração de transporte (veja abaixo).
dataPathNãoDiretório para o arquivo de cache SQLite (somente Node.js).

Opções de provedor

O parâmetro provider aceita três formatos:

  • "viem" -- Usa o transporte público padrão fornecido pelo viem.
  • HTTP(S) URL – Conecta-se por meio de um endpoint JSON-RPC (por exemplo, https://mainnet.infura.io/v3/YOUR_KEY).
  • WebSocket URL – Conecta-se por meio de um endpoint WebSocket RPC (por exemplo, wss://mainnet.infura.io/ws/v3/YOUR_KEY).

Métodos

resolve({ name, abortSignal? })

Procura um nome .bso e retorna a chave pública associada. Um AbortSignal opcional pode ser passado para cancelar solicitações de longa duração.

canResolve({ name })

Retorna um booleano que indica se o resolvedor é capaz de lidar com o nome fornecido. Use isto para verificar o suporte antes de tentar uma resolução completa.

destroy()

Desmonta o resolvedor, fechando conexões com o banco de dados e liberando recursos. Chame isso quando o resolvedor não for mais necessário.

Cache

Os nomes resolvidos são armazenados em cache automaticamente para reduzir pesquisas redundantes na rede. O back-end de cache é escolhido com base no ambiente de tempo de execução:

Meio AmbienteBack-endNotas
Node.jsSQLiteArmazenado em dataPath. Usa o modo WAL para acesso simultâneo.
NavegadorIndexadoDBUsa transações IndexedDB nativas.
ReservaMap na memóriaUsado quando nem SQLite nem IndexedDB estão disponíveis.

Todas as entradas de cache têm um TTL de uma hora e são automaticamente removidas após a expiração.

Integração com pkc-js

O resolvedor pode ser conectado diretamente ao pkc-js por meio da opção nameResolvers, permitindo a resolução transparente de nomes .bso durante pesquisas de chave:

const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});

Simultaneidade

O resolvedor foi projetado para ser seguro sob uso simultâneo:

  • Um único cliente viem compartilhado evita conexões redundantes.
  • SQLite opera no modo WAL (Write-Ahead Logging), permitindo leituras simultâneas sem bloqueio.
  • O cache do navegador depende de transações nativas do IndexedDB para isolamento.

Pontos de entrada da plataforma

O pacote fornece pontos de entrada separados para Node.js e compilações de navegador. Os empacotadores que suportam o campo exports em package.json selecionarão automaticamente o campo correto.