@leofcoin/peernet 1.1.55 → 1.1.57

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.
Files changed (35) hide show
  1. package/exports/browser/browser-store.js +4 -3
  2. package/exports/browser/identity.d.ts +7 -4
  3. package/exports/browser/{index-ba1b3977.js → index-329e0324.js} +1 -1
  4. package/exports/browser/messages/chat.d.ts +1 -1
  5. package/exports/browser/messages/data-response.d.ts +1 -1
  6. package/exports/browser/messages/dht-response.d.ts +1 -1
  7. package/exports/browser/messages/dht.d.ts +1 -1
  8. package/exports/browser/messages/peer-response.d.ts +1 -1
  9. package/exports/browser/messages/peer.d.ts +1 -1
  10. package/exports/browser/messages/peernet.d.ts +1 -1
  11. package/exports/browser/messages/ps.d.ts +1 -1
  12. package/exports/browser/messages/request.d.ts +1 -1
  13. package/exports/browser/messages/response.d.ts +1 -1
  14. package/exports/browser/{messages-dd1ad11c.js → messages-000b7f84.js} +1 -1
  15. package/exports/browser/{peernet-d5023a29.js → peernet-bfbe6fff.js} +943 -884
  16. package/exports/browser/peernet.d.ts +32 -14
  17. package/exports/browser/peernet.js +1 -1
  18. package/exports/peernet.js +26 -12
  19. package/exports/store.js +11 -9
  20. package/exports/types/identity.d.ts +7 -4
  21. package/exports/types/messages/chat.d.ts +1 -1
  22. package/exports/types/messages/data-response.d.ts +1 -1
  23. package/exports/types/messages/dht-response.d.ts +1 -1
  24. package/exports/types/messages/dht.d.ts +1 -1
  25. package/exports/types/messages/peer-response.d.ts +1 -1
  26. package/exports/types/messages/peer.d.ts +1 -1
  27. package/exports/types/messages/peernet.d.ts +1 -1
  28. package/exports/types/messages/ps.d.ts +1 -1
  29. package/exports/types/messages/request.d.ts +1 -1
  30. package/exports/types/messages/response.d.ts +1 -1
  31. package/exports/types/peernet.d.ts +32 -14
  32. package/package.json +4 -3
  33. package/src/identity.ts +21 -10
  34. package/src/peernet.ts +26 -3
  35. package/tsconfig.json +1 -1
@@ -209,16 +209,16 @@ const ALPHABET$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
209
209
  const ALPHABET_HEX$1 = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
210
210
  const base32 = base$1(ALPHABET$3);
211
211
  const base32Hex = base$1(ALPHABET_HEX$1);
212
- const decode$8 = base32.decode;
212
+ const decode$9 = base32.decode;
213
213
  const decodeHex$2 = base32Hex.decode;
214
- const encode$7 = base32.encode;
214
+ const encode$8 = base32.encode;
215
215
  const encodeHex$2 = base32Hex.encode;
