When the relay-pool was released yesterday it said caching, dedup, and persistence belonged one layer up. This is that layer.
An in-memory cache in front of an IndexedDB store. One filter language drives every read: NIP-01, the same matchesFilter the core defines. Memory reads, IDB reads, a synchronous peek, and live subscriptions. To fetch you use the same filter you would for a relay.
Built on @innis/nostr-core, like the relay-pool and the signers. The transport carries the events, this is where they rest. The work above it to follow as each layer is cleaned up.
AI was involved, same terms as before. The architecture is mine. The decisions are mine. The machine fought me at every step, but we got there in the end.
deno add jsr:@innis/nostr-event-store
https://github.com/johninnis/nostr-event-store-ts
MIT.
#nostr #typescript #opensource #nostrdev
quotingAnd shipping jsr:@innis/nostr-relay-pool today too. The pool the core release promised in May, finally cleaned up and released. WebSocket connections to Nostr relays: subscriptions, publishes, NIP-42 AUTH, exponential backoff, and latency tracking. Pure transport.
nevent1q…t7vj
It opens the sockets, carries messages, and hands events to your callbacks. No caching, no dedup, no persistence; those belong to your event store. It will tell you what each relay did, how many events it sent, and how quickly it answered. But it will not tell you which relays to use. That policy lives one layer up in @innis/nostr-relay-selection, preferably behind a single auditable path.
Built on @innis/nostr-core, alongside the NIP-07 and NIP-46 signers. The transport layer is now public. The event store and the work above it are to follow as each is cleaned up. Slow and steady.
Again, AI was involved, same terms as before. The architecture is mine. The decisions are mine.
deno add jsr:@innis/nostr-relay-pool
https://github.com/johninnis/nostr-relay-pool-ts
MIT.
#nostr #typescript #opensource #nostrdev
nevent1qqs8xka5nfzkdk9g9h3vv5lspmy2ts80yyc2seekpglwfqtlt76fccspp4mhxue69uhkummn9ekx7mqppamhxue69uhkummnw3ezumt0d5q3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7q3ql33660awkeycecn9grhrvzyn0fmes8245ke7k82y8njz8uqu3vlqxrsgtr
