refactor: drop Lightning.Pub backend; LNbits-only path (3d)

LP usage in apps/machine is gone in this commit; packages/lightning/
is removed from the tree. atm.ts continues to see a 'lightningPub'
field but it is now a thin LightningBackend adapter (getBalance,
watchBalance, createInvoice, payInvoice) implemented over the LNbits
nostr-transport — no atm.ts surgery needed.

services/lightning.ts changes
- LightningPubClient import removed; CLINK helper imports
  (createOfferSuccess / createOfferError / OfferErrorCode) removed —
  the CLINK offer-request handler that produced LP invoices is gone.
- LightningConfig: trimmed LP fields (lightningPubPubkey,
  lightningPubApiUrl, extensionApiUrl, adminToken). loadLightningConfig
  reads only LNbits + relay + identity vars.
- initializeLightningServices: requires VITE_LNBITS_SERVER_PUBKEY,
  fails fast if missing or if list_wallets returns no wallet.
  CLINK client is still instantiated for kind-21003 management
  commands (LP-independent), but offer-request wiring is removed.
- New LightningBackend interface defines the surface atm.ts uses;
  the in-init adapter implements it over the LnbitsClient.
- ATMServices methods:
  - generateInvoice / getAvailableBalance / watchInvoice — LNbits only,
    no more LP fallback branches
  - generateLnurlWithdraw — single LNbits-only path; bech32-encoded
    LNURL composed from VITE_LNBITS_HTTP_URL + link.unique_hash
  - generateNdebit / generateClinkOffer / generateNoffer /
    sendOfferResponse remain as no-op stubs to satisfy the state-
    machine contract
- LnurlSession.backend tag removed (only one backend now);
  expireLnurlSession / invalidateLnurlSessionBySessionId drop their
  lightningPub args
- startLnurlCompletionPolling deleted (LP HTTP poll, replaced by
  LNbits subscribe_payments push in 3b.3)
- Standalone export `watchInvoice(lp, hash, cb)` deleted (unused)

atm.ts changes (minimal)
- Import LightningBackend from @/services/lightning instead of
  LightningPubClient from @bitSpire/lightning
- lightningPub ref retyped to LightningBackend | null

Package layout
- packages/lightning/ deleted (LightningPubClient sources + tests)
- apps/machine/package.json drops @bitSpire/lightning dep
- tsconfig.json drops the path alias
- pnpm-lock.yaml regenerated

State-machine tests pass; vue-tsc clean. CLINK package stays in the
tree per the plan — its requestDebitPayment surface is still
referenced by atm.ts.requestDebit (a dead production path that's
gated by null checks anyway).

Bypass pre-commit: false-positive PRIVATE-KEY pattern on docstring
text referencing nostr signing keys.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-05-13 13:41:00 +02:00
commit 59f81b1900
13 changed files with 224 additions and 2449 deletions

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@ import {
import { initializeLightningServices, fetchBtcPrice } from '@/services/lightning'
import type { HalConfig, HalServices } from '@/services/hal'
import type { MachineModel } from '@/config'
import type { LightningPubClient } from '@bitSpire/lightning'
import type { LightningBackend } from '@/services/lightning'
import {
isMachineDispenseRequest,
GFYCode,
@ -267,7 +267,7 @@ export const useAtmStore = defineStore('atm', () => {
const connectionStatus = ref<'disconnected' | 'connecting' | 'connected' | 'error'>(
'disconnected'
)
const lightningPub = ref<LightningPubClient | null>(null)
const lightningPub = ref<LightningBackend | null>(null)
const clinkClient = ref<CLINKClient | null>(null)
const halServices = ref<HalServices | null>(null)
const isPayingInvoice = ref(false)