Executor
The Executor class orchestrates event delivery and subscription management across one or more targets. It abstracts the complexity of handling multiple connections into a single interface.
Overview
The Executor:
- Manages subscriptions
- Handles event publishing
- Supports NIP-77 (negentropy)
- Routes messages to appropriate targets
Basic Usage
typescript
import {Executor, Relays} from '@welshman/net'
// Create executor with relay target
const executor = new Executor(
new Relays([
connection1,
connection2
])
)
// Subscribe to events
const sub = executor.subscribe(
[{kinds: [1], limit: 10}],
{
onEvent: (url, event) => {
console.log(`Got event from ${url}`, event)
},
onEose: (url) => {
console.log(`EOSE from ${url}`)
}
}
)
// Publish event
const pub = executor.publish(
signedEvent,
{
onOk: (url, id, success, message) => {
console.log(`Published to ${url}: ${success ? 'OK' : message}`)
}
}
)
// Clean up
sub.unsubscribe()
executor.target.cleanup()
The Executor is used internally by higher-level APIs but can be used directly when you need fine-grained control over event routing and subscription management.
It's particularly useful when implementing custom targets or handling special relay configurations (like local relays or relay groups).