import { BTCPayProvider } from 'l402-kit';const lightning = new BTCPayProvider( process.env.BTCPAY_URL!, // https://your-btcpay.com process.env.BTCPAY_API_KEY!, // chiave API del negozio process.env.BTCPAY_STORE_ID!, // ID del negozio);
import { BlinkProvider } from 'l402-kit';const lightning = new BlinkProvider( process.env.BLINK_API_KEY!, // dashboard.blink.sv → Chiavi API process.env.BLINK_WALLET_ID!, // il tuo ID wallet BTC);
import { OpenNodeProvider } from 'l402-kit';const lightning = new OpenNodeProvider( process.env.OPENNODE_API_KEY!, false, // testMode — imposta a true per la sandbox);
l402kit.com ospita il nodo Lightning. Ricevi il 99,7% di ogni pagamento. Opt-in esplicito.
import { ManagedProvider } from 'l402-kit';const lightning = ManagedProvider.fromAddress('you@yourdomain.com');// Opzionale: registrazione automatica nella directory pubblica delle APIconst 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', },});
La registrazione viene eseguita una volta all’avvio (fire-and-forget, gli errori sono silenziosi). L’API appare su l402kit.com/apis.json in modo che gli agenti possano scoprirla automaticamente.
Imposta SUPABASE_URL + SUPABASE_ANON_KEY nel tuo ambiente per registrare i pagamenti automaticamente.
app.get('/api', l402({ priceSats: 10, lightning }), handler);// SUPABASE_URL e SUPABASE_ANON_KEY vengono letti automaticamente da process.env
Schema della tabella pagamenti (payments):
create table payments ( id uuid primary key default gen_random_uuid(), payment_hash text unique not null, -- SHA256(preimage) — sicuro da memorizzare endpoint text, amount_sats integer, paid_at timestamptz default now());
payment_hash memorizza SHA256(preimage), non il preimage grezzo. Il preimage è il segreto di pagamento Lightning a 32 byte — il suo hash è già pubblico nella fattura BOLT11.
La verifica del token esegue SHA256(preimage) == paymentHash in memoria — sub-millisecondo, nessuna chiamata di rete sul percorso critico.Il ReplayAdapter in-memory (predefinito) viene eseguito anche in modo sincrono. Se utilizzi RedisReplayAdapter, aggiungi un round-trip Redis di 5–50 ms per ogni richiesta. Pianifica la capacità di conseguenza per gli endpoint ad alta frequenza.
Il middleware accetta silenziosamente l’header X-Payment (utilizzato dal protocollo x402 di Coinbase) in aggiunta all’header standard Authorization: L402 …. Entrambi sono trattati in modo identico — utile se vuoi servire client che parlano uno dei due protocolli.
// Client che utilizza l'header x402 — gestito in modo trasparente// X-Payment: <macaroon>:<preimage>
Nessuna configurazione necessaria; è sempre abilitato.