@leofcoin/peernet 0.14.0 → 0.14.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.
@@ -334,7 +334,6 @@ exports.ResponseMessage = ResponseMessage;
334
334
  __webpack_require__(307);
335
335
  var PubSub = __webpack_require__(37);
336
336
  var codecFormatInterface = __webpack_require__(427);
337
- var MultiWallet = __webpack_require__(755);
338
337
 
339
338
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
340
339
 
@@ -357,9 +356,9 @@ function _interopNamespace(e) {
357
356
  }
358
357
 
359
358
  var PubSub__default = /*#__PURE__*/_interopDefaultLegacy(PubSub);
360
- var MultiWallet__default = /*#__PURE__*/_interopDefaultLegacy(MultiWallet);
361
359
 
362
360
  const protoFor = (data) => {
361
+ console.log(data);
363
362
  if (!Buffer.isBuffer(data)) data = Buffer.from(data);
364
363
  const codec = new codecFormatInterface.Codec(data);
365
364
  if (!codec.name) throw new Error('proto not found')
@@ -710,15 +709,19 @@ class MessageHandler {
710
709
  * @param {Buffer} message.to peer id
711
710
  * @param {string} message.data Peernet message
712
711
  * (PeernetMessage excluded) encoded as a string
713
- * @return signature
712
+ * @return message
714
713
  */
715
714
  async hashAndSignMessage(message) {
716
- const hasher = new codecFormatInterface.CodecHash(message, {name: 'peernet-message'});
717
715
  let identity = await walletStore.get('identity');
718
- identity = JSON.parse(new TextDecoder().decode(identity));
719
- const wallet = new MultiWallet__default["default"](this.network);
716
+ identity = JSON.parse(identity);
717
+ if (!globalThis.MultiWallet) {
718
+ const importee = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(__webpack_require__(/* webpackChunkName: "multi-wallet" */ 755)); });
719
+ globalThis.MultiWallet = importee.default;
720
+ }
721
+ const wallet = new MultiWallet(this.network);
720
722
  wallet.recover(identity.mnemonic);
721
- return wallet.sign(Buffer.from(hasher.hash).slice(0, 32))
723
+ message.decoded.signature = wallet.sign(Buffer.from(await message.hash).slice(0, 32));
724
+ return message
722
725
  }
723
726
 
724
727
  /**
@@ -727,21 +730,12 @@ class MessageHandler {
727
730
  * @param {String|PeernetMessage} data - data encoded message string
728
731
  * or the messageNode itself
729
732
  */
730
- async prepareMessage(from, to, data, id) {
731
- if (data.encoded) data = data.encoded;
732
-
733
- const message = {
734
- from,
735
- to,
736
- data,
737
- };
738
- const signature = await this.hashAndSignMessage(message);
739
- const node = await new globalThis.peernet.protos['peernet-message']({
740
- ...message,
741
- signature,
742
- });
733
+ async prepareMessage(message) {
734
+ if (message.keys.indexOf('signature') !== -1) {
735
+ message = await this.hashAndSignMessage(message);
736
+ }
743
737
 
744
- return node
738
+ return message
745
739
  }
746
740
  }
747
741
 
