import { AlbyProvider } from 'l402-kit';// 1. Создайте Alby Hub на hub.getalby.com (или разверните самостоятельно)// 2. Настройки → Токены доступа → создать токен (области: invoices:create, invoices:read)const lightning = new AlbyProvider( process.env.ALBY_ACCESS_TOKEN!, // токен доступа к Hub process.env.ALBY_HUB_URL!, // например "https://your-name.getalby.com");
l402kit.com размещает Lightning-ноду. Вы получаете 99.7% от каждого платежа. Требует явного подтверждения.
import { ManagedProvider } from 'l402-kit';const lightning = ManagedProvider.fromAddress('you@yourdomain.com');// Необязательно: автоматическая регистрация в публичном каталоге 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', },});
Регистрация выполняется один раз при запуске (fire-and-forget, ошибки игнорируются). API появляется на l402kit.com/apis.json, чтобы агенты могли обнаружить его автоматически.
Установите SUPABASE_URL + SUPABASE_ANON_KEY в переменных окружения, чтобы автоматически логировать платежи.
app.get('/api', l402({ priceSats: 10, lightning }), handler);// SUPABASE_URL и SUPABASE_ANON_KEY читаются из process.env автоматически
Схема таблицы платежей (payments):
create table payments ( id uuid primary key default gen_random_uuid(), payment_hash text unique not null, -- SHA256(preimage) — безопасно хранить endpoint text, amount_sats integer, paid_at timestamptz default now());
payment_hash хранит SHA256(preimage), а не сам preimage. preimage — это 32-байтный секрет Lightning-платежа; его хэш уже публично доступен в BOLT11-инвойсе.
Верификация токена выполняет SHA256(preimage) == paymentHash в памяти — менее миллисекунды, без сетевого вызова на горячем пути.Встроенный ReplayAdapter (по умолчанию, в памяти) также работает синхронно. При использовании RedisReplayAdapter добавьте 5–50 мс на Redis-запрос для каждого запроса. Планируйте пропускную способность соответственно для высоконагруженных эндпоинтов.
Middleware без дополнительной настройки принимает заголовок X-Payment (используемый в протоколе x402 от Coinbase) наряду со стандартным заголовком Authorization: L402 …. Оба обрабатываются одинаково — полезно, если вы хотите обслуживать клиентов, работающих с любым из протоколов.
// Клиент использует заголовок x402 — обрабатывается прозрачно// X-Payment: <macaroon>:<preimage>