@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,59 +0,0 @@
1
- /**
2
- * Simple LRU Cache implementation
3
- */
4
- export class LRUCache {
5
- cache = new Map();
6
- maxSize;
7
- constructor(maxSize = 100) {
8
- this.maxSize = maxSize;
9
- }
10
- get(key) {
11
- const value = this.cache.get(key);
12
- if (value !== undefined) {
13
- // Move to end (most recently used)
14
- this.cache.delete(key);
15
- this.cache.set(key, value);
16
- }
17
- return value;
18
- }
19
- set(key, value) {
20
- // Delete first to reset position if exists
21
- this.cache.delete(key);
22
- // Evict oldest if at capacity
23
- if (this.cache.size >= this.maxSize) {
24
- const oldest = this.cache.keys().next().value;
25
- if (oldest !== undefined) {
26
- this.cache.delete(oldest);
27
- }
28
- }
29
- this.cache.set(key, value);
30
- }
31
- has(key) {
32
- return this.cache.has(key);
33
- }
34
- delete(key) {
35
- return this.cache.delete(key);
36
- }
37
- clear() {
38
- this.cache.clear();
39
- }
40
- get size() {
41
- return this.cache.size;
42
- }
43
- keys() {
44
- return this.cache.keys();
45
- }
46
- values() {
47
- return this.cache.values();
48
- }
49
- *entries() {
50
- yield* this.cache.entries();
51
- }
52
- forEach(callback) {
53
- this.cache.forEach(callback);
54
- }
55
- [Symbol.iterator]() {
56
- return this.entries();
57
- }
58
- }
59
- //# sourceMappingURL=lruCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lruCache.js","sourceRoot":"","sources":["../../src/webrtc/lruCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACX,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;IACxB,OAAO,CAAS;IAExB,YAAY,UAAkB,GAAG;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,2CAA2C;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,CAAC,OAAO;QACN,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,QAAoC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -1,133 +0,0 @@
1
- /**
2
- * WebRTC peer connection for hashtree data exchange
3
- */
4
- import type { Store, Hash } from '@hashtree/core';
5
- import type { SignalingMessage, PeerId, MeshNostrFrame } from './types.js';
6
- import { PeerHTLConfig } from './protocol.js';
7
- export declare class Peer {
8
- readonly peerId: string;
9
- readonly pubkey: string;
10
- readonly direction: 'inbound' | 'outbound';
11
- private pc;
12
- private dataChannel;
13
- private localStore;
14
- private sendSignaling;
15
- private onClose;
16
- private onConnected?;
17
- private onConnectedFired;
18
- private debug;
19
- private makingOffer;
20
- private ignoreOffer;
21
- private isPolite;
22
- private myPeerId;
23
- private ourRequests;
24
- private theirRequests;
25
- private requestTimeout;
26
- private pendingCandidates;
27
- private candidateBatchTimeout;
28
- private queuedRemoteCandidates;
29
- private onForwardRequest?;
30
- private onMeshFrame?;
31
- private stats;
32
- private pendingReassemblies;
33
- private reassemblyCleanupInterval?;
34
- private htlConfig;
35
- readonly createdAt: number;
36
- connectedAt?: number;
37
- constructor(options: {
38
- peerId: PeerId;
39
- myPeerId: string;
40
- direction: 'inbound' | 'outbound';
41
- localStore: Store | null;
42
- sendSignaling: (msg: SignalingMessage) => Promise<void>;
43
- onClose: () => void;
44
- onConnected?: () => void;
45
- onForwardRequest?: (hash: Uint8Array, excludePeerId: string, htl: number) => Promise<Uint8Array | null>;
46
- onMeshFrame?: (fromPeerId: string, frame: MeshNostrFrame) => Promise<void> | void;
47
- requestTimeout?: number;
48
- debug?: boolean;
49
- });
50
- private log;
51
- get state(): RTCPeerConnectionState;
52
- get isConnected(): boolean;
53
- get pendingTheirRequestsCount(): number;
54
- private scheduleCandidateBatch;
55
- private setupPeerConnection;
56
- private setupDataChannel;
57
- private handleMessage;
58
- private handleRequest;
59
- private sendResponse;
60
- /**
61
- * Handle a fragmented response - buffer and reassemble
62
- * Returns assembled data when complete, null when waiting for more fragments
63
- */
64
- private handleFragmentResponse;
65
- /**
66
- * Assemble fragments in order into a single buffer
67
- */
68
- private assembleFragments;
69
- /**
70
- * Clean up stale reassemblies (stalled or timed out)
71
- */
72
- private cleanupStaleReassemblies;
73
- /**
74
- * Request data by hash from this peer
75
- * @param htl Hops To Live - decremented before sending
76
- */
77
- request(hash: Hash, htl?: number): Promise<Uint8Array | null>;
78
- /**
79
- * Get per-peer statistics
80
- */
81
- getStats(): {
82
- requestsSent: number;
83
- requestsReceived: number;
84
- responsesSent: number;
85
- responsesReceived: number;
86
- receiveErrors: number;
87
- fragmentsSent: number;
88
- fragmentsReceived: number;
89
- fragmentTimeouts: number;
90
- reassembliesCompleted: number;
91
- bytesSent: number;
92
- bytesReceived: number;
93
- bytesForwarded: number;
94
- };
95
- /**
96
- * Get per-peer HTL config used for probabilistic decrements.
97
- */
98
- getHTLConfig(): PeerHTLConfig;
99
- /**
100
- * Send a relayless mesh signaling frame over text channel.
101
- */
102
- sendMeshFrameText(frame: MeshNostrFrame): boolean;
103
- /**
104
- * Send data to this peer for a hash they previously requested
105
- * Returns true if this peer had requested this hash
106
- */
107
- sendData(hash: Uint8Array, data: Uint8Array): boolean;
108
- /**
109
- * Check if this peer has requested a hash
110
- */
111
- hasRequested(hash: Uint8Array): boolean;
112
- /**
113
- * Get count of pending requests from this peer
114
- */
115
- getTheirRequestCount(): number;
116
- /**
117
- * Initiate connection (create offer)
118
- * Uses perfect negotiation pattern - both peers can call this
119
- */
120
- connect(): Promise<void>;
121
- /**
122
- * Handle incoming signaling message
123
- * Implements perfect negotiation pattern for collision handling
124
- */
125
- handleSignaling(msg: SignalingMessage): Promise<void>;
126
- private addRemoteCandidate;
127
- private processQueuedCandidates;
128
- /**
129
- * Close the peer connection
130
- */
131
- close(): void;
132
- }
133
- //# sourceMappingURL=peer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/webrtc/peer.ts"],"names":[],"mappings":"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"}