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 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.5",
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) {
@@ -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 #${dTag}`)
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
- log(`${unretryableErrors.length} Unretryable errors\n: ${unretryableErrors.map(v => `${v.relay}: ${v.reason.message}`).join('; ')}`)
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.filter(t => t[0] === 'file')
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 = fileTags.length === recentFileTags.length && fileTags.every((t, i) => {
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({