diff --git a/docs/signer/nip-07.md b/docs/signer/nip-07.md index 40f4741..b0b5f22 100644 --- a/docs/signer/nip-07.md +++ b/docs/signer/nip-07.md @@ -64,28 +64,3 @@ async function example() { } } ``` - -## Request Serialization -The signer implements a lock mechanism to prevent concurrent calls to the extension: - -```typescript -class Nip07Signer implements ISigner { - #lock = Promise.resolve() - - #then = async (f: (ext: Nip07) => T | Promise) => { - const promise = this.#lock.then(() => { - const ext = getNip07() - if (!ext) throw new Error("Nip07 is not enabled") - return f(ext) - }) - - // Reset lock after completion or error - this.#lock = promise.then( - () => undefined, - () => undefined - ) - - return promise - } -} -``` diff --git a/docs/util/blossom.md b/docs/util/blossom.md index a16064c..33545b9 100644 --- a/docs/util/blossom.md +++ b/docs/util/blossom.md @@ -47,19 +47,22 @@ export declare const makeBlossomAuthEvent: (opts: BlossomAuthEventOpts) => Event export declare const buildBlobUrl: (server: string, sha256: string, extension?: string) => string // Checks if a blob exists on server -export declare const checkBlobExists: (server: string, sha256: string, options?: { authEvent?: SignedEvent }) => Promise<{exists: boolean; size?: number}> +export declare const checkBlobExists: (server: string, sha256: string, options?: { headers?: Record; authEvent?: SignedEvent }) => Promise<{exists: boolean; size?: number}> // Downloads blob from server -export declare const getBlob: (server: string, sha256: string, options?: { authEvent?: SignedEvent; range?: {start: number; end?: number} }) => Promise +export declare const getBlob: (server: string, sha256: string, options?: { headers?: Record; authEvent?: SignedEvent; range?: {start: number; end?: number} }) => Promise + +// Checks if uploads are allowed (HEAD request to /upload) +export declare const canUploadBlob: (server: string, options?: { headers?: Record; authEvent?: SignedEvent }) => Promise // Uploads blob to server -export declare const uploadBlob: (server: string, blob: Blob | ArrayBuffer, options?: { authEvent?: SignedEvent }) => Promise +export declare const uploadBlob: (server: string, blob: Blob | ArrayBuffer, options?: { headers?: Record; authEvent?: SignedEvent }) => Promise // Deletes blob from server -export declare const deleteBlob: (server: string, sha256: string, options?: { authEvent?: SignedEvent }) => Promise +export declare const deleteBlob: (server: string, sha256: string, options?: { headers?: Record; authEvent?: SignedEvent }) => Promise // Lists blobs for a pubkey -export declare const listBlobs: (server: string, pubkey: string, options?: { authEvent?: SignedEvent; since?: number; until?: number }) => Promise +export declare const listBlobs: (server: string, pubkey: string, options?: { headers?: Record; authEvent?: SignedEvent; since?: number; until?: number }) => Promise ``` ## File Encryption diff --git a/docs/util/wallet.md b/docs/util/wallet.md new file mode 100644 index 0000000..eb83cf7 --- /dev/null +++ b/docs/util/wallet.md @@ -0,0 +1,76 @@ +# Wallet + +Types and utilities for working with Lightning wallet integrations in Nostr applications. + +## Types + +```typescript +export enum WalletType { + WebLN = "webln", + NWC = "nwc", +} + +export type WebLNInfo = { + enabled: boolean +} + +export type NWCInfo = { + pubkey: string + relay: string + secret: string +} + +export type WebLNWallet = { + type: WalletType.WebLN + info: WebLNInfo +} + +export type NWCWallet = { + type: WalletType.NWC + info: NWCInfo +} + +export type Wallet = WebLNWallet | NWCWallet +``` + +## Type Guards + +```typescript +// Check if a wallet is a WebLN wallet +export declare const isWebLNWallet: (wallet: Wallet) => wallet is WebLNWallet + +// Check if a wallet is a Nostr Wallet Connect wallet +export declare const isNWCWallet: (wallet: Wallet) => wallet is NWCWallet +``` + +## Usage + +```typescript +import { Wallet, WalletType, isWebLNWallet, isNWCWallet } from '@welshman/util' + +function handleWallet(wallet: Wallet) { + if (isWebLNWallet(wallet)) { + // TypeScript knows wallet.info is WebLNInfo + console.log('WebLN enabled:', wallet.info.enabled) + } else if (isNWCWallet(wallet)) { + // TypeScript knows wallet.info is NWCInfo + console.log('NWC relay:', wallet.info.relay) + } +} + +// Create a WebLN wallet +const weblnWallet: Wallet = { + type: WalletType.WebLN, + info: { enabled: true } +} + +// Create an NWC wallet +const nwcWallet: Wallet = { + type: WalletType.NWC, + info: { + pubkey: "...", + relay: "wss://relay.example.com", + secret: "..." + } +} +``` \ No newline at end of file