@leofcoin/peernet 1.1.80 → 1.1.82

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.
Files changed (71) hide show
  1. package/.esdoc.json +10 -10
  2. package/.gitattributes +2 -2
  3. package/.prettierrc +7 -7
  4. package/.travis.yml +27 -27
  5. package/BREAKING_CHANGES.md +34 -34
  6. package/LICENSE +21 -21
  7. package/README.md +72 -72
  8. package/deploy.js +8 -8
  9. package/exports/browser/{client-Depp28gl.js → client-C0VVXIWm.js} +2 -2
  10. package/exports/browser/{index-DqPlTtAJ.js → index-CEwkDK9g.js} +5 -496
  11. package/exports/browser/{messages-RYLqPGkg.js → messages-BdevLRCA.js} +164 -164
  12. package/exports/browser/{peernet-B7TZP-Wg.js → peernet-DEIKLS2i.js} +185 -185
  13. package/exports/browser/peernet.js +1 -1
  14. package/exports/{messages-CRhtDipD.js → messages-BmpgEM4y.js} +163 -163
  15. package/exports/peernet.js +184 -184
  16. package/exports/src/prompts/password.js +3 -3
  17. package/index.html +19 -19
  18. package/package.json +71 -71
  19. package/rollup.config.js +63 -63
  20. package/src/dht/dht.ts +147 -147
  21. package/src/discovery/peer-discovery.js +75 -75
  22. package/src/errors/errors.js +12 -12
  23. package/src/handlers/data.js +15 -15
  24. package/src/handlers/message.js +34 -34
  25. package/src/identity.ts +104 -104
  26. package/src/messages/chat.js +13 -13
  27. package/src/messages/data-response.js +13 -13
  28. package/src/messages/data.js +17 -17
  29. package/src/messages/dht-response.js +13 -13
  30. package/src/messages/dht.js +21 -21
  31. package/src/messages/file-link.js +17 -17
  32. package/src/messages/file.js +17 -17
  33. package/src/messages/peer-response.js +13 -13
  34. package/src/messages/peer.js +13 -13
  35. package/src/messages/peernet.js +13 -13
  36. package/src/messages/ps.js +13 -13
  37. package/src/messages/request.js +13 -13
  38. package/src/messages/response.js +13 -13
  39. package/src/messages.js +13 -13
  40. package/src/peer-info.js +9 -9
  41. package/src/peernet.ts +817 -817
  42. package/src/prompts/password/browser.js +1 -1
  43. package/src/prompts/password/node.js +6 -6
  44. package/src/proto/chat-message.proto.js +6 -6
  45. package/src/proto/data-response.proto.js +4 -4
  46. package/src/proto/data.proto.js +4 -4
  47. package/src/proto/dht-response.proto.js +4 -4
  48. package/src/proto/dht.proto.js +4 -4
  49. package/src/proto/file-link.proto.js +5 -5
  50. package/src/proto/file.proto.js +5 -5
  51. package/src/proto/peer-response.proto.js +3 -3
  52. package/src/proto/peer.proto.js +3 -3
  53. package/src/proto/peernet.proto.js +7 -7
  54. package/src/proto/ps.proto.js +4 -4
  55. package/src/proto/request.proto.js +4 -4
  56. package/src/proto/response.proto.js +3 -3
  57. package/src/types.ts +25 -25
  58. package/src/utils/utils.js +77 -77
  59. package/test/client.js +14 -14
  60. package/test/codec.js +56 -56
  61. package/test/hash.js +13 -13
  62. package/test/index.js +3 -3
  63. package/test/lastBlock.js +7 -7
  64. package/test/messages.js +26 -26
  65. package/test/peernet.js +17 -17
  66. package/test/peernet.test.js +159 -159
  67. package/test.js +62 -62
  68. package/test2.js +13 -13
  69. package/test3.js +15 -15
  70. package/test4.js +7 -7
  71. package/tsconfig.json +11 -11
