webpeerjs 0.1.5 → 0.1.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/src/webpeerjs.js CHANGED
@@ -10,11 +10,10 @@ import {
10
10
  Key,
11
11
  msgIdFnStrictNoSign,
12
12
  metrics,
13
- getDigest,
13
+ //getDigest,
14
14
  mkDebug,
15
15
  multiaddr,
16
16
  pipe,
17
- lpStream,
18
17
  lp,
19
18
  map
20
19
  } from './utils'
@@ -98,20 +97,25 @@ class webpeerjs{
98
97
 
99
98
  //track last connect to webpeer network
100
99
  #lastTimeConnectToNetwork
100
+ #lastTimeReceiveData
101
101
 
102
102
  //arr to track on connect event
103
103
  #onConnectQueue
104
104
 
105
+ //callback to websocket dialable
106
+ #onWebsocketFn
107
+
105
108
  id
106
109
  status
107
110
  IPFS
108
111
  address
109
112
  peers
110
113
 
111
- constructor(libp2p,dbstore,onMetrics){
114
+ constructor(libp2p,dbstore,onMetrics,onWebsocketFn,onDialFn){
112
115
 
113
116
  this.#libp2p = libp2p
114
117
  this.#dbstore = dbstore
118
+ this.#onWebsocketFn = onWebsocketFn
115
119
  this.#dbstoreData = new Map()
116
120
  this.#discoveredPeers = new Map()
117
121
  this.#webPeersId = []
@@ -132,6 +136,7 @@ class webpeerjs{
132
136
  this.#msgIdtracker = []
133
137
  this.#peerexchangedata = new Map()
134
138
  this.#lastTimeConnectToNetwork = new Date().getTime()
139
+ this.#lastTimeReceiveData = new Date().getTime()
135
140
  this.#onConnectQueue = []
136
141
 
137
142
  this.peers = (function(f) {
@@ -162,7 +167,7 @@ class webpeerjs{
162
167
  //listen to peer connect event
163
168
  this.#libp2p.addEventListener("peer:connect",async (evt) => {
164
169
 
165
- const connection = evt.detail;
170
+ //const connection = evt.detail;
166
171
  const id = evt.detail.toString()
167
172
 
168
173
  //console.log('peer:connect '+id,evt)
@@ -209,7 +214,7 @@ class webpeerjs{
209
214
  const metadata = {addrs:address,last:now}
210
215
  this.#connectedPeers.set(id,metadata)
211
216
  }
212
- else{
217
+ else if(this.#lastTimeReceiveData < 10*1000){
213
218
  //add to connected webpeers
214
219
  this.#onConnectFnUpdate(id)
215
220
  const now = new Date().getTime()
@@ -240,6 +245,10 @@ class webpeerjs{
240
245
 
241
246
  try{
242
247
 
248
+ if(topic === config.CONFIG_PUPSUB_PEER_DATA || config.CONFIG_PUBSUB_PEER_DISCOVERY_WEBPEER.includes(topic) || config.CONFIG_RUN_ON_TRANSIENT_CONNECTION){
249
+ this.#lastTimeReceiveData = new Date().getTime()
250
+ }
251
+
243
252
  //track last connect to webpeer network
244
253
  if(config.CONFIG_PUBSUB_PEER_DISCOVERY_WEBPEER.includes(topic)){
245
254
  const now = new Date().getTime()
@@ -262,7 +271,7 @@ class webpeerjs{
262
271
  const metadata = {addrs:address,last:now}
263
272
  this.#connectedPeers.set(senderPeerId,metadata)
264
273
  }
265
- else{
274
+ else if(this.#lastTimeReceiveData < 10*1000){
266
275
  //add to connected webpeers
267
276
  this.#onConnectFnUpdate(senderPeerId)
268
277
  const address = this.#webPeersAddrs.get(senderPeerId)
@@ -339,18 +348,29 @@ class webpeerjs{
339
348
  //detect special webpeer identity
340
349
  if(prefix === config.CONFIG_PREFIX){
341
350
 
351
+ this.#lastTimeReceiveData = new Date().getTime()
352
+
342
353
  //add to webpeers id
343
354
  if(!this.#webPeersId.includes(id))this.#webPeersId.push(id)
344
355
 
345
356
  //add to connected webpeers
346
357
  if(!this.#connectedPeers.has(id)){
347
358
  this.#onConnectFnUpdate(id)
348
- address = []
349
359
  const now = new Date().getTime()
350
360
  const metadata = {addrs:address,last:now}
351
361
  this.#connectedPeers.set(id,metadata)
352
- this.#webPeersAddrs.set(id,address)
362
+ if(address){
363
+ if(address.length > 0){
364
+ this.#webPeersAddrs.set(id,address)
365
+ }
366
+ }
353
367
  this.#updatePeers()
368
+ }else{
369
+ if(address){
370
+ if(address.length > 0){
371
+ this.#webPeersAddrs.set(id,address)
372
+ }
373
+ }
354
374
  }
355
375
 
356
376
 
@@ -565,15 +585,16 @@ class webpeerjs{
565
585
  //const multiaddrs = peer.addresses.map(({ multiaddr }) => multiaddr)
566
586
  //console.log(`changed multiaddrs: peer ${peer.id.toString()} multiaddrs: ${multiaddrs}`)
567
587
  const id = peer.id.toString()
568
- const mddrs = []
569
- peer.addresses.forEach((addr)=>{
570
- const maddr = addr.multiaddr.toString()+'/p2p/'+id
571
- if(maddr.includes('webtransport') && maddr.includes('certhash')){
572
- mddrs.push(maddr)
588
+ const addrs = []
589
+ peer.addresses.forEach((address)=>{
590
+ const addr = address.multiaddr.toString()+'/p2p/'+id
591
+ if(addr.includes('webtransport') && addr.includes('certhash')){
592
+ addrs.push(addr)
573
593
  }
574
594
  })
575
- //this.#ListenAddressChange(mddrs)
576
- this.address = mddrs
595
+ if(!config.CONFIG_RUN_ON_TRANSIENT_CONNECTION)addrs.reverse()
596
+ //this.#ListenAddressChange(addrs)
597
+ this.address = addrs
577
598
  this.#ping()
578
599
  this.#peerDiscoveryHybrid()
579
600
  })
@@ -652,7 +673,8 @@ class webpeerjs{
652
673
 
653
674
  onMetrics((data)=>{
654
675
  const signal = metrics(data)
655
- this.#isDialEnabled = signal
676
+ this.#isDialEnabled = signal.isDialEnabled
677
+ onDialFn(signal.isAutoDialEnabled)
656
678
 
657
679
  })
658
680
 
@@ -672,6 +694,7 @@ class webpeerjs{
672
694
  setInterval(()=>{
673
695
  this.#peerDiscoveryHybrid()
674
696
  this.#trackHybridPeersConnection()
697
+ this.#trackWebpeerConnection()
675
698
  },10e3)
676
699
 
677
700
 
@@ -792,6 +815,7 @@ class webpeerjs{
792
815
  PRIVATE FUNCTION
793
816
  */
794
817
 
818
+ //track hybrid peer connection and try to dial if not connected at least 1
795
819
  #trackHybridPeersConnection(){
796
820
  let isConnectedToHybridPeers = false
797
821
  for(const id of config.CONFIG_KNOWN_BOOTSTRAP_HYBRID_IDS){
@@ -811,6 +835,24 @@ class webpeerjs{
811
835
  }
812
836
  }
813
837
 
838
+ //track webpeer connection and try to dial if not connected to network using saved webpeer address
839
+ #trackWebpeerConnection(){
840
+ if(this.status === 'connected')return
841
+ if(this.#webPeersAddrs.size < 1)return
842
+
843
+ const keys = Array.from(this.#webPeersAddrs.keys())
844
+ const randomKey = Math.floor(Math.random() * keys.length)
845
+ const key = keys[randomKey]
846
+ const addrs = this.#webPeersAddrs.get(key)
847
+
848
+ let mddrs = []
849
+ for(const addr of addrs){
850
+ const mddr = multiaddr(addr)
851
+ mddrs.push(mddr)
852
+ }
853
+ this.#dialMultiaddress(mddrs)
854
+ }
855
+
814
856
  //prevent double on connect event
815
857
  #onConnectFnUpdate(id){
816
858
  if(!this.#onConnectQueue.includes(id)){
@@ -842,7 +884,7 @@ class webpeerjs{
842
884
 
843
885
  async #registerProtocol(){
844
886
 
845
- const handler = async ({ connection, stream, protocol }) => {
887
+ const handler = async ({ connection, stream }) => {
846
888
  try{
847
889
  const output = await pipe(
848
890
  stream.source,
@@ -923,7 +965,7 @@ class webpeerjs{
923
965
  )
924
966
  }
925
967
  catch(err){
926
- //console.warn(err)
968
+ mkDebug(err)
927
969
  }
928
970
  }
929
971
 
@@ -934,14 +976,14 @@ class webpeerjs{
934
976
  })
935
977
 
936
978
  await this.#libp2p.register(config.CONFIG_PROTOCOL, {
937
- onConnect: (peer, connection) => {
938
- // handle connect
979
+ /*onConnect: (peer, connection) => {
980
+ //handle connect
939
981
  //console.log('handle connect',peer)
940
982
  },
941
983
  onDisconnect: (peer, connection) => {
942
- // handle disconnect
984
+ //handle disconnect
943
985
  //console.log('handle disconnect',peer)
944
- }
986
+ }*/
945
987
  })
946
988
 
947
989
  }
@@ -1032,7 +1074,7 @@ class webpeerjs{
1032
1074
  }
1033
1075
  }
1034
1076
  catch(err){
1035
- //console.warn(err)
1077
+ mkDebug(err)
1036
1078
  }
1037
1079
  }
1038
1080
 
@@ -1074,7 +1116,7 @@ class webpeerjs{
1074
1116
 
1075
1117
  //check the last seen in web peer
1076
1118
  #trackLastSeen(){
1077
- const timeout = 25*1000
1119
+ const timeout = 10*1000
1078
1120
  const forcetimeout = 60*1000
1079
1121
  const now = new Date().getTime()
1080
1122
 
@@ -1620,7 +1662,7 @@ class webpeerjs{
1620
1662
 
1621
1663
  //dial based on known bootsrap peers address using Websocket expected
1622
1664
  #dialKnownBootstrap(){
1623
-
1665
+ //console.log('#dialKnownBootstrap()')
1624
1666
  if(!navigator.onLine)return
1625
1667
  if(!this.#isDialEnabled)return
1626
1668
 
@@ -1640,6 +1682,7 @@ class webpeerjs{
1640
1682
 
1641
1683
  this.#dialedKnownBootstrap.set(id,addrs)
1642
1684
  this.#isDialWebsocket = true
1685
+ this.#onWebsocketFn(true)
1643
1686
  if(!this.#isConnected(id)){
1644
1687
  this.#dialMultiaddress(mddrs)
1645
1688
  }
@@ -1649,7 +1692,7 @@ class webpeerjs{
1649
1692
 
1650
1693
  //dial based on known bootstrap DNS
1651
1694
  async #dialKnownDNS(){
1652
-
1695
+ //console.log('#dialKnownDNS()')
1653
1696
  if(!navigator.onLine)return
1654
1697
  if(!this.#isDialEnabled)return
1655
1698
 
@@ -1682,6 +1725,7 @@ class webpeerjs{
1682
1725
 
1683
1726
  this.#dialedKnownBootstrap.set(id,addrs)
1684
1727
  this.#isDialWebsocket = true
1728
+ this.#onWebsocketFn(true)
1685
1729
  if(!this.#isConnected(id)){
1686
1730
  this.#dialMultiaddress(mddrs)
1687
1731
  }
@@ -1692,7 +1736,7 @@ class webpeerjs{
1692
1736
 
1693
1737
  //dial based on known bootstrap DNS using DNS resolver only
1694
1738
  async #dialKnownDNSonly(){
1695
-
1739
+ console.log('#dialKnownDNSonly()')
1696
1740
  if(!navigator.onLine)return
1697
1741
  if(!this.#isDialEnabled)return
1698
1742
 
@@ -1729,6 +1773,7 @@ class webpeerjs{
1729
1773
 
1730
1774
 
1731
1775
  this.#isDialWebsocket = true
1776
+ this.#onWebsocketFn(true)
1732
1777
  this.#dialedKnownBootstrap.set(id,addrs)
1733
1778
 
1734
1779
  this.#dialedKnownBootstrap.set(id,addrs)
@@ -1796,6 +1841,21 @@ class webpeerjs{
1796
1841
 
1797
1842
  let onMetricsFn = () => {}
1798
1843
  const onMetrics = f => (onMetricsFn = f)
1844
+
1845
+ let isWebsocket = false
1846
+ let onWebsocketFn = () => {}
1847
+ const onWebsocket = f => (onWebsocketFn = f)
1848
+ onWebsocket((data)=>{
1849
+ isWebsocket = data
1850
+ })
1851
+
1852
+ let isDial = true
1853
+ let onDialFn = () => {}
1854
+ const onDial = f => (onDialFn = f)
1855
+ onDial((data)=>{
1856
+ //if(isDial!=data)console.warn('isDial',data)
1857
+ isDial = data
1858
+ })
1799
1859
 
1800
1860
  let listenaddress = []
1801
1861
 
@@ -1892,12 +1952,13 @@ class webpeerjs{
1892
1952
  };
1893
1953
 
1894
1954
  pc.onicecandidateerror = (e) => {
1895
- //console.error(e);
1955
+ console.debug(e);
1896
1956
  };
1897
1957
 
1898
1958
  pc.createDataChannel('webpeerjs');
1899
1959
  pc.createOffer().then(offer => pc.setLocalDescription(offer));
1900
1960
  })
1961
+ //console.log(ice)
1901
1962
 
1902
1963
  //create libp2p instance
1903
1964
  const libp2p = await createLibp2p({
@@ -1943,29 +2004,31 @@ class webpeerjs{
1943
2004
  ],
1944
2005
  connectionGater: {
1945
2006
  filterMultiaddrForPeer: async (peer, multiaddrTest) => {
1946
- const multiaddrString = multiaddrTest.toString();
2007
+ const multiaddrString = multiaddrTest.toString()
1947
2008
  if (
1948
2009
  multiaddrString.includes("/ip4/127.0.0.1") ||
1949
2010
  multiaddrString.includes("/ip6/")
1950
2011
  ) {
1951
- return false;
2012
+ return false
1952
2013
  }
1953
- return true;
2014
+ if(multiaddrString.includes("/ws/") || multiaddrString.includes("/wss/"))return isWebsocket
2015
+ return isDial
1954
2016
  },
1955
2017
  denyDialMultiaddr: async (multiaddrTest) => {
1956
- const multiaddrString = multiaddrTest.toString();
2018
+ const multiaddrString = multiaddrTest.toString()
1957
2019
  if (
1958
2020
  multiaddrString.includes("/ip4/127.0.0.1") ||
1959
2021
  multiaddrString.includes("/ip6/")
1960
2022
  ) {
1961
- return true;
2023
+ return true
1962
2024
  }
1963
- return false;
2025
+ if(multiaddrString.includes("/ws/") || multiaddrString.includes("/wss/"))return !isWebsocket
2026
+ return !isDial
1964
2027
  },
1965
2028
  },
1966
2029
  peerDiscovery: [
1967
2030
  pubsubPeerDiscovery({
1968
- interval: 10_000,
2031
+ interval: 5_000,
1969
2032
  topics: config.CONFIG_PUBSUB_PEER_DISCOVERY_WEBPEER,
1970
2033
  listenOnly: false,
1971
2034
  }),
@@ -2006,7 +2069,7 @@ class webpeerjs{
2006
2069
 
2007
2070
 
2008
2071
  //return webpeerjs class
2009
- return new webpeerjs(libp2p,dbstore,onMetrics)
2072
+ return new webpeerjs(libp2p,dbstore,onMetrics,onWebsocketFn,onDialFn)
2010
2073
  }
2011
2074
  }
2012
2075