diff --git a/package-lock.json b/package-lock.json index a3fcc08..c057e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3092,12 +3092,12 @@ }, "packages/dvm": { "name": "@welshman/dvm", - "version": "0.0.1", + "version": "0.0.2", "license": "MIT", "dependencies": { "@welshman/lib": "0.0.11", "@welshman/net": "0.0.14", - "@welshman/util": "0.0.18", + "@welshman/util": "0.0.19", "nostr-tools": "^2.7.0" }, "devDependencies": { @@ -3111,7 +3111,7 @@ "version": "0.0.12", "license": "MIT", "dependencies": { - "@welshman/util": "0.0.18" + "@welshman/util": "0.0.19" }, "devDependencies": { "gts": "^5.0.1", @@ -3149,7 +3149,7 @@ "license": "MIT", "dependencies": { "@welshman/lib": "0.0.11", - "@welshman/util": "0.0.18", + "@welshman/util": "0.0.19", "isomorphic-ws": "^5.0.0", "ws": "^8.16.0" }, @@ -3161,7 +3161,7 @@ }, "packages/util": { "name": "@welshman/util", - "version": "0.0.18", + "version": "0.0.19", "license": "MIT", "dependencies": { "@welshman/lib": "0.0.11", diff --git a/packages/dvm/package.json b/packages/dvm/package.json index e3f3cb6..5dc6217 100644 --- a/packages/dvm/package.json +++ b/packages/dvm/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/dvm", - "version": "0.0.1", + "version": "0.0.2", "author": "hodlbod", "license": "MIT", "description": "A collection of utilities for building nostr DVMs.", @@ -33,7 +33,7 @@ "dependencies": { "@welshman/lib": "0.0.11", "@welshman/net": "0.0.14", - "@welshman/util": "0.0.18", + "@welshman/util": "0.0.19", "nostr-tools": "^2.7.0" } } diff --git a/packages/dvm/src/request.ts b/packages/dvm/src/request.ts index 0ea148e..af27f8a 100644 --- a/packages/dvm/src/request.ts +++ b/packages/dvm/src/request.ts @@ -16,13 +16,14 @@ export type DVMRequestOptions = { reportProgress?: boolean } -export type DVMRequest = DVMRequestOptions & { +export type DVMRequest = { + request: DVMRequestOptions emitter: Emitter, sub: Subscription pub: Publish } -export const makeDvmRequest = (request: DVMRequest) => { +export const makeDvmRequest = (request: DVMRequestOptions) => { const emitter = new Emitter() const {event, relays, timeout = 30_000, autoClose = true, reportProgress = true} = request const kind = event.kind + 1000 @@ -43,5 +44,5 @@ export const makeDvmRequest = (request: DVMRequest) => { } }) - return {request, emitter, sub, pub} + return {request, emitter, sub, pub} as DVMRequest } diff --git a/packages/feeds/package.json b/packages/feeds/package.json index 60eb053..f3051d6 100644 --- a/packages/feeds/package.json +++ b/packages/feeds/package.json @@ -31,6 +31,6 @@ "typescript": "~5.1.6" }, "dependencies": { - "@welshman/util": "0.0.18" + "@welshman/util": "0.0.19" } } diff --git a/packages/net/package.json b/packages/net/package.json index deaf106..c581823 100644 --- a/packages/net/package.json +++ b/packages/net/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@welshman/lib": "0.0.11", - "@welshman/util": "0.0.18", + "@welshman/util": "0.0.19", "isomorphic-ws": "^5.0.0", "ws": "^8.16.0" } diff --git a/packages/util/package.json b/packages/util/package.json index 08701de..df56019 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@welshman/util", - "version": "0.0.18", + "version": "0.0.19", "author": "hodlbod", "license": "MIT", "description": "A collection of nostr-related utilities.", diff --git a/packages/util/src/Repository.ts b/packages/util/src/Repository.ts index a9dba1c..ebfb842 100644 --- a/packages/util/src/Repository.ts +++ b/packages/util/src/Repository.ts @@ -136,11 +136,12 @@ export class Repository extends Emitter { throw new Error("Invalid event published to Repository", event) } - // If we've already seen this event, we're done - if (this.eventsById.get(event.id)) { + // If we've already seen this event, or it's been deleted, we're done + if (this.eventsById.get(event.id) || this.isDeleted(event)) { return } + const removed = new Set() const address = getAddress(event) const duplicate = this.eventsByAddress.get(address) @@ -152,6 +153,9 @@ export class Repository extends Emitter { // If our event is newer than what it's replacing, delete the old version this.deletes.set(duplicate.id, event.created_at) + + // Notify listeners that it's been removed + removed.add(duplicate.id) } // Add our new event by id @@ -171,12 +175,9 @@ export class Repository extends Emitter { this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate) this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate) - // Keep track of deleted events to notify about - const removed = new Set() - // Update our tag indexes for (const tag of event.tags) { - if (tag[0].length === 1) { + if (tag[0]?.length === 1) { this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(':'), event, duplicate) // If this is a delete event, the tag value is an id or address. Track when it was @@ -193,12 +194,8 @@ export class Repository extends Emitter { } } - if (duplicate) { - removed.add(duplicate.id) - } - if (shouldNotify) { - this.emit('update', {added: this.isDeleted(event) ? [] : [event], removed}) + this.emit('update', {added: [event], removed}) } }