nappup 1.8.4 → 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "git+https://github.com/44billion/nappup.git"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.8.4",
9
+ "version": "1.8.5",
10
10
  "description": "Nostr App Uploader",
11
11
  "type": "module",
12
12
  "scripts": {
@@ -68,39 +68,34 @@ export class NostrRelays {
68
68
  const events = []
69
69
  const promises = relays.map(async (url) => {
70
70
  let sub
71
- let isClosed = false
72
71
  const p = Promise.withResolvers()
72
+ const t = Promise.withResolvers()
73
73
  const timer = maybeUnref(setTimeout(() => {
74
- isClosed = true
75
74
  sub?.close()
76
- p.reject(new Error(`timeout: ${url}`))
75
+ t.reject(new Error(`timeout: ${url}`))
77
76
  }, timeout))
77
+
78
+ ;(async () => {
79
+ try {
80
+ const relay = await this.#getRelay(url)
81
+ sub = relay.subscribe([filter], {
82
+ onevent: (event) => {
83
+ event.meta = { relay: url }
84
+ events.push(event)
85
+ },
86
+ onclose: err => err ? p.reject(err) : p.resolve(),
87
+ oneose: () => { sub.close(); p.resolve() }
88
+ })
89
+ } catch (err) {
90
+ p.reject(err)
91
+ }
92
+ })()
93
+
78
94
  try {
79
- const relay = await this.#getRelay(url)
80
- sub = relay.subscribe([filter], {
81
- onevent: (event) => {
82
- event.meta = { relay: url }
83
- events.push(event)
84
- },
85
- onclose: err => {
86
- clearTimeout(timer)
87
- if (isClosed) return
88
- // May have closed normally, without error
89
- err ? p.reject(err) : p.resolve()
90
- },
91
- oneose: () => {
92
- clearTimeout(timer)
93
- isClosed = true
94
- sub.close()
95
- p.resolve()
96
- }
97
- })
98
- } catch (err) {
95
+ await Promise.race([p.promise, t.promise])
96
+ } finally {
99
97
  clearTimeout(timer)
100
- p.reject(err)
101
98
  }
102
-
103
- return p.promise
104
99
  })
105
100
 
106
101
  const results = await Promise.allSettled(promises)
@@ -119,27 +114,32 @@ export class NostrRelays {
119
114
  if (eventToSend.meta) delete eventToSend.meta
120
115
 
121
116
  const promises = relays.map(async (url) => {
122
- let timer
123
117
  const p = Promise.withResolvers()
124
- try {
125
- timer = maybeUnref(setTimeout(() => {
126
- p.reject(new Error(`timeout: ${url}`))
127
- }, timeout))
128
-
129
- const relay = await this.#getRelay(url)
130
- await relay.publish(eventToSend)
131
- p.resolve()
132
- } catch (err) {
133
- if (err.message?.startsWith('duplicate:')) return p.resolve()
134
- if (err.message?.startsWith('mute:')) {
135
- console.info(`${url} - ${err.message}`)
136
- return p.resolve()
118
+ const t = Promise.withResolvers()
119
+ const timer = maybeUnref(setTimeout(() => {
120
+ t.reject(new Error(`timeout: ${url}`))
121
+ }, timeout))
122
+
123
+ ;(async () => {
124
+ try {
125
+ const relay = await this.#getRelay(url)
126
+ await relay.publish(eventToSend)
127
+ p.resolve()
128
+ } catch (err) {
129
+ if (err.message?.startsWith('duplicate:')) return p.resolve()
130
+ if (err.message?.startsWith('mute:')) {
131
+ console.info(`${url} - ${err.message}`)
132
+ return p.resolve()
133
+ }
134
+ p.reject(err)
137
135
  }
138
- p.reject(err)
136
+ })()
137
+
138
+ try {
139
+ await Promise.race([p.promise, t.promise])
139
140
  } finally {
140
141
  clearTimeout(timer)
141
142
  }
142
- return p.promise
143
143
  })
144
144
 
145
145
  const results = await Promise.allSettled(promises)