@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/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "@leofcoin/peernet",
3
- "version": "0.12.0",
3
+ "version": "0.12.3",
4
4
  "description": "",
5
5
  "main": "dist/commonjs/peernet.js",
6
- "module": "dist/module/peernet.js",
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.1.0",
27
- "@leofcoin/generate-account": "^1.0.2",
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.1",
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-message.js', 'src/messages/dht-response.js', 'src/messages/request.js',
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/browser/',
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: [
@@ -1,6 +1,5 @@
1
- import MultiWallet from './../../node_modules/@leofcoin/multi-wallet/src/index'
2
- import { CodecHash as Hash } from '@leofcoin/codec-format-interface'
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 Hash(message, {name: 'peernet-message'})
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 PeernetMessage({
42
+ const node = await new globalThis.peernet.protos['peernet-message']({
44
43
  ...message,
45
44
  signature,
46
45
  })
File without changes
File without changes
@@ -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 Client from './../node_modules/@leofcoin/peernet-swarm/dist/es/client.js'
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 as Hash, codecs} from '@leofcoin/codec-format-interface'
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 (!this.protos[name]) this.protos[name] = proto
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 = globalThis.LeofcoinStorage?.default ? globalThis.LeofcoinStorage.default : LeofcoinStorage
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 Client(this.id)
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 DHTMessageResponse({hash, has})
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 DataMessageResponse({hash, data});
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 DHTMessage({hash})
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 DataMessage({hash, store: store?.name ? store?.name : store});
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 PsMessage({data, topic})
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 Hash(data, {name})
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: './dist/browser/peernet.js',
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
- name: 'Peernet',
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
  },