@leofcoin/peernet 0.12.2 → 0.13.1

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.
@@ -1,8 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var dhtResponse = require('./dht-response-e4a603ea.js');
4
- require('@leofcoin/codec-format-interface');
3
+ var codecFormatInterface = require('@leofcoin/codec-format-interface');
5
4
 
5
+ var proto = `
6
+ // PeernetDHTMessageResponse
7
+ message PeernetDHTMessageResponse {
8
+ required string hash = 1;
9
+ required bool has = 2;
10
+ }
11
+ `;
6
12
 
13
+ class DHTMessageResponse extends codecFormatInterface.FormatInterface {
14
+ get keys() {
15
+ return ['hash', 'has']
16
+ }
17
+
18
+ get messageName() {
19
+ return 'PeernetDHTMessageResponse'
20
+ }
21
+
22
+ constructor(data) {
23
+ const name = 'peernet-dht-response';
24
+ super(data, proto, {name});
25
+ }
26
+ }
7
27
 
8
- module.exports = dhtResponse.DHTMessageResponse;
28
+ module.exports = DHTMessageResponse;
@@ -1,8 +1,39 @@
1
1
  'use strict';
2
2
 
3
- var dht = require('./dht-6a1b6246.js');
4
- require('@leofcoin/codec-format-interface');
3
+ var codecFormatInterface = require('@leofcoin/codec-format-interface');
5
4
 
5
+ var proto = `
6
+ // PeernetDHTMessage
7
+ message PeernetDHTMessage {
8
+ required string hash = 1;
9
+ optional string store = 2;
10
+ }
11
+ `;
6
12
 
13
+ /**
14
+ * @example `
15
+ new DHTMessage(hash, store)
16
+ // store = optional if not set, peernet checks every store
17
+ let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
18
+ message = new DHTMessage('hashmvbs124xcfd...', 'block')
19
+ `
20
+ */
21
+ class DHTMessage extends codecFormatInterface.FormatInterface {
22
+ /**
23
+ *
24
+ */
25
+ get keys() {
26
+ return ['hash', 'store']
27
+ }
28
+
29
+ get messageName() {
30
+ return 'PeernetDHTMessage'
31
+ }
32
+
33
+ constructor(data) {
34
+ const name = 'peernet-dht';
35
+ super(data, proto, {name});
36
+ }
37
+ }
7
38
 
8
- module.exports = dht.DHTMessage;
39
+ module.exports = DHTMessage;
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var peernet = require('./peernet-6eef77d5.js');
4
- var dht = require('./dht-6a1b6246.js');
5
- var dhtResponse = require('./dht-response-e4a603ea.js');
3
+ var peernet = require('./peernet2.js');
4
+ var dht = require('./dht.js');
5
+ var dhtResponse = require('./dht-response.js');
6
6
  var codecFormatInterface = require('@leofcoin/codec-format-interface');
7
- var request = require('./request-95ed03ec.js');
8
- var response = require('./response-bae4e2a2.js');
7
+ var request = require('./request.js');
8
+ var response = require('./response.js');
9
9
 
10
- var proto$5 = `
10
+ var proto$6 = `
11
11
  // PeernetDataMessage
