Releases: mmalmi/nostr-pubsub
Release list
nostr-pubsub TypeScript v0.5.5
Adds an opaque exact-object verification boundary for shared SimplePool transports. Worker-owned relay ingestion can now use nostr-wasm once per event and reuse private canonical admission without a duplicate Schnorr pass or trusting a spoofable public marker.
nostr-pubsub TypeScript v0.5.4
Avoids duplicate Schnorr verification when an adjacent protocol layer re-admits an event already authenticated by nostr-pubsub's private canonical trust boundary. Spoofed public verification markers still fail closed.
nostr-pubsub TypeScript 0.5.3
Adds cancellable asynchronous batch verification admission for immutable events checked by a Web Worker or other trusted boundary. Canonical admitted events use the router's verified-copy fast path without repeating Schnorr verification on the caller thread.
nostr-pubsub TypeScript 0.5.2
- Add the shared SimplePoolNostrRelayTransport browser relay carrier.\n- Verify inbound and outbound events at the package transport boundary.\n- Bound historical queries while keeping live subscriptions open.\n- Treat publication as successful when any configured relay accepts it.
nostr-pubsub TypeScript 0.5.1
Preserve negative backend priorities in routed relay-only publication. Includes the complete routed INV/WANT live and historical pubsub implementation from 0.5.0.
nostr-pubsub TypeScript v0.5.0
Changelog
0.5.0 - 2026-07-18
- Replace the raw-datagram FIPS relay bridge with the reliable FIPS-TCP
nostr.pubsub/1client on port 7368;localPeerIdis now required for
deterministic simultaneous-stream ownership. - Use compatible grouped
INV, one-eventWANT, and ordinary addressed
EVENTfor both bounded historical replay and new live events, with global
event-ID deduplication and alternate-provider retry. - Add matching historical and live routers for Hashtree/local indexes, FIPS
peers, and traditional Nostr relays; remove the legacy routebusalias and
obsoleteFipsNostrRelayServiceAPI. - Add the owned
NostrPubsubRouterfor applications that need one reusable
query/publish/live provider rather than one-shot route helper calls. - Add shared Rust-process wire vectors and real FIPS-TCP coverage for all five
REQ/INV/WANT/EVENT/CLOSEmessages.
0.4.0 - 2026-07-18
- Split the read-only
NostrEventReaderand write-onlyNostrEventPublisher
contracts while preserving the combinedEventBusAPI and routedbusalias. - Give source routes explicit dataset identities: replicas fail over within one
dataset, while additive datasets are queried concurrently and merged. - Deduplicate verified events with complete provenance, deterministic ordering,
one global result limit, isolated source failures, and per-route/per-dataset
outcome reporting. - Propagate cancellation and one absolute deadline through routed and in-memory
queries without activating any relay or changing publication policy. - Honor NIP-01 OR semantics by applying each filter's limit independently and
reservingQueryOptions.limitfor the router-wide result cap.
0.3.1 - 2026-07-16
- Retry a local subscription's
REQafter an initially unavailable FIPS route
later reconnects, while keeping replay delivery valid during the pending send. - Close a late successful
REQwhen its local subscription or peer admission was
removed before the send completed.
0.3.0 - 2026-07-16
- Add
FipsNostrPubsubClient, the shared browsernostr.pubsub/1
REQ/EVENT/CLOSEcarrier for signed Nostr events. - Keep peer admission application-owned and explicit; connected peers are never
inferred, and subscriptions refresh when admitted standalone links reconnect. - Bound replay, subscriptions, filters, peers, frames, and pending work; failed
publications remain retryable and invalid or non-admitted traffic is dropped. - Match the native FSP datagram maximum exactly: accept 65,525 bytes and reject
65,526, with a real Rust process roundtrip gate. - Include TypeScript sources referenced by the published declaration and source
maps so clean-installed artifacts are self-contained.
0.2.0 - 2026-07-16
- Add the bounded
FipsInvWantStreamandFipsInvWantTcpDriverover the
shared TCP/FIPS v1 stack. - Cover partial and coalesced records, queue and peer bounds, close/reset
lifecycle, reconnects, and real Rust-to-TypeScript process interoperability. - Match Rust simultaneous-connect ordering by normalizing compressed and
x-only transport identities to their canonical npub ordering key. - Keep authenticated capability discovery explicit; no fallback provider
namespace or unauthenticated peer inference is introduced.
0.1.5 - 2026-07-13
- Add the authenticated FIPS Nostr relay adapter and shared Rust/TypeScript
interoperability vectors.
nostr-pubsub TypeScript v0.4.0
Dataset-aware read routing: additive datasets, ordered replica failover, cancellation/deadlines, verified deduplication and provenance, while retaining the EventBus compatibility surface.
nostr-pubsub TypeScript 0.3.1
Recover explicit FIPS nostr.pubsub/1 subscriptions after route reconnection while preserving bounded replay and late-close lifecycle semantics. Wire, capability, and the 65,525-byte native FSP bound are unchanged.
nostr-pubsub TypeScript 0.3.0
Shared authenticated FIPS Nostr pubsub client for signed REQ, EVENT, and CLOSE traffic. Peer admission remains explicit and application-owned. Matches the native 65,525-byte FSP service-body boundary and includes Rust process interoperability coverage.
nostr-pubsub TypeScript 0.2.0
TypeScript 0.2.0
- Adds the bounded
FipsInvWantStreamandFipsInvWantTcpDriverover the shared@fips/tcp0.2.0 stack. - Handles incremental split/coalesced records, bounded queues and peers, authenticated endpoint identity, graceful close/reset, reconnects, and simultaneous-connect convergence.
- Matches Rust ordering by normalizing compressed/x-only peer identities to canonical npub ordering keys while retaining transport IDs for routing.
- Keeps capability discovery explicit and authenticated; no fallback namespace or arbitrary-peer inference is added.
Verification includes 42 TypeScript tests, two real Rust-process TCP/FIPS exchanges, 23 Rust nostr-pubsub-fips tests, legacy cross-language vectors, strict Clippy, build/check, and a clean release-tarball install/import.
Artifact SHA-256: 8203971a6e90e506711b7c50ad93822b1d1af6e5c1c16d21c6a1748b9fcec016