6 changed files with 123 additions and 22 deletions
@ -0,0 +1,68 @@
@@ -0,0 +1,68 @@
|
||||
/** |
||||
* Track deletion requests to prevent re-caching deleted events |
||||
* Uses cached kind 5 (deletion request) events from the cache |
||||
*/ |
||||
|
||||
import { getDB } from './indexeddb-store.js'; |
||||
import { KIND } from '../../types/kind-lookup.js'; |
||||
import type { CachedEvent } from './event-cache.js'; |
||||
|
||||
/** |
||||
* Get all event IDs that have deletion requests |
||||
* Queries the cache for kind 5 events and extracts event IDs from their 'e' tags |
||||
*/ |
||||
async function getDeletedEventIdsFromCache(): Promise<Set<string>> { |
||||
const deletedSet = new Set<string>(); |
||||
try { |
||||
const db = await getDB(); |
||||
const tx = db.transaction('events', 'readonly'); |
||||
const index = tx.store.index('kind'); |
||||
|
||||
// Get all kind 5 (deletion request) events
|
||||
for await (const cursor of index.iterate(KIND.EVENT_DELETION)) { |
||||
const deletionEvent = cursor.value as CachedEvent; |
||||
// Extract event IDs from 'e' tags
|
||||
if (deletionEvent.tags) { |
||||
for (const tag of deletionEvent.tags) { |
||||
if (tag[0] === 'e' && tag[1]) { |
||||
deletedSet.add(tag[1]); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
await tx.done; |
||||
} catch (error) { |
||||
console.debug('Error getting deleted event IDs from cache:', error); |
||||
} |
||||
|
||||
return deletedSet; |
||||
} |
||||
|
||||
/** |
||||
* Check if an event is marked as deleted (has a deletion request in cache) |
||||
*/ |
||||
export async function isEventDeleted(eventId: string): Promise<boolean> { |
||||
try { |
||||
const deletedIds = await getDeletedEventIdsFromCache(); |
||||
return deletedIds.has(eventId); |
||||
} catch (error) { |
||||
console.debug('Error checking if event is deleted:', error); |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Check if any of the given event IDs are marked as deleted |
||||
* Returns a Set of deleted event IDs for efficient lookup |
||||
*/ |
||||
export async function getDeletedEventIds(eventIds: string[]): Promise<Set<string>> { |
||||
try { |
||||
const deletedIds = await getDeletedEventIdsFromCache(); |
||||
// Return intersection of requested IDs and deleted IDs
|
||||
return new Set(eventIds.filter(id => deletedIds.has(id))); |
||||
} catch (error) { |
||||
console.debug('Error checking deleted events:', error); |
||||
return new Set<string>(); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue