@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.
- package/exports/browser/{client-BfWOZz0W.js → client-C6OfbHKI.js} +16 -61
- package/exports/browser/messages/file-link.d.ts +10 -0
- package/exports/browser/messages-DYI_YkZS.js +206 -0
- package/exports/browser/peer-info.d.ts +4 -0
- package/exports/browser/{peernet-BQUef8u4.js → peernet-CnZz_eNn.js} +146 -147
- package/exports/browser/peernet.js +1 -1
- package/exports/browser/prompts/password/browser.d.ts +2 -0
- package/exports/browser/prompts/password/node.d.ts +2 -0
- package/exports/browser/proto/file-link.proto.d.ts +6 -0
- package/exports/messages-CsDqTaBh.js +204 -0
- package/exports/peernet.js +145 -146
- package/exports/types/messages/file-link.d.ts +10 -0
- package/exports/types/peer-info.d.ts +4 -0
- package/exports/types/prompts/password/browser.d.ts +2 -0
- package/exports/types/prompts/password/node.d.ts +2 -0
- package/exports/types/proto/file-link.proto.d.ts +6 -0
- package/package.json +3 -3
- package/exports/browser/messages-B2WVXv2a.js +0 -216
- package/exports/messages-BmpgEM4y.js +0 -214
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { L as LittlePubSub } from './peernet-
|
|
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
|
-
|
|
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
|
|
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 };
|