@leofcoin/peernet 0.12.0 → 0.12.3
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/browser/generate-account.js +50 -0
- package/dist/browser/messages.js +362 -0
- package/dist/browser/pako.js +6731 -0
- package/dist/browser/peernet-swarm.js +836 -0
- package/dist/browser/peernet.js +7826 -51538
- package/dist/browser/{160.peernet.js → protons.js} +4 -27
- package/dist/browser/storage.js +12 -0
- package/dist/browser/wrtc.js +28 -0
- package/dist/commonjs/messages-d7de0e2e.js +159 -0
- package/dist/commonjs/peernet.js +61 -1392
- package/dist/commonjs/{peernet-message.js → peernet2.js} +0 -0
- package/dist/module/messages-1168ade4.js +268 -0
- package/dist/module/peernet.js +52 -1495
- package/package.json +7 -11
- package/rollup.config.js +2 -21
- package/src/handlers/message.js +4 -5
- package/src/messages/{chat-message.js → chat.js} +0 -0
- package/src/messages/{peernet-message.js → peernet.js} +0 -0
- package/src/messages.js +11 -0
- package/src/peernet.js +36 -28
- package/test.js +3 -3
- package/webpack.config.js +6 -3
package/package.json
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leofcoin/peernet",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/commonjs/peernet.js",
|
|
6
|
-
"module": "
|
|
7
|
-
"browser": "dist/browser/peernet.js",
|
|
6
|
+
"module": "src/module/peernet.js",
|
|
8
7
|
"scripts": {
|
|
9
8
|
"build": "npm run c && webpack",
|
|
10
9
|
"test": "node test/index.js",
|
|
@@ -23,13 +22,14 @@
|
|
|
23
22
|
"license": "MIT",
|
|
24
23
|
"browserslist": "> 0.5%, last 2 versions, not dead",
|
|
25
24
|
"dependencies": {
|
|
26
|
-
"@leofcoin/codec-format-interface": "^1.
|
|
27
|
-
"@leofcoin/generate-account": "^1.0.
|
|
25
|
+
"@leofcoin/codec-format-interface": "^1.2.2",
|
|
26
|
+
"@leofcoin/generate-account": "^1.0.4",
|
|
28
27
|
"@leofcoin/multi-wallet": "^2.1.2",
|
|
29
|
-
"@leofcoin/peernet-swarm": "^0.3.
|
|
28
|
+
"@leofcoin/peernet-swarm": "^0.3.3",
|
|
30
29
|
"@leofcoin/storage": "^2.3.0",
|
|
31
30
|
"@vandeurenglenn/base32": "^1.1.0",
|
|
32
31
|
"@vandeurenglenn/base58": "^1.1.0",
|
|
32
|
+
"@vandeurenglenn/debug": "^1.0.0",
|
|
33
33
|
"@vandeurenglenn/is-hex": "^1.0.0",
|
|
34
34
|
"@vandeurenglenn/little-pubsub": "^1.3.1",
|
|
35
35
|
"keccak": "^3.0.1",
|
|
@@ -41,10 +41,7 @@
|
|
|
41
41
|
"varint": "^6.0.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@babel/plugin-proposal-private-methods": "^7.16.11",
|
|
45
|
-
"@rollup/plugin-eslint": "^8.0.1",
|
|
46
44
|
"@rollup/plugin-json": "^4.1.0",
|
|
47
|
-
"@vandeurenglenn/debug": "^1.0.0",
|
|
48
45
|
"coveralls": "^3.1.1",
|
|
49
46
|
"eslint": "^7.31.0",
|
|
50
47
|
"eslint-config-google": "^0.14.0",
|
|
@@ -56,7 +53,6 @@
|
|
|
56
53
|
"tape": "^5.2.2",
|
|
57
54
|
"vm-browserify": "^1.1.2",
|
|
58
55
|
"webpack": "^5.72.0",
|
|
59
|
-
"webpack-cli": "^4.9.2"
|
|
60
|
-
"webpack-node-externals": "^3.0.0"
|
|
56
|
+
"webpack-cli": "^4.9.2"
|
|
61
57
|
}
|
|
62
58
|
}
|
package/rollup.config.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
|
-
import lint from '@rollup/plugin-eslint'
|
|
3
2
|
import json from '@rollup/plugin-json'
|
|
4
3
|
import modify from 'rollup-plugin-modify'
|
|
5
4
|
|
|
@@ -10,7 +9,7 @@ try {
|
|
|
10
9
|
}
|
|
11
10
|
export default [{
|
|
12
11
|
input: ['src/peernet.js', 'src/messages/dht.js',
|
|
13
|
-
'src/messages/peernet
|
|
12
|
+
'src/messages/peernet.js', 'src/messages/dht-response.js', 'src/messages/request.js',
|
|
14
13
|
'src/messages/response.js'],
|
|
15
14
|
output: {
|
|
16
15
|
dir: 'dist/commonjs',
|
|
@@ -26,25 +25,7 @@ export default [{
|
|
|
26
25
|
}, {
|
|
27
26
|
input: 'src/peernet.js',
|
|
28
27
|
output: {
|
|
29
|
-
dir: 'dist/
|
|
30
|
-
format: 'cjs'
|
|
31
|
-
},
|
|
32
|
-
plugins: [
|
|
33
|
-
json(),
|
|
34
|
-
modify({
|
|
35
|
-
"import fetch from 'node-fetch'": '',
|
|
36
|
-
HTTP_IMPORT: ``,
|
|
37
|
-
SUBTLE_IMPORT: `const { subtle } = crypto`
|
|
38
|
-
}),
|
|
39
|
-
// lint({
|
|
40
|
-
// fix: true,
|
|
41
|
-
// exclude: ['package.json', "package-lock.json"]
|
|
42
|
-
// })
|
|
43
|
-
]
|
|
44
|
-
}, {
|
|
45
|
-
input: 'src/peernet.js',
|
|
46
|
-
output: {
|
|
47
|
-
file: 'dist/module/peernet.js',
|
|
28
|
+
dir: 'dist/module',
|
|
48
29
|
format: 'es'
|
|
49
30
|
},
|
|
50
31
|
plugins: [
|
package/src/handlers/message.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import MultiWallet from '
|
|
2
|
-
import { CodecHash
|
|
3
|
-
import PeernetMessage from './../messages/peernet-message.js'
|
|
1
|
+
import MultiWallet from '@leofcoin/multi-wallet'
|
|
2
|
+
import { CodecHash } from '@leofcoin/codec-format-interface'
|
|
4
3
|
|
|
5
4
|
export default class MessageHandler {
|
|
6
5
|
constructor(network) {
|
|
@@ -17,7 +16,7 @@ export default class MessageHandler {
|
|
|
17
16
|
* @return signature
|
|
18
17
|
*/
|
|
19
18
|
async hashAndSignMessage(message) {
|
|
20
|
-
const hasher = new
|
|
19
|
+
const hasher = new CodecHash(message, {name: 'peernet-message'})
|
|
21
20
|
let identity = await walletStore.get('identity')
|
|
22
21
|
identity = JSON.parse(new TextDecoder().decode(identity))
|
|
23
22
|
const wallet = new MultiWallet(this.network)
|
|
@@ -40,7 +39,7 @@ export default class MessageHandler {
|
|
|
40
39
|
data,
|
|
41
40
|
}
|
|
42
41
|
const signature = await this.hashAndSignMessage(message)
|
|
43
|
-
const node = await new
|
|
42
|
+
const node = await new globalThis.peernet.protos['peernet-message']({
|
|
44
43
|
...message,
|
|
45
44
|
signature,
|
|
46
45
|
})
|
|
File without changes
|
|
File without changes
|
package/src/messages.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { default as PeernetMessage } from './messages/peernet.js'
|
|
2
|
+
export { default as DHTMessage } from './messages/dht.js'
|
|
3
|
+
export { default as DHTMessageResponse } from './messages/dht-response.js'
|
|
4
|
+
export { default as DataMessage } from './messages/data.js'
|
|
5
|
+
export { default as PsMessage } from './messages/ps.js'
|
|
6
|
+
export { default as PeerMessage } from './messages/peer.js'
|
|
7
|
+
export { default as RequestMessage } from './messages/request.js'
|
|
8
|
+
export { default as ResponseMessage } from './messages/response.js'
|
|
9
|
+
export { default as PeerMessageResponse } from './messages/peer-response.js'
|
|
10
|
+
export { default as DataMessageResponse } from './messages/data-response.js'
|
|
11
|
+
export { default as ChatMessage } from './messages/chat.js'
|
package/src/peernet.js
CHANGED
|
@@ -1,28 +1,16 @@
|
|
|
1
1
|
import '@vandeurenglenn/debug'
|
|
2
|
-
import
|
|
3
|
-
import LeofcoinStorage from '@leofcoin/storage'
|
|
4
|
-
import PeernetMessage from './messages/peernet-message.js'
|
|
5
|
-
import DHTMessage from './messages/dht.js'
|
|
6
|
-
import DHTMessageResponse from './messages/dht-response.js'
|
|
7
|
-
import DataMessage from './messages/data.js'
|
|
8
|
-
import PsMessage from './messages/ps.js'
|
|
9
|
-
import PeerMessage from './messages/peer.js'
|
|
10
|
-
import RequestMessage from './messages/request.js'
|
|
11
|
-
import ResponseMessage from './messages/response.js'
|
|
12
|
-
import PeerMessageResponse from './messages/peer-response.js'
|
|
13
|
-
import DataMessageResponse from './messages/data-response.js'
|
|
14
|
-
import ChatMessage from './messages/chat-message.js'
|
|
2
|
+
import PubSub from '@vandeurenglenn/little-pubsub'
|
|
15
3
|
import PeerDiscovery from './discovery/peer-discovery'
|
|
16
4
|
import DHT from './dht/dht.js'
|
|
17
|
-
import { CodecHash
|
|
5
|
+
import { CodecHash, codecs} from '@leofcoin/codec-format-interface'
|
|
18
6
|
import { protoFor, target } from './utils/utils.js'
|
|
19
|
-
import generateAccount from './../node_modules/@leofcoin/generate-account/dist/module/generate-account'
|
|
20
7
|
import MessageHandler from './handlers/message.js'
|
|
21
8
|
import dataHandler from './handlers/data.js'
|
|
22
9
|
import { encapsulatedError, dhtError,
|
|
23
10
|
nothingFoundError } from './errors/errors.js'
|
|
24
11
|
|
|
25
12
|
globalThis.leofcoin = globalThis.leofcoin || {}
|
|
13
|
+
globalThis.pubsub = globalThis.pubsub || new PubSub()
|
|
26
14
|
globalThis.globalSub = globalThis.globalSub || new PubSub({verbose: true})
|
|
27
15
|
|
|
28
16
|
/**
|
|
@@ -69,16 +57,12 @@ export default class Peernet {
|
|
|
69
57
|
return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message']
|
|
70
58
|
}
|
|
71
59
|
|
|
72
|
-
get protos() {
|
|
73
|
-
return globalThis.peernet.protos
|
|
74
|
-
}
|
|
75
|
-
|
|
76
60
|
get codecs() {
|
|
77
61
|
return codecs
|
|
78
62
|
}
|
|
79
63
|
|
|
80
64
|
addProto(name, proto) {
|
|
81
|
-
if (!
|
|
65
|
+
if (!globalThis.peernet.protos[name]) globalThis.peernet.protos[name] = proto
|
|
82
66
|
}
|
|
83
67
|
|
|
84
68
|
addCodec(name, codec) {
|
|
@@ -86,6 +70,10 @@ export default class Peernet {
|
|
|
86
70
|
}
|
|
87
71
|
|
|
88
72
|
async addStore(name, prefix, root, isPrivate = true) {
|
|
73
|
+
if (!globalThis.LeofcoinStorage) {
|
|
74
|
+
const importee = await import(/* webpackChunkName: "storage" */ '@leofcoin/storage')
|
|
75
|
+
globalThis.LeofcoinStorage = importee.default
|
|
76
|
+
}
|
|
89
77
|
if (name === 'block' || name === 'transaction' || name === 'chain' ||
|
|
90
78
|
name === 'data' || name === 'message') isPrivate = false
|
|
91
79
|
|
|
@@ -93,7 +81,7 @@ export default class Peernet {
|
|
|
93
81
|
if (this.hasDaemon) {
|
|
94
82
|
Storage = LeofcoinStorageClient
|
|
95
83
|
} else {
|
|
96
|
-
Storage =
|
|
84
|
+
Storage = LeofcoinStorage
|
|
97
85
|
}
|
|
98
86
|
globalThis[`${name}Store`] = globalThis[`${name}Store`] ||
|
|
99
87
|
await new Storage(name, root)
|
|
@@ -158,6 +146,20 @@ export default class Peernet {
|
|
|
158
146
|
this.storePrefix = options.storePrefix
|
|
159
147
|
this.root = options.root
|
|
160
148
|
|
|
149
|
+
const {
|
|
150
|
+
RequestMessage,
|
|
151
|
+
ResponseMessage,
|
|
152
|
+
PeerMessage,
|
|
153
|
+
PeerMessageResponse,
|
|
154
|
+
PeernetMessage,
|
|
155
|
+
DHTMessage,
|
|
156
|
+
DHTMessageResponse,
|
|
157
|
+
DataMessage,
|
|
158
|
+
DataMessageResponse,
|
|
159
|
+
PsMessage,
|
|
160
|
+
ChatMessage
|
|
161
|
+
} = await import(/* webpackChunkName: "messages" */ './messages.js')
|
|
162
|
+
|
|
161
163
|
/**
|
|
162
164
|
* proto Object containing protos
|
|
163
165
|
* @type {Object}
|
|
@@ -167,6 +169,7 @@ export default class Peernet {
|
|
|
167
169
|
* @property {DataMessage} protos[peernet-data] messageNode
|
|
168
170
|
* @property {DataMessageResponse} protos[peernet-data-response] messageNode
|
|
169
171
|
*/
|
|
172
|
+
|
|
170
173
|
globalThis.peernet.protos = {
|
|
171
174
|
'peernet-request': RequestMessage,
|
|
172
175
|
'peernet-response': ResponseMessage,
|
|
@@ -205,6 +208,9 @@ export default class Peernet {
|
|
|
205
208
|
}
|
|
206
209
|
} catch (e) {
|
|
207
210
|
if (e.code === 'ERR_NOT_FOUND') {
|
|
211
|
+
|
|
212
|
+
const importee = await import(/* webpackChunkName: "generate-account" */ '@leofcoin/generate-account')
|
|
213
|
+
const generateAccount = importee.default
|
|
208
214
|
const wallet = {}
|
|
209
215
|
const {identity, accounts, config} = await generateAccount(this.network)
|
|
210
216
|
walletStore.put('version', new TextEncoder().encode(1))
|
|
@@ -238,11 +244,13 @@ export default class Peernet {
|
|
|
238
244
|
*/
|
|
239
245
|
pubsub.subscribe('peer:data', dataHandler)
|
|
240
246
|
|
|
247
|
+
|
|
248
|
+
const importee = await import(/* webpackChunkName: "peernet-swarm" */ '@leofcoin/peernet-swarm')
|
|
241
249
|
/**
|
|
242
250
|
* @access public
|
|
243
251
|
* @type {PeernetClient}
|
|
244
252
|
*/
|
|
245
|
-
this.client = new
|
|
253
|
+
this.client = new importee.default(this.id)
|
|
246
254
|
if (globalThis.onbeforeunload) {
|
|
247
255
|
globalThis.addEventListener('beforeunload', async () => this.client.close());
|
|
248
256
|
}
|
|
@@ -284,7 +292,7 @@ export default class Peernet {
|
|
|
284
292
|
if (store.private) has = false
|
|
285
293
|
else has = await store.has(hash)
|
|
286
294
|
}
|
|
287
|
-
const data = await new
|
|
295
|
+
const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has})
|
|
288
296
|
const node = await this.prepareMessage(from, data.encoded)
|
|
289
297
|
|
|
290
298
|
this.sendMessage(peer, id, node.encoded)
|
|
@@ -300,7 +308,7 @@ export default class Peernet {
|
|
|
300
308
|
data = await store.get(hash)
|
|
301
309
|
|
|
302
310
|
if (data) {
|
|
303
|
-
data = await new
|
|
311
|
+
data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
|
|
304
312
|
|
|
305
313
|
const node = await this.prepareMessage(from, data.encoded)
|
|
306
314
|
this.sendMessage(peer, id, node.encoded)
|
|
@@ -329,7 +337,7 @@ export default class Peernet {
|
|
|
329
337
|
*/
|
|
330
338
|
async walk(hash) {
|
|
331
339
|
if (!hash) throw new Error('hash expected, received undefined')
|
|
332
|
-
const data = await new
|
|
340
|
+
const data = await new globalThis.peernet.protos['peernet-dht']({hash})
|
|
333
341
|
const clientId = this.client.id
|
|
334
342
|
const walk = async peer => {
|
|
335
343
|
const node = await this.prepareMessage(peer.peerId, data.encoded)
|
|
@@ -437,7 +445,7 @@ export default class Peernet {
|
|
|
437
445
|
if (peer.peerId === id) return peer
|
|
438
446
|
})
|
|
439
447
|
|
|
440
|
-
let data = await new
|
|
448
|
+
let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
|
|
441
449
|
|
|
442
450
|
const node = await this.prepareMessage(id, data.encoded)
|
|
443
451
|
if (closest[0]) data = await closest[0].request(node.encoded)
|
|
@@ -583,7 +591,7 @@ export default class Peernet {
|
|
|
583
591
|
if (topic instanceof Uint8Array === false) topic = new TextEncoder().encode(topic)
|
|
584
592
|
if (data instanceof Uint8Array === false) data = new TextEncoder().encode(JSON.stringify(data))
|
|
585
593
|
const id = Math.random().toString(36).slice(-12)
|
|
586
|
-
data = await new
|
|
594
|
+
data = await new globalThis.peernet.protos['peernet-ps']({data, topic})
|
|
587
595
|
for (const peer of this.connections) {
|
|
588
596
|
if (peer.peerId !== this.peerId) {
|
|
589
597
|
const node = await this.prepareMessage(peer.peerId, data.encoded)
|
|
@@ -594,7 +602,7 @@ export default class Peernet {
|
|
|
594
602
|
}
|
|
595
603
|
|
|
596
604
|
createHash(data, name) {
|
|
597
|
-
return new
|
|
605
|
+
return new CodeHash(data, {name})
|
|
598
606
|
}
|
|
599
607
|
|
|
600
608
|
/**
|
package/test.js
CHANGED
|
@@ -4,7 +4,7 @@ const client = new Client({root: '.peernet/test'})
|
|
|
4
4
|
|
|
5
5
|
pubsub.subscribe('peer:connected', async peer => {
|
|
6
6
|
chainStore.put('localBlock', '00000')
|
|
7
|
-
const request = new globalThis.peernet.protos['peernet-request']({
|
|
7
|
+
const request = await new globalThis.peernet.protos['peernet-request']({
|
|
8
8
|
request:'lastBlock'
|
|
9
9
|
})
|
|
10
10
|
const to = peer.id
|
|
@@ -19,9 +19,9 @@ pubsub.subscribe('peer:connected', async peer => {
|
|
|
19
19
|
for (const key of keys) {
|
|
20
20
|
uint8Array[Number(key)] = response[key]
|
|
21
21
|
}
|
|
22
|
-
const proto = new globalThis.peernet.protos['peernet-message'](uint8Array)
|
|
22
|
+
const proto = await new globalThis.peernet.protos['peernet-message'](uint8Array)
|
|
23
23
|
console.log(proto.decoded.data);
|
|
24
|
-
response = new globalThis.peernet.protos['peernet-response'](proto.decoded.data)
|
|
24
|
+
response = await new globalThis.peernet.protos['peernet-response'](proto.decoded.data)
|
|
25
25
|
console.log({response});
|
|
26
26
|
|
|
27
27
|
const block = new TextDecoder().decode(response.decoded.response)
|
package/webpack.config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const webpack = require('webpack');
|
|
3
3
|
module.exports = [{
|
|
4
|
-
entry: './
|
|
4
|
+
entry: './src/peernet.js',
|
|
5
5
|
mode: 'production',
|
|
6
6
|
plugins: [
|
|
7
7
|
// Work around for Buffer is undefined:
|
|
@@ -26,6 +26,9 @@ module.exports = [{
|
|
|
26
26
|
optimization: {
|
|
27
27
|
minimize: false
|
|
28
28
|
},
|
|
29
|
+
experiments: {
|
|
30
|
+
outputModule: true
|
|
31
|
+
},
|
|
29
32
|
resolve: {
|
|
30
33
|
extensions: [ '.ts', '.js' ],
|
|
31
34
|
fallback: {
|
|
@@ -41,9 +44,9 @@ resolve: {
|
|
|
41
44
|
},
|
|
42
45
|
output: {
|
|
43
46
|
library: {
|
|
44
|
-
|
|
45
|
-
type: 'global'
|
|
47
|
+
type: 'module'
|
|
46
48
|
},
|
|
49
|
+
chunkFilename: '[name].js',
|
|
47
50
|
filename: 'peernet.js',
|
|
48
51
|
path: path.resolve(__dirname, 'dist', 'browser'),
|
|
49
52
|
},
|