@hashtree/nostr 0.1.14 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +106 -176
  2. package/dist/eventCollection.d.ts +1 -1
  3. package/dist/eventCollection.d.ts.map +1 -1
  4. package/dist/eventCollection.js +2 -7
  5. package/dist/eventCollection.js.map +1 -1
  6. package/dist/eventKeys.d.ts +1 -0
  7. package/dist/eventKeys.d.ts.map +1 -1
  8. package/dist/eventKeys.js +7 -1
  9. package/dist/eventKeys.js.map +1 -1
  10. package/dist/events.d.ts +4 -0
  11. package/dist/events.d.ts.map +1 -1
  12. package/dist/events.js +76 -70
  13. package/dist/events.js.map +1 -1
  14. package/dist/index.d.ts +4 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +10 -6
  17. package/dist/index.js.map +1 -1
  18. package/dist/resolver/nostr.d.ts.map +1 -1
  19. package/dist/resolver/nostr.js +37 -25
  20. package/dist/resolver/nostr.js.map +1 -1
  21. package/dist/snapshot.d.ts +5 -0
  22. package/dist/snapshot.d.ts.map +1 -1
  23. package/dist/snapshot.js +11 -3
  24. package/dist/snapshot.js.map +1 -1
  25. package/dist/treeEventSnapshotPermalinks.js +2 -2
  26. package/dist/treeEventSnapshotPermalinks.js.map +1 -1
  27. package/dist/treeEventSnapshots.d.ts.map +1 -1
  28. package/dist/treeEventSnapshots.js +11 -12
  29. package/dist/treeEventSnapshots.js.map +1 -1
  30. package/package.json +18 -14
  31. package/src/eventCollection.ts +189 -0
  32. package/src/eventKeys.ts +155 -0
  33. package/src/eventValidation.ts +71 -0
  34. package/src/events.ts +929 -0
  35. package/src/index.ts +122 -0
  36. package/src/replaceablePublish.ts +204 -0
  37. package/src/resolver/index.ts +14 -0
  38. package/src/resolver/nostr.ts +1212 -0
  39. package/src/snapshot.ts +214 -0
  40. package/src/treeEventSnapshotPermalinks.ts +150 -0
  41. package/src/treeEventSnapshots.ts +283 -0
  42. package/dist/webrtc/index.d.ts +0 -6
  43. package/dist/webrtc/index.d.ts.map +0 -1
  44. package/dist/webrtc/index.js +0 -7
  45. package/dist/webrtc/index.js.map +0 -1
  46. package/dist/webrtc/lruCache.d.ts +0 -20
  47. package/dist/webrtc/lruCache.d.ts.map +0 -1
  48. package/dist/webrtc/lruCache.js +0 -59
  49. package/dist/webrtc/lruCache.js.map +0 -1
  50. package/dist/webrtc/peer.d.ts +0 -133
  51. package/dist/webrtc/peer.d.ts.map +0 -1
  52. package/dist/webrtc/peer.js +0 -617
  53. package/dist/webrtc/peer.js.map +0 -1
  54. package/dist/webrtc/peerSelector.d.ts +0 -2
  55. package/dist/webrtc/peerSelector.d.ts.map +0 -1
  56. package/dist/webrtc/peerSelector.js +0 -2
  57. package/dist/webrtc/peerSelector.js.map +0 -1
  58. package/dist/webrtc/protocol.d.ts +0 -3
  59. package/dist/webrtc/protocol.d.ts.map +0 -1
  60. package/dist/webrtc/protocol.js +0 -2
  61. package/dist/webrtc/protocol.js.map +0 -1
  62. package/dist/webrtc/store.d.ts +0 -217
  63. package/dist/webrtc/store.d.ts.map +0 -1
  64. package/dist/webrtc/store.js +0 -1320
  65. package/dist/webrtc/store.js.map +0 -1
  66. package/dist/webrtc/types.d.ts +0 -101
  67. package/dist/webrtc/types.d.ts.map +0 -1
  68. package/dist/webrtc/types.js +0 -5
  69. package/dist/webrtc/types.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export { encodeRequest, encodeResponse, encodePubsubInterest, encodePubsubFrame, encodePubsubInventory, encodePubsubWant, parseMessage, verifyHash, generatePeerHTLConfig, decrementHTLWithPolicy, decrementHTL, shouldForwardHTL, shouldForward, createRequest, createResponse, createFragmentResponse, createPubsubInterest, createPubsubFrame, createPubsubInventory, createPubsubWant, isFragmented, hashToKey, handleResponse, clearPendingRequests, } from '@hashtree/mesh';
