webpeerjs 0.0.5 → 0.0.7
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/dist/esm/webpeerjs.js +288 -76
- package/dist/umd/webpeerjs.js +288 -76
- package/package.json +1 -1
- package/src/config.js +13 -8
- package/src/utils.js +11 -6
- package/src/webpeerjs.js +265 -52
package/dist/umd/webpeerjs.js
CHANGED
|
@@ -6,34 +6,39 @@
|
|
|
6
6
|
|
|
7
7
|
const prefix$1 = 'webpeerjs';
|
|
8
8
|
const CONFIG_PREFIX = prefix$1;
|
|
9
|
+
const CONFIG_PROTOCOL = '/'+prefix$1+'/0.0.1';
|
|
9
10
|
const CONFIG_DBSTORE_PATH = prefix$1+'-dbstore';
|
|
10
11
|
const CONFIG_MAX_CONNECTIONS = 100;
|
|
11
12
|
const CONFIG_MIN_CONNECTIONS = 0;
|
|
12
13
|
const CONFIG_DISCOVER_RELAYS = 1;
|
|
13
14
|
const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-browser-peer-discovery';
|
|
14
15
|
const CONFIG_PEER_DISCOVERY_GLOBAL = '_peer-discovery._p2p._pubsub';
|
|
15
|
-
const
|
|
16
|
+
const CONFIG_PEER_DISCOVERY_WEBPEERJS= prefix$1+'-peer-discovery';
|
|
17
|
+
const CONFIG_PUBSUB_PEER_DISCOVERY = [CONFIG_PEER_DISCOVERY_GLOBAL, CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY, CONFIG_PEER_DISCOVERY_WEBPEERJS];
|
|
16
18
|
const CONFIG_DELEGATED_API = 'https://delegated-ipfs.dev';
|
|
17
19
|
|
|
18
20
|
const CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS = [
|
|
19
21
|
];
|
|
20
22
|
|
|
21
|
-
const
|
|
22
|
-
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
|
|
23
|
-
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
24
|
-
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
25
|
-
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
23
|
+
const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
|
|
26
24
|
'QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
|
|
27
|
-
'QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',
|
|
28
25
|
'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
|
|
29
26
|
'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
|
|
30
27
|
'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
|
|
28
|
+
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
29
|
+
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
30
|
+
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
31
31
|
'12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5',
|
|
32
32
|
'12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
|
|
33
33
|
'12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
|
|
34
34
|
'12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
|
|
35
|
-
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
|
|
36
|
-
|
|
35
|
+
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
|
|
36
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
|
|
40
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
41
|
+
];
|
|
37
42
|
|
|
38
43
|
/**
|
|
39
44
|
* Returns a `Uint8Array` of the requested size. Referenced memory will
|
|
@@ -3290,6 +3295,7 @@
|
|
|
3290
3295
|
|
|
3291
3296
|
let isDialEnabled = true;
|
|
3292
3297
|
let lastfailtreshold = 0;
|
|
3298
|
+
let fail = 0;
|
|
3293
3299
|
|
|
3294
3300
|
function metrics(data){
|
|
3295
3301
|
try{
|
|
@@ -3342,29 +3348,29 @@
|
|
|
3342
3348
|
|
|
3343
3349
|
lastStats = webTransportEvents;
|
|
3344
3350
|
|
|
3345
|
-
|
|
3351
|
+
fail = errors+timeouts;
|
|
3346
3352
|
const treshold = errors+timeouts+stats.open+stats.pending;
|
|
3347
3353
|
|
|
3348
|
-
if(treshold>
|
|
3354
|
+
if(treshold>40){
|
|
3349
3355
|
//console.log(`Treeshold hit : ${treshold}`)
|
|
3350
3356
|
}
|
|
3351
3357
|
|
|
3352
|
-
if(fail>
|
|
3358
|
+
if(fail>40){
|
|
3353
3359
|
//console.log(`Open : ${stats.open} , Pending : ${stats.pending} , Succes : ${totals.success} , Fail : ${fail} `)
|
|
3354
3360
|
|
|
3355
3361
|
}
|
|
3356
3362
|
|
|
3357
|
-
if ((fail-lastfailtreshold)>
|
|
3363
|
+
if ((fail-lastfailtreshold)>40){
|
|
3358
3364
|
if(isDialEnabled){
|
|
3359
3365
|
isDialEnabled = false;
|
|
3360
3366
|
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
3361
|
-
console.warn(
|
|
3367
|
+
console.warn('dial disabled');
|
|
3362
3368
|
setTimeout(()=>{
|
|
3363
3369
|
if(!isDialEnabled){
|
|
3364
3370
|
isDialEnabled = true;
|
|
3365
3371
|
lastfailtreshold = fail;
|
|
3366
3372
|
const str = JSON.stringify({isDialEnabled,fail,lastfailtreshold});
|
|
3367
|
-
console.warn(
|
|
3373
|
+
console.warn('dial enabled');
|
|
3368
3374
|
}
|
|
3369
3375
|
},6*60*1000);
|
|
3370
3376
|
}
|
|
@@ -46157,20 +46163,27 @@
|
|
|
46157
46163
|
|
|
46158
46164
|
|
|
46159
46165
|
//listen to peer connect event
|
|
46160
|
-
this.#libp2p.addEventListener("peer:connect", (evt) => {
|
|
46161
|
-
|
|
46162
|
-
//console.log(`Connected to ${connection.toString()}`);
|
|
46166
|
+
this.#libp2p.addEventListener("peer:connect",async (evt) => {
|
|
46163
46167
|
|
|
46164
|
-
|
|
46168
|
+
evt.detail;
|
|
46165
46169
|
const id = evt.detail.toString();
|
|
46166
46170
|
|
|
46171
|
+
//console.log('peer:connect '+id,evt)
|
|
46172
|
+
|
|
46167
46173
|
const connections = this.#libp2p.getConnections().map((con)=>{return {id:con.remotePeer.toString(),addr:con.remoteAddr.toString()}});
|
|
46168
46174
|
const connect = connections.find((con)=>con.id == id);
|
|
46169
46175
|
const addr = connect.addr;
|
|
46176
|
+
|
|
46177
|
+
if(CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
46178
|
+
if(!this.#connections.has(id)&&addr.includes('webtransport')){
|
|
46179
|
+
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
46180
|
+
}
|
|
46181
|
+
}
|
|
46182
|
+
|
|
46170
46183
|
this.#connections.set(id,addr);
|
|
46171
46184
|
|
|
46172
46185
|
//required by joinRoom version 1 to announce via universal connectivity
|
|
46173
|
-
if(
|
|
46186
|
+
if(CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
46174
46187
|
setTimeout(()=>{
|
|
46175
46188
|
this.#announce();
|
|
46176
46189
|
setTimeout(()=>{
|
|
@@ -46179,6 +46192,31 @@
|
|
|
46179
46192
|
},1000);
|
|
46180
46193
|
}
|
|
46181
46194
|
|
|
46195
|
+
if(this.#webPeersId.includes(id)){
|
|
46196
|
+
|
|
46197
|
+
let address = [addr];
|
|
46198
|
+
|
|
46199
|
+
if(this.#connectedPeers.has(id)){
|
|
46200
|
+
//reset this last seen
|
|
46201
|
+
const now = new Date().getTime();
|
|
46202
|
+
const metadata = {addrs:address,last:now};
|
|
46203
|
+
this.#connectedPeers.set(id,metadata);
|
|
46204
|
+
}
|
|
46205
|
+
else {
|
|
46206
|
+
//add to connected webpeers
|
|
46207
|
+
this.#onConnectFn(id);
|
|
46208
|
+
const now = new Date().getTime();
|
|
46209
|
+
const metadata = {addrs:address,last:now};
|
|
46210
|
+
this.#connectedPeers.set(id,metadata);
|
|
46211
|
+
this.#connectedPeersArr.length = 0;
|
|
46212
|
+
for(const peer of this.#connectedPeers){
|
|
46213
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
46214
|
+
this.#connectedPeersArr.push(item);
|
|
46215
|
+
}
|
|
46216
|
+
}
|
|
46217
|
+
|
|
46218
|
+
}
|
|
46219
|
+
|
|
46182
46220
|
});
|
|
46183
46221
|
|
|
46184
46222
|
|
|
@@ -46215,6 +46253,11 @@
|
|
|
46215
46253
|
const now = new Date().getTime();
|
|
46216
46254
|
const metadata = {addrs:address,last:now};
|
|
46217
46255
|
this.#connectedPeers.set(senderPeerId,metadata);
|
|
46256
|
+
this.#connectedPeersArr.length = 0;
|
|
46257
|
+
for(const peer of this.#connectedPeers){
|
|
46258
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
46259
|
+
this.#connectedPeersArr.push(item);
|
|
46260
|
+
}
|
|
46218
46261
|
}
|
|
46219
46262
|
|
|
46220
46263
|
//dial if not connected
|
|
@@ -46330,22 +46373,20 @@
|
|
|
46330
46373
|
}
|
|
46331
46374
|
|
|
46332
46375
|
//update connected webpeers
|
|
46333
|
-
const now = new Date().getTime()
|
|
46334
|
-
const metadata = {addrs:address,last:now}
|
|
46335
|
-
this.#connectedPeers.set(id,metadata)
|
|
46336
|
-
this.#webPeersAddrs.set(id,address)
|
|
46337
|
-
this.#connectedPeersArr.length = 0
|
|
46376
|
+
/*const now = new Date().getTime()
|
|
46377
|
+
const metadata = {addrs:address,last:now}
|
|
46378
|
+
this.#connectedPeers.set(id,metadata)
|
|
46379
|
+
this.#webPeersAddrs.set(id,address)
|
|
46380
|
+
this.#connectedPeersArr.length = 0
|
|
46338
46381
|
for(const peer of this.#connectedPeers){
|
|
46339
|
-
const item = {id:peer[0],address:peer[1].addrs}
|
|
46340
|
-
this.#connectedPeersArr.push(item)
|
|
46341
|
-
}
|
|
46382
|
+
const item = {id:peer[0],address:peer[1].addrs}
|
|
46383
|
+
this.#connectedPeersArr.push(item)
|
|
46384
|
+
}*/
|
|
46342
46385
|
|
|
46343
46386
|
}
|
|
46344
46387
|
}
|
|
46345
46388
|
|
|
46346
46389
|
}catch(err){
|
|
46347
|
-
//console.log('from '+event.detail.from.toString())
|
|
46348
|
-
console.debug(err);
|
|
46349
46390
|
}
|
|
46350
46391
|
}else {
|
|
46351
46392
|
const json = JSON.parse(topic);
|
|
@@ -46391,10 +46432,12 @@
|
|
|
46391
46432
|
if(multiaddrs.toString().includes('certhash')&& multiaddrs.toString().includes('webtransport') && multiaddrs.toString().includes('p2p-circuit')){
|
|
46392
46433
|
//console.log(addrs)
|
|
46393
46434
|
if(!this.#connections.has(id)){
|
|
46435
|
+
let mddrs = [];
|
|
46394
46436
|
for(const addr of addrs){
|
|
46395
|
-
multiaddr(addr);
|
|
46437
|
+
const mddr = multiaddr(addr);
|
|
46438
|
+
mddrs.push(mddr);
|
|
46396
46439
|
}
|
|
46397
|
-
|
|
46440
|
+
this.#dialMultiaddress(mddrs);
|
|
46398
46441
|
}
|
|
46399
46442
|
}
|
|
46400
46443
|
}
|
|
@@ -46451,10 +46494,8 @@
|
|
|
46451
46494
|
//redial if this disconnected peer is regular peer
|
|
46452
46495
|
else {
|
|
46453
46496
|
const addr = this.#connections.get(id);
|
|
46454
|
-
|
|
46455
|
-
|
|
46456
|
-
mddrs.push(addrs);
|
|
46457
|
-
this.#dialMultiaddress(mddrs);
|
|
46497
|
+
multiaddr(addr);
|
|
46498
|
+
//this.#dialMultiaddress(mddrs)
|
|
46458
46499
|
}
|
|
46459
46500
|
});
|
|
46460
46501
|
|
|
@@ -46476,6 +46517,45 @@
|
|
|
46476
46517
|
this.#ping();
|
|
46477
46518
|
});
|
|
46478
46519
|
|
|
46520
|
+
this.#libp2p.addEventListener('peer:identify', (evt) => {
|
|
46521
|
+
//console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
|
|
46522
|
+
if(evt.detail.protocols.includes(CONFIG_PROTOCOL)){
|
|
46523
|
+
//console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
|
|
46524
|
+
|
|
46525
|
+
const id = evt.detail.peerId.toString();
|
|
46526
|
+
let address = [];
|
|
46527
|
+
|
|
46528
|
+
for(const addrs of evt.detail.listenAddrs){
|
|
46529
|
+
const addr = addrs.toString()+'/p2p/'+id;
|
|
46530
|
+
if(addr.includes('webtransport')){
|
|
46531
|
+
address.push(addr);
|
|
46532
|
+
}
|
|
46533
|
+
}
|
|
46534
|
+
|
|
46535
|
+
if(!this.#webPeersId.includes(id))this.#webPeersId.push(id);
|
|
46536
|
+
|
|
46537
|
+
if(this.#connectedPeers.has(id)){
|
|
46538
|
+
//reset this last seen
|
|
46539
|
+
const now = new Date().getTime();
|
|
46540
|
+
const metadata = {addrs:address,last:now};
|
|
46541
|
+
this.#connectedPeers.set(id,metadata);
|
|
46542
|
+
}
|
|
46543
|
+
else {
|
|
46544
|
+
//add to connected webpeers
|
|
46545
|
+
this.#onConnectFn(id);
|
|
46546
|
+
const now = new Date().getTime();
|
|
46547
|
+
const metadata = {addrs:address,last:now};
|
|
46548
|
+
this.#connectedPeers.set(id,metadata);
|
|
46549
|
+
this.#connectedPeersArr.length = 0;
|
|
46550
|
+
for(const peer of this.#connectedPeers){
|
|
46551
|
+
const item = {id:peer[0],address:peer[1].addrs};
|
|
46552
|
+
this.#connectedPeersArr.push(item);
|
|
46553
|
+
}
|
|
46554
|
+
}
|
|
46555
|
+
|
|
46556
|
+
}
|
|
46557
|
+
});
|
|
46558
|
+
|
|
46479
46559
|
//dial known peers from configuration
|
|
46480
46560
|
this.#dialKnownPeers();
|
|
46481
46561
|
|
|
@@ -46490,6 +46570,9 @@
|
|
|
46490
46570
|
|
|
46491
46571
|
//dial random discovered peers
|
|
46492
46572
|
//this.#dialdiscoveredpeers()
|
|
46573
|
+
|
|
46574
|
+
this.#registerProtocol();
|
|
46575
|
+
|
|
46493
46576
|
|
|
46494
46577
|
onMetrics((data)=>{
|
|
46495
46578
|
const signal = metrics(data);
|
|
@@ -46509,16 +46592,7 @@
|
|
|
46509
46592
|
setInterval(()=>{
|
|
46510
46593
|
this.#trackLastSeen();
|
|
46511
46594
|
},5e3);
|
|
46512
|
-
|
|
46513
|
-
setInterval(async()=>{
|
|
46514
|
-
/*const peerId = peerIdFromString('QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN')
|
|
46515
|
-
//const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
|
|
46516
|
-
|
|
46517
|
-
//console.info(peerInfo)
|
|
46518
|
-
for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
|
|
46519
|
-
console.info(event)
|
|
46520
|
-
}*/
|
|
46521
|
-
},5e3);
|
|
46595
|
+
|
|
46522
46596
|
|
|
46523
46597
|
/*setTimeout(async()=>{
|
|
46524
46598
|
try{
|
|
@@ -46539,6 +46613,14 @@
|
|
|
46539
46613
|
}
|
|
46540
46614
|
},60e3)*/
|
|
46541
46615
|
|
|
46616
|
+
/*setTimeout(async()=>{
|
|
46617
|
+
const key = uint8ArrayFromString(config.CONFIG_PREFIX)
|
|
46618
|
+
const value = uint8ArrayFromString(this.id)
|
|
46619
|
+
for await (const event of this.#libp2p.services.aminoDHT.put(key,value)){
|
|
46620
|
+
console.log('put',event)
|
|
46621
|
+
}
|
|
46622
|
+
},30e3)*/
|
|
46623
|
+
|
|
46542
46624
|
}
|
|
46543
46625
|
|
|
46544
46626
|
|
|
@@ -46564,6 +46646,62 @@
|
|
|
46564
46646
|
PRIVATE FUNCTION
|
|
46565
46647
|
*/
|
|
46566
46648
|
|
|
46649
|
+
async #registerProtocol(){
|
|
46650
|
+
const handler = ({ connection, stream, protocol }) => {
|
|
46651
|
+
// use stream or connection according to the needs
|
|
46652
|
+
};
|
|
46653
|
+
|
|
46654
|
+
await this.#libp2p.handle(CONFIG_PROTOCOL, handler, {
|
|
46655
|
+
maxInboundStreams: 5,
|
|
46656
|
+
maxOutboundStreams: 5
|
|
46657
|
+
});
|
|
46658
|
+
|
|
46659
|
+
await this.#libp2p.register(CONFIG_PROTOCOL, {
|
|
46660
|
+
onConnect: (peer, connection) => {
|
|
46661
|
+
// handle connect
|
|
46662
|
+
//console.log('handle connect',peer)
|
|
46663
|
+
},
|
|
46664
|
+
onDisconnect: (peer, connection) => {
|
|
46665
|
+
// handle disconnect
|
|
46666
|
+
//console.log('handle disconnect',peer)
|
|
46667
|
+
}
|
|
46668
|
+
});
|
|
46669
|
+
|
|
46670
|
+
}
|
|
46671
|
+
|
|
46672
|
+
#findHybridPeer(){
|
|
46673
|
+
setTimeout(async()=>{
|
|
46674
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
46675
|
+
if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
|
|
46676
|
+
//console.log('findPeer',target)
|
|
46677
|
+
const peerId = peerIdFromString(target);
|
|
46678
|
+
//const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
|
|
46679
|
+
|
|
46680
|
+
//console.info(peerInfo)
|
|
46681
|
+
for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
|
|
46682
|
+
//console.info('findPeer',event)
|
|
46683
|
+
if (event.name === 'FINAL_PEER'){
|
|
46684
|
+
//console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
|
|
46685
|
+
let mddrs = [];
|
|
46686
|
+
let addrs = [];
|
|
46687
|
+
const id = event.peer.id.toString();
|
|
46688
|
+
for(const mddr of event.peer.multiaddrs){
|
|
46689
|
+
const peeraddr = mddr.toString()+'/p2p/'+id;
|
|
46690
|
+
const peermddr = multiaddr(peeraddr);
|
|
46691
|
+
addrs.push(peeraddr);
|
|
46692
|
+
mddrs.push(peermddr);
|
|
46693
|
+
}
|
|
46694
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
46695
|
+
if(!this.#isConnected(id)){
|
|
46696
|
+
this.#dialMultiaddress(mddrs);
|
|
46697
|
+
}
|
|
46698
|
+
}
|
|
46699
|
+
}
|
|
46700
|
+
}
|
|
46701
|
+
}
|
|
46702
|
+
},60e3);
|
|
46703
|
+
}
|
|
46704
|
+
|
|
46567
46705
|
|
|
46568
46706
|
//check the last seen in web peer
|
|
46569
46707
|
#trackLastSeen(){
|
|
@@ -46625,7 +46763,7 @@
|
|
|
46625
46763
|
return
|
|
46626
46764
|
}
|
|
46627
46765
|
|
|
46628
|
-
if(this.#webPeersId.includes(id) || id
|
|
46766
|
+
if(this.#webPeersId.includes(id) || CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) || CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS.includes(id)){
|
|
46629
46767
|
this.#dialQueue.unshift(mddrs);
|
|
46630
46768
|
}
|
|
46631
46769
|
else {
|
|
@@ -46640,7 +46778,7 @@
|
|
|
46640
46778
|
|
|
46641
46779
|
if(!this.#isDialEnabled)return
|
|
46642
46780
|
|
|
46643
|
-
const mddrsToDial =
|
|
46781
|
+
const mddrsToDial = 5;
|
|
46644
46782
|
|
|
46645
46783
|
let queue = [];
|
|
46646
46784
|
for(const item of this.#libp2p.getDialQueue()){
|
|
@@ -46658,6 +46796,8 @@
|
|
|
46658
46796
|
|
|
46659
46797
|
if(this.#isConnected(id))continue
|
|
46660
46798
|
if(queue.includes(id)){continue;}
|
|
46799
|
+
|
|
46800
|
+
//console.log('dial',id)
|
|
46661
46801
|
|
|
46662
46802
|
//dial with webtransport
|
|
46663
46803
|
this.#dialWebtransport(mddrs);
|
|
@@ -46740,7 +46880,7 @@
|
|
|
46740
46880
|
},
|
|
46741
46881
|
members : [this.id],
|
|
46742
46882
|
onMembers : () => {},
|
|
46743
|
-
onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);},
|
|
46883
|
+
onMembersChange : f => {this.#rooms[room] = {...this.#rooms[room], onMembers: f};this.#rooms[room].onMembers(this.#rooms[room].members);this.#ping();},
|
|
46744
46884
|
};
|
|
46745
46885
|
}
|
|
46746
46886
|
|
|
@@ -46777,13 +46917,15 @@
|
|
|
46777
46917
|
#dialRandomBootstrap(){
|
|
46778
46918
|
setInterval(()=>{
|
|
46779
46919
|
//const keys = Array.from(this.#dialedKnownBootstrap.keys())
|
|
46780
|
-
const keys =
|
|
46920
|
+
const keys = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
46781
46921
|
const randomKey = Math.floor(Math.random() * keys.length);
|
|
46782
46922
|
let ids = [];
|
|
46783
46923
|
ids.push(keys[randomKey]);
|
|
46784
46924
|
|
|
46785
46925
|
//universal connectivity id for webpeer discovery and joinRoom version 1 to work
|
|
46786
|
-
|
|
46926
|
+
for(const id of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
|
|
46927
|
+
ids.push(id);
|
|
46928
|
+
}
|
|
46787
46929
|
|
|
46788
46930
|
for(const id of ids){
|
|
46789
46931
|
if(id == undefined)continue
|
|
@@ -46850,7 +46992,7 @@
|
|
|
46850
46992
|
if(besttime>bestlimit){
|
|
46851
46993
|
const addr = remote.toString();
|
|
46852
46994
|
const id = peer.toString();
|
|
46853
|
-
if(!this.#webPeersId.includes(id) && !
|
|
46995
|
+
if(!this.#webPeersId.includes(id) && !CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id) && !this.#dbstoreData.get(id) && !addr.includes('p2p-circuit') && addr.includes('webtransport')){
|
|
46854
46996
|
//await this.#dbstore.delete(new Key(id))
|
|
46855
46997
|
await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
|
|
46856
46998
|
this.#dbstoreData.set(id,addr);
|
|
@@ -46919,7 +47061,7 @@
|
|
|
46919
47061
|
}
|
|
46920
47062
|
}
|
|
46921
47063
|
|
|
46922
|
-
},
|
|
47064
|
+
},15*1000);
|
|
46923
47065
|
}
|
|
46924
47066
|
|
|
46925
47067
|
|
|
@@ -46942,23 +47084,28 @@
|
|
|
46942
47084
|
//dial to all known bootstrap peers and DNS
|
|
46943
47085
|
#dialKnownPeers(){
|
|
46944
47086
|
//this.#dialKnownBootstrap()
|
|
46945
|
-
|
|
46946
|
-
|
|
46947
|
-
|
|
46948
|
-
|
|
46949
|
-
|
|
46950
|
-
|
|
46951
|
-
|
|
46952
|
-
|
|
46953
|
-
|
|
46954
|
-
|
|
46955
|
-
|
|
46956
|
-
|
|
46957
|
-
|
|
46958
|
-
|
|
46959
|
-
|
|
46960
|
-
|
|
46961
|
-
|
|
47087
|
+
setTimeout(()=>{
|
|
47088
|
+
this.#dialSavedKnownID();
|
|
47089
|
+
this.#findHybridPeer();
|
|
47090
|
+
setTimeout(()=>{this.#dialUpdateSavedKnownID();},50000);
|
|
47091
|
+
setTimeout(()=>{
|
|
47092
|
+
const peers = this.#libp2p.getPeers().length;
|
|
47093
|
+
if(peers == 0){
|
|
47094
|
+
this.#dialKnownID();
|
|
47095
|
+
this.#findHybridPeer();
|
|
47096
|
+
setTimeout(()=>{
|
|
47097
|
+
const peers = this.#libp2p.getPeers().length;
|
|
47098
|
+
if(peers == 0){
|
|
47099
|
+
//currently not needed
|
|
47100
|
+
//this.#dialKnownDNS()
|
|
47101
|
+
setTimeout(()=>{
|
|
47102
|
+
this.#libp2p.getPeers().length;
|
|
47103
|
+
},15000);
|
|
47104
|
+
}
|
|
47105
|
+
},15000);
|
|
47106
|
+
}
|
|
47107
|
+
},15000);
|
|
47108
|
+
},5000);
|
|
46962
47109
|
}
|
|
46963
47110
|
|
|
46964
47111
|
|
|
@@ -46985,12 +47132,81 @@
|
|
|
46985
47132
|
}
|
|
46986
47133
|
}
|
|
46987
47134
|
|
|
47135
|
+
async #dialSavedKnownID(){
|
|
47136
|
+
let firsttime = true;
|
|
47137
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
47138
|
+
if(this.#dbstoreData.has(target)){
|
|
47139
|
+
firsttime = false;
|
|
47140
|
+
let mddrs = [];
|
|
47141
|
+
let addrs = [];
|
|
47142
|
+
const id = target;
|
|
47143
|
+
const peeraddr = this.#dbstoreData.get(target);
|
|
47144
|
+
const peermddr = multiaddr(peeraddr);
|
|
47145
|
+
addrs.push(peeraddr);
|
|
47146
|
+
mddrs.push(peermddr);
|
|
47147
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
47148
|
+
if(!this.#isConnected(id)){
|
|
47149
|
+
this.#dialMultiaddress(mddrs);
|
|
47150
|
+
}
|
|
47151
|
+
}
|
|
47152
|
+
}
|
|
47153
|
+
if(firsttime){
|
|
47154
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
47155
|
+
const api = CONFIG_DELEGATED_API;
|
|
47156
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
47157
|
+
const peer = await first$1(delegatedClient.getPeers(peerIdFromString(target)));
|
|
47158
|
+
const address = peer.Addrs;
|
|
47159
|
+
const id = peer.ID;
|
|
47160
|
+
let mddrs = [];
|
|
47161
|
+
let addrs = [];
|
|
47162
|
+
for(const addr of address){
|
|
47163
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
47164
|
+
const peermddr = multiaddr(peeraddr);
|
|
47165
|
+
addrs.push(peeraddr);
|
|
47166
|
+
mddrs.push(peermddr);
|
|
47167
|
+
}
|
|
47168
|
+
|
|
47169
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
47170
|
+
if(!this.#isConnected(id)){
|
|
47171
|
+
this.#dialMultiaddress(mddrs);
|
|
47172
|
+
}
|
|
47173
|
+
}
|
|
47174
|
+
}
|
|
47175
|
+
}
|
|
47176
|
+
|
|
47177
|
+
async #dialUpdateSavedKnownID(){
|
|
47178
|
+
for(const target of CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS){
|
|
47179
|
+
if(!this.#connections.has(target) && this.#isDialEnabled && this.#dbstoreData.has(target)){
|
|
47180
|
+
//console.log('#dialUpdateSavedKnownID()',target)
|
|
47181
|
+
const api = CONFIG_DELEGATED_API;
|
|
47182
|
+
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
47183
|
+
const peer = await first$1(delegatedClient.getPeers(peerIdFromString(target)));
|
|
47184
|
+
const address = peer.Addrs;
|
|
47185
|
+
const id = peer.ID;
|
|
47186
|
+
let mddrs = [];
|
|
47187
|
+
let addrs = [];
|
|
47188
|
+
for(const addr of address){
|
|
47189
|
+
const peeraddr = addr.toString()+'/p2p/'+id.toString();
|
|
47190
|
+
const peermddr = multiaddr(peeraddr);
|
|
47191
|
+
addrs.push(peeraddr);
|
|
47192
|
+
mddrs.push(peermddr);
|
|
47193
|
+
}
|
|
47194
|
+
|
|
47195
|
+
this.#dialedKnownBootstrap.set(id,addrs);
|
|
47196
|
+
if(!this.#isConnected(id)){
|
|
47197
|
+
this.#dialMultiaddress(mddrs);
|
|
47198
|
+
}
|
|
47199
|
+
}
|
|
47200
|
+
}
|
|
47201
|
+
}
|
|
47202
|
+
|
|
46988
47203
|
|
|
46989
47204
|
//dial based on known peers ID
|
|
46990
47205
|
async #dialKnownID(){
|
|
47206
|
+
//console.log('#dialKnownID()')
|
|
46991
47207
|
const api = CONFIG_DELEGATED_API;
|
|
46992
47208
|
const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
|
|
46993
|
-
const BOOTSTRAP_PEER_IDS =
|
|
47209
|
+
const BOOTSTRAP_PEER_IDS = CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS;
|
|
46994
47210
|
const peers = await Promise.all(
|
|
46995
47211
|
BOOTSTRAP_PEER_IDS.map((peerId) => first$1(delegatedClient.getPeers(peerIdFromString(peerId)))),
|
|
46996
47212
|
);
|
|
@@ -47107,8 +47323,6 @@
|
|
|
47107
47323
|
await this.#libp2p.dial(addr);
|
|
47108
47324
|
return // if we succeed dialing the peer, no need to try another address
|
|
47109
47325
|
} catch (error) {
|
|
47110
|
-
//console.log(`failed to dial webtransport multiaddr: %o`, addr.toString())
|
|
47111
|
-
console.debug(error);
|
|
47112
47326
|
}
|
|
47113
47327
|
}
|
|
47114
47328
|
}
|
|
@@ -47129,8 +47343,6 @@
|
|
|
47129
47343
|
await this.#libp2p.dial(addr);
|
|
47130
47344
|
return // if we succeed dialing the peer, no need to try another address
|
|
47131
47345
|
} catch (error) {
|
|
47132
|
-
//console.log(`failed to dial websocket multiaddr: %o`, addr)
|
|
47133
|
-
console.debug(error);
|
|
47134
47346
|
}
|
|
47135
47347
|
}
|
|
47136
47348
|
}
|
|
@@ -47140,7 +47352,7 @@
|
|
|
47140
47352
|
static async createWebpeer(){
|
|
47141
47353
|
|
|
47142
47354
|
// all libp2p debug logs
|
|
47143
|
-
localStorage.setItem('debug', 'libp2p:*')
|
|
47355
|
+
//localStorage.setItem('debug', 'libp2p:*')
|
|
47144
47356
|
|
|
47145
47357
|
const dbstore = new IDBDatastore(CONFIG_DBSTORE_PATH);
|
|
47146
47358
|
await dbstore.open();
|
package/package.json
CHANGED
package/src/config.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const prefix = 'webpeerjs'
|
|
2
2
|
export const CONFIG_PREFIX = prefix
|
|
3
|
+
export const CONFIG_PROTOCOL = '/'+prefix+'/0.0.1'
|
|
3
4
|
export const CONFIG_BLOCKSTORE_PATH = prefix+'-blockstore'
|
|
4
5
|
export const CONFIG_DATASTORE_PATH = prefix+'-datastore'
|
|
5
6
|
export const CONFIG_DBSTORE_PATH = prefix+'-dbstore'
|
|
@@ -8,7 +9,8 @@ export const CONFIG_MIN_CONNECTIONS = 0
|
|
|
8
9
|
export const CONFIG_DISCOVER_RELAYS = 1
|
|
9
10
|
export const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-browser-peer-discovery'
|
|
10
11
|
export const CONFIG_PEER_DISCOVERY_GLOBAL = '_peer-discovery._p2p._pubsub'
|
|
11
|
-
export const
|
|
12
|
+
export const CONFIG_PEER_DISCOVERY_WEBPEERJS= prefix+'-peer-discovery'
|
|
13
|
+
export const CONFIG_PUBSUB_PEER_DISCOVERY = [CONFIG_PEER_DISCOVERY_GLOBAL, CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY, CONFIG_PEER_DISCOVERY_WEBPEERJS]
|
|
12
14
|
export const CONFIG_PUPSUB_TOPIC = prefix+'-room'
|
|
13
15
|
export const CONFIG_DELEGATED_API = 'https://delegated-ipfs.dev'
|
|
14
16
|
export const CONFIG_DNS_RESOLVER = 'https://dns.google/resolve'
|
|
@@ -18,19 +20,22 @@ export const CONFIG_JOIN_ROOM_VERSION = 1
|
|
|
18
20
|
export const CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS = [
|
|
19
21
|
]
|
|
20
22
|
|
|
21
|
-
export const
|
|
22
|
-
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr',
|
|
23
|
-
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
24
|
-
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
25
|
-
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
23
|
+
export const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = [
|
|
26
24
|
'QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
|
|
27
|
-
'QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',
|
|
28
25
|
'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
|
|
29
26
|
'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
|
|
30
27
|
'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
|
|
28
|
+
'12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
|
|
29
|
+
'12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
|
|
30
|
+
'12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
|
|
31
31
|
'12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5',
|
|
32
32
|
'12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
|
|
33
33
|
'12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
|
|
34
34
|
'12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
|
|
35
|
-
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
|
|
35
|
+
'12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H',
|
|
36
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
36
37
|
]
|
|
38
|
+
|
|
39
|
+
export const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
|
|
40
|
+
'12D3KooWFhXabKDwALpzqMbto94sB7rvmZ6M28hs9Y9xSopDKwQr'
|
|
41
|
+
]
|