12
12
  message PeernetDataMessage {
13
13
  required string hash = 1;
@@ -30,16 +30,11 @@ class DataMessage extends codecFormatInterface.FormatInterface {
30
30
  * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
31
31
  */
32
32
  constructor(data) {
33
- super(data, proto$5, {name: 'peernet-data'});
33
+ super(data, proto$6, {name: 'peernet-data'});
34
34
  }
35
35
  }
36
36
 
37
- var data = /*#__PURE__*/Object.freeze({
38
- __proto__: null,
39
- 'default': DataMessage
40
- });
41
-
42
- var proto$4 = `
37
+ var proto$5 = `
43
38
  // PsMessage
44
39
  message PsMessage {
45
40
  required bytes data = 1;
@@ -57,16 +52,11 @@ class PsMessage extends codecFormatInterface.FormatInterface {
57
52
 
58
53
  constructor(buffer) {
59
54
  const name = 'peernet-ps';
60
- super(buffer, proto$4, {name});
55
+ super(buffer, proto$5, {name});
61
56
  }
62
57
  }
63
58
 
64
- var ps = /*#__PURE__*/Object.freeze({
65
- __proto__: null,
66
- 'default': PsMessage
67
- });
68
-
69
- var proto$3 = `
59
+ var proto$4 = `
70
60
  // PeernetPeerMessage
71
61
  message PeernetPeerMessage {
72
62
  required string id = 1;
@@ -84,16 +74,11 @@ class PeerMessage extends codecFormatInterface.FormatInterface {
84
74
 
85
75
  constructor(data) {
86
76
  const name = 'peernet-peer';
87
- super(data, proto$3, {name});
77
+ super(data, proto$4, {name});
88
78
  }
89
79
  }
90
80
 
91
- var peer = /*#__PURE__*/Object.freeze({
92
- __proto__: null,
93
- 'default': PeerMessage
94
- });
95
-
96
- var proto$2 = `
81
+ var proto$3 = `
97
82
  // PeernetPeerMessageResponse
98
83
  message PeernetPeerMessageResponse {
99
84
  required string id = 1;
@@ -111,16 +96,11 @@ class PeerMessageResponse extends codecFormatInterface.FormatInterface {
111
96
 
112
97
  constructor(data) {
113
98
  const name = 'peernet-peer-response';
114
- super(data, proto$2, {name});
99
+ super(data, proto$3, {name});
115
100
  }
116
101
  }
117
102
 
118
- var peerResponse = /*#__PURE__*/Object.freeze({
119
- __proto__: null,
120
- 'default': PeerMessageResponse
121
- });
122
-
123
- var proto$1 = `
103
+ var proto$2 = `
124
104
  // PeernetDataMessageResponse
125
105
  message PeernetDataMessageResponse {
126
106
  required string hash = 1;
@@ -139,16 +119,11 @@ class DataMessageResponse extends codecFormatInterface.FormatInterface {
139
119
 
140
120
  constructor(data) {
141
121
  const name = 'peernet-data-response';
142
- super(data, proto$1, {name});
122
+ super(data, proto$2, {name});
143
123
  }
144
124
  }
145
125
 
146
- var dataResponse = /*#__PURE__*/Object.freeze({
147
- __proto__: null,
148
- 'default': DataMessageResponse
149
- });
150
-
151
- var proto = `
126
+ var proto$1 = `
152
127
  message ChatMessage {
153
128
  required string value = 1;
154
129
  required string author = 2;
@@ -167,23 +142,53 @@ class ChatMessage extends codecFormatInterface.FormatInterface {
167
142
 
168
143
  constructor(buffer) {
169
144
  const name = 'chat-message';
170
- super(buffer, proto, {name});
145
+ super(buffer, proto$1, {name});
146
+ }
147
+ }
148
+
149
+ var proto = `
150
+ // PeernetFolder
151
+ message PeernetFileLink {
152
+ required string hash = 1;
153
+ required string path = 2;
154
+ optional string size = 3;
155
+ }
156
+
157
+ message PeernetFile {
158
+ required string path = 1;
159
+ optional string content = 2;
160
+ repeated PeernetFileLink links = 3;
161
+ }
162
+ `;
163
+
164
+ /**
165
+ * @extends {CodecFormat}
166
+ */
167
+ class PeernetFile extends codecFormatInterface.FormatInterface {
168
+ get keys() {
169
+ return ['path', 'content', 'links']
170
+ }
171
+
172
+ get messageName() {
173
+ return 'PeernetFile'
174
+ }
175
+ /**
176
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
177
+ */
178
+ constructor(data) {
179
+ super(data, proto, {name: 'peernet-file'});
171
180
  }
172
181
  }
173
182
 
174
- var chat = /*#__PURE__*/Object.freeze({
175
- __proto__: null,
176
- 'default': ChatMessage
177
- });
178
-
179
- exports.PeernetMessage = peernet.peernet;
180
- exports.DHTMessage = dht.dht;
181
- exports.DHTMessageResponse = dhtResponse.dhtResponse;
182
- exports.RequestMessage = request.request;
183
- exports.ResponseMessage = response.response;
184
- exports.ChatMessage = chat;
185
- exports.DataMessage = data;
186
- exports.DataMessageResponse = dataResponse;
187
- exports.PeerMessage = peer;
188
- exports.PeerMessageResponse = peerResponse;
189
- exports.PsMessage = ps;
183
+ exports.PeernetMessage = peernet;
184
+ exports.DHTMessage = dht;
185
+ exports.DHTMessageResponse = dhtResponse;
186
+ exports.RequestMessage = request;
187
+ exports.ResponseMessage = response;
188
+ exports.ChatMessage = ChatMessage;
189
+ exports.DataMessage = DataMessage;
190
+ exports.DataMessageResponse = DataMessageResponse;
191
+ exports.PeerMessage = PeerMessage;
192
+ exports.PeerMessageResponse = PeerMessageResponse;
193
+ exports.PeernetFile = PeernetFile;
194
+ exports.PsMessage = PsMessage;
@@ -1,9 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  require('@vandeurenglenn/debug');
4
+ var PubSub = require('@vandeurenglenn/little-pubsub');
4
5
  var fetch = require('node-fetch');
5
6
  var codecFormatInterface = require('@leofcoin/codec-format-interface');
6
7
  var MultiWallet = require('@leofcoin/multi-wallet');
8
+ require('path');
7
9
 
8
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
11
 
@@ -25,6 +27,7 @@ function _interopNamespace(e) {
25
27
  return Object.freeze(n);
26
28
  }
27
29
 
30
+ var PubSub__default = /*#__PURE__*/_interopDefaultLegacy(PubSub);
28
31
  var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
29
32
  var MultiWallet__default = /*#__PURE__*/_interopDefaultLegacy(MultiWallet);
30
33
 
@@ -352,7 +355,8 @@ const nothingFoundError = (hash) => {
352
355
  };
353
356
 
354
357
  globalThis.leofcoin = globalThis.leofcoin || {};
355
- globalThis.globalSub = globalThis.globalSub || new PubSub({verbose: true});
358
+ globalThis.pubsub = globalThis.pubsub || new PubSub__default["default"]();
359
+ globalThis.globalSub = globalThis.globalSub || new PubSub__default["default"]({verbose: true});
356
360
 
357
361
  /**
358
362
  * @access public
@@ -398,16 +402,12 @@ class Peernet {
398
402
  return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message']
399
403
  }
400
404
 
401
- get protos() {
402
- return globalThis.peernet.protos
403
- }
404
-
405
405
  get codecs() {
406
406
  return codecFormatInterface.codecs
407
407
  }
408
408
 
409
409
  addProto(name, proto) {
410
- if (!this.protos[name]) this.protos[name] = proto;
410
+ if (!globalThis.peernet.protos[name]) globalThis.peernet.protos[name] = proto;
411
411
  }
412
412
 
413
413
  addCodec(name, codec) {
@@ -502,8 +502,10 @@ class Peernet {
502
502
  DataMessage,
503
503
  DataMessageResponse,
504
504
  PsMessage,
505
- ChatMessage
506
- } = await Promise.resolve().then(function () { return require(/* webpackChunkName: "messages" */ './messages-bcb02ee9.js'); });
505
+ ChatMessage,
506
+ PeernetFile
507
+ // FolderMessageResponse
508
+ } = await Promise.resolve().then(function () { return require(/* webpackChunkName: "messages" */ './messages-f46a3ca1.js'); });
507
509
 
508
510
  /**
509
511
  * proto Object containing protos
@@ -527,6 +529,7 @@ class Peernet {
527
529
  'peernet-data-response': DataMessageResponse,
528
530
  'peernet-ps': PsMessage,
529
531
  'chat-message': ChatMessage,
532
+ 'peernet-file': PeernetFile
530
533
  };
531
534
 
532
535
  this._messageHandler = new MessageHandler(this.network);
@@ -634,7 +637,7 @@ class Peernet {
634
637
  if (store.private) has = false;
635
638
  else has = await store.has(hash);
636
639
  }
637
- const data = await new this.protos['peernet-dht-response']({hash, has});
640
+ const data = await new globalThis.peernet.protos['peernet-dht-response']({hash, has});
638
641
  const node = await this.prepareMessage(from, data.encoded);
639
642
 
640
643
  this.sendMessage(peer, id, node.encoded);
@@ -650,7 +653,7 @@ class Peernet {
650
653
  data = await store.get(hash);
651
654
 
652
655
  if (data) {
653
- data = await new this.protos['peernet-data-response']({hash, data});
656
+ data = await new globalThis.peernet.protos['peernet-data-response']({hash, data});
654
657
 
655
658
  const node = await this.prepareMessage(from, data.encoded);
656
659
  this.sendMessage(peer, id, node.encoded);
@@ -677,7 +680,7 @@ class Peernet {
677
680
  */
678
681
  async walk(hash) {
679
682
  if (!hash) throw new Error('hash expected, received undefined')
680
- const data = await new this.protos['peernet-dht']({hash});
683
+ const data = await new globalThis.peernet.protos['peernet-dht']({hash});
681
684
  this.client.id;
682
685
  const walk = async peer => {
683
686
  const node = await this.prepareMessage(peer.peerId, data.encoded);
@@ -785,7 +788,7 @@ class Peernet {
785
788
  if (peer.peerId === id) return peer
786
789
  });
787
790
 
788
- let data = await new this.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
791
+ let data = await new globalThis.peernet.protos['peernet-data']({hash, store: store?.name ? store?.name : store});
789
792
 
790
793
  const node = await this.prepareMessage(id, data.encoded);
791
794
  if (closest[0]) data = await closest[0].request(node.encoded);
@@ -863,6 +866,75 @@ class Peernet {
863
866
  }
864
867
  }
865
868
 
869
+ get folder() {
870
+ return {
871
+ /**
872
+ * Get content for given data hash
873
+ *
874
+ * @param {String} hash
875
+ */
876
+ get: async (hash) => {
877
+ debug(`get data ${hash}`);
878
+ const data = await dataStore.has(hash);
879
+ if (data) return await dataStore.get(hash)
880
+ return this.requestData(hash, 'data')
881
+ },
882
+ /**
883
+ * put data content
884
+ *
885
+ * @param {String} hash
886
+ * @param {Buffer} data
887
+ */
888
+ put: async (hash, data) => await dataStore.put(hash, data),
889
+ /**
890
+ * @param {String} hash
891
+ * @return {Boolean}
892
+ */
893
+ has: async (hash) => await dataStore.has(hash),
894
+ }
895
+ }
896
+
897
+ async addFolder(files) {
898
+ const links = [];
899
+ for (const file of files) {
900
+ const fileNode = await new globalThis.peernet.protos['peernet-file'](file);
901
+ const hash = await fileNode.hash;
902
+ await dataStore.put(hash, fileNode.encoded);
903
+ links.push({hash, path: file.path});
904
+ }
905
+ const node = await new globalThis.peernet.protos['peernet-file']({path: '/', links});
906
+ const hash = await node.hash;
907
+ await dataStore.put(hash, node.encoded);
908
+
909
+ return hash
910
+ }
911
+
912
+ async ls(hash) {
913
+ let data;
914
+ const has = await dataStore.has(hash);
915
+ if (has) data = await dataStore.get(hash);
916
+ else data = await this.requestData(hash, 'data');
917
+
918
+ const node = await new peernet.protos['peernet-file'](data);
919
+ const paths = [];
920
+ if (node.decoded?.links.length === 0) throw new Error(`${hash} is a file`)
921
+ for (const {path, hash} of node.decoded.links) {
922
+ paths.push({path, hash});
923
+ }
924
+
925
+ return paths
926
+ }
927
+
928
+ async cat(hash) {
929
+ let data;
930
+ const has = await dataStore.has(hash);
931
+ if (has) data = await dataStore.get(hash);
932
+ else data = await this.requestData(hash, 'data');
933
+ const node = await new peernet.protos['peernet-file'](data);
934
+ if (node.decoded?.links.length > 0) throw new Error(`${hash} is a directory`)
935
+ return node.decoded.content
936
+ }
937
+
866
938
  /**
867
939
  * goes trough given stores and tries to find data for given hash
868
940
  * @param {Array} stores
@@ -930,7 +1002,7 @@ class Peernet {
930
1002
  if (topic instanceof Uint8Array === false) topic = new TextEncoder().encode(topic);
931
1003
  if (data instanceof Uint8Array === false) data = new TextEncoder().encode(JSON.stringify(data));
932
1004
  const id = Math.random().toString(36).slice(-12);
933
- data = await new this.protos['peernet-ps']({data, topic});
1005
+ data = await new globalThis.peernet.protos['peernet-ps']({data, topic});
934
1006
  for (const peer of this.connections) {
935
1007
  if (peer.peerId !== this.peerId) {
936
1008
  const node = await this.prepareMessage(peer.peerId, data.encoded);
@@ -1,8 +1,30 @@
1
1
  'use strict';
2
2
 
3
- var peernet = require('./peernet-6eef77d5.js');
4
- require('@leofcoin/codec-format-interface');
3
+ var codecFormatInterface = require('@leofcoin/codec-format-interface');
5
4
 
5
+ var proto = `
6
+ // PeernetMessage
7
+ message PeernetMessage {
8
+ required bytes data = 1;
9
+ required bytes signature = 2;
10
+ optional string from = 3;
11
+ optional string to = 4;
12
+ optional string id = 5;
13
+ }`;
6
14
 
15
+ class PeernetMessage extends codecFormatInterface.FormatInterface {
16
+ get keys() {
17
+ return ['data', 'signature', 'from', 'to', 'id']
18
+ }
19
+
20
+ get messageName() {
21
+ return 'PeernetMessage'
22
+ }
23
+
24
+ constructor(buffer) {
25
+ const name = 'peernet-message';
26
+ super(buffer, proto, {name});
27
+ }
28
+ }
7
29
 
8
- module.exports = peernet.PeernetMessage;
30
+ module.exports = PeernetMessage;
@@ -1,8 +1,27 @@
1
1
  'use strict';
2
2
 
3
- var request = require('./request-95ed03ec.js');
4
- require('@leofcoin/codec-format-interface');
3
+ var codecFormatInterface = require('@leofcoin/codec-format-interface');
5
4
 
5
+ var proto = `
6
+ // PeernetRequestMessage
7
+ message PeernetRequestMessage {
8
+ required string request = 1;
9
+ }
10
+ `;
6
11
 
12
+ class RequestMessage extends codecFormatInterface.FormatInterface {
13
+ get keys() {
14
+ return ['request']
15
+ }
16
+
17
+ get messageName() {
18
+ return 'PeernetRequestMessage'
19
+ }
20
+
21
+ constructor(data) {
22
+ const name = 'peernet-request';
23
+ super(data, proto, {name});
24
+ }
25
+ }
7
26
 
8
- module.exports = request.RequestMessage;
27
+ module.exports = RequestMessage;
@@ -1,8 +1,27 @@
1
1
  'use strict';
2
2
 
3
- var response = require('./response-bae4e2a2.js');
4
- require('@leofcoin/codec-format-interface');
3
+ var codecFormatInterface = require('@leofcoin/codec-format-interface');
5
4
 
5
+ var proto = `
6
+ // PeernetResponseMessage
7
+ message PeernetResponseMessage {
8
+ required bytes response = 1;
9
+ }
10
+ `;
6
11
 
12
+ class ResponseMessage extends codecFormatInterface.FormatInterface {
13
+ get keys() {
14
+ return ['response']
15
+ }
16
+
17
+ get messageName() {
18
+ return 'PeernetResponseMessage'
19
+ }
20
+
21
+ constructor(data) {
22
+ const name = 'peernet-response';
23
+ super(data, proto, {name});
24
+ }
25
+ }
7
26
 
8
- module.exports = response.ResponseMessage;
27
+ module.exports = ResponseMessage;