216
216
  const isBase32 = (string, hex = false) => {
217
217
  try {
218
218
  if (hex)
219
219
  decodeHex$2(string);
220
220
  else
221
- decode$8(string);
221
+ decode$9(string);
222
222
  return true;
223
223
  }
224
224
  catch (e) {
@@ -228,9 +228,9 @@ const isBase32 = (string, hex = false) => {
228
228
  const isBase32Hex = (string) => {
229
229
  return isBase32(string, true);
230
230
  };
231
- var index$8 = {
232
- encode: encode$7,
233
- decode: decode$8,
231
+ var index$9 = {
232
+ encode: encode$8,
233
+ decode: decode$9,
234
234
  encodeHex: encodeHex$2,
235
235
  decodeHex: decodeHex$2,
236
236
  isBase32,
@@ -241,13 +241,13 @@ var ALPHABET$2 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
241
241
  var ALPHABET_HEX = '0123456789ABCDEFGHJKLMNPQRSTUVabcdefghijklmnopqrstuv';
242
242
  var base58 = base$1(ALPHABET$2);
243
243
  var base58Hex = base$1(ALPHABET_HEX);
244
- var encode$6 = base58.encode;
245
- var decode$7 = base58.decode;
244
+ var encode$7 = base58.encode;
245
+ var decode$8 = base58.decode;
246
246
  var encodeHex$1 = base58Hex.encode;
247
247
  var decodeHex$1 = base58Hex.decode;
248
248
  var isBase58 = function (string) {
249
249
  try {
250
- decode$7(string);
250
+ decode$8(string);
251
251
  return true;
252
252
  }
253
253
  catch (e) {
@@ -265,7 +265,7 @@ var isBase58Hex = function (string) {
265
265
  };
266
266
  var whatType = function (string) {
267
267
  try {
268
- decode$7(string);
268
+ decode$8(string);
269
269
  return 'base58';
270
270
  }
271
271
  catch (e) {
@@ -278,36 +278,42 @@ var whatType = function (string) {
278
278
  }
279
279
  }
280
280
  };
281
- var base58$1 = { encode: encode$6, decode: decode$7, isBase58: isBase58, isBase58Hex: isBase58Hex, encodeHex: encodeHex$1, decodeHex: decodeHex$1, whatType: whatType };
282
-
283
- const MSB$1 = 0x80;
284
- const REST$1 = 0x7F;
285
- const MSBALL = ~REST$1;
286
- const INT = Math.pow(2, 31);
287
- const encode$5 = (num, out, offset) => {
281
+ var base58$1 = { encode: encode$7, decode: decode$8, isBase58: isBase58, isBase58Hex: isBase58Hex, encodeHex: encodeHex$1, decodeHex: decodeHex$1, whatType: whatType };
282
+
283
+ var isHex = string => /^[A-F0-9]+$/i.test(
284
+ string.startsWith('0x') ?
285
+ string.slice(2) :
286
+ string
287
+ );
288
+
289
+ const MSB$3 = 0x80;
290
+ const REST$3 = 0x7F;
291
+ const MSBALL$1 = ~REST$3;
292
+ const INT$1 = Math.pow(2, 31);
293
+ const encode$6 = (num, out, offset) => {
288
294
  if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
289
- encode$5.bytes = 0;
295
+ encode$6.bytes = 0;
290
296
  throw new RangeError('Could not encode varint');
291
297
  }
292
298
  out = out || [];
293
299
  offset = offset || 0;
294
300
  const oldOffset = offset;
295
- while (num >= INT) {
296
- out[offset++] = (num & 0xFF) | MSB$1;
301
+ while (num >= INT$1) {
302
+ out[offset++] = (num & 0xFF) | MSB$3;
297
303
  num /= 128;
298
304
  }
299
- while (num & MSBALL) {
300
- out[offset++] = (num & 0xFF) | MSB$1;
305
+ while (num & MSBALL$1) {
306
+ out[offset++] = (num & 0xFF) | MSB$3;
301
307
  num >>>= 7;
302
308
  }
303
309
  out[offset] = num | 0;
304
- encode$5.bytes = offset - oldOffset + 1;
310
+ encode$6.bytes = offset - oldOffset + 1;
305
311
  return out;
306
312
  };
307
313
 
308
- const MSB = 0x80;
309
- const REST = 0x7F;
310
- const decode$6 = (buf, offset) => {
314
+ const MSB$2 = 0x80;
315
+ const REST$2 = 0x7F;
316
+ const decode$7 = (buf, offset) => {
311
317
  offset = offset || 0;
312
318
  const l = buf.length;
313
319
  let counter = offset;
@@ -316,49 +322,49 @@ const decode$6 = (buf, offset) => {
316
322
  let b;
317
323
  do {
318
324
  if (counter >= l || shift > 49) {
319
- decode$6.bytes = 0;
325
+ decode$7.bytes = 0;
320
326
  throw new RangeError('Could not decode varint');
321
327
  }
322
328
  b = buf[counter++];
323
329
  result += shift < 28
324
- ? (b & REST) << shift
325
- : (b & REST) * Math.pow(2, shift);
330
+ ? (b & REST$2) << shift
331
+ : (b & REST$2) * Math.pow(2, shift);
326
332
  shift += 7;
327
- } while (b >= MSB);
328
- decode$6.bytes = counter - offset;
333
+ } while (b >= MSB$2);
334
+ decode$7.bytes = counter - offset;
329
335
  return result;
330
336
  };
331
337
 
332
- const N1 = Math.pow(2, 7);
333
- const N2 = Math.pow(2, 14);
334
- const N3 = Math.pow(2, 21);
335
- const N4 = Math.pow(2, 28);
336
- const N5 = Math.pow(2, 35);
337
- const N6 = Math.pow(2, 42);
338
- const N7 = Math.pow(2, 49);
339
- const N8 = Math.pow(2, 56);
340
- const N9 = Math.pow(2, 63);
341
- var encodingLength = (value) => (value < N1 ? 1
342
- : value < N2 ? 2
343
- : value < N3 ? 3
344
- : value < N4 ? 4
345
- : value < N5 ? 5
346
- : value < N6 ? 6
347
- : value < N7 ? 7
348
- : value < N8 ? 8
349
- : value < N9 ? 9
338
+ const N1$1 = Math.pow(2, 7);
339
+ const N2$1 = Math.pow(2, 14);
340
+ const N3$1 = Math.pow(2, 21);
341
+ const N4$1 = Math.pow(2, 28);
342
+ const N5$1 = Math.pow(2, 35);
343
+ const N6$1 = Math.pow(2, 42);
344
+ const N7$1 = Math.pow(2, 49);
345
+ const N8$1 = Math.pow(2, 56);
346
+ const N9$1 = Math.pow(2, 63);
347
+ var encodingLength$1 = (value) => (value < N1$1 ? 1
348
+ : value < N2$1 ? 2
349
+ : value < N3$1 ? 3
350
+ : value < N4$1 ? 4
351
+ : value < N5$1 ? 5
352
+ : value < N6$1 ? 6
353
+ : value < N7$1 ? 7
354
+ : value < N8$1 ? 8
355
+ : value < N9$1 ? 9
350
356
  : 10);
351
357
 
352
- var index$7 = {
353
- encode: encode$5,
354
- decode: decode$6,
355
- encodingLength
358
+ var index$8 = {
359
+ encode: encode$6,
360
+ decode: decode$7,
361
+ encodingLength: encodingLength$1
356
362
  };
357
363
 
358
- var index$6 = (input, prefix) => {
364
+ var index$7 = (input, prefix) => {
359
365
  const encodedArray = [];
360
366
  const length = input.reduce((total, current) => {
361
- const encoded = index$7.encode(current.length);
367
+ const encoded = index$8.encode(current.length);
362
368
  encodedArray.push(encoded);
363
369
  total += current.length + encoded.length;
364
370
  return total;
@@ -380,14 +386,14 @@ var index$6 = (input, prefix) => {
380
386
  return typedArray;
381
387
  };
382
388
 
383
- var index$5 = (typedArray, prefix) => {
389
+ var index$6 = (typedArray, prefix) => {
384
390
  const set = [];
385
391
  if (prefix)
386
392
  typedArray = typedArray.subarray(prefix.length);
387
393
  const varintAndSub = (typedArray) => {
388
- const length = index$7.decode(typedArray);
394
+ const length = index$8.decode(typedArray);
389
395
  // remove length
390
- typedArray = typedArray.subarray(index$7.decode.bytes);
396
+ typedArray = typedArray.subarray(index$8.decode.bytes);
391
397
  // push value
392
398
  set.push(typedArray.subarray(0, length));
393
399
  // remove value
@@ -401,39 +407,39 @@ var index$5 = (typedArray, prefix) => {
401
407
 
402
408
  const ALPHABET$1 = '0123456789ABCDEF';
403
409
  const base16 = base$1(ALPHABET$1);
404
- const decode$5 = base16.decode;
405
- const encode$4 = base16.encode;
410
+ const decode$6 = base16.decode;
411
+ const encode$5 = base16.encode;
406
412
  const isBase16 = (string) => {
407
413
  try {
408
- decode$5(string);
414
+ decode$6(string);
409
415
  return true;
410
416
  }
411
417
  catch (e) {
412
418
  return false;
413
419
  }
414
420
  };
415
- var index$4 = {
416
- encode: encode$4,
417
- decode: decode$5,
421
+ var index$5 = {
422
+ encode: encode$5,
423
+ decode: decode$6,
418
424
  isBase16
419
425
  };
420
426
 
421
427
  const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
422
428
  const base64 = base$1(ALPHABET);
423
- const decode$4 = base64.decode;
424
- const encode$3 = base64.encode;
429
+ const decode$5 = base64.decode;
430
+ const encode$4 = base64.encode;
425
431
  const isBase64 = (string) => {
426
432
  try {
427
- decode$4(string);
433
+ decode$5(string);
428
434
  return true;
429
435
  }
430
436
  catch (e) {
431
437
  return false;
432
438
  }
433
439
  };
434
- var index$3 = {
435
- encode: encode$3,
436
- decode: decode$4,
440
+ var index$4 = {
441
+ encode: encode$4,
442
+ decode: decode$5,
437
443
  isBase64
438
444
  };
439
445
 
@@ -519,26 +525,26 @@ const fromObject = (object) => new TextEncoder().encode(JSON.stringify(object));
519
525
  const toObject = (uint8Array) => JSON.parse(new TextDecoder().decode(uint8Array));
520
526
  const fromBinary = (string) => fromHex(parseInt(string, 2).toString(16).toUpperCase());
521
527
  const toBinary = (uint8Array) => hexToBinary(toHex$2(uint8Array));
522
- const toBase64 = (uint8Array) => index$3.encode(uint8Array);
523
- const fromBase64 = (string) => index$3.decode(string);
528
+ const toBase64 = (uint8Array) => index$4.encode(uint8Array);
529
+ const fromBase64 = (string) => index$4.decode(string);
524
530
  const toBase58 = (uint8Array) => base58$1.encode(uint8Array);
525
531
  const fromBase58 = (string) => base58$1.decode(string);
526
- const toBase32 = (uint8Array) => index$8.encode(uint8Array);
527
- const fromBase32 = (string) => index$8.decode(string);
528
- const toBase16 = (uint8Array) => index$4.encode(uint8Array);
529
- const fromBase16 = (string) => index$4.decode(string);
532
+ const toBase32 = (uint8Array) => index$9.encode(uint8Array);
533
+ const fromBase32 = (string) => index$9.decode(string);
534
+ const toBase16 = (uint8Array) => index$5.encode(uint8Array);
535
+ const fromBase16 = (string) => index$5.decode(string);
530
536
  let FormatInterface$2 = class FormatInterface {
531
537
  encoded;
532
538
  decoded;
533
539
  constructor(input) {
534
540
  if (input) {
535
- if (index$4.isBase16(input))
541
+ if (index$5.isBase16(input))
536
542
  this.encoded = this.fromBase16(input);
537
- else if (index$8.isBase32(input))
543
+ else if (index$9.isBase32(input))
538
544
  this.encoded = this.fromBase32(input);
539
545
  else if (base58$1.isBase58(input))
540
546
  this.encoded = this.fromBase58(input);
541
- else if (index$3.isBase64(input))
547
+ else if (index$4.isBase64(input))
542
548
  this.encoded = this.fromBase64(input);
543
549
  else if (typeof input === 'string') {
544
550
  let isCompatible = isTypedArrayCompatible(input);
@@ -607,16 +613,16 @@ let FormatInterface$2 = class FormatInterface {
607
613
  toBinary = (uint8Array) => this.decoded = hexToBinary(toHex$2(uint8Array));
608
614
  fromBinary = (binary) => this.encoded = fromBinary(binary);
609
615
  toObject = (uint8Array) => this.decoded = toObject(uint8Array);
610
- toBase64 = (uint8Array) => this.decoded = index$3.encode(uint8Array);
611
- fromBase64 = (string) => this.encoded = index$3.decode(string);
616
+ toBase64 = (uint8Array) => this.decoded = index$4.encode(uint8Array);
617
+ fromBase64 = (string) => this.encoded = index$4.decode(string);
612
618
  toBase58 = (uint8Array) => this.decoded = base58$1.encode(uint8Array);
613
619
  fromBase58 = (string) => this.encoded = base58$1.decode(string);
614
- toBase32 = (uint8Array) => this.decoded = index$8.encode(uint8Array);
615
- fromBase32 = (string) => this.encoded = index$8.decode(string);
616
- toBase16 = (uint8Array) => this.decoded = index$4.encode(uint8Array);
617
- fromBase16 = (string) => this.decoded = index$4.decode(string);
620
+ toBase32 = (uint8Array) => this.decoded = index$9.encode(uint8Array);
621
+ fromBase32 = (string) => this.encoded = index$9.decode(string);
622
+ toBase16 = (uint8Array) => this.decoded = index$5.encode(uint8Array);
623
+ fromBase16 = (string) => this.decoded = index$5.decode(string);
618
624
  };
619
- var index$2 = {
625
+ var index$3 = {
620
626
  fromString: fromString$1,
621
627
  toString: toString$1,
622
628
  fromHex,
@@ -4768,7 +4774,7 @@ function throwFault(fault, operation, value) {
4768
4774
  return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);
4769
4775
  }
4770
4776
 
4771
- const { fromString, toString } = index$2;
4777
+ const { fromString, toString } = index$3;
4772
4778
  const isJson = (type) => type === 'object' || 'array';
4773
4779
  const isString = (type) => type === 'string';
4774
4780
  const isNumber = (type) => type === 'number';
@@ -4809,7 +4815,7 @@ const toType = (data) => {
4809
4815
  return new TextEncoder().encode(data.toString());
4810
4816
  throw new Error(`unsuported type ${typeof data || data}`);
4811
4817
  };
4812
- const encode$2 = (proto, input, compress) => {
4818
+ const encode$3 = (proto, input, compress) => {
4813
4819
  const keys = Object.keys(proto);
4814
4820
  const values = Object.values(proto);
4815
4821
  const set = [];
@@ -4824,10 +4830,10 @@ const encode$2 = (proto, input, compress) => {
4824
4830
  // when data is undefined push the default value of the proto
4825
4831
  set.push(toType(data || values[i]));
4826
4832
  }
4827
- return index$6(set);
4833
+ return index$7(set);
4828
4834
  };
4829
- const decode$3 = (proto, uint8Array, compressed) => {
4830
- let deconcated = index$5(uint8Array);
4835
+ const decode$4 = (proto, uint8Array, compressed) => {
4836
+ let deconcated = index$6(uint8Array);
4831
4837
  const output = {};
4832
4838
  const keys = Object.keys(proto);
4833
4839
  const values = Object.values(proto);
@@ -4856,18 +4862,112 @@ const decode$3 = (proto, uint8Array, compressed) => {
4856
4862
  }
4857
4863
  return output;
4858
4864
  };
4859
- var index$1 = {
4860
- encode: encode$2,
4861
- decode: decode$3
4865
+ var index$2 = {
4866
+ encode: encode$3,
4867
+ decode: decode$4
4862
4868
  };
4863
4869
 
4870
+ class BasicInterface {
4871
+ encoded;
4872
+ decoded;
4873
+ keys;
4874
+ name;
4875
+ #proto;
4876
+ set proto(value) {
4877
+ this.#proto = value;
4878
+ this.keys = Object.keys(value);
4879
+ }
4880
+ get proto() {
4881
+ return this.#proto;
4882
+ }
4883
+ decode(encoded) {
4884
+ encoded = encoded || this.encoded;
4885
+ return new Object();
4886
+ }
4887
+ encode(decoded) {
4888
+ decoded = decoded || this.decoded;
4889
+ return new Uint8Array();
4890
+ }
4891
+ // get Codec(): Codec {}
4892
+ protoEncode(data) {
4893
+ // check schema
4894
+ return index$2.encode(this.proto, data, false);
4895
+ }
4896
+ protoDecode(data) {
4897
+ // check schema
4898
+ return index$2.decode(this.proto, data, false);
4899
+ }
4900
+ isHex(string) {
4901
+ return isHex(string);
4902
+ }
4903
+ isBase32(string) {
4904
+ return index$9.isBase32(string);
4905
+ }
4906
+ isBase58(string) {
4907
+ return base58$1.isBase58(string);
4908
+ }
4909
+ fromBs32(encoded) {
4910
+ return this.decode(index$9.decode(encoded));
4911
+ }
4912
+ fromBs58(encoded) {
4913
+ return this.decode(fromBase58(encoded));
4914
+ }
4915
+ async toArray() {
4916
+ const array = [];
4917
+ for await (const value of this.encoded.values()) {
4918
+ array.push(value);
4919
+ }
4920
+ return array;
4921
+ }
4922
+ fromString(string) {
4923
+ const array = string.split(',');
4924
+ const arrayLike = array.map(string => Number(string));
4925
+ return this.decode(Uint8Array.from(arrayLike));
4926
+ }
4927
+ fromHex(string) {
4928
+ return this.decode(fromHex(string));
4929
+ }
4930
+ fromArray(array) {
4931
+ return this.decode(Uint8Array.from([...array]));
4932
+ }
4933
+ fromEncoded(encoded) {
4934
+ return this.decode(encoded);
4935
+ }
4936
+ toString() {
4937
+ if (!this.encoded)
4938
+ this.encode();
4939
+ return this.encoded.toString();
4940
+ }
4941
+ toHex() {
4942
+ if (!this.encoded)
4943
+ this.encode();
4944
+ return toHex$2(this.encoded);
4945
+ }
4946
+ /**
4947
+ * @return {String} encoded
4948
+ */
4949
+ toBs32() {
4950
+ if (!this.encoded)
4951
+ this.encode();
4952
+ return toBase32(this.encoded);
4953
+ }
4954
+ /**
4955
+ * @return {String} encoded
4956
+ */
4957
+ toBs58() {
4958
+ if (!this.encoded)
4959
+ this.encode();
4960
+ return toBase58(this.encoded);
4961
+ }
4962
+ }
4963
+
4864
4964
  /*!
4865
4965
  * hash-wasm (https://www.npmjs.com/package/hash-wasm)
4866
4966
  * (c) Dani Biro
4867
4967
  * @license MIT
4868
4968
  */
4869
4969
 
4870
- /*! *****************************************************************************
4970
+ /******************************************************************************
4871
4971
  Copyright (c) Microsoft Corporation.
4872
4972
 
4873
4973
  Permission to use, copy, modify, and/or distribute this software for any
@@ -4881,6 +4981,8 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4881
4981
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4882
4982
  PERFORMANCE OF THIS SOFTWARE.
4883
4983
  ***************************************************************************** */
4984
+ /* global Reflect, Promise, SuppressedError, Symbol */
4985
+
4884
4986
 
4885
4987
  function __awaiter(thisArg, _arguments, P, generator) {
4886
4988
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -4890,7 +4992,12 @@ function __awaiter(thisArg, _arguments, P, generator) {
4890
4992
  function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
4891
4993
  step((generator = generator.apply(thisArg, _arguments || [])).next());
4892
4994
  });
4893
- }
4995
+ }
4996
+
4997
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
4998
+ var e = new Error(message);
4999
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
5000
+ };
4894
5001
 
4895
5002
  class Mutex {
4896
5003
  constructor() {
@@ -5228,8 +5335,8 @@ new Mutex();
5228
5335
  new Mutex();
5229
5336
 
5230
5337
  var name$b = "sha3";
5231
- var data$b = "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";
5232
- var hash$b = "ec266d91";
5338
+ var data$b = "AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKqBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAQgAEsNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+QLAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA9CKASEVQQApA+CKASEWQQApA9iKASEXDAELQQApA+CKASAAKQNghSEWQQApA9iKASAAKQNYhSEXQQApA9CKASAAKQNQhSEVIBQgACkDSIUhFCABQekASQ0AQQBBACkD6IoBIAApA2iFNwPoigFBAEEAKQPwigEgACkDcIU3A/CKAUEAQQApA/iKASAAKQN4hTcD+IoBQQBBACkDgIsBIAApA4ABhTcDgIsBIAFBiQFJDQBBAEEAKQOIiwEgACkDiAGFNwOIiwELIAMgAoUhGCAFIASFIRkgByAGhSEHIAkgCIUhCCALIAqFIRogDSAMhSEJIA8gDoUhCiARIBCFIQsgEyAShSEMQQApA7iLASESQQApA5CLASETQQApA+iKASEbQQApA6CLASEcQQApA/iKASENQQApA7CLASEdQQApA4iLASEOQQApA8CLASEPQQApA5iLASEeQQApA/CKASEQQQApA6iLASERQQApA4CLASEfQcB+IQADQCAaIAcgC4UgF4UgH4UgEYVCAYmFIBSFIBCFIB6FIA+FIQIgDCAZIAqFIBaFIA6FIB2FQgGJhSAIhSAVhSANhSAchSIDIAeFISAgCSAIIAyFIBWFIA2FIByFQgGJhSAYhSAbhSAThSAShSIEIA+FISEgGCAKIBQgGoUgEIUgHoUgD4VCAYmFIBmFIBaFIA6FIB2FIgWFQjeJIiIgCyAYIAmFIBuFIBOFIBKFQgGJhSAHhSAXhSAfhSARhSIGIAqFQj6JIiNCf4WDIAMgEYVCAokiJIUhDyANIAKFQimJIiUgBCAQhUIniSImQn+FgyAihSERIBIgBYVCOIkiEiAGIA6FQg+JIidCf4WDIAMgF4VCCokiKIUhDiAEIBqFQhuJIikgKCAIIAKFQiSJIipCf4WDhSENIAYgGYVCBokiKyADIAuFQgGJIixCf4WDIBwgAoVCEokiLYUhECArIAQgHoVCCIkiLiAbIAWFQhmJIhtCf4WDhSEXIAYgHYVCPYkiGSAEIBSFQhSJIgQgCSAFhUIciSIIQn+Fg4UhFCAIIBlCf4WDIAMgH4VCLYkiA4UhGCAZIANCf4WDIBUgAoVCA4kiCYUhGSAEIAMgCUJ/hYOFIQcgCSAEQn+FgyAIhSEIIAwgAoUiAiAhQg6JIgNCf4WDIBMgBYVCFYkiBIUhCSAGIBaFQiuJIgUgAyAEQn+Fg4UhCiAEIAVCf4WDICBCLIkiBIUhCyAAQdAJaikDACAFIARCf4WDhSAChSEMICcgKEJ/hYMgKoUiBSEfIAMgBCACQn+Fg4UiAiEaICogKUJ/hYMgEoUiAyEeIC0gLkJ/hYMgG4UiBCEWICYgJCAlQn+Fg4UiBiEdIBsgK0J/hYMgLIUiKCEVICMgJiAiQn+Fg4UiIiEcIC4gLCAtQn+Fg4UiJiEbICcgKSASQn+Fg4UiJyETICMgJEJ/hYMgJYUiIyESIABBCGoiAA0AC0EAIBE3A6iLAUEAIAU3A4CLAUEAIBc3A9iKAUEAIAc3A7CKAUEAIAs3A4iKAUEAIA83A8CLAUEAIAM3A5iLAUEAIBA3A/CKAUEAIBQ3A8iKAUEAIAI3A6CKAUEAIAY3A7CLAUEAIA43A4iLAUEAIAQ3A+CKAUEAIBk3A7iKAUEAIAo3A5CKAUEAICI3A6CLAUEAIA03A/iKAUEAICg3A9CKAUEAIAg3A6iKAUEAIAw3A4CKAUEAICM3A7iLAUEAICc3A5CLAUEAICY3A+iKAUEAIBg3A8CKAUEAIAk3A5iKAQv4AgEFf0HkAEEAKAKMjQEiAUEBdmshAgJAQQAoAoiNASIDQQBIDQAgASEEAkAgASADRg0AIANByIsBaiEFQQAhAwNAIAUgA2pBADoAACADQQFqIgMgAUEAKAKIjQEiBGtJDQALCyAEQciLAWoiAyADLQAAIAByOgAAIAFBx4sBaiIDIAMtAABBgAFyOgAAQciLASABEANBAEGAgICAeDYCiI0BCwJAIAJBBEkNACACQQJ2IgNBA3EhBUEAIQQCQCADQX9qQQNJDQAgA0H8////A3EhAUEAIQNBACEEA0AgA0GACmogA0GAigFqKAIANgIAIANBhApqIANBhIoBaigCADYCACADQYgKaiADQYiKAWooAgA2AgAgA0GMCmogA0GMigFqKAIANgIAIANBEGohAyABIARBBGoiBEcNAAsLIAVFDQAgBUECdCEBIARBAnQhAwNAIANBgApqIANBgIoBaigCADYCACADQQRqIQMgAUF8aiIBDQALCwsGAEGAigEL0QYBA39BAEIANwOAjQFBAEIANwP4jAFBAEIANwPwjAFBAEIANwPojAFBAEIANwPgjAFBAEIANwPYjAFBAEIANwPQjAFBAEIANwPIjAFBAEIANwPAjAFBAEIANwO4jAFBAEIANwOwjAFBAEIANwOojAFBAEIANwOgjAFBAEIANwOYjAFBAEIANwOQjAFBAEIANwOIjAFBAEIANwOAjAFBAEIANwP4iwFBAEIANwPwiwFBAEIANwPoiwFBAEIANwPgiwFBAEIANwPYiwFBAEIANwPQiwFBAEIANwPIiwFBAEIANwPAiwFBAEIANwO4iwFBAEIANwOwiwFBAEIANwOoiwFBAEIANwOgiwFBAEIANwOYiwFBAEIANwOQiwFBAEIANwOIiwFBAEIANwOAiwFBAEIANwP4igFBAEIANwPwigFBAEIANwPoigFBAEIANwPgigFBAEIANwPYigFBAEIANwPQigFBAEIANwPIigFBAEIANwPAigFBAEIANwO4igFBAEIANwOwigFBAEIANwOoigFBAEIANwOgigFBAEIANwOYigFBAEIANwOQigFBAEIANwOIigFBAEIANwOAigFBAEHADCABQQF0a0EDdjYCjI0BQQBBADYCiI0BIAAQAkHkAEEAKAKMjQEiAEEBdmshAwJAQQAoAoiNASIBQQBIDQAgACEEAkAgACABRg0AIAFByIsBaiEFQQAhAQNAIAUgAWpBADoAACABQQFqIgEgAEEAKAKIjQEiBGtJDQALCyAEQciLAWoiASABLQAAIAJyOgAAIABBx4sBaiIBIAEtAABBgAFyOgAAQciLASAAEANBAEGAgICAeDYCiI0BCwJAIANBBEkNACADQQJ2IgFBA3EhBUEAIQQCQCABQX9qQQNJDQAgAUH8////A3EhAEEAIQFBACEEA0AgAUGACmogAUGAigFqKAIANgIAIAFBhApqIAFBhIoBaigCADYCACABQYgKaiABQYiKAWooAgA2AgAgAUGMCmogAUGMigFqKAIANgIAIAFBEGohASAAIARBBGoiBEcNAAsLIAVFDQAgBUECdCEAIARBAnQhAQNAIAFBgApqIAFBgIoBaigCADYCACABQQRqIQEgAEF8aiIADQALCwsL2AEBAEGACAvQAZABAAAAAAAAAAAAAAAAAAABAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIA=";
5339
+ var hash$b = "f2f6f5b2";
5233
5340
  var wasmJson$b = {
5234
5341
  name: name$b,
5235
5342
  data: data$b,
@@ -5274,8 +5381,8 @@ new Mutex();
5274
5381
  new Mutex();
5275
5382
 
5276
5383
  var name$9 = "sha512";
5277
- var data$9 = "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";
5278
- var hash$9 = "a5d1ca7c";
5384
+ var data$9 = "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";
5385
+ var hash$9 = "cdd57f6a";
5279
5386
  var wasmJson$9 = {
5280
5387
  name: name$9,
5281
5388
  data: data$9,
@@ -5313,8 +5420,8 @@ new Mutex();
5313
5420
  new Mutex();
5314
5421
 
5315
5422
  var name$4 = "ripemd160";
5316
- var data$4 = "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";
5317
- var hash$4 = "42f1de39";
5423
+ var data$4 = "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";
5424
+ var hash$4 = "c089a7ca";
5318
5425
  var wasmJson$4 = {
5319
5426
  name: name$4,
5320
5427
  data: data$4,
@@ -5600,106 +5707,7 @@ var utils$p = {
5600
5707
  codecs: globalThis.peernetCodecs
5601
5708
  };
5602
5709
 
5603
- /**
5604
- * @param {string}
5605
- */
5606
- var isHex = (function (string) { return /^[A-F0-9]+$/i.test(string); });
5607
-
5608
- let BasicInterface$1 = class BasicInterface {
5609
- encoded;
5610
- decoded;
5611
- keys;
5612
- name;
5613
- #proto;
5614
- set proto(value) {
5615
- this.#proto = value;
5616
- this.keys = Object.keys(value);
5617
- }
5618
- get proto() {
5619
- return this.#proto;
5620
- }
5621
- decode(encoded) {
5622
- encoded = encoded || this.encoded;
5623
- return new Object();
5624
- }
5625
- encode(decoded) {
5626
- decoded = decoded || this.decoded;
5627
- return new Uint8Array();
5628
- }
5629
- // get Codec(): Codec {}
5630
- protoEncode(data) {
5631
- // check schema
5632
- return index$1.encode(this.proto, data, false);
5633
- }
5634
- protoDecode(data) {
5635
- // check schema
5636
- return index$1.decode(this.proto, data, false);
5637
- }
5638
- isHex(string) {
5639
- return isHex(string);
5640
- }
5641
- isBase32(string) {
5642
- return index$8.isBase32(string);
5643
- }
5644
- isBase58(string) {
5645
- return base58$1.isBase58(string);
5646
- }
5647
- fromBs32(encoded) {
5648
- return this.decode(index$8.decode(encoded));
5649
- }
5650
- fromBs58(encoded) {
5651
- return this.decode(fromBase58(encoded));
5652
- }
5653
- async toArray() {
5654
- const array = [];
5655
- for await (const value of this.encoded.values()) {
5656
- array.push(value);
5657
- }
5658
- return array;
5659
- }
5660
- fromString(string) {
5661
- const array = string.split(',');
5662
- const arrayLike = array.map(string => Number(string));
5663
- return this.decode(Uint8Array.from(arrayLike));
5664
- }
5665
- fromHex(string) {
5666
- return this.decode(fromHex(string));
5667
- }
5668
- fromArray(array) {
5669
- return this.decode(Uint8Array.from([...array]));
5670
- }
5671
- fromEncoded(encoded) {
5672
- return this.decode(encoded);
5673
- }
5674
- toString() {
5675
- if (!this.encoded)
5676
- this.encode();
5677
- return this.encoded.toString();
5678
- }
5679
- toHex() {
5680
- if (!this.encoded)
5681
- this.encode();
5682
- return toHex$2(this.encoded.toString().split(',').map(number => Number(number)));
5683
- }
5684
- /**
5685
- * @return {String} encoded
5686
- */
5687
- toBs32() {
5688
- if (!this.encoded)
5689
- this.encode();
5690
- return toBase32(this.encoded);
5691
- }
5692
- /**
5693
- * @return {String} encoded
5694
- */
5695
- toBs58() {
5696
- if (!this.encoded)
5697
- this.encode();
5698
- return toBase58(this.encoded);
5699
- }
5700
- };
5701
-
5702
- let Codec$1 = class Codec extends BasicInterface$1 {
5710
+ let Codec$1 = class Codec extends BasicInterface {
5703
5711
  codecBuffer;
5704
5712
  codec;
5705
5713
  hashAlg;
@@ -5707,7 +5715,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5707
5715
  super();
5708
5716
  if (buffer) {
5709
5717
  if (buffer instanceof Uint8Array) {
5710
- const codec = index$7.decode(buffer);
5718
+ const codec = index$8.decode(buffer);
5711
5719
  const name = this.getCodecName(codec);
5712
5720
  if (name) {
5713
5721
  this.name = name;
@@ -5719,7 +5727,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5719
5727
  }
5720
5728
  }
5721
5729
  else if (buffer instanceof ArrayBuffer) {
5722
- const codec = index$7.decode(new Uint8Array(buffer));
5730
+ const codec = index$8.decode(new Uint8Array(buffer));
5723
5731
  const name = this.getCodecName(codec);
5724
5732
  if (name) {
5725
5733
  this.name = name;
@@ -5747,7 +5755,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5747
5755
  }
5748
5756
  }
5749
5757
  fromEncoded(encoded) {
5750
- const codec = index$7.decode(encoded);
5758
+ const codec = index$8.decode(encoded);
5751
5759
  const name = this.getCodecName(codec);
5752
5760
  this.name = name;
5753
5761
  this.encoded = encoded;
@@ -5766,29 +5774,29 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5766
5774
  this.name = this.getCodecName(codec);
5767
5775
  this.hashAlg = this.getHashAlg(this.name);
5768
5776
  this.codec = this.getCodec(this.name);
5769
- this.codecBuffer = index$7.encode(this.codec);
5777
+ this.codecBuffer = index$8.encode(this.codec);
5770
5778
  }
5771
5779
  fromName(name) {
5772
5780
  const codec = this.getCodec(name);
5773
5781
  this.name = name;
5774
5782
  this.codec = codec;
5775
5783
  this.hashAlg = this.getHashAlg(name);
5776
- this.codecBuffer = index$7.encode(this.codec);
5784
+ this.codecBuffer = index$8.encode(this.codec);
5777
5785
  }
5778
5786
  decode(encoded) {
5779
5787
  encoded = encoded || this.encoded;
5780
- const codec = index$7.decode(encoded);
5788
+ const codec = index$8.decode(encoded);
5781
5789
  this.fromCodec(codec);
5782
5790
  return this.decoded;
5783
5791
  }
5784
5792
  encode(codec) {
5785
5793
  codec = codec || this.codec;
5786
- this.encoded = index$7.encode(codec);
5794
+ this.encoded = index$8.encode(codec);
5787
5795
  return this.encoded;
5788
5796
  }
5789
5797
  };
5790
5798
 
5791
- let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5799
+ class CodecHash extends BasicInterface {
5792
5800
  codec;
5793
5801
  codecs;
5794
5802
  digest;
@@ -5801,6 +5809,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5801
5809
  this.name = 'disco-hash';
5802
5810
  if (options.codecs)
5803
5811
  this.codecs = options.codecs;
5812
+ // @ts-ignore
5804
5813
  return this.init(buffer);
5805
5814
  }
5806
5815
  async init(uint8Array) {
@@ -5839,7 +5848,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5839
5848
  return uint8Array;
5840
5849
  }
5841
5850
  get length() {
5842
- return index$7.encode(this.size);
5851
+ return index$8.encode(this.size);
5843
5852
  }
5844
5853
  get buffer() {
5845
5854
  return this.encoded;
@@ -5879,7 +5888,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5879
5888
  }
5880
5889
  async validate(buffer) {
5881
5890
  if (Buffer.isBuffer(buffer)) {
5882
- const codec = index$7.decode(buffer);
5891
+ const codec = index$8.decode(buffer);
5883
5892
  if (this.codecs[codec]) {
5884
5893
  this.decode(buffer);
5885
5894
  }
@@ -5896,14 +5905,14 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5896
5905
  if (typeof buffer === 'object')
5897
5906
  this.fromJSON(buffer);
5898
5907
  }
5899
- decode(buffer) {
5900
- this.encoded = buffer;
5901
- const codec = index$7.decode(buffer);
5908
+ decode(encoded) {
5909
+ this.encoded = encoded;
5910
+ const codec = index$8.decode(encoded);
5902
5911
  this.codec = new Codec$1(codec);
5903
5912
  // TODO: validate codec
5904
- buffer = buffer.slice(index$7.decode.bytes);
5905
- this.size = index$7.decode(buffer);
5906
- this.digest = buffer.slice(index$7.decode.bytes);
5913
+ encoded = encoded.slice(index$8.decode.bytes);
5914
+ this.size = index$8.decode(encoded);
5915
+ this.digest = encoded.slice(index$8.decode.bytes);
5907
5916
  if (this.digest.length !== this.size) {
5908
5917
  throw new Error(`hash length inconsistent: ${this.encoded.toString()}`);
5909
5918
  }
@@ -5918,9 +5927,9 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5918
5927
  digest: this.digest,
5919
5928
  };
5920
5929
  }
5921
- };
5930
+ }
5922
5931
 
5923
- let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
5932
+ let FormatInterface$1 = class FormatInterface extends BasicInterface {
5924
5933
  hashFormat;
5925
5934
  init(buffer) {
5926
5935
  if (buffer instanceof Uint8Array)
@@ -6005,7 +6014,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
6005
6014
  * @return {PeernetHash}
6006
6015
  */
6007
6016
  get peernetHash() {
6008
- return new CodecHash$1(this.decoded, { name: this.name });
6017
+ return new CodecHash(this.decoded, { name: this.name });
6009
6018
  }
6010
6019
  /**
6011
6020
  * @return {peernetHash}
@@ -6037,6 +6046,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
6037
6046
  }
6038
6047
  }
6039
6048
  };
6049
+
6040
6050
  const FormatInterface = FormatInterface$1;
6041
6051
  const Codec = Codec$1;
6042
6052
 
@@ -6399,6 +6409,7 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
6399
6409
  let size = 0;
6400
6410
  const query = await this.db.iterate();
6401
6411
  for await (const item of query) {
6412
+ // @ts-ignore
6402
6413
  size += item.value ? item.value.length : item[1].length;
6403
6414
  }
6404
6415
  return size;
@@ -6459,66 +6470,6 @@ const pbkdf2 = async (password, salt, iterations = 4096, length = 64, hash = 'SH
6459
6470
  }, key, length)
6460
6471
  };
6461
6472
 
6462
- const generateAesKey = async (length = 256) => {
6463
- const key = await subtle.generateKey({
6464
- name: 'AES-CBC',
6465
- length
6466
- }, true, ['encrypt', 'decrypt']);
6467
-
6468
- return key;
6469
- };
6470
-
6471
- const importAesKey = async (exported, format = 'raw', length = 256) => {
6472
- return await subtle.importKey(format, exported, {
6473
- name: 'AES-CBC',
6474
- length
6475
- }, true, ['encrypt', 'decrypt'])
6476
- };
6477
-
6478
- const exportAesKey = async (key, format = 'raw') => {
6479
- return await subtle.exportKey(format, key)
6480
- };
6481
-
6482
- const encryptAes = async (uint8Array, key, iv) => subtle.encrypt({
6483
- name: 'AES-CBC',
6484
- iv,
6485
- }, key, uint8Array);
6486
-
6487
- const decryptAes = async (uint8Array, key, iv) => subtle.decrypt({
6488
- name: 'AES-CBC',
6489
- iv,
6490
- }, key, uint8Array);
6491
-
6492
- const uint8ArrayToHex = uint8Array =>
6493
- [...uint8Array].map(x => x.toString(16).padStart(2, '0')).join('');
6494
-
6495
- const arrayBufferToHex = arrayBuffer =>
6496
- uint8ArrayToHex(new Uint8Array(arrayBuffer));
6497
-
6498
- const hexToUint8Array = hex =>
6499
- new Uint8Array(hex.match(/[\da-f]{2}/gi).map(x => parseInt(x, 16)));
6500
-
6501
- const encrypt$1 = async string => {
6502
- const key = await generateAesKey();
6503
- const iv = randombytes(16);
6504
- const ciphertext = await encryptAes(new TextEncoder().encode(string), key, iv);
6505
- const exported = await exportAesKey(key);
6506
- return {
6507
- key: arrayBufferToHex(exported),
6508
- iv: uint8ArrayToHex(iv),
6509
- cipher: arrayBufferToHex(ciphertext)
6510
- }
6511
- };
6512
-
6513
- const decrypt$1 = async ({cipher, key, iv}) => {
6514
- if (!key.type) key = await importAesKey(hexToUint8Array(key));
6515
- cipher = new Uint8Array(hexToUint8Array(cipher));
6516
- iv = new Uint8Array(hexToUint8Array(iv));
6517
-
6518
- const plaintext = await decryptAes(cipher, key, iv);
6519
- return new TextDecoder().decode(plaintext);
6520
- };
6521
-
6522
6473
  var typedArrayConcat = (input, options = {length: undefined, seperator: undefined}) => {
6523
6474
  if (!options) options = {};
6524
6475
 
@@ -6552,7 +6503,7 @@ const concatAndDoubleHash = async (input) => {
6552
6503
  return new Uint8Array(await createDoubleHash(typedArrayConcat(input), 'SHA-256'));
6553
6504
  };
6554
6505
 
6555
- const encode$1 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
6506
+ const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
6556
6507
  if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
6557
6508
  throw new TypeError('Expected Uint8Array');
6558
6509
  }
@@ -6569,7 +6520,7 @@ const encode$1 = async (source, prefix = new TextEncoder().encode('00'), hex) =>
6569
6520
  return base58$1.encodeHex(uint8Array);
6570
6521
  return base58$1.encode(uint8Array);
6571
6522
  };
6572
- const decode$2 = async (string, hex) => {
6523
+ const decode$3 = async (string, hex) => {
6573
6524
  let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
6574
6525
  const prefix = uint8Array.subarray(0, 2);
6575
6526
  const source = uint8Array.subarray(2, -4);
@@ -6589,21 +6540,21 @@ const decode$2 = async (string, hex) => {
6589
6540
  };
6590
6541
  const isBase58check = (string, hex) => {
6591
6542
  try {
6592
- hex ? decode$2(string, true) : decode$2(string);
6543
+ hex ? decode$3(string, true) : decode$3(string);
6593
6544
  return true;
6594
6545
  }
6595
6546
  catch (e) {
6596
6547
  return false;
6597
6548
  }
6598
6549
  };
6599
- const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$1(uint8Array, prefix, true);
6600
- const decodeHex = (string) => decode$2(string, true);
6550
+ const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
6551
+ const decodeHex = (string) => decode$3(string, true);
6601
6552
  const isBase58checkHex = (string) => isBase58check(string, true);
6602
- var base58check = { encode: encode$1, decode: decode$2, encodeHex, decodeHex, isBase58check, isBase58checkHex };
6553
+ var base58check = { encode: encode$2, decode: decode$3, encodeHex, decodeHex, isBase58check, isBase58checkHex };
6603
6554
 
6604
- const decode$1 = (multiWif, expectedVersion, expectedCodec) => {
6555
+ const decode$2 = (multiWif, expectedVersion, expectedCodec) => {
6605
6556
  const decoded = base58$1.decode(multiWif);
6606
- let [version, codec, privateKey] = index$5(decoded);
6557
+ let [version, codec, privateKey] = index$6(decoded);
6607
6558
  version = Number(new TextDecoder().decode(version));
6608
6559
  codec = Number(new TextDecoder().decode(codec));
6609
6560
  if (expectedVersion && version !== expectedVersion)
@@ -6612,18 +6563,18 @@ const decode$1 = (multiWif, expectedVersion, expectedCodec) => {
6612
6563
  throw new Error(`invalid codec: expected ${expectedCodec} but got ${codec}`);
6613
6564
  return { version, codec, privateKey };
6614
6565
  };
6615
- var index = {
6566
+ var index$1 = {
6616
6567
  encode: (version, codec, privateKey) => {
6617
- return base58$1.encode(index$6([
6568
+ return base58$1.encode(index$7([
6618
6569
  new TextEncoder().encode(version.toString()),
6619
6570
  new TextEncoder().encode(codec.toString()),
6620
6571
  privateKey
6621
6572
  ]));
6622
6573
  },
6623
- decode: decode$1,
6574
+ decode: decode$2,
6624
6575
  isMultiWif: (multiWif) => {
6625
6576
  try {
6626
- const { version, codec, privateKey } = decode$1(multiWif);
6577
+ const { version, codec, privateKey } = decode$2(multiWif);
6627
6578
  if (version === undefined)
6628
6579
  return false;
6629
6580
  if (codec === undefined)
@@ -16285,110 +16236,113 @@ var elliptic = lib(elliptic$1);
16285
16236
 
16286
16237
  var secp256k1 = /*@__PURE__*/getDefaultExportFromCjs(elliptic);
16287
16238
 
16288
- const leofcoinOlivia = {
16289
- messagePrefix: '\u0019Leofcoin Signed Message:',
16290
- version: 1,
16291
- pubKeyHash: 0x73,
16292
- scriptHash: 0x76,
16293
- multiTxHash: 0x8b4125,
16294
- payments: {
16295
- version: 0,
16296
- unspent: 0x1fa443d7 // ounsp
16297
- },
16298
- wif: 0x7D,
16299
- multiCodec: 0x7c4,
16300
- bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
16301
- };
16302
- const bitcoinTestnet = {
16303
- messagePrefix: '\x18Bitcoin Signed Message:\n',
16304
- version: 1,
16305
- bech32: 'tb',
16306
- pubKeyHash: 0x6f,
16307
- scriptHash: 0xc4,
16308
- wif: 0xef,
16309
- bip32: {
16310
- public: 0x043587cf,
16311
- private: 0x04358394
16312
- },
16313
- multiCodec: 0
16314
- };
16315
- var testnets = {
16316
- 'leofcoin:olivia': leofcoinOlivia,
16317
- 'bitcoin:testnet': bitcoinTestnet
16239
+ const leofcoinOlivia = {
16240
+ messagePrefix: '\u0019Leofcoin Signed Message:',
16241
+ version: 1,
16242
+ pubKeyHash: 0x73,
16243
+ scriptHash: 0x76,
16244
+ multiTxHash: 0x8b4125,
16245
+ payments: {
16246
+ version: 0,
16247
+ unspent: 0x1fa443d7 // ounsp
16248
+ },
16249
+ wif: 0x7D,
16250
+ multiCodec: 0x7c4,
16251
+ bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
16252
+ };
16253
+ const bitcoinTestnet = {
16254
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
16255
+ version: 1,
16256
+ bech32: 'tb',
16257
+ pubKeyHash: 0x6f,
16258
+ scriptHash: 0xc4,
16259
+ wif: 0xef,
16260
+ bip32: {
16261
+ public: 0x043587cf,
16262
+ private: 0x04358394
16263
+ },
16264
+ multiCodec: 0
16265
+ };
16266
+ var testnets = {
16267
+ 'leofcoin:olivia': leofcoinOlivia,
16268
+ 'bitcoin:testnet': bitcoinTestnet
16318
16269
  };
16319
16270
 
16320
- // https://en.bitcoin.it/wiki/List_of_address_prefixes
16321
- /**
16322
- * Main network
16323
- * @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
16324
- */
16325
- const leofcoin = {
16326
- messagePrefix: '\u0019Leofcoin Signed Message:',
16327
- version: 1,
16328
- pubKeyHash: 0x30,
16329
- scriptHash: 0x37,
16330
- multiTxHash: 0x3adeed,
16331
- payments: {
16332
- version: 0,
16333
- unspent: 0x0d6e0327 // Lunsp
16334
- },
16335
- coin_type: 640,
16336
- wif: 0x3F,
16337
- multiCodec: 0x3c4,
16338
- bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
16339
- testnet: testnets['leofcoin:olivia']
16340
- };
16341
- const bitcoin = {
16342
- messagePrefix: '\x18Bitcoin Signed Message:\n',
16343
- version: 1,
16344
- bech32: 'bc',
16345
- pubKeyHash: 0x00,
16346
- multiCodec: 0x00,
16347
- scriptHash: 0x05,
16348
- wif: 0x80,
16349
- coin_type: 0,
16350
- bip32: {
16351
- public: 0x0488b21e, private: 0x0488ade4
16352
- },
16353
- testnet: testnets['bitcoin:testnet']
16354
- };
16355
- const litecoin = {
16356
- messagePrefix: '\x19Litecoin Signed Message:\n',
16357
- version: 1,
16358
- pubKeyHash: 0x30,
16359
- scriptHash: 0x32,
16360
- wif: 0xb0,
16361
- bip32: {
16362
- public: 0x019da462,
16363
- private: 0x019d9cfe
16364
- },
16365
- bech32: '',
16366
- multiCodec: 0
16367
- };
16368
- const ethereum = {
16369
- messagePrefix: '\x19Ethereum Signed Message:\n',
16370
- version: 1,
16371
- pubKeyHash: 0x30,
16372
- scriptHash: 0x32,
16373
- bip32: {
16374
- private: 0x0488ADE4, public: 0x0488B21E
16375
- },
16376
- coin_type: 60,
16377
- wif: 0x45,
16378
- multiCodec: 0x3c5
16379
- };
16380
- /**
16381
- * Our & supported networks
16382
- * @return {leofcoin, olivia}
16383
- */
16384
- var networks = {
16385
- leofcoin,
16386
- bitcoin,
16387
- litecoin,
16388
- ethereum
16271
+ // https://en.bitcoin.it/wiki/List_of_address_prefixes
16272
+ // usage:
16273
+ // networks['bitcoin']['testnet']
16274
+ // networks.bitcoin.testnet
16275
+ /**
16276
+ * Main network
16277
+ * @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
16278
+ */
16279
+ const leofcoin = {
16280
+ messagePrefix: '\u0019Leofcoin Signed Message:',
16281
+ version: 1,
16282
+ pubKeyHash: 0x30,
16283
+ scriptHash: 0x37,
16284
+ multiTxHash: 0x3adeed,
16285
+ payments: {
16286
+ version: 0,
16287
+ unspent: 0x0d6e0327 // Lunsp
16288
+ },
16289
+ coin_type: 640,
16290
+ wif: 0x3F,
16291
+ multiCodec: 0x3c4,
16292
+ bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
16293
+ testnet: testnets['leofcoin:olivia']
16294
+ };
16295
+ const bitcoin = {
16296
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
16297
+ version: 1,
16298
+ bech32: 'bc',
16299
+ pubKeyHash: 0x00,
16300
+ multiCodec: 0x00,
16301
+ scriptHash: 0x05,
16302
+ wif: 0x80,
16303
+ coin_type: 0,
16304
+ bip32: {
16305
+ public: 0x0488b21e, private: 0x0488ade4
16306
+ },
16307
+ testnet: testnets['bitcoin:testnet']
16308
+ };
16309
+ const litecoin = {
16310
+ messagePrefix: '\x19Litecoin Signed Message:\n',
16311
+ version: 1,
16312
+ pubKeyHash: 0x30,
16313
+ scriptHash: 0x32,
16314
+ wif: 0xb0,
16315
+ bip32: {
16316
+ public: 0x019da462,
16317
+ private: 0x019d9cfe
16318
+ },
16319
+ bech32: '',
16320
+ multiCodec: 0
16321
+ };
16322
+ const ethereum = {
16323
+ messagePrefix: '\x19Ethereum Signed Message:\n',
16324
+ version: 1,
16325
+ pubKeyHash: 0x30,
16326
+ scriptHash: 0x32,
16327
+ bip32: {
16328
+ private: 0x0488ADE4, public: 0x0488B21E
16329
+ },
16330
+ coin_type: 60,
16331
+ wif: 0x45,
16332
+ multiCodec: 0x3c5
16333
+ };
16334
+ /**
16335
+ * Our & supported networks
16336
+ * @return {leofcoin, olivia}
16337
+ */
16338
+ var networks = {
16339
+ leofcoin,
16340
+ bitcoin,
16341
+ litecoin,
16342
+ ethereum
16389
16343
  };
16390
16344
 
16391
- const encode = (version, privateKey, compressed) => {
16345
+ const encode$1 = (version, privateKey, compressed) => {
16392
16346
  if (privateKey.length !== 32)
16393
16347
  throw new TypeError(`Invalid privateKey length: expected 32 got ${privateKey.length}`);
16394
16348
  const uint8Array = new Uint8Array(compressed ? 34 : 33);
@@ -16399,7 +16353,7 @@ const encode = (version, privateKey, compressed) => {
16399
16353
  }
16400
16354
  return base58check.encode(uint8Array);
16401
16355
  };
16402
- const decode = async (wif, version) => {
16356
+ const decode$1 = async (wif, version) => {
16403
16357
  wif = (await base58check.decode(wif)).data;
16404
16358
  if (version && wif[0] !== version)
16405
16359
  throw new Error('Invalid network version');
@@ -16414,207 +16368,216 @@ const decode = async (wif, version) => {
16414
16368
  compressed: wif.length === 33 ? false : true
16415
16369
  };
16416
16370
  };
16417
- var wif = { encode, decode };
16418
-
16419
- const HIGHEST_BIT = 0x80000000;
16420
- const { publicKeyCreate, publicKeyVerify, privateKeyVerify, privateKeyTweakAdd, ecdh } = secp256k1;
16421
- class HdNode {
16422
- #privateKey;
16423
- #publicKey;
16424
- #chainCode;
16425
- #network;
16426
- #depth;
16427
- #index;
16428
- #parentFingerprint;
16429
- constructor(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
16430
- this.init(privateKey, publicKey, chainCode, network, depth, index, parentFingerprint);
16431
- }
16432
- init(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
16433
- this.#privateKey = privateKey;
16434
- this.#publicKey = publicKey;
16435
- this.#chainCode = chainCode;
16436
- this.#network = network || networks.leofcoin;
16437
- this.#depth = depth;
16438
- this.#index = index;
16439
- this.#parentFingerprint = parentFingerprint;
16440
- }
16441
- get network() {
16442
- return this.#network;
16443
- }
16444
- get publicKey() {
16445
- this.#publicKey = this.#publicKey || publicKeyCreate(this.#privateKey, true);
16446
- return this.#publicKey;
16447
- }
16448
- get privateKey() {
16449
- return this.#privateKey;
16450
- }
16451
- get identifier() {
16452
- return this.hash160(this.publicKey);
16453
- }
16454
- get fingerprint() {
16455
- return (async () => (await this.identifier).subarray(0, 4))();
16456
- }
16457
- async hash160(data) {
16458
- const hash = await createHash(data, 'SHA-256');
16459
- return (await createRIPEMD160()).update(new Uint8Array(hash)).digest('binary');
16460
- }
16461
- get isNeutered() {
16462
- return this.#privateKey === undefined;
16463
- }
16464
- get neutered() {
16465
- return new HdNode(undefined, this.#publicKey, this.#chainCode, this.#network, this.#depth, this.#index, this.#parentFingerprint);
16466
- }
16467
- fromPrivateKey(privateKey, chainCode, network) {
16468
- if (!privateKeyVerify(privateKey))
16469
- throw new TypeError('Private key not in range [1, n)');
16470
- return new HdNode(privateKey, publicKeyCreate(privateKey, true), chainCode, network);
16471
- }
16472
- fromPublicKey(publicKey, chainCode, network) {
16473
- // verify the X coordinate is a point on the curve
16474
- if (!publicKeyVerify(publicKey))
16475
- throw new TypeError('Point is not on the curve');
16476
- return new HdNode(undefined, publicKey, chainCode, network);
16477
- }
16478
- async fromSeed(seed, network) {
16479
- if (seed.length < 16)
16480
- throw new TypeError('Seed should be at least 128 bits');
16481
- if (seed.length > 64)
16482
- throw new TypeError('Seed should be at most 512 bits');
16483
- let hash = (await createHMAC(createSHA512(), new TextEncoder().encode('Bitcoin seed')))
16484
- .update(seed)
16485
- .digest('binary');
16486
- const privateKey = hash.subarray(0, 32);
16487
- const chainCode = hash.subarray(32);
16488
- return this.fromPrivateKey(privateKey, chainCode, network);
16489
- }
16490
- async toBase58() {
16491
- const network = this.#network || networks.leofcoin;
16492
- let version = !this.isNeutered
16493
- ? network.bip32.private
16494
- : network.bip32.public;
16495
- const set = [
16496
- new TextEncoder().encode(version.toString()),
16497
- new TextEncoder().encode(this.#depth.toString()),
16498
- new TextEncoder().encode(this.#parentFingerprint.toString()),
16499
- new TextEncoder().encode(this.#index.toString()),
16500
- this.#chainCode
16501
- ];
16502
- if (!this.isNeutered) {
16503
- set.push(new TextEncoder().encode('0'));
16504
- set.push(new Uint8Array(this.privateKey));
16505
- }
16506
- else {
16507
- set.push(new Uint8Array(this.publicKey));
16508
- }
16509
- return base58check.encode(index$6(set));
16510
- }
16511
- toWIF() {
16512
- if (!this.#privateKey)
16513
- throw new TypeError('Missing private key');
16514
- return wif.encode(this.#network.wif, this.#privateKey, true);
16515
- }
16516
- // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16517
- async derive(index) {
16518
- const isHardened = index >= HIGHEST_BIT;
16519
- let data;
16520
- // Hardened child
16521
- if (isHardened) {
16522
- if (this.isNeutered)
16523
- throw new TypeError('Missing private key for hardened child key');
16524
- // data = 0x00 || ser256(kpar) || ser32(index)
16525
- data = index$6([
16526
- new TextEncoder().encode('0'),
16527
- this.privateKey,
16528
- new TextEncoder().encode(index.toString())
16529
- ]);
16530
- }
16531
- else {
16532
- data = index$6([
16533
- this.publicKey,
16534
- new TextEncoder().encode(index.toString())
16535
- ]);
16536
- }
16537
- const hash = (await createHMAC(createSHA512(), this.#chainCode))
16538
- .update(data)
16539
- .digest('binary');
16540
- const privateKey = hash.subarray(0, 32);
16541
- const chainCode = hash.subarray(32);
16542
- // if parse256(privateKey) >= n, proceed with the next value for i
16543
- if (!privateKeyVerify(privateKey))
16544
- return this.derive(index + 1);
16545
- // Private parent key -> private child key
16546
- if (!this.isNeutered) {
16547
- // ki = parse256(privateKey) + kpar (mod n)
16548
- const ki = privateKeyTweakAdd(this.privateKey, privateKey);
16549
- // In case ki == 0, proceed with the next value for i
16550
- if (ki == null)
16551
- return this.derive(index + 1);
16552
- return new HdNode(ki, null, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
16553
- }
16554
- function hashfn(x, y) {
16555
- const pubKey = new Uint8Array(33);
16556
- pubKey[0] = (y[31] & 1) === 0 ? 0x02 : 0x03;
16557
- pubKey.set(x, 1);
16558
- return pubKey;
16559
- }
16560
- const Ki = ecdh(this.publicKey, chainCode, { hashfn }, new Uint8Array(33));
16561
- // const Ki = new Uint8Array(ecc.pointAddScalar(this.publicKey, IL, true));
16562
- // In case Ki is the point at infinity, proceed with the next value for i
16563
- if (Ki === null)
16564
- return this.derive(index + 1);
16565
- return new HdNode(undefined, Ki, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
16566
- }
16567
- deriveHardened(index) {
16568
- // Only derives hardened private keys by default
16569
- return this.derive(index + HIGHEST_BIT);
16570
- }
16571
- async derivePath(path) {
16572
- let splitPath = path.split('/');
16573
- if (splitPath[0] === 'm') {
16574
- if (this.#parentFingerprint)
16575
- throw new TypeError('Expected master, got child');
16576
- splitPath = splitPath.slice(1);
16577
- }
16578
- let prevHd = this;
16579
- for (const indexString of splitPath) {
16580
- let index;
16581
- if (indexString.slice(-1) === `'`) {
16582
- index = parseInt(indexString.slice(0, -1), 10);
16583
- prevHd = await prevHd.deriveHardened(index);
16584
- }
16585
- else {
16586
- index = parseInt(indexString, 10);
16587
- prevHd = await prevHd.derive(index);
16588
- }
16589
- }
16590
- return prevHd;
16591
- }
16592
- async fromBase58(string, network) {
16593
- let buffer = (await base58check.decode(string)).data;
16594
- network = network || networks.leofcoin;
16595
- // 4 bytes: version bytes
16596
- let [version, depth, parentFingerprint, index, chainCode, k, privateKey] = index$5(buffer);
16597
- version = Number(new TextDecoder().decode(version));
16598
- depth = Number(new TextDecoder().decode(depth));
16599
- parentFingerprint = Number(new TextDecoder().decode(parentFingerprint));
16600
- index = Number(new TextDecoder().decode(index));
16601
- k = privateKey ? 0 : k;
16602
- if (version !== network.bip32.private && version !== network.bip32.public)
16603
- throw new TypeError('Invalid network version');
16604
- if (depth === 0) {
16605
- if (parentFingerprint !== 0)
16606
- throw new TypeError('Invalid parent fingerprint');
16607
- }
16608
- if (depth === 0 && index !== 0)
16609
- throw new TypeError('Invalid index');
16610
- if (version === network.bip32.private) {
16611
- if (k !== 0x00)
16612
- throw new TypeError('Invalid private key');
16613
- return new HdNode(privateKey, undefined, chainCode, network, depth, index, parentFingerprint);
16614
- }
16615
- this.init(undefined, k, chainCode, network, depth, index, parentFingerprint);
16616
- return new HdNode(undefined, k, chainCode, network, depth, index, parentFingerprint);
16617
- }
16371
+ var wif = { encode: encode$1, decode: decode$1 };
16372
+
16373
+ const HIGHEST_BIT = 0x80000000;
16374
+ const { publicKeyCreate, publicKeyVerify, privateKeyVerify, privateKeyTweakAdd, ecdh } = secp256k1;
16375
+ class HdNode {
16376
+ #privateKey;
16377
+ #publicKey;
16378
+ #chainCode;
16379
+ #network;
16380
+ #depth;
16381
+ #index;
16382
+ #parentFingerprint;
16383
+ constructor(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
16384
+ this.init(privateKey, publicKey, chainCode, network, depth, index, parentFingerprint);
16385
+ }
16386
+ init(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
16387
+ this.#privateKey = privateKey;
16388
+ this.#publicKey = publicKey;
16389
+ this.#chainCode = chainCode;
16390
+ // @ts-ignore
16391
+ this.#network = network || networks.leofcoin;
16392
+ this.#depth = depth;
16393
+ this.#index = index;
16394
+ this.#parentFingerprint = parentFingerprint;
16395
+ }
16396
+ get network() {
16397
+ return this.#network;
16398
+ }
16399
+ get publicKey() {
16400
+ this.#publicKey = this.#publicKey || publicKeyCreate(this.#privateKey, true);
16401
+ return this.#publicKey;
16402
+ }
16403
+ get privateKey() {
16404
+ return this.#privateKey;
16405
+ }
16406
+ get identifier() {
16407
+ return this.hash160(this.publicKey);
16408
+ }
16409
+ get fingerprint() {
16410
+ return (async () => (await this.identifier).subarray(0, 4))();
16411
+ }
16412
+ async hash160(data) {
16413
+ const hash = await createHash(data, 'SHA-256');
16414
+ return (await createRIPEMD160()).update(new Uint8Array(hash)).digest('binary');
16415
+ }
16416
+ get isNeutered() {
16417
+ return this.#privateKey === undefined;
16418
+ }
16419
+ get neutered() {
16420
+ return new HdNode(undefined, this.#publicKey, this.#chainCode, this.#network, this.#depth, this.#index, this.#parentFingerprint);
16421
+ }
16422
+ fromPrivateKey(privateKey, chainCode, network) {
16423
+ if (!privateKeyVerify(privateKey))
16424
+ throw new TypeError('Private key not in range [1, n)');
16425
+ const publicKey = publicKeyCreate(privateKey, true);
16426
+ return new HdNode(privateKey, publicKey, publicKey.slice(1), network);
16427
+ }
16428
+ fromPublicKey(publicKey, chainCode, network) {
16429
+ // verify the X coordinate is a point on the curve
16430
+ if (!publicKeyVerify(publicKey))
16431
+ throw new TypeError('Point is not on the curve');
16432
+ return new HdNode(undefined, publicKey, chainCode, network);
16433
+ }
16434
+ async fromSeed(seed, network) {
16435
+ if (seed.length < 16)
16436
+ throw new TypeError('Seed should be at least 128 bits');
16437
+ if (seed.length > 64)
16438
+ throw new TypeError('Seed should be at most 512 bits');
16439
+ let hash = (await createHMAC(createSHA512(), new TextEncoder().encode('Bitcoin seed')))
16440
+ .update(seed)
16441
+ .digest('binary');
16442
+ const privateKey = hash.subarray(0, 32);
16443
+ const chainCode = hash.subarray(32);
16444
+ return this.fromPrivateKey(privateKey, chainCode, network);
16445
+ }
16446
+ async toBase58() {
16447
+ const network = this.#network || networks.leofcoin;
16448
+ let version = !this.isNeutered
16449
+ ? network.bip32.private
16450
+ : network.bip32.public;
16451
+ const set = [
16452
+ new TextEncoder().encode(version.toString()),
16453
+ new TextEncoder().encode(this.#depth.toString()),
16454
+ new TextEncoder().encode(this.#parentFingerprint.toString()),
16455
+ new TextEncoder().encode(this.#index.toString()),
16456
+ this.#chainCode
16457
+ ];
16458
+ if (!this.isNeutered) {
16459
+ set.push(new TextEncoder().encode('0'));
16460
+ set.push(new Uint8Array(this.privateKey));
16461
+ }
16462
+ else {
16463
+ set.push(new Uint8Array(this.publicKey));
16464
+ }
16465
+ return base58check.encode(index$7(set));
16466
+ }
16467
+ toWIF() {
16468
+ if (!this.#privateKey)
16469
+ throw new TypeError('Missing private key');
16470
+ return wif.encode(this.#network.wif, this.#privateKey, true);
16471
+ }
16472
+ // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16473
+ async derive(index) {
16474
+ const isHardened = index >= HIGHEST_BIT;
16475
+ let data;
16476
+ // Hardened child
16477
+ if (isHardened) {
16478
+ if (this.isNeutered)
16479
+ throw new TypeError('Missing private key for hardened child key');
16480
+ // data = 0x00 || ser256(kpar) || ser32(index)
16481
+ data = index$7([
16482
+ new TextEncoder().encode('0'),
16483
+ this.privateKey,
16484
+ new TextEncoder().encode(index.toString())
16485
+ ]);
16486
+ }
16487
+ else {
16488
+ data = index$7([
16489
+ this.publicKey,
16490
+ new TextEncoder().encode(index.toString())
16491
+ ]);
16492
+ }
16493
+ const hash = (await createHMAC(createSHA512(), this.#chainCode))
16494
+ .update(data)
16495
+ .digest('binary');
16496
+ const privateKey = hash.subarray(0, 32);
16497
+ const chainCode = hash.subarray(32);
16498
+ // if parse256(privateKey) >= n, proceed with the next value for i
16499
+ if (!privateKeyVerify(privateKey))
16500
+ return this.derive(index + 1);
16501
+ // Private parent key -> private child key
16502
+ if (!this.isNeutered) {
16503
+ // ki = parse256(privateKey) + kpar (mod n)
16504
+ const ki = privateKeyTweakAdd(this.privateKey, privateKey);
16505
+ // In case ki == 0, proceed with the next value for i
16506
+ if (ki == null)
16507
+ return this.derive(index + 1);
16508
+ return new HdNode(ki, null, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
16509
+ }
16510
+ function hashfn(x, y) {
16511
+ const pubKey = new Uint8Array(33);
16512
+ pubKey[0] = (y[31] & 1) === 0 ? 0x02 : 0x03;
16513
+ pubKey.set(x, 1);
16514
+ return pubKey;
16515
+ }
16516
+ const Ki = ecdh(this.publicKey, chainCode, { hashfn }, new Uint8Array(33));
16517
+ // const Ki = new Uint8Array(ecc.pointAddScalar(this.publicKey, IL, true));
16518
+ // In case Ki is the point at infinity, proceed with the next value for i
16519
+ if (Ki === null)
16520
+ return this.derive(index + 1);
16521
+ return new HdNode(undefined, Ki, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
16522
+ }
16523
+ deriveHardened(index) {
16524
+ // Only derives hardened private keys by default
16525
+ return this.derive(index + HIGHEST_BIT);
16526
+ }
16527
+ async derivePath(path) {
16528
+ let splitPath = path.split('/');
16529
+ if (splitPath[0] === 'm') {
16530
+ if (this.#parentFingerprint)
16531
+ throw new TypeError('Expected master, got child');
16532
+ splitPath = splitPath.slice(1);
16533
+ }
16534
+ let prevHd = this;
16535
+ for (const indexString of splitPath) {
16536
+ let index;
16537
+ if (indexString.slice(-1) === `'`) {
16538
+ index = parseInt(indexString.slice(0, -1), 10);
16539
+ // @ts-ignore
16540
+ prevHd = await prevHd.deriveHardened(index);
16541
+ }
16542
+ else {
16543
+ index = parseInt(indexString, 10);
16544
+ // @ts-ignore
16545
+ prevHd = await prevHd.derive(index);
16546
+ }
16547
+ }
16548
+ return prevHd;
16549
+ }
16550
+ async fromBase58(string, network) {
16551
+ let buffer = (await base58check.decode(string)).data;
16552
+ // @ts-ignore
16553
+ network = network || networks.leofcoin;
16554
+ let [version, depth, parentFingerprint, index, chainCode, k, privateKey] = index$6(buffer);
16555
+ // @ts-ignore
16556
+ version = Number(new TextDecoder().decode(version));
16557
+ // @ts-ignore
16558
+ depth = Number(new TextDecoder().decode(depth));
16559
+ // @ts-ignore
16560
+ parentFingerprint = Number(new TextDecoder().decode(parentFingerprint));
16561
+ // @ts-ignore
16562
+ index = Number(new TextDecoder().decode(index));
16563
+ // @ts-ignore
16564
+ k = privateKey ? 0 : k;
16565
+ if (version !== network.bip32.private && version !== network.bip32.public)
16566
+ throw new TypeError('Invalid network version');
16567
+ if (depth === 0) {
16568
+ if (parentFingerprint !== 0)
16569
+ throw new TypeError('Invalid parent fingerprint');
16570
+ }
16571
+ if (depth === 0 && index !== 0)
16572
+ throw new TypeError('Invalid index');
16573
+ if (version === network.bip32.private) {
16574
+ if (k !== 0x00)
16575
+ throw new TypeError('Invalid private key');
16576
+ return new HdNode(privateKey, undefined, chainCode, network, depth, index, parentFingerprint);
16577
+ }
16578
+ this.init(undefined, k, chainCode, network, depth, index, parentFingerprint);
16579
+ return new HdNode(undefined, k, chainCode, network, depth, index, parentFingerprint);
16580
+ }
16618
16581
  }
16619
16582
 
16620
16583
  // see https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
@@ -16667,144 +16630,145 @@ class Mnemonic {
16667
16630
  }
16668
16631
  }
16669
16632
 
16670
- const fromNetworkString = network => {
16671
- const parts = network.split(':');
16672
- network = networks[parts[0]];
16673
- if (parts[1]) {
16674
- if (network[parts[1]])
16675
- network = network[parts[1]];
16676
- network.coin_type = 1;
16677
- }
16678
- return network;
16679
- };
16680
- const publicKeyToEthereumAddress = async (publicKeyBuffer) => {
16681
- const hasher = await createKeccak(256);
16682
- hasher.update(publicKeyBuffer);
16683
- const hash = hasher.digest();
16684
- return `0x${hash.slice(-40).toString()}`;
16685
- };
16686
- class HDWallet {
16687
- hdnode;
16688
- networkName;
16689
- version;
16690
- locked;
16691
- network;
16692
- multiCodec;
16693
- get privateKey() {
16694
- return this.ifNotLocked(() => this.hdnode.privateKey);
16695
- }
16696
- get publicKey() {
16697
- return this.hdnode.publicKey;
16698
- }
16699
- async ethereumAddress() {
16700
- const address = await publicKeyToEthereumAddress(this.publicKey);
16701
- return address;
16702
- }
16703
- leofcoinAddress() {
16704
- return base58check.encode(this.publicKey);
16705
- }
16706
- get address() {
16707
- return this.getAddressForCoin();
16708
- }
16709
- async getAddressForCoin(coin_type) {
16710
- if (!coin_type)
16711
- coin_type = this.network.coin_type;
16712
- if (coin_type === 1) {
16713
- if (this.networkName?.split(':')[0] === 'ethereum')
16714
- coin_type = 60;
16715
- if (this.networkName?.split(':')[0] === 'leofcoin')
16716
- coin_type = 640;
16717
- }
16718
- // if (coin_type === 0) return this.bitcoinAddress
16719
- if (coin_type === 60)
16720
- return this.ethereumAddress();
16721
- if (coin_type === 640)
16722
- return this.leofcoinAddress();
16723
- }
16724
- get accountAddress() {
16725
- return this.ifNotLocked(async () => base58check.encode(this.hdnode.publicKey));
16726
- }
16727
- get isTestnet() {
16728
- return this.network.coin_type === 1;
16729
- }
16730
- constructor(network, hdnode) {
16731
- if (typeof network === 'string') {
16732
- this.networkName = network;
16733
- this.network = fromNetworkString(network);
16734
- }
16735
- else if (typeof network === 'object')
16736
- this.network = network;
16737
- this.multiCodec = this.network.multiCodec;
16738
- this.version = 0x00;
16739
- if (hdnode)
16740
- this.defineHDNode(hdnode);
16741
- }
16742
- ifNotLocked(fn, params) {
16743
- if (this.locked)
16744
- return;
16745
- return params ? fn(...params) : fn();
16746
- }
16747
- async defineHDNode(value) {
16748
- Object.defineProperty(this, 'hdnode', {
16749
- configurable: false,
16750
- writable: false,
16751
- value: await value
16752
- });
16753
- }
16754
- validateNetwork(network) {
16755
- if (!network && !this.network)
16756
- return console.error(`expected network to be defined`);
16757
- if (!network && this.network)
16758
- network = this.network;
16759
- if (typeof network === 'string')
16760
- network = fromNetworkString(network);
16761
- if (typeof network !== 'object')
16762
- return console.error('network not found');
16763
- return network;
16764
- }
16765
- async generate(password, network) {
16766
- network = this.validateNetwork(network);
16767
- const mnemonic = await new Mnemonic().generate(512);
16768
- const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
16769
- await this.defineHDNode(await (new HdNode()).fromSeed(new Uint8Array(seed), network));
16770
- return mnemonic;
16771
- }
16772
- /**
16773
- * recover using mnemonic (recovery word list)
16774
- */
16775
- async recover(mnemonic, password, network) {
16776
- network = this.validateNetwork(network || password);
16777
- const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
16778
- let node = new HdNode();
16779
- node = await node.fromSeed(new Uint8Array(seed), network);
16780
- await this.defineHDNode(await node.fromSeed(new Uint8Array(seed), network));
16781
- }
16782
- async load(base58, network) {
16783
- network = this.validateNetwork(network);
16784
- await this.defineHDNode(await (new HdNode()).fromBase58(base58, network));
16785
- }
16786
- save() {
16787
- return this.hdnode.toBase58();
16788
- }
16789
- async fromAddress(address, chainCode, network) {
16790
- network = this.validateNetwork(network);
16791
- address = (await base58check.decode(address)).data;
16792
- if (!chainCode || chainCode && !Buffer.isBuffer(chainCode))
16793
- chainCode = address.slice(1);
16794
- await this.defineHDNode(await (new HdNode()).fromPublicKey(address, chainCode, network));
16795
- }
16796
- async fromPublicKey(hex, chainCode, network) {
16797
- network = this.validateNetwork(network);
16798
- if (!chainCode || chainCode)
16799
- chainCode = hex.slice(1);
16800
- let node = new HdNode();
16801
- node = await node.fromPublicKey(hex, chainCode, network);
16802
- await this.defineHDNode(node);
16803
- return this;
16804
- }
16805
- async fromPrivateKey(privateKey, chainCode, network) {
16806
- await this.defineHDNode(await (new HdNode()).fromPrivateKey(privateKey, chainCode, network));
16807
- }
16633
+ const fromNetworkString = network => {
16634
+ const parts = network.split(':');
16635
+ network = networks[parts[0]];
16636
+ if (parts[1]) {
16637
+ if (network[parts[1]])
16638
+ network = network[parts[1]];
16639
+ network.coin_type = 1;
16640
+ }
16641
+ return network;
16642
+ };
16643
+ const publicKeyToEthereumAddress = async (publicKeyBuffer) => {
16644
+ const hasher = await createKeccak(256);
16645
+ hasher.update(publicKeyBuffer);
16646
+ const hash = hasher.digest();
16647
+ return `0x${hash.slice(-40).toString()}`;
16648
+ };
16649
+ class HDWallet {
16650
+ hdnode;
16651
+ networkName;
16652
+ version;
16653
+ locked;
16654
+ network;
16655
+ multiCodec;
16656
+ get privateKey() {
16657
+ return this.ifNotLocked(() => this.hdnode.privateKey);
16658
+ }
16659
+ get publicKey() {
16660
+ return this.hdnode.publicKey;
16661
+ }
16662
+ async ethereumAddress() {
16663
+ const address = await publicKeyToEthereumAddress(this.publicKey);
16664
+ return address;
16665
+ }
16666
+ leofcoinAddress() {
16667
+ return base58check.encode(this.publicKey);
16668
+ }
16669
+ get address() {
16670
+ return this.getAddressForCoin();
16671
+ }
16672
+ async getAddressForCoin(coin_type) {
16673
+ if (!coin_type)
16674
+ coin_type = this.network.coin_type;
16675
+ if (coin_type === 1) {
16676
+ if (this.networkName?.split(':')[0] === 'ethereum')
16677
+ coin_type = 60;
16678
+ if (this.networkName?.split(':')[0] === 'leofcoin')
16679
+ coin_type = 640;
16680
+ }
16681
+ // if (coin_type === 0) return this.bitcoinAddress
16682
+ if (coin_type === 60)
16683
+ return this.ethereumAddress();
16684
+ if (coin_type === 640)
16685
+ return this.leofcoinAddress();
16686
+ // if (coin_type === 0) return this.bitcoinAddress()
16687
+ }
16688
+ get accountAddress() {
16689
+ return this.ifNotLocked(async () => base58check.encode(this.hdnode.publicKey));
16690
+ }
16691
+ get isTestnet() {
16692
+ return this.network.coin_type === 1;
16693
+ }
16694
+ constructor(network, hdnode) {
16695
+ if (typeof network === 'string') {
16696
+ this.networkName = network;
16697
+ this.network = fromNetworkString(network);
16698
+ }
16699
+ else if (typeof network === 'object')
16700
+ this.network = network;
16701
+ this.multiCodec = this.network.multiCodec;
16702
+ this.version = 0x00;
16703
+ if (hdnode)
16704
+ this.defineHDNode(hdnode);
16705
+ }
16706
+ ifNotLocked(fn, params) {
16707
+ if (this.locked)
16708
+ return;
16709
+ return params ? fn(...params) : fn();
16710
+ }
16711
+ async defineHDNode(value) {
16712
+ Object.defineProperty(this, 'hdnode', {
16713
+ configurable: false,
16714
+ writable: false,
16715
+ value: await value
16716
+ });
16717
+ }
16718
+ validateNetwork(network) {
16719
+ if (!network && !this.network)
16720
+ return console.error(`expected network to be defined`);
16721
+ if (!network && this.network)
16722
+ network = this.network;
16723
+ if (typeof network === 'string')
16724
+ network = fromNetworkString(network);
16725
+ if (typeof network !== 'object')
16726
+ return console.error('network not found');
16727
+ return network;
16728
+ }
16729
+ async generate(password, network) {
16730
+ network = this.validateNetwork(network);
16731
+ const mnemonic = await new Mnemonic().generate(512);
16732
+ const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
16733
+ await this.defineHDNode(await (new HdNode()).fromSeed(new Uint8Array(seed), network));
16734
+ return mnemonic;
16735
+ }
16736
+ /**
16737
+ * recover using mnemonic (recovery word list)
16738
+ */
16739
+ async recover(mnemonic, password, network) {
16740
+ network = this.validateNetwork(network || password);
16741
+ const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
16742
+ let node = new HdNode();
16743
+ node = await node.fromSeed(new Uint8Array(seed), network);
16744
+ await this.defineHDNode(await node.fromSeed(new Uint8Array(seed), network));
16745
+ }
16746
+ async load(base58, network) {
16747
+ network = this.validateNetwork(network);
16748
+ await this.defineHDNode(await (new HdNode()).fromBase58(base58, network));
16749
+ }
16750
+ save() {
16751
+ return this.hdnode.toBase58();
16752
+ }
16753
+ async fromAddress(address, chainCode, network) {
16754
+ network = this.validateNetwork(network);
16755
+ address = (await base58check.decode(address)).data;
16756
+ if (!chainCode || chainCode && !Buffer.isBuffer(chainCode))
16757
+ chainCode = address.slice(1);
16758
+ await this.defineHDNode(await (new HdNode()).fromPublicKey(address, chainCode, network));
16759
+ }
16760
+ async fromPublicKey(hex, chainCode, network) {
16761
+ network = this.validateNetwork(network);
16762
+ if (!chainCode || chainCode)
16763
+ chainCode = hex.slice(1);
16764
+ let node = new HdNode();
16765
+ node = await node.fromPublicKey(hex, chainCode, network);
16766
+ await this.defineHDNode(node);
16767
+ return this;
16768
+ }
16769
+ async fromPrivateKey(privateKey, chainCode, network) {
16770
+ await this.defineHDNode(await (new HdNode()).fromPrivateKey(privateKey, chainCode, network));
16771
+ }
16808
16772
  }
16809
16773
 
16810
16774
  class MultiSignature {
@@ -16862,8 +16826,8 @@ class MultiSignature {
16862
16826
  if (!signature)
16863
16827
  throw ReferenceError('signature undefined');
16864
16828
  this.#multiSignature = typedArrayConcat([
16865
- index$7.encode(this.version),
16866
- index$7.encode(this.multiCodec),
16829
+ index$8.encode(this.version),
16830
+ index$8.encode(this.multiCodec),
16867
16831
  signature
16868
16832
  ]);
16869
16833
  return this.multiSignature;
@@ -16879,10 +16843,10 @@ class MultiSignature {
16879
16843
  if (!this.multiSignature)
16880
16844
  throw ReferenceError('multiSignature undefined');
16881
16845
  let buffer = this.multiSignature;
16882
- const version = index$7.decode(buffer);
16883
- buffer = buffer.subarray(index$7.decode.bytes);
16884
- const codec = index$7.decode(buffer);
16885
- buffer = buffer.subarray(index$7.decode.bytes);
16846
+ const version = index$8.decode(buffer);
16847
+ buffer = buffer.subarray(index$8.decode.bytes);
16848
+ const codec = index$8.decode(buffer);
16849
+ buffer = buffer.subarray(index$8.decode.bytes);
16886
16850
  const signature = buffer.subarray(0, buffer.length);
16887
16851
  if (version !== this.version)
16888
16852
  throw TypeError('Invalid version');
@@ -16908,16 +16872,16 @@ class MultiSignature {
16908
16872
  return this.decode(base58$1.decode(string));
16909
16873
  }
16910
16874
  toBs32() {
16911
- return index$8.encode(this.multiSignature);
16875
+ return index$9.encode(this.multiSignature);
16912
16876
  }
16913
16877
  fromBs32(string) {
16914
- return this.decode(index$8.decode(string));
16878
+ return this.decode(index$9.decode(string));
16915
16879
  }
16916
16880
  toBs32Hex() {
16917
- return index$8.encodeHex(this.multiSignature);
16881
+ return index$9.encodeHex(this.multiSignature);
16918
16882
  }
16919
16883
  fromBs32Hex(string) {
16920
- return this.decode(index$8.decodeHex(string));
16884
+ return this.decode(index$9.decodeHex(string));
16921
16885
  }
16922
16886
  toBs58Hex() {
16923
16887
  return base58$1.encodeHex(this.multiSignature);
@@ -16927,132 +16891,6 @@ class MultiSignature {
16927
16891
  }
16928
16892
  }
16929
16893
 
16930
- class MultiHDNode extends HDWallet {
16931
- #encrypted;
16932
- constructor(network, hdnode) {
16933
- super(network, hdnode);
16934
- }
16935
- get id() {
16936
- return base58check.encode(index$6([
16937
- new TextEncoder().encode(this.version.toString()),
16938
- this.account(0).hdnode.neutered.publicKey
16939
- ]));
16940
- }
16941
- get multiWIF() {
16942
- return this.toMultiWif();
16943
- }
16944
- async fromId(id) {
16945
- let buffer = (await base58check.decode(id)).data;
16946
- index$7.decode(buffer);
16947
- buffer = buffer.slice(index$7.decode.bytes);
16948
- this.fromPublicKey(buffer, null, this.networkName);
16949
- }
16950
- async lock(multiWIF) {
16951
- if (!multiWIF)
16952
- multiWIF = this.multiWIF;
16953
- this.#encrypted = await encrypt$1(multiWIF);
16954
- this.locked = true;
16955
- return this.#encrypted;
16956
- }
16957
- async unlock({ key, iv, cipher }) {
16958
- const decrypted = await decrypt$1({ cipher, key, iv });
16959
- await this.fromMultiWif(new TextDecoder().decode(decrypted));
16960
- this.locked = false;
16961
- }
16962
- fromMultiWif(string) {
16963
- const { version, codec, privateKey } = index.decode(string);
16964
- this.network = Object.values(networks).reduce((p, c) => {
16965
- if (c.multiCodec === codec)
16966
- return c;
16967
- else if (c.testnet && c.testnet.multiCodec === codec)
16968
- return c.testnet;
16969
- else
16970
- return p;
16971
- }, networks['leofcoin']);
16972
- if (version !== this.network.version)
16973
- throw new Error('invalid version');
16974
- return this.fromPrivateKey(privateKey, undefined, this.network);
16975
- }
16976
- toMultiWif() {
16977
- return index.encode(this.network.version, this.network.multiCodec, this.privateKey);
16978
- }
16979
- sign(hash) {
16980
- return new MultiSignature(this.version, this.network.multiCodec)
16981
- .sign(hash, this.privateKey);
16982
- }
16983
- verify(multiSignature, hash) {
16984
- return new MultiSignature(this.version, this.network.multiCodec)
16985
- .verify(multiSignature, hash, this.publicKey);
16986
- }
16987
- }
16988
-
16989
- class HDAccount extends MultiHDNode {
16990
- /**
16991
- * @param {number} depth - acount depth
16992
- */
16993
- constructor(network, hdnode, depth = 0) {
16994
- super(network, hdnode);
16995
- this.hdnode = hdnode;
16996
- this.depth = depth;
16997
- this._prefix = `m/44'/${hdnode.network.coin_type}'/${depth}'/`;
16998
- }
16999
- get neutered() {
17000
- return this.hdnode.neutered;
17001
- }
17002
- /**
17003
- * @param {number} index - address index
17004
- */
17005
- async internal(index = 0) {
17006
- return this.hdnode.derivePath(`${this._prefix}1/${index}`);
17007
- }
17008
- /**
17009
- * @param {number} index - address index
17010
- */
17011
- async external(index = 0) {
17012
- return this.hdnode.derivePath(`${this._prefix}0/${index}`);
17013
- }
17014
- }
17015
-
17016
- class MultiWallet extends MultiHDNode {
17017
- constructor(network, hdnode) {
17018
- super(network, hdnode);
17019
- }
17020
- get id() {
17021
- return base58check.encode(index$6([
17022
- new TextEncoder().encode(this.version.toString()),
17023
- this.account(0).hdnode.neutered.publicKey
17024
- ]));
17025
- }
17026
- get multiWIF() {
17027
- return this.toMultiWif();
17028
- }
17029
- get neutered() {
17030
- return new HDAccount(this.networkName, this, this.hdnode.depth);
17031
- }
17032
- /**
17033
- * @param {number} account - account to return chain for
17034
- * @return internal(addressIndex), external(addressIndex)
17035
- */
17036
- account(index) {
17037
- return new HDAccount(this.networkName, this, index);
17038
- }
17039
- async fromAccount(privateKey, depth, network) {
17040
- const node = await new MultiWallet(network).fromPrivateKey(privateKey);
17041
- return new HDAccount(node, depth);
17042
- }
17043
- /**
17044
- * m / purpose' / coin_type' / account' / change / aadress_index
17045
- *
17046
- * see https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
17047
- */
17048
- async derivePath(path) {
17049
- return new MultiWallet(this.networkName, await this.hdnode.derivePath(path));
17050
- }
17051
- async derive(index) {
17052
- return new MultiWallet(this.networkName, await this.hdnode.derive(index));
17053
- }
17054
- }
17055
-
17056
16894
  var passwordToKey = (password) => globalThis.crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveKey']);
17057
16895
 
17058
16896
  var deriveKey = (key, salt, iterations = 250000, hashAlgorithm = 'SHA-512') => globalThis.crypto.subtle.deriveKey({
@@ -17074,11 +16912,11 @@ var encrypt = async (password, data, version = new TextEncoder().encode('1')) =>
17074
16912
  name: 'AES-GCM',
17075
16913
  iv
17076
16914
  }, key, new TextEncoder().encode(data));
17077
- return index$6([version, salt, iv, new Uint8Array(encrypted)]);
16915
+ return index$7([version, salt, iv, new Uint8Array(encrypted)]);
17078
16916
  };
17079
16917
 
17080
16918
  var decrypt = async (password, concatecated) => {
17081
- const [version, salt, iv, cipher] = index$5(concatecated);
16919
+ const [version, salt, iv, cipher] = index$6(concatecated);
17082
16920
  let iterations;
17083
16921
  if (new TextDecoder().decode(version) === '1') {
17084
16922
  iterations = 250000;
@@ -17092,6 +16930,213 @@ var decrypt = async (password, concatecated) => {
17092
16930
  return new TextDecoder().decode(decrypted);
17093
16931
  };
17094
16932
 
16933
+ const MSB$1 = 0x80;
16934
+ const REST$1 = 0x7F;
16935
+ const MSBALL = ~REST$1;
16936
+ const INT = Math.pow(2, 31);
16937
+ const encode = (num, out, offset) => {
16938
+ if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
16939
+ encode.bytes = 0;
16940
+ throw new RangeError('Could not encode varint');
16941
+ }
16942
+ out = out || [];
16943
+ offset = offset || 0;
16944
+ const oldOffset = offset;
16945
+ while (num >= INT) {
16946
+ out[offset++] = (num & 0xFF) | MSB$1;
16947
+ num /= 128;
16948
+ }
16949
+ while (num & MSBALL) {
16950
+ out[offset++] = (num & 0xFF) | MSB$1;
16951
+ num >>>= 7;
16952
+ }
16953
+ out[offset] = num | 0;
16954
+ encode.bytes = offset - oldOffset + 1;
16955
+ return out;
16956
+ };
16957
+
16958
+ const MSB = 0x80;
16959
+ const REST = 0x7F;
16960
+ const decode = (buf, offset) => {
16961
+ offset = offset || 0;
16962
+ const l = buf.length;
16963
+ let counter = offset;
16964
+ let result = 0;
16965
+ let shift = 0;
16966
+ let b;
16967
+ do {
16968
+ if (counter >= l || shift > 49) {
16969
+ decode.bytes = 0;
16970
+ throw new RangeError('Could not decode varint');
16971
+ }
16972
+ b = buf[counter++];
16973
+ result += shift < 28
16974
+ ? (b & REST) << shift
16975
+ : (b & REST) * Math.pow(2, shift);
16976
+ shift += 7;
16977
+ } while (b >= MSB);
16978
+ decode.bytes = counter - offset;
16979
+ return result;
16980
+ };
16981
+
16982
+ const N1 = Math.pow(2, 7);
16983
+ const N2 = Math.pow(2, 14);
16984
+ const N3 = Math.pow(2, 21);
16985
+ const N4 = Math.pow(2, 28);
16986
+ const N5 = Math.pow(2, 35);
16987
+ const N6 = Math.pow(2, 42);
16988
+ const N7 = Math.pow(2, 49);
16989
+ const N8 = Math.pow(2, 56);
16990
+ const N9 = Math.pow(2, 63);
16991
+ var encodingLength = (value) => (value < N1 ? 1
16992
+ : value < N2 ? 2
16993
+ : value < N3 ? 3
16994
+ : value < N4 ? 4
16995
+ : value < N5 ? 5
16996
+ : value < N6 ? 6
16997
+ : value < N7 ? 7
16998
+ : value < N8 ? 8
16999
+ : value < N9 ? 9
17000
+ : 10);
17001
+
17002
+ var index = {
17003
+ encode,
17004
+ decode,
17005
+ encodingLength
17006
+ };
17007
+
17008
+ class MultiHDNode extends HDWallet {
17009
+ #encrypted;
17010
+ constructor(network, hdnode) {
17011
+ super(network, hdnode);
17012
+ }
17013
+ get id() {
17014
+ return base58check.encode(index$7([
17015
+ new TextEncoder().encode(this.version.toString()),
17016
+ this.account(0).hdnode.neutered.publicKey
17017
+ ]));
17018
+ }
17019
+ get multiWIF() {
17020
+ return this.toMultiWif();
17021
+ }
17022
+ async fromId(id) {
17023
+ let buffer = (await base58check.decode(id)).data;
17024
+ index.decode(buffer);
17025
+ buffer = buffer.slice(index.decode.bytes);
17026
+ this.fromPublicKey(buffer, null, this.networkName);
17027
+ }
17028
+ async import(password, encrypted) {
17029
+ const { prefix, data } = await base58check.decode(encrypted);
17030
+ const decrypted = await decrypt(password, data);
17031
+ await this.fromMultiWif(decrypted);
17032
+ }
17033
+ async export(password) {
17034
+ return base58check.encode(await encrypt(password, await this.toMultiWif()));
17035
+ }
17036
+ async lock(password) {
17037
+ // todo redefine hdnode
17038
+ this.#encrypted = await this.export(password);
17039
+ this.locked = true;
17040
+ }
17041
+ async unlock(password) {
17042
+ const { prefix, data } = await base58check.decode(this.#encrypted);
17043
+ await decrypt(password, data);
17044
+ this.locked = false;
17045
+ }
17046
+ fromMultiWif(string) {
17047
+ const { version, codec, privateKey } = index$1.decode(string);
17048
+ this.network = Object.values(networks).reduce((p, c) => {
17049
+ if (c.multiCodec === codec)
17050
+ return c;
17051
+ else if (c.testnet && c.testnet.multiCodec === codec)
17052
+ return c.testnet;
17053
+ else
17054
+ return p;
17055
+ }, networks['leofcoin']);
17056
+ if (version !== this.network.version)
17057
+ throw new Error('invalid version');
17058
+ return this.fromPrivateKey(privateKey, undefined, this.network);
17059
+ }
17060
+ toMultiWif() {
17061
+ return index$1.encode(this.network.version, this.network.multiCodec, this.privateKey);
17062
+ }
17063
+ sign(hash) {
17064
+ return new MultiSignature(this.version, this.network.multiCodec)
17065
+ .sign(hash, this.privateKey);
17066
+ }
17067
+ verify(multiSignature, hash) {
17068
+ return new MultiSignature(this.version, this.network.multiCodec)
17069
+ .verify(multiSignature, hash, this.publicKey);
17070
+ }
17071
+ }
17072
+
17073
+ class HDAccount extends MultiHDNode {
17074
+ /**
17075
+ * @param {number} depth - acount depth
17076
+ */
17077
+ constructor(network, hdnode, depth = 0) {
17078
+ super(network, hdnode);
17079
+ this.hdnode = hdnode;
17080
+ this.depth = depth;
17081
+ this._prefix = `m/44'/${hdnode.network.coin_type}'/${depth}'/`;
17082
+ }
17083
+ get neutered() {
17084
+ return this.hdnode.neutered;
17085
+ }
17086
+ /**
17087
+ * @param {number} index - address index
17088
+ */
17089
+ async internal(index = 0) {
17090
+ return this.hdnode.derivePath(`${this._prefix}1/${index}`);
17091
+ }
17092
+ /**
17093
+ * @param {number} index - address index
17094
+ */
17095
+ async external(index = 0) {
17096
+ return this.hdnode.derivePath(`${this._prefix}0/${index}`);
17097
+ }
17098
+ }
17099
+
17100
+ class MultiWallet extends MultiHDNode {
17101
+ constructor(network, hdnode) {
17102
+ super(network, hdnode);
17103
+ }
17104
+ get id() {
17105
+ return base58check.encode(index$7([
17106
+ new TextEncoder().encode(this.version.toString()),
17107
+ this.account(0).hdnode.neutered.publicKey
17108
+ ]));
17109
+ }
17110
+ get multiWIF() {
17111
+ return this.toMultiWif();
17112
+ }
17113
+ get neutered() {
17114
+ return new HDAccount(this.networkName, this, this.hdnode.depth);
17115
+ }
17116
+ /**
17117
+ * @param {number} account - account to return chain for
17118
+ * @return internal(addressIndex), external(addressIndex)
17119
+ */
17120
+ account(index) {
17121
+ return new HDAccount(this.networkName, this, index);
17122
+ }
17123
+ async fromAccount(privateKey, depth, network) {
17124
+ const node = await new MultiWallet(network).fromPrivateKey(privateKey);
17125
+ return new HDAccount(node, depth);
17126
+ }
17127
+ /**
17128
+ * m / purpose' / coin_type' / account' / change / aadress_index
17129
+ *
17130
+ * see https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
17131
+ */
17132
+ async derivePath(path) {
17133
+ return new MultiWallet(this.networkName, await this.hdnode.derivePath(path));
17134
+ }
17135
+ async derive(index) {
17136
+ return new MultiWallet(this.networkName, await this.hdnode.derive(index));
17137
+ }
17138
+ }
17139
+
17095
17140
  class e{constructor(a,b,c,d,f){this._legacyCanvasSize=e.DEFAULT_CANVAS_SIZE;this._preferredCamera="environment";this._maxScansPerSecond=25;this._lastScanTimestamp=-1;this._destroyed=this._flashOn=this._paused=this._active=!1;this.$video=a;this.$canvas=document.createElement("canvas");c&&"object"===typeof c?this._onDecode=b:(c||d||f?console.warn("You're using a deprecated version of the QrScanner constructor which will be removed in the future"):console.warn("Note that the type of the scan result passed to onDecode will change in the future. To already switch to the new api today, you can pass returnDetailedScanResult: true."),
17096
17141
  this._legacyOnDecode=b);b="object"===typeof c?c:{};this._onDecodeError=b.onDecodeError||("function"===typeof c?c:this._onDecodeError);this._calculateScanRegion=b.calculateScanRegion||("function"===typeof d?d:this._calculateScanRegion);this._preferredCamera=b.preferredCamera||f||this._preferredCamera;this._legacyCanvasSize="number"===typeof c?c:"number"===typeof d?d:this._legacyCanvasSize;this._maxScansPerSecond=b.maxScansPerSecond||this._maxScansPerSecond;this._onPlay=this._onPlay.bind(this);this._onLoadedMetaData=
17097
17142
  this._onLoadedMetaData.bind(this);this._onVisibilityChange=this._onVisibilityChange.bind(this);this._updateOverlay=this._updateOverlay.bind(this);a.disablePictureInPicture=!0;a.playsInline=!0;a.muted=!0;let h=!1;a.hidden&&(a.hidden=!1,h=!0);document.body.contains(a)||(document.body.appendChild(a),h=!0);c=a.parentElement;if(b.highlightScanRegion||b.highlightCodeOutline){d=!!b.overlay;this.$overlay=b.overlay||document.createElement("div");f=this.$overlay.style;f.position="absolute";f.display="none";
@@ -20048,6 +20093,7 @@ class Identity {
20048
20093
  #wallet;
20049
20094
  network;
20050
20095
  id;
20096
+ selectedAccount;
20051
20097
  constructor(network) {
20052
20098
  this.network = network;
20053
20099
  }
@@ -20070,6 +20116,7 @@ class Identity {
20070
20116
  }
20071
20117
  }
20072
20118
  if (!password) {
20119
+ // @ts-ignore
20073
20120
  const importee = await import('./src/prompts/password.js');
20074
20121
  password = await importee.default();
20075
20122
  }
@@ -20078,17 +20125,17 @@ class Identity {
20078
20125
  const pub = await globalThis.accountStore.get('public');
20079
20126
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
20080
20127
  const selected = await globalThis.walletStore.get('selected-account');
20081
- globalThis.peernet.selectedAccount = new TextDecoder().decode(selected);
20128
+ this.selectedAccount = new TextDecoder().decode(selected);
20082
20129
  }
20083
20130
  else {
20084
- const importee = await import(/* webpackChunkName: "generate-account" */ './index-ba1b3977.js');
20131
+ const importee = await import(/* webpackChunkName: "generate-account" */ './index-329e0324.js');
20085
20132
  const { identity, accounts } = await importee.default(password, this.network);
20086
20133
  await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
20087
20134
  await globalThis.walletStore.put('version', String(1));
20088
20135
  await globalThis.walletStore.put('accounts', JSON.stringify(accounts));
20089
20136
  await globalThis.walletStore.put('selected-account', accounts[0][1]);
20090
20137
  await globalThis.walletStore.put('identity', JSON.stringify(identity));
20091
- globalThis.peernet.selectedAccount = accounts[0][1];
20138
+ this.selectedAccount = accounts[0][1];
20092
20139
  this.id = identity.walletId;
20093
20140
  }
20094
20141
  const identity = JSON.parse(new TextDecoder().decode(await globalThis.walletStore.get('identity')));
@@ -20096,25 +20143,31 @@ class Identity {
20096
20143
  const multiWIF = await decrypt(password, base58$1.decode(identity.multiWIF));
20097
20144
  await this.#wallet.fromMultiWif(multiWIF);
20098
20145
  }
20146
+ selectAccount(account) {
20147
+ this.selectedAccount = account;
20148
+ return walletStore.put('selected-account', account);
20149
+ }
20099
20150
  sign(hash) {
20100
20151
  return this.#wallet.sign(hash.subarray(0, 32));
20101
20152
  }
20153
+ lock(password) {
20154
+ this.#wallet.lock(password);
20155
+ }
20156
+ unlock(password) {
20157
+ this.#wallet.unlock(password);
20158
+ }
20102
20159
  async export(password) {
20103
- const multiWIF = this.#wallet.toMultiWif();
20104
- const encypted = await encrypt(password, multiWIF);
20105
- return base58$1.encode(encypted);
20160
+ return this.#wallet.export(password);
20106
20161
  }
20107
20162
  async import(password, encrypted) {
20108
- this.#wallet = new MultiWallet(this.network);
20109
- const decrypted = await decrypt(password, base58$1.decode(encrypted));
20110
- await this.#wallet.fromMultiWif(decrypted);
20163
+ await this.#wallet.import(password, encrypted);
20111
20164
  }
20112
20165
  async exportQR(password) {
20113
20166
  const exported = await this.export(password);
20114
20167
  return globalThis.navigator ? await browser.toDataURL(exported) : await browser.toString(exported, { type: 'terminal' });
20115
20168
  }
20116
20169
  async importQR(image, password) {
20117
- const multiWIF = e.scanImage(image);
20170
+ const multiWIF = await e.default.scanImage(image);
20118
20171
  return this.import(password, multiWIF);
20119
20172
  }
20120
20173
  }
@@ -20194,12 +20247,18 @@ class Peernet {
20194
20247
  get id() {
20195
20248
  return this.identity.id;
20196
20249
  }
20250
+ get selectedAccount() {
20251
+ return this.identity.selectedAccount;
20252
+ }
20197
20253
  get accounts() {
20198
20254
  return this.identity.accounts;
20199
20255
  }
20200
20256
  get defaultStores() {
20201
20257
  return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message'];
20202
20258
  }
20259
+ selectAccount(account) {
20260
+ return this.identity.selectAccount(account);
20261
+ }
20203
20262
  addProto(name, proto) {
20204
20263
  if (!globalThis.peernet.protos[name])
20205
20264
  globalThis.peernet.protos[name] = proto;
@@ -20245,7 +20304,7 @@ class Peernet {
20245
20304
  * @return {String} id - peerId
20246
20305
  */
20247
20306
  getConnection(id) {
20248
- return this.client.connections[id];
20307
+ return this.connections[id];
20249
20308
  }
20250
20309
  /**
20251
20310
  * @private
@@ -20260,7 +20319,7 @@ class Peernet {
20260
20319
  this.root = options.root;
20261
20320
  const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
20262
20321
  // FolderMessageResponse
20263
- } = await import(/* webpackChunkName: "messages" */ './messages-dd1ad11c.js');
20322
+ } = await import(/* webpackChunkName: "messages" */ './messages-000b7f84.js');
20264
20323
  /**
20265
20324
  * proto Object containing protos
20266
20325
  * @type {Object}
@@ -20497,7 +20556,7 @@ class Peernet {
20497
20556
  return;
20498
20557
  return await blockStore.put(hash, data);
20499
20558
  },
20500
- has: async (hash) => await blockStore.has(hash, 'block'),
20559
+ has: async (hash) => await blockStore.has(hash),
20501
20560
  };
20502
20561
  }
20503
20562
  get transaction() {