Compare commits

..

2 commits

Author SHA1 Message Date
Patrick Mulligan
30850a4aae feat(extensions): add NIP-15 marketplace extension
Some checks failed
Docker Compose Actions Workflow / test (push) Has been cancelled
Implements a Nostr-native marketplace extension for Lightning.Pub
that is compatible with NIP-15 (Nostr Marketplace).

Features:
- Stall management (kind 30017 events)
- Product listings (kind 30018 events)
- Order processing via encrypted Nostr DMs or RPC
- Multi-currency support with exchange rate caching
- Inventory management with stock tracking
- Customer relationship management
- Lightning payment integration

The extension leverages Lightning.Pub's existing Nostr infrastructure
for a more elegant implementation than traditional HTTP-based approaches.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 15:06:48 -05:00
Patrick Mulligan
7a7b995b5c feat(extensions): add getLnurlPayInfo to ExtensionContext
Some checks failed
Docker Compose Actions Workflow / test (push) Has been cancelled
Enables extensions to get LNURL-pay info for users by pubkey,
supporting Lightning Address (LUD-16) and zap (NIP-57) functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-13 15:02:16 -05:00
2 changed files with 45 additions and 1 deletions

View file

@ -8,7 +8,8 @@ import {
PaymentReceivedData, PaymentReceivedData,
NostrEvent, NostrEvent,
UnsignedNostrEvent, UnsignedNostrEvent,
RpcMethodHandler RpcMethodHandler,
LnurlPayInfo
} from './types.js' } from './types.js'
/** /**
@ -44,6 +45,15 @@ export interface MainHandlerInterface {
paymentHash: string paymentHash: string
feeSats: number feeSats: number
}> }>
/**
* Get LNURL-pay info for a user by their Nostr pubkey
* This enables Lightning Address (LUD-16) and zap (NIP-57) support
*/
getLnurlPayInfoByPubkey(pubkeyHex: string, options?: {
metadata?: string
description?: string
}): Promise<LnurlPayInfo>
} }
// Nostr operations // Nostr operations
@ -177,6 +187,17 @@ export class ExtensionContextImpl implements ExtensionContext {
return this.mainHandler.sendNostrEvent(event) return this.mainHandler.sendNostrEvent(event)
} }
/**
* Get LNURL-pay info for a user by pubkey
* Enables Lightning Address and zap support
*/
async getLnurlPayInfo(pubkeyHex: string, options?: {
metadata?: string
description?: string
}): Promise<LnurlPayInfo> {
return this.mainHandler.paymentManager.getLnurlPayInfoByPubkey(pubkeyHex, options)
}
/** /**
* Subscribe to payment received callbacks * Subscribe to payment received callbacks
*/ */

View file

@ -77,6 +77,20 @@ export interface PaymentReceivedData {
metadata?: Record<string, any> metadata?: Record<string, any>
} }
/**
* LNURL-pay info response (LUD-06/LUD-16)
* Used for Lightning Address and zap support
*/
export interface LnurlPayInfo {
tag: 'payRequest'
callback: string // URL to call with amount
minSendable: number // Minimum msats
maxSendable: number // Maximum msats
metadata: string // JSON-encoded metadata array
allowsNostr?: boolean // Whether zaps are supported
nostrPubkey?: string // Pubkey for zap receipts (hex)
}
/** /**
* Nostr event structure (minimal) * Nostr event structure (minimal)
*/ */
@ -142,6 +156,15 @@ export interface ExtensionContext {
*/ */
publishNostrEvent(event: UnsignedNostrEvent): Promise<string | null> publishNostrEvent(event: UnsignedNostrEvent): Promise<string | null>
/**
* Get LNURL-pay info for a user (by pubkey)
* Used to enable Lightning Address support (LUD-16) and zaps (NIP-57)
*/
getLnurlPayInfo(pubkeyHex: string, options?: {
metadata?: string // Custom metadata JSON
description?: string // Human-readable description
}): Promise<LnurlPayInfo>
/** /**
* Subscribe to payment received callbacks * Subscribe to payment received callbacks
*/ */