Re-work publish/thunk status
This commit is contained in:
@@ -32,10 +32,10 @@ const publish = async (content: string) => {
|
||||
delay: 3000, // 3s window for abort
|
||||
})
|
||||
|
||||
// Track publish status
|
||||
thunk.status.subscribe(statuses => {
|
||||
for (const [url, {status, message}] of Object.entries(statuses)) {
|
||||
console.log(`${url}: ${status} ${message}`)
|
||||
// Track publish results
|
||||
thunk.subscribe($thunk => {
|
||||
for (const [url, result] of Object.entries($thunk.results)) {
|
||||
console.log(`${url}: ${result.status} - ${result.detail}`)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -47,7 +47,7 @@ const publish = async (content: string) => {
|
||||
}, 1000)
|
||||
|
||||
// Wait for completion
|
||||
await thunk.result
|
||||
await thunk.complete
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+24
-7
@@ -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: ..."}
|
||||
// }
|
||||
```
|
||||
Reference in New Issue
Block a user