Re-work publish/thunk status

This commit is contained in:
Jon Staab
2025-10-01 16:59:16 -07:00
parent a2d519766d
commit d01f844078
21 changed files with 225 additions and 190 deletions
+24 -7
View File
@@ -14,11 +14,24 @@ Status values for publish operations:
- `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<string, PublishResult>` - maps relay URLs to their publish results.
## Functions
### publishOne(options)
Publishes an event to a single relay and returns a promise that resolves with the publish status.
Publishes an event to a single relay and returns a promise that resolves with a `PublishResult`.
**Options:**
- `event` - The signed event to publish
@@ -26,11 +39,11 @@ Publishes an event to a single relay and returns a promise that resolves with th
- `signal?` - AbortSignal for cancellation
- `timeout?` - Timeout in milliseconds (default: 10000)
- `context?` - Adapter context
- Callback functions: `onSuccess`, `onFailure`, `onPending`, `onTimeout`, `onAborted`, `onComplete`
- Callback functions (all receive `PublishResult`): `onSuccess`, `onFailure`, `onPending`, `onTimeout`, `onAborted`, `onComplete`
### publish(options)
Publishes an event to multiple relays in parallel and returns a status object mapping relay URLs to their publish status.
Publishes an event to multiple relays in parallel and returns a `PublishResultsByRelay` object mapping relay URLs to their publish results.
## Example
@@ -41,13 +54,17 @@ const event = {
// ... signed event
}
const statusByRelay = await publish({
const resultsByRelay = await publish({
event,
relays: ["wss://relay1.com", "wss://relay2.com"],
timeout: 5000,
onSuccess: (detail, relay) => console.log(`Published to ${relay}`),
onFailure: (detail, relay) => console.log(`Failed on ${relay}: ${detail}`)
onSuccess: (result) => console.log(`Published to ${result.relay}: ${result.detail}`),
onFailure: (result) => console.log(`Failed on ${result.relay}: ${result.detail}`)
})
console.log(statusByRelay) // { "wss://relay1.com": "success", "wss://relay2.com": "failure" }
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: ..."}
// }
```