Fix tags again, tweak feeds and stores

This commit is contained in:
Jon Staab
2024-05-09 16:00:09 -07:00
parent 9f70d8643e
commit fddee3c6ee
7 changed files with 66 additions and 46 deletions
+3 -3
View File
@@ -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, {
+13 -5
View File
@@ -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