@leofcoin/peernet 1.1.56 → 1.1.58

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 (94) hide show
  1. package/.esdoc.json +10 -10
  2. package/.eslintrc.json +24 -24
  3. package/.gitattributes +2 -2
  4. package/.travis.yml +27 -27
  5. package/BREAKING_CHANGES.md +34 -34
  6. package/LICENSE +21 -21
  7. package/README.md +72 -72
  8. package/deploy.js +8 -8
  9. package/exports/browser/browser-store.js +4 -3
  10. package/exports/browser/identity.d.ts +18 -0
  11. package/exports/browser/{index-9c85cd32.js → index-8868bdd8.js} +1 -1
  12. package/exports/browser/messages/chat.d.ts +1 -1
  13. package/exports/browser/messages/data-response.d.ts +1 -1
  14. package/exports/browser/messages/dht-response.d.ts +1 -1
  15. package/exports/browser/messages/dht.d.ts +1 -1
  16. package/exports/browser/messages/peer-response.d.ts +1 -1
  17. package/exports/browser/messages/peer.d.ts +1 -1
  18. package/exports/browser/messages/peernet.d.ts +1 -1
  19. package/exports/browser/messages/ps.d.ts +1 -1
  20. package/exports/browser/messages/request.d.ts +1 -1
  21. package/exports/browser/messages/response.d.ts +1 -1
  22. package/exports/browser/{messages-b66f5393.js → messages-eb6e5c71.js} +174 -174
  23. package/exports/browser/{peernet-2797014a.js → peernet-87ea02a4.js} +1402 -1334
  24. package/exports/browser/peernet.d.ts +43 -23
  25. package/exports/browser/peernet.js +1 -1
  26. package/exports/{messages-dc960cb3.js → messages-b9a32987.js} +173 -173
  27. package/exports/peernet.js +305 -251
  28. package/exports/src/prompts/password.js +3 -3
  29. package/exports/store.js +15 -14
  30. package/exports/types/identity.d.ts +18 -0
  31. package/exports/types/messages/chat.d.ts +1 -1
  32. package/exports/types/messages/data-response.d.ts +1 -1
  33. package/exports/types/messages/dht-response.d.ts +1 -1
  34. package/exports/types/messages/dht.d.ts +1 -1
  35. package/exports/types/messages/peer-response.d.ts +1 -1
  36. package/exports/types/messages/peer.d.ts +1 -1
  37. package/exports/types/messages/peernet.d.ts +1 -1
  38. package/exports/types/messages/ps.d.ts +1 -1
  39. package/exports/types/messages/request.d.ts +1 -1
  40. package/exports/types/messages/response.d.ts +1 -1
  41. package/exports/types/peernet.d.ts +43 -23
  42. package/index.html +19 -19
  43. package/package.json +70 -69
  44. package/rollup.config.js +76 -69
  45. package/src/dht/dht.ts +141 -141
  46. package/src/discovery/peer-discovery.js +75 -75
  47. package/src/errors/errors.js +12 -12
  48. package/src/handlers/data.js +11 -11
  49. package/src/handlers/message.js +34 -34
  50. package/src/identity.ts +101 -94
  51. package/src/messages/chat.js +14 -14
  52. package/src/messages/data-response.js +14 -14
  53. package/src/messages/data.js +18 -18
  54. package/src/messages/dht-response.js +14 -14
  55. package/src/messages/dht.js +22 -22
  56. package/src/messages/file-link.js +18 -18
  57. package/src/messages/file.js +18 -18
  58. package/src/messages/peer-response.js +14 -14
  59. package/src/messages/peer.js +13 -13
  60. package/src/messages/peernet.js +14 -14
  61. package/src/messages/ps.js +13 -13
  62. package/src/messages/request.js +14 -14
  63. package/src/messages/response.js +14 -14
  64. package/src/messages.js +13 -13
  65. package/src/peer-info.js +9 -9
  66. package/src/peernet.ts +848 -753
  67. package/src/prompts/password/node.js +5 -5
  68. package/src/proto/chat-message.proto.js +6 -6
  69. package/src/proto/data-response.proto.js +4 -4
  70. package/src/proto/data.proto.js +4 -4
  71. package/src/proto/dht-response.proto.js +4 -4
  72. package/src/proto/dht.proto.js +4 -4
  73. package/src/proto/file-link.proto.js +5 -5
  74. package/src/proto/file.proto.js +5 -5
  75. package/src/proto/peer-response.proto.js +3 -3
  76. package/src/proto/peer.proto.js +3 -3
  77. package/src/proto/peernet.proto.js +7 -7
  78. package/src/proto/ps.proto.js +4 -4
  79. package/src/proto/request.proto.js +4 -4
  80. package/src/proto/response.proto.js +3 -3
  81. package/src/types.ts +27 -27
  82. package/src/utils/utils.js +78 -78
  83. package/test/client.js +14 -14
  84. package/test/codec.js +56 -56
  85. package/test/hash.js +13 -13
  86. package/test/index.js +3 -3
  87. package/test/lastBlock.js +7 -7
  88. package/test/messages.js +26 -26
  89. package/test/peernet.js +17 -17
  90. package/test.js +64 -64
  91. package/test2.js +9 -9
  92. package/test3.js +15 -15
  93. package/test4.js +7 -7
  94. package/tsconfig.json +12 -12
