This commit is contained in:
2023-09-12 15:02:16 +01:00
parent f42096fa64
commit 9e2453444d
74 changed files with 776 additions and 728 deletions

View File

@ -134,4 +134,4 @@ export interface MessageEncryptor {
getSharedSecret(privateKey: string, publicKey: string): Promise<Uint8Array> | Uint8Array;
encryptData(plaintext: string, sharedSecet: Uint8Array): Promise<MessageEncryptorPayload> | MessageEncryptorPayload;
decryptData(payload: MessageEncryptorPayload, sharedSecet: Uint8Array): Promise<string> | string;
}
}

View File

@ -93,7 +93,7 @@ export class NostrSystem extends ExternalStore<SystemSnapshot> implements System
this.#profileCache = props.profileCache ?? new UserProfileCache();
this.#relayMetricsCache = props.relayMetrics ?? new RelayMetricCache();
this.#eventsCache = props.eventsCache ?? new EventsCache();
this.#queryOptimizer = props.queryOptimizer ?? DefaultQueryOptimizer;
this.#queryOptimizer = props.queryOptimizer ?? DefaultQueryOptimizer;
this.#profileLoader = new ProfileLoaderService(this, this.#profileCache);
this.#relayMetrics = new RelayMetricHandler(this.#relayMetricsCache);
@ -254,9 +254,7 @@ export class NostrSystem extends ExternalStore<SystemSnapshot> implements System
if (existing.fromInstance === req.instance) {
return existing;
}
const filters = !req.options?.skipDiff
? req.buildDiff(this, existing.filters)
: req.build(this);
const filters = !req.options?.skipDiff ? req.buildDiff(this, existing.filters) : req.build(this);
if (filters.length === 0 && !!req.options?.skipDiff) {
return existing;
} else {
@ -275,7 +273,7 @@ export class NostrSystem extends ExternalStore<SystemSnapshot> implements System
const expectIds = new Set(filters.flatMap(a => a.filters).flatMap(a => a.ids ?? []));
q.feed.onEvent(async evs => {
const toSet = evs.filter(a => expectIds.has(a.id) && this.#eventsCache.getFromCache(a.id) === undefined);
if(toSet.length > 0) {
if (toSet.length > 0) {
await this.#eventsCache.bulkSet(toSet);
}
});
@ -411,4 +409,4 @@ export class NostrSystem extends ExternalStore<SystemSnapshot> implements System
}
setTimeout(() => this.#cleanup(), 1_000);
}
}
}

View File

@ -1,7 +1,7 @@
import { ReqFilter } from "../nostr"
import { expandFilter } from "./request-expander"
import { flatMerge, mergeSimilar } from "./request-merger"
import { diffFilters } from "./request-splitter"
import { ReqFilter } from "../nostr";
import { expandFilter } from "./request-expander";
import { flatMerge, mergeSimilar } from "./request-merger";
import { diffFilters } from "./request-splitter";
export interface FlatReqFilter {
keys: number;
@ -20,24 +20,27 @@ export interface FlatReqFilter {
}
export interface QueryOptimizer {
expandFilter(f: ReqFilter): Array<FlatReqFilter>
getDiff(prev: Array<ReqFilter>, next: Array<ReqFilter>): Array<FlatReqFilter>
flatMerge(all: Array<FlatReqFilter>): Array<ReqFilter>
compress(all: Array<ReqFilter>): Array<ReqFilter>
expandFilter(f: ReqFilter): Array<FlatReqFilter>;
getDiff(prev: Array<ReqFilter>, next: Array<ReqFilter>): Array<FlatReqFilter>;
flatMerge(all: Array<FlatReqFilter>): Array<ReqFilter>;
compress(all: Array<ReqFilter>): Array<ReqFilter>;
}
export const DefaultQueryOptimizer = {
expandFilter: (f: ReqFilter) => {
return expandFilter(f);
},
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
const diff = diffFilters(prev.flatMap(a => expandFilter(a)), next.flatMap(a => expandFilter(a)));
return diff.added;
},
flatMerge: (all: Array<FlatReqFilter>) => {
return flatMerge(all);
},
compress: (all: Array<ReqFilter>) => {
return mergeSimilar(all);
}
} as QueryOptimizer;
expandFilter: (f: ReqFilter) => {
return expandFilter(f);
},
getDiff: (prev: Array<ReqFilter>, next: Array<ReqFilter>) => {
const diff = diffFilters(
prev.flatMap(a => expandFilter(a)),
next.flatMap(a => expandFilter(a)),
);
return diff.added;
},
flatMerge: (all: Array<FlatReqFilter>) => {
return flatMerge(all);
},
compress: (all: Array<ReqFilter>) => {
return mergeSimilar(all);
},
} as QueryOptimizer;

View File

@ -29,4 +29,4 @@ export function diffFilters(prev: Array<FlatReqFilter>, next: Array<FlatReqFilte
removed: changed ? removed : [],
changed,
};
}
}

View File

@ -34,7 +34,7 @@ export class SystemWorker extends ExternalStore<SystemSnapshot> implements Syste
get RelayCache(): RelayCache {
throw new Error("Method not implemented.");
}
get QueryOptimizer(): QueryOptimizer {
throw new Error("Method not implemented.");
}

View File

@ -16,7 +16,7 @@ function getInvoice(zap: NostrEvent): InvoiceDetails | undefined {
export function parseZap(zapReceipt: NostrEvent, userCache: FeedCache<MetadataCache>, refNote?: NostrEvent): ParsedZap {
const existing = ParsedZapCache.get(zapReceipt.id);
if(existing) {
if (existing) {
return existing;
}

View File

@ -1,14 +1,14 @@
import {NostrSystem, SystemInterface} from "..";
import { NostrSystem, SystemInterface } from "..";
const Relay = "wss://relay.snort.social/";
const system = new NostrSystem({}) as SystemInterface;
async function test() {
await system.ConnectToRelay(Relay, {read: true, write: true});
setTimeout(() => {
system.DisconnectRelay(Relay);
}, 1000);
await system.ConnectToRelay(Relay, { read: true, write: true });
setTimeout(() => {
system.DisconnectRelay(Relay);
}, 1000);
}
test().catch(console.error);
test().catch(console.error);