@@ -749,8 +743,10 @@ const dataHandler = async message => {
749
743
  if (!message) return
750
744
 
751
745
  const {data, id} = message;
752
-
746
+ console.log({data});
753
747
  message = await protoFor(data);
748
+ console.log(message.decoded.data);
749
+ console.log({message});
754
750
  const proto = await protoFor(message.decoded.data);
755
751
  const from = message.decoded.from;
756
752
 
@@ -855,8 +851,8 @@ class Peernet {
855
851
  /**
856
852
  * @see MessageHandler
857
853
  */
858
- prepareMessage(to, data) {
859
- return this._messageHandler.prepareMessage(this.id, to, data)
854
+ prepareMessage(data) {
855
+ return this._messageHandler.prepareMessage(data)
860
856
  }
861
857
 
862
858
  /**
@@ -1052,7 +1048,7 @@ class Peernet {
1052
1048
  else has = await store.has(hash);
1053
1049
  }
1054
1050
  const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has});
1055
- const node = await this.prepareMessage(from, data.encoded);
1051
+ const node = await this.prepareMessage(data);
1056
1052
 
1057
1053
  this.sendMessage(peer, id, node.encoded);
1058
1054
  } else if (proto.name === 'peernet-data') {
@@ -1069,7 +1065,7 @@ class Peernet {
1069
1065
  if (data) {
1070
1066
  data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
1071
1067
 
1072
- const node = await this.prepareMessage(from, data.encoded);
1068
+ const node = await this.prepareMessage(data);
1073
1069
  this.sendMessage(peer, id, node.encoded);
1074
1070
  }
1075
1071
  }
@@ -1078,7 +1074,7 @@ class Peernet {
1078
1074
  const method = this.requestProtos[proto.decoded.request];
1079
1075
  if (method) {
1080
1076
  const data = await method();
1081
- const node = await this.prepareMessage(from, data.encoded);
1077
+ const node = await this.prepareMessage(data);
1082
1078
  this.sendMessage(peer, id, node.encoded);
1083
1079
  }
1084
1080
  } else if (proto.name === 'peernet-ps' && peer.peerId !== this.id) {
@@ -1097,7 +1093,7 @@ class Peernet {
1097
1093
  const data = await new globalThis.peernet.protos['peernet-dht']({hash});
1098
1094
  this.client.id;
1099
1095
  const walk = async peer => {
1100
- const node = await this.prepareMessage(peer.peerId, data.encoded);
1096
+ const node = await this.prepareMessage(data);
1101
1097
  let result = await peer.request(node.encoded);
1102
1098
  result = new Uint8Array(Object.values(result));
1103
1099
  let proto = await protoFor(result);
@@ -1204,7 +1200,7 @@ class Peernet {
1204
1200
 
1205
1201
  let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
1206
1202
 
1207
- const node = await this.prepareMessage(id, data.encoded);
1203
+ const node = await this.prepareMessage(data);
1208
1204
  if (closest[0]) data = await closest[0].request(node.encoded);
1209
1205
  else {
1210
1206
  closest = this.connections.filter((peer) => {
@@ -1330,6 +1326,8 @@ class Peernet {
1330
1326
  else data = await this.requestData(hash, 'data');
1331
1327
 
1332
1328
  const node = await new peernet.protos['peernet-file'](data);
1329
+ await node.decode();
1330
+ console.log(data);
1333
1331
  const paths = [];
1334
1332
  if (node.decoded?.links.length === 0) throw new Error(`${hash} is a file`)
1335
1333
  for (const {path, hash} of node.decoded.links) {
@@ -1421,7 +1419,7 @@ class Peernet {
1421
1419
  data = await new globalThis.peernet.protos['peernet-ps']({data, topic});
1422
1420
  for (const peer of this.connections) {
1423
1421
  if (peer.peerId !== this.peerId) {
1424
- const node = await this.prepareMessage(peer.peerId, data.encoded);
1422
+ const node = await this.prepareMessage(data);
1425
1423
  this.sendMessage(peer, id, node.encoded);
1426
1424
  }
1427
1425
  // TODO: if peer subscribed
@@ -1987,12 +1985,17 @@ class FormatInterface$1 extends BasicInterface$1 {
1987
1985
  * @return {Buffer}
1988
1986
  */
1989
1987
  async encode(decoded) {
1988
+ let encoded;
1990
1989
  if (!decoded) decoded = this.decoded;
1991
1990
  const codec = new PeernetCodec(this.name);
1992
- const encoded = await this.protoEncode(typeof decoded === 'object' ? JSON.stringify(decoded) : decoded);
1991
+
1992
+ if (decoded instanceof Uint8Array) encoded = decoded;
1993
+ else encoded = await this.protoEncode(typeof decoded === 'object' ? JSON.stringify(decoded) : decoded);
1994
+
1993
1995
  const uint8Array = new Uint8Array(encoded.length + codec.codecBuffer.length);
1994
1996
  uint8Array.set(codec.codecBuffer);
1995
1997
  uint8Array.set(encoded, codec.codecBuffer.length);
1998
+
1996
1999
  this.encoded = uint8Array;
1997
2000
  return this.encoded
1998
2001
  }
@@ -4,7 +4,6 @@ require('@vandeurenglenn/debug');
4
4
  var PubSub = require('@vandeurenglenn/little-pubsub');
5
5
  var fetch = require('node-fetch');
6
6
  var codecFormatInterface = require('@leofcoin/codec-format-interface');
7
- var MultiWallet = require('@leofcoin/multi-wallet');
8
7
 
9
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
9
 
@@ -28,9 +27,9 @@ function _interopNamespace(e) {
28
27
 
29
28
  var PubSub__default = /*#__PURE__*/_interopDefaultLegacy(PubSub);
30
29
  var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
31
- var MultiWallet__default = /*#__PURE__*/_interopDefaultLegacy(MultiWallet);
32
30
 
33
31
  const protoFor = (data) => {
32
+ console.log(data);
34
33
  if (!Buffer.isBuffer(data)) data = Buffer.from(data);
35
34
  const codec = new codecFormatInterface.Codec(data);
36
35
  if (!codec.name) throw new Error('proto not found')
@@ -381,15 +380,19 @@ class MessageHandler {
381
380
  * @param {Buffer} message.to peer id
382
381
  * @param {string} message.data Peernet message
383
382
  * (PeernetMessage excluded) encoded as a string
384
- * @return signature
383
+ * @return message
385
384
  */
386
385
  async hashAndSignMessage(message) {
387
- const hasher = new codecFormatInterface.CodecHash(message, {name: 'peernet-message'});
388
386
  let identity = await walletStore.get('identity');
389
- identity = JSON.parse(new TextDecoder().decode(identity));
390
- const wallet = new MultiWallet__default["default"](this.network);
387
+ identity = JSON.parse(identity);
388
+ if (!globalThis.MultiWallet) {
389
+ const importee = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "multi-wallet" */ '@leofcoin/multi-wallet')); });
390
+ globalThis.MultiWallet = importee.default;
391
+ }
392
+ const wallet = new MultiWallet(this.network);
391
393
  wallet.recover(identity.mnemonic);
392
- return wallet.sign(Buffer.from(hasher.hash).slice(0, 32))
394
+ message.decoded.signature = wallet.sign(Buffer.from(await message.hash).slice(0, 32));
395
+ return message
393
396
  }
394
397
 
395
398
  /**
@@ -398,21 +401,12 @@ class MessageHandler {
398
401
  * @param {String|PeernetMessage} data - data encoded message string
399
402
  * or the messageNode itself
400
403
  */
401
- async prepareMessage(from, to, data, id) {
402
- if (data.encoded) data = data.encoded;
403
-
404
- const message = {
405
- from,
406
- to,
407
- data,
408
- };
409
- const signature = await this.hashAndSignMessage(message);
410
- const node = await new globalThis.peernet.protos['peernet-message']({
411
- ...message,
412
- signature,
413
- });
404
+ async prepareMessage(message) {
405
+ if (message.keys.indexOf('signature') !== -1) {
406
+ message = await this.hashAndSignMessage(message);
407
+ }
414
408
 
415
- return node
409
+ return message
416
410
  }
417
411
  }
418
412
 
@@ -420,8 +414,10 @@ const dataHandler = async message => {
420
414
  if (!message) return
421
415
 
422
416
  const {data, id} = message;
423
-
417
+ console.log({data});
424
418
  message = await protoFor(data);
419
+ console.log(message.decoded.data);
420
+ console.log({message});
425
421
  const proto = await protoFor(message.decoded.data);
426
422
  const from = message.decoded.from;
427
423
 
@@ -526,8 +522,8 @@ class Peernet {
526
522
  /**
527
523
  * @see MessageHandler
528
524
  */
529
- prepareMessage(to, data) {
530
- return this._messageHandler.prepareMessage(this.id, to, data)
525
+ prepareMessage(data) {
526
+ return this._messageHandler.prepareMessage(data)
531
527
  }
532
528
 
533
529
  /**
@@ -723,7 +719,7 @@ class Peernet {
723
719
  else has = await store.has(hash);
724
720
  }
725
721
  const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has});
726
- const node = await this.prepareMessage(from, data.encoded);
722
+ const node = await this.prepareMessage(data);
727
723
 
728
724
  this.sendMessage(peer, id, node.encoded);
729
725
  } else if (proto.name === 'peernet-data') {
@@ -740,7 +736,7 @@ class Peernet {
740
736
  if (data) {
741
737
  data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
742
738
 
743
- const node = await this.prepareMessage(from, data.encoded);
739
+ const node = await this.prepareMessage(data);
744
740
  this.sendMessage(peer, id, node.encoded);
745
741
  }
746
742
  }
@@ -749,7 +745,7 @@ class Peernet {
749
745
  const method = this.requestProtos[proto.decoded.request];
750
746
  if (method) {
751
747
  const data = await method();
752
- const node = await this.prepareMessage(from, data.encoded);
748
+ const node = await this.prepareMessage(data);
753
749
  this.sendMessage(peer, id, node.encoded);
754
750
  }
755
751
  } else if (proto.name === 'peernet-ps' && peer.peerId !== this.id) {
@@ -768,7 +764,7 @@ class Peernet {
768
764
  const data = await new globalThis.peernet.protos['peernet-dht']({hash});
769
765
  this.client.id;
770
766
  const walk = async peer => {
771
- const node = await this.prepareMessage(peer.peerId, data.encoded);
767
+ const node = await this.prepareMessage(data);
772
768
  let result = await peer.request(node.encoded);
773
769
  result = new Uint8Array(Object.values(result));
774
770
  let proto = await protoFor(result);
@@ -875,7 +871,7 @@ class Peernet {
875
871
 
876
872
  let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
877
873
 
878
- const node = await this.prepareMessage(id, data.encoded);
874
+ const node = await this.prepareMessage(data);
879
875
  if (closest[0]) data = await closest[0].request(node.encoded);
880
876
  else {
881
877
  closest = this.connections.filter((peer) => {
@@ -1001,6 +997,8 @@ class Peernet {
1001
997
  else data = await this.requestData(hash, 'data');
1002
998
 
1003
999
  const node = await new peernet.protos['peernet-file'](data);
1000
+ await node.decode();
1001
+ console.log(data);
1004
1002
  const paths = [];
1005
1003
  if (node.decoded?.links.length === 0) throw new Error(`${hash} is a file`)
1006
1004
  for (const {path, hash} of node.decoded.links) {
@@ -1092,7 +1090,7 @@ class Peernet {
1092
1090
  data = await new globalThis.peernet.protos['peernet-ps']({data, topic});
1093
1091
  for (const peer of this.connections) {
1094
1092
  if (peer.peerId !== this.peerId) {
1095
- const node = await this.prepareMessage(peer.peerId, data.encoded);
1093
+ const node = await this.prepareMessage(data);
1096
1094
  this.sendMessage(peer, id, node.encoded);
1097
1095
  }
1098
1096
  // TODO: if peer subscribed
@@ -3,7 +3,6 @@
3
3
  require('@vandeurenglenn/debug');
4
4
  var PubSub = require('@vandeurenglenn/little-pubsub');
5
5
  var codecFormatInterface = require('@leofcoin/codec-format-interface');
6
- var MultiWallet = require('@leofcoin/multi-wallet');
7
6
 
8
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
8
 
@@ -26,9 +25,9 @@ function _interopNamespace(e) {
26
25
  }
27
26
 
28
27
  var PubSub__default = /*#__PURE__*/_interopDefaultLegacy(PubSub);
29
- var MultiWallet__default = /*#__PURE__*/_interopDefaultLegacy(MultiWallet);
30
28
 
31
29
  const protoFor = (data) => {
30
+ console.log(data);
32
31
  if (!Buffer.isBuffer(data)) data = Buffer.from(data);
33
32
  const codec = new codecFormatInterface.Codec(data);
34
33
  if (!codec.name) throw new Error('proto not found')
@@ -379,15 +378,19 @@ class MessageHandler {
379
378
  * @param {Buffer} message.to peer id
380
379
  * @param {string} message.data Peernet message
381
380
  * (PeernetMessage excluded) encoded as a string
382
- * @return signature
381
+ * @return message
383
382
  */
384
383
  async hashAndSignMessage(message) {
385
- const hasher = new codecFormatInterface.CodecHash(message, {name: 'peernet-message'});
386
384
  let identity = await walletStore.get('identity');
387
- identity = JSON.parse(new TextDecoder().decode(identity));
388
- const wallet = new MultiWallet__default["default"](this.network);
385
+ identity = JSON.parse(identity);
386
+ if (!globalThis.MultiWallet) {
387
+ const importee = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackChunkName: "multi-wallet" */ '@leofcoin/multi-wallet')); });
388
+ globalThis.MultiWallet = importee.default;
389
+ }
390
+ const wallet = new MultiWallet(this.network);
389
391
  wallet.recover(identity.mnemonic);
390
- return wallet.sign(Buffer.from(hasher.hash).slice(0, 32))
392
+ message.decoded.signature = wallet.sign(Buffer.from(await message.hash).slice(0, 32));
393
+ return message
391
394
  }
392
395
 
393
396
  /**
@@ -396,21 +399,12 @@ class MessageHandler {
396
399
  * @param {String|PeernetMessage} data - data encoded message string
397
400
  * or the messageNode itself
398
401
  */
399
- async prepareMessage(from, to, data, id) {
400
- if (data.encoded) data = data.encoded;
401
-
402
- const message = {
403
- from,
404
- to,
405
- data,
406
- };
407
- const signature = await this.hashAndSignMessage(message);
408
- const node = await new globalThis.peernet.protos['peernet-message']({
409
- ...message,
410
- signature,
411
- });
402
+ async prepareMessage(message) {
403
+ if (message.keys.indexOf('signature') !== -1) {
404
+ message = await this.hashAndSignMessage(message);
405
+ }
412
406
 
413
- return node
407
+ return message
414
408
  }
415
409
  }
416
410
 
@@ -418,8 +412,10 @@ const dataHandler = async message => {
418
412
  if (!message) return
419
413
 
420
414
  const {data, id} = message;
421
-
415
+ console.log({data});
422
416
  message = await protoFor(data);
417
+ console.log(message.decoded.data);
418
+ console.log({message});
423
419
  const proto = await protoFor(message.decoded.data);
424
420
  const from = message.decoded.from;
425
421
 
@@ -524,8 +520,8 @@ class Peernet {
524
520
  /**
525
521
  * @see MessageHandler
526
522
  */
527
- prepareMessage(to, data) {
528
- return this._messageHandler.prepareMessage(this.id, to, data)
523
+ prepareMessage(data) {
524
+ return this._messageHandler.prepareMessage(data)
529
525
  }
530
526
 
531
527
  /**
@@ -721,7 +717,7 @@ class Peernet {
721
717
  else has = await store.has(hash);
722
718
  }
723
719
  const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has});
724
- const node = await this.prepareMessage(from, data.encoded);
720
+ const node = await this.prepareMessage(data);
725
721
 
726
722
  this.sendMessage(peer, id, node.encoded);
727
723
  } else if (proto.name === 'peernet-data') {
@@ -738,7 +734,7 @@ class Peernet {
738
734
  if (data) {
739
735
  data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
740
736
 
741
- const node = await this.prepareMessage(from, data.encoded);
737
+ const node = await this.prepareMessage(data);
742
738
  this.sendMessage(peer, id, node.encoded);
743
739
  }
744
740
  }
@@ -747,7 +743,7 @@ class Peernet {
747
743
  const method = this.requestProtos[proto.decoded.request];
748
744
  if (method) {
749
745
  const data = await method();
750
- const node = await this.prepareMessage(from, data.encoded);
746
+ const node = await this.prepareMessage(data);
751
747
  this.sendMessage(peer, id, node.encoded);
752
748
  }
753
749
  } else if (proto.name === 'peernet-ps' && peer.peerId !== this.id) {
@@ -766,7 +762,7 @@ class Peernet {
766
762
  const data = await new globalThis.peernet.protos['peernet-dht']({hash});
767
763
  this.client.id;
768
764
  const walk = async peer => {
769
- const node = await this.prepareMessage(peer.peerId, data.encoded);
765
+ const node = await this.prepareMessage(data);
770
766
  let result = await peer.request(node.encoded);
771
767
  result = new Uint8Array(Object.values(result));
772
768
  let proto = await protoFor(result);
@@ -873,7 +869,7 @@ class Peernet {
873
869
 
874
870
  let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
875
871
 
876
- const node = await this.prepareMessage(id, data.encoded);
872
+ const node = await this.prepareMessage(data);
877
873
  if (closest[0]) data = await closest[0].request(node.encoded);
878
874
  else {
879
875
  closest = this.connections.filter((peer) => {
@@ -999,6 +995,8 @@ class Peernet {
999
995
  else data = await this.requestData(hash, 'data');
1000
996
 
1001
997
  const node = await new peernet.protos['peernet-file'](data);
998
+ await node.decode();
999
+ console.log(data);
1002
1000
  const paths = [];
1003
1001
  if (node.decoded?.links.length === 0) throw new Error(`${hash} is a file`)
1004
1002
  for (const {path, hash} of node.decoded.links) {
@@ -1090,7 +1088,7 @@ class Peernet {
1090
1088
  data = await new globalThis.peernet.protos['peernet-ps']({data, topic});
1091
1089
  for (const peer of this.connections) {
1092
1090
  if (peer.peerId !== this.peerId) {
1093
- const node = await this.prepareMessage(peer.peerId, data.encoded);
1091
+ const node = await this.prepareMessage(data);
1094
1092
  this.sendMessage(peer, id, node.encoded);
1095
1093
  }
1096
1094
  // TODO: if peer subscribed
package/index.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <script src="./dist/browser/peernet.js">
9
9
  </script>
10
10
 
11
- <script type="module">
11
+ <script >
12
12
  // import Peernet from './dist/browser/peernet.js';
13
13
  (async () => {
14
14
  const peernet = await new Peernet()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/peernet",
3
- "version": "0.14.0",
3
+ "version": "0.14.3",
4
4
  "description": "",
5
5
  "source": "src/peernet.js",
6
6
  "main": "dist/commonjs/peernet.js",
@@ -28,7 +28,7 @@
28
28
  "license": "MIT",
29
29
  "browserslist": "> 5%, last 2 versions, not dead",
30
30
  "dependencies": {
31
- "@leofcoin/codec-format-interface": "^1.2.5",
31
+ "@leofcoin/codec-format-interface": "^1.4.0",
32
32
  "@leofcoin/generate-account": "^1.0.4",
33
33
  "@leofcoin/multi-wallet": "^2.1.2",
34
34
  "@leofcoin/peernet-swarm": "^0.3.3",
package/rollup.config.js CHANGED
@@ -27,7 +27,8 @@ export default [{
27
27
  input: 'src/peernet.js',
28
28
  output: {
29
29
  dir: 'dist/module',
30
- format: 'cjs'
30
+ format: 'cjs',
31
+ externals: ["@leofcoin/storage"]
31
32
  },
32
33
  plugins: [
33
34
  json(),
@@ -4,8 +4,10 @@ const dataHandler = async message => {
4
4
  if (!message) return
5
5
 
6
6
  const {data, id} = message
7
-
7
+ console.log({data});
8
8
  message = await protoFor(data)
9
+ console.log(message.decoded.data);
10
+ console.log({message});
9
11
  const proto = await protoFor(message.decoded.data)
10
12
  const from = message.decoded.from
11
13
 
@@ -1,4 +1,3 @@
1
- import MultiWallet from '@leofcoin/multi-wallet'
2
1
  import { CodecHash } from '@leofcoin/codec-format-interface'
3
2
 
4
3
  export default class MessageHandler {
@@ -13,15 +12,19 @@ export default class MessageHandler {
13
12
  * @param {Buffer} message.to peer id
14
13
  * @param {string} message.data Peernet message
15
14
  * (PeernetMessage excluded) encoded as a string
16
- * @return signature
15
+ * @return message
17
16
  */
18
17
  async hashAndSignMessage(message) {
19
- const hasher = new CodecHash(message, {name: 'peernet-message'})
20
18
  let identity = await walletStore.get('identity')
21
- identity = JSON.parse(new TextDecoder().decode(identity))
19
+ identity = JSON.parse(identity)
20
+ if (!globalThis.MultiWallet) {
21
+ const importee = await import(/* webpackChunkName: "multi-wallet" */ '@leofcoin/multi-wallet')
22
+ globalThis.MultiWallet = importee.default
23
+ }
22
24
  const wallet = new MultiWallet(this.network)
23
25
  wallet.recover(identity.mnemonic)
24
- return wallet.sign(Buffer.from(hasher.hash).slice(0, 32))
26
+ message.decoded.signature = wallet.sign(Buffer.from(await message.hash).slice(0, 32))
27
+ return message
25
28
  }
26
29
 
27
30
  /**
@@ -30,20 +33,11 @@ export default class MessageHandler {
30
33
  * @param {String|PeernetMessage} data - data encoded message string
31
34
  * or the messageNode itself
32
35
  */
33
- async prepareMessage(from, to, data, id) {
34
- if (data.encoded) data = data.encoded
35
-
36
- const message = {
37
- from,
38
- to,
39
- data,
36
+ async prepareMessage(message) {
37
+ if (message.keys.indexOf('signature') !== -1) {
38
+ message = await this.hashAndSignMessage(message)
40
39
  }
41
- const signature = await this.hashAndSignMessage(message)
42
- const node = await new globalThis.peernet.protos['peernet-message']({
43
- ...message,
44
- signature,
45
- })
46
40
 
47
- return node
41
+ return message
48
42
  }
49
43
  }
package/src/peernet.js CHANGED
@@ -94,8 +94,8 @@ export default class Peernet {
94
94
  /**
95
95
  * @see MessageHandler
96
96
  */
97
- prepareMessage(to, data) {
98
- return this._messageHandler.prepareMessage(this.id, to, data)
97
+ prepareMessage(data) {
98
+ return this._messageHandler.prepareMessage(data)
99
99
  }
100
100
 
101
101
  /**
@@ -293,7 +293,7 @@ export default class Peernet {
293
293
  else has = await store.has(hash)
294
294
  }
295
295
  const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has})
296
- const node = await this.prepareMessage(from, data.encoded)
296
+ const node = await this.prepareMessage(data)
297
297
 
298
298
  this.sendMessage(peer, id, node.encoded)
299
299
  } else if (proto.name === 'peernet-data') {
@@ -310,7 +310,7 @@ export default class Peernet {
310
310
  if (data) {
311
311
  data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
312
312
 
313
- const node = await this.prepareMessage(from, data.encoded)
313
+ const node = await this.prepareMessage(data)
314
314
  this.sendMessage(peer, id, node.encoded)
315
315
  }
316
316
  } else {
@@ -321,7 +321,7 @@ export default class Peernet {
321
321
  const method = this.requestProtos[proto.decoded.request]
322
322
  if (method) {
323
323
  const data = await method()
324
- const node = await this.prepareMessage(from, data.encoded)
324
+ const node = await this.prepareMessage(data)
325
325
  this.sendMessage(peer, id, node.encoded)
326
326
  }
327
327
  } else if (proto.name === 'peernet-ps' && peer.peerId !== this.id) {
@@ -340,7 +340,7 @@ export default class Peernet {
340
340
  const data = await new globalThis.peernet.protos['peernet-dht']({hash})
341
341
  const clientId = this.client.id
342
342
  const walk = async peer => {
343
- const node = await this.prepareMessage(peer.peerId, data.encoded)
343
+ const node = await this.prepareMessage(data)
344
344
  let result = await peer.request(node.encoded)
345
345
  result = new Uint8Array(Object.values(result))
346
346
  let proto = await protoFor(result)
@@ -447,7 +447,7 @@ export default class Peernet {
447
447
 
448
448
  let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
449
449
 
450
- const node = await this.prepareMessage(id, data.encoded)
450
+ const node = await this.prepareMessage(data)
451
451
  if (closest[0]) data = await closest[0].request(node.encoded)
452
452
  else {
453
453
  closest = this.connections.filter((peer) => {
@@ -573,6 +573,8 @@ export default class Peernet {
573
573
  else data = await this.requestData(hash, 'data')
574
574
 
575
575
  const node = await new peernet.protos['peernet-file'](data)
576
+ await node.decode()
577
+ console.log(data);
576
578
  const paths = []
577
579
  if (node.decoded?.links.length === 0) throw new Error(`${hash} is a file`)
578
580
  for (const {path, hash} of node.decoded.links) {
@@ -665,7 +667,7 @@ export default class Peernet {
665
667
  data = await new globalThis.peernet.protos['peernet-ps']({data, topic})
666
668
  for (const peer of this.connections) {
667
669
  if (peer.peerId !== this.peerId) {
668
- const node = await this.prepareMessage(peer.peerId, data.encoded)
670
+ const node = await this.prepareMessage(data)
669
671
  this.sendMessage(peer, id, node.encoded)
670
672
  }
671
673
  // TODO: if peer subscribed
@@ -18,6 +18,7 @@ export const expected = (expected, actual) => {
18
18
  }
19
19
 
20
20
  export const protoFor = (data) => {
21
+ console.log(data);
21
22
  if (!Buffer.isBuffer(data)) data = Buffer.from(data)
22
23
  const codec = new Codec(data)
23
24
  if (!codec.name) throw new Error('proto not found')
package/test.js CHANGED
@@ -4,13 +4,13 @@ const Client = require('./dist/commonjs/peernet.js');
4
4
  (async () => {
5
5
  const client = await new Client({root: '.peernet/test'})
6
6
 
7
- peernet.addFolder([{
8
- path: 'assets/asset.png',
9
- content: Buffer.from('png')
10
- }, {
11
- path: 'index.html',
12
- content: Buffer.from('html')
13
- }]).then(hash => peernet.ls(hash).then(paths => peernet.cat(paths[0].hash).then(content => console.log(content))))
7
+ // peernet.addFolder([{
8
+ // path: 'assets/asset.png',
9
+ // content: Buffer.from('png')
10
+ // }, {
11
+ // path: 'index.html',
12
+ // content: Buffer.from('html')
13
+ // }]).then(hash => peernet.ls(hash).then(paths => peernet.cat(paths[0].hash).then(content => console.log(content))))
14
14
 
15
15
  pubsub.subscribe('peer:connected', async peer => {
16
16
  chainStore.put('localBlock', '00000')
@@ -19,8 +19,8 @@ const Client = require('./dist/commonjs/peernet.js');
19
19
  })
20
20
  const to = peer.id
21
21
  await peernet.data.put('hello', 'hi')
22
- console.log(request);
23
- const node = await peernet.prepareMessage(to, request.encoded)
22
+ console.log({request});
23
+ const node = await peernet.prepareMessage(request)
24
24
  console.log({node});
25
25
  let response = await peer.request(node.encoded)
26
26
  console.log({response});
@@ -29,9 +29,9 @@ const Client = require('./dist/commonjs/peernet.js');
29
29
  for (const key of keys) {
30
30
  uint8Array[Number(key)] = response[key]
31
31
  }
32
- const proto = await new globalThis.peernet.protos['peernet-message'](uint8Array)
33
- console.log(proto.decoded.data);
34
- response = await new globalThis.peernet.protos['peernet-response'](proto.decoded.data)
32
+ // const proto = await new globalThis.peernet.protos['peernet-message'](uint8Array)
33
+ // console.log(proto.decoded.data);
34
+ response = await new globalThis.peernet.protos['peernet-response'](uint8Array)
35
35
  console.log({response});
36
36
 
37
37
  const block = new TextDecoder().decode(response.decoded.response)