1
0
forked from Kieran/snort

use seenEvents in IndexedDB

This commit is contained in:
Martti Malmi 2024-01-04 10:37:39 +02:00
parent 287ce32690
commit d31a03a565
4 changed files with 7 additions and 8 deletions

View File

@ -1,7 +1,7 @@
import Dexie, { Table } from "dexie"; import Dexie, { Table } from "dexie";
import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system"; import { TaggedNostrEvent, ReqFilter as Filter } from "@snort/system";
import * as Comlink from "comlink"; import * as Comlink from "comlink";
import LRUSet from "@snort/shared/src/LRUSet"; import { seenEvents } from "@snort/system";
type Tag = { type Tag = {
id: string; id: string;
@ -16,7 +16,6 @@ class IndexedDB extends Dexie {
events!: Table<TaggedNostrEvent>; events!: Table<TaggedNostrEvent>;
tags!: Table<Tag>; tags!: Table<Tag>;
private saveQueue: SaveQueueEntry[] = []; private saveQueue: SaveQueueEntry[] = [];
private seenEvents = new LRUSet<string>(1000);
private subscribedEventIds = new Set<string>(); private subscribedEventIds = new Set<string>();
private subscribedAuthors = new Set<string>(); private subscribedAuthors = new Set<string>();
private subscribedTags = new Set<string>(); private subscribedTags = new Set<string>();
@ -58,10 +57,10 @@ class IndexedDB extends Dexie {
} }
handleEvent(event: TaggedNostrEvent) { handleEvent(event: TaggedNostrEvent) {
if (this.seenEvents.has(event.id)) { if (seenEvents.has(event.id)) {
return; return;
} }
this.seenEvents.add(event.id); seenEvents.add(event.id);
// maybe we don't want event.kind 3 tags // maybe we don't want event.kind 3 tags
const tags = const tags =
@ -149,7 +148,7 @@ class IndexedDB extends Dexie {
// make sure only 1 argument is passed // make sure only 1 argument is passed
const cb = e => { const cb = e => {
this.seenEvents.add(e.id); seenEvents.add(e.id);
callback(e); callback(e);
}; };

View File

@ -9,7 +9,7 @@ import { ConnectionStats } from "./connection-stats";
import { NostrEvent, ReqCommand, ReqFilter, TaggedNostrEvent, u256 } from "./nostr"; import { NostrEvent, ReqCommand, ReqFilter, TaggedNostrEvent, u256 } from "./nostr";
import { RelayInfo } from "./relay-info"; import { RelayInfo } from "./relay-info";
import EventKind from "./event-kind"; import EventKind from "./event-kind";
import seenEvents from "./seen-events"; import { seenEvents } from "./seen-events";
import {getHex64} from "./utils"; import {getHex64} from "./utils";
/** /**
@ -204,7 +204,6 @@ export class Connection extends EventEmitter<ConnectionEvents> {
// skip message processing if we've already seen it // skip message processing if we've already seen it
const msgId = getHex64(e.data as string, "id"); const msgId = getHex64(e.data as string, "id");
if (seenEvents.has(msgId)) { if (seenEvents.has(msgId)) {
console.log('already seen');
return; return;
} }
seenEvents.add(msgId); // TODO only do after msg validation seenEvents.add(msgId); // TODO only do after msg validation

View File

@ -33,6 +33,7 @@ export * from "./query-optimizer";
export * from "./encrypted"; export * from "./encrypted";
export * from "./outbox-model"; export * from "./outbox-model";
export { parseIMeta } from "./utils"; export { parseIMeta } from "./utils";
export * from "./seen-events";
export * from "./impl/nip4"; export * from "./impl/nip4";
export * from "./impl/nip44"; export * from "./impl/nip44";

View File

@ -1,3 +1,3 @@
import LRUSet from "@snort/shared/src/LRUSet"; import LRUSet from "@snort/shared/src/LRUSet";
export default new LRUSet<string>(2000); export const seenEvents = new LRUSet<string>(2000);