@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.
- package/dist/browser/peernet.js +34 -31
- package/dist/commonjs/peernet.js +28 -30
- package/dist/module/peernet.js +28 -30
- package/index.html +1 -1
- package/package.json +2 -2
- package/rollup.config.js +2 -1
- package/src/handlers/data.js +3 -1
- package/src/handlers/message.js +12 -18
- package/src/peernet.js +10 -8
- package/src/utils/utils.js +1 -0
- package/test.js +12 -12
package/dist/browser/peernet.js
CHANGED
|
@@ -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
|
|
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(
|
|
719
|
-
|
|
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
|
-
|
|
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(
|
|
731
|
-
if (
|
|
732
|
-
|
|
733
|
-
|
|
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
|
|
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(
|
|
859
|
-
return this._messageHandler.prepareMessage(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
}
|
package/dist/commonjs/peernet.js
CHANGED
|
@@ -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
|
|
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(
|
|
390
|
-
|
|
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
|
-
|
|
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(
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
|
|
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
|
|
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(
|
|
530
|
-
return this._messageHandler.prepareMessage(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1093
|
+
const node = await this.prepareMessage(data);
|
|
1096
1094
|
this.sendMessage(peer, id, node.encoded);
|
|
1097
1095
|
}
|
|
1098
1096
|
// TODO: if peer subscribed
|
package/dist/module/peernet.js
CHANGED
|
@@ -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
|
|
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(
|
|
388
|
-
|
|
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
|
-
|
|
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(
|
|
400
|
-
if (
|
|
401
|
-
|
|
402
|
-
|
|
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
|
|
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(
|
|
528
|
-
return this._messageHandler.prepareMessage(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leofcoin/peernet",
|
|
3
|
-
"version": "0.14.
|
|
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.
|
|
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
package/src/handlers/data.js
CHANGED
|
@@ -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
|
|
package/src/handlers/message.js
CHANGED
|
@@ -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
|
|
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(
|
|
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
|
-
|
|
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(
|
|
34
|
-
if (
|
|
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
|
|
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(
|
|
98
|
-
return this._messageHandler.prepareMessage(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
670
|
+
const node = await this.prepareMessage(data)
|
|
669
671
|
this.sendMessage(peer, id, node.encoded)
|
|
670
672
|
}
|
|
671
673
|
// TODO: if peer subscribed
|
package/src/utils/utils.js
CHANGED
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
|
-
|
|
9
|
-
|
|
10
|
-
}, {
|
|
11
|
-
|
|
12
|
-
|
|
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(
|
|
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'](
|
|
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)
|