package/rollup.config.js CHANGED
@@ -1,63 +1,63 @@
1
- import resolve from '@rollup/plugin-node-resolve'
2
- import commonjs from '@rollup/plugin-commonjs'
3
- import json from '@rollup/plugin-json'
4
- import wasm from '@rollup/plugin-wasm'
5
- import rimraf from 'rimraf'
6
- import typescript from '@rollup/plugin-typescript'
7
-
8
- rimraf.sync('./exports/**')
9
-
10
- export default [
11
- {
12
- input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/browser-store.js'],
13
- output: {
14
- format: 'es',
15
- dir: './exports/browser'
16
- },
17
- plugins: [
18
- json(),
19
- wasm(),
20
- resolve({
21
- browser: true,
22
- preferBuiltins: false,
23
- mainFields: ['browser', 'module', 'main']
24
- }),
25
- commonjs({
26
- mainFields: ['browser', 'module', 'main']
27
- }),
28
-
29
- typescript({ compilerOptions: { outDir: './exports/browser' } })
30
- ],
31
- external: ['./prompts/password.js']
32
- },
33
- {
34
- input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/store.js'],
35
- output: {
36
- format: 'es',
37
- dir: './exports'
38
- },
39
- plugins: [
40
- typescript({
41
- compilerOptions: {
42
- outDir: './exports',
43
- declarationDir: './exports/types'
44
- }
45
- })
46
- ],
47
- external: ['./prompts/password.js']
48
- },
49
- {
50
- input: ['./src/prompts/password/browser.js'],
51
- output: {
52
- format: 'es',
53
- file: './exports/browser/src/prompts/password.js'
54
- }
55
- },
56
- {
57
- input: ['./src/prompts/password/node.js'],
58
- output: {
59
- format: 'es',
60
- file: './exports/src/prompts/password.js'
61
- }
62
- }
63
- ]
1
+ import resolve from '@rollup/plugin-node-resolve'
2
+ import commonjs from '@rollup/plugin-commonjs'
3
+ import json from '@rollup/plugin-json'
4
+ import wasm from '@rollup/plugin-wasm'
5
+ import rimraf from 'rimraf'
6
+ import typescript from '@rollup/plugin-typescript'
7
+
8
+ rimraf.sync('./exports/**')
9
+
10
+ export default [
11
+ {
12
+ input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/browser-store.js'],
13
+ output: {
14
+ format: 'es',
15
+ dir: './exports/browser'
16
+ },
17
+ plugins: [
18
+ json(),
19
+ wasm(),
20
+ resolve({
21
+ browser: true,
22
+ preferBuiltins: false,
23
+ mainFields: ['browser', 'module', 'main']
24
+ }),
25
+ commonjs({
26
+ mainFields: ['browser', 'module', 'main']
27
+ }),
28
+
29
+ typescript({ compilerOptions: { outDir: './exports/browser' } })
30
+ ],
31
+ external: ['./prompts/password.js']
32
+ },
33
+ {
34
+ input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/store.js'],
35
+ output: {
36
+ format: 'es',
37
+ dir: './exports'
38
+ },
39
+ plugins: [
40
+ typescript({
41
+ compilerOptions: {
42
+ outDir: './exports',
43
+ declarationDir: './exports/types'
44
+ }
45
+ })
46
+ ],
47
+ external: ['./prompts/password.js']
48
+ },
49
+ {
50
+ input: ['./src/prompts/password/browser.js'],
51
+ output: {
52
+ format: 'es',
53
+ file: './exports/browser/src/prompts/password.js'
54
+ }
55
+ },
56
+ {
57
+ input: ['./src/prompts/password/node.js'],
58
+ output: {
59
+ format: 'es',
60
+ file: './exports/src/prompts/password.js'
61
+ }
62
+ }
63
+ ]
package/src/dht/dht.ts CHANGED
@@ -1,147 +1,147 @@
1
- export declare type DHTProvider = {
2
- address: string
3
- id: string
4
- }
5
-
6
- export declare type DHTProviderDistanceResult = {
7
- provider: DHTProvider
8
- /**
9
- * distance on earth between peers in km
10
- */
11
- distance: number
12
- }
13
-
14
- export declare type DHTProviderMapValue = { [index: string]: DHTProvider }
15
-
16
- declare type Coordinates = {
17
- longitude: number
18
- latitude: number
19
- }
20
-
21
- /**
22
- * Keep history of fetched address and ptr
23
- * @property {Object} address
24
- * @property {Object} ptr
25
- */
26
- const lastFetched = {
27
- address: {
28
- value: undefined,
29
- timestamp: 0
30
- },
31
- ptr: {
32
- value: undefined,
33
- timestamp: 0
34
- }
35
- }
36
-
37
- const fetchedCoordinates = {}
38
-
39
- const getAddress = async () => {
40
- const { address } = lastFetched
41
- if (address) {
42
- address.value = await fetch('https://icanhazip.com/')
43
- address.value = await address.value.text()
44
- address.timestamp = Math.round(new Date().getTime() / 1000)
45
- lastFetched.address = address
46
- }
47
-
48
- return address.value
49
- }
50
-
51
- const degreesToRadians = (degrees) => {
52
- return (degrees * Math.PI) / 180
53
- }
54
-
55
- const distanceInKmBetweenEarthCoordinates = (lat1, lon1, lat2, lon2) => {
56
- const earthRadiusKm = 6371
57
-
58
- const dLat = degreesToRadians(lat2 - lat1)
59
- const dLon = degreesToRadians(lon2 - lon1)
60
-
61
- lat1 = degreesToRadians(lat1)
62
- lat2 = degreesToRadians(lat2)
63
- const a =
64
- Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)
65
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
66
- return earthRadiusKm * c
67
- }
68
-
69
- export default class DhtEarth {
70
- providerMap = new Map<string, DHTProviderMapValue>()
71
-
72
- /**
73
- *
74
- */
75
- constructor() {
76
- this.providerMap = new Map()
77
- }
78
-
79
- async getCoordinates(address: string): Promise<Coordinates> {
80
- if (!fetchedCoordinates[address]) {
81
- const request = `https://whereis.leofcoin.org/?ip=${address}`
82
- let response = await fetch(request)
83
- const { lat, lon } = (await response.json()) as { lat: number; lon: number }
84
- fetchedCoordinates[address] = { latitude: lat, longitude: lon }
85
- }
86
- return fetchedCoordinates[address]
87
- }
88
-
89
- /**
90
- * @param {Object} peer
91
- * @param {Object} provider
92
- * @return {Object} {provider, distance}
93
- */
94
- async getDistance(
95
- peer: { latitude: number; longitude: number },
96
- provider: DHTProvider
97
- ): Promise<DHTProviderDistanceResult> {
98
- const { latitude, longitude } = await this.getCoordinates(provider.address)
99
- return {
100
- provider,
101
- distance: distanceInKmBetweenEarthCoordinates(peer.latitude, peer.longitude, latitude, longitude)
102
- }
103
- }
104
-
105
- async closestPeer(providers: Array<any>): Promise<DHTProvider> {
106
- let all = []
107
- const address = await getAddress()
108
- const peerLoc = await this.getCoordinates(address)
109
-
110
- for (const provider of providers) {
111
- if (provider.address === '127.0.0.1' || provider.address === '::1') all.push({ provider, distance: 0 })
112
- else all.push(this.getDistance(peerLoc, provider))
113
- }
114
-
115
- // todo queue
116
- all = await Promise.all(all)
117
- all = all.sort((previous, current) => previous.distance - current.distance)
118
- return all[0].provider
119
- }
120
-
121
- hasProvider(hash: string): boolean {
122
- return this.providerMap.has(hash)
123
- }
124
-
125
- providersFor(hash: string): DHTProviderMapValue {
126
- let providers: DHTProviderMapValue
127
- if (this.providerMap.has(hash)) providers = this.providerMap.get(hash)
128
- return providers
129
- }
130
-
131
- addProvider(provider: DHTProvider, hash: string) {
132
- let providers: DHTProviderMapValue = {}
133
- if (this.providerMap.has(hash)) {
134
- providers = this.providerMap.get(hash)
135
- }
136
- providers[provider.address] = provider
137
- this.providerMap.set(hash, providers)
138
- }
139
-
140
- removeProvider(address: string, hash: string) {
141
- if (this.providerMap.has(hash)) {
142
- const providers = this.providerMap.get(hash)
143
- delete providers[address]
144
- this.providerMap.set(hash, providers)
145
- }
146
- }
147
- }
1
+ export declare type DHTProvider = {
2
+ address: string
3
+ id: string
4
+ }
5
+
6
+ export declare type DHTProviderDistanceResult = {
7
+ provider: DHTProvider
8
+ /**
9
+ * distance on earth between peers in km
10
+ */
11
+ distance: number
12
+ }
13
+
14
+ export declare type DHTProviderMapValue = { [index: string]: DHTProvider }
15
+
16
+ declare type Coordinates = {
17
+ longitude: number
18
+ latitude: number
19
+ }
20
+
21
+ /**
22
+ * Keep history of fetched address and ptr
23
+ * @property {Object} address
24
+ * @property {Object} ptr
25
+ */
26
+ const lastFetched = {
27
+ address: {
28
+ value: undefined,
29
+ timestamp: 0
30
+ },
31
+ ptr: {
32
+ value: undefined,
33
+ timestamp: 0
34
+ }
35
+ }
36
+
37
+ const fetchedCoordinates = {}
38
+
39
+ const getAddress = async () => {
40
+ const { address } = lastFetched
41
+ if (address) {
42
+ address.value = await fetch('https://icanhazip.com/')
43
+ address.value = await address.value.text()
44
+ address.timestamp = Math.round(new Date().getTime() / 1000)
45
+ lastFetched.address = address
46
+ }
47
+
48
+ return address.value
49
+ }
50
+
51
+ const degreesToRadians = (degrees) => {
52
+ return (degrees * Math.PI) / 180
53
+ }
54
+
55
+ const distanceInKmBetweenEarthCoordinates = (lat1, lon1, lat2, lon2) => {
56
+ const earthRadiusKm = 6371
57
+
58
+ const dLat = degreesToRadians(lat2 - lat1)
59
+ const dLon = degreesToRadians(lon2 - lon1)
60
+
61
+ lat1 = degreesToRadians(lat1)
62
+ lat2 = degreesToRadians(lat2)
63
+ const a =
64
+ Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)
65
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
66
+ return earthRadiusKm * c
67
+ }
68
+
69
+ export default class DhtEarth {
70
+ providerMap = new Map<string, DHTProviderMapValue>()
71
+
72
+ /**
73
+ *
74
+ */
75
+ constructor() {
76
+ this.providerMap = new Map()
77
+ }
78
+
79
+ async getCoordinates(address: string): Promise<Coordinates> {
80
+ if (!fetchedCoordinates[address]) {
81
+ const request = `https://whereis.leofcoin.org/?ip=${address}`
82
+ let response = await fetch(request)
83
+ const { lat, lon } = (await response.json()) as { lat: number; lon: number }
84
+ fetchedCoordinates[address] = { latitude: lat, longitude: lon }
85
+ }
86
+ return fetchedCoordinates[address]
87
+ }
88
+
89
+ /**
90
+ * @param {Object} peer
91
+ * @param {Object} provider
92
+ * @return {Object} {provider, distance}
93
+ */
94
+ async getDistance(
95
+ peer: { latitude: number; longitude: number },
96
+ provider: DHTProvider
97
+ ): Promise<DHTProviderDistanceResult> {
98
+ const { latitude, longitude } = await this.getCoordinates(provider.address)
99
+ return {
100
+ provider,
101
+ distance: distanceInKmBetweenEarthCoordinates(peer.latitude, peer.longitude, latitude, longitude)
102
+ }
103
+ }
104
+
105
+ async closestPeer(providers: Array<any>): Promise<DHTProvider> {
106
+ let all = []
107
+ const address = await getAddress()
108
+ const peerLoc = await this.getCoordinates(address)
109
+
110
+ for (const provider of providers) {
111
+ if (provider.address === '127.0.0.1' || provider.address === '::1') all.push({ provider, distance: 0 })
112
+ else all.push(this.getDistance(peerLoc, provider))
113
+ }
114
+
115
+ // todo queue
116
+ all = await Promise.all(all)
117
+ all = all.sort((previous, current) => previous.distance - current.distance)
118
+ return all[0].provider
119
+ }
120
+
121
+ hasProvider(hash: string): boolean {
122
+ return this.providerMap.has(hash)
123
+ }
124
+
125
+ providersFor(hash: string): DHTProviderMapValue {
126
+ let providers: DHTProviderMapValue
127
+ if (this.providerMap.has(hash)) providers = this.providerMap.get(hash)
128
+ return providers
129
+ }
130
+
131
+ addProvider(provider: DHTProvider, hash: string) {
132
+ let providers: DHTProviderMapValue = {}
133
+ if (this.providerMap.has(hash)) {
134
+ providers = this.providerMap.get(hash)
135
+ }
136
+ providers[provider.address] = provider
137
+ this.providerMap.set(hash, providers)
138
+ }
139
+
140
+ removeProvider(address: string, hash: string) {
141
+ if (this.providerMap.has(hash)) {
142
+ const providers = this.providerMap.get(hash)
143
+ delete providers[address]
144
+ this.providerMap.set(hash, providers)
145
+ }
146
+ }
147
+ }
@@ -1,75 +1,75 @@
1
- import { protoFor } from './../utils/utils.js'
2
-
3
- export default class PeerDiscovery {
4
- constructor(id) {
5
- this.id = id
6
- }
7
-
8
- _getPeerId(id) {
9
- if (!peernet.peerMap || (peernet.peerMap && peernet.peerMap.size === 0)) return false
10
-
11
- for (const entry of [...peernet.peerMap.entries()]) {
12
- for (const _id of entry[1]) {
13
- if (_id === id) return entry[0]
14
- }
15
- }
16
- }
17
-
18
- async discover(peer) {
19
- let id = this._getPeerId(peer.id)
20
- if (id) return id
21
- const data = await new peernet.protos['peernet-peer']({ id: this.id })
22
- const node = await peernet.prepareMessage(peer.id, data.encoded)
23
-
24
- let response = await peer.request(node.encoded)
25
- response = await protoFor(response)
26
- response = await new peernet.protos['peernet-peer-response'](response.decoded.data)
27
-
28
- id = response.decoded.id
29
- if (id === this.id) return
30
-
31
- if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id])
32
- else {
33
- const connections = peernet.peerMap.get(id)
34
- if (connections.indexOf(peer.id) === -1) {
35
- connections.push(peer.id)
36
- peernet.peerMap.set(peer.id, connections)
37
- }
38
- }
39
- return id
40
- }
41
-
42
- async discoverHandler(message, peer) {
43
- const { id, proto } = message
44
- // if (typeof message.data === 'string') message.data = Buffer.from(message.data)
45
- if (proto.name === 'peernet-peer') {
46
- const from = proto.decoded.id
47
- if (from === this.id) return
48
-
49
- if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id])
50
- else {
51
- const connections = peernet.peerMap.get(from)
52
- if (connections.indexOf(peer.id) === -1) {
53
- connections.push(peer.id)
54
- peernet.peerMap.set(from, connections)
55
- }
56
- }
57
- const data = await new peernet.protos['peernet-peer-response']({ id: this.id })
58
- const node = await peernet.prepareMessage(from, data.encoded)
59
-
60
- peer.write(Buffer.from(JSON.stringify({ id, data: node.encoded })))
61
- } else if (proto.name === 'peernet-peer-response') {
62
- const from = proto.decoded.id
63
- if (from === this.id) return
64
-
65
- if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id])
66
- else {
67
- const connections = peernet.peerMap.get(from)
68
- if (connections.indexOf(peer.id) === -1) {
69
- connections.push(peer.id)
70
- peernet.peerMap.set(from, connections)
71
- }
72
- }
73
- }
74
- }
75
- }
1
+ import { protoFor } from './../utils/utils.js'
2
+
3
+ export default class PeerDiscovery {
4
+ constructor(id) {
5
+ this.id = id
6
+ }
7
+
8
+ _getPeerId(id) {
9
+ if (!peernet.peerMap || (peernet.peerMap && peernet.peerMap.size === 0)) return false
10
+
11
+ for (const entry of [...peernet.peerMap.entries()]) {
12
+ for (const _id of entry[1]) {
13
+ if (_id === id) return entry[0]
14
+ }
15
+ }
16
+ }
17
+
18
+ async discover(peer) {
19
+ let id = this._getPeerId(peer.id)
20
+ if (id) return id
21
+ const data = await new peernet.protos['peernet-peer']({ id: this.id })
22
+ const node = await peernet.prepareMessage(peer.id, data.encoded)
23
+
24
+ let response = await peer.request(node.encoded)
25
+ response = await protoFor(response)
26
+ response = await new peernet.protos['peernet-peer-response'](response.decoded.data)
27
+
28
+ id = response.decoded.id
29
+ if (id === this.id) return
30
+
31
+ if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id])
32
+ else {
33
+ const connections = peernet.peerMap.get(id)
34
+ if (connections.indexOf(peer.id) === -1) {
35
+ connections.push(peer.id)
36
+ peernet.peerMap.set(peer.id, connections)
37
+ }
38
+ }
39
+ return id
40
+ }
41
+
42
+ async discoverHandler(message, peer) {
43
+ const { id, proto } = message
44
+ // if (typeof message.data === 'string') message.data = Buffer.from(message.data)
45
+ if (proto.name === 'peernet-peer') {
46
+ const from = proto.decoded.id
47
+ if (from === this.id) return
48
+
49
+ if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id])
50
+ else {
51
+ const connections = peernet.peerMap.get(from)
52
+ if (connections.indexOf(peer.id) === -1) {
53
+ connections.push(peer.id)
54
+ peernet.peerMap.set(from, connections)
55
+ }
56
+ }
57
+ const data = await new peernet.protos['peernet-peer-response']({ id: this.id })
58
+ const node = await peernet.prepareMessage(from, data.encoded)
59
+
60
+ peer.write(Buffer.from(JSON.stringify({ id, data: node.encoded })))
61
+ } else if (proto.name === 'peernet-peer-response') {
62
+ const from = proto.decoded.id
63
+ if (from === this.id) return
64
+
65
+ if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id])
66
+ else {
67
+ const connections = peernet.peerMap.get(from)
68
+ if (connections.indexOf(peer.id) === -1) {
69
+ connections.push(peer.id)
70
+ peernet.peerMap.set(from, connections)
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
@@ -1,12 +1,12 @@
1
- export const encapsulatedError = () => {
2
- return new Error('Nodes/Data should be send encapsulated by peernet-message')
3
- }
4
-
5
- export const dhtError = (proto) => {
6
- const text = `Received proto ${proto.name} expected peernet-dht-response`
7
- return new Error(`Routing error: ${text}`)
8
- }
9
-
10
- export const nothingFoundError = (hash) => {
11
- return new Error(`nothing found for ${hash}`)
12
- }
1
+ export const encapsulatedError = () => {
2
+ return new Error('Nodes/Data should be send encapsulated by peernet-message')
3
+ }
4
+
5
+ export const dhtError = (proto) => {
6
+ const text = `Received proto ${proto.name} expected peernet-dht-response`
7
+ return new Error(`Routing error: ${text}`)
8
+ }
9
+
10
+ export const nothingFoundError = (hash) => {
11
+ return new Error(`nothing found for ${hash}`)
12
+ }
@@ -1,15 +1,15 @@
1
- import { protoFor } from './../utils/utils.js'
2
-
3
- const dataHandler = async (message) => {
4
- if (!message) return
5
-
6
- try {
7
- const { data, id, from, peer } = message
8
- const proto = await protoFor(data)
9
- peernet._protoHandler({ id, proto }, peernet.connections[from] || peer, from)
10
- } catch (error) {
11
- console.error(error)
12
- }
13
- }
14
-
15
- export default dataHandler
1
+ import { protoFor } from './../utils/utils.js'
2
+
3
+ const dataHandler = async (message) => {
4
+ if (!message) return
5
+
6
+ try {
7
+ const { data, id, from, peer } = message
8
+ const proto = await protoFor(data)
9
+ peernet._protoHandler({ id, proto }, peernet.connections[from] || peer, from)
10
+ } catch (error) {
11
+ console.error(error)
12
+ }
13
+ }
14
+
15
+ export default dataHandler