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 CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "git+https://github.com/44billion/nappup.git"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.5.3",
9
+ "version": "1.5.4",
10
10
  "description": "Nostr App Uploader",
11
11
  "type": "module",
12
12
  "scripts": {
@@ -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
- log(`${unretryableErrors.length} Unretryable errors\n: ${unretryableErrors.map(v => `${v.relay}: ${v.reason.message}`).join('; ')}`)
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.filter(t => t[0] === 'file')
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 = fileTags.length === recentFileTags.length && fileTags.every((t, i) => {
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({