2
- //# sourceMappingURL=protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/webrtc/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -1,217 +0,0 @@
1
- import type { Store, Hash } from '@hashtree/core';
2
- import { type WebRTCStoreConfig, type PeerStatus, type WebRTCStoreEventHandler, type PeerPool, type PeerClassifier, type PoolConfig, type MeshStats } from './types.js';
3
- import { Peer } from './peer.js';
4
- export declare const DEFAULT_RELAYS: string[];
5
- export declare class WebRTCStore implements Store {
6
- private config;
7
- private routing;
8
- private readonly peerSelector;
9
- private pools;
10
- private peerClassifier;
11
- private getFollowedPubkeys;
12
- private isPeerBlocked;
13
- private signer;
14
- private encrypt;
15
- private decrypt;
16
- private giftWrap;
17
- private giftUnwrap;
18
- private myPeerId;
19
- private pool;
20
- private subscriptions;
21
- private helloSubscription;
22
- private peers;
23
- private pendingOtherPubkeys;
24
- private helloInterval;
25
- private cleanupInterval;
26
- private eventHandlers;
27
- private running;
28
- private pendingReqs;
29
- private pendingGets;
30
- private blossomFetches;
31
- private currentHelloAuthors;
32
- private seenFrameIds;
33
- private seenEventIds;
34
- private meshReceived;
35
- private meshForwarded;
36
- private meshDroppedDuplicate;
37
- constructor(config: WebRTCStoreConfig);
38
- private log;
39
- /**
40
- * Get pool counts
41
- */
42
- private getPoolCounts;
43
- /**
44
- * Check if we can accept a peer in a given pool
45
- */
46
- private canAcceptPeer;
47
- /**
48
- * Check if a pool is satisfied
49
- */
50
- private isPoolSatisfied;
51
- /**
52
- * Check if we already have a connection from a pubkey in the 'other' pool.
53
- * In the 'other' pool, we only allow 1 instance per pubkey.
54
- * Also checks pendingOtherPubkeys to prevent race conditions.
55
- */
56
- private hasOtherPoolPubkey;
57
- /**
58
- * Start the WebRTC store - connect to relays and begin peer discovery
59
- */
60
- start(): void;
61
- /**
62
- * Stop the WebRTC store
63
- */
64
- stop(): void;
65
- /**
66
- * Set relays and reconnect. Useful for runtime relay configuration changes.
67
- * Closes existing subscriptions and starts new ones with the updated relays.
68
- */
69
- setRelays(relays: string[]): void;
70
- /**
71
- * Add event listener
72
- */
73
- on(handler: WebRTCStoreEventHandler): () => void;
74
- private emit;
75
- private startSubscription;
76
- /**
77
- * Setup hello subscription based on pool configuration
78
- * - If both pools are 0: don't subscribe to hellos
79
- * - If other pool is disabled but follows is enabled: subscribe to followed pubkeys only
80
- * - If other pool is enabled: subscribe to all hellos
81
- */
82
- private setupHelloSubscription;
83
- /**
84
- * Update hello subscription when follows list changes
85
- * Call this after social graph updates
86
- */
87
- updateHelloSubscription(): void;
88
- private handleSignalingEvent;
89
- private handleSignalingMessage;
90
- private handleHello;
91
- private handleOffer;
92
- private connectToPeer;
93
- private handlePeerClose;
94
- private orderedConnectedPeers;
95
- private createInFlightPeerRequest;
96
- private waitForNextPeerResult;
97
- private queryPeersWithDispatch;
98
- /**
99
- * Forward a request to other peers (excluding the requester)
100
- * Called by Peer when it receives a request it can't fulfill locally
101
- * Uses selector ordering + staged hedged dispatch
102
- * @param htl - Hops To Live (already decremented by calling peer)
103
- */
104
- private forwardRequest;
105
- /**
106
- * Send data to all peers who have requested this hash
107
- * Called when we receive data that peers may be waiting for
108
- */
109
- sendToInterestedPeers(hash: Uint8Array, data: Uint8Array): number;
110
- private pruneSeenSet;
111
- private markSeenFrameId;
112
- private markSeenEventId;
113
- private forwardMeshFrame;
114
- private handleMeshFrame;
115
- private dispatchSignaling;
116
- private sendSignaling;
117
- /**
118
- * Force send a hello message (useful for testing after pool config changes)
119
- */
120
- sendHello(): void;
121
- private maybeSendHello;
122
- private cleanupConnections;
123
- /**
124
- * Get number of connected peers
125
- */
126
- getConnectedCount(): number;
127
- /**
128
- * Get all peer statuses
129
- */
130
- getPeers(): PeerStatus[];
131
- /**
132
- * Disconnect all peers with a given pubkey
133
- * Used when blocking a peer to immediately disconnect them
134
- */
135
- disconnectPeerByPubkey(pubkey: string): void;
136
- /**
137
- * Get my endpoint ID
138
- */
139
- getMyPeerId(): string;
140
- /**
141
- * Check if store is satisfied (has enough connections in all pools)
142
- */
143
- isSatisfied(): boolean;
144
- /**
145
- * Update peer classifier (e.g., when social graph updates)
146
- */
147
- setPeerClassifier(classifier: PeerClassifier): void;
148
- /**
149
- * Update pool configuration (e.g., from settings)
150
- */
151
- setPoolConfig(pools: {
152
- follows: PoolConfig;
153
- other: PoolConfig;
154
- }): void;
155
- /**
156
- * Get current pool configuration
157
- */
158
- getPoolConfig(): {
159
- follows: PoolConfig;
160
- other: PoolConfig;
161
- };
162
- private peerMetadataPointerHash;
163
- /**
164
- * Persist selector metadata snapshot to local store.
165
- * Returns the snapshot hash, or null when local storage is unavailable.
166
- */
167
- persistPeerMetadata(): Promise<Uint8Array | null>;
168
- /**
169
- * Load selector metadata snapshot from local store, if available.
170
- */
171
- loadPeerMetadata(): Promise<boolean>;
172
- /**
173
- * Get fallback stores count
174
- */
175
- getFallbackStoresCount(): number;
176
- /**
177
- * Get WebRTC stats (aggregate and per-peer)
178
- */
179
- getStats(): {
180
- aggregate: MeshStats;
181
- perPeer: Map<string, {
182
- pubkey: string;
183
- pool: PeerPool;
184
- stats: ReturnType<Peer['getStats']>;
185
- }>;
186
- };
187
- put(hash: Hash, data: Uint8Array): Promise<boolean>;
188
- get(hash: Hash): Promise<Uint8Array | null>;
189
- /**
190
- * Internal method to fetch data from peers (separated for deduplication)
191
- */
192
- private fetchFromPeers;
193
- /**
194
- * Helper to create a delay promise
195
- */
196
- private delay;
197
- /**
198
- * Add hash to pending requests list and wait for it to be resolved by peers
199
- * Also immediately tries any connected peers that weren't tried yet
200
- */
201
- private waitForHash;
202
- /**
203
- * Try all currently connected peers for a specific hash in the pending requests
204
- */
205
- private tryConnectedPeersForHash;
206
- /**
207
- * Remove a pending request from the list
208
- */
209
- private removePendingReq;
210
- /**
211
- * Try pending requests with a newly connected peer
212
- */
213
- private tryPendingReqs;
214
- has(hash: Hash): Promise<boolean>;
215
- delete(hash: Hash): Promise<boolean>;
216
- }
217
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/webrtc/store.ts"],"names":[],"mappings":"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"}