use filters array

This commit is contained in:
ennmichael 2023-02-28 14:38:40 +01:00
parent 5d66ad9165
commit 53327c641c
3 changed files with 18 additions and 17 deletions

View File

@ -148,7 +148,7 @@ export interface OutgoingEvent {
export interface OutgoingOpenSubscription { export interface OutgoingOpenSubscription {
kind: OutgoingKind.Subscription kind: OutgoingKind.Subscription
id: SubscriptionId id: SubscriptionId
filters: Filters filters: Filters[]
} }
/** /**
@ -226,7 +226,7 @@ function serializeOutgoingMessage(msg: OutgoingMessage): string {
return JSON.stringify([ return JSON.stringify([
"REQ", "REQ",
msg.id.toString(), msg.id.toString(),
serializeFilters(msg.filters), ...serializeFilters(msg.filters),
]) ])
} else if (msg.kind === OutgoingKind.Unsubscription) { } else if (msg.kind === OutgoingKind.Unsubscription) {
return JSON.stringify(["CLOSE", msg.id.toString()]) return JSON.stringify(["CLOSE", msg.id.toString()])
@ -235,19 +235,20 @@ function serializeOutgoingMessage(msg: OutgoingMessage): string {
} }
} }
function serializeFilters(filters: Filters): RawFilters { function serializeFilters(filters: Filters[]): RawFilters[] {
return { if (filters.length === 0) {
ids: filters.ids?.map((id) => id.toString()), return [{}]
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,
} }
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 { function parseEventData(json: object): RawEvent {

View File

@ -17,7 +17,7 @@ export class Nostr {
/** /**
* Mapping of subscription IDs to corresponding filters. * Mapping of subscription IDs to corresponding filters.
*/ */
readonly #subscriptions: Map<string, Filters> = new Map() readonly #subscriptions: Map<string, Filters[]> = new Map()
#eventCallback?: EventCallback #eventCallback?: EventCallback
#noticeCallback?: NoticeCallback #noticeCallback?: NoticeCallback
@ -162,7 +162,7 @@ export class Nostr {
* @returns The subscription ID. * @returns The subscription ID.
*/ */
subscribe( subscribe(
filters: Filters = {}, filters: Filters[],
subscriptionId: SubscriptionId = SubscriptionId.random() subscriptionId: SubscriptionId = SubscriptionId.random()
): SubscriptionId { ): SubscriptionId {
this.#subscriptions.set(subscriptionId.toString(), filters) this.#subscriptions.set(subscriptionId.toString(), filters)

View File

@ -40,7 +40,7 @@ describe("single event communication", function () {
done() done()
}) })
subscriber.subscribe() subscriber.subscribe([])
publisher.publish( publisher.publish(
{ {