nappup 1.5.3 → 1.5.4
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 +1 -1
- package/src/helpers/event.js +26 -0
- package/src/index.js +16 -6
package/package.json
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function stringifyEvent (event) {
|
|
2
|
+
event = { ...event }
|
|
3
|
+
|
|
4
|
+
if (typeof event.content === 'string' && event.content.length > 70) {
|
|
5
|
+
event.content = `${event.content.slice(0, 70)}...(${event.content.length})`
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (typeof event.sig === 'string' && event.sig.length > 3) {
|
|
9
|
+
event.sig = `${event.sig.slice(0, 3)}...(${event.sig.length})`
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (Array.isArray(event.tags)) {
|
|
13
|
+
const totalTagsCount = event.tags.length
|
|
14
|
+
event.tags = event.tags.slice(0, 5).map(tag =>
|
|
15
|
+
Array.isArray(tag)
|
|
16
|
+
? tag.map(val => typeof val === 'string' && val.length > 64 ? `${val.slice(0, 64)}...(${val.length})` : val)
|
|
17
|
+
: tag
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
if (totalTagsCount > 5) {
|
|
21
|
+
event.tags.push(`... and ${totalTagsCount - 5} more tags`)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return JSON.stringify(event, null, 2)
|
|
26
|
+
}
|
package/src/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import NostrSigner from '#services/nostr-signer.js'
|
|
|
6
6
|
import { streamToChunks, streamToText } from '#helpers/stream.js'
|
|
7
7
|
import { isNostrAppDTagSafe, deriveNostrAppDTag } from '#helpers/app.js'
|
|
8
8
|
import { extractHtmlMetadata, findFavicon, findIndexFile } from '#helpers/app-metadata.js'
|
|
9
|
+
import { stringifyEvent } from '#helpers/event.js'
|
|
9
10
|
import { NAPP_CATEGORIES } from '#config/napp-categories.js'
|
|
10
11
|
|
|
11
12
|
export default async function (...args) {
|
|
@@ -177,7 +178,7 @@ async function uploadBinaryDataChunks ({ nmmr, signer, filename, chunkLength, lo
|
|
|
177
178
|
continue
|
|
178
179
|
}
|
|
179
180
|
log(`${filename}: Re-uploading chunk ${++chunkIndex} of ${chunkLength} to ${missingRelays.length} missing relays (out of ${relays.length})`)
|
|
180
|
-
;({ pause } = (await throttledSendEvent(foundEvent, missingRelays, { pause, log, trailingPause: true })))
|
|
181
|
+
;({ pause } = (await throttledSendEvent(foundEvent, missingRelays, { pause, log, trailingPause: true, minSuccessfulRelays: 0 })))
|
|
181
182
|
continue
|
|
182
183
|
}
|
|
183
184
|
const binaryDataChunk = {
|
|
@@ -222,7 +223,10 @@ async function throttledSendEvent (event, relays, {
|
|
|
222
223
|
else r[1].push(v)
|
|
223
224
|
return r
|
|
224
225
|
}, [[], []])
|
|
225
|
-
|
|
226
|
+
if (unretryableErrors.length > 0) {
|
|
227
|
+
log(`${unretryableErrors.length} unretryable errors:\n${unretryableErrors.map(v => `${v.relay}: ${v.reason.message}`).join('; ')}`)
|
|
228
|
+
console.log('Erroed event:', stringifyEvent(event))
|
|
229
|
+
}
|
|
226
230
|
const unretryableErrorsLength = errors.length - rateLimitErrors.length
|
|
227
231
|
const maybeSuccessfulRelays = relays.length - unretryableErrorsLength
|
|
228
232
|
const hasReachedMaxRetries = retries > maxRetries
|
|
@@ -325,9 +329,15 @@ async function uploadBundle ({ dTag, channel, fileMetadata, signer, pause = 0, s
|
|
|
325
329
|
})
|
|
326
330
|
|
|
327
331
|
const mostRecentEvent = events[0]
|
|
328
|
-
const recentFileTags = mostRecentEvent.tags
|
|
332
|
+
const recentFileTags = mostRecentEvent.tags
|
|
333
|
+
.filter(t => t[0] === 'file' && t[2] !== '.well-known/napp.json')
|
|
334
|
+
.sort((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0))
|
|
335
|
+
|
|
336
|
+
const currentFileTags = fileTags
|
|
337
|
+
.filter(t => t[2] !== '.well-known/napp.json')
|
|
338
|
+
.sort((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0))
|
|
329
339
|
|
|
330
|
-
const isSame =
|
|
340
|
+
const isSame = currentFileTags.length === recentFileTags.length && currentFileTags.every((t, i) => {
|
|
331
341
|
const rt = recentFileTags[i]
|
|
332
342
|
return rt.length >= 4 && rt[1] === t[1] && rt[2] === t[2] && rt[3] === t[3]
|
|
333
343
|
})
|
|
@@ -344,7 +354,7 @@ async function uploadBundle ({ dTag, channel, fileMetadata, signer, pause = 0, s
|
|
|
344
354
|
// nostrRelays.getEvents currently doesn't tell us which event came from which relay,
|
|
345
355
|
// so we re-upload to all relays to ensure consistency
|
|
346
356
|
log(`Re-uploading existing bundle event to ${missingRelays.length} missing relays (out of ${writeRelays.length})`)
|
|
347
|
-
await throttledSendEvent(mostRecentEvent, missingRelays, { pause, trailingPause: true, log })
|
|
357
|
+
await throttledSendEvent(mostRecentEvent, missingRelays, { pause, trailingPause: true, log, minSuccessfulRelays: 0 })
|
|
348
358
|
return mostRecentEvent
|
|
349
359
|
}
|
|
350
360
|
}
|
|
@@ -631,7 +641,7 @@ async function maybeUploadStall ({
|
|
|
631
641
|
if (missingRelays.length === 0) return { pause }
|
|
632
642
|
|
|
633
643
|
log(`Re-uploading existing stall event to ${missingRelays.length} missing relays (out of ${relays.length})`)
|
|
634
|
-
return await throttledSendEvent(previous, missingRelays, { pause, log, trailingPause: true })
|
|
644
|
+
return await throttledSendEvent(previous, missingRelays, { pause, log, trailingPause: true, minSuccessfulRelays: 0 })
|
|
635
645
|
}
|
|
636
646
|
|
|
637
647
|
return await publishStall({
|