# Publish Utilities for publishing events to Nostr relays with status tracking and callback handling. ## Enums ### PublishStatus Status values for publish operations: - `Sending` - Event is being sent - `Pending` - Waiting for relay response - `Success` - Event published successfully - `Failure` - Event rejected by relay - `Timeout` - Request timed out - `Aborted` - Request was aborted ## Types ### PublishResult Result object for publish operations: - `relay` - The relay URL - `status` - PublishStatus enum value - `detail` - Human-readable status message ### PublishResultsByRelay Type alias for `Record` - maps relay URLs to their publish results. ## Functions ### publishOne(options) Publishes an event to a single relay and returns a promise that resolves with a `PublishResult`. **Options:** - `event` - The signed event to publish - `relay` - Relay URL - `signal?` - AbortSignal for cancellation - `timeout?` - Timeout in milliseconds (default: 10000) - `context?` - Adapter context - Callback functions (all receive `PublishResult`): `onSuccess`, `onFailure`, `onPending`, `onTimeout`, `onAborted`, `onComplete` ### publish(options) Publishes an event to multiple relays in parallel and returns a `PublishResultsByRelay` object mapping relay URLs to their publish results. ## Example ```typescript import {publish, PublishStatus} from "@welshman/net" const event = { // ... signed event } const resultsByRelay = await publish({ event, relays: ["wss://relay1.com", "wss://relay2.com"], timeout: 5000, onSuccess: (result) => console.log(`Published to ${result.relay}: ${result.detail}`), onFailure: (result) => console.log(`Failed on ${result.relay}: ${result.detail}`) }) console.log(resultsByRelay) // { // "wss://relay1.com": {relay: "wss://relay1.com", status: PublishStatus.Success, detail: "ok"}, // "wss://relay2.com": {relay: "wss://relay2.com", status: PublishStatus.Failure, detail: "invalid: ..."} // } ```