Fix tags again, tweak feeds and stores
This commit is contained in:
@@ -46,7 +46,7 @@ export const publish = (request: PublishRequest) => {
|
||||
const event = asEvent(request.event)
|
||||
const executor = NetworkContext.getExecutor(request.relays)
|
||||
|
||||
const abort = (reason: PublishStatus) => () => {
|
||||
const abort = (reason: PublishStatus) => {
|
||||
for (const [url, status] of pub.status.entries()) {
|
||||
if (status === PublishStatus.Pending) {
|
||||
pub.emitter.emit(reason, url)
|
||||
@@ -75,10 +75,10 @@ export const publish = (request: PublishRequest) => {
|
||||
})
|
||||
|
||||
// Give up after a specified time
|
||||
const timeout = setTimeout(abort(PublishStatus.Timeout), request.timeout || 10_000)
|
||||
const timeout = setTimeout(() => abort(PublishStatus.Timeout), request.timeout || 10_000)
|
||||
|
||||
// If we have a signal, use it
|
||||
request.signal?.addEventListener('abort', abort(PublishStatus.Aborted))
|
||||
request.signal?.addEventListener('abort', () => abort(PublishStatus.Aborted))
|
||||
|
||||
// Delegate to our executor
|
||||
const executorSub = executor.publish(event, {
|
||||
|
||||
@@ -35,6 +35,7 @@ export enum SubscriptionEvent {
|
||||
export type SubscribeRequest = {
|
||||
relays: string[]
|
||||
filters: Filter[]
|
||||
signal?: AbortSignal
|
||||
timeout?: number
|
||||
tracker?: Tracker
|
||||
immediate?: boolean
|
||||
@@ -87,14 +88,17 @@ export const mergeSubscriptions = (subs: Subscription[]) => {
|
||||
filters: unionFilters(callerSubs.flatMap((sub: Subscription) => sub.request.filters)),
|
||||
})
|
||||
|
||||
for (const {id, controller} of callerSubs) {
|
||||
controller.signal.addEventListener('abort', () => {
|
||||
for (const {id, controller, request} of callerSubs) {
|
||||
const onAbort = () => {
|
||||
abortedSubs.add(id)
|
||||
|
||||
if (abortedSubs.size === callerSubs.length) {
|
||||
mergedSub.close()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
request.signal?.addEventListener('abort', onAbort)
|
||||
controller.signal.addEventListener('abort', onAbort)
|
||||
}
|
||||
|
||||
mergedSub.emitter.on(SubscriptionEvent.Event, (url: string, event: Event) => {
|
||||
@@ -172,7 +176,7 @@ export const mergeSubscriptions = (subs: Subscription[]) => {
|
||||
|
||||
export const executeSubscription = (sub: Subscription) => {
|
||||
const {result, request, emitter, tracker, controller} = sub
|
||||
const {timeout, filters, closeOnEose, relays} = request
|
||||
const {timeout, filters, closeOnEose, relays, signal} = request
|
||||
const executor = NetworkContext.getExecutor(relays)
|
||||
const events: Event[] = []
|
||||
|
||||
@@ -234,7 +238,11 @@ export const executeSubscription = (sub: Subscription) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Listen for abort via signal
|
||||
// Listen for abort via caller signal
|
||||
signal?.addEventListener('abort', complete)
|
||||
signal?.addEventListener('abort', () => console.log('aborted'))
|
||||
|
||||
// Listen for abort via our own internal signal
|
||||
controller.signal.addEventListener('abort', complete)
|
||||
|
||||
// If we have a timeout, complete the subscription automatically
|
||||
|
||||
Reference in New Issue
Block a user