@@ -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$a = base32.decode;
213
- const decodeHex$3 = base32Hex.decode;
214
- const encode$9 = base32.encode;
215
- const encodeHex$3 = base32Hex.encode;
212
+ const decode$9 = base32.decode;
213
+ const decodeHex$2 = base32Hex.decode;
214
+ const encode$8 = base32.encode;
215
+ const encodeHex$2 = base32Hex.encode;
216
216
  const isBase32 = (string, hex = false) => {
217
217
  try {
218
218
  if (hex)
219
- decodeHex$3(string);
219
+ decodeHex$2(string);
220
220
  else
221
- decode$a(string);
221
+ decode$9(string);
222
222
  return true;
223
223
  }
224
224
  catch (e) {
@@ -229,10 +229,10 @@ const isBase32Hex = (string) => {
229
229
  return isBase32(string, true);
230
230
  };
231
231
  var index$9 = {
232
- encode: encode$9,
233
- decode: decode$a,
234
- encodeHex: encodeHex$3,
235
- decodeHex: decodeHex$3,
232
+ encode: encode$8,
233
+ decode: decode$9,
234
+ encodeHex: encodeHex$2,
235
+ decodeHex: decodeHex$2,
236
236
  isBase32,
237
237
  isBase32Hex
238
238
  };
@@ -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$8 = base58.encode;
245
- var decode$9 = base58.decode;
246
- var encodeHex$2 = base58Hex.encode;
247
- var decodeHex$2 = base58Hex.decode;
244
+ var encode$7 = base58.encode;
245
+ var decode$8 = base58.decode;
246
+ var encodeHex$1 = base58Hex.encode;
247
+ var decodeHex$1 = base58Hex.decode;
248
248
  var isBase58 = function (string) {
249
249
  try {
250
- decode$9(string);
250
+ decode$8(string);
251
251
  return true;
252
252
  }
253
253
  catch (e) {
@@ -256,7 +256,7 @@ var isBase58 = function (string) {
256
256
  };
257
257
  var isBase58Hex = function (string) {
258
258
  try {
259
- decodeHex$2(string);
259
+ decodeHex$1(string);
260
260
  return true;
261
261
  }
262
262
  catch (e) {
@@ -265,12 +265,12 @@ var isBase58Hex = function (string) {
265
265
  };
266
266
  var whatType = function (string) {
267
267
  try {
268
- decode$9(string);
268
+ decode$8(string);
269
269
  return 'base58';
270
270
  }
271
271
  catch (e) {
272
272
  try {
273
- decodeHex$2(string);
273
+ decodeHex$1(string);
274
274
  return 'base58Hex';
275
275
  }
276
276
  catch (_a) {
@@ -278,15 +278,21 @@ var whatType = function (string) {
278
278
  }
279
279
  }
280
280
  };
281
- var base58$1 = { encode: encode$8, decode: decode$9, isBase58: isBase58, isBase58Hex: isBase58Hex, encodeHex: encodeHex$2, decodeHex: decodeHex$2, whatType: whatType };
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
+ );
282
288
 
283
289
  const MSB$3 = 0x80;
284
290
  const REST$3 = 0x7F;
285
291
  const MSBALL$1 = ~REST$3;
286
292
  const INT$1 = Math.pow(2, 31);
287
- const encode$7 = (num, out, offset) => {
293
+ const encode$6 = (num, out, offset) => {
288
294
  if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
289
- encode$7.bytes = 0;
295
+ encode$6.bytes = 0;
290
296
  throw new RangeError('Could not encode varint');
291
297
  }
292
298
  out = out || [];
@@ -301,13 +307,13 @@ const encode$7 = (num, out, offset) => {
301
307
  num >>>= 7;
302
308
  }
303
309
  out[offset] = num | 0;
304
- encode$7.bytes = offset - oldOffset + 1;
310
+ encode$6.bytes = offset - oldOffset + 1;
305
311
  return out;
306
312
  };
307
313
 
308
314
  const MSB$2 = 0x80;
309
315
  const REST$2 = 0x7F;
310
- const decode$8 = (buf, offset) => {
316
+ const decode$7 = (buf, offset) => {
311
317
  offset = offset || 0;
312
318
  const l = buf.length;
313
319
  let counter = offset;
@@ -316,7 +322,7 @@ const decode$8 = (buf, offset) => {
316
322
  let b;
317
323
  do {
318
324
  if (counter >= l || shift > 49) {
319
- decode$8.bytes = 0;
325
+ decode$7.bytes = 0;
320
326
  throw new RangeError('Could not decode varint');
321
327
  }
322
328
  b = buf[counter++];
@@ -325,7 +331,7 @@ const decode$8 = (buf, offset) => {
325
331
  : (b & REST$2) * Math.pow(2, shift);
326
332
  shift += 7;
327
333
  } while (b >= MSB$2);
328
- decode$8.bytes = counter - offset;
334
+ decode$7.bytes = counter - offset;
329
335
  return result;
330
336
  };
331
337
 
@@ -350,8 +356,8 @@ var encodingLength$1 = (value) => (value < N1$1 ? 1
350
356
  : 10);
351
357
 
352
358
  var index$8 = {
353
- encode: encode$7,
354
- decode: decode$8,
359
+ encode: encode$6,
360
+ decode: decode$7,
355
361
  encodingLength: encodingLength$1
356
362
  };
357
363
 
@@ -401,11 +407,11 @@ var index$6 = (typedArray, prefix) => {
401
407
 
402
408
  const ALPHABET$1 = '0123456789ABCDEF';
403
409
  const base16 = base$1(ALPHABET$1);
404
- const decode$7 = base16.decode;
405
- const encode$6 = base16.encode;
410
+ const decode$6 = base16.decode;
411
+ const encode$5 = base16.encode;
406
412
  const isBase16 = (string) => {
407
413
  try {
408
- decode$7(string);
414
+ decode$6(string);
409
415
  return true;
410
416
  }
411
417
  catch (e) {
@@ -413,18 +419,18 @@ const isBase16 = (string) => {
413
419
  }
414
420
  };
415
421
  var index$5 = {
416
- encode: encode$6,
417
- decode: decode$7,
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$6 = base64.decode;
424
- const encode$5 = base64.encode;
429
+ const decode$5 = base64.decode;
430
+ const encode$4 = base64.encode;
425
431
  const isBase64 = (string) => {
426
432
  try {
427
- decode$6(string);
433
+ decode$5(string);
428
434
  return true;
429
435
  }
430
436
  catch (e) {
@@ -432,8 +438,8 @@ const isBase64 = (string) => {
432
438
  }
433
439
  };
434
440
  var index$4 = {
435
- encode: encode$5,
436
- decode: decode$6,
441
+ encode: encode$4,
442
+ decode: decode$5,
437
443
  isBase64
438
444
  };
439
445
 
@@ -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$4 = (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 = [];
@@ -4826,7 +4832,7 @@ const encode$4 = (proto, input, compress) => {
4826
4832
  }
4827
4833
  return index$7(set);
4828
4834
  };
4829
- const decode$5 = (proto, uint8Array, compressed) => {
4835
+ const decode$4 = (proto, uint8Array, compressed) => {
4830
4836
  let deconcated = index$6(uint8Array);
4831
4837
  const output = {};
4832
4838
  const keys = Object.keys(proto);
@@ -4857,558 +4863,120 @@ const decode$5 = (proto, uint8Array, compressed) => {
4857
4863
  return output;
4858
4864
  };
4859
4865
  var index$2 = {
4860
- encode: encode$4,
4861
- decode: decode$5
4866
+ encode: encode$3,
4867
+ decode: decode$4
4862
4868
  };
4863
4869
 
4864
- /*!
4865
- * hash-wasm (https://www.npmjs.com/package/hash-wasm)
4866
- * (c) Dani Biro
4867
- * @license MIT
4868
- */
4869
-
4870
- /*! *****************************************************************************
4871
- Copyright (c) Microsoft Corporation.
4872
-
4873
- Permission to use, copy, modify, and/or distribute this software for any
4874
- purpose with or without fee is hereby granted.
4875
-
4876
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
4877
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4878
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
4879
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4880
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4881
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4882
- PERFORMANCE OF THIS SOFTWARE.
4883
- ***************************************************************************** */
4884
-
4885
- function __awaiter(thisArg, _arguments, P, generator) {
4886
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4887
- return new (P || (P = Promise))(function (resolve, reject) {
4888
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4889
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
4890
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
4891
- step((generator = generator.apply(thisArg, _arguments || [])).next());
4892
- });
4893
- }
4894
-
4895
- class Mutex {
4896
- constructor() {
4897
- this.mutex = Promise.resolve();
4870
+ class BasicInterface {
4871
+ #encoded;
4872
+ #decoded;
4873
+ keys;
4874
+ name;
4875
+ #proto;
4876
+ get encoded() {
4877
+ if (!this.#encoded)
4878
+ this.#encoded = this.encode();
4879
+ return this.#encoded;
4898
4880
  }
4899
- lock() {
4900
- let begin = () => { };
4901
- this.mutex = this.mutex.then(() => new Promise(begin));
4902
- return new Promise((res) => {
4903
- begin = res;
4904
- });
4881
+ set encoded(value) {
4882
+ this.#encoded = value;
4905
4883
  }
4906
- dispatch(fn) {
4907
- return __awaiter(this, void 0, void 0, function* () {
4908
- const unlock = yield this.lock();
4909
- try {
4910
- return yield Promise.resolve(fn());
4911
- }
4912
- finally {
4913
- unlock();
4914
- }
4915
- });
4884
+ get decoded() {
4885
+ if (!this.#decoded)
4886
+ this.#decoded = this.decode();
4887
+ return this.#decoded;
4916
4888
  }
4917
- }
4918
-
4919
- /* eslint-disable import/prefer-default-export */
4920
- /* eslint-disable no-bitwise */
4921
- var _a;
4922
- function getGlobal() {
4923
- if (typeof globalThis !== 'undefined')
4924
- return globalThis;
4925
- // eslint-disable-next-line no-restricted-globals
4926
- if (typeof self !== 'undefined')
4927
- return self;
4928
- if (typeof window !== 'undefined')
4929
- return window;
4930
- return global;
4931
- }
4932
- const globalObject = getGlobal();
4933
- const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
4934
- const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
4935
- function hexCharCodesToInt(a, b) {
4936
- return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
4937
- }
4938
- function writeHexToUInt8(buf, str) {
4939
- const size = str.length >> 1;
4940
- for (let i = 0; i < size; i++) {
4941
- const index = i << 1;
4942
- buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
4889
+ set decoded(value) {
4890
+ this.#decoded = value;
4943
4891
  }
4944
- }
4945
- function hexStringEqualsUInt8(str, buf) {
4946
- if (str.length !== buf.length * 2) {
4947
- return false;
4892
+ set proto(value) {
4893
+ this.#proto = value;
4894
+ this.keys = Object.keys(value);
4948
4895
  }
4949
- for (let i = 0; i < buf.length; i++) {
4950
- const strIndex = i << 1;
4951
- if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
4952
- return false;
4953
- }
4896
+ get proto() {
4897
+ return this.#proto;
4954
4898
  }
4955
- return true;
4956
- }
4957
- const alpha = 'a'.charCodeAt(0) - 10;
4958
- const digit = '0'.charCodeAt(0);
4959
- function getDigestHex(tmpBuffer, input, hashLength) {
4960
- let p = 0;
4961
- /* eslint-disable no-plusplus */
4962
- for (let i = 0; i < hashLength; i++) {
4963
- let nibble = input[i] >>> 4;
4964
- tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
4965
- nibble = input[i] & 0xF;
4966
- tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
4899
+ decode(encoded) {
4900
+ encoded = encoded || this.encoded;
4901
+ return new Object();
4967
4902
  }
4968
- /* eslint-enable no-plusplus */
4969
- return String.fromCharCode.apply(null, tmpBuffer);
4970
- }
4971
- const getUInt8Buffer = nodeBuffer !== null
4972
- ? (data) => {
4973
- if (typeof data === 'string') {
4974
- const buf = nodeBuffer.from(data, 'utf8');
4975
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
4976
- }
4977
- if (nodeBuffer.isBuffer(data)) {
4978
- return new Uint8Array(data.buffer, data.byteOffset, data.length);
4979
- }
4980
- if (ArrayBuffer.isView(data)) {
4981
- return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
4982
- }
4983
- throw new Error('Invalid data type!');
4903
+ encode(decoded) {
4904
+ decoded = decoded || this.decoded;
4905
+ return new Uint8Array();
4984
4906
  }
4985
- : (data) => {
4986
- if (typeof data === 'string') {
4987
- return textEncoder.encode(data);
4988
- }
4989
- if (ArrayBuffer.isView(data)) {
4990
- return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
4991
- }
4992
- throw new Error('Invalid data type!');
4993
- };
4994
- const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4995
- const base64Lookup = new Uint8Array(256);
4996
- for (let i = 0; i < base64Chars.length; i++) {
4997
- base64Lookup[base64Chars.charCodeAt(i)] = i;
4998
- }
4999
- function getDecodeBase64Length(data) {
5000
- let bufferLength = Math.floor(data.length * 0.75);
5001
- const len = data.length;
5002
- if (data[len - 1] === '=') {
5003
- bufferLength -= 1;
5004
- if (data[len - 2] === '=') {
5005
- bufferLength -= 1;
4907
+ // get Codec(): Codec {}
4908
+ protoEncode(data) {
4909
+ // check schema
4910
+ return index$2.encode(this.proto, data, false);
4911
+ }
4912
+ protoDecode(data) {
4913
+ // check schema
4914
+ return index$2.decode(this.proto, data, false);
4915
+ }
4916
+ isHex(string) {
4917
+ return isHex(string);
4918
+ }
4919
+ isBase32(string) {
4920
+ return index$9.isBase32(string);
4921
+ }
4922
+ isBase58(string) {
4923
+ return base58$1.isBase58(string);
4924
+ }
4925
+ fromBs32(encoded) {
4926
+ return this.decode(index$9.decode(encoded));
4927
+ }
4928
+ fromBs58(encoded) {
4929
+ return this.decode(fromBase58(encoded));
4930
+ }
4931
+ async toArray() {
4932
+ const array = [];
4933
+ for await (const value of this.encoded.values()) {
4934
+ array.push(value);
5006
4935
  }
4936
+ return array;
5007
4937
  }
5008
- return bufferLength;
5009
- }
5010
- function decodeBase64(data) {
5011
- const bufferLength = getDecodeBase64Length(data);
5012
- const len = data.length;
5013
- const bytes = new Uint8Array(bufferLength);
5014
- let p = 0;
5015
- for (let i = 0; i < len; i += 4) {
5016
- const encoded1 = base64Lookup[data.charCodeAt(i)];
5017
- const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
5018
- const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
5019
- const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
5020
- bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
5021
- p += 1;
5022
- bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
5023
- p += 1;
5024
- bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
5025
- p += 1;
4938
+ fromString(string) {
4939
+ const array = string.split(',');
4940
+ const arrayLike = array.map(string => Number(string));
4941
+ return this.decode(Uint8Array.from(arrayLike));
4942
+ }
4943
+ fromHex(string) {
4944
+ return this.decode(fromHex(string));
4945
+ }
4946
+ fromArray(array) {
4947
+ return this.decode(Uint8Array.from([...array]));
4948
+ }
4949
+ fromEncoded(encoded) {
4950
+ return this.decode(encoded);
4951
+ }
4952
+ toString() {
4953
+ if (!this.encoded)
4954
+ this.encode();
4955
+ return this.encoded.toString();
4956
+ }
4957
+ toHex() {
4958
+ if (!this.encoded)
4959
+ this.encode();
4960
+ return toHex$2(this.encoded.toString().split(',').map(number => Number(number)));
4961
+ }
4962
+ /**
4963
+ * @return {String} encoded
4964
+ */
4965
+ toBs32() {
4966
+ if (!this.encoded)
4967
+ this.encode();
4968
+ return toBase32(this.encoded);
4969
+ }
4970
+ /**
4971
+ * @return {String} encoded
4972
+ */
4973
+ toBs58() {
4974
+ if (!this.encoded)
4975
+ this.encode();
4976
+ return toBase58(this.encoded);
5026
4977
  }
5027
- return bytes;
5028
4978
  }
5029
4979
 
5030
- const MAX_HEAP = 16 * 1024;
5031
- const WASM_FUNC_HASH_LENGTH = 4;
5032
- const wasmMutex = new Mutex();
5033
- const wasmModuleCache = new Map();
5034
- function WASMInterface(binary, hashLength) {
5035
- return __awaiter(this, void 0, void 0, function* () {
5036
- let wasmInstance = null;
5037
- let memoryView = null;
5038
- let initialized = false;
5039
- if (typeof WebAssembly === 'undefined') {
5040
- throw new Error('WebAssembly is not supported in this environment!');
5041
- }
5042
- const writeMemory = (data, offset = 0) => {
5043
- memoryView.set(data, offset);
5044
- };
5045
- const getMemory = () => memoryView;
5046
- const getExports = () => wasmInstance.exports;
5047
- const setMemorySize = (totalSize) => {
5048
- wasmInstance.exports.Hash_SetMemorySize(totalSize);
5049
- const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
5050
- const memoryBuffer = wasmInstance.exports.memory.buffer;
5051
- memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
5052
- };
5053
- const getStateSize = () => {
5054
- const view = new DataView(wasmInstance.exports.memory.buffer);
5055
- const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
5056
- return stateSize;
5057
- };
5058
- const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
5059
- if (!wasmModuleCache.has(binary.name)) {
5060
- const asm = decodeBase64(binary.data);
5061
- const promise = WebAssembly.compile(asm);
5062
- wasmModuleCache.set(binary.name, promise);
5063
- }
5064
- const module = yield wasmModuleCache.get(binary.name);
5065
- wasmInstance = yield WebAssembly.instantiate(module, {
5066
- // env: {
5067
- // emscripten_memcpy_big: (dest, src, num) => {
5068
- // const memoryBuffer = wasmInstance.exports.memory.buffer;
5069
- // const memView = new Uint8Array(memoryBuffer, 0);
5070
- // memView.set(memView.subarray(src, src + num), dest);
5071
- // },
5072
- // print_memory: (offset, len) => {
5073
- // const memoryBuffer = wasmInstance.exports.memory.buffer;
5074
- // const memView = new Uint8Array(memoryBuffer, 0);
5075
- // console.log('print_int32', memView.subarray(offset, offset + len));
5076
- // },
5077
- // },
5078
- });
5079
- // wasmInstance.exports._start();
5080
- }));
5081
- const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
5082
- if (!wasmInstance) {
5083
- yield loadWASMPromise;
5084
- }
5085
- const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
5086
- const memoryBuffer = wasmInstance.exports.memory.buffer;
5087
- memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
5088
- });
5089
- const init = (bits = null) => {
5090
- initialized = true;
5091
- wasmInstance.exports.Hash_Init(bits);
5092
- };
5093
- const updateUInt8Array = (data) => {
5094
- let read = 0;
5095
- while (read < data.length) {
5096
- const chunk = data.subarray(read, read + MAX_HEAP);
5097
- read += chunk.length;
5098
- memoryView.set(chunk);
5099
- wasmInstance.exports.Hash_Update(chunk.length);
5100
- }
5101
- };
5102
- const update = (data) => {
5103
- if (!initialized) {
5104
- throw new Error('update() called before init()');
5105
- }
5106
- const Uint8Buffer = getUInt8Buffer(data);
5107
- updateUInt8Array(Uint8Buffer);
5108
- };
5109
- const digestChars = new Uint8Array(hashLength * 2);
5110
- const digest = (outputType, padding = null) => {
5111
- if (!initialized) {
5112
- throw new Error('digest() called before init()');
5113
- }
5114
- initialized = false;
5115
- wasmInstance.exports.Hash_Final(padding);
5116
- if (outputType === 'binary') {
5117
- // the data is copied to allow GC of the original memory object
5118
- return memoryView.slice(0, hashLength);
5119
- }
5120
- return getDigestHex(digestChars, memoryView, hashLength);
5121
- };
5122
- const save = () => {
5123
- if (!initialized) {
5124
- throw new Error('save() can only be called after init() and before digest()');
5125
- }
5126
- const stateOffset = wasmInstance.exports.Hash_GetState();
5127
- const stateLength = getStateSize();
5128
- const memoryBuffer = wasmInstance.exports.memory.buffer;
5129
- const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
5130
- // prefix is 4 bytes from SHA1 hash of the WASM binary
5131
- // it is used to detect incompatible internal states between different versions of hash-wasm
5132
- const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
5133
- writeHexToUInt8(prefixedState, binary.hash);
5134
- prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
5135
- return prefixedState;
5136
- };
5137
- const load = (state) => {
5138
- if (!(state instanceof Uint8Array)) {
5139
- throw new Error('load() expects an Uint8Array generated by save()');
5140
- }
5141
- const stateOffset = wasmInstance.exports.Hash_GetState();
5142
- const stateLength = getStateSize();
5143
- const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
5144
- const memoryBuffer = wasmInstance.exports.memory.buffer;
5145
- if (state.length !== overallLength) {
5146
- throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
5147
- }
5148
- if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
5149
- throw new Error('This state was written by an incompatible hash implementation');
5150
- }
5151
- const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
5152
- new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
5153
- initialized = true;
5154
- };
5155
- const isDataShort = (data) => {
5156
- if (typeof data === 'string') {
5157
- // worst case is 4 bytes / char
5158
- return data.length < MAX_HEAP / 4;
5159
- }
5160
- return data.byteLength < MAX_HEAP;
5161
- };
5162
- let canSimplify = isDataShort;
5163
- switch (binary.name) {
5164
- case 'argon2':
5165
- case 'scrypt':
5166
- canSimplify = () => true;
5167
- break;
5168
- case 'blake2b':
5169
- case 'blake2s':
5170
- // if there is a key at blake2 then cannot simplify
5171
- canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
5172
- break;
5173
- case 'blake3':
5174
- // if there is a key at blake3 then cannot simplify
5175
- canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
5176
- break;
5177
- case 'xxhash64': // cannot simplify
5178
- case 'xxhash3':
5179
- case 'xxhash128':
5180
- canSimplify = () => false;
5181
- break;
5182
- }
5183
- // shorthand for (init + update + digest) for better performance
5184
- const calculate = (data, initParam = null, digestParam = null) => {
5185
- if (!canSimplify(data, initParam)) {
5186
- init(initParam);
5187
- update(data);
5188
- return digest('hex', digestParam);
5189
- }
5190
- const buffer = getUInt8Buffer(data);
5191
- memoryView.set(buffer);
5192
- wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
5193
- return getDigestHex(digestChars, memoryView, hashLength);
5194
- };
5195
- yield setupInterface();
5196
- return {
5197
- getMemory,
5198
- writeMemory,
5199
- getExports,
5200
- setMemorySize,
5201
- init,
5202
- update,
5203
- digest,
5204
- save,
5205
- load,
5206
- calculate,
5207
- hashLength,
5208
- };
5209
- });
5210
- }
5211
-
5212
- new Mutex();
5213
-
5214
- new Mutex();
5215
-
5216
- new Mutex();
5217
-
5218
- new Mutex();
5219
-
5220
- new Mutex();
5221
-
5222
- new Mutex();
5223
-
5224
- new Mutex();
5225
-
5226
- new Mutex();
5227
-
5228
- new Mutex();
5229
-
5230
- var name$b = "sha3";
5231
- var data$b = "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";
5232
- var hash$b = "ec266d91";
5233
- var wasmJson$b = {
5234
- name: name$b,
5235
- data: data$b,
5236
- hash: hash$b
5237
- };
5238
-
5239
- new Mutex();
5240
-
5241
- new Mutex();
5242
- function validateBits(bits) {
5243
- if (![224, 256, 384, 512].includes(bits)) {
5244
- return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
5245
- }
5246
- return null;
5247
- }
5248
- /**
5249
- * Creates a new Keccak hash instance
5250
- * @param bits Number of output bits. Valid values: 224, 256, 384, 512
5251
- */
5252
- function createKeccak(bits = 512) {
5253
- if (validateBits(bits)) {
5254
- return Promise.reject(validateBits(bits));
5255
- }
5256
- const outputSize = bits / 8;
5257
- return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
5258
- wasm.init(bits);
5259
- const obj = {
5260
- init: () => { wasm.init(bits); return obj; },
5261
- update: (data) => { wasm.update(data); return obj; },
5262
- digest: (outputType) => wasm.digest(outputType, 0x01),
5263
- save: () => wasm.save(),
5264
- load: (data) => { wasm.load(data); return obj; },
5265
- blockSize: 200 - 2 * outputSize,
5266
- digestSize: outputSize,
5267
- };
5268
- return obj;
5269
- });
5270
- }
5271
-
5272
- new Mutex();
5273
-
5274
- new Mutex();
5275
-
5276
- var name$9 = "sha512";
5277
- var data$9 = "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";
5278
- var hash$9 = "a5d1ca7c";
5279
- var wasmJson$9 = {
5280
- name: name$9,
5281
- data: data$9,
5282
- hash: hash$9
5283
- };
5284
-
5285
- new Mutex();
5286
-
5287
- new Mutex();
5288
- /**
5289
- * Creates a new SHA-2 (SHA-512) hash instance
5290
- */
5291
- function createSHA512() {
5292
- return WASMInterface(wasmJson$9, 64).then((wasm) => {
5293
- wasm.init(512);
5294
- const obj = {
5295
- init: () => { wasm.init(512); return obj; },
5296
- update: (data) => { wasm.update(data); return obj; },
5297
- digest: (outputType) => wasm.digest(outputType),
5298
- save: () => wasm.save(),
5299
- load: (data) => { wasm.load(data); return obj; },
5300
- blockSize: 128,
5301
- digestSize: 64,
5302
- };
5303
- return obj;
5304
- });
5305
- }
5306
-
5307
- new Mutex();
5308
-
5309
- new Mutex();
5310
-
5311
- new Mutex();
5312
-
5313
- new Mutex();
5314
-
5315
- var name$4 = "ripemd160";
5316
- var data$4 = "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";
5317
- var hash$4 = "42f1de39";
5318
- var wasmJson$4 = {
5319
- name: name$4,
5320
- data: data$4,
5321
- hash: hash$4
5322
- };
5323
-
5324
- new Mutex();
5325
- /**
5326
- * Creates a new RIPEMD-160 hash instance
5327
- */
5328
- function createRIPEMD160() {
5329
- return WASMInterface(wasmJson$4, 20).then((wasm) => {
5330
- wasm.init();
5331
- const obj = {
5332
- init: () => { wasm.init(); return obj; },
5333
- update: (data) => { wasm.update(data); return obj; },
5334
- digest: (outputType) => wasm.digest(outputType),
5335
- save: () => wasm.save(),
5336
- load: (data) => { wasm.load(data); return obj; },
5337
- blockSize: 64,
5338
- digestSize: 20,
5339
- };
5340
- return obj;
5341
- });
5342
- }
5343
-
5344
- function calculateKeyBuffer(hasher, key) {
5345
- const { blockSize } = hasher;
5346
- const buf = getUInt8Buffer(key);
5347
- if (buf.length > blockSize) {
5348
- hasher.update(buf);
5349
- const uintArr = hasher.digest('binary');
5350
- hasher.init();
5351
- return uintArr;
5352
- }
5353
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
5354
- }
5355
- function calculateHmac(hasher, key) {
5356
- hasher.init();
5357
- const { blockSize } = hasher;
5358
- const keyBuf = calculateKeyBuffer(hasher, key);
5359
- const keyBuffer = new Uint8Array(blockSize);
5360
- keyBuffer.set(keyBuf);
5361
- const opad = new Uint8Array(blockSize);
5362
- for (let i = 0; i < blockSize; i++) {
5363
- const v = keyBuffer[i];
5364
- opad[i] = v ^ 0x5C;
5365
- keyBuffer[i] = v ^ 0x36;
5366
- }
5367
- hasher.update(keyBuffer);
5368
- const obj = {
5369
- init: () => {
5370
- hasher.init();
5371
- hasher.update(keyBuffer);
5372
- return obj;
5373
- },
5374
- update: (data) => {
5375
- hasher.update(data);
5376
- return obj;
5377
- },
5378
- digest: ((outputType) => {
5379
- const uintArr = hasher.digest('binary');
5380
- hasher.init();
5381
- hasher.update(opad);
5382
- hasher.update(uintArr);
5383
- return hasher.digest(outputType);
5384
- }),
5385
- save: () => {
5386
- throw new Error('save() not supported');
5387
- },
5388
- load: () => {
5389
- throw new Error('load() not supported');
5390
- },
5391
- blockSize: hasher.blockSize,
5392
- digestSize: hasher.digestSize,
5393
- };
5394
- return obj;
5395
- }
5396
- /**
5397
- * Calculates HMAC hash
5398
- * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
5399
- * @param key Key (string, Buffer or TypedArray)
5400
- */
5401
- function createHMAC(hash, key) {
5402
- if (!hash || !hash.then) {
5403
- throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
5404
- }
5405
- return hash.then((hasher) => calculateHmac(hasher, key));
5406
- }
5407
-
5408
- new Mutex();
5409
-
5410
- new Mutex();
5411
-
5412
4980
  const blockchainCodecs = [
5413
4981
  {
5414
4982
  name: 'leofcoin-block',
@@ -5600,106 +5168,7 @@ var utils$p = {
5600
5168
  codecs: globalThis.peernetCodecs
5601
5169
  };
5602
5170
 
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$2.encode(this.proto, data, false);
5633
- }
5634
- protoDecode(data) {
5635
- // check schema
5636
- return index$2.decode(this.proto, data, false);
5637
- }
5638
- isHex(string) {
5639
- return isHex(string);
5640
- }
5641
- isBase32(string) {
5642
- return index$9.isBase32(string);
5643
- }
5644
- isBase58(string) {
5645
- return base58$1.isBase58(string);
5646
- }
5647
- fromBs32(encoded) {
5648
- return this.decode(index$9.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 {
5171
+ let Codec$1 = class Codec extends BasicInterface {
5703
5172
  codecBuffer;
5704
5173
  codec;
5705
5174
  hashAlg;
@@ -5719,7 +5188,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5719
5188
  }
5720
5189
  }
5721
5190
  else if (buffer instanceof ArrayBuffer) {
5722
- const codec = index$8.decode(new Uint8Array(buffer));
5191
+ const codec = index$8.decode(buffer);
5723
5192
  const name = this.getCodecName(codec);
5724
5193
  if (name) {
5725
5194
  this.name = name;
@@ -5767,6 +5236,12 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5767
5236
  this.hashAlg = this.getHashAlg(this.name);
5768
5237
  this.codec = this.getCodec(this.name);
5769
5238
  this.codecBuffer = index$8.encode(this.codec);
5239
+ this.decoded = {
5240
+ name: this.name,
5241
+ hashAlg: this.hashAlg,
5242
+ codec: this.codec,
5243
+ codecBuffer: this.codecBuffer
5244
+ };
5770
5245
  }
5771
5246
  fromName(name) {
5772
5247
  const codec = this.getCodec(name);
@@ -5774,6 +5249,12 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5774
5249
  this.codec = codec;
5775
5250
  this.hashAlg = this.getHashAlg(name);
5776
5251
  this.codecBuffer = index$8.encode(this.codec);
5252
+ this.decoded = {
5253
+ name: this.name,
5254
+ hashAlg: this.hashAlg,
5255
+ codec: this.codec,
5256
+ codecBuffer: this.codecBuffer
5257
+ };
5777
5258
  }
5778
5259
  decode(encoded) {
5779
5260
  encoded = encoded || this.encoded;
@@ -5788,12 +5269,10 @@ let Codec$1 = class Codec extends BasicInterface$1 {
5788
5269
  }
5789
5270
  };
5790
5271
 
5791
- let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5272
+ class CodecHash extends BasicInterface {
5792
5273
  codec;
5793
- codecs;
5794
- digest;
5795
- size;
5796
- constructor(buffer, options) {
5274
+ discoCodec;
5275
+ constructor(buffer, options = {}) {
5797
5276
  super();
5798
5277
  if (options.name)
5799
5278
  this.name = options.name;
@@ -5806,8 +5285,8 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5806
5285
  async init(uint8Array) {
5807
5286
  if (uint8Array) {
5808
5287
  if (uint8Array instanceof Uint8Array) {
5809
- this.codec = new Codec$1(uint8Array);
5810
- const name = this.codec.name;
5288
+ this.discoCodec = new Codec$1(uint8Array, this.codecs);
5289
+ const name = this.discoCodec.name;
5811
5290
  if (name) {
5812
5291
  this.name = name;
5813
5292
  this.decode(uint8Array);
@@ -5833,9 +5312,9 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5833
5312
  }
5834
5313
  get prefix() {
5835
5314
  const length = this.length;
5836
- const uint8Array = new Uint8Array(length.length + this.codec.codecBuffer.length);
5315
+ const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length);
5837
5316
  uint8Array.set(length);
5838
- uint8Array.set(this.codec.codecBuffer, length.length);
5317
+ uint8Array.set(this.discoCodec.codecBuffer, length.length);
5839
5318
  return uint8Array;
5840
5319
  }
5841
5320
  get length() {
@@ -5855,22 +5334,29 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5855
5334
  this.name = name;
5856
5335
  if (!buffer)
5857
5336
  buffer = this.buffer;
5858
- this.codec = new Codec$1(this.name);
5859
- this.codec.fromName(this.name);
5860
- let hashAlg = this.codec.hashAlg;
5337
+ this.discoCodec = new Codec$1(this.name);
5338
+ this.discoCodec.fromName(this.name);
5339
+ let hashAlg = this.discoCodec.hashAlg;
5861
5340
  const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1]);
5862
5341
  if (hashAlg.includes('dbl')) {
5863
5342
  hashAlg = hashAlg.replace('dbl-', '');
5864
- const hasher = await createKeccak(hashVariant);
5865
- await hasher.init();
5866
- hasher.update(buffer);
5867
- buffer = hasher.digest('binary');
5343
+ // const hasher = await createKeccak(hashVariant)
5344
+ // await hasher.init()
5345
+ // hasher.update(buffer)
5346
+ // buffer = hasher.digest('binary')
5347
+ buffer = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
5348
+ }
5349
+ // const hasher = await createKeccak(hashVariant)
5350
+ // await hasher.init()
5351
+ // hasher.update(buffer)
5352
+ // this.digest = hasher.digest('binary')
5353
+ this.digest = await crypto.subtle.digest(`SHA-${hashVariant}`, buffer);
5354
+ if (this.digest instanceof ArrayBuffer) {
5355
+ this.digest = new Uint8Array(this.digest);
5868
5356
  }
5869
- const hasher = await createKeccak(hashVariant);
5870
- await hasher.init();
5871
- hasher.update(buffer);
5872
- this.digest = hasher.digest('binary');
5873
5357
  this.size = this.digest.length;
5358
+ this.codec = this.discoCodec.encode();
5359
+ this.codec = this.discoCodec.codecBuffer;
5874
5360
  const uint8Array = new Uint8Array(this.digest.length + this.prefix.length);
5875
5361
  uint8Array.set(this.prefix);
5876
5362
  uint8Array.set(this.digest, this.prefix.length);
@@ -5899,16 +5385,16 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5899
5385
  decode(buffer) {
5900
5386
  this.encoded = buffer;
5901
5387
  const codec = index$8.decode(buffer);
5902
- this.codec = new Codec$1(codec);
5388
+ this.discoCodec = new Codec$1(codec, this.codecs);
5903
5389
  // TODO: validate codec
5904
5390
  buffer = buffer.slice(index$8.decode.bytes);
5905
5391
  this.size = index$8.decode(buffer);
5906
5392
  this.digest = buffer.slice(index$8.decode.bytes);
5907
5393
  if (this.digest.length !== this.size) {
5908
- throw new Error(`hash length inconsistent: ${this.encoded.toString()}`);
5394
+ throw new Error(`hash length inconsistent: 0x${this.encoded.toString('hex')}`);
5909
5395
  }
5910
- // const codec = new Codec(codec, this.codecs)
5911
- this.name = this.codec.name;
5396
+ // const discoCodec = new Codec(codec, this.codecs)
5397
+ this.name = this.discoCodec.name;
5912
5398
  this.size = this.digest.length;
5913
5399
  return {
5914
5400
  codec: this.codec,
@@ -5918,10 +5404,11 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
5918
5404
  digest: this.digest,
5919
5405
  };
5920
5406
  }
5921
- };
5407
+ }
5922
5408
 
5923
- let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
5409
+ let FormatInterface$1 = class FormatInterface extends BasicInterface {
5924
5410
  hashFormat;
5411
+ #hash;
5925
5412
  init(buffer) {
5926
5413
  if (buffer instanceof Uint8Array)
5927
5414
  this.fromUint8Array(buffer);
@@ -5953,7 +5440,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
5953
5440
  }
5954
5441
  decode(encoded) {
5955
5442
  encoded = encoded || this.encoded;
5956
- const codec = new Codec$1(this.encoded);
5443
+ const codec = new Codec$1(encoded);
5957
5444
  if (codec.codecBuffer) {
5958
5445
  encoded = encoded.slice(codec.codecBuffer.length);
5959
5446
  this.name = codec.name;
@@ -5970,8 +5457,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
5970
5457
  }
5971
5458
  encode(decoded) {
5972
5459
  let encoded;
5973
- if (!decoded)
5974
- decoded = this.decoded;
5460
+ decoded = decoded || this.decoded;
5975
5461
  const codec = new Codec$1(this.name);
5976
5462
  if (decoded instanceof Uint8Array)
5977
5463
  encoded = decoded;
@@ -6001,19 +5487,29 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
6001
5487
  this.name = options.name;
6002
5488
  this.init(buffer);
6003
5489
  }
5490
+ get format() {
5491
+ const upper = this.hashFormat.charAt(0).toUpperCase();
5492
+ return `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
5493
+ }
6004
5494
  /**
6005
5495
  * @return {PeernetHash}
6006
5496
  */
6007
5497
  get peernetHash() {
6008
- return new CodecHash$1(this.decoded, { name: this.name });
5498
+ const decoded = this.decoded;
5499
+ // @ts-ignore
5500
+ delete decoded.hash;
5501
+ return new CodecHash(decoded, { name: this.name });
6009
5502
  }
6010
5503
  /**
6011
5504
  * @return {peernetHash}
6012
5505
  */
6013
5506
  async hash() {
5507
+ if (this.#hash)
5508
+ return this.#hash;
6014
5509
  const upper = this.hashFormat.charAt(0).toUpperCase();
6015
5510
  const format = `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
6016
- return (await this.peernetHash)[`to${format}`]();
5511
+ this.#hash = (await this.peernetHash)[`to${format}`]();
5512
+ return this.#hash;
6017
5513
  }
6018
5514
  fromUint8Array(buffer) {
6019
5515
  this.encoded = buffer;
@@ -6028,152 +5524,155 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
6028
5524
  */
6029
5525
  create(data) {
6030
5526
  const decoded = {};
5527
+ if (data.hash)
5528
+ this.#hash = data.hash;
6031
5529
  if (this.keys?.length > 0) {
6032
5530
  for (const key of this.keys) {
6033
5531
  decoded[key] = data[key];
6034
5532
  }
6035
5533
  this.decoded = decoded;
6036
- return this.encode(decoded);
5534
+ // return this.encode(decoded)
6037
5535
  }
6038
- }
6039
- };
6040
- const FormatInterface = FormatInterface$1;
6041
- const Codec = Codec$1;
6042
-
6043
- const BufferToUint8Array = data => {
6044
- if (data.type === 'Buffer') {
6045
- data = new Uint8Array(data.data);
6046
- }
6047
- return data
6048
- };
6049
-
6050
- const protoFor = (message) => {
6051
- const codec = new Codec(message);
6052
- if (!codec.name) throw new Error('proto not found')
6053
- const Proto = globalThis.peernet.protos[codec.name];
6054
- if (!Proto) throw (new Error(`No proto defined for ${codec.name}`))
6055
- return new Proto(message)
6056
- };
6057
-
6058
- /**
6059
- * wether or not a peernet daemon is active
6060
- * @return {Boolean}
6061
- */
6062
- const hasDaemon = async () => {
6063
- try {
6064
- let response = await fetch('http://127.0.0.1:1000/api/version');
6065
- response = await response.json();
6066
- return Boolean(response.client === '@peernet/api/http')
6067
- } catch (e) {
6068
- return false
6069
- }
6070
- };
6071
-
6072
- const https = () => {
6073
- if (!globalThis.location) return false;
6074
- return Boolean(globalThis.location.protocol === 'https:')
6075
- };
6076
-
6077
- /**
6078
- * Get current environment
6079
- * @return {String} current environment [node, electron, browser]
6080
- */
6081
- const environment = () => {
6082
- const _navigator = globalThis.navigator;
6083
- if (!_navigator) {
6084
- return 'node'
6085
- } else if (_navigator && /electron/i.test(_navigator.userAgent)) {
6086
- return 'electron'
6087
- } else {
6088
- return 'browser'
6089
- }
5536
+ }
6090
5537
  };
6091
5538
 
6092
- /**
6093
- * * Get current environment
6094
- * @return {Object} result
6095
- * @property {Boolean} reult.daemon whether or not daemon is running
6096
- * @property {Boolean} reult.environment Current environment
6097
- */
6098
- const target = async () => {
6099
- let daemon = false;
6100
- if (!https()) daemon = await hasDaemon();
5539
+ const FormatInterface = FormatInterface$1;
5540
+ const Codec = Codec$1;
6101
5541
 
6102
- return {daemon, environment: environment()}
5542
+ const BufferToUint8Array = data => {
5543
+ if (data.type === 'Buffer') {
5544
+ data = new Uint8Array(data.data);
5545
+ }
5546
+ return data
5547
+ };
5548
+
5549
+ const protoFor = (message) => {
5550
+ const codec = new Codec(message);
5551
+ if (!codec.name) throw new Error('proto not found')
5552
+ const Proto = globalThis.peernet.protos[codec.name];
5553
+ if (!Proto) throw (new Error(`No proto defined for ${codec.name}`))
5554
+ return new Proto(message)
5555
+ };
5556
+
5557
+ /**
5558
+ * wether or not a peernet daemon is active
5559
+ * @return {Boolean}
5560
+ */
5561
+ const hasDaemon = async () => {
5562
+ try {
5563
+ let response = await fetch('http://127.0.0.1:1000/api/version');
5564
+ response = await response.json();
5565
+ return Boolean(response.client === '@peernet/api/http')
5566
+ } catch (e) {
5567
+ return false
5568
+ }
5569
+ };
5570
+
5571
+ const https = () => {
5572
+ if (!globalThis.location) return false;
5573
+ return Boolean(globalThis.location.protocol === 'https:')
5574
+ };
5575
+
5576
+ /**
5577
+ * Get current environment
5578
+ * @return {String} current environment [node, electron, browser]
5579
+ */
5580
+ const environment = () => {
5581
+ const _navigator = globalThis.navigator;
5582
+ if (!_navigator) {
5583
+ return 'node'
5584
+ } else if (_navigator && /electron/i.test(_navigator.userAgent)) {
5585
+ return 'electron'
5586
+ } else {
5587
+ return 'browser'
5588
+ }
5589
+ };
5590
+
5591
+ /**
5592
+ * * Get current environment
5593
+ * @return {Object} result
5594
+ * @property {Boolean} reult.daemon whether or not daemon is running
5595
+ * @property {Boolean} reult.environment Current environment
5596
+ */
5597
+ const target = async () => {
5598
+ let daemon = false;
5599
+ if (!https()) daemon = await hasDaemon();
5600
+
5601
+ return {daemon, environment: environment()}
6103
5602
  };
6104
5603
 
6105
- class PeerDiscovery {
6106
- constructor(id) {
6107
- this.id = id;
6108
- }
6109
-
6110
- _getPeerId(id) {
6111
- if (!peernet.peerMap || peernet.peerMap && peernet.peerMap.size === 0) return false
6112
-
6113
- for (const entry of [...peernet.peerMap.entries()]) {
6114
- for (const _id of entry[1]) {
6115
- if (_id === id) return entry[0]
6116
- }
6117
- }
6118
- }
6119
-
6120
- async discover(peer) {
6121
- let id = this._getPeerId(peer.id);
6122
- if (id) return id
6123
- const data = await new peernet.protos['peernet-peer']({id: this.id});
6124
- const node = await peernet.prepareMessage(peer.id, data.encoded);
6125
-
6126
- let response = await peer.request(node.encoded);
6127
- response = await protoFor(response);
6128
- response = await new peernet.protos['peernet-peer-response'](response.decoded.data);
6129
-
6130
- id = response.decoded.id;
6131
- if (id === this.id) return;
6132
-
6133
- if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id]);
6134
- else {
6135
- const connections = peernet.peerMap.get(id);
6136
- if (connections.indexOf(peer.id) === -1) {
6137
- connections.push(peer.id);
6138
- peernet.peerMap.set(peer.id, connections);
6139
- }
6140
- }
6141
- return id
6142
- }
6143
-
6144
- async discoverHandler(message, peer) {
6145
- const {id, proto} = message;
6146
- // if (typeof message.data === 'string') message.data = Buffer.from(message.data)
6147
- if (proto.name === 'peernet-peer') {
6148
- const from = proto.decoded.id;
6149
- if (from === this.id) return;
6150
-
6151
- if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
6152
- else {
6153
- const connections = peernet.peerMap.get(from);
6154
- if (connections.indexOf(peer.id) === -1) {
6155
- connections.push(peer.id);
6156
- peernet.peerMap.set(from, connections);
6157
- }
6158
- }
6159
- const data = await new peernet.protos['peernet-peer-response']({id: this.id});
6160
- const node = await peernet.prepareMessage(from, data.encoded);
6161
-
6162
- peer.write(Buffer.from(JSON.stringify({id, data: node.encoded})));
6163
- } else if (proto.name === 'peernet-peer-response') {
6164
- const from = proto.decoded.id;
6165
- if (from === this.id) return;
6166
-
6167
- if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
6168
- else {
6169
- const connections = peernet.peerMap.get(from);
6170
- if (connections.indexOf(peer.id) === -1) {
6171
- connections.push(peer.id);
6172
- peernet.peerMap.set(from, connections);
6173
- }
6174
- }
6175
- }
6176
- }
5604
+ class PeerDiscovery {
5605
+ constructor(id) {
5606
+ this.id = id;
5607
+ }
5608
+
5609
+ _getPeerId(id) {
5610
+ if (!peernet.peerMap || peernet.peerMap && peernet.peerMap.size === 0) return false
5611
+
5612
+ for (const entry of [...peernet.peerMap.entries()]) {
5613
+ for (const _id of entry[1]) {
5614
+ if (_id === id) return entry[0]
5615
+ }
5616
+ }
5617
+ }
5618
+
5619
+ async discover(peer) {
5620
+ let id = this._getPeerId(peer.id);
5621
+ if (id) return id
5622
+ const data = await new peernet.protos['peernet-peer']({id: this.id});
5623
+ const node = await peernet.prepareMessage(peer.id, data.encoded);
5624
+
5625
+ let response = await peer.request(node.encoded);
5626
+ response = await protoFor(response);
5627
+ response = await new peernet.protos['peernet-peer-response'](response.decoded.data);
5628
+
5629
+ id = response.decoded.id;
5630
+ if (id === this.id) return;
5631
+
5632
+ if (!peernet.peerMap.has(id)) peernet.peerMap.set(id, [peer.id]);
5633
+ else {
5634
+ const connections = peernet.peerMap.get(id);
5635
+ if (connections.indexOf(peer.id) === -1) {
5636
+ connections.push(peer.id);
5637
+ peernet.peerMap.set(peer.id, connections);
5638
+ }
5639
+ }
5640
+ return id
5641
+ }
5642
+
5643
+ async discoverHandler(message, peer) {
5644
+ const {id, proto} = message;
5645
+ // if (typeof message.data === 'string') message.data = Buffer.from(message.data)
5646
+ if (proto.name === 'peernet-peer') {
5647
+ const from = proto.decoded.id;
5648
+ if (from === this.id) return;
5649
+
5650
+ if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
5651
+ else {
5652
+ const connections = peernet.peerMap.get(from);
5653
+ if (connections.indexOf(peer.id) === -1) {
5654
+ connections.push(peer.id);
5655
+ peernet.peerMap.set(from, connections);
5656
+ }
5657
+ }
5658
+ const data = await new peernet.protos['peernet-peer-response']({id: this.id});
5659
+ const node = await peernet.prepareMessage(from, data.encoded);
5660
+
5661
+ peer.write(Buffer.from(JSON.stringify({id, data: node.encoded})));
5662
+ } else if (proto.name === 'peernet-peer-response') {
5663
+ const from = proto.decoded.id;
5664
+ if (from === this.id) return;
5665
+
5666
+ if (!peernet.peerMap.has(from)) peernet.peerMap.set(from, [peer.id]);
5667
+ else {
5668
+ const connections = peernet.peerMap.get(from);
5669
+ if (connections.indexOf(peer.id) === -1) {
5670
+ connections.push(peer.id);
5671
+ peernet.peerMap.set(from, connections);
5672
+ }
5673
+ }
5674
+ }
5675
+ }
6177
5676
  }
6178
5677
 
6179
5678
  /**
@@ -6283,58 +5782,59 @@ class DhtEarth {
6283
5782
  }
6284
5783
  }
6285
5784
 
6286
- class MessageHandler {
6287
- constructor(network) {
6288
- this.network = network;
6289
- }
6290
- /**
6291
- * hash and sign message
6292
- *
6293
- * @param {object} message
6294
- * @param {Buffer} message.from peer id
6295
- * @param {Buffer} message.to peer id
6296
- * @param {string} message.data Peernet message
6297
- * (PeernetMessage excluded) encoded as a string
6298
- * @return message
6299
- */
6300
- async hashAndSignMessage(message) {
6301
- const hash = await message.peernetHash;
6302
- message.decoded.signature = globalThis.identity.sign(hash.buffer);
6303
- return message
6304
- }
6305
-
6306
- /**
6307
- * @param {String} from - peer id
6308
- * @param {String} to - peer id
6309
- * @param {String|PeernetMessage} data - data encoded message string
6310
- * or the messageNode itself
6311
- */
6312
- async prepareMessage(message) {
6313
- if (message.keys.includes('signature')) {
6314
- message = await this.hashAndSignMessage(message);
6315
- }
6316
-
6317
- return message
6318
- }
5785
+ class MessageHandler {
5786
+ constructor(network) {
5787
+ this.network = network;
5788
+ }
5789
+ /**
5790
+ * hash and sign message
5791
+ *
5792
+ * @param {object} message
5793
+ * @param {Buffer} message.from peer id
5794
+ * @param {Buffer} message.to peer id
5795
+ * @param {string} message.data Peernet message
5796
+ * (PeernetMessage excluded) encoded as a string
5797
+ * @return message
5798
+ */
5799
+ async hashAndSignMessage(message) {
5800
+ const hash = await message.peernetHash;
5801
+ message.decoded.signature = globalThis.identity.sign(hash.buffer);
5802
+ return message
5803
+ }
5804
+
5805
+ /**
5806
+ * @param {String} from - peer id
5807
+ * @param {String} to - peer id
5808
+ * @param {String|PeernetMessage} data - data encoded message string
5809
+ * or the messageNode itself
5810
+ */
5811
+ async prepareMessage(message) {
5812
+ if (message.keys.includes('signature')) {
5813
+ message = await this.hashAndSignMessage(message);
5814
+ }
5815
+
5816
+ return message
5817
+ }
6319
5818
  }
6320
5819
 
6321
- const dataHandler = async message => {
6322
- if (!message) return
6323
-
6324
- const {data, id, from, peer} = message;
6325
- const proto = await protoFor(data);
6326
- peernet._protoHandler({id, proto}, peernet.connections[from] || peer, from);
6327
- };
6328
-
6329
- const dhtError = (proto) => {
6330
- const text = `Received proto ${proto.name} expected peernet-dht-response`;
6331
- return new Error(`Routing error: ${text}`)
5820
+ const dataHandler = async message => {
5821
+ if (!message) return
5822
+
5823
+ const {data, id, from, peer} = message;
5824
+ const proto = await protoFor(data);
5825
+ peernet._protoHandler({id, proto}, peernet.connections[from] || peer, from);
6332
5826
  };
6333
5827
 
6334
- const nothingFoundError = (hash) => {
6335
- return new Error(`nothing found for ${hash}`)
5828
+ const dhtError = (proto) => {
5829
+ const text = `Received proto ${proto.name} expected peernet-dht-response`;
5830
+ return new Error(`Routing error: ${text}`)
5831
+ };
5832
+
5833
+ const nothingFoundError = (hash) => {
5834
+ return new Error(`nothing found for ${hash}`)
6336
5835
  };
6337
5836
 
5837
+ const isBrowser = globalThis.navigator ? true : false;
6338
5838
  let LeofcoinStorage$1 = class LeofcoinStorage {
6339
5839
  name;
6340
5840
  root;
@@ -6344,9 +5844,12 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
6344
5844
  this.root = root;
6345
5845
  }
6346
5846
  async init() {
6347
- const importee = await import(globalThis.navigator ? './browser-store.js' : './store.js');
6348
- const Store = importee.default;
6349
- this.db = new Store(this.name, this.root);
5847
+ const importee = await import(isBrowser ? './browser-store.js' : './store.js');
5848
+ this.db = new importee.default();
5849
+ if (!isBrowser) {
5850
+ // @ts-ignore
5851
+ await this.db.init(this.name, this.root);
5852
+ }
6350
5853
  }
6351
5854
  async get(key) {
6352
5855
  if (typeof key === 'object')
@@ -6399,6 +5902,7 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
6399
5902
  let size = 0;
6400
5903
  const query = await this.db.iterate();
6401
5904
  for await (const item of query) {
5905
+ // @ts-ignore
6402
5906
  size += item.value ? item.value.length : item[1].length;
6403
5907
  }
6404
5908
  return size;
@@ -6488,15 +5992,15 @@ var typedArrayConcat = (input, options = {length: undefined, seperator: undefine
6488
5992
  return typedArray
6489
5993
  };
6490
5994
 
6491
- const concatAndDoubleHash$1 = async (input) => {
5995
+ const concatAndDoubleHash = async (input) => {
6492
5996
  return new Uint8Array(await createDoubleHash(typedArrayConcat(input), 'SHA-256'));
6493
5997
  };
6494
5998
 
6495
- const encode$3 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
5999
+ const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
6496
6000
  if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
6497
6001
  throw new TypeError('Expected Uint8Array');
6498
6002
  }
6499
- const hash = await concatAndDoubleHash$1([
6003
+ const hash = await concatAndDoubleHash([
6500
6004
  prefix,
6501
6005
  source
6502
6006
  ]);
@@ -6509,11 +6013,11 @@ const encode$3 = async (source, prefix = new TextEncoder().encode('00'), hex) =>
6509
6013
  return base58$1.encodeHex(uint8Array);
6510
6014
  return base58$1.encode(uint8Array);
6511
6015
  };
6512
- const decode$4 = async (string, hex) => {
6016
+ const decode$3 = async (string, hex) => {
6513
6017
  let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
6514
6018
  const prefix = uint8Array.subarray(0, 2);
6515
6019
  const source = uint8Array.subarray(2, -4);
6516
- const hash = await concatAndDoubleHash$1([
6020
+ const hash = await concatAndDoubleHash([
6517
6021
  prefix,
6518
6022
  source
6519
6023
  ]);
@@ -6527,21 +6031,21 @@ const decode$4 = async (string, hex) => {
6527
6031
  }
6528
6032
  return { prefix, data: source };
6529
6033
  };
6530
- const isBase58check$1 = (string, hex) => {
6034
+ const isBase58check = (string, hex) => {
6531
6035
  try {
6532
- hex ? decode$4(string, true) : decode$4(string);
6036
+ hex ? decode$3(string, true) : decode$3(string);
6533
6037
  return true;
6534
6038
  }
6535
6039
  catch (e) {
6536
6040
  return false;
6537
6041
  }
6538
6042
  };
6539
- const encodeHex$1 = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$3(uint8Array, prefix, true);
6540
- const decodeHex$1 = (string) => decode$4(string, true);
6541
- const isBase58checkHex$1 = (string) => isBase58check$1(string, true);
6542
- var base58check$1 = { encode: encode$3, decode: decode$4, encodeHex: encodeHex$1, decodeHex: decodeHex$1, isBase58check: isBase58check$1, isBase58checkHex: isBase58checkHex$1 };
6043
+ const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
6044
+ const decodeHex = (string) => decode$3(string, true);
6045
+ const isBase58checkHex = (string) => isBase58check(string, true);
6046
+ var base58check = { encode: encode$2, decode: decode$3, encodeHex, decodeHex, isBase58check, isBase58checkHex };
6543
6047
 
6544
- const decode$3 = (multiWif, expectedVersion, expectedCodec) => {
6048
+ const decode$2 = (multiWif, expectedVersion, expectedCodec) => {
6545
6049
  const decoded = base58$1.decode(multiWif);
6546
6050
  let [version, codec, privateKey] = index$6(decoded);
6547
6051
  version = Number(new TextDecoder().decode(version));
@@ -6560,10 +6064,10 @@ var index$1 = {
6560
6064
  privateKey
6561
6065
  ]));
6562
6066
  },
6563
- decode: decode$3,
6067
+ decode: decode$2,
6564
6068
  isMultiWif: (multiWif) => {
6565
6069
  try {
6566
- const { version, codec, privateKey } = decode$3(multiWif);
6070
+ const { version, codec, privateKey } = decode$2(multiWif);
6567
6071
  if (version === undefined)
6568
6072
  return false;
6569
6073
  if (codec === undefined)
@@ -15977,412 +15481,914 @@ var elliptic$1 = {
15977
15481
  for (let i = 1; i < pairs.length; ++i) point = point.add(pairs[i].pub);
15978
15482
  if (point.isInfinity()) return 2
15979
15483
 
15980
- savePublicKey(output, point);
15484
+ savePublicKey(output, point);
15485
+
15486
+ return 0
15487
+ },
15488
+
15489
+ publicKeyTweakAdd (output, pubkey, tweak) {
15490
+ const pair = loadPublicKey(pubkey);
15491
+ if (pair === null) return 1
15492
+
15493
+ tweak = new BN(tweak);
15494
+ if (tweak.cmp(ecparams.n) >= 0) return 2
15495
+
15496
+ const point = pair.getPublic().add(ecparams.g.mul(tweak));
15497
+ if (point.isInfinity()) return 2
15498
+
15499
+ savePublicKey(output, point);
15500
+
15501
+ return 0
15502
+ },
15503
+
15504
+ publicKeyTweakMul (output, pubkey, tweak) {
15505
+ const pair = loadPublicKey(pubkey);
15506
+ if (pair === null) return 1
15507
+
15508
+ tweak = new BN(tweak);
15509
+ if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2
15510
+
15511
+ const point = pair.getPublic().mul(tweak);
15512
+ savePublicKey(output, point);
15513
+
15514
+ return 0
15515
+ },
15516
+
15517
+ signatureNormalize (sig) {
15518
+ const r = new BN(sig.subarray(0, 32));
15519
+ const s = new BN(sig.subarray(32, 64));
15520
+ if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1
15521
+
15522
+ if (s.cmp(ec.nh) === 1) {
15523
+ sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32);
15524
+ }
15525
+
15526
+ return 0
15527
+ },
15528
+
15529
+ // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
15530
+ // Adapted for Uint8Array instead Buffer
15531
+ signatureExport (obj, sig) {
15532
+ const sigR = sig.subarray(0, 32);
15533
+ const sigS = sig.subarray(32, 64);
15534
+ if (new BN(sigR).cmp(ecparams.n) >= 0) return 1
15535
+ if (new BN(sigS).cmp(ecparams.n) >= 0) return 1
15536
+
15537
+ const { output } = obj;
15538
+
15539
+ // Prepare R
15540
+ let r = output.subarray(4, 4 + 33);
15541
+ r[0] = 0x00;
15542
+ r.set(sigR, 1);
15543
+
15544
+ let lenR = 33;
15545
+ let posR = 0;
15546
+ for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
15547
+
15548
+ r = r.subarray(posR);
15549
+ if (r[0] & 0x80) return 1
15550
+ if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1
15551
+
15552
+ // Prepare S
15553
+ let s = output.subarray(6 + 33, 6 + 33 + 33);
15554
+ s[0] = 0x00;
15555
+ s.set(sigS, 1);
15556
+
15557
+ let lenS = 33;
15558
+ let posS = 0;
15559
+ for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
15560
+
15561
+ s = s.subarray(posS);
15562
+ if (s[0] & 0x80) return 1
15563
+ if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1
15564
+
15565
+ // Set output length for return
15566
+ obj.outputlen = 6 + lenR + lenS;
15567
+
15568
+ // Output in specified format
15569
+ // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15570
+ output[0] = 0x30;
15571
+ output[1] = obj.outputlen - 2;
15572
+ output[2] = 0x02;
15573
+ output[3] = r.length;
15574
+ output.set(r, 4);
15575
+ output[4 + lenR] = 0x02;
15576
+ output[5 + lenR] = s.length;
15577
+ output.set(s, 6 + lenR);
15578
+
15579
+ return 0
15580
+ },
15581
+
15582
+ // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
15583
+ // Adapted for Uint8Array instead Buffer
15584
+ signatureImport (output, sig) {
15585
+ if (sig.length < 8) return 1
15586
+ if (sig.length > 72) return 1
15587
+ if (sig[0] !== 0x30) return 1
15588
+ if (sig[1] !== sig.length - 2) return 1
15589
+ if (sig[2] !== 0x02) return 1
15590
+
15591
+ const lenR = sig[3];
15592
+ if (lenR === 0) return 1
15593
+ if (5 + lenR >= sig.length) return 1
15594
+ if (sig[4 + lenR] !== 0x02) return 1
15595
+
15596
+ const lenS = sig[5 + lenR];
15597
+ if (lenS === 0) return 1
15598
+ if ((6 + lenR + lenS) !== sig.length) return 1
15599
+
15600
+ if (sig[4] & 0x80) return 1
15601
+ if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1
15602
+
15603
+ if (sig[lenR + 6] & 0x80) return 1
15604
+ if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1
15605
+
15606
+ let sigR = sig.subarray(4, 4 + lenR);
15607
+ if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1);
15608
+ if (sigR.length > 32) return 1
15609
+
15610
+ let sigS = sig.subarray(6 + lenR);
15611
+ if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1);
15612
+ if (sigS.length > 32) throw new Error('S length is too long')
15613
+
15614
+ let r = new BN(sigR);
15615
+ if (r.cmp(ecparams.n) >= 0) r = new BN(0);
15616
+
15617
+ let s = new BN(sig.subarray(6 + lenR));
15618
+ if (s.cmp(ecparams.n) >= 0) s = new BN(0);
15619
+
15620
+ output.set(r.toArrayLike(Uint8Array, 'be', 32), 0);
15621
+ output.set(s.toArrayLike(Uint8Array, 'be', 32), 32);
15622
+
15623
+ return 0
15624
+ },
15625
+
15626
+ ecdsaSign (obj, message, seckey, data, noncefn) {
15627
+ if (noncefn) {
15628
+ const _noncefn = noncefn;
15629
+ noncefn = (counter) => {
15630
+ const nonce = _noncefn(message, seckey, null, data, counter);
15631
+
15632
+ const isValid = nonce instanceof Uint8Array && nonce.length === 32;
15633
+ if (!isValid) throw new Error('This is the way')
15634
+
15635
+ return new BN(nonce)
15636
+ };
15637
+ }
15638
+
15639
+ const d = new BN(seckey);
15640
+ if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1
15641
+
15642
+ let sig;
15643
+ try {
15644
+ sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data });
15645
+ } catch (err) {
15646
+ return 1
15647
+ }
15648
+
15649
+ obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0);
15650
+ obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32);
15651
+ obj.recid = sig.recoveryParam;
15981
15652
 
15982
15653
  return 0
15983
15654
  },
15984
15655
 
15985
- publicKeyTweakAdd (output, pubkey, tweak) {
15986
- const pair = loadPublicKey(pubkey);
15987
- if (pair === null) return 1
15988
-
15989
- tweak = new BN(tweak);
15990
- if (tweak.cmp(ecparams.n) >= 0) return 2
15656
+ ecdsaVerify (sig, msg32, pubkey) {
15657
+ const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) };
15991
15658
 
15992
- const point = pair.getPublic().add(ecparams.g.mul(tweak));
15993
- if (point.isInfinity()) return 2
15659
+ const sigr = new BN(sigObj.r);
15660
+ const sigs = new BN(sigObj.s);
15661
+ if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
15662
+ if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3
15994
15663
 
15995
- savePublicKey(output, point);
15664
+ const pair = loadPublicKey(pubkey);
15665
+ if (pair === null) return 2
15996
15666
 
15997
- return 0
15667
+ const point = pair.getPublic();
15668
+ const isValid = ec.verify(msg32, sigObj, point);
15669
+ return isValid ? 0 : 3
15998
15670
  },
15999
15671
 
16000
- publicKeyTweakMul (output, pubkey, tweak) {
16001
- const pair = loadPublicKey(pubkey);
16002
- if (pair === null) return 1
15672
+ ecdsaRecover (output, sig, recid, msg32) {
15673
+ const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) };
16003
15674
 
16004
- tweak = new BN(tweak);
16005
- if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2
15675
+ const sigr = new BN(sigObj.r);
15676
+ const sigs = new BN(sigObj.s);
15677
+ if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
15678
+
15679
+ if (sigr.isZero() || sigs.isZero()) return 2
15680
+
15681
+ // Can throw `throw new Error('Unable to find sencond key candinate');`
15682
+ let point;
15683
+ try {
15684
+ point = ec.recoverPubKey(msg32, sigObj, recid);
15685
+ } catch (err) {
15686
+ return 2
15687
+ }
16006
15688
 
16007
- const point = pair.getPublic().mul(tweak);
16008
15689
  savePublicKey(output, point);
16009
15690
 
16010
15691
  return 0
16011
15692
  },
16012
15693
 
16013
- signatureNormalize (sig) {
16014
- const r = new BN(sig.subarray(0, 32));
16015
- const s = new BN(sig.subarray(32, 64));
16016
- if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1
15694
+ ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {
15695
+ const pair = loadPublicKey(pubkey);
15696
+ if (pair === null) return 1
16017
15697
 
16018
- if (s.cmp(ec.nh) === 1) {
16019
- sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32);
16020
- }
15698
+ const scalar = new BN(seckey);
15699
+ if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2
16021
15700
 
16022
- return 0
16023
- },
15701
+ const point = pair.getPublic().mul(scalar);
16024
15702
 
16025
- // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
16026
- // Adapted for Uint8Array instead Buffer
16027
- signatureExport (obj, sig) {
16028
- const sigR = sig.subarray(0, 32);
16029
- const sigS = sig.subarray(32, 64);
16030
- if (new BN(sigR).cmp(ecparams.n) >= 0) return 1
16031
- if (new BN(sigS).cmp(ecparams.n) >= 0) return 1
15703
+ if (hashfn === undefined) {
15704
+ const data = point.encode(null, true);
15705
+ const sha256 = ec.hash().update(data).digest();
15706
+ for (let i = 0; i < 32; ++i) output[i] = sha256[i];
15707
+ } else {
15708
+ if (!xbuf) xbuf = new Uint8Array(32);
15709
+ const x = point.getX().toArray('be', 32);
15710
+ for (let i = 0; i < 32; ++i) xbuf[i] = x[i];
16032
15711
 
16033
- const { output } = obj;
15712
+ if (!ybuf) ybuf = new Uint8Array(32);
15713
+ const y = point.getY().toArray('be', 32);
15714
+ for (let i = 0; i < 32; ++i) ybuf[i] = y[i];
16034
15715
 
16035
- // Prepare R
16036
- let r = output.subarray(4, 4 + 33);
16037
- r[0] = 0x00;
16038
- r.set(sigR, 1);
15716
+ const hash = hashfn(xbuf, ybuf, data);
16039
15717
 
16040
- let lenR = 33;
16041
- let posR = 0;
16042
- for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
15718
+ const isValid = hash instanceof Uint8Array && hash.length === output.length;
15719
+ if (!isValid) return 2
16043
15720
 
16044
- r = r.subarray(posR);
16045
- if (r[0] & 0x80) return 1
16046
- if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1
15721
+ output.set(hash);
15722
+ }
16047
15723
 
16048
- // Prepare S
16049
- let s = output.subarray(6 + 33, 6 + 33 + 33);
16050
- s[0] = 0x00;
16051
- s.set(sigS, 1);
15724
+ return 0
15725
+ }
15726
+ };
16052
15727
 
16053
- let lenS = 33;
16054
- let posS = 0;
16055
- for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
15728
+ var elliptic = lib(elliptic$1);
16056
15729
 
16057
- s = s.subarray(posS);
16058
- if (s[0] & 0x80) return 1
16059
- if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1
15730
+ var secp256k1 = /*@__PURE__*/getDefaultExportFromCjs(elliptic);
16060
15731
 
16061
- // Set output length for return
16062
- obj.outputlen = 6 + lenR + lenS;
15732
+ const leofcoinOlivia = {
15733
+ messagePrefix: '\u0019Leofcoin Signed Message:',
15734
+ version: 1,
15735
+ pubKeyHash: 0x73,
15736
+ scriptHash: 0x76,
15737
+ multiTxHash: 0x8b4125,
15738
+ payments: {
15739
+ version: 0,
15740
+ unspent: 0x1fa443d7 // ounsp
15741
+ },
15742
+ wif: 0x7D,
15743
+ multiCodec: 0x7c4,
15744
+ bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
15745
+ };
15746
+ const bitcoinTestnet = {
15747
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
15748
+ version: 1,
15749
+ bech32: 'tb',
15750
+ pubKeyHash: 0x6f,
15751
+ scriptHash: 0xc4,
15752
+ wif: 0xef,
15753
+ bip32: {
15754
+ public: 0x043587cf,
15755
+ private: 0x04358394
15756
+ },
15757
+ multiCodec: 0
15758
+ };
15759
+ var testnets = {
15760
+ 'leofcoin:olivia': leofcoinOlivia,
15761
+ 'bitcoin:testnet': bitcoinTestnet
15762
+ };
16063
15763
 
16064
- // Output in specified format
16065
- // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
16066
- output[0] = 0x30;
16067
- output[1] = obj.outputlen - 2;
16068
- output[2] = 0x02;
16069
- output[3] = r.length;
16070
- output.set(r, 4);
16071
- output[4 + lenR] = 0x02;
16072
- output[5 + lenR] = s.length;
16073
- output.set(s, 6 + lenR);
15764
+ // https://en.bitcoin.it/wiki/List_of_address_prefixes
15765
+ // usage:
15766
+ // networks['bitcoin']['testnet']
15767
+ // networks.bitcoin.testnet
15768
+ /**
15769
+ * Main network
15770
+ * @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
15771
+ */
15772
+ const leofcoin = {
15773
+ messagePrefix: '\u0019Leofcoin Signed Message:',
15774
+ version: 1,
15775
+ pubKeyHash: 0x30,
15776
+ scriptHash: 0x37,
15777
+ multiTxHash: 0x3adeed,
15778
+ payments: {
15779
+ version: 0,
15780
+ unspent: 0x0d6e0327 // Lunsp
15781
+ },
15782
+ coin_type: 640,
15783
+ wif: 0x3F,
15784
+ multiCodec: 0x3c4,
15785
+ bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
15786
+ testnet: testnets['leofcoin:olivia']
15787
+ };
15788
+ const bitcoin = {
15789
+ messagePrefix: '\x18Bitcoin Signed Message:\n',
15790
+ version: 1,
15791
+ bech32: 'bc',
15792
+ pubKeyHash: 0x00,
15793
+ multiCodec: 0x00,
15794
+ scriptHash: 0x05,
15795
+ wif: 0x80,
15796
+ coin_type: 0,
15797
+ bip32: {
15798
+ public: 0x0488b21e, private: 0x0488ade4
15799
+ },
15800
+ testnet: testnets['bitcoin:testnet']
15801
+ };
15802
+ const litecoin = {
15803
+ messagePrefix: '\x19Litecoin Signed Message:\n',
15804
+ version: 1,
15805
+ pubKeyHash: 0x30,
15806
+ scriptHash: 0x32,
15807
+ wif: 0xb0,
15808
+ bip32: {
15809
+ public: 0x019da462,
15810
+ private: 0x019d9cfe
15811
+ },
15812
+ bech32: '',
15813
+ multiCodec: 0
15814
+ };
15815
+ const ethereum = {
15816
+ messagePrefix: '\x19Ethereum Signed Message:\n',
15817
+ version: 1,
15818
+ pubKeyHash: 0x30,
15819
+ scriptHash: 0x32,
15820
+ bip32: {
15821
+ private: 0x0488ADE4, public: 0x0488B21E
15822
+ },
15823
+ coin_type: 60,
15824
+ wif: 0x45,
15825
+ multiCodec: 0x3c5
15826
+ };
15827
+ /**
15828
+ * Our & supported networks
15829
+ * @return {leofcoin, olivia}
15830
+ */
15831
+ var networks = {
15832
+ leofcoin,
15833
+ bitcoin,
15834
+ litecoin,
15835
+ ethereum
15836
+ };
16074
15837
 
16075
- return 0
16076
- },
15838
+ /*!
15839
+ * hash-wasm (https://www.npmjs.com/package/hash-wasm)
15840
+ * (c) Dani Biro
15841
+ * @license MIT
15842
+ */
16077
15843
 
16078
- // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js
16079
- // Adapted for Uint8Array instead Buffer
16080
- signatureImport (output, sig) {
16081
- if (sig.length < 8) return 1
16082
- if (sig.length > 72) return 1
16083
- if (sig[0] !== 0x30) return 1
16084
- if (sig[1] !== sig.length - 2) return 1
16085
- if (sig[2] !== 0x02) return 1
15844
+ /******************************************************************************
15845
+ Copyright (c) Microsoft Corporation.
15846
+
15847
+ Permission to use, copy, modify, and/or distribute this software for any
15848
+ purpose with or without fee is hereby granted.
15849
+
15850
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
15851
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15852
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
15853
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15854
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
15855
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15856
+ PERFORMANCE OF THIS SOFTWARE.
15857
+ ***************************************************************************** */
15858
+ /* global Reflect, Promise, SuppressedError, Symbol */
15859
+
15860
+
15861
+ function __awaiter(thisArg, _arguments, P, generator) {
15862
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15863
+ return new (P || (P = Promise))(function (resolve, reject) {
15864
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15865
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15866
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15867
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15868
+ });
15869
+ }
15870
+
15871
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
15872
+ var e = new Error(message);
15873
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
15874
+ };
16086
15875
 
16087
- const lenR = sig[3];
16088
- if (lenR === 0) return 1
16089
- if (5 + lenR >= sig.length) return 1
16090
- if (sig[4 + lenR] !== 0x02) return 1
15876
+ class Mutex {
15877
+ constructor() {
15878
+ this.mutex = Promise.resolve();
15879
+ }
15880
+ lock() {
15881
+ let begin = () => { };
15882
+ this.mutex = this.mutex.then(() => new Promise(begin));
15883
+ return new Promise((res) => {
15884
+ begin = res;
15885
+ });
15886
+ }
15887
+ dispatch(fn) {
15888
+ return __awaiter(this, void 0, void 0, function* () {
15889
+ const unlock = yield this.lock();
15890
+ try {
15891
+ return yield Promise.resolve(fn());
15892
+ }
15893
+ finally {
15894
+ unlock();
15895
+ }
15896
+ });
15897
+ }
15898
+ }
16091
15899
 
16092
- const lenS = sig[5 + lenR];
16093
- if (lenS === 0) return 1
16094
- if ((6 + lenR + lenS) !== sig.length) return 1
15900
+ /* eslint-disable import/prefer-default-export */
15901
+ /* eslint-disable no-bitwise */
15902
+ var _a;
15903
+ function getGlobal() {
15904
+ if (typeof globalThis !== 'undefined')
15905
+ return globalThis;
15906
+ // eslint-disable-next-line no-restricted-globals
15907
+ if (typeof self !== 'undefined')
15908
+ return self;
15909
+ if (typeof window !== 'undefined')
15910
+ return window;
15911
+ return global;
15912
+ }
15913
+ const globalObject = getGlobal();
15914
+ const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
15915
+ const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
15916
+ function hexCharCodesToInt(a, b) {
15917
+ return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
15918
+ }
15919
+ function writeHexToUInt8(buf, str) {
15920
+ const size = str.length >> 1;
15921
+ for (let i = 0; i < size; i++) {
15922
+ const index = i << 1;
15923
+ buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
15924
+ }
15925
+ }
15926
+ function hexStringEqualsUInt8(str, buf) {
15927
+ if (str.length !== buf.length * 2) {
15928
+ return false;
15929
+ }
15930
+ for (let i = 0; i < buf.length; i++) {
15931
+ const strIndex = i << 1;
15932
+ if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
15933
+ return false;
15934
+ }
15935
+ }
15936
+ return true;
15937
+ }
15938
+ const alpha = 'a'.charCodeAt(0) - 10;
15939
+ const digit = '0'.charCodeAt(0);
15940
+ function getDigestHex(tmpBuffer, input, hashLength) {
15941
+ let p = 0;
15942
+ /* eslint-disable no-plusplus */
15943
+ for (let i = 0; i < hashLength; i++) {
15944
+ let nibble = input[i] >>> 4;
15945
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
15946
+ nibble = input[i] & 0xF;
15947
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
15948
+ }
15949
+ /* eslint-enable no-plusplus */
15950
+ return String.fromCharCode.apply(null, tmpBuffer);
15951
+ }
15952
+ const getUInt8Buffer = nodeBuffer !== null
15953
+ ? (data) => {
15954
+ if (typeof data === 'string') {
15955
+ const buf = nodeBuffer.from(data, 'utf8');
15956
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
15957
+ }
15958
+ if (nodeBuffer.isBuffer(data)) {
15959
+ return new Uint8Array(data.buffer, data.byteOffset, data.length);
15960
+ }
15961
+ if (ArrayBuffer.isView(data)) {
15962
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
15963
+ }
15964
+ throw new Error('Invalid data type!');
15965
+ }
15966
+ : (data) => {
15967
+ if (typeof data === 'string') {
15968
+ return textEncoder.encode(data);
15969
+ }
15970
+ if (ArrayBuffer.isView(data)) {
15971
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
15972
+ }
15973
+ throw new Error('Invalid data type!');
15974
+ };
15975
+ const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
15976
+ const base64Lookup = new Uint8Array(256);
15977
+ for (let i = 0; i < base64Chars.length; i++) {
15978
+ base64Lookup[base64Chars.charCodeAt(i)] = i;
15979
+ }
15980
+ function getDecodeBase64Length(data) {
15981
+ let bufferLength = Math.floor(data.length * 0.75);
15982
+ const len = data.length;
15983
+ if (data[len - 1] === '=') {
15984
+ bufferLength -= 1;
15985
+ if (data[len - 2] === '=') {
15986
+ bufferLength -= 1;
15987
+ }
15988
+ }
15989
+ return bufferLength;
15990
+ }
15991
+ function decodeBase64(data) {
15992
+ const bufferLength = getDecodeBase64Length(data);
15993
+ const len = data.length;
15994
+ const bytes = new Uint8Array(bufferLength);
15995
+ let p = 0;
15996
+ for (let i = 0; i < len; i += 4) {
15997
+ const encoded1 = base64Lookup[data.charCodeAt(i)];
15998
+ const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
15999
+ const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
16000
+ const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
16001
+ bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
16002
+ p += 1;
16003
+ bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
16004
+ p += 1;
16005
+ bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
16006
+ p += 1;
16007
+ }
16008
+ return bytes;
16009
+ }
16095
16010
 
16096
- if (sig[4] & 0x80) return 1
16097
- if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1
16011
+ const MAX_HEAP = 16 * 1024;
16012
+ const WASM_FUNC_HASH_LENGTH = 4;
16013
+ const wasmMutex = new Mutex();
16014
+ const wasmModuleCache = new Map();
16015
+ function WASMInterface(binary, hashLength) {
16016
+ return __awaiter(this, void 0, void 0, function* () {
16017
+ let wasmInstance = null;
16018
+ let memoryView = null;
16019
+ let initialized = false;
16020
+ if (typeof WebAssembly === 'undefined') {
16021
+ throw new Error('WebAssembly is not supported in this environment!');
16022
+ }
16023
+ const writeMemory = (data, offset = 0) => {
16024
+ memoryView.set(data, offset);
16025
+ };
16026
+ const getMemory = () => memoryView;
16027
+ const getExports = () => wasmInstance.exports;
16028
+ const setMemorySize = (totalSize) => {
16029
+ wasmInstance.exports.Hash_SetMemorySize(totalSize);
16030
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
16031
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
16032
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
16033
+ };
16034
+ const getStateSize = () => {
16035
+ const view = new DataView(wasmInstance.exports.memory.buffer);
16036
+ const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
16037
+ return stateSize;
16038
+ };
16039
+ const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
16040
+ if (!wasmModuleCache.has(binary.name)) {
16041
+ const asm = decodeBase64(binary.data);
16042
+ const promise = WebAssembly.compile(asm);
16043
+ wasmModuleCache.set(binary.name, promise);
16044
+ }
16045
+ const module = yield wasmModuleCache.get(binary.name);
16046
+ wasmInstance = yield WebAssembly.instantiate(module, {
16047
+ // env: {
16048
+ // emscripten_memcpy_big: (dest, src, num) => {
16049
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
16050
+ // const memView = new Uint8Array(memoryBuffer, 0);
16051
+ // memView.set(memView.subarray(src, src + num), dest);
16052
+ // },
16053
+ // print_memory: (offset, len) => {
16054
+ // const memoryBuffer = wasmInstance.exports.memory.buffer;
16055
+ // const memView = new Uint8Array(memoryBuffer, 0);
16056
+ // console.log('print_int32', memView.subarray(offset, offset + len));
16057
+ // },
16058
+ // },
16059
+ });
16060
+ // wasmInstance.exports._start();
16061
+ }));
16062
+ const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
16063
+ if (!wasmInstance) {
16064
+ yield loadWASMPromise;
16065
+ }
16066
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
16067
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
16068
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
16069
+ });
16070
+ const init = (bits = null) => {
16071
+ initialized = true;
16072
+ wasmInstance.exports.Hash_Init(bits);
16073
+ };
16074
+ const updateUInt8Array = (data) => {
16075
+ let read = 0;
16076
+ while (read < data.length) {
16077
+ const chunk = data.subarray(read, read + MAX_HEAP);
16078
+ read += chunk.length;
16079
+ memoryView.set(chunk);
16080
+ wasmInstance.exports.Hash_Update(chunk.length);
16081
+ }
16082
+ };
16083
+ const update = (data) => {
16084
+ if (!initialized) {
16085
+ throw new Error('update() called before init()');
16086
+ }
16087
+ const Uint8Buffer = getUInt8Buffer(data);
16088
+ updateUInt8Array(Uint8Buffer);
16089
+ };
16090
+ const digestChars = new Uint8Array(hashLength * 2);
16091
+ const digest = (outputType, padding = null) => {
16092
+ if (!initialized) {
16093
+ throw new Error('digest() called before init()');
16094
+ }
16095
+ initialized = false;
16096
+ wasmInstance.exports.Hash_Final(padding);
16097
+ if (outputType === 'binary') {
16098
+ // the data is copied to allow GC of the original memory object
16099
+ return memoryView.slice(0, hashLength);
16100
+ }
16101
+ return getDigestHex(digestChars, memoryView, hashLength);
16102
+ };
16103
+ const save = () => {
16104
+ if (!initialized) {
16105
+ throw new Error('save() can only be called after init() and before digest()');
16106
+ }
16107
+ const stateOffset = wasmInstance.exports.Hash_GetState();
16108
+ const stateLength = getStateSize();
16109
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
16110
+ const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
16111
+ // prefix is 4 bytes from SHA1 hash of the WASM binary
16112
+ // it is used to detect incompatible internal states between different versions of hash-wasm
16113
+ const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
16114
+ writeHexToUInt8(prefixedState, binary.hash);
16115
+ prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
16116
+ return prefixedState;
16117
+ };
16118
+ const load = (state) => {
16119
+ if (!(state instanceof Uint8Array)) {
16120
+ throw new Error('load() expects an Uint8Array generated by save()');
16121
+ }
16122
+ const stateOffset = wasmInstance.exports.Hash_GetState();
16123
+ const stateLength = getStateSize();
16124
+ const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
16125
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
16126
+ if (state.length !== overallLength) {
16127
+ throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
16128
+ }
16129
+ if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
16130
+ throw new Error('This state was written by an incompatible hash implementation');
16131
+ }
16132
+ const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
16133
+ new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
16134
+ initialized = true;
16135
+ };
16136
+ const isDataShort = (data) => {
16137
+ if (typeof data === 'string') {
16138
+ // worst case is 4 bytes / char
16139
+ return data.length < MAX_HEAP / 4;
16140
+ }
16141
+ return data.byteLength < MAX_HEAP;
16142
+ };
16143
+ let canSimplify = isDataShort;
16144
+ switch (binary.name) {
16145
+ case 'argon2':
16146
+ case 'scrypt':
16147
+ canSimplify = () => true;
16148
+ break;
16149
+ case 'blake2b':
16150
+ case 'blake2s':
16151
+ // if there is a key at blake2 then cannot simplify
16152
+ canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
16153
+ break;
16154
+ case 'blake3':
16155
+ // if there is a key at blake3 then cannot simplify
16156
+ canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
16157
+ break;
16158
+ case 'xxhash64': // cannot simplify
16159
+ case 'xxhash3':
16160
+ case 'xxhash128':
16161
+ canSimplify = () => false;
16162
+ break;
16163
+ }
16164
+ // shorthand for (init + update + digest) for better performance
16165
+ const calculate = (data, initParam = null, digestParam = null) => {
16166
+ if (!canSimplify(data, initParam)) {
16167
+ init(initParam);
16168
+ update(data);
16169
+ return digest('hex', digestParam);
16170
+ }
16171
+ const buffer = getUInt8Buffer(data);
16172
+ memoryView.set(buffer);
16173
+ wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
16174
+ return getDigestHex(digestChars, memoryView, hashLength);
16175
+ };
16176
+ yield setupInterface();
16177
+ return {
16178
+ getMemory,
16179
+ writeMemory,
16180
+ getExports,
16181
+ setMemorySize,
16182
+ init,
16183
+ update,
16184
+ digest,
16185
+ save,
16186
+ load,
16187
+ calculate,
16188
+ hashLength,
16189
+ };
16190
+ });
16191
+ }
16098
16192
 
16099
- if (sig[lenR + 6] & 0x80) return 1
16100
- if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1
16193
+ new Mutex();
16101
16194
 
16102
- let sigR = sig.subarray(4, 4 + lenR);
16103
- if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1);
16104
- if (sigR.length > 32) return 1
16195
+ new Mutex();
16105
16196
 
16106
- let sigS = sig.subarray(6 + lenR);
16107
- if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1);
16108
- if (sigS.length > 32) throw new Error('S length is too long')
16197
+ new Mutex();
16109
16198
 
16110
- let r = new BN(sigR);
16111
- if (r.cmp(ecparams.n) >= 0) r = new BN(0);
16199
+ new Mutex();
16112
16200
 
16113
- let s = new BN(sig.subarray(6 + lenR));
16114
- if (s.cmp(ecparams.n) >= 0) s = new BN(0);
16201
+ new Mutex();
16115
16202
 
16116
- output.set(r.toArrayLike(Uint8Array, 'be', 32), 0);
16117
- output.set(s.toArrayLike(Uint8Array, 'be', 32), 32);
16203
+ new Mutex();
16118
16204
 
16119
- return 0
16120
- },
16205
+ new Mutex();
16121
16206
 
16122
- ecdsaSign (obj, message, seckey, data, noncefn) {
16123
- if (noncefn) {
16124
- const _noncefn = noncefn;
16125
- noncefn = (counter) => {
16126
- const nonce = _noncefn(message, seckey, null, data, counter);
16207
+ new Mutex();
16127
16208
 
16128
- const isValid = nonce instanceof Uint8Array && nonce.length === 32;
16129
- if (!isValid) throw new Error('This is the way')
16209
+ new Mutex();
16130
16210
 
16131
- return new BN(nonce)
16132
- };
16133
- }
16211
+ var name$b = "sha3";
16212
+ 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=";
16213
+ var hash$b = "f2f6f5b2";
16214
+ var wasmJson$b = {
16215
+ name: name$b,
16216
+ data: data$b,
16217
+ hash: hash$b
16218
+ };
16134
16219
 
16135
- const d = new BN(seckey);
16136
- if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1
16220
+ new Mutex();
16137
16221
 
16138
- let sig;
16139
- try {
16140
- sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data });
16141
- } catch (err) {
16142
- return 1
16222
+ new Mutex();
16223
+ function validateBits(bits) {
16224
+ if (![224, 256, 384, 512].includes(bits)) {
16225
+ return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
16143
16226
  }
16144
-
16145
- obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0);
16146
- obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32);
16147
- obj.recid = sig.recoveryParam;
16148
-
16149
- return 0
16150
- },
16151
-
16152
- ecdsaVerify (sig, msg32, pubkey) {
16153
- const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) };
16154
-
16155
- const sigr = new BN(sigObj.r);
16156
- const sigs = new BN(sigObj.s);
16157
- if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
16158
- if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3
16159
-
16160
- const pair = loadPublicKey(pubkey);
16161
- if (pair === null) return 2
16162
-
16163
- const point = pair.getPublic();
16164
- const isValid = ec.verify(msg32, sigObj, point);
16165
- return isValid ? 0 : 3
16166
- },
16167
-
16168
- ecdsaRecover (output, sig, recid, msg32) {
16169
- const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) };
16170
-
16171
- const sigr = new BN(sigObj.r);
16172
- const sigs = new BN(sigObj.s);
16173
- if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1
16174
-
16175
- if (sigr.isZero() || sigs.isZero()) return 2
16176
-
16177
- // Can throw `throw new Error('Unable to find sencond key candinate');`
16178
- let point;
16179
- try {
16180
- point = ec.recoverPubKey(msg32, sigObj, recid);
16181
- } catch (err) {
16182
- return 2
16227
+ return null;
16228
+ }
16229
+ /**
16230
+ * Creates a new Keccak hash instance
16231
+ * @param bits Number of output bits. Valid values: 224, 256, 384, 512
16232
+ */
16233
+ function createKeccak(bits = 512) {
16234
+ if (validateBits(bits)) {
16235
+ return Promise.reject(validateBits(bits));
16183
16236
  }
16237
+ const outputSize = bits / 8;
16238
+ return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
16239
+ wasm.init(bits);
16240
+ const obj = {
16241
+ init: () => { wasm.init(bits); return obj; },
16242
+ update: (data) => { wasm.update(data); return obj; },
16243
+ digest: (outputType) => wasm.digest(outputType, 0x01),
16244
+ save: () => wasm.save(),
16245
+ load: (data) => { wasm.load(data); return obj; },
16246
+ blockSize: 200 - 2 * outputSize,
16247
+ digestSize: outputSize,
16248
+ };
16249
+ return obj;
16250
+ });
16251
+ }
16184
16252
 
16185
- savePublicKey(output, point);
16186
-
16187
- return 0
16188
- },
16189
-
16190
- ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {
16191
- const pair = loadPublicKey(pubkey);
16192
- if (pair === null) return 1
16193
-
16194
- const scalar = new BN(seckey);
16195
- if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2
16196
-
16197
- const point = pair.getPublic().mul(scalar);
16253
+ new Mutex();
16198
16254
 
16199
- if (hashfn === undefined) {
16200
- const data = point.encode(null, true);
16201
- const sha256 = ec.hash().update(data).digest();
16202
- for (let i = 0; i < 32; ++i) output[i] = sha256[i];
16203
- } else {
16204
- if (!xbuf) xbuf = new Uint8Array(32);
16205
- const x = point.getX().toArray('be', 32);
16206
- for (let i = 0; i < 32; ++i) xbuf[i] = x[i];
16255
+ new Mutex();
16207
16256
 
16208
- if (!ybuf) ybuf = new Uint8Array(32);
16209
- const y = point.getY().toArray('be', 32);
16210
- for (let i = 0; i < 32; ++i) ybuf[i] = y[i];
16257
+ var name$9 = "sha512";
16258
+ var data$9 = "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";
16259
+ var hash$9 = "cdd57f6a";
16260
+ var wasmJson$9 = {
16261
+ name: name$9,
16262
+ data: data$9,
16263
+ hash: hash$9
16264
+ };
16211
16265
 
16212
- const hash = hashfn(xbuf, ybuf, data);
16266
+ new Mutex();
16213
16267
 
16214
- const isValid = hash instanceof Uint8Array && hash.length === output.length;
16215
- if (!isValid) return 2
16268
+ new Mutex();
16269
+ /**
16270
+ * Creates a new SHA-2 (SHA-512) hash instance
16271
+ */
16272
+ function createSHA512() {
16273
+ return WASMInterface(wasmJson$9, 64).then((wasm) => {
16274
+ wasm.init(512);
16275
+ const obj = {
16276
+ init: () => { wasm.init(512); return obj; },
16277
+ update: (data) => { wasm.update(data); return obj; },
16278
+ digest: (outputType) => wasm.digest(outputType),
16279
+ save: () => wasm.save(),
16280
+ load: (data) => { wasm.load(data); return obj; },
16281
+ blockSize: 128,
16282
+ digestSize: 64,
16283
+ };
16284
+ return obj;
16285
+ });
16286
+ }
16216
16287
 
16217
- output.set(hash);
16218
- }
16288
+ new Mutex();
16219
16289
 
16220
- return 0
16221
- }
16222
- };
16290
+ new Mutex();
16223
16291
 
16224
- var elliptic = lib(elliptic$1);
16292
+ new Mutex();
16225
16293
 
16226
- var secp256k1 = /*@__PURE__*/getDefaultExportFromCjs(elliptic);
16294
+ new Mutex();
16227
16295
 
16228
- const leofcoinOlivia = {
16229
- messagePrefix: '\u0019Leofcoin Signed Message:',
16230
- version: 1,
16231
- pubKeyHash: 0x73,
16232
- scriptHash: 0x76,
16233
- multiTxHash: 0x8b4125,
16234
- payments: {
16235
- version: 0,
16236
- unspent: 0x1fa443d7 // ounsp
16237
- },
16238
- wif: 0x7D,
16239
- multiCodec: 0x7c4,
16240
- bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
16241
- };
16242
- const bitcoinTestnet = {
16243
- messagePrefix: '\x18Bitcoin Signed Message:\n',
16244
- version: 1,
16245
- bech32: 'tb',
16246
- pubKeyHash: 0x6f,
16247
- scriptHash: 0xc4,
16248
- wif: 0xef,
16249
- bip32: {
16250
- public: 0x043587cf,
16251
- private: 0x04358394
16252
- },
16253
- multiCodec: 0
16254
- };
16255
- var testnets = {
16256
- 'leofcoin:olivia': leofcoinOlivia,
16257
- 'bitcoin:testnet': bitcoinTestnet
16296
+ var name$4 = "ripemd160";
16297
+ var data$4 = "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";
16298
+ var hash$4 = "c089a7ca";
16299
+ var wasmJson$4 = {
16300
+ name: name$4,
16301
+ data: data$4,
16302
+ hash: hash$4
16258
16303
  };
16259
16304
 
16260
- // https://en.bitcoin.it/wiki/List_of_address_prefixes
16261
- // usage:
16262
- // networks['bitcoin']['testnet']
16263
- // networks.bitcoin.testnet
16305
+ new Mutex();
16264
16306
  /**
16265
- * Main network
16266
- * @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
16307
+ * Creates a new RIPEMD-160 hash instance
16267
16308
  */
16268
- const leofcoin = {
16269
- messagePrefix: '\u0019Leofcoin Signed Message:',
16270
- version: 1,
16271
- pubKeyHash: 0x30,
16272
- scriptHash: 0x37,
16273
- multiTxHash: 0x3adeed,
16274
- payments: {
16275
- version: 0,
16276
- unspent: 0x0d6e0327 // Lunsp
16277
- },
16278
- coin_type: 640,
16279
- wif: 0x3F,
16280
- multiCodec: 0x3c4,
16281
- bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
16282
- testnet: testnets['leofcoin:olivia']
16283
- };
16284
- const bitcoin = {
16285
- messagePrefix: '\x18Bitcoin Signed Message:\n',
16286
- version: 1,
16287
- bech32: 'bc',
16288
- pubKeyHash: 0x00,
16289
- multiCodec: 0x00,
16290
- scriptHash: 0x05,
16291
- wif: 0x80,
16292
- coin_type: 0,
16293
- bip32: {
16294
- public: 0x0488b21e, private: 0x0488ade4
16295
- },
16296
- testnet: testnets['bitcoin:testnet']
16297
- };
16298
- const litecoin = {
16299
- messagePrefix: '\x19Litecoin Signed Message:\n',
16300
- version: 1,
16301
- pubKeyHash: 0x30,
16302
- scriptHash: 0x32,
16303
- wif: 0xb0,
16304
- bip32: {
16305
- public: 0x019da462,
16306
- private: 0x019d9cfe
16307
- },
16308
- bech32: '',
16309
- multiCodec: 0
16310
- };
16311
- const ethereum = {
16312
- messagePrefix: '\x19Ethereum Signed Message:\n',
16313
- version: 1,
16314
- pubKeyHash: 0x30,
16315
- scriptHash: 0x32,
16316
- bip32: {
16317
- private: 0x0488ADE4, public: 0x0488B21E
16318
- },
16319
- coin_type: 60,
16320
- wif: 0x45,
16321
- multiCodec: 0x3c5
16322
- };
16309
+ function createRIPEMD160() {
16310
+ return WASMInterface(wasmJson$4, 20).then((wasm) => {
16311
+ wasm.init();
16312
+ const obj = {
16313
+ init: () => { wasm.init(); return obj; },
16314
+ update: (data) => { wasm.update(data); return obj; },
16315
+ digest: (outputType) => wasm.digest(outputType),
16316
+ save: () => wasm.save(),
16317
+ load: (data) => { wasm.load(data); return obj; },
16318
+ blockSize: 64,
16319
+ digestSize: 20,
16320
+ };
16321
+ return obj;
16322
+ });
16323
+ }
16324
+
16325
+ function calculateKeyBuffer(hasher, key) {
16326
+ const { blockSize } = hasher;
16327
+ const buf = getUInt8Buffer(key);
16328
+ if (buf.length > blockSize) {
16329
+ hasher.update(buf);
16330
+ const uintArr = hasher.digest('binary');
16331
+ hasher.init();
16332
+ return uintArr;
16333
+ }
16334
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
16335
+ }
16336
+ function calculateHmac(hasher, key) {
16337
+ hasher.init();
16338
+ const { blockSize } = hasher;
16339
+ const keyBuf = calculateKeyBuffer(hasher, key);
16340
+ const keyBuffer = new Uint8Array(blockSize);
16341
+ keyBuffer.set(keyBuf);
16342
+ const opad = new Uint8Array(blockSize);
16343
+ for (let i = 0; i < blockSize; i++) {
16344
+ const v = keyBuffer[i];
16345
+ opad[i] = v ^ 0x5C;
16346
+ keyBuffer[i] = v ^ 0x36;
16347
+ }
16348
+ hasher.update(keyBuffer);
16349
+ const obj = {
16350
+ init: () => {
16351
+ hasher.init();
16352
+ hasher.update(keyBuffer);
16353
+ return obj;
16354
+ },
16355
+ update: (data) => {
16356
+ hasher.update(data);
16357
+ return obj;
16358
+ },
16359
+ digest: ((outputType) => {
16360
+ const uintArr = hasher.digest('binary');
16361
+ hasher.init();
16362
+ hasher.update(opad);
16363
+ hasher.update(uintArr);
16364
+ return hasher.digest(outputType);
16365
+ }),
16366
+ save: () => {
16367
+ throw new Error('save() not supported');
16368
+ },
16369
+ load: () => {
16370
+ throw new Error('load() not supported');
16371
+ },
16372
+ blockSize: hasher.blockSize,
16373
+ digestSize: hasher.digestSize,
16374
+ };
16375
+ return obj;
16376
+ }
16323
16377
  /**
16324
- * Our & supported networks
16325
- * @return {leofcoin, olivia}
16378
+ * Calculates HMAC hash
16379
+ * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()
16380
+ * @param key Key (string, Buffer or TypedArray)
16326
16381
  */
16327
- var networks = {
16328
- leofcoin,
16329
- bitcoin,
16330
- litecoin,
16331
- ethereum
16332
- };
16382
+ function createHMAC(hash, key) {
16383
+ if (!hash || !hash.then) {
16384
+ throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), "key").');
16385
+ }
16386
+ return hash.then((hasher) => calculateHmac(hasher, key));
16387
+ }
16333
16388
 
16334
- const concatAndDoubleHash = async (input) => {
16335
- return new Uint8Array(await createDoubleHash(typedArrayConcat(input), 'SHA-256'));
16336
- };
16337
-
16338
- const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
16339
- if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
16340
- throw new TypeError('Expected Uint8Array');
16341
- }
16342
- const hash = await concatAndDoubleHash([
16343
- prefix,
16344
- source
16345
- ]);
16346
- const uint8Array = typedArrayConcat([
16347
- prefix,
16348
- source,
16349
- hash.subarray(0, 4)
16350
- ]);
16351
- if (hex)
16352
- return base58$1.encodeHex(uint8Array);
16353
- return base58$1.encode(uint8Array);
16354
- };
16355
- const decode$2 = async (string, hex) => {
16356
- let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
16357
- const prefix = uint8Array.subarray(0, 2);
16358
- const source = uint8Array.subarray(2, -4);
16359
- const hash = await concatAndDoubleHash([
16360
- prefix,
16361
- source
16362
- ]);
16363
- let index = 0;
16364
- const slice = uint8Array.subarray(-4);
16365
- for (const check of slice) {
16366
- if (check !== hash[index]) {
16367
- throw new Error('Invalid checksum');
16368
- }
16369
- index++;
16370
- }
16371
- return { prefix, data: source };
16372
- };
16373
- const isBase58check = (string, hex) => {
16374
- try {
16375
- hex ? decode$2(string, true) : decode$2(string);
16376
- return true;
16377
- }
16378
- catch (e) {
16379
- return false;
16380
- }
16381
- };
16382
- const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
16383
- const decodeHex = (string) => decode$2(string, true);
16384
- const isBase58checkHex = (string) => isBase58check(string, true);
16385
- var base58check = { encode: encode$2, decode: decode$2, encodeHex, decodeHex, isBase58check, isBase58checkHex };
16389
+ new Mutex();
16390
+
16391
+ new Mutex();
16386
16392
 
16387
16393
  const encode$1 = (version, privateKey, compressed) => {
16388
16394
  if (privateKey.length !== 32)
@@ -16429,6 +16435,7 @@ class HdNode {
16429
16435
  this.#privateKey = privateKey;
16430
16436
  this.#publicKey = publicKey;
16431
16437
  this.#chainCode = chainCode;
16438
+ // @ts-ignore
16432
16439
  this.#network = network || networks.leofcoin;
16433
16440
  this.#depth = depth;
16434
16441
  this.#index = index;
@@ -16503,7 +16510,7 @@ class HdNode {
16503
16510
  else {
16504
16511
  set.push(new Uint8Array(this.publicKey));
16505
16512
  }
16506
- return base58check$1.encode(index$7(set));
16513
+ return base58check.encode(index$7(set));
16507
16514
  }
16508
16515
  toWIF() {
16509
16516
  if (!this.#privateKey)
@@ -16577,24 +16584,31 @@ class HdNode {
16577
16584
  let index;
16578
16585
  if (indexString.slice(-1) === `'`) {
16579
16586
  index = parseInt(indexString.slice(0, -1), 10);
16587
+ // @ts-ignore
16580
16588
  prevHd = await prevHd.deriveHardened(index);
16581
16589
  }
16582
16590
  else {
16583
16591
  index = parseInt(indexString, 10);
16592
+ // @ts-ignore
16584
16593
  prevHd = await prevHd.derive(index);
16585
16594
  }
16586
16595
  }
16587
16596
  return prevHd;
16588
16597
  }
16589
16598
  async fromBase58(string, network) {
16590
- let buffer = (await base58check$1.decode(string)).data;
16599
+ let buffer = (await base58check.decode(string)).data;
16600
+ // @ts-ignore
16591
16601
  network = network || networks.leofcoin;
16592
- // 4 bytes: version bytes
16593
16602
  let [version, depth, parentFingerprint, index, chainCode, k, privateKey] = index$6(buffer);
16603
+ // @ts-ignore
16594
16604
  version = Number(new TextDecoder().decode(version));
16605
+ // @ts-ignore
16595
16606
  depth = Number(new TextDecoder().decode(depth));
16607
+ // @ts-ignore
16596
16608
  parentFingerprint = Number(new TextDecoder().decode(parentFingerprint));
16609
+ // @ts-ignore
16597
16610
  index = Number(new TextDecoder().decode(index));
16611
+ // @ts-ignore
16598
16612
  k = privateKey ? 0 : k;
16599
16613
  if (version !== network.bip32.private && version !== network.bip32.public)
16600
16614
  throw new TypeError('Invalid network version');
@@ -16698,7 +16712,7 @@ class HDWallet {
16698
16712
  return address;
16699
16713
  }
16700
16714
  leofcoinAddress() {
16701
- return base58check$1.encode(this.publicKey);
16715
+ return base58check.encode(this.publicKey);
16702
16716
  }
16703
16717
  get address() {
16704
16718
  return this.getAddressForCoin();
@@ -16720,7 +16734,7 @@ class HDWallet {
16720
16734
  // if (coin_type === 0) return this.bitcoinAddress()
16721
16735
  }
16722
16736
  get accountAddress() {
16723
- return this.ifNotLocked(async () => base58check$1.encode(this.hdnode.publicKey));
16737
+ return this.ifNotLocked(async () => base58check.encode(this.hdnode.publicKey));
16724
16738
  }
16725
16739
  get isTestnet() {
16726
16740
  return this.network.coin_type === 1;
@@ -16786,7 +16800,7 @@ class HDWallet {
16786
16800
  }
16787
16801
  async fromAddress(address, chainCode, network) {
16788
16802
  network = this.validateNetwork(network);
16789
- address = (await base58check$1.decode(address)).data;
16803
+ address = (await base58check.decode(address)).data;
16790
16804
  if (!chainCode || chainCode && !Buffer.isBuffer(chainCode))
16791
16805
  chainCode = address.slice(1);
16792
16806
  await this.defineHDNode(await (new HdNode()).fromPublicKey(address, chainCode, network));
@@ -17045,7 +17059,7 @@ class MultiHDNode extends HDWallet {
17045
17059
  super(network, hdnode);
17046
17060
  }
17047
17061
  get id() {
17048
- return base58check$1.encode(index$7([
17062
+ return base58check.encode(index$7([
17049
17063
  new TextEncoder().encode(this.version.toString()),
17050
17064
  this.account(0).hdnode.neutered.publicKey
17051
17065
  ]));
@@ -17054,18 +17068,18 @@ class MultiHDNode extends HDWallet {
17054
17068
  return this.toMultiWif();
17055
17069
  }
17056
17070
  async fromId(id) {
17057
- let buffer = (await base58check$1.decode(id)).data;
17071
+ let buffer = (await base58check.decode(id)).data;
17058
17072
  index.decode(buffer);
17059
17073
  buffer = buffer.slice(index.decode.bytes);
17060
17074
  this.fromPublicKey(buffer, null, this.networkName);
17061
17075
  }
17062
17076
  async import(password, encrypted) {
17063
- const { prefix, data } = await base58check$1.decode(encrypted);
17077
+ const { prefix, data } = await base58check.decode(encrypted);
17064
17078
  const decrypted = await decrypt(password, data);
17065
17079
  await this.fromMultiWif(decrypted);
17066
17080
  }
17067
17081
  async export(password) {
17068
- return base58check$1.encode(await encrypt(password, await this.toMultiWif()));
17082
+ return base58check.encode(await encrypt(password, await this.toMultiWif()));
17069
17083
  }
17070
17084
  async lock(password) {
17071
17085
  // todo redefine hdnode
@@ -17073,7 +17087,7 @@ class MultiHDNode extends HDWallet {
17073
17087
  this.locked = true;
17074
17088
  }
17075
17089
  async unlock(password) {
17076
- const { prefix, data } = await base58check$1.decode(this.#encrypted);
17090
+ const { prefix, data } = await base58check.decode(this.#encrypted);
17077
17091
  await decrypt(password, data);
17078
17092
  this.locked = false;
17079
17093
  }
@@ -17136,7 +17150,7 @@ class MultiWallet extends MultiHDNode {
17136
17150
  super(network, hdnode);
17137
17151
  }
17138
17152
  get id() {
17139
- return base58check$1.encode(index$7([
17153
+ return base58check.encode(index$7([
17140
17154
  new TextEncoder().encode(this.version.toString()),
17141
17155
  this.account(0).hdnode.neutered.publicKey
17142
17156
  ]));
@@ -20127,6 +20141,7 @@ class Identity {
20127
20141
  #wallet;
20128
20142
  network;
20129
20143
  id;
20144
+ selectedAccount;
20130
20145
  constructor(network) {
20131
20146
  this.network = network;
20132
20147
  }
@@ -20149,6 +20164,7 @@ class Identity {
20149
20164
  }
20150
20165
  }
20151
20166
  if (!password) {
20167
+ // @ts-ignore
20152
20168
  const importee = await import('./src/prompts/password.js');
20153
20169
  password = await importee.default();
20154
20170
  }
@@ -20157,17 +20173,17 @@ class Identity {
20157
20173
  const pub = await globalThis.accountStore.get('public');
20158
20174
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
20159
20175
  const selected = await globalThis.walletStore.get('selected-account');
20160
- globalThis.peernet.selectedAccount = new TextDecoder().decode(selected);
20176
+ this.selectedAccount = new TextDecoder().decode(selected);
20161
20177
  }
20162
20178
  else {
20163
- const importee = await import(/* webpackChunkName: "generate-account" */ './index-9c85cd32.js');
20179
+ const importee = await import(/* webpackChunkName: "generate-account" */ './index-8868bdd8.js');
20164
20180
  const { identity, accounts } = await importee.default(password, this.network);
20165
20181
  await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
20166
20182
  await globalThis.walletStore.put('version', String(1));
20167
20183
  await globalThis.walletStore.put('accounts', JSON.stringify(accounts));
20168
20184
  await globalThis.walletStore.put('selected-account', accounts[0][1]);
20169
20185
  await globalThis.walletStore.put('identity', JSON.stringify(identity));
20170
- globalThis.peernet.selectedAccount = accounts[0][1];
20186
+ this.selectedAccount = accounts[0][1];
20171
20187
  this.id = identity.walletId;
20172
20188
  }
20173
20189
  const identity = JSON.parse(new TextDecoder().decode(await globalThis.walletStore.get('identity')));
@@ -20175,6 +20191,10 @@ class Identity {
20175
20191
  const multiWIF = await decrypt(password, base58$1.decode(identity.multiWIF));
20176
20192
  await this.#wallet.fromMultiWif(multiWIF);
20177
20193
  }
20194
+ selectAccount(account) {
20195
+ this.selectedAccount = account;
20196
+ return walletStore.put('selected-account', account);
20197
+ }
20178
20198
  sign(hash) {
20179
20199
  return this.#wallet.sign(hash.subarray(0, 32));
20180
20200
  }
@@ -20195,7 +20215,7 @@ class Identity {
20195
20215
  return globalThis.navigator ? await browser.toDataURL(exported) : await browser.toString(exported, { type: 'terminal' });
20196
20216
  }
20197
20217
  async importQR(image, password) {
20198
- const multiWIF = e.scanImage(image);
20218
+ const multiWIF = await e.default.scanImage(image);
20199
20219
  return this.import(password, multiWIF);
20200
20220
  }
20201
20221
  }
@@ -20252,17 +20272,20 @@ class Peernet {
20252
20272
  /**
20253
20273
  * @property {String} network - current network
20254
20274
  */
20255
- this.network = options.network || 'leofcoin';
20275
+ this.network = options.network || "leofcoin";
20256
20276
  this.autoStart = options.autoStart === undefined ? true : options.autoStart;
20257
20277
  this.stars = options.stars;
20258
- const parts = this.network.split(':');
20259
- this.networkVersion = options.networkVersion || parts.length > 1 ? parts[1] : 'mainnet';
20278
+ const parts = this.network.split(":");
20279
+ this.networkVersion =
20280
+ options.networkVersion || parts.length > 1 ? parts[1] : "mainnet";
20260
20281
  if (!options.storePrefix)
20261
- options.storePrefix = 'lfc';
20282
+ options.storePrefix = "lfc";
20262
20283
  if (!options.port)
20263
20284
  options.port = 2000;
20264
20285
  if (!options.root) {
20265
- parts[1] ? options.root = `.${parts[0]}/${parts[1]}` : options.root = `.${this.network}`;
20286
+ parts[1]
20287
+ ? (options.root = `.${parts[0]}/${parts[1]}`)
20288
+ : (options.root = `.${this.network}`);
20266
20289
  }
20267
20290
  globalThis.peernet = this;
20268
20291
  this.bw = {
@@ -20275,11 +20298,25 @@ class Peernet {
20275
20298
  get id() {
20276
20299
  return this.identity.id;
20277
20300
  }
20301
+ get selectedAccount() {
20302
+ return this.identity.selectedAccount;
20303
+ }
20278
20304
  get accounts() {
20279
20305
  return this.identity.accounts;
20280
20306
  }
20281
20307
  get defaultStores() {
20282
- return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message'];
20308
+ return [
20309
+ "account",
20310
+ "wallet",
20311
+ "block",
20312
+ "transaction",
20313
+ "chain",
20314
+ "data",
20315
+ "message",
20316
+ ];
20317
+ }
20318
+ selectAccount(account) {
20319
+ return this.identity.selectAccount(account);
20283
20320
  }
20284
20321
  addProto(name, proto) {
20285
20322
  if (!globalThis.peernet.protos[name])
@@ -20289,11 +20326,16 @@ class Peernet {
20289
20326
  return utils$p.addCodec(codec);
20290
20327
  }
20291
20328
  async addStore(name, prefix, root, isPrivate = true) {
20292
- if (name === 'block' || name === 'transaction' || name === 'chain' ||
20293
- name === 'data' || name === 'message')
20329
+ if (name === "block" ||
20330
+ name === "transaction" ||
20331
+ name === "chain" ||
20332
+ name === "data" ||
20333
+ name === "message")
20294
20334
  isPrivate = false;
20295
20335
  let Storage;
20296
- this.hasDaemon ? Storage = LeofcoinStorageClient : Storage = LeofcoinStorage;
20336
+ this.hasDaemon
20337
+ ? (Storage = LeofcoinStorageClient)
20338
+ : (Storage = LeofcoinStorage);
20297
20339
  if (!globalThis[`${name}Store`]) {
20298
20340
  globalThis[`${name}Store`] = new Storage(name, root);
20299
20341
  await globalThis[`${name}Store`].init();
@@ -20326,7 +20368,7 @@ class Peernet {
20326
20368
  * @return {String} id - peerId
20327
20369
  */
20328
20370
  getConnection(id) {
20329
- return this.client.connections[id];
20371
+ return this.connections[id];
20330
20372
  }
20331
20373
  /**
20332
20374
  * @private
@@ -20339,9 +20381,9 @@ class Peernet {
20339
20381
  async _init(options, password) {
20340
20382
  this.storePrefix = options.storePrefix;
20341
20383
  this.root = options.root;
20342
- const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
20384
+ const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile,
20343
20385
  // FolderMessageResponse
20344
- } = await import(/* webpackChunkName: "messages" */ './messages-b66f5393.js');
20386
+ } = await import(/* webpackChunkName: "messages" */ './messages-eb6e5c71.js');
20345
20387
  /**
20346
20388
  * proto Object containing protos
20347
20389
  * @type {Object}
@@ -20352,18 +20394,18 @@ class Peernet {
20352
20394
  * @property {DataMessageResponse} protos[peernet-data-response] messageNode
20353
20395
  */
20354
20396
  globalThis.peernet.protos = {
20355
- 'peernet-request': RequestMessage,
20356
- 'peernet-response': ResponseMessage,
20357
- 'peernet-peer': PeerMessage,
20358
- 'peernet-peer-response': PeerMessageResponse,
20359
- 'peernet-message': PeernetMessage,
20360
- 'peernet-dht': DHTMessage,
20361
- 'peernet-dht-response': DHTMessageResponse,
20362
- 'peernet-data': DataMessage,
20363
- 'peernet-data-response': DataMessageResponse,
20364
- 'peernet-ps': PsMessage,
20365
- 'chat-message': ChatMessage,
20366
- 'peernet-file': PeernetFile
20397
+ "peernet-request": RequestMessage,
20398
+ "peernet-response": ResponseMessage,
20399
+ "peernet-peer": PeerMessage,
20400
+ "peernet-peer-response": PeerMessageResponse,
20401
+ "peernet-message": PeernetMessage,
20402
+ "peernet-dht": DHTMessage,
20403
+ "peernet-dht-response": DHTMessageResponse,
20404
+ "peernet-data": DataMessage,
20405
+ "peernet-data-response": DataMessageResponse,
20406
+ "peernet-ps": PsMessage,
20407
+ "chat-message": ChatMessage,
20408
+ "peernet-file": PeernetFile,
20367
20409
  };
20368
20410
  this._messageHandler = new MessageHandler(this.network);
20369
20411
  const { daemon, environment } = await target();
@@ -20375,38 +20417,44 @@ class Peernet {
20375
20417
  await this.identity.load(password);
20376
20418
  this._peerHandler = new PeerDiscovery(this.id);
20377
20419
  this.peerId = this.id;
20378
- this.addRequestHandler('handshake', () => {
20379
- return new peernet.protos['peernet-response']({ response: { peerId: this.id } });
20420
+ this.addRequestHandler("handshake", () => {
20421
+ return new peernet.protos["peernet-response"]({
20422
+ response: { peerId: this.id },
20423
+ });
20380
20424
  });
20381
- pubsub.subscribe('peer:discovered', async (peer) => {
20425
+ pubsub.subscribe("peer:discovered", async (peer) => {
20382
20426
  // console.log(peer);
20383
- if (this.requestProtos['version']) {
20384
- let data = await new globalThis.peernet.protos['peernet-request']({ request: 'version' });
20427
+ if (this.requestProtos["version"]) {
20428
+ let data = await new globalThis.peernet.protos["peernet-request"]({
20429
+ request: "version",
20430
+ });
20385
20431
  let node = await globalThis.peernet.prepareMessage(data);
20386
20432
  let response = await peer.request(node.encoded);
20387
- response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)));
20433
+ response = await new globalThis.peernet.protos["peernet-response"](new Uint8Array(Object.values(response)));
20388
20434
  peer.version = response.decoded.response.version;
20389
20435
  }
20390
- let data = await new globalThis.peernet.protos['peernet-request']({ request: 'handshake' });
20436
+ let data = await new globalThis.peernet.protos["peernet-request"]({
20437
+ request: "handshake",
20438
+ });
20391
20439
  let node = await globalThis.peernet.prepareMessage(data);
20392
20440
  let response = await peer.request(node.encoded);
20393
- response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)));
20441
+ response = await new globalThis.peernet.protos["peernet-response"](new Uint8Array(Object.values(response)));
20394
20442
  // todo: response.decoded should be the response and not response.peerId
20395
20443
  this.#connections[response.decoded.response.peerId] = peer;
20396
- pubsub.publish('peer:connected', peer);
20444
+ pubsub.publish("peer:connected", peer);
20397
20445
  // todo: cleanup discovered
20398
20446
  });
20399
- pubsub.subscribe('peer:left', this.#peerLeft.bind(this));
20447
+ pubsub.subscribe("peer:left", this.#peerLeft.bind(this));
20400
20448
  /**
20401
20449
  * converts data -> message -> proto
20402
20450
  * @see DataHandler
20403
20451
  */
20404
- pubsub.subscribe('peer:data', dataHandler);
20452
+ pubsub.subscribe("peer:data", dataHandler);
20405
20453
  if (globalThis.navigator) {
20406
- globalThis.addEventListener('beforeunload', async () => this.client.destroy());
20454
+ globalThis.addEventListener("beforeunload", async () => this.client.destroy());
20407
20455
  }
20408
20456
  else {
20409
- process.on('SIGTERM', async () => {
20457
+ process.on("SIGTERM", async () => {
20410
20458
  process.stdin.resume();
20411
20459
  try {
20412
20460
  await this.client.destroy();
@@ -20437,7 +20485,9 @@ class Peernet {
20437
20485
  }
20438
20486
  #peerLeft(peer) {
20439
20487
  for (const [id, _peer] of Object.entries(this.#connections)) {
20440
- if (_peer.id === peer.id && this.#connections[id] && !this.#connections[id].connected) {
20488
+ if (_peer.id === peer.id &&
20489
+ this.#connections[id] &&
20490
+ !this.#connections[id].connected) {
20441
20491
  delete this.#connections[id];
20442
20492
  this.removePeer(_peer);
20443
20493
  }
@@ -20464,18 +20514,26 @@ class Peernet {
20464
20514
  else {
20465
20515
  has = await this.has(hash);
20466
20516
  }
20467
- const data = await new globalThis.peernet.protos['peernet-dht-response']({ hash, has });
20517
+ const data = await new globalThis.peernet.protos["peernet-dht-response"]({
20518
+ hash,
20519
+ has,
20520
+ });
20468
20521
  const node = await this.prepareMessage(data);
20469
20522
  this.sendMessage(peer, id, node.encoded);
20470
20523
  }
20471
20524
  async handleData(peer, id, proto) {
20472
20525
  let { hash, store } = proto.decoded;
20473
20526
  let data;
20474
- store = globalThis[`${store}Store`] || await this.whichStore([...this.stores], hash);
20527
+ store =
20528
+ globalThis[`${store}Store`] ||
20529
+ (await this.whichStore([...this.stores], hash));
20475
20530
  if (store && !store.private) {
20476
20531
  data = await store.get(hash);
20477
20532
  if (data) {
20478
- data = await new globalThis.peernet.protos['peernet-data-response']({ hash, data });
20533
+ data = await new globalThis.peernet.protos["peernet-data-response"]({
20534
+ hash,
20535
+ data,
20536
+ });
20479
20537
  const node = await this.prepareMessage(data);
20480
20538
  this.sendMessage(peer, id, node.encoded);
20481
20539
  }
@@ -20499,21 +20557,20 @@ class Peernet {
20499
20557
  const { id, proto } = message;
20500
20558
  this.bw.down += proto.encoded.length;
20501
20559
  switch (proto.name) {
20502
- case 'peernet-dht': {
20560
+ case "peernet-dht": {
20503
20561
  this.handleDHT(peer, id, proto);
20504
20562
  break;
20505
20563
  }
20506
- case 'peernet-data': {
20564
+ case "peernet-data": {
20507
20565
  this.handleData(peer, id, proto);
20508
20566
  break;
20509
20567
  }
20510
- case 'peernet-request': {
20568
+ case "peernet-request": {
20511
20569
  this.handleRequest(peer, id, proto);
20512
20570
  break;
20513
20571
  }
20514
- case 'peernet-ps': {
20515
- if (peer.peerId !== this.id)
20516
- globalSub.publish(proto.decoded.topic, proto.decoded.data);
20572
+ case "peernet-ps": {
20573
+ globalSub.publish(new TextDecoder().decode(proto.decoded.topic), proto.decoded.data);
20517
20574
  }
20518
20575
  }
20519
20576
  }
@@ -20524,14 +20581,14 @@ class Peernet {
20524
20581
  */
20525
20582
  async walk(hash) {
20526
20583
  if (!hash)
20527
- throw new Error('hash expected, received undefined');
20528
- const data = await new globalThis.peernet.protos['peernet-dht']({ hash });
20584
+ throw new Error("hash expected, received undefined");
20585
+ const data = await new globalThis.peernet.protos["peernet-dht"]({ hash });
20529
20586
  const walk = async (peer, peerId) => {
20530
20587
  const node = await this.prepareMessage(data);
20531
20588
  let result = await peer.request(node.encoded);
20532
20589
  result = new Uint8Array(Object.values(result));
20533
20590
  const proto = await protoFor(result);
20534
- if (proto.name !== 'peernet-dht-response')
20591
+ if (proto.name !== "peernet-dht-response")
20535
20592
  throw dhtError(proto.name);
20536
20593
  const peerInfo = {
20537
20594
  ...peer.connectionStats,
@@ -20557,7 +20614,8 @@ class Peernet {
20557
20614
  let providers = this.dht.providersFor(hash);
20558
20615
  // walk the network to find a provider
20559
20616
  let tries = 0;
20560
- while (!providers && tries < 3 || Object.keys(providers).length === 0 && tries < 3) {
20617
+ while ((!providers && tries < 3) ||
20618
+ (Object.keys(providers).length === 0 && tries < 3)) {
20561
20619
  tries += 1;
20562
20620
  await this.walk(hash);
20563
20621
  providers = this.dht.providersFor(hash);
@@ -20571,14 +20629,14 @@ class Peernet {
20571
20629
  const data = await blockStore.has(hash);
20572
20630
  if (data)
20573
20631
  return blockStore.get(hash);
20574
- return this.requestData(hash, 'block');
20632
+ return this.requestData(hash, "block");
20575
20633
  },
20576
20634
  put: async (hash, data) => {
20577
20635
  if (await blockStore.has(hash))
20578
20636
  return;
20579
20637
  return await blockStore.put(hash, data);
20580
20638
  },
20581
- has: async (hash) => await blockStore.has(hash, 'block'),
20639
+ has: async (hash) => await blockStore.has(hash),
20582
20640
  };
20583
20641
  }
20584
20642
  get transaction() {
@@ -20587,7 +20645,7 @@ class Peernet {
20587
20645
  const data = await transactionStore.has(hash);
20588
20646
  if (data)
20589
20647
  return await transactionStore.get(hash);
20590
- return this.requestData(hash, 'transaction');
20648
+ return this.requestData(hash, "transaction");
20591
20649
  },
20592
20650
  put: async (hash, data) => {
20593
20651
  if (await transactionStore.has(hash))
@@ -20599,7 +20657,7 @@ class Peernet {
20599
20657
  }
20600
20658
  async requestData(hash, store) {
20601
20659
  const providers = await this.providersFor(hash);
20602
- if (!providers || providers && Object.keys(providers).length === 0)
20660
+ if (!providers || (providers && Object.keys(providers).length === 0))
20603
20661
  throw nothingFoundError(hash);
20604
20662
  debug(`found ${Object.keys(providers).length} provider(s) for ${hash}`);
20605
20663
  // get closest peer on earth
@@ -20610,7 +20668,10 @@ class Peernet {
20610
20668
  const id = closestPeer.id;
20611
20669
  const peer = this.#connections[id];
20612
20670
  if (peer?.connected) {
20613
- let data = await new globalThis.peernet.protos['peernet-data']({ hash, store: store?.name || store });
20671
+ let data = await new globalThis.peernet.protos["peernet-data"]({
20672
+ hash,
20673
+ store: store?.name || store,
20674
+ });
20614
20675
  const node = await this.prepareMessage(data);
20615
20676
  if (peer)
20616
20677
  data = await peer.request(node.encoded);
@@ -20649,7 +20710,7 @@ class Peernet {
20649
20710
  const message = await messageStore.has(hash);
20650
20711
  if (message)
20651
20712
  return await messageStore.get(hash);
20652
- return this.requestData(hash, 'message');
20713
+ return this.requestData(hash, "message");
20653
20714
  },
20654
20715
  /**
20655
20716
  * put message content
@@ -20677,7 +20738,7 @@ class Peernet {
20677
20738
  const data = await dataStore.has(hash);
20678
20739
  if (data)
20679
20740
  return await dataStore.get(hash);
20680
- return this.requestData(hash, 'data');
20741
+ return this.requestData(hash, "data");
20681
20742
  },
20682
20743
  /**
20683
20744
  * put data content
@@ -20705,7 +20766,7 @@ class Peernet {
20705
20766
  const data = await dataStore.has(hash);
20706
20767
  if (data)
20707
20768
  return await dataStore.get(hash);
20708
- return this.requestData(hash, 'data');
20769
+ return this.requestData(hash, "data");
20709
20770
  },
20710
20771
  /**
20711
20772
  * put data content
@@ -20724,12 +20785,15 @@ class Peernet {
20724
20785
  async addFolder(files) {
20725
20786
  const links = [];
20726
20787
  for (const file of files) {
20727
- const fileNode = await new globalThis.peernet.protos['peernet-file'](file);
20788
+ const fileNode = await new globalThis.peernet.protos["peernet-file"](file);
20728
20789
  const hash = await fileNode.hash;
20729
20790
  await dataStore.put(hash, fileNode.encoded);
20730
20791
  links.push({ hash, path: file.path });
20731
20792
  }
20732
- const node = await new globalThis.peernet.protos['peernet-file']({ path: '/', links });
20793
+ const node = await new globalThis.peernet.protos["peernet-file"]({
20794
+ path: "/",
20795
+ links,
20796
+ });
20733
20797
  const hash = await node.hash;
20734
20798
  await dataStore.put(hash, node.encoded);
20735
20799
  return hash;
@@ -20737,8 +20801,10 @@ class Peernet {
20737
20801
  async ls(hash, options) {
20738
20802
  let data;
20739
20803
  const has = await dataStore.has(hash);
20740
- data = has ? await dataStore.get(hash) : await this.requestData(hash, 'data');
20741
- const node = await new peernet.protos['peernet-file'](data);
20804
+ data = has
20805
+ ? await dataStore.get(hash)
20806
+ : await this.requestData(hash, "data");
20807
+ const node = await new peernet.protos["peernet-file"](data);
20742
20808
  await node.decode();
20743
20809
  console.log(data);
20744
20810
  const paths = [];
@@ -20754,8 +20820,10 @@ class Peernet {
20754
20820
  async cat(hash, options) {
20755
20821
  let data;
20756
20822
  const has = await dataStore.has(hash);
20757
- data = has ? await dataStore.get(hash) : await this.requestData(hash, 'data');
20758
- const node = await new peernet.protos['peernet-file'](data);
20823
+ data = has
20824
+ ? await dataStore.get(hash)
20825
+ : await this.requestData(hash, "data");
20826
+ const node = await new peernet.protos["peernet-file"](data);
20759
20827
  if (node.decoded?.links.length > 0)
20760
20828
  throw new Error(`${hash} is a directory`);
20761
20829
  if (options?.pin)
@@ -20793,7 +20861,7 @@ class Peernet {
20793
20861
  store = globalThis[`${store}Store`];
20794
20862
  if (!store)
20795
20863
  store = await this.whichStore([...this.stores], hash);
20796
- if (store && await store.has(hash))
20864
+ if (store && (await store.has(hash)))
20797
20865
  data = await store.get(hash);
20798
20866
  if (data)
20799
20867
  return data;
@@ -20806,7 +20874,7 @@ class Peernet {
20806
20874
  * @param {Buffer} data
20807
20875
  * @param {String} storeName - storeName to access
20808
20876
  */
20809
- async put(hash, data, storeName = 'data') {
20877
+ async put(hash, data, storeName = "data") {
20810
20878
  const store = globalThis[`${storeName}Store`];
20811
20879
  return store.put(hash, data);
20812
20880
  }
@@ -20829,7 +20897,7 @@ class Peernet {
20829
20897
  async publish(topic, data) {
20830
20898
  // globalSub.publish(topic, data)
20831
20899
  const id = Math.random().toString(36).slice(-12);
20832
- data = await new globalThis.peernet.protos['peernet-ps']({ data, topic });
20900
+ data = await new globalThis.peernet.protos["peernet-ps"]({ data, topic });
20833
20901
  for (const [peerId, peer] of Object.entries(this.#connections)) {
20834
20902
  if (peerId !== this.id) {
20835
20903
  const node = await this.prepareMessage(data);
@@ -20851,7 +20919,7 @@ class Peernet {
20851
20919
  globalSub.subscribe(topic, callback);
20852
20920
  }
20853
20921
  async removePeer(peer) {
20854
- console.log('removepeer', peer.id);
20922
+ console.log("removepeer", peer.id);
20855
20923
  const id = peer.id;
20856
20924
  await this.client._removePeer(peer);
20857
20925
  if (this.client.peers[id]) {
@@ -20859,7 +20927,7 @@ class Peernet {
20859
20927
  // if (this.client.peers[id][connection].connected === false) delete this.client.peers[id][connection]
20860
20928
  // @ts-ignore
20861
20929
  if (this.client.peers[id][connection].connected)
20862
- return this.client.emit('peerconnect', connection);
20930
+ return this.client.emit("peerconnect", connection);
20863
20931
  }
20864
20932
  }
20865
20933
  }