@leofcoin/peernet 1.1.99 → 1.1.101

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.
@@ -1,4 +1,4 @@
1
- import { L as LittlePubSub } from './peernet-BQUef8u4.js';
1
+ import { L as LittlePubSub } from './peernet-CnZz_eNn.js';
2
2
  import './identity-Cn0iQbY3.js';
3
3
  import './value-C3vAp-wb.js';
4
4
 
@@ -341,16 +341,16 @@ class Peer extends SimplePeer {
341
341
  channelName;
342
342
  version;
343
343
  bw = { up: 0, down: 0 };
344
+ get connected() {
345
+ return super.connected;
346
+ }
344
347
  constructor(options) {
345
- const { from, to, trickle, config, version } = options;
346
- // Canonical initiator and channel label based on sorted IDs
347
- const [a, b] = [from, to].sort();
348
- const channelName = `${a}:${b}`;
349
- const initiator = from === a;
348
+ const { from, to, initiator, trickle, config, version } = options;
349
+ const channelName = initiator ? `${from}:${to}` : `${to}:${from}`;
350
350
  super({
351
351
  channelName,
352
352
  initiator,
353
- trickle: trickle ?? true,
353
+ trickle: trickle || true,
354
354
  config: { iceServers, ...config },
355
355
  wrtc: globalThis.wrtc
356
356
  });
@@ -428,7 +428,6 @@ class Client {
428
428
  #connections = {};
429
429
  #stars = {};
430
430
  #starListeners = {};
431
- #handlersSetup = false;
432
431
  #reinitLock = null;
433
432
  #connectEvent = 'peer:connected';
434
433
  #retryOptions = { retries: 5, factor: 2, minTimeout: 1000, maxTimeout: 30000 };
@@ -561,8 +560,6 @@ class Client {
561
560
  else {
562
561
  globalThis.addEventListener('beforeunload', this.close.bind(this));
563
562
  }
564
- // Setup resume/sleep detection so we can reinit connections after wake
565
- this._setupResumeHandler();
566
563
  }
567
564
  setupStarListeners(starConnection, starId) {
568
565
  // create stable references to handlers so we can unsubscribe later
@@ -584,46 +581,6 @@ class Client {
584
581
  { topic: 'signal', handler: onSignal }
585
582
  ];
586
583
  }
587
- _setupResumeHandler() {
588
- if (this.#handlersSetup)
589
- return;
590
- this.#handlersSetup = true;
591
- const THRESHOLD = 10 * 1000; // 10s gap indicates sleep/wake
592
- let last = Date.now();
593
- const check = () => {
594
- const now = Date.now();
595
- const delta = now - last;
596
- last = now;
597
- if (delta > THRESHOLD) {
598
- debug(`resume detected (gap ${delta}ms)`);
599
- this.reinit().catch((e) => debug('reinit error', e));
600
- }
601
- };
602
- // Start interval checker
603
- const iv = setInterval(check, 2000);
604
- // Browser specific events
605
- if (typeof document !== 'undefined' && document.addEventListener) {
606
- document.addEventListener('visibilitychange', () => {
607
- if (document.visibilityState === 'visible') {
608
- // small delay to let timers update
609
- setTimeout(() => check(), 50);
610
- }
611
- });
612
- window.addEventListener('online', () => setTimeout(() => check(), 50));
613
- }
614
- // Node: listen for SIGCONT (process continued) as well
615
- if (globalThis.process?.on) {
616
- try {
617
- process.on('SIGCONT', () => setTimeout(() => check(), 50));
618
- }
619
- catch (e) {
620
- // ignore
621
- }
622
- }
623
- // keep reference so it can be cleared on close
624
- // @ts-ignore
625
- this._resumeInterval = iv;
626
- }
627
584
  #starJoined = (id) => {
628
585
  if (this.#stars[id]) {
629
586
  this.#stars[id].close(0);
@@ -661,7 +618,7 @@ class Client {
661
618
  }
662
619
  debug(`peer ${id} left`);
663
620
  };
664
- connect(peerId, star) {
621
+ connect(peerId, star, initiator = true) {
665
622
  if (this.#connections[peerId]) {
666
623
  debug(`peer ${peerId} already connected`);
667
624
  return;
@@ -670,15 +627,16 @@ class Client {
670
627
  console.warn(`Star ${star} is not connected, cannot reconnect to peer ${peerId}`);
671
628
  return;
672
629
  }
673
- this.#createRTCPeerConnection(peerId, star, this.version);
630
+ this.#createRTCPeerConnection(peerId, star, this.version, initiator);
674
631
  }
675
- reconnect(peerId, star) {
632
+ reconnect(peerId, star, initiator = false) {
676
633
  delete this.#connections[peerId];
677
634
  debug(`reconnecting to peer ${peerId}`);
678
- return this.connect(peerId, star);
635
+ return this.connect(peerId, star, initiator);
679
636
  }
680
- #createRTCPeerConnection = (peerId, star, version) => {
637
+ #createRTCPeerConnection = (peerId, star, version, initiator = false) => {
681
638
  const peer = new Peer({
639
+ initiator: initiator,
682
640
  from: this.peerId,
683
641
  to: peerId,
684
642
  version
@@ -697,7 +655,7 @@ class Client {
697
655
  delete this.#connections[peerId];
698
656
  }
699
657
  if (this.peerId !== peerId)
700
- this.#createRTCPeerConnection(peerId, star, version);
658
+ this.#createRTCPeerConnection(peerId, star, version, true);
701
659
  debug(`peer ${peerId} joined`);
702
660
  };
703
661
  #inComingSignal = async ({ from, signal, channelName, version }, star) => {
@@ -741,7 +699,8 @@ class Client {
741
699
  to: peer.peerId,
742
700
  channelName: peer.channelName,
743
701
  version,
744
- signal
702
+ signal,
703
+ initiator: peer.initiator
745
704
  }
746
705
  });
747
706
  };
@@ -823,10 +782,6 @@ class Client {
823
782
  }
824
783
  }
825
784
  }
826
- // Ensure we wait for all peer and star close/destroy operations.
827
- // Previous code passed an array of arrays to Promise.allSettled which
828
- // resolves immediately; flatten into a single array of promises (or
829
- // values) so we actually wait for async close operations.
830
785
  const peerClosers = Object.values(this.#connections).map((connection) => {
831
786
  try {
832
787
  // destroy() may be sync or return a promise
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @extends {CodecFormat}
3
+ */
4
+ export default class PeernetFileLink {
5
+ /**
6
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
7
+ */
8
+ constructor(data: Buffer | string | any | DataMessage);
9
+ get messageName(): string;
10
+ }
@@ -0,0 +1,206 @@
1
+ import { F as FormatInterface } from './peernet-CnZz_eNn.js';
2
+ import './identity-Cn0iQbY3.js';
3
+ import './value-C3vAp-wb.js';
4
+
5
+ var proto$b = {
6
+ data: new Uint8Array(),
7
+ signature: new Uint8Array(),
8
+ 'from?': String(),
9
+ 'to?': String(),
10
+ 'id?': String()
11
+ };
12
+
13
+ class PeernetMessage extends FormatInterface {
14
+ get messageName() {
15
+ return 'PeernetMessage';
16
+ }
17
+ constructor(buffer) {
18
+ const name = 'peernet-message';
19
+ super(buffer, proto$b, { name });
20
+ }
21
+ }
22
+
23
+ var proto$a = {
24
+ hash: String(),
25
+ 'store?': String()
26
+ };
27
+
28
+ /**
29
+ * @example `
30
+ new DHTMessage(hash, store)
31
+ // store = optional if not set, peernet checks every store
32
+ let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
33
+ message = new DHTMessage('hashmvbs124xcfd...', 'block')
34
+ `
35
+ */
36
+ class DHTMessage extends FormatInterface {
37
+ get messageName() {
38
+ return 'PeernetDHTMessage';
39
+ }
40
+ constructor(data) {
41
+ const name = 'peernet-dht';
42
+ super(data, proto$a, { name });
43
+ }
44
+ }
45
+
46
+ var proto$9 = {
47
+ hash: String(),
48
+ has: Boolean()
49
+ };
50
+
51
+ class DHTMessageResponse extends FormatInterface {
52
+ get messageName() {
53
+ return 'PeernetDHTMessageResponse';
54
+ }
55
+ constructor(data) {
56
+ const name = 'peernet-dht-response';
57
+ super(data, proto$9, { name });
58
+ }
59
+ }
60
+
61
+ var proto$8 = {
62
+ hash: String(),
63
+ 'store?': String()
64
+ };
65
+
66
+ /**
67
+ * @extends {CodecFormat}
68
+ */
69
+ class DataMessage extends FormatInterface {
70
+ get messageName() {
71
+ return 'PeernetDataMessage';
72
+ }
73
+ /**
74
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
75
+ */
76
+ constructor(data) {
77
+ super(data, proto$8, { name: 'peernet-data' });
78
+ }
79
+ }
80
+
81
+ var proto$7 = {
82
+ data: new Uint8Array(),
83
+ topic: new Uint8Array()
84
+ };
85
+
86
+ class PsMessage extends FormatInterface {
87
+ get messageName() {
88
+ return 'PsMessage';
89
+ }
90
+ constructor(buffer) {
91
+ const name = 'peernet-ps';
92
+ super(buffer, proto$7, { name });
93
+ }
94
+ }
95
+
96
+ var proto$6 = {
97
+ id: String()
98
+ };
99
+
100
+ class PeerMessage extends FormatInterface {
101
+ get messageName() {
102
+ return 'PeernetPeerMessage';
103
+ }
104
+ constructor(data) {
105
+ const name = 'peernet-peer';
106
+ super(data, proto$6, { name });
107
+ }
108
+ }
109
+
110
+ var proto$5 = {
111
+ request: String(),
112
+ 'requested?': new Uint8Array()
113
+ };
114
+
115
+ class RequestMessage extends FormatInterface {
116
+ get messageName() {
117
+ return 'PeernetRequestMessage';
118
+ }
119
+ constructor(data) {
120
+ const name = 'peernet-request';
121
+ super(data, proto$5, { name });
122
+ }
123
+ }
124
+
125
+ var proto$4 = {
126
+ response: {}
127
+ };
128
+
129
+ class ResponseMessage extends FormatInterface {
130
+ get messageName() {
131
+ return 'PeernetResponseMessage';
132
+ }
133
+ constructor(data) {
134
+ const name = 'peernet-response';
135
+ super(data, proto$4, { name });
136
+ }
137
+ }
138
+
139
+ var proto$3 = {
140
+ id: String()
141
+ };
142
+
143
+ class PeerMessageResponse extends FormatInterface {
144
+ get messageName() {
145
+ return 'PeernetPeerMessageResponse';
146
+ }
147
+ constructor(data) {
148
+ const name = 'peernet-peer-response';
149
+ super(data, proto$3, { name });
150
+ }
151
+ }
152
+
153
+ var proto$2 = {
154
+ hash: String(),
155
+ data: new Uint8Array()
156
+ };
157
+
158
+ class DataMessageResponse extends FormatInterface {
159
+ get messageName() {
160
+ return 'PeernetDataMessageResponse';
161
+ }
162
+ constructor(data) {
163
+ const name = 'peernet-data-response';
164
+ super(data, proto$2, { name });
165
+ }
166
+ }
167
+
168
+ var proto$1 = {
169
+ value: String(),
170
+ author: String(),
171
+ timestamp: Number(),
172
+ files: [String()]
173
+ };
174
+
175
+ class ChatMessage extends FormatInterface {
176
+ get messageName() {
177
+ return 'ChatMessage';
178
+ }
179
+ constructor(buffer) {
180
+ const name = 'chat-message';
181
+ super(buffer, proto$1, { name });
182
+ }
183
+ }
184
+
185
+ var proto = {
186
+ path: String(),
187
+ 'content?': '',
188
+ 'links?': []
189
+ };
190
+
191
+ /**
192
+ * @extends {CodecFormat}
193
+ */
194
+ class PeernetFile extends FormatInterface {
195
+ get messageName() {
196
+ return 'PeernetFile';
197
+ }
198
+ /**
199
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
200
+ */
201
+ constructor(data) {
202
+ super(data, proto, { name: 'peernet-file' });
203
+ }
204
+ }
205
+
206
+ export { ChatMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PeerMessage, PeerMessageResponse, PeernetFile, PeernetMessage, PsMessage, RequestMessage, ResponseMessage };
@@ -0,0 +1,4 @@
1
+ export default class PeerInfo {
2
+ constructor(data: any, options: any);
3
+ keys: string[];
4
+ }