import { BTCPayProvider } from 'l402-kit';const lightning = new BTCPayProvider( process.env.BTCPAY_URL!, // https://your-btcpay.com process.env.BTCPAY_API_KEY!, // chave de API da loja process.env.BTCPAY_STORE_ID!, // ID da loja);
import { BlinkProvider } from 'l402-kit';const lightning = new BlinkProvider( process.env.BLINK_API_KEY!, // dashboard.blink.sv → API Keys process.env.BLINK_WALLET_ID!, // seu ID de carteira BTC);
import { OpenNodeProvider } from 'l402-kit';const lightning = new OpenNodeProvider( process.env.OPENNODE_API_KEY!, false, // testMode — defina como true para sandbox);
l402kit.com hospeda o nó Lightning. Você recebe 99,7% de cada pagamento. Opt-in explícito.
import { ManagedProvider } from 'l402-kit';const lightning = ManagedProvider.fromAddress('you@yourdomain.com');// Opcional: registrar automaticamente no diretório público de APIsconst lightning = ManagedProvider.fromAddress('you@yourdomain.com', { registerDirectory: { url: 'https://api.you.com/v1/data', name: 'My Data API', priceSats: 10, category: 'data', // data | ai | finance | weather | compute | storage | other description: 'Optional', },});
O registro ocorre uma vez na inicialização (fire-and-forget, erros são silenciosos). A API aparece em l402kit.com/apis.json para que agentes possam descobri-la automaticamente.
Defina SUPABASE_URL + SUPABASE_ANON_KEY em seu ambiente para registrar pagamentos automaticamente.
app.get('/api', l402({ priceSats: 10, lightning }), handler);// SUPABASE_URL e SUPABASE_ANON_KEY são lidos de process.env automaticamente
Schema da tabela de pagamentos (payments):
create table payments ( id uuid primary key default gen_random_uuid(), payment_hash text unique not null, -- SHA256(preimage) — seguro para armazenar endpoint text, amount_sats integer, paid_at timestamptz default now());
payment_hash armazena SHA256(preimage), não o preimage bruto. O preimage é o segredo de pagamento Lightning de 32 bytes — seu hash já é público na fatura BOLT11.
A verificação do token executa SHA256(preimage) == paymentHash em memória — sub-milissegundo, sem chamada de rede no caminho crítico.O ReplayAdapter em memória (padrão) também é executado de forma síncrona. Se você usar RedisReplayAdapter, adicione uma ida e volta ao Redis de 5–50 ms por requisição. Planeje a capacidade adequadamente para endpoints de alta frequência.
O middleware aceita silenciosamente o cabeçalho X-Payment (usado pelo protocolo x402 da Coinbase) além do cabeçalho padrão Authorization: L402 …. Ambos são tratados de forma idêntica — útil se você quiser atender clientes que utilizam qualquer um dos protocolos.
// Cliente usando cabeçalho x402 — tratado de forma transparente// X-Payment: <macaroon>:<preimage>
Nenhuma configuração é necessária; está sempre habilitado.