webpeerjs 0.0.9 → 0.1.0

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.
@@ -11,6 +11,9 @@ import { createDelegatedRoutingV1HttpApiClient } from '@helia/delegated-routing-
11
11
  import { createLibp2p } from 'libp2p';
12
12
  import { IDBDatastore } from 'datastore-idb';
13
13
  import { webTransport } from '@libp2p/webtransport';
14
+ import { webSockets } from '@libp2p/websockets';
15
+ import { webRTC } from '@libp2p/webrtc';
16
+ import { dcutr } from '@libp2p/dcutr';
14
17
  import { noise } from '@chainsafe/libp2p-noise';
15
18
  import { yamux } from '@chainsafe/libp2p-yamux';
16
19
  import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery';
@@ -32,21 +35,17 @@ const CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY = 'universal-connectivity-bro
32
35
  const CONFIG_PEER_DISCOVERY_GLOBAL = '_peer-discovery._p2p._pubsub';
33
36
  const CONFIG_PEER_DISCOVERY_WEBPEERJS= prefix$1+'-peer-discovery';
34
37
  const CONFIG_PUBSUB_PEER_DISCOVERY = [CONFIG_PEER_DISCOVERY_GLOBAL, CONFIG_PEER_DISCOVERY_UNIVERSAL_CONNECTIVITY, CONFIG_PEER_DISCOVERY_WEBPEERJS];
38
+ const CONFIG_PUPSUB_PEER_DATA = ['_'+prefix$1+'-peer-data_'];
35
39
  const CONFIG_DELEGATED_API = 'https://delegated-ipfs.dev';
40
+ const CONFIG_DNS_RESOLVER = 'https://dns.google/resolve';
41
+ const CONFIG_KNOWN_BOOTSTRAP_DNS = '_dnsaddr.bootstrap.libp2p.io';
42
+ const CONFIG_TIMEOUT_DIAL_KNOWN_PEERS = 15000;
36
43
 
37
44
  const CONFIG_KNOWN_BOOTSTRAP_PUBLIC_IDS = [
38
45
  'QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
39
46
  'QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
40
47
  'QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
41
- 'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ',
42
- '12D3KooWPEDBmt7vm6FNNYuqaA4n2qMUZ6wPK5NcRc8t6KpqgRkV',
43
- '12D3KooWSHbugDEQeWm2LjtRRMpNgLu6oZ8zkX8XcTwYMAewVekP',
44
- '12D3KooWASoxFpwwy8JDdu4Tm57mhESsnbFPogam9VVmhR95FGXr',
45
- '12D3KooWHh98YpAkJsn3ULjMjK1n9QVkXmi8Sb3gTDMatHxCmDP5',
46
- '12D3KooWS79EhkPU7ESUwgG4vyHHzW9FDNZLoWVth9b5N5NSrvaj',
47
- '12D3KooWBbkCD5MpJhMc1mfPAVGEyVkQnyxPKGS7AHwDqQM2JUsk',
48
- '12D3KooWKLdecs31Zmo2pLBjR9HY2vWo3VwM4eBm21Czeucbe6FL',
49
- '12D3KooWBdF3g6vSJFRPoZQo7BNnkNzaWb59gpyaVzsgtNTVeu8H'
48
+ 'QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ'
50
49
  ];
51
50
 
52
51
  const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
