@leofcoin/peernet 0.10.3 → 0.10.6

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.
@@ -0,0 +1,205 @@
1
+ 'use strict';
2
+
3
+ var varint = require('varint');
4
+ var bs32 = require('bs32');
5
+ var bs58 = require('bs58');
6
+ var isHex = require('is-hex');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
11
+ var bs32__default = /*#__PURE__*/_interopDefaultLegacy(bs32);
12
+ var bs58__default = /*#__PURE__*/_interopDefaultLegacy(bs58);
13
+ var isHex__default = /*#__PURE__*/_interopDefaultLegacy(isHex);
14
+
15
+ var codecs = {
16
+ // just a hash
17
+ 'disco-hash': {
18
+ codec: '30',
19
+ hashAlg: 'dbl-keccak-512', // ,
20
+ // testnet: 'olivia'
21
+ },
22
+ 'peernet-peer-response': {
23
+ codec: '707072',
24
+ hashAlg: 'keccak-256',
25
+ },
26
+ 'peernet-peer': {
27
+ codec: '7070',
28
+ hashAlg: 'keccak-256',
29
+ },
30
+ 'peernet-dht': {
31
+ codec: '706468',
32
+ hashAlg: 'keccak-256',
33
+ },
34
+ 'peernet-dht-response': {
35
+ codec: '706472',
36
+ hashAlg: 'keccak-256',
37
+ },
38
+ // data
39
+ 'peernet-data': {
40
+ codec: '706461',
41
+ hashAlg: 'keccak-256',
42
+ },
43
+ 'peernet-data-response': {
44
+ codec: '70646172',
45
+ hashAlg: 'keccak-256',
46
+ },
47
+ // message
48
+ 'peernet-message': {
49
+ codec: '706d65',
50
+ hashAlg: 'keccak-512',
51
+ },
52
+ // pubsub
53
+ 'peernet-ps': {
54
+ codec: '707073',
55
+ hashAlg: 'keccak-256',
56
+ },
57
+ 'peernet-response': {
58
+ codec: '7072',
59
+ hashAlg: 'keccak-256',
60
+ },
61
+ 'peernet-request': {
62
+ codec: '707271',
63
+ hashAlg: 'keccak-256',
64
+ },
65
+ // normal block
66
+ 'leofcoin-block': {
67
+ codec: '6c62',
68
+ hashAlg: 'dbl-keccak-512', // ,
69
+ // testnet: 'olivia'
70
+ },
71
+ 'leofcoin-tx': {
72
+ codec: '6c74',
73
+ hashAlg: 'dbl-keccak-512', // ,
74
+ // testnet: 'olivia'
75
+ },
76
+ // itx
77
+ 'leofcoin-itx': {
78
+ codec: '6c69',
79
+ hashAlg: 'keccak-512', // ,
80
+ // testnet: 'olivia'
81
+ },
82
+ // peer reputation
83
+ 'leofcoin-pr': {
84
+ codec: '6c70',
85
+ hashAlg: 'keccak-256', // ,
86
+ // testnet: 'olivia'
87
+ },
88
+ // chat message
89
+ 'chat-message': {
90
+ codec: '636d',
91
+ hashAlg: 'dbl-keccak-512',
92
+ },
93
+ };
94
+
95
+ class PeernetCodec {
96
+ get codecs() {
97
+ return {...globalThis.peernet.codecs, ...codecs}
98
+ }
99
+ constructor(buffer) {
100
+ if (buffer) {
101
+ if (Buffer.isBuffer(buffer)) {
102
+ const codec = varint__default["default"].decode(buffer);
103
+ const name = this.getCodecName(codec);
104
+
105
+ if (name) {
106
+ this.name = name;
107
+ this.encoded = buffer;
108
+ this.decode(buffer);
109
+ } else {
110
+ this.encode(buffer);
111
+ }
112
+ }
113
+ if (typeof buffer === 'string') {
114
+ if (this.codecs[buffer]) this.fromName(buffer);
115
+ else if (isHex__default["default"](buffer)) this.fromHex(buffer);
116
+ else if (bs32__default["default"].test(buffer)) this.fromBs32(buffer);
117
+ else this.fromBs58(buffer);
118
+ }
119
+ if (!isNaN(buffer)) if (this.codecs[this.getCodecName(buffer)]) this.fromCodec(buffer);
120
+ }
121
+ }
122
+
123
+ fromEncoded(encoded) {
124
+ const codec = varint__default["default"].decode(encoded);
125
+ const name = this.getCodecName(codec);
126
+ this.name = name;
127
+ this.encoded = encoded;
128
+ this.decode(encoded);
129
+ }
130
+
131
+ fromHex(hex) {
132
+ this.encoded = Buffer.from(hex, 'hex');
133
+ this.decode();
134
+ }
135
+
136
+ fromBs32(input) {
137
+ this.encoded = bs32__default["default"].decode(input);
138
+ this.decode();
139
+ }
140
+
141
+ fromBs58(input) {
142
+ this.encoded = bs58__default["default"].decode(input);
143
+ this.decode();
144
+ }
145
+
146
+ getCodec(name) {
147
+ return this.codecs[name].codec
148
+ }
149
+
150
+ getCodecName(codec) {
151
+ return Object.keys(this.codecs).reduce((p, c) => {
152
+ if (parseInt(Buffer.from(`${this.getCodec(c)}`, 'hex').toString('hex'), 16) === codec) return c;
153
+ else return p;
154
+ }, undefined)
155
+ }
156
+
157
+ getHashAlg(name) {
158
+ return this.codecs[name].hashAlg
159
+ }
160
+
161
+ fromCodec(codec) {
162
+ this.name = this.getCodecName(codec);
163
+ this.hashAlg = this.getHashAlg(this.name);
164
+
165
+ this.codec = this.getCodec(this.name);
166
+ this.codecBuffer = Buffer.from(varint__default["default"].encode(parseInt(Buffer.from(`${this.codec}`, 'hex').toString('hex'), 16)), 'hex');
167
+ }
168
+
169
+ fromName(name) {
170
+ const codec = this.getCodec(name);
171
+ this.name = name;
172
+ this.codec = codec;
173
+ this.hashAlg = this.getHashAlg(name);
174
+ this.codecBuffer = Buffer.from(varint__default["default"].encode(parseInt(Buffer.from(`${codec}`, 'hex').toString('hex'), 16)), 'hex');
175
+ }
176
+
177
+ toBs32() {
178
+ this.encode();
179
+ return bs32__default["default"].encode(this.encoded)
180
+ }
181
+
182
+ toBs58() {
183
+ this.encode();
184
+ return bs58__default["default"].encode(this.encoded)
185
+ }
186
+
187
+ toHex() {
188
+ return this.encoded.toString('hex')
189
+ }
190
+
191
+ decode() {
192
+ const codec = varint__default["default"].decode(this.encoded);
193
+ this.fromCodec(codec);
194
+ this.name = this.getCodecName(codec);
195
+ }
196
+
197
+ encode() {
198
+ const codec = Buffer.from(varint__default["default"].encode(parseInt(Buffer.from(`${this.codec}`, 'hex').toString('hex'), 16)), 'hex');
199
+ this.encoded = codec;
200
+ return this.encoded
201
+ }
202
+ }
203
+
204
+ exports.PeernetCodec = PeernetCodec;
205
+ exports.codecs = codecs;
@@ -3,7 +3,7 @@
3
3
  var bs32 = require('bs32');
4
4
  var bs58 = require('bs58');
5
5
  var isHex = require('is-hex');
6
- var codec = require('./codec-73adfc0f.js');
6
+ var codec = require('./codec-6367213c.js');
7
7
  var hash = require('./hash.js');
8
8
  require('varint');
9
9
  require('keccak');
@@ -16,7 +16,7 @@ var isHex__default = /*#__PURE__*/_interopDefaultLegacy(isHex);
16
16
 
17
17
  class FormatInterface {
18
18
  /**
19
- * @param {Buffer|String|Object} buffer -
19
+ * @param {Buffer|String|Object} buffer - data - The data needed to create the desired message
20
20
  * @param {Object} proto - {encode, decode}
21
21
  * @param {Object} options - {hashFormat, name}
22
22
  */
@@ -25,7 +25,9 @@ class FormatInterface {
25
25
  this.protoDecode = proto.decode;
26
26
  if (options.name) this.name = options.name;
27
27
  this.hashFormat = options.hashFormat || 'bs32';
28
- if (Buffer.isBuffer(buffer)) {
28
+ if (buffer.name === options.name) {
29
+ return buffer
30
+ } else if (Buffer.isBuffer(buffer)) {
29
31
  const codec$1 = new codec.PeernetCodec(buffer);
30
32
  if (codec$1.name) {
31
33
  this.fromEncoded(buffer);
@@ -34,8 +36,8 @@ class FormatInterface {
34
36
  }
35
37
  } else {
36
38
  if (typeof buffer === 'string') {
37
- if (isHex__default['default'](buffer)) this.fromHex(buffer);
38
- else if (bs32__default['default'].test(buffer)) this.fromBs32(buffer);
39
+ if (isHex__default["default"](buffer)) this.fromHex(buffer);
40
+ else if (bs32__default["default"].test(buffer)) this.fromBs32(buffer);
39
41
  else this.fromBs58(buffer);
40
42
  } else if (typeof buffer === 'object' && !Array.isArray(buffer)) {
41
43
  this.create(buffer);
@@ -103,7 +105,7 @@ class FormatInterface {
103
105
  * @param {String} encoded
104
106
  */
105
107
  fromBs32(encoded) {
106
- this.encoded = bs32__default['default'].decode(encoded);
108
+ this.encoded = bs32__default["default"].decode(encoded);
107
109
  this.decode();
108
110
  }
109
111
 
@@ -111,7 +113,7 @@ class FormatInterface {
111
113
  * @param {String} encoded
112
114
  */
113
115
  fromBs58(encoded) {
114
- this.encoded = bs58__default['default'].decode(encoded);
116
+ this.encoded = bs58__default["default"].decode(encoded);
115
117
  this.decode();
116
118
  }
117
119
 
@@ -128,7 +130,7 @@ class FormatInterface {
128
130
  */
129
131
  toBs32() {
130
132
  if (!this.encoded) this.encode();
131
- return bs32__default['default'].encode(this.encoded)
133
+ return bs32__default["default"].encode(this.encoded)
132
134
  }
133
135
 
134
136
  /**
@@ -136,15 +138,29 @@ class FormatInterface {
136
138
  */
137
139
  toBs58() {
138
140
  if (!this.encoded) this.encode();
139
- return bs58__default['default'].encode(this.encoded)
141
+ return bs58__default["default"].encode(this.encoded)
140
142
  }
141
143
 
142
144
  /**
143
145
  * @param {Object} data
144
146
  */
145
147
  create(data) {
146
- this.decoded = data;
147
- this.encode(data);
148
+ const decoded = {};
149
+ if (this.keys?.length > 0) {
150
+ for (const key of this.keys) {
151
+ Object.defineProperties(decoded, {
152
+ [key]: {
153
+ enumerable: true,
154
+ configurable: true,
155
+ set: (val) => value = data[key],
156
+ get: () => data[key]
157
+ }
158
+ });
159
+ }
160
+
161
+ this.decoded = decoded;
162
+ this.encode();
163
+ }
148
164
  }
149
165
  }
150
166
 
@@ -4,7 +4,7 @@ require('varint');
4
4
  require('bs32');
5
5
  require('bs58');
6
6
  require('is-hex');
7
- var codec = require('./codec-73adfc0f.js');
7
+ var codec = require('./codec-6367213c.js');
8
8
 
9
9
 
10
10
 
@@ -5,7 +5,7 @@ require('bs32');
5
5
  var codecFormatInterface = require('./codec-format-interface.js');
6
6
  require('bs58');
7
7
  require('is-hex');
8
- require('./codec-73adfc0f.js');
8
+ require('./codec-6367213c.js');
9
9
  require('varint');
10
10
  require('./hash.js');
11
11
  require('keccak');
@@ -29,7 +29,7 @@ class DHTMessageResponse extends codecFormatInterface {
29
29
 
30
30
  constructor(data) {
31
31
  const name = 'peernet-dht-response';
32
- super(data, protons__default['default'](proto).PeernetDHTMessageResponse, {name});
32
+ super(data, protons__default["default"](proto).PeernetDHTMessageResponse, {name});
33
33
  }
34
34
  }
35
35
 
@@ -5,7 +5,7 @@ var codecFormatInterface = require('./codec-format-interface.js');
5
5
  require('bs32');
6
6
  require('bs58');
7
7
  require('is-hex');
8
- require('./codec-73adfc0f.js');
8
+ require('./codec-6367213c.js');
9
9
  require('varint');
10
10
  require('./hash.js');
11
11
  require('keccak');
@@ -40,7 +40,7 @@ class DHTMessage extends codecFormatInterface {
40
40
 
41
41
  constructor(data) {
42
42
  const name = 'peernet-dht';
43
- super(data, protons__default['default'](proto).PeernetDHTMessage, {name});
43
+ super(data, protons__default["default"](proto).PeernetDHTMessage, {name});
44
44
  }
45
45
  }
46
46
 
@@ -5,7 +5,7 @@ var varint = require('varint');
5
5
  var bs32 = require('bs32');
6
6
  var bs58 = require('bs58');
7
7
  var isHex = require('is-hex');
8
- var codec = require('./codec-73adfc0f.js');
8
+ var codec = require('./codec-6367213c.js');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
@@ -34,8 +34,8 @@ class PeernetHash {
34
34
  }
35
35
 
36
36
  if (typeof buffer === 'string') {
37
- if (isHex__default['default'](buffer)) this.fromHex(buffer);
38
- if (bs32__default['default'].test(buffer)) this.fromBs32(buffer);
37
+ if (isHex__default["default"](buffer)) this.fromHex(buffer);
38
+ if (bs32__default["default"].test(buffer)) this.fromBs32(buffer);
39
39
  else this.fromBs58(buffer);
40
40
  } else if (typeof buffer === 'object') this.fromJSON(buffer);
41
41
  }
@@ -46,7 +46,7 @@ class PeernetHash {
46
46
  }
47
47
 
48
48
  get length() {
49
- return Buffer.from(varint__default['default'].encode(this.size))
49
+ return Buffer.from(varint__default["default"].encode(this.size))
50
50
  }
51
51
 
52
52
  get buffer() {
@@ -66,19 +66,19 @@ class PeernetHash {
66
66
  }
67
67
 
68
68
  toBs32() {
69
- return bs32__default['default'].encode(this.hash)
69
+ return bs32__default["default"].encode(this.hash)
70
70
  }
71
71
 
72
72
  fromBs32(bs) {
73
- return this.decode(bs32__default['default'].decode(bs))
73
+ return this.decode(bs32__default["default"].decode(bs))
74
74
  }
75
75
 
76
76
  toBs58() {
77
- return bs58__default['default'].encode(this.hash)
77
+ return bs58__default["default"].encode(this.hash)
78
78
  }
79
79
 
80
80
  fromBs58(bs) {
81
- return this.decode(bs58__default['default'].decode(bs))
81
+ return this.decode(bs58__default["default"].decode(bs))
82
82
  }
83
83
 
84
84
  toString(encoding = 'utf8') {
@@ -93,9 +93,9 @@ class PeernetHash {
93
93
  let hashAlg = this.discoCodec.hashAlg;
94
94
  if (hashAlg.includes('dbl')) {
95
95
  hashAlg = hashAlg.replace('dbl-', '');
96
- buffer = createKeccakHash__default['default'](hashAlg.replace('-', '')).update(buffer).digest();
96
+ buffer = createKeccakHash__default["default"](hashAlg.replace('-', '')).update(buffer).digest();
97
97
  }
98
- this.digest = createKeccakHash__default['default'](hashAlg.replace('-', '')).update(buffer).digest();
98
+ this.digest = createKeccakHash__default["default"](hashAlg.replace('-', '')).update(buffer).digest();
99
99
  this.size = this.digest.length;
100
100
 
101
101
  this.codec = this.discoCodec.encode();
@@ -110,7 +110,7 @@ class PeernetHash {
110
110
 
111
111
  validate(buffer) {
112
112
  if (Buffer.isBuffer(buffer)) {
113
- const codec = varint__default['default'].decode(buffer);
113
+ const codec = varint__default["default"].decode(buffer);
114
114
  if (this.codecs[codec]) {
115
115
  this.decode(buffer);
116
116
  } else {
@@ -118,21 +118,21 @@ class PeernetHash {
118
118
  }
119
119
  }
120
120
  if (typeof buffer === 'string') {
121
- if (isHex__default['default'](buffer)) this.fromHex(buffer);
122
- if (bs32__default['default'].test(buffer)) this.fromBs32(buffer);
121
+ if (isHex__default["default"](buffer)) this.fromHex(buffer);
122
+ if (bs32__default["default"].test(buffer)) this.fromBs32(buffer);
123
123
  }
124
124
  if (typeof buffer === 'object') this.fromJSON(buffer);
125
125
  }
126
126
 
127
127
  decode(buffer) {
128
128
  this.hash = buffer;
129
- const codec$1 = varint__default['default'].decode(buffer);
129
+ const codec$1 = varint__default["default"].decode(buffer);
130
130
 
131
131
  this.discoCodec = new codec.PeernetCodec(codec$1, this.codecs);
132
132
  // TODO: validate codec
133
- buffer = buffer.slice(varint__default['default'].decode.bytes);
134
- this.size = varint__default['default'].decode(buffer);
135
- this.digest = buffer.slice(varint__default['default'].decode.bytes);
133
+ buffer = buffer.slice(varint__default["default"].decode.bytes);
134
+ this.size = varint__default["default"].decode(buffer);
135
+ this.digest = buffer.slice(varint__default["default"].decode.bytes);
136
136
  if (this.digest.length !== this.size) {
137
137
  throw new Error(`hash length inconsistent: 0x${this.hash.toString('hex')}`)
138
138
  }
@@ -5,7 +5,7 @@ var codecFormatInterface = require('./codec-format-interface.js');
5
5
  require('bs32');
6
6
  require('bs58');
7
7
  require('is-hex');
8
- require('./codec-73adfc0f.js');
8
+ require('./codec-6367213c.js');
9
9
  require('varint');
10
10
  require('./hash.js');
11
11
  require('keccak');
@@ -31,7 +31,7 @@ class PeernetMessage extends codecFormatInterface {
31
31
 
32
32
  constructor(buffer) {
33
33
  const name = 'peernet-message';
34
- super(buffer, protons__default['default'](proto).PeernetMessage, {name});
34
+ super(buffer, protons__default["default"](proto).PeernetMessage, {name});
35
35
  }
36
36
  }
37
37