Skip to content

Commit

Permalink
apply limit filter
Browse files Browse the repository at this point in the history
  • Loading branch information
pablof7z committed Jul 1, 2024
1 parent 2d90603 commit 4dd675a
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 4 deletions.
24 changes: 24 additions & 0 deletions ndk-cache-dexie/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,30 @@ const ndk = new NDK()
ndk.signer = NDKPrivateKeySigner.generate();
ndk.cacheAdapter = new NDKCacheAdapterDexie();

describe("foundEvents", () => {
it('applies limit filter', async () => {
const startTime = Math.floor(Date.now() / 1000);
const times = [];
for (let i = 0; i < 10; i++) {
const event = new NDKEvent(ndk);
event.kind = 2;
event.created_at = startTime - i * 60;
times.push(event.created_at);
await event.sign();
ndk.cacheAdapter!.setEvent(event, []);
}

const subscription = new NDKSubscription(ndk, [{kinds: [2], limit: 2}]);
const spy = jest.spyOn(subscription, "eventReceived");
await ndk.cacheAdapter!.query(subscription);
expect(subscription.eventReceived).toBeCalledTimes(2);

// the time of the events that were received must be the first two in the list
expect(spy.mock.calls[0][0].created_at).toBe(times[0]);
expect(spy.mock.calls[1][0].created_at).toBe(times[1]);
});
})

describe("foundEvent", () => {
beforeAll(async () => {
// save event
Expand Down
14 changes: 11 additions & 3 deletions ndk-cache-dexie/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -518,13 +518,16 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
const f = ["kinds"];
const hasAllKeys = filterKeys.size === f.length && f.every((k) => filterKeys.has(k));

let events: Event[] = [];

if (!hasAllKeys) return false;

for (const kind of filter.kinds) {
const events = Array.from(this.events.getFromIndex("kind", kind));
foundEvents(subscription, events, filter);
events = [ ...events, ...Array.from(this.events.getFromIndex("kind", kind))]
}

foundEvents(subscription, events, filter);

return true;
}
}
Expand Down Expand Up @@ -558,6 +561,11 @@ export function foundEvents(
events: Event[],
filter?: NDKFilter
) {
// if we have a limit, sort and slice
if (filter?.limit && events.length > filter.limit) {
events = events.sort((a, b) => b.createdAt - a.createdAt).slice(0, filter.limit);
}

for (const event of events) {
foundEvent(subscription, event, event.relay, filter);
}
Expand All @@ -575,7 +583,7 @@ export function foundEvent(
if (filter && !matchFilter(filter, deserializedEvent as any)) return;

const ndkEvent = new NDKEvent(undefined, deserializedEvent);
const relay = relayUrl ? subscription.pool.getRelay(relayUrl) : undefined;
const relay = relayUrl ? subscription.pool.getRelay(relayUrl, false) : undefined;
ndkEvent.relay = relay;
subscription.eventReceived(ndkEvent, relay, true);
} catch (e) {
Expand Down
2 changes: 1 addition & 1 deletion ndk-cache-dexie/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"extends": "@nostr-dev-kit/tsconfig/ndk-cache-dexie.json",
"extends": "../packages/tsconfig/ndk-cache-dexie.json",
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts"],
"exclude": ["dist", "build", "node_modules"]
}

0 comments on commit 4dd675a

Please sign in to comment.