@@ -56,13 +55,46 @@ const CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS = [
56
55
  const CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS = CONFIG_KNOWN_BOOTSTRAP_PUBLIC_IDS.concat(CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS);
57
56
 
58
57
  const CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS = [
58
+ {
59
+ "Peers": [
60
+ {
61
+ "Addrs": [
62
+ "/dns6/sv15.bootstrap.libp2p.io/tcp/443/wss",
63
+ "/dns4/sv15.bootstrap.libp2p.io/tcp/443/wss"
64
+ ],
65
+ "ID": "QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
66
+ "Schema": "peer"
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "Peers": [
72
+ {
73
+ "Addrs": [
74
+ "/dns4/am6.bootstrap.libp2p.io/tcp/443/wss",
75
+ "/dns6/am6.bootstrap.libp2p.io/tcp/443/wss"
76
+ ],
77
+ "ID": "QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
78
+ "Schema": "peer"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "Peers": [
84
+ {
85
+ "Addrs": [
86
+ "/dns6/sg1.bootstrap.libp2p.io/tcp/443/wss",
87
+ "/dns4/sg1.bootstrap.libp2p.io/tcp/443/wss"
88
+ ],
89
+ "ID": "QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
90
+ "Schema": "peer"
91
+ }
92
+ ]
93
+ }
59
94
  ];
60
95
 
61
- /* eslint-disable import/export */
62
- /* eslint-disable complexity */
63
- /* eslint-disable @typescript-eslint/no-namespace */
64
- /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
65
- /* eslint-disable @typescript-eslint/no-empty-interface */
96
+ //this code comes from https://github.com/libp2p/js-libp2p-pubsub-peer-discovery/blob/9d0da565f70e9b2403251c9d11dfc0b9b52babfa/src/peer.ts
97
+
66
98
  var Peer;
67
99
  (function (Peer) {
68
100
  let _codec;
@@ -387,6 +419,10 @@ class webpeerjs{
387
419
 
388
420
  this.id = this.#libp2p.peerId.toString();
389
421
 
422
+ for(const topic of CONFIG_PUPSUB_PEER_DATA){
423
+ this.#libp2p.services.pubsub.subscribe(topic);
424
+ }
425
+
390
426
 
391
427
  //listen to peer connect event
392
428
  this.#libp2p.addEventListener("peer:connect",async (evt) => {
@@ -401,7 +437,7 @@ class webpeerjs{
401
437
  const addr = connect.addr;
402
438
 
403
439
  if(CONFIG_KNOWN_BOOTSTRAP_PEERS_IDS.includes(id)){
404
- if(!this.#connections.has(id)&&addr.includes('webtransport')){
440
+ if((!this.#connections.has(id) || (this.#connections.get(id).includes('/wss/')))&&addr.includes('webtransport')){
405
441
  await this.#dbstore.put(new Key(id), new TextEncoder().encode(addr));
406
442
  }
407
443
  }
@@ -453,9 +489,9 @@ class webpeerjs{
453
489
  return
454
490
  }
455
491
  {
456
- const topic = event.detail.topic;
492
+ event.detail.topic;
457
493
  const senderPeerId = event.detail.from.toString();
458
- if(CONFIG_PUBSUB_PEER_DISCOVERY.includes(topic)){
494
+
459
495
  try{
460
496
 
461
497
  //if it is webpeer
@@ -491,15 +527,17 @@ class webpeerjs{
491
527
  const addrs = this.#discoveredPeers.get(senderPeerId);
492
528
  let mddrs = [];
493
529
  for(const addr of addrs){
530
+ if(!addr.includes('webrtc'))continue
494
531
  const mddr = multiaddr(addr);
495
532
  mddrs.push(mddr);
496
533
  }
497
534
  this.#dialMultiaddress(mddrs);
498
535
  }
499
- else {
536
+ else if(this.#connectedPeers.has(senderPeerId)){
500
537
  const addrs = this.#connectedPeers.get(senderPeerId).addrs;
501
538
  let mddrs = [];
502
539
  for(const addr of addrs){
540
+ if(!addr.includes('webrtc'))continue
503
541
  const mddr = multiaddr(addr);
504
542
  mddrs.push(mddr);
505
543
  }
@@ -548,8 +586,10 @@ class webpeerjs{
548
586
 
549
587
  //update room members
550
588
  if(!this.#rooms[room].members.includes(id)){
551
- this.#rooms[room].members.push(id);
552
- this.#rooms[room].onMembers(this.#rooms[room].members);
589
+ if(this.#connectedPeers.has(id)){
590
+ this.#rooms[room].members.push(id);
591
+ this.#rooms[room].onMembers(this.#rooms[room].members);
592
+ }
553
593
  }
554
594
 
555
595
  //inbound message
@@ -568,8 +608,10 @@ class webpeerjs{
568
608
  for(const room of Object.keys(this.#rooms)){
569
609
  //update room members
570
610
  if(!this.#rooms[room].members.includes(id)){
571
- this.#rooms[room].members.push(id);
572
- this.#rooms[room].onMembers(this.#rooms[room].members);
611
+ if(this.#connectedPeers.has(id)){
612
+ this.#rooms[room].members.push(id);
613
+ this.#rooms[room].onMembers(this.#rooms[room].members);
614
+ }
573
615
  }
574
616
  }
575
617
  }
@@ -578,7 +620,7 @@ class webpeerjs{
578
620
 
579
621
  //repply announce with ping
580
622
  if(signal == 'announce'){
581
- setTimeout(()=>{this.#ping('yes');},1000);
623
+ setTimeout(()=>{this.#ping('');},1000);
582
624
  //console.log('rooms',rooms)
583
625
  }
584
626
 
@@ -591,12 +633,7 @@ class webpeerjs{
591
633
 
592
634
  }catch(err){
593
635
  }
594
- }else {
595
- const json = JSON.parse(topic);
596
- const room = json.room;
597
- const message = new TextDecoder().decode(event.detail.data);
598
- this.#rooms[room].onMessage(message);
599
- }
636
+
600
637
  }
601
638
 
602
639
  });
@@ -637,6 +674,7 @@ class webpeerjs{
637
674
  if(!this.#connections.has(id)){
638
675
  let mddrs = [];
639
676
  for(const addr of addrs){
677
+ if(!addr.includes('webrtc'))continue
640
678
  const mddr = multiaddr(addr);
641
679
  mddrs.push(mddr);
642
680
  }
@@ -692,6 +730,7 @@ class webpeerjs{
692
730
  //if this disconnected peer is known bootstrap redial it
693
731
  else if(this.#dialedKnownBootstrap.has(id)){
694
732
  const addr = this.#connections.get(id);
733
+ if(addr.includes('/wss/'))return
695
734
  let mddrs = [];
696
735
  const addrs = multiaddr(addr);
697
736
  mddrs.push(addrs);
@@ -723,7 +762,7 @@ class webpeerjs{
723
762
  const mddrs = [];
724
763
  peer.addresses.forEach((addr)=>{
725
764
  const maddr = addr.multiaddr.toString()+'/p2p/'+id;
726
- if(maddr.includes('webtransport') && maddr.includes('certhash')){
765
+ if(maddr.includes('webtransport') && maddr.includes('certhash') && maddr.includes('webrtc')){
727
766
  mddrs.push(maddr);
728
767
  }
729
768
  });
@@ -732,8 +771,29 @@ class webpeerjs{
732
771
  this.#ping();
733
772
  });
734
773
 
735
- this.#libp2p.addEventListener('peer:identify', (evt) => {
774
+ this.#libp2p.addEventListener('peer:identify', async (evt) => {
736
775
  //console.log('peer:identify '+evt.detail.peerId.toString(),evt.detail)
776
+
777
+ const id = evt.detail.peerId.toString();
778
+
779
+ if(CONFIG_KNOWN_BOOTSTRAP_PUBLIC_IDS.includes(id)){
780
+ const remoteAddr = evt.detail.connection.remoteAddr.toString();
781
+ if(remoteAddr.includes('/wss/')){
782
+ let addrs = [];
783
+ let mddrs = [];
784
+ for(const peer of evt.detail.listenAddrs){
785
+ if(!peer.toString().includes('webtransport'))continue
786
+ const addr = peer.toString()+'/p2p/'+id;
787
+ const mddr = multiaddr(addr);
788
+ addrs.push(addr);
789
+ mddrs.push(mddr);
790
+ }
791
+ this.#dialedKnownBootstrap.set(id,addrs);
792
+ await this.#libp2p.hangUp(peerIdFromString(id));
793
+ this.#dialMultiaddress(mddrs);
794
+ }
795
+ }
796
+
737
797
  if(evt.detail.protocols.includes(CONFIG_PROTOCOL)){
738
798
  //console.log('peer:identify '+evt.detail.peerId.toString(),evt)
739
799
 
@@ -864,7 +924,7 @@ class webpeerjs{
864
924
  //join room version 1 user pupsub via pupsub peer discovery
865
925
  {
866
926
 
867
- const topics = CONFIG_PUBSUB_PEER_DISCOVERY;
927
+ const topics = CONFIG_PUPSUB_PEER_DATA;
868
928
 
869
929
  this.#rooms[room] = {
870
930
  onMessage : () => {},
@@ -918,6 +978,7 @@ class webpeerjs{
918
978
  else {
919
979
  this.status = 'unconnected';
920
980
  }
981
+ this.#ping();
921
982
  }
922
983
 
923
984
  async #registerProtocol(){
@@ -1010,7 +1071,7 @@ class webpeerjs{
1010
1071
  await this.#libp2p.handle(CONFIG_PROTOCOL, handler, {
1011
1072
  maxInboundStreams: 50,
1012
1073
  maxOutboundStreams: 50,
1013
- runOnTransientConnection:true
1074
+ runOnTransientConnection:false
1014
1075
  });
1015
1076
 
1016
1077
  await this.#libp2p.register(CONFIG_PROTOCOL, {
@@ -1057,7 +1118,7 @@ class webpeerjs{
1057
1118
 
1058
1119
  try{
1059
1120
 
1060
- const stream = await this.#libp2p.dialProtocol(mddr, CONFIG_PROTOCOL,{runOnTransientConnection:true});
1121
+ const stream = await this.#libp2p.dialProtocol(mddr, CONFIG_PROTOCOL,{runOnTransientConnection:false});
1061
1122
 
1062
1123
  const output = await pipe(
1063
1124
  message,
@@ -1074,7 +1135,7 @@ class webpeerjs{
1074
1135
  return string
1075
1136
  }
1076
1137
  );
1077
-
1138
+ //console.log(output)
1078
1139
  const json = JSON.parse(output);
1079
1140
  if(json.protocol == CONFIG_PROTOCOL){
1080
1141
  const address = [addr];
@@ -1116,37 +1177,39 @@ class webpeerjs{
1116
1177
  }
1117
1178
  }
1118
1179
 
1119
- #findHybridPeer(){
1120
- setTimeout(async()=>{
1121
- for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
1122
- if(!this.#isConnected(target) && !this.#connections.has(target) && this.#isDialEnabled ){
1123
- //console.log('findPeer',target)
1124
- const peerId = peerIdFromString(target);
1125
- //const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
1126
-
1127
- //console.info(peerInfo)
1128
- for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
1129
- //console.info('findPeer',event)
1130
- if (event.name === 'FINAL_PEER'){
1131
- //console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
1132
- let mddrs = [];
1133
- let addrs = [];
1134
- const id = event.peer.id.toString();
1135
- for(const mddr of event.peer.multiaddrs){
1136
- const peeraddr = mddr.toString()+'/p2p/'+id;
1137
- const peermddr = multiaddr(peeraddr);
1138
- addrs.push(peeraddr);
1139
- mddrs.push(peermddr);
1140
- }
1141
- this.#dialedKnownBootstrap.set(id,addrs);
1142
- if(!this.#isConnected(id)){
1143
- this.#dialMultiaddress(mddrs);
1144
- }
1180
+ async #findHybridPeer(){
1181
+
1182
+ if(!navigator.onLine)return
1183
+ if(!this.#isDialEnabled)return
1184
+
1185
+ for(const target of CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
1186
+ if(!this.#isConnected(target) && !this.#connections.has(target)){
1187
+ //console.log('findPeer',target)
1188
+ const peerId = peerIdFromString(target);
1189
+ //const peerInfo = await this.#libp2p.services.aminoDHT.findPeer(peerId)
1190
+
1191
+ //console.info(peerInfo)
1192
+ for await (const event of this.#libp2p.services.aminoDHT.findPeer(peerId)){
1193
+ //console.info('findPeer',event)
1194
+ if (event.name === 'FINAL_PEER'){
1195
+ //console.log(event.peer.id.toString(),event.peer.multiaddrs.toString())
1196
+ let mddrs = [];
1197
+ let addrs = [];
1198
+ const id = event.peer.id.toString();
1199
+ for(const mddr of event.peer.multiaddrs){
1200
+ const peeraddr = mddr.toString()+'/p2p/'+id;
1201
+ const peermddr = multiaddr(peeraddr);
1202
+ addrs.push(peeraddr);
1203
+ mddrs.push(peermddr);
1204
+ }
1205
+ this.#dialedKnownBootstrap.set(id,addrs);
1206
+ if(!this.#isConnected(id)){
1207
+ this.#dialMultiaddress(mddrs);
1145
1208
  }
1146
1209
  }
1147
1210
  }
1148
1211
  }
1149
- },60e3);
1212
+ }
1150
1213
  }
1151
1214
 
1152
1215
 
@@ -1276,7 +1339,7 @@ class webpeerjs{
1276
1339
 
1277
1340
  //announce and ping via pupsub peer discovery
1278
1341
  async #announce(){
1279
- const topics = CONFIG_PUBSUB_PEER_DISCOVERY;
1342
+ const topics = CONFIG_PUPSUB_PEER_DATA;
1280
1343
  const data = JSON.stringify({prefix:CONFIG_PREFIX,signal:'announce',id:this.#libp2p.peerId.toString(),address:this.address,rooms:this.#rooms});
1281
1344
  const peer = {
1282
1345
  publicKey: this.#libp2p.peerId.publicKey,
@@ -1288,7 +1351,7 @@ class webpeerjs{
1288
1351
  }
1289
1352
  }
1290
1353
  async #ping(){
1291
- const topics = CONFIG_PUBSUB_PEER_DISCOVERY;
1354
+ const topics = CONFIG_PUPSUB_PEER_DATA;
1292
1355
  const data = JSON.stringify({prefix:CONFIG_PREFIX,signal:'ping',id:this.#libp2p.peerId.toString(),address:this.address,rooms:this.#rooms});
1293
1356
  const peer = {
1294
1357
  publicKey: this.#libp2p.peerId.publicKey,
@@ -1490,65 +1553,47 @@ class webpeerjs{
1490
1553
  if(peers == 0){
1491
1554
  this.#dialKnownPeers();
1492
1555
  }
1493
- },60*1000);
1556
+ },120*1000);
1494
1557
  }
1495
1558
 
1496
1559
 
1497
1560
  //dial to all known bootstrap peers and DNS
1498
1561
  #dialKnownPeers(){
1499
- //this.#dialKnownBootstrap()
1500
1562
  setTimeout(()=>{
1501
1563
  this.#dialSavedKnownID();
1502
- this.#findHybridPeer();
1503
1564
  setTimeout(()=>{this.#dialUpdateSavedKnownID();},50000);
1565
+ setTimeout(()=>{this.#findHybridPeer();},60000);
1504
1566
  setTimeout(()=>{
1505
1567
  const peers = this.#libp2p.getPeers().length;
1506
1568
  if(peers == 0){
1507
1569
  this.#dialKnownID();
1508
- this.#findHybridPeer();
1570
+ setTimeout(()=>{this.#findHybridPeer();},60000);
1509
1571
  setTimeout(()=>{
1510
1572
  const peers = this.#libp2p.getPeers().length;
1511
1573
  if(peers == 0){
1512
- //currently not needed
1513
- //this.#dialKnownDNS()
1574
+ this.#dialKnownBootstrap();
1575
+ setTimeout(()=>{this.#findHybridPeer();},15000);
1514
1576
  setTimeout(()=>{
1515
- this.#libp2p.getPeers().length;
1516
- },15000);
1577
+ const peers = this.#libp2p.getPeers().length;
1578
+ if(peers == 0){
1579
+ this.#dialKnownDNS();
1580
+ setTimeout(()=>{this.#findHybridPeer();},15000);
1581
+ setTimeout(()=>{
1582
+ const peers = this.#libp2p.getPeers().length;
1583
+ if(peers == 0){
1584
+ this.#dialKnownDNSonly();
1585
+ setTimeout(()=>{this.#findHybridPeer();},15000);
1586
+ }
1587
+ },CONFIG_TIMEOUT_DIAL_KNOWN_PEERS);
1588
+ }
1589
+ },CONFIG_TIMEOUT_DIAL_KNOWN_PEERS);
1517
1590
  }
1518
- },15000);
1591
+ },CONFIG_TIMEOUT_DIAL_KNOWN_PEERS);
1519
1592
  }
1520
- },15000);
1593
+ },CONFIG_TIMEOUT_DIAL_KNOWN_PEERS);
1521
1594
  },5000);
1522
1595
  }
1523
1596
 
1524
-
1525
- //dial based on known bootsrap peers address
1526
- #dialKnownBootstrap(){
1527
-
1528
- if(!navigator.onLine)return
1529
- if(!this.#isDialEnabled)return
1530
-
1531
- const bootstrap = CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS;
1532
- for(const peer of bootstrap){
1533
- const address = peer.Peers[0].Addrs;
1534
- const id = peer.Peers[0].ID;
1535
- let mddrs = [];
1536
- let addrs = [];
1537
- for(const addr of address){
1538
- const peeraddr = addr+'/p2p/'+id;
1539
- const peermddr = multiaddr(peeraddr);
1540
- addrs.push(peeraddr);
1541
- mddrs.push(peermddr);
1542
- }
1543
-
1544
- this.#dialedKnownBootstrap.set(id,addrs);
1545
- if(!this.#isConnected(id)){
1546
- this.#dialMultiaddress(mddrs);
1547
- }
1548
-
1549
- }
1550
- }
1551
-
1552
1597
  async #dialSavedKnownID(){
1553
1598
 
1554
1599
  if(!navigator.onLine)return
@@ -1669,118 +1714,149 @@ class webpeerjs{
1669
1714
  }
1670
1715
  }
1671
1716
  }
1672
-
1717
+
1718
+
1719
+ //dial based on known bootsrap peers address using Websocket expected
1720
+ #dialKnownBootstrap(){
1721
+
1722
+ if(!navigator.onLine)return
1723
+ if(!this.#isDialEnabled)return
1724
+
1725
+ const bootstrap = CONFIG_KNOWN_BOOTSTRAP_PEERS_ADDRS;
1726
+ for(const peer of bootstrap){
1727
+ const address = peer.Peers[0].Addrs;
1728
+ const id = peer.Peers[0].ID;
1729
+ let mddrs = [];
1730
+ let addrs = [];
1731
+ for(const addr of address){
1732
+ if(!addr.includes('wss'))continue
1733
+ const peeraddr = addr+'/p2p/'+id;
1734
+ const peermddr = multiaddr(peeraddr);
1735
+ addrs.push(peeraddr);
1736
+ mddrs.push(peermddr);
1737
+ }
1738
+
1739
+ this.#dialedKnownBootstrap.set(id,addrs);
1740
+ this.#isDialWebsocket = true;
1741
+ if(!this.#isConnected(id)){
1742
+ this.#dialMultiaddress(mddrs);
1743
+ }
1744
+
1745
+ }
1746
+ }
1673
1747
 
1674
1748
  //dial based on known bootstrap DNS
1675
- /*async #dialKnownDNS(){
1676
- const dnsresolver = config.CONFIG_DNS_RESOLVER
1677
- const bootstrapdns = config.CONFIG_KNOWN_BOOTSTRAP_DNS
1678
- const response = await fetch(dnsresolver+'?name='+bootstrapdns+'&type=txt')
1679
- const json = await response.json()
1680
- const dns = json.Answer
1681
- const BOOTSTRAP_PEER_IDS = []
1749
+ async #dialKnownDNS(){
1750
+
1751
+ if(!navigator.onLine)return
1752
+ if(!this.#isDialEnabled)return
1753
+
1754
+ const dnsresolver = CONFIG_DNS_RESOLVER;
1755
+ const bootstrapdns = CONFIG_KNOWN_BOOTSTRAP_DNS;
1756
+ const response = await fetch(dnsresolver+'?name='+bootstrapdns+'&type=txt');
1757
+ const json = await response.json();
1758
+ const dns = json.Answer;
1759
+ const BOOTSTRAP_PEER_IDS = [];
1682
1760
  for(const dnsaddr of dns){
1683
- const id = dnsaddr.data.split('/').pop()
1684
- BOOTSTRAP_PEER_IDS.push(id)
1761
+ const id = dnsaddr.data.split('/').pop();
1762
+ BOOTSTRAP_PEER_IDS.push(id);
1685
1763
  }
1686
- const api = config.CONFIG_DELEGATED_API
1687
- const delegatedClient = createDelegatedRoutingV1HttpApiClient(api)
1764
+ const api = CONFIG_DELEGATED_API;
1765
+ const delegatedClient = createDelegatedRoutingV1HttpApiClient(api);
1688
1766
  const peers = await Promise.all(
1689
1767
  BOOTSTRAP_PEER_IDS.map((peerId) => first(delegatedClient.getPeers(peerIdFromString(peerId)))),
1690
- )
1768
+ );
1691
1769
  for(const peer of peers){
1692
- const address = peer.Addrs
1693
- const id = peer.ID
1694
- let mddrs = []
1695
- let addrs = []
1770
+ const address = peer.Addrs;
1771
+ const id = peer.ID;
1772
+ let mddrs = [];
1773
+ let addrs = [];
1696
1774
  for(const addr of address){
1697
- const peeraddr = addr.toString()+'/p2p/'+id.toString()
1698
- const peermddr = multiaddr(peeraddr)
1699
- addrs.push(peeraddr)
1700
- mddrs.push(peermddr)
1775
+ const peeraddr = addr.toString()+'/p2p/'+id.toString();
1776
+ const peermddr = multiaddr(peeraddr);
1777
+ addrs.push(peeraddr);
1778
+ mddrs.push(peermddr);
1701
1779
  }
1702
1780
 
1703
- this.#dialedKnownBootstrap.set(id,addrs)
1781
+ this.#dialedKnownBootstrap.set(id,addrs);
1782
+ this.#isDialWebsocket = true;
1704
1783
  if(!this.#isConnected(id)){
1705
- this.#dialMultiaddress(mddrs)
1784
+ this.#dialMultiaddress(mddrs);
1706
1785
  }
1707
1786
  }
1708
1787
 
1709
- }*/
1788
+ }
1710
1789
 
1711
1790
 
1712
1791
  //dial based on known bootstrap DNS using DNS resolver only
1713
- /*async #dialKnownDNSonly(){
1714
- const dnsresolver = config.CONFIG_DNS_RESOLVER
1715
- const bootstrapdns = config.CONFIG_KNOWN_BOOTSTRAP_DNS
1716
- const response = await fetch(dnsresolver+'?name='+bootstrapdns+'&type=txt')
1717
- const json = await response.json()
1718
- const dns = json.Answer
1792
+ async #dialKnownDNSonly(){
1793
+
1794
+ if(!navigator.onLine)return
1795
+ if(!this.#isDialEnabled)return
1796
+
1797
+ const dnsresolver = CONFIG_DNS_RESOLVER;
1798
+ const bootstrapdns = CONFIG_KNOWN_BOOTSTRAP_DNS;
1799
+ const response = await fetch(dnsresolver+'?name='+bootstrapdns+'&type=txt');
1800
+ const json = await response.json();
1801
+ const dns = json.Answer;
1719
1802
 
1720
1803
  for(const dnsitem of dns){
1721
- const arr = dnsitem.data.split('/')
1722
- const id = arr.pop()
1723
- const dnsaddr = '_dnsaddr.'+arr[2]
1724
- this.#dialDNSWebsocketWebtransport(id,dnsaddr)
1804
+ const arr = dnsitem.data.split('/');
1805
+ const id = arr.pop();
1806
+ const dnsaddr = '_dnsaddr.'+arr[2];
1807
+ this.#dialDNSWebsocketWebtransport(id,dnsaddr);
1725
1808
  }
1726
- }*/
1809
+ }
1727
1810
 
1728
1811
 
1729
1812
  //dial DNS with webtransport and websocket
1730
- /*async #dialDNSWebsocketWebtransport(id,dnsaddr){
1731
- const dnsresolver = config.CONFIG_DNS_RESOLVER
1732
- const response = await fetch(dnsresolver+'?name='+dnsaddr+'&type=txt')
1733
- const json = await response.json()
1734
- const dns = json.Answer
1735
- let mddrs = []
1736
- let addrs = []
1813
+ async #dialDNSWebsocketWebtransport(id,dnsaddr){
1814
+ const dnsresolver = CONFIG_DNS_RESOLVER;
1815
+ const response = await fetch(dnsresolver+'?name='+dnsaddr+'&type=txt');
1816
+ const json = await response.json();
1817
+ const dns = json.Answer;
1818
+ let mddrs = [];
1819
+ let addrs = [];
1737
1820
  for(const dnsitem of dns){
1738
- const arr = dnsitem.data.split('=')
1739
- const dnsaddr = arr[1]
1740
- const maddr = multiaddr(dnsaddr)
1741
- mddrs.push(maddr)
1742
- addrs.push(dnsaddr)
1821
+ const arr = dnsitem.data.split('=');
1822
+ const dnsaddr = arr[1];
1823
+ const maddr = multiaddr(dnsaddr);
1824
+ mddrs.push(maddr);
1825
+ addrs.push(dnsaddr);
1743
1826
  }
1744
1827
 
1745
1828
 
1746
- this.#isDialWebsocket = true
1747
- this.#dialedKnownBootstrap.set(id,addrs)
1829
+ this.#isDialWebsocket = true;
1830
+ this.#dialedKnownBootstrap.set(id,addrs);
1748
1831
 
1749
- this.#dialedKnownBootstrap.set(id,addrs)
1832
+ this.#dialedKnownBootstrap.set(id,addrs);
1750
1833
  if(!this.#isConnected(id)){
1751
- this.#dialMultiaddress(mddrs)
1752
- this.#dialWebsocket(mddrs)
1834
+ this.#dialMultiaddress(mddrs);
1835
+ this.#dialWebsocket(mddrs);
1753
1836
  }
1754
- }*/
1837
+ }
1755
1838
 
1756
1839
 
1757
1840
  //dial only webtransport multiaddrs
1758
1841
  async #dialWebtransport(multiaddrs){
1759
1842
  const webTransportMadrs = multiaddrs.filter((maddr) => maddr.protoNames().includes('webtransport')&&maddr.protoNames().includes('certhash'));
1760
- for (const addr of webTransportMadrs) {
1843
+ for (const mddr of webTransportMadrs) {
1761
1844
  try {
1762
- //console.log(`attempting to dial webtransport multiaddr: %o`, addr.toString())
1763
- await this.#libp2p.dial(addr);
1845
+ //console.log(`attempting to dial webtransport multiaddr: %o`, mddr.toString())
1846
+ await this.#libp2p.dial(mddr);
1764
1847
  return // if we succeed dialing the peer, no need to try another address
1765
1848
  } catch (error) {
1766
1849
  }
1767
1850
  }
1768
1851
  }
1769
-
1770
- //dial only webtransport multiaddrs
1771
- /*#dialWebtransport1(multiaddrs){
1772
- const webTransportMadrs = multiaddrs.filter((maddr) => maddr.protoNames().includes('webtransport')&&maddr.protoNames().includes('certhash'))
1773
- if(webTransportMadrs.length == 0)return
1774
- this.#libp2p.dial(webTransportMadrs).then((data)=>{console.warn(data)},(data)=>{console.warn(data)})
1775
- }*/
1776
1852
 
1777
1853
  //dial only websocket multiaddrs
1778
1854
  async #dialWebsocket(multiaddrs){
1779
1855
  const webSocketMadrs = multiaddrs.filter((maddr) => maddr.protoNames().includes('wss'));
1780
- for (const addr of webSocketMadrs) {
1856
+ for (const mddr of webSocketMadrs) {
1781
1857
  try {
1782
- //console.log(`attempting to dial websocket multiaddr: %o`, addr)
1783
- await this.#libp2p.dial(addr);
1858
+ //console.log(`attempting to dial websocket multiaddr: %o`, mddr)
1859
+ await this.#libp2p.dial(mddr);
1784
1860
  return // if we succeed dialing the peer, no need to try another address
1785
1861
  } catch (error) {
1786
1862
  }
@@ -1815,10 +1891,13 @@ class webpeerjs{
1815
1891
  const libp2p = await createLibp2p({
1816
1892
  addresses: {
1817
1893
  listen: [
1894
+ '/webrtc'
1818
1895
  ],
1819
1896
  },
1820
1897
  transports:[
1821
- webTransport(),
1898
+ webTransport(),
1899
+ webSockets(),
1900
+ webRTC(),
1822
1901
  circuitRelayTransport({
1823
1902
  discoverRelays: CONFIG_DISCOVER_RELAYS,
1824
1903
  reservationConcurrency: 1,
@@ -1883,7 +1962,7 @@ class webpeerjs{
1883
1962
  allowPublishToZeroTopicPeers: true,
1884
1963
  msgIdFn: msgIdFnStrictNoSign,
1885
1964
  ignoreDuplicatePublishError: true,
1886
- runOnTransientConnection:true,
1965
+ runOnTransientConnection:false,
1887
1966
  }),
1888
1967
  identify: identify(),
1889
1968
  identifyPush: identifyPush(),
@@ -1892,7 +1971,7 @@ class webpeerjs{
1892
1971
  peerInfoMapper: removePrivateAddressesMapper,
1893
1972
  clientMode: false
1894
1973
  }),
1895
-
1974
+ dcutr: dcutr()
1896
1975
  },
1897
1976
  peerStore: {
1898
1977
  persistence: true,