nappup 1.5.3 → 1.5.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 +1 -1
- package/src/helpers/event.js +26 -0
- package/src/index.js +20 -8
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) {
|
|
@@ -129,7 +130,7 @@ export async function toApp (fileList, nostrSigner, { log = () => {}, dTag, dTag
|
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
132
|
|
|
132
|
-
log(`Uploading stall event for
|
|
133
|
+
log(`Uploading stall event for ${dTag}`)
|
|
133
134
|
;({ pause } = (await maybeUploadStall({
|
|
134
135
|
dTag,
|
|
135
136
|
channel,
|
|
@@ -145,6 +146,7 @@ export async function toApp (fileList, nostrSigner, { log = () => {}, dTag, dTag
|
|
|
145
146
|
writeRelays,
|
|
146
147
|
log,
|
|
147
148
|
pause,
|
|
149
|
+
shouldReupload,
|
|
148
150
|
self: nappJson.self?.[0]?.[0],
|
|
149
151
|
countries: nappJson.country,
|
|
150
152
|
categories: nappJson.category,
|
|
@@ -177,7 +179,7 @@ async function uploadBinaryDataChunks ({ nmmr, signer, filename, chunkLength, lo
|
|
|
177
179
|
continue
|
|
178
180
|
}
|
|
179
181
|
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 })))
|
|
182
|
+
;({ pause } = (await throttledSendEvent(foundEvent, missingRelays, { pause, log, trailingPause: true, minSuccessfulRelays: 0 })))
|
|
181
183
|
continue
|
|
182
184
|
}
|
|
183
185
|
const binaryDataChunk = {
|
|
@@ -222,7 +224,10 @@ async function throttledSendEvent (event, relays, {
|
|
|
222
224
|
else r[1].push(v)
|
|
223
225
|
return r
|
|
224
226
|
}, [[], []])
|
|
225
|
-
|
|
227
|
+
if (unretryableErrors.length > 0) {
|
|
228
|
+
log(`${unretryableErrors.length} unretryable errors:\n${unretryableErrors.map(v => `${v.relay}: ${v.reason.message}`).join('; ')}`)
|
|
229
|
+
console.log('Erroed event:', stringifyEvent(event))
|
|
230
|
+
}
|
|
226
231
|
const unretryableErrorsLength = errors.length - rateLimitErrors.length
|
|
227
232
|
const maybeSuccessfulRelays = relays.length - unretryableErrorsLength
|
|
228
233
|
const hasReachedMaxRetries = retries > maxRetries
|
|
@@ -325,9 +330,15 @@ async function uploadBundle ({ dTag, channel, fileMetadata, signer, pause = 0, s
|
|
|
325
330
|
})
|
|
326
331
|
|
|
327
332
|
const mostRecentEvent = events[0]
|
|
328
|
-
const recentFileTags = mostRecentEvent.tags
|
|
333
|
+
const recentFileTags = mostRecentEvent.tags
|
|
334
|
+
.filter(t => t[0] === 'file' && t[2] !== '.well-known/napp.json')
|
|
335
|
+
.sort((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0))
|
|
336
|
+
|
|
337
|
+
const currentFileTags = fileTags
|
|
338
|
+
.filter(t => t[2] !== '.well-known/napp.json')
|
|
339
|
+
.sort((a, b) => (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0))
|
|
329
340
|
|
|
330
|
-
const isSame =
|
|
341
|
+
const isSame = currentFileTags.length === recentFileTags.length && currentFileTags.every((t, i) => {
|
|
331
342
|
const rt = recentFileTags[i]
|
|
332
343
|
return rt.length >= 4 && rt[1] === t[1] && rt[2] === t[2] && rt[3] === t[3]
|
|
333
344
|
})
|
|
@@ -344,7 +355,7 @@ async function uploadBundle ({ dTag, channel, fileMetadata, signer, pause = 0, s
|
|
|
344
355
|
// nostrRelays.getEvents currently doesn't tell us which event came from which relay,
|
|
345
356
|
// so we re-upload to all relays to ensure consistency
|
|
346
357
|
log(`Re-uploading existing bundle event to ${missingRelays.length} missing relays (out of ${writeRelays.length})`)
|
|
347
|
-
await throttledSendEvent(mostRecentEvent, missingRelays, { pause, trailingPause: true, log })
|
|
358
|
+
await throttledSendEvent(mostRecentEvent, missingRelays, { pause, trailingPause: true, log, minSuccessfulRelays: 0 })
|
|
348
359
|
return mostRecentEvent
|
|
349
360
|
}
|
|
350
361
|
}
|
|
@@ -376,6 +387,7 @@ async function maybeUploadStall ({
|
|
|
376
387
|
writeRelays,
|
|
377
388
|
log,
|
|
378
389
|
pause,
|
|
390
|
+
shouldReupload,
|
|
379
391
|
self,
|
|
380
392
|
countries,
|
|
381
393
|
categories,
|
|
@@ -621,7 +633,7 @@ async function maybeUploadStall ({
|
|
|
621
633
|
}
|
|
622
634
|
}
|
|
623
635
|
|
|
624
|
-
if (!changed) {
|
|
636
|
+
if (!changed && !shouldReupload) {
|
|
625
637
|
const { storedEvents } = previousResult
|
|
626
638
|
|
|
627
639
|
const matchingEvents = storedEvents.filter(e => e.id === previous.id)
|
|
@@ -631,7 +643,7 @@ async function maybeUploadStall ({
|
|
|
631
643
|
if (missingRelays.length === 0) return { pause }
|
|
632
644
|
|
|
633
645
|
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 })
|
|
646
|
+
return await throttledSendEvent(previous, missingRelays, { pause, log, trailingPause: true, minSuccessfulRelays: 0 })
|
|
635
647
|
}
|
|
636
648
|
|
|
637
649
|
return await publishStall({
|