@nostr-dev-kit/ndk
Version:
NDK - Nostr Development Kit
92 lines (75 loc) • 3.6 kB
text/typescript
import { describe, expect, it } from "vitest";
import { type NDKFilter, NDKSubscription } from ".";
import { NDK } from "../ndk";
import { filterForEventsTaggingId, filterFromId, generateSubId } from "./utils";
const ndk = new NDK();
describe("generateSubId", () => {
it("generates a subId based on the subscriptions' subIds", () => {
const sub1 = new NDKSubscription(ndk, { kinds: [1] }, { subId: "sub1" });
const sub2 = new NDKSubscription(ndk, { authors: ["abc"] }, { subId: "sub2" });
const subId = generateSubId([sub1, sub2], [{ kinds: [1] }, { authors: ["abc"] }]);
expect(subId).toMatch(/sub1,sub2-\d+/);
});
it("generates a subId based on the filters when there is no subId", () => {
const sub1Filter = { kinds: [1] };
const sub2Filter = { kinds: [2], authors: ["abc"] };
const sub1 = new NDKSubscription(ndk, sub1Filter);
const sub2 = new NDKSubscription(ndk, sub2Filter);
const subId = generateSubId([sub1, sub2], [sub1Filter, sub2Filter]);
expect(subId).toMatch(/kinds:1,2-authors-\d+/);
});
it("generates a subId based on the filters when there is no subId", () => {
const sub1Filter = { kinds: [1] };
const sub2Filter = { kinds: [2], authors: ["abc"] };
const sub1 = new NDKSubscription(ndk, sub1Filter);
const sub2 = new NDKSubscription(ndk, sub2Filter);
const subId = generateSubId([sub1, sub2], [sub1Filter, sub2Filter]);
expect(subId).toMatch(/kinds:1,2-authors-\d+/);
});
it("it doesn't generate huge subscriptions ids", () => {
const subscriptions: NDKSubscription[] = [];
const filter: NDKFilter = { kinds: [10002], authors: [] };
for (let i = 0; i < 100; i++) {
const id = `aaaaa${i}`;
subscriptions.push(
new NDKSubscription(
ndk,
{ kinds: [10002], authors: [id] },
{ groupable: true, subId: `relay-list-${id}` },
),
);
filter.authors?.push(id);
}
const subId = generateSubId(subscriptions, [filter]);
expect(subId.length).toBeLessThanOrEqual(24);
});
});
describe("filterFromId", () => {
it("handles nevents", () => {
const filter = filterFromId(
"nevent1qgs9kqvr4dkruv3t7n2pc6e6a7v9v2s5fprmwjv4gde8c4fe5y29v0spzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcqype6ycavy2e9zpx9mzeuekaahgw96ken0mzkcmgz40ljccwyrn88gxv2ewr",
);
expect(filter).toEqual({
ids: ["73a263ac22b25104c5d8b3ccdbbdba1c5d5b337ec56c6d02abff2c61c41cce74"],
authors: ["5b0183ab6c3e322bf4d41c6b3aef98562a144847b7499543727c5539a114563e"],
});
});
});
describe("filterForEventsTaggingId", () => {
it("handles nevents", () => {
const filter = filterForEventsTaggingId(
"nevent1qgs9kqvr4dkruv3t7n2pc6e6a7v9v2s5fprmwjv4gde8c4fe5y29v0spzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcqype6ycavy2e9zpx9mzeuekaahgw96ken0mzkcmgz40ljccwyrn88gxv2ewr",
);
expect(filter).toEqual({
"#e": ["73a263ac22b25104c5d8b3ccdbbdba1c5d5b337ec56c6d02abff2c61c41cce74"],
});
});
it("handles naddr", () => {
const filter = filterForEventsTaggingId(
"naddr1qvzqqqr4gupzpjjwt0eqm6as279wf079c0j42jysp2t4s37u8pg5w2dfyktxgkntqqxnzde38yen2desxqmn2d3332u3ff",
);
expect(filter).toEqual({
"#a": ["30023:ca4e5bf20debb0578ae4bfc5c3e55548900a975847dc38514729a92596645a6b:1719357007561"],
});
});
});