From 53327c641c15ad791d1bcfde705c925169f2921e Mon Sep 17 00:00:00 2001 From: ennmichael Date: Tue, 28 Feb 2023 14:38:40 +0100 Subject: [PATCH] use filters array --- packages/nostr/src/client/conn.ts | 29 ++++++++++--------- packages/nostr/src/client/index.ts | 4 +-- ...ingle-event.ts => simple-communication.ts} | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) rename packages/nostr/test/{single-event.ts => simple-communication.ts} (98%) diff --git a/packages/nostr/src/client/conn.ts b/packages/nostr/src/client/conn.ts index 8d6a3c5..543e127 100644 --- a/packages/nostr/src/client/conn.ts +++ b/packages/nostr/src/client/conn.ts @@ -148,7 +148,7 @@ export interface OutgoingEvent { export interface OutgoingOpenSubscription { kind: OutgoingKind.Subscription id: SubscriptionId - filters: Filters + filters: Filters[] } /** @@ -226,7 +226,7 @@ function serializeOutgoingMessage(msg: OutgoingMessage): string { return JSON.stringify([ "REQ", msg.id.toString(), - serializeFilters(msg.filters), + ...serializeFilters(msg.filters), ]) } else if (msg.kind === OutgoingKind.Unsubscription) { return JSON.stringify(["CLOSE", msg.id.toString()]) @@ -235,19 +235,20 @@ function serializeOutgoingMessage(msg: OutgoingMessage): string { } } -function serializeFilters(filters: Filters): RawFilters { - return { - ids: filters.ids?.map((id) => id.toString()), - authors: filters.authors?.map((author) => author.toString()), - kinds: filters.kinds?.map((kind) => kind), - ["#e"]: filters.eventTags?.map((e) => e.toString()), - ["#p"]: filters.pubkeyTags?.map((p) => p.toString()), - since: - filters.since !== undefined ? unixTimestamp(filters.since) : undefined, - until: - filters.until !== undefined ? unixTimestamp(filters.until) : undefined, - limit: filters.limit, +function serializeFilters(filters: Filters[]): RawFilters[] { + if (filters.length === 0) { + return [{}] } + return filters.map((filter) => ({ + ids: filter.ids?.map((id) => id.toString()), + authors: filter.authors?.map((author) => author.toString()), + kinds: filter.kinds?.map((kind) => kind), + ["#e"]: filter.eventTags?.map((e) => e.toString()), + ["#p"]: filter.pubkeyTags?.map((p) => p.toString()), + since: filter.since !== undefined ? unixTimestamp(filter.since) : undefined, + until: filter.until !== undefined ? unixTimestamp(filter.until) : undefined, + limit: filter.limit, + })) } function parseEventData(json: object): RawEvent { diff --git a/packages/nostr/src/client/index.ts b/packages/nostr/src/client/index.ts index e91c91b..d7dc29b 100644 --- a/packages/nostr/src/client/index.ts +++ b/packages/nostr/src/client/index.ts @@ -17,7 +17,7 @@ export class Nostr { /** * Mapping of subscription IDs to corresponding filters. */ - readonly #subscriptions: Map = new Map() + readonly #subscriptions: Map = new Map() #eventCallback?: EventCallback #noticeCallback?: NoticeCallback @@ -162,7 +162,7 @@ export class Nostr { * @returns The subscription ID. */ subscribe( - filters: Filters = {}, + filters: Filters[], subscriptionId: SubscriptionId = SubscriptionId.random() ): SubscriptionId { this.#subscriptions.set(subscriptionId.toString(), filters) diff --git a/packages/nostr/test/single-event.ts b/packages/nostr/test/simple-communication.ts similarity index 98% rename from packages/nostr/test/single-event.ts rename to packages/nostr/test/simple-communication.ts index b097f92..ec6c5a9 100644 --- a/packages/nostr/test/single-event.ts +++ b/packages/nostr/test/simple-communication.ts @@ -40,7 +40,7 @@ describe("single event communication", function () { done() }) - subscriber.subscribe() + subscriber.subscribe([]) publisher.publish( {