DittoPgStore: call expandFilters in .req

This commit is contained in:
Alex Gleason 2025-02-19 20:40:30 -06:00
parent d05dd16507
commit 9401c0e013
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7

View file

@ -267,6 +267,8 @@ export class DittoPgStore extends NPostgres {
const { db, chunkSize = 20 } = this.opts; const { db, chunkSize = 20 } = this.opts;
const { timeout = this.opts.timeout, signal } = opts; const { timeout = this.opts.timeout, signal } = opts;
filters = await this.expandFilters(filters);
const subId = crypto.randomUUID(); const subId = crypto.randomUUID();
const normalFilters = this.normalizeFilters(filters); const normalFilters = this.normalizeFilters(filters);
const machina = new Machina<NostrRelayEVENT | NostrRelayEOSE | NostrRelayCLOSED>(signal); const machina = new Machina<NostrRelayEVENT | NostrRelayEOSE | NostrRelayCLOSED>(signal);
@ -337,20 +339,6 @@ export class DittoPgStore extends NPostgres {
): Promise<DittoEvent[]> { ): Promise<DittoEvent[]> {
filters = await this.expandFilters(filters); filters = await this.expandFilters(filters);
for (const filter of filters) {
if (filter.since && filter.since >= 2_147_483_647) {
throw new RelayError('invalid', 'since filter too far into the future');
}
if (filter.until && filter.until >= 2_147_483_647) {
throw new RelayError('invalid', 'until filter too far into the future');
}
for (const kind of filter.kinds ?? []) {
if (kind >= 2_147_483_647) {
throw new RelayError('invalid', 'kind filter too far into the future');
}
}
}
if (opts.signal?.aborted) return Promise.resolve([]); if (opts.signal?.aborted) return Promise.resolve([]);
logi({ level: 'debug', ns: 'ditto.req', source: 'db', filters: filters as JsonValue }); logi({ level: 'debug', ns: 'ditto.req', source: 'db', filters: filters as JsonValue });
@ -531,6 +519,18 @@ export class DittoPgStore extends NPostgres {
filters = structuredClone(filters); filters = structuredClone(filters);
for (const filter of filters) { for (const filter of filters) {
if (filter.since && filter.since >= 2_147_483_647) {
throw new RelayError('invalid', 'since filter too far into the future');
}
if (filter.until && filter.until >= 2_147_483_647) {
throw new RelayError('invalid', 'until filter too far into the future');
}
for (const kind of filter.kinds ?? []) {
if (kind >= 2_147_483_647) {
throw new RelayError('invalid', 'kind filter too far into the future');
}
}
if (filter.search) { if (filter.search) {
const tokens = NIP50.parseInput(filter.search); const tokens = NIP50.parseInput(filter.search);
@ -581,12 +581,6 @@ export class DittoPgStore extends NPostgres {
.map((t) => typeof t === 'object' ? `${t.key}:${t.value}` : t) .map((t) => typeof t === 'object' ? `${t.key}:${t.value}` : t)
.join(' '); .join(' ');
} }
if (filter.kinds) {
// Ephemeral events are not stored, so don't bother querying for them.
// If this results in an empty kinds array, NDatabase will remove the filter before querying and return no results.
filter.kinds = filter.kinds.filter((kind) => !NKinds.ephemeral(kind));
}
} }
return filters; return filters;