@leofcoin/codec-format-interface 1.4.3 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1451 -360
- package/package.json +11 -6
- package/rollup.config.js +7 -11
- package/src/basic-interface.ts +126 -0
- package/src/{codec-format-interface.js → codec-format-interface.ts} +48 -57
- package/src/codec-hash.js +31 -19
- package/src/{codec.js → codec.ts} +1 -1
- package/src/{index.js → index.ts} +0 -0
- package/test/index.js +12 -4
- package/tsconfig.js +17 -0
- package/typings/Base58.d.ts +5 -0
- package/typings/BasicInterface.d.ts +48 -0
- package/typings/FormatInterface.d.ts +5 -0
- package/typings/index.d.ts +12 -0
- package/dist/module.js +0 -4841
- package/src/basic-interface.js +0 -123
package/dist/index.js
CHANGED
|
@@ -1,141 +1,1160 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var bs32 = require('@vandeurenglenn/base32');
|
|
6
|
-
var bs58 = require('@vandeurenglenn/base58');
|
|
7
|
-
var isHex = require('@vandeurenglenn/is-hex');
|
|
8
|
-
var varint = require('varint');
|
|
9
|
-
var createKeccakHash = require('keccak');
|
|
10
|
-
|
|
11
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
-
|
|
13
|
-
var bs32__default = /*#__PURE__*/_interopDefaultLegacy(bs32);
|
|
14
|
-
var bs58__default = /*#__PURE__*/_interopDefaultLegacy(bs58);
|
|
15
|
-
var isHex__default = /*#__PURE__*/_interopDefaultLegacy(isHex);
|
|
16
|
-
var varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);
|
|
17
|
-
var createKeccakHash__default = /*#__PURE__*/_interopDefaultLegacy(createKeccakHash);
|
|
18
|
-
|
|
19
|
-
class BasicInterface$1 {
|
|
20
|
-
handleDecode() {
|
|
21
|
-
if (!this.decode) throw new Error('bad implementation: needs decode func')
|
|
22
|
-
return this.decode()
|
|
23
|
-
}
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
Copyright (c) Microsoft Corporation.
|
|
24
3
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return this.encode()
|
|
28
|
-
}
|
|
29
|
-
isHex(string) {
|
|
30
|
-
return isHex__default["default"](string)
|
|
31
|
-
}
|
|
32
|
-
isBase32(string) {
|
|
33
|
-
return bs32__default["default"].isBase32(string)
|
|
34
|
-
}
|
|
35
|
-
isBase58(string) {
|
|
36
|
-
return bs58__default["default"].isBase58(string)
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @param {String} encoded
|
|
40
|
-
*/
|
|
41
|
-
fromBs32(encoded) {
|
|
42
|
-
this.encoded = bs32__default["default"].decode(encoded);
|
|
43
|
-
return this.handleDecode()
|
|
44
|
-
}
|
|
4
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
+
purpose with or without fee is hereby granted.
|
|
45
6
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
8
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
9
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
10
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
11
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
12
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
13
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
+
***************************************************************************** */
|
|
15
|
+
/* global Reflect, Promise */
|
|
53
16
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
17
|
+
var extendStatics = function(d, b) {
|
|
18
|
+
extendStatics = Object.setPrototypeOf ||
|
|
19
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
20
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
21
|
+
return extendStatics(d, b);
|
|
22
|
+
};
|
|
61
23
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
24
|
+
function __extends(d, b) {
|
|
25
|
+
if (typeof b !== "function" && b !== null)
|
|
26
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
27
|
+
extendStatics(d, b);
|
|
28
|
+
function __() { this.constructor = d; }
|
|
29
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
30
|
+
}
|
|
66
31
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
32
|
+
var __assign = function() {
|
|
33
|
+
__assign = Object.assign || function __assign(t) {
|
|
34
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
35
|
+
s = arguments[i];
|
|
36
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
37
|
+
}
|
|
38
|
+
return t;
|
|
39
|
+
};
|
|
40
|
+
return __assign.apply(this, arguments);
|
|
41
|
+
};
|
|
71
42
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
43
|
+
function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
44
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
45
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
46
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
47
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
48
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
49
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
50
|
+
});
|
|
51
|
+
}
|
|
79
52
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
53
|
+
function __generator(thisArg, body) {
|
|
54
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
55
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
56
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
57
|
+
function step(op) {
|
|
58
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
59
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
60
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
61
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
62
|
+
switch (op[0]) {
|
|
63
|
+
case 0: case 1: t = op; break;
|
|
64
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
65
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
66
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
67
|
+
default:
|
|
68
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
69
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
70
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
71
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
72
|
+
if (t[2]) _.ops.pop();
|
|
73
|
+
_.trys.pop(); continue;
|
|
74
|
+
}
|
|
75
|
+
op = body.call(thisArg, _);
|
|
76
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
77
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
87
80
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return
|
|
91
|
-
|
|
81
|
+
function __values(o) {
|
|
82
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
83
|
+
if (m) return m.call(o);
|
|
84
|
+
if (o && typeof o.length === "number") return {
|
|
85
|
+
next: function () {
|
|
86
|
+
if (o && i >= o.length) o = void 0;
|
|
87
|
+
return { value: o && o[i++], done: !o };
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
91
|
+
}
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
93
|
+
function __spreadArray(to, from, pack) {
|
|
94
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
95
|
+
if (ar || !(i in from)) {
|
|
96
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
97
|
+
ar[i] = from[i];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
101
|
+
}
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
function __asyncValues(o) {
|
|
104
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
105
|
+
var m = o[Symbol.asyncIterator], i;
|
|
106
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
107
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
108
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// base-x encoding / decoding
|
|
112
|
+
// Copyright (c) 2018 base-x contributors
|
|
113
|
+
// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)
|
|
114
|
+
// Distributed under the MIT software license, see the accompanying
|
|
115
|
+
// file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
|
116
|
+
var base$1 = function (ALPHABET) {
|
|
117
|
+
if (ALPHABET.length >= 255) {
|
|
118
|
+
throw new TypeError('Alphabet too long');
|
|
119
|
+
}
|
|
120
|
+
var BASE_MAP = new Uint8Array(256);
|
|
121
|
+
for (var j = 0; j < BASE_MAP.length; j++) {
|
|
122
|
+
BASE_MAP[j] = 255;
|
|
123
|
+
}
|
|
124
|
+
for (var i = 0; i < ALPHABET.length; i++) {
|
|
125
|
+
var x = ALPHABET.charAt(i);
|
|
126
|
+
var xc = x.charCodeAt(0);
|
|
127
|
+
if (BASE_MAP[xc] !== 255) {
|
|
128
|
+
throw new TypeError(x + ' is ambiguous');
|
|
129
|
+
}
|
|
130
|
+
BASE_MAP[xc] = i;
|
|
131
|
+
}
|
|
132
|
+
var BASE = ALPHABET.length;
|
|
133
|
+
var LEADER = ALPHABET.charAt(0);
|
|
134
|
+
var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up
|
|
135
|
+
var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up
|
|
136
|
+
var encode = function (source) {
|
|
137
|
+
if (source instanceof Uint8Array) ;
|
|
138
|
+
else if (ArrayBuffer.isView(source)) {
|
|
139
|
+
source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
|
|
140
|
+
}
|
|
141
|
+
else if (Array.isArray(source)) {
|
|
142
|
+
source = Uint8Array.from(source);
|
|
143
|
+
}
|
|
144
|
+
if (!(source instanceof Uint8Array)) {
|
|
145
|
+
throw new TypeError('Expected Uint8Array');
|
|
146
|
+
}
|
|
147
|
+
if (source.length === 0) {
|
|
148
|
+
return '';
|
|
149
|
+
}
|
|
150
|
+
// Skip & count leading zeroes.
|
|
151
|
+
var zeroes = 0;
|
|
152
|
+
var length = 0;
|
|
153
|
+
var pbegin = 0;
|
|
154
|
+
var pend = source.length;
|
|
155
|
+
while (pbegin !== pend && source[pbegin] === 0) {
|
|
156
|
+
pbegin++;
|
|
157
|
+
zeroes++;
|
|
158
|
+
}
|
|
159
|
+
// Allocate enough space in big-endian base58 representation.
|
|
160
|
+
var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;
|
|
161
|
+
var b58 = new Uint8Array(size);
|
|
162
|
+
// Process the bytes.
|
|
163
|
+
while (pbegin !== pend) {
|
|
164
|
+
var carry = source[pbegin];
|
|
165
|
+
// Apply "b58 = b58 * 256 + ch".
|
|
166
|
+
var i = 0;
|
|
167
|
+
for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {
|
|
168
|
+
carry += (256 * b58[it1]) >>> 0;
|
|
169
|
+
b58[it1] = (carry % BASE) >>> 0;
|
|
170
|
+
carry = (carry / BASE) >>> 0;
|
|
171
|
+
}
|
|
172
|
+
if (carry !== 0) {
|
|
173
|
+
throw new Error('Non-zero carry');
|
|
174
|
+
}
|
|
175
|
+
length = i;
|
|
176
|
+
pbegin++;
|
|
177
|
+
}
|
|
178
|
+
// Skip leading zeroes in base58 result.
|
|
179
|
+
var it2 = size - length;
|
|
180
|
+
while (it2 !== size && b58[it2] === 0) {
|
|
181
|
+
it2++;
|
|
182
|
+
}
|
|
183
|
+
// Translate the result into a string.
|
|
184
|
+
var str = LEADER.repeat(zeroes);
|
|
185
|
+
for (; it2 < size; ++it2) {
|
|
186
|
+
str += ALPHABET.charAt(b58[it2]);
|
|
187
|
+
}
|
|
188
|
+
return str;
|
|
189
|
+
};
|
|
190
|
+
var decodeUnsafe = function (source) {
|
|
191
|
+
if (typeof source !== 'string') {
|
|
192
|
+
throw new TypeError('Expected String');
|
|
193
|
+
}
|
|
194
|
+
if (source.length === 0) {
|
|
195
|
+
return new Uint8Array();
|
|
196
|
+
}
|
|
197
|
+
var psz = 0;
|
|
198
|
+
// Skip and count leading '1's.
|
|
199
|
+
var zeroes = 0;
|
|
200
|
+
var length = 0;
|
|
201
|
+
while (source[psz] === LEADER) {
|
|
202
|
+
zeroes++;
|
|
203
|
+
psz++;
|
|
204
|
+
}
|
|
205
|
+
// Allocate enough space in big-endian base256 representation.
|
|
206
|
+
var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.
|
|
207
|
+
var b256 = new Uint8Array(size);
|
|
208
|
+
// Process the characters.
|
|
209
|
+
while (source[psz]) {
|
|
210
|
+
// Decode character
|
|
211
|
+
var carry = BASE_MAP[source.charCodeAt(psz)];
|
|
212
|
+
// Invalid character
|
|
213
|
+
if (carry === 255) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
var i = 0;
|
|
217
|
+
for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {
|
|
218
|
+
carry += (BASE * b256[it3]) >>> 0;
|
|
219
|
+
b256[it3] = (carry % 256) >>> 0;
|
|
220
|
+
carry = (carry / 256) >>> 0;
|
|
221
|
+
}
|
|
222
|
+
if (carry !== 0) {
|
|
223
|
+
throw new Error('Non-zero carry');
|
|
224
|
+
}
|
|
225
|
+
length = i;
|
|
226
|
+
psz++;
|
|
227
|
+
}
|
|
228
|
+
// Skip leading zeroes in b256.
|
|
229
|
+
var it4 = size - length;
|
|
230
|
+
while (it4 !== size && b256[it4] === 0) {
|
|
231
|
+
it4++;
|
|
232
|
+
}
|
|
233
|
+
var vch = new Uint8Array(zeroes + (size - it4));
|
|
234
|
+
var j = zeroes;
|
|
235
|
+
while (it4 !== size) {
|
|
236
|
+
vch[j++] = b256[it4++];
|
|
237
|
+
}
|
|
238
|
+
return vch;
|
|
239
|
+
};
|
|
240
|
+
var decode = function (string) {
|
|
241
|
+
var buffer = decodeUnsafe(string);
|
|
242
|
+
if (buffer) {
|
|
243
|
+
return buffer;
|
|
244
|
+
}
|
|
245
|
+
throw new Error('Non-base' + BASE + ' character');
|
|
246
|
+
};
|
|
247
|
+
return {
|
|
248
|
+
encode: encode,
|
|
249
|
+
decodeUnsafe: decodeUnsafe,
|
|
250
|
+
decode: decode
|
|
251
|
+
};
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
var base32 = 'abcdefghijklmnopqrstuvwxyz234567';
|
|
255
|
+
var base32Hex = '0123456789abcdefghijklmnopqrstuv';
|
|
256
|
+
var decode$2 = function (string, hex) {
|
|
257
|
+
if (hex === void 0) { hex = false; }
|
|
258
|
+
var decoder = hex ? base$1(base32Hex) : base$1(base32);
|
|
259
|
+
return decoder.decode(string);
|
|
260
|
+
};
|
|
261
|
+
var base32$1 = {
|
|
262
|
+
encode: function (uint8Array, hex) {
|
|
263
|
+
if (hex === void 0) { hex = false; }
|
|
264
|
+
var encoder = hex ? base$1(base32Hex) : base$1(base32);
|
|
265
|
+
return encoder.encode(uint8Array);
|
|
266
|
+
},
|
|
267
|
+
decode: decode$2,
|
|
268
|
+
isBase32: function (string, hex) {
|
|
269
|
+
if (hex === void 0) { hex = false; }
|
|
270
|
+
try {
|
|
271
|
+
decode$2(string, hex);
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
catch (e) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
// base-x encoding / decoding
|
|
281
|
+
// Copyright (c) 2018 base-x contributors
|
|
282
|
+
// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)
|
|
283
|
+
// Distributed under the MIT software license, see the accompanying
|
|
284
|
+
// file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
|
285
|
+
var base = function (ALPHABET) {
|
|
286
|
+
if (ALPHABET.length >= 255) {
|
|
287
|
+
throw new TypeError('Alphabet too long');
|
|
288
|
+
}
|
|
289
|
+
var BASE_MAP = new Uint8Array(256);
|
|
290
|
+
for (var j = 0; j < BASE_MAP.length; j++) {
|
|
291
|
+
BASE_MAP[j] = 255;
|
|
292
|
+
}
|
|
293
|
+
for (var i = 0; i < ALPHABET.length; i++) {
|
|
294
|
+
var x = ALPHABET.charAt(i);
|
|
295
|
+
var xc = x.charCodeAt(0);
|
|
296
|
+
if (BASE_MAP[xc] !== 255) {
|
|
297
|
+
throw new TypeError(x + ' is ambiguous');
|
|
298
|
+
}
|
|
299
|
+
BASE_MAP[xc] = i;
|
|
300
|
+
}
|
|
301
|
+
var BASE = ALPHABET.length;
|
|
302
|
+
var LEADER = ALPHABET.charAt(0);
|
|
303
|
+
var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up
|
|
304
|
+
var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up
|
|
305
|
+
var encode = function (source) {
|
|
306
|
+
if (source instanceof Uint8Array) ;
|
|
307
|
+
else if (ArrayBuffer.isView(source)) {
|
|
308
|
+
source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
|
|
309
|
+
}
|
|
310
|
+
else if (Array.isArray(source)) {
|
|
311
|
+
source = Uint8Array.from(source);
|
|
312
|
+
}
|
|
313
|
+
if (!(source instanceof Uint8Array)) {
|
|
314
|
+
throw new TypeError('Expected Uint8Array');
|
|
315
|
+
}
|
|
316
|
+
if (source.length === 0) {
|
|
317
|
+
return '';
|
|
318
|
+
}
|
|
319
|
+
// Skip & count leading zeroes.
|
|
320
|
+
var zeroes = 0;
|
|
321
|
+
var length = 0;
|
|
322
|
+
var pbegin = 0;
|
|
323
|
+
var pend = source.length;
|
|
324
|
+
while (pbegin !== pend && source[pbegin] === 0) {
|
|
325
|
+
pbegin++;
|
|
326
|
+
zeroes++;
|
|
327
|
+
}
|
|
328
|
+
// Allocate enough space in big-endian base58 representation.
|
|
329
|
+
var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;
|
|
330
|
+
var b58 = new Uint8Array(size);
|
|
331
|
+
// Process the bytes.
|
|
332
|
+
while (pbegin !== pend) {
|
|
333
|
+
var carry = source[pbegin];
|
|
334
|
+
// Apply "b58 = b58 * 256 + ch".
|
|
335
|
+
var i = 0;
|
|
336
|
+
for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {
|
|
337
|
+
carry += (256 * b58[it1]) >>> 0;
|
|
338
|
+
b58[it1] = (carry % BASE) >>> 0;
|
|
339
|
+
carry = (carry / BASE) >>> 0;
|
|
340
|
+
}
|
|
341
|
+
if (carry !== 0) {
|
|
342
|
+
throw new Error('Non-zero carry');
|
|
343
|
+
}
|
|
344
|
+
length = i;
|
|
345
|
+
pbegin++;
|
|
346
|
+
}
|
|
347
|
+
// Skip leading zeroes in base58 result.
|
|
348
|
+
var it2 = size - length;
|
|
349
|
+
while (it2 !== size && b58[it2] === 0) {
|
|
350
|
+
it2++;
|
|
351
|
+
}
|
|
352
|
+
// Translate the result into a string.
|
|
353
|
+
var str = LEADER.repeat(zeroes);
|
|
354
|
+
for (; it2 < size; ++it2) {
|
|
355
|
+
str += ALPHABET.charAt(b58[it2]);
|
|
356
|
+
}
|
|
357
|
+
return str;
|
|
358
|
+
};
|
|
359
|
+
var decodeUnsafe = function (source) {
|
|
360
|
+
if (typeof source !== 'string') {
|
|
361
|
+
throw new TypeError('Expected String');
|
|
362
|
+
}
|
|
363
|
+
if (source.length === 0) {
|
|
364
|
+
return new Uint8Array();
|
|
365
|
+
}
|
|
366
|
+
var psz = 0;
|
|
367
|
+
// Skip and count leading '1's.
|
|
368
|
+
var zeroes = 0;
|
|
369
|
+
var length = 0;
|
|
370
|
+
while (source[psz] === LEADER) {
|
|
371
|
+
zeroes++;
|
|
372
|
+
psz++;
|
|
373
|
+
}
|
|
374
|
+
// Allocate enough space in big-endian base256 representation.
|
|
375
|
+
var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.
|
|
376
|
+
var b256 = new Uint8Array(size);
|
|
377
|
+
// Process the characters.
|
|
378
|
+
while (source[psz]) {
|
|
379
|
+
// Decode character
|
|
380
|
+
var carry = BASE_MAP[source.charCodeAt(psz)];
|
|
381
|
+
// Invalid character
|
|
382
|
+
if (carry === 255) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
var i = 0;
|
|
386
|
+
for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {
|
|
387
|
+
carry += (BASE * b256[it3]) >>> 0;
|
|
388
|
+
b256[it3] = (carry % 256) >>> 0;
|
|
389
|
+
carry = (carry / 256) >>> 0;
|
|
390
|
+
}
|
|
391
|
+
if (carry !== 0) {
|
|
392
|
+
throw new Error('Non-zero carry');
|
|
393
|
+
}
|
|
394
|
+
length = i;
|
|
395
|
+
psz++;
|
|
396
|
+
}
|
|
397
|
+
// Skip leading zeroes in b256.
|
|
398
|
+
var it4 = size - length;
|
|
399
|
+
while (it4 !== size && b256[it4] === 0) {
|
|
400
|
+
it4++;
|
|
401
|
+
}
|
|
402
|
+
var vch = new Uint8Array(zeroes + (size - it4));
|
|
403
|
+
var j = zeroes;
|
|
404
|
+
while (it4 !== size) {
|
|
405
|
+
vch[j++] = b256[it4++];
|
|
406
|
+
}
|
|
407
|
+
return vch;
|
|
408
|
+
};
|
|
409
|
+
var decode = function (string) {
|
|
410
|
+
var buffer = decodeUnsafe(string);
|
|
411
|
+
if (buffer) {
|
|
412
|
+
return buffer;
|
|
413
|
+
}
|
|
414
|
+
throw new Error('Non-base' + BASE + ' character');
|
|
415
|
+
};
|
|
416
|
+
return {
|
|
417
|
+
encode: encode,
|
|
418
|
+
decodeUnsafe: decodeUnsafe,
|
|
419
|
+
decode: decode
|
|
420
|
+
};
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
424
|
+
var base58 = base(ALPHABET);
|
|
425
|
+
var decode$1 = function (string) { return base58.decode(string); };
|
|
426
|
+
var base58$1 = {
|
|
427
|
+
encode: function (uint8Array) { return base58.encode(uint8Array); },
|
|
428
|
+
decode: decode$1,
|
|
429
|
+
isBase58: function (string) {
|
|
430
|
+
try {
|
|
431
|
+
decode$1(string);
|
|
432
|
+
return true;
|
|
433
|
+
}
|
|
434
|
+
catch (e) {
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* @param {string}
|
|
442
|
+
*/
|
|
443
|
+
var isHex = (function (string) { return /^[A-F0-9]+$/i.test(string); });
|
|
444
|
+
|
|
445
|
+
var BasicInterface$1 = /** @class */ (function () {
|
|
446
|
+
function BasicInterface() {
|
|
447
|
+
}
|
|
448
|
+
// get Codec(): Codec {}
|
|
449
|
+
BasicInterface.prototype.protoEncode = function (data) {
|
|
450
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
451
|
+
return __generator(this, function (_a) {
|
|
452
|
+
// check schema
|
|
453
|
+
return [2 /*return*/, new TextEncoder().encode(data)];
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
};
|
|
457
|
+
BasicInterface.prototype.protoDecode = function (data) {
|
|
458
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
459
|
+
return __generator(this, function (_a) {
|
|
460
|
+
// check schema
|
|
461
|
+
return [2 /*return*/, new TextDecoder().decode(data)];
|
|
462
|
+
});
|
|
463
|
+
});
|
|
464
|
+
};
|
|
465
|
+
BasicInterface.prototype.isHex = function (string) {
|
|
466
|
+
return isHex(string);
|
|
467
|
+
};
|
|
468
|
+
BasicInterface.prototype.isBase32 = function (string) {
|
|
469
|
+
return base32$1.isBase32(string);
|
|
470
|
+
};
|
|
471
|
+
BasicInterface.prototype.isBase58 = function (string) {
|
|
472
|
+
return base58$1.isBase58(string);
|
|
473
|
+
};
|
|
474
|
+
BasicInterface.prototype.fromBs32 = function (encoded) {
|
|
475
|
+
this.encoded = base32$1.decode(encoded);
|
|
476
|
+
return this.decode();
|
|
477
|
+
};
|
|
478
|
+
BasicInterface.prototype.fromBs58 = function (encoded) {
|
|
479
|
+
this.encoded = base58$1.decode(encoded);
|
|
480
|
+
return this.decode();
|
|
481
|
+
};
|
|
482
|
+
BasicInterface.prototype.toArray = function () {
|
|
483
|
+
var _a, e_1, _b, _c;
|
|
484
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
485
|
+
var array, _d, _e, _f, value, e_1_1;
|
|
486
|
+
return __generator(this, function (_g) {
|
|
487
|
+
switch (_g.label) {
|
|
488
|
+
case 0:
|
|
489
|
+
array = [];
|
|
490
|
+
_g.label = 1;
|
|
491
|
+
case 1:
|
|
492
|
+
_g.trys.push([1, 6, 7, 12]);
|
|
493
|
+
_d = true, _e = __asyncValues(this.encoded.values());
|
|
494
|
+
_g.label = 2;
|
|
495
|
+
case 2: return [4 /*yield*/, _e.next()];
|
|
496
|
+
case 3:
|
|
497
|
+
if (!(_f = _g.sent(), _a = _f.done, !_a)) return [3 /*break*/, 5];
|
|
498
|
+
_c = _f.value;
|
|
499
|
+
_d = false;
|
|
500
|
+
try {
|
|
501
|
+
value = _c;
|
|
502
|
+
array.push(value);
|
|
503
|
+
}
|
|
504
|
+
finally {
|
|
505
|
+
_d = true;
|
|
506
|
+
}
|
|
507
|
+
_g.label = 4;
|
|
508
|
+
case 4: return [3 /*break*/, 2];
|
|
509
|
+
case 5: return [3 /*break*/, 12];
|
|
510
|
+
case 6:
|
|
511
|
+
e_1_1 = _g.sent();
|
|
512
|
+
e_1 = { error: e_1_1 };
|
|
513
|
+
return [3 /*break*/, 12];
|
|
514
|
+
case 7:
|
|
515
|
+
_g.trys.push([7, , 10, 11]);
|
|
516
|
+
if (!(!_d && !_a && (_b = _e["return"]))) return [3 /*break*/, 9];
|
|
517
|
+
return [4 /*yield*/, _b.call(_e)];
|
|
518
|
+
case 8:
|
|
519
|
+
_g.sent();
|
|
520
|
+
_g.label = 9;
|
|
521
|
+
case 9: return [3 /*break*/, 11];
|
|
522
|
+
case 10:
|
|
523
|
+
if (e_1) throw e_1.error;
|
|
524
|
+
return [7 /*endfinally*/];
|
|
525
|
+
case 11: return [7 /*endfinally*/];
|
|
526
|
+
case 12: return [2 /*return*/, array];
|
|
527
|
+
}
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
};
|
|
531
|
+
BasicInterface.prototype.fromString = function (string) {
|
|
532
|
+
var array = string.split(',');
|
|
533
|
+
var arrayLike = array.map(function (string) { return Number(string); });
|
|
534
|
+
this.encoded = Uint8Array.from(arrayLike);
|
|
535
|
+
return this.decode();
|
|
536
|
+
};
|
|
537
|
+
BasicInterface.prototype.fromArray = function (array) {
|
|
538
|
+
this.encoded = Uint8Array.from(__spreadArray([], array, true));
|
|
539
|
+
return this.decode();
|
|
540
|
+
};
|
|
541
|
+
BasicInterface.prototype.fromEncoded = function (encoded) {
|
|
542
|
+
this.encoded = encoded;
|
|
543
|
+
return this.decode();
|
|
544
|
+
};
|
|
545
|
+
BasicInterface.prototype.fromHex = function (encoded) {
|
|
546
|
+
this.encoded = Buffer.from(encoded, 'hex');
|
|
547
|
+
return this.decode();
|
|
548
|
+
};
|
|
549
|
+
BasicInterface.prototype.toString = function (encoding) {
|
|
550
|
+
if (encoding === void 0) { encoding = 'utf8'; }
|
|
551
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
552
|
+
return __generator(this, function (_a) {
|
|
553
|
+
switch (_a.label) {
|
|
554
|
+
case 0:
|
|
555
|
+
if (!!this.encoded) return [3 /*break*/, 2];
|
|
556
|
+
return [4 /*yield*/, this.encode()];
|
|
557
|
+
case 1:
|
|
558
|
+
_a.sent();
|
|
559
|
+
_a.label = 2;
|
|
560
|
+
case 2: return [2 /*return*/, this.encoded.toString(encoding)];
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
});
|
|
564
|
+
};
|
|
565
|
+
/**
|
|
566
|
+
* @return {String} encoded
|
|
567
|
+
*/
|
|
568
|
+
BasicInterface.prototype.toHex = function () {
|
|
569
|
+
return this.toString('hex');
|
|
570
|
+
};
|
|
571
|
+
/**
|
|
572
|
+
* @return {String} encoded
|
|
573
|
+
*/
|
|
574
|
+
BasicInterface.prototype.toBs32 = function () {
|
|
575
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
576
|
+
return __generator(this, function (_a) {
|
|
577
|
+
switch (_a.label) {
|
|
578
|
+
case 0:
|
|
579
|
+
if (!!this.encoded) return [3 /*break*/, 2];
|
|
580
|
+
return [4 /*yield*/, this.encode()];
|
|
581
|
+
case 1:
|
|
582
|
+
_a.sent();
|
|
583
|
+
_a.label = 2;
|
|
584
|
+
case 2: return [2 /*return*/, base32$1.encode(this.encoded)];
|
|
585
|
+
}
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
};
|
|
589
|
+
/**
|
|
590
|
+
* @return {String} encoded
|
|
591
|
+
*/
|
|
592
|
+
BasicInterface.prototype.toBs58 = function () {
|
|
593
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
594
|
+
return __generator(this, function (_a) {
|
|
595
|
+
switch (_a.label) {
|
|
596
|
+
case 0:
|
|
597
|
+
if (!!this.encoded) return [3 /*break*/, 2];
|
|
598
|
+
return [4 /*yield*/, this.encode()];
|
|
599
|
+
case 1:
|
|
600
|
+
_a.sent();
|
|
601
|
+
_a.label = 2;
|
|
602
|
+
case 2: return [2 /*return*/, base58$1.encode(this.encoded)];
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
};
|
|
607
|
+
/**
|
|
608
|
+
* @param {Object} data
|
|
609
|
+
*/
|
|
610
|
+
BasicInterface.prototype.create = function (data) {
|
|
611
|
+
var _a;
|
|
612
|
+
var decoded = {};
|
|
613
|
+
if (((_a = this.keys) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
614
|
+
var _loop_1 = function (key) {
|
|
615
|
+
var _c;
|
|
616
|
+
Object.defineProperties(decoded, (_c = {},
|
|
617
|
+
_c[key] = {
|
|
618
|
+
enumerable: true,
|
|
619
|
+
configurable: true,
|
|
620
|
+
set: function (value) { return data[key]; },
|
|
621
|
+
get: function () { return data[key]; }
|
|
622
|
+
},
|
|
623
|
+
_c));
|
|
624
|
+
};
|
|
625
|
+
for (var _i = 0, _b = this.keys; _i < _b.length; _i++) {
|
|
626
|
+
var key = _b[_i];
|
|
627
|
+
_loop_1(key);
|
|
628
|
+
}
|
|
629
|
+
this.decoded = decoded;
|
|
630
|
+
return this.encode();
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
return BasicInterface;
|
|
634
|
+
}());
|
|
635
|
+
|
|
636
|
+
/*!
|
|
637
|
+
* hash-wasm (https://www.npmjs.com/package/hash-wasm)
|
|
638
|
+
* (c) Dani Biro
|
|
639
|
+
* @license MIT
|
|
640
|
+
*/
|
|
641
|
+
|
|
642
|
+
/*! *****************************************************************************
|
|
643
|
+
Copyright (c) Microsoft Corporation.
|
|
107
644
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
*/
|
|
111
|
-
async toBs58() {
|
|
112
|
-
if (!this.encoded) await this.handleEncode();
|
|
113
|
-
return bs58__default["default"].encode(this.encoded)
|
|
114
|
-
}
|
|
645
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
646
|
+
purpose with or without fee is hereby granted.
|
|
115
647
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
[key]: {
|
|
125
|
-
enumerable: true,
|
|
126
|
-
configurable: true,
|
|
127
|
-
set: (val) => value = data[key],
|
|
128
|
-
get: () => data[key]
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
648
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
649
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
650
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
651
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
652
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
653
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
654
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
655
|
+
***************************************************************************** */
|
|
132
656
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
657
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
658
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
659
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
660
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
661
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
662
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
663
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
class Mutex {
|
|
668
|
+
constructor() {
|
|
669
|
+
this.mutex = Promise.resolve();
|
|
670
|
+
}
|
|
671
|
+
lock() {
|
|
672
|
+
let begin = () => { };
|
|
673
|
+
this.mutex = this.mutex.then(() => new Promise(begin));
|
|
674
|
+
return new Promise((res) => {
|
|
675
|
+
begin = res;
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
dispatch(fn) {
|
|
679
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
680
|
+
const unlock = yield this.lock();
|
|
681
|
+
try {
|
|
682
|
+
return yield Promise.resolve(fn());
|
|
683
|
+
}
|
|
684
|
+
finally {
|
|
685
|
+
unlock();
|
|
686
|
+
}
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/* eslint-disable import/prefer-default-export */
|
|
692
|
+
/* eslint-disable no-bitwise */
|
|
693
|
+
var _a;
|
|
694
|
+
function getGlobal() {
|
|
695
|
+
if (typeof globalThis !== 'undefined')
|
|
696
|
+
return globalThis;
|
|
697
|
+
// eslint-disable-next-line no-restricted-globals
|
|
698
|
+
if (typeof self !== 'undefined')
|
|
699
|
+
return self;
|
|
700
|
+
if (typeof window !== 'undefined')
|
|
701
|
+
return window;
|
|
702
|
+
return global;
|
|
703
|
+
}
|
|
704
|
+
const globalObject = getGlobal();
|
|
705
|
+
const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
|
|
706
|
+
const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
|
|
707
|
+
function hexCharCodesToInt(a, b) {
|
|
708
|
+
return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));
|
|
709
|
+
}
|
|
710
|
+
function writeHexToUInt8(buf, str) {
|
|
711
|
+
const size = str.length >> 1;
|
|
712
|
+
for (let i = 0; i < size; i++) {
|
|
713
|
+
const index = i << 1;
|
|
714
|
+
buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
function hexStringEqualsUInt8(str, buf) {
|
|
718
|
+
if (str.length !== buf.length * 2) {
|
|
719
|
+
return false;
|
|
720
|
+
}
|
|
721
|
+
for (let i = 0; i < buf.length; i++) {
|
|
722
|
+
const strIndex = i << 1;
|
|
723
|
+
if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {
|
|
724
|
+
return false;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
return true;
|
|
728
|
+
}
|
|
729
|
+
const alpha = 'a'.charCodeAt(0) - 10;
|
|
730
|
+
const digit = '0'.charCodeAt(0);
|
|
731
|
+
function getDigestHex(tmpBuffer, input, hashLength) {
|
|
732
|
+
let p = 0;
|
|
733
|
+
/* eslint-disable no-plusplus */
|
|
734
|
+
for (let i = 0; i < hashLength; i++) {
|
|
735
|
+
let nibble = input[i] >>> 4;
|
|
736
|
+
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
737
|
+
nibble = input[i] & 0xF;
|
|
738
|
+
tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
|
|
739
|
+
}
|
|
740
|
+
/* eslint-enable no-plusplus */
|
|
741
|
+
return String.fromCharCode.apply(null, tmpBuffer);
|
|
742
|
+
}
|
|
743
|
+
const getUInt8Buffer = nodeBuffer !== null
|
|
744
|
+
? (data) => {
|
|
745
|
+
if (typeof data === 'string') {
|
|
746
|
+
const buf = nodeBuffer.from(data, 'utf8');
|
|
747
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
|
|
748
|
+
}
|
|
749
|
+
if (nodeBuffer.isBuffer(data)) {
|
|
750
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.length);
|
|
751
|
+
}
|
|
752
|
+
if (ArrayBuffer.isView(data)) {
|
|
753
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
754
|
+
}
|
|
755
|
+
throw new Error('Invalid data type!');
|
|
756
|
+
}
|
|
757
|
+
: (data) => {
|
|
758
|
+
if (typeof data === 'string') {
|
|
759
|
+
return textEncoder.encode(data);
|
|
760
|
+
}
|
|
761
|
+
if (ArrayBuffer.isView(data)) {
|
|
762
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
763
|
+
}
|
|
764
|
+
throw new Error('Invalid data type!');
|
|
765
|
+
};
|
|
766
|
+
const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
767
|
+
const base64Lookup = new Uint8Array(256);
|
|
768
|
+
for (let i = 0; i < base64Chars.length; i++) {
|
|
769
|
+
base64Lookup[base64Chars.charCodeAt(i)] = i;
|
|
770
|
+
}
|
|
771
|
+
function getDecodeBase64Length(data) {
|
|
772
|
+
let bufferLength = Math.floor(data.length * 0.75);
|
|
773
|
+
const len = data.length;
|
|
774
|
+
if (data[len - 1] === '=') {
|
|
775
|
+
bufferLength -= 1;
|
|
776
|
+
if (data[len - 2] === '=') {
|
|
777
|
+
bufferLength -= 1;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
return bufferLength;
|
|
781
|
+
}
|
|
782
|
+
function decodeBase64(data) {
|
|
783
|
+
const bufferLength = getDecodeBase64Length(data);
|
|
784
|
+
const len = data.length;
|
|
785
|
+
const bytes = new Uint8Array(bufferLength);
|
|
786
|
+
let p = 0;
|
|
787
|
+
for (let i = 0; i < len; i += 4) {
|
|
788
|
+
const encoded1 = base64Lookup[data.charCodeAt(i)];
|
|
789
|
+
const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
|
|
790
|
+
const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
|
|
791
|
+
const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
|
|
792
|
+
bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
|
|
793
|
+
p += 1;
|
|
794
|
+
bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
|
795
|
+
p += 1;
|
|
796
|
+
bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
|
797
|
+
p += 1;
|
|
798
|
+
}
|
|
799
|
+
return bytes;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
const MAX_HEAP = 16 * 1024;
|
|
803
|
+
const WASM_FUNC_HASH_LENGTH = 4;
|
|
804
|
+
const wasmMutex = new Mutex();
|
|
805
|
+
const wasmModuleCache = new Map();
|
|
806
|
+
function WASMInterface(binary, hashLength) {
|
|
807
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
808
|
+
let wasmInstance = null;
|
|
809
|
+
let memoryView = null;
|
|
810
|
+
let initialized = false;
|
|
811
|
+
if (typeof WebAssembly === 'undefined') {
|
|
812
|
+
throw new Error('WebAssembly is not supported in this environment!');
|
|
813
|
+
}
|
|
814
|
+
const writeMemory = (data, offset = 0) => {
|
|
815
|
+
memoryView.set(data, offset);
|
|
816
|
+
};
|
|
817
|
+
const getMemory = () => memoryView;
|
|
818
|
+
const getExports = () => wasmInstance.exports;
|
|
819
|
+
const setMemorySize = (totalSize) => {
|
|
820
|
+
wasmInstance.exports.Hash_SetMemorySize(totalSize);
|
|
821
|
+
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
822
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
823
|
+
memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
|
|
824
|
+
};
|
|
825
|
+
const getStateSize = () => {
|
|
826
|
+
const view = new DataView(wasmInstance.exports.memory.buffer);
|
|
827
|
+
const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);
|
|
828
|
+
return stateSize;
|
|
829
|
+
};
|
|
830
|
+
const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
|
|
831
|
+
if (!wasmModuleCache.has(binary.name)) {
|
|
832
|
+
const asm = decodeBase64(binary.data);
|
|
833
|
+
const promise = WebAssembly.compile(asm);
|
|
834
|
+
wasmModuleCache.set(binary.name, promise);
|
|
835
|
+
}
|
|
836
|
+
const module = yield wasmModuleCache.get(binary.name);
|
|
837
|
+
wasmInstance = yield WebAssembly.instantiate(module, {
|
|
838
|
+
// env: {
|
|
839
|
+
// emscripten_memcpy_big: (dest, src, num) => {
|
|
840
|
+
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
841
|
+
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
842
|
+
// memView.set(memView.subarray(src, src + num), dest);
|
|
843
|
+
// },
|
|
844
|
+
// print_memory: (offset, len) => {
|
|
845
|
+
// const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
846
|
+
// const memView = new Uint8Array(memoryBuffer, 0);
|
|
847
|
+
// console.log('print_int32', memView.subarray(offset, offset + len));
|
|
848
|
+
// },
|
|
849
|
+
// },
|
|
850
|
+
});
|
|
851
|
+
// wasmInstance.exports._start();
|
|
852
|
+
}));
|
|
853
|
+
const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
|
|
854
|
+
if (!wasmInstance) {
|
|
855
|
+
yield loadWASMPromise;
|
|
856
|
+
}
|
|
857
|
+
const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
|
|
858
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
859
|
+
memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
|
|
860
|
+
});
|
|
861
|
+
const init = (bits = null) => {
|
|
862
|
+
initialized = true;
|
|
863
|
+
wasmInstance.exports.Hash_Init(bits);
|
|
864
|
+
};
|
|
865
|
+
const updateUInt8Array = (data) => {
|
|
866
|
+
let read = 0;
|
|
867
|
+
while (read < data.length) {
|
|
868
|
+
const chunk = data.subarray(read, read + MAX_HEAP);
|
|
869
|
+
read += chunk.length;
|
|
870
|
+
memoryView.set(chunk);
|
|
871
|
+
wasmInstance.exports.Hash_Update(chunk.length);
|
|
872
|
+
}
|
|
873
|
+
};
|
|
874
|
+
const update = (data) => {
|
|
875
|
+
if (!initialized) {
|
|
876
|
+
throw new Error('update() called before init()');
|
|
877
|
+
}
|
|
878
|
+
const Uint8Buffer = getUInt8Buffer(data);
|
|
879
|
+
updateUInt8Array(Uint8Buffer);
|
|
880
|
+
};
|
|
881
|
+
const digestChars = new Uint8Array(hashLength * 2);
|
|
882
|
+
const digest = (outputType, padding = null) => {
|
|
883
|
+
if (!initialized) {
|
|
884
|
+
throw new Error('digest() called before init()');
|
|
885
|
+
}
|
|
886
|
+
initialized = false;
|
|
887
|
+
wasmInstance.exports.Hash_Final(padding);
|
|
888
|
+
if (outputType === 'binary') {
|
|
889
|
+
// the data is copied to allow GC of the original memory object
|
|
890
|
+
return memoryView.slice(0, hashLength);
|
|
891
|
+
}
|
|
892
|
+
return getDigestHex(digestChars, memoryView, hashLength);
|
|
893
|
+
};
|
|
894
|
+
const save = () => {
|
|
895
|
+
if (!initialized) {
|
|
896
|
+
throw new Error('save() can only be called after init() and before digest()');
|
|
897
|
+
}
|
|
898
|
+
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
899
|
+
const stateLength = getStateSize();
|
|
900
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
901
|
+
const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
|
|
902
|
+
// prefix is 4 bytes from SHA1 hash of the WASM binary
|
|
903
|
+
// it is used to detect incompatible internal states between different versions of hash-wasm
|
|
904
|
+
const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
|
|
905
|
+
writeHexToUInt8(prefixedState, binary.hash);
|
|
906
|
+
prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
|
|
907
|
+
return prefixedState;
|
|
908
|
+
};
|
|
909
|
+
const load = (state) => {
|
|
910
|
+
if (!(state instanceof Uint8Array)) {
|
|
911
|
+
throw new Error('load() expects an Uint8Array generated by save()');
|
|
912
|
+
}
|
|
913
|
+
const stateOffset = wasmInstance.exports.Hash_GetState();
|
|
914
|
+
const stateLength = getStateSize();
|
|
915
|
+
const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
|
|
916
|
+
const memoryBuffer = wasmInstance.exports.memory.buffer;
|
|
917
|
+
if (state.length !== overallLength) {
|
|
918
|
+
throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
|
|
919
|
+
}
|
|
920
|
+
if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {
|
|
921
|
+
throw new Error('This state was written by an incompatible hash implementation');
|
|
922
|
+
}
|
|
923
|
+
const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
|
|
924
|
+
new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
|
|
925
|
+
initialized = true;
|
|
926
|
+
};
|
|
927
|
+
const isDataShort = (data) => {
|
|
928
|
+
if (typeof data === 'string') {
|
|
929
|
+
// worst case is 4 bytes / char
|
|
930
|
+
return data.length < MAX_HEAP / 4;
|
|
931
|
+
}
|
|
932
|
+
return data.byteLength < MAX_HEAP;
|
|
933
|
+
};
|
|
934
|
+
let canSimplify = isDataShort;
|
|
935
|
+
switch (binary.name) {
|
|
936
|
+
case 'argon2':
|
|
937
|
+
case 'scrypt':
|
|
938
|
+
canSimplify = () => true;
|
|
939
|
+
break;
|
|
940
|
+
case 'blake2b':
|
|
941
|
+
case 'blake2s':
|
|
942
|
+
// if there is a key at blake2 then cannot simplify
|
|
943
|
+
canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
|
|
944
|
+
break;
|
|
945
|
+
case 'blake3':
|
|
946
|
+
// if there is a key at blake3 then cannot simplify
|
|
947
|
+
canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
|
|
948
|
+
break;
|
|
949
|
+
case 'xxhash64': // cannot simplify
|
|
950
|
+
case 'xxhash3':
|
|
951
|
+
case 'xxhash128':
|
|
952
|
+
canSimplify = () => false;
|
|
953
|
+
break;
|
|
954
|
+
}
|
|
955
|
+
// shorthand for (init + update + digest) for better performance
|
|
956
|
+
const calculate = (data, initParam = null, digestParam = null) => {
|
|
957
|
+
if (!canSimplify(data, initParam)) {
|
|
958
|
+
init(initParam);
|
|
959
|
+
update(data);
|
|
960
|
+
return digest('hex', digestParam);
|
|
961
|
+
}
|
|
962
|
+
const buffer = getUInt8Buffer(data);
|
|
963
|
+
memoryView.set(buffer);
|
|
964
|
+
wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
|
|
965
|
+
return getDigestHex(digestChars, memoryView, hashLength);
|
|
966
|
+
};
|
|
967
|
+
yield setupInterface();
|
|
968
|
+
return {
|
|
969
|
+
getMemory,
|
|
970
|
+
writeMemory,
|
|
971
|
+
getExports,
|
|
972
|
+
setMemorySize,
|
|
973
|
+
init,
|
|
974
|
+
update,
|
|
975
|
+
digest,
|
|
976
|
+
save,
|
|
977
|
+
load,
|
|
978
|
+
calculate,
|
|
979
|
+
hashLength,
|
|
980
|
+
};
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
new Mutex();
|
|
985
|
+
|
|
986
|
+
new Mutex();
|
|
987
|
+
|
|
988
|
+
new Mutex();
|
|
989
|
+
|
|
990
|
+
new Mutex();
|
|
991
|
+
|
|
992
|
+
new Mutex();
|
|
993
|
+
|
|
994
|
+
new Mutex();
|
|
995
|
+
|
|
996
|
+
new Mutex();
|
|
997
|
+
|
|
998
|
+
new Mutex();
|
|
999
|
+
|
|
1000
|
+
new Mutex();
|
|
1001
|
+
|
|
1002
|
+
var name$b = "sha3";
|
|
1003
|
+
var data$b = "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";
|
|
1004
|
+
var hash$b = "ec266d91";
|
|
1005
|
+
var wasmJson$b = {
|
|
1006
|
+
name: name$b,
|
|
1007
|
+
data: data$b,
|
|
1008
|
+
hash: hash$b
|
|
1009
|
+
};
|
|
1010
|
+
|
|
1011
|
+
new Mutex();
|
|
1012
|
+
|
|
1013
|
+
new Mutex();
|
|
1014
|
+
function validateBits(bits) {
|
|
1015
|
+
if (![224, 256, 384, 512].includes(bits)) {
|
|
1016
|
+
return new Error('Invalid variant! Valid values: 224, 256, 384, 512');
|
|
1017
|
+
}
|
|
1018
|
+
return null;
|
|
1019
|
+
}
|
|
1020
|
+
/**
|
|
1021
|
+
* Creates a new Keccak hash instance
|
|
1022
|
+
* @param bits Number of output bits. Valid values: 224, 256, 384, 512
|
|
1023
|
+
*/
|
|
1024
|
+
function createKeccak(bits = 512) {
|
|
1025
|
+
if (validateBits(bits)) {
|
|
1026
|
+
return Promise.reject(validateBits(bits));
|
|
1027
|
+
}
|
|
1028
|
+
const outputSize = bits / 8;
|
|
1029
|
+
return WASMInterface(wasmJson$b, outputSize).then((wasm) => {
|
|
1030
|
+
wasm.init(bits);
|
|
1031
|
+
const obj = {
|
|
1032
|
+
init: () => { wasm.init(bits); return obj; },
|
|
1033
|
+
update: (data) => { wasm.update(data); return obj; },
|
|
1034
|
+
digest: (outputType) => wasm.digest(outputType, 0x01),
|
|
1035
|
+
save: () => wasm.save(),
|
|
1036
|
+
load: (data) => { wasm.load(data); return obj; },
|
|
1037
|
+
blockSize: 200 - 2 * outputSize,
|
|
1038
|
+
digestSize: outputSize,
|
|
1039
|
+
};
|
|
1040
|
+
return obj;
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
new Mutex();
|
|
1045
|
+
|
|
1046
|
+
new Mutex();
|
|
1047
|
+
|
|
1048
|
+
new Mutex();
|
|
1049
|
+
|
|
1050
|
+
new Mutex();
|
|
1051
|
+
|
|
1052
|
+
new Mutex();
|
|
1053
|
+
|
|
1054
|
+
new Mutex();
|
|
1055
|
+
|
|
1056
|
+
new Mutex();
|
|
1057
|
+
|
|
1058
|
+
new Mutex();
|
|
1059
|
+
|
|
1060
|
+
new Mutex();
|
|
1061
|
+
|
|
1062
|
+
new Mutex();
|
|
1063
|
+
|
|
1064
|
+
new Mutex();
|
|
1065
|
+
|
|
1066
|
+
var encode_1 = encode;
|
|
1067
|
+
|
|
1068
|
+
var MSB$1 = 0x80
|
|
1069
|
+
, REST$1 = 0x7F
|
|
1070
|
+
, MSBALL = ~REST$1
|
|
1071
|
+
, INT = Math.pow(2, 31);
|
|
1072
|
+
|
|
1073
|
+
function encode(num, out, offset) {
|
|
1074
|
+
if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
|
|
1075
|
+
encode.bytes = 0;
|
|
1076
|
+
throw new RangeError('Could not encode varint')
|
|
1077
|
+
}
|
|
1078
|
+
out = out || [];
|
|
1079
|
+
offset = offset || 0;
|
|
1080
|
+
var oldOffset = offset;
|
|
1081
|
+
|
|
1082
|
+
while(num >= INT) {
|
|
1083
|
+
out[offset++] = (num & 0xFF) | MSB$1;
|
|
1084
|
+
num /= 128;
|
|
1085
|
+
}
|
|
1086
|
+
while(num & MSBALL) {
|
|
1087
|
+
out[offset++] = (num & 0xFF) | MSB$1;
|
|
1088
|
+
num >>>= 7;
|
|
1089
|
+
}
|
|
1090
|
+
out[offset] = num | 0;
|
|
1091
|
+
|
|
1092
|
+
encode.bytes = offset - oldOffset + 1;
|
|
1093
|
+
|
|
1094
|
+
return out
|
|
137
1095
|
}
|
|
138
1096
|
|
|
1097
|
+
var decode = read;
|
|
1098
|
+
|
|
1099
|
+
var MSB = 0x80
|
|
1100
|
+
, REST = 0x7F;
|
|
1101
|
+
|
|
1102
|
+
function read(buf, offset) {
|
|
1103
|
+
var res = 0
|
|
1104
|
+
, offset = offset || 0
|
|
1105
|
+
, shift = 0
|
|
1106
|
+
, counter = offset
|
|
1107
|
+
, b
|
|
1108
|
+
, l = buf.length;
|
|
1109
|
+
|
|
1110
|
+
do {
|
|
1111
|
+
if (counter >= l || shift > 49) {
|
|
1112
|
+
read.bytes = 0;
|
|
1113
|
+
throw new RangeError('Could not decode varint')
|
|
1114
|
+
}
|
|
1115
|
+
b = buf[counter++];
|
|
1116
|
+
res += shift < 28
|
|
1117
|
+
? (b & REST) << shift
|
|
1118
|
+
: (b & REST) * Math.pow(2, shift);
|
|
1119
|
+
shift += 7;
|
|
1120
|
+
} while (b >= MSB)
|
|
1121
|
+
|
|
1122
|
+
read.bytes = counter - offset;
|
|
1123
|
+
|
|
1124
|
+
return res
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
var N1 = Math.pow(2, 7);
|
|
1128
|
+
var N2 = Math.pow(2, 14);
|
|
1129
|
+
var N3 = Math.pow(2, 21);
|
|
1130
|
+
var N4 = Math.pow(2, 28);
|
|
1131
|
+
var N5 = Math.pow(2, 35);
|
|
1132
|
+
var N6 = Math.pow(2, 42);
|
|
1133
|
+
var N7 = Math.pow(2, 49);
|
|
1134
|
+
var N8 = Math.pow(2, 56);
|
|
1135
|
+
var N9 = Math.pow(2, 63);
|
|
1136
|
+
|
|
1137
|
+
var length = function (value) {
|
|
1138
|
+
return (
|
|
1139
|
+
value < N1 ? 1
|
|
1140
|
+
: value < N2 ? 2
|
|
1141
|
+
: value < N3 ? 3
|
|
1142
|
+
: value < N4 ? 4
|
|
1143
|
+
: value < N5 ? 5
|
|
1144
|
+
: value < N6 ? 6
|
|
1145
|
+
: value < N7 ? 7
|
|
1146
|
+
: value < N8 ? 8
|
|
1147
|
+
: value < N9 ? 9
|
|
1148
|
+
: 10
|
|
1149
|
+
)
|
|
1150
|
+
};
|
|
1151
|
+
|
|
1152
|
+
var varint = {
|
|
1153
|
+
encode: encode_1
|
|
1154
|
+
, decode: decode
|
|
1155
|
+
, encodingLength: length
|
|
1156
|
+
};
|
|
1157
|
+
|
|
139
1158
|
var codecs = {
|
|
140
1159
|
// just a hash
|
|
141
1160
|
'disco-hash': {
|
|
@@ -224,125 +1243,138 @@ var codecs = {
|
|
|
224
1243
|
}
|
|
225
1244
|
};
|
|
226
1245
|
|
|
227
|
-
class
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
1246
|
+
var Codec$1 = /** @class */ (function (_super) {
|
|
1247
|
+
__extends(Codec, _super);
|
|
1248
|
+
function Codec(buffer) {
|
|
1249
|
+
var _this = _super.call(this) || this;
|
|
1250
|
+
if (buffer) {
|
|
1251
|
+
if (buffer instanceof Uint8Array) {
|
|
1252
|
+
var codec = varint.decode(buffer);
|
|
1253
|
+
var name_1 = _this.getCodecName(codec);
|
|
1254
|
+
if (name_1) {
|
|
1255
|
+
_this.name = name_1;
|
|
1256
|
+
_this.encoded = buffer;
|
|
1257
|
+
_this.decode(buffer);
|
|
1258
|
+
}
|
|
1259
|
+
else {
|
|
1260
|
+
_this.encode(buffer);
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
else if (buffer instanceof ArrayBuffer) {
|
|
1264
|
+
var encoded = new Uint8Array(buffer.byteLength);
|
|
1265
|
+
for (var i = 0; i < buffer.byteLength; i++) {
|
|
1266
|
+
encoded[i] = buffer[i];
|
|
1267
|
+
}
|
|
1268
|
+
_this.encoded = encoded;
|
|
1269
|
+
// this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength)
|
|
1270
|
+
_this.decode(buffer);
|
|
1271
|
+
return _this;
|
|
1272
|
+
}
|
|
1273
|
+
if (typeof buffer === 'string') {
|
|
1274
|
+
if (_this.codecs[buffer])
|
|
1275
|
+
_this.fromName(buffer);
|
|
1276
|
+
else if (_this.isHex(buffer))
|
|
1277
|
+
_this.fromHex(buffer);
|
|
1278
|
+
else if (_this.isBase32(buffer))
|
|
1279
|
+
_this.fromBs32(buffer);
|
|
1280
|
+
else if (_this.isBase58(buffer))
|
|
1281
|
+
_this.fromBs58(buffer);
|
|
1282
|
+
else
|
|
1283
|
+
throw new Error("unsupported string ".concat(buffer));
|
|
1284
|
+
}
|
|
1285
|
+
if (!isNaN(buffer))
|
|
1286
|
+
if (_this.codecs[_this.getCodecName(buffer)])
|
|
1287
|
+
_this.fromCodec(buffer);
|
|
249
1288
|
}
|
|
250
|
-
|
|
251
|
-
// this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength)
|
|
252
|
-
this.decode(buffer);
|
|
253
|
-
return
|
|
254
|
-
}
|
|
255
|
-
if (typeof buffer === 'string') {
|
|
256
|
-
if (this.codecs[buffer]) this.fromName(buffer);
|
|
257
|
-
else if (this.isHex(buffer)) this.fromHex(buffer);
|
|
258
|
-
else if (this.isBase32(buffer)) this.fromBs32(buffer);
|
|
259
|
-
else if (this.isBase58(buffer)) this.fromBs58(buffer);
|
|
260
|
-
else throw new Error(`unsupported string ${buffer}`)
|
|
261
|
-
}
|
|
262
|
-
if (!isNaN(buffer)) if (this.codecs[this.getCodecName(buffer)]) this.fromCodec(buffer);
|
|
1289
|
+
return _this;
|
|
263
1290
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
1291
|
+
Object.defineProperty(Codec.prototype, "codecs", {
|
|
1292
|
+
get: function () {
|
|
1293
|
+
return __assign(__assign({}, globalThis.peernet.codecs), codecs);
|
|
1294
|
+
},
|
|
1295
|
+
enumerable: false,
|
|
1296
|
+
configurable: true
|
|
1297
|
+
});
|
|
1298
|
+
Codec.prototype.fromEncoded = function (encoded) {
|
|
1299
|
+
var codec = varint.decode(encoded);
|
|
1300
|
+
var name = this.getCodecName(codec);
|
|
1301
|
+
this.name = name;
|
|
1302
|
+
this.encoded = encoded;
|
|
1303
|
+
this.decode(encoded);
|
|
1304
|
+
};
|
|
1305
|
+
Codec.prototype.getCodec = function (name) {
|
|
1306
|
+
return this.codecs[name].codec;
|
|
1307
|
+
};
|
|
1308
|
+
Codec.prototype.getCodecName = function (codec) {
|
|
1309
|
+
var _this = this;
|
|
1310
|
+
return Object.keys(this.codecs).reduce(function (p, c) {
|
|
1311
|
+
var item = _this.codecs[c];
|
|
1312
|
+
if (item.codec === codec)
|
|
1313
|
+
return c;
|
|
1314
|
+
else
|
|
1315
|
+
return p;
|
|
1316
|
+
}, undefined);
|
|
1317
|
+
};
|
|
1318
|
+
Codec.prototype.getHashAlg = function (name) {
|
|
1319
|
+
return this.codecs[name].hashAlg;
|
|
1320
|
+
};
|
|
1321
|
+
Codec.prototype.fromCodec = function (codec) {
|
|
1322
|
+
this.name = this.getCodecName(codec);
|
|
1323
|
+
this.hashAlg = this.getHashAlg(this.name);
|
|
1324
|
+
this.codec = this.getCodec(this.name);
|
|
1325
|
+
this.codecBuffer = varint.encode(codec);
|
|
1326
|
+
};
|
|
1327
|
+
Codec.prototype.fromName = function (name) {
|
|
1328
|
+
var codec = this.getCodec(name);
|
|
1329
|
+
this.name = name;
|
|
1330
|
+
this.codec = codec;
|
|
1331
|
+
this.hashAlg = this.getHashAlg(name);
|
|
1332
|
+
this.codecBuffer = varint.encode(codec);
|
|
1333
|
+
};
|
|
1334
|
+
Codec.prototype.decode = function () {
|
|
1335
|
+
var codec = varint.decode(this.encoded);
|
|
1336
|
+
this.fromCodec(codec);
|
|
1337
|
+
};
|
|
1338
|
+
Codec.prototype.encode = function () {
|
|
1339
|
+
var codec = varint.encode(this.decoded);
|
|
1340
|
+
this.encoded = codec;
|
|
1341
|
+
return this.encoded;
|
|
1342
|
+
};
|
|
1343
|
+
return Codec;
|
|
1344
|
+
}(BasicInterface$1));
|
|
317
1345
|
|
|
318
|
-
|
|
1346
|
+
let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
319
1347
|
constructor(buffer, options = {}) {
|
|
320
1348
|
super();
|
|
321
1349
|
if (options.name) this.name = options.name;
|
|
322
1350
|
else this.name = 'disco-hash';
|
|
323
1351
|
if (options.codecs) this.codecs = options.codecs;
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
1352
|
+
return this.init(buffer)
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
async init(uint8Array) {
|
|
1356
|
+
if (uint8Array) {
|
|
1357
|
+
if (uint8Array instanceof Uint8Array) {
|
|
1358
|
+
this.discoCodec = new Codec$1(uint8Array, this.codecs);
|
|
327
1359
|
const name = this.discoCodec.name;
|
|
328
1360
|
|
|
329
1361
|
if (name) {
|
|
330
1362
|
this.name = name;
|
|
331
|
-
this.decode(
|
|
1363
|
+
this.decode(uint8Array);
|
|
332
1364
|
} else {
|
|
333
|
-
this.encode(
|
|
1365
|
+
await this.encode(uint8Array);
|
|
334
1366
|
}
|
|
335
1367
|
}
|
|
336
1368
|
|
|
337
|
-
if (typeof
|
|
338
|
-
if (this.isHex(
|
|
339
|
-
if (this.isBase32(
|
|
340
|
-
else if (this.isBase58(
|
|
341
|
-
else throw new Error(`unsupported string ${
|
|
342
|
-
} else if (typeof
|
|
1369
|
+
if (typeof uint8Array === 'string') {
|
|
1370
|
+
if (this.isHex(uint8Array)) await this.fromHex(uint8Array);
|
|
1371
|
+
if (this.isBase32(uint8Array)) await this.fromBs32(uint8Array);
|
|
1372
|
+
else if (this.isBase58(uint8Array)) await this.fromBs58(uint8Array);
|
|
1373
|
+
else throw new Error(`unsupported string ${uint8Array}`)
|
|
1374
|
+
} else if (typeof uint8Array === 'object') await this.fromJSON(uint8Array);
|
|
343
1375
|
}
|
|
1376
|
+
return this
|
|
344
1377
|
}
|
|
345
|
-
|
|
346
1378
|
get prefix() {
|
|
347
1379
|
const length = this.length;
|
|
348
1380
|
const uint8Array = new Uint8Array(length.length + this.discoCodec.codecBuffer.length);
|
|
@@ -353,7 +1385,7 @@ class CodecHash$1 extends BasicInterface$1 {
|
|
|
353
1385
|
}
|
|
354
1386
|
|
|
355
1387
|
get length() {
|
|
356
|
-
return
|
|
1388
|
+
return varint.encode(this.size)
|
|
357
1389
|
}
|
|
358
1390
|
|
|
359
1391
|
get buffer() {
|
|
@@ -368,17 +1400,25 @@ class CodecHash$1 extends BasicInterface$1 {
|
|
|
368
1400
|
return this.encode(Buffer.from(JSON.stringify(json)))
|
|
369
1401
|
}
|
|
370
1402
|
|
|
371
|
-
encode(buffer, name) {
|
|
1403
|
+
async encode(buffer, name) {
|
|
372
1404
|
if (!this.name && name) this.name = name;
|
|
373
1405
|
if (!buffer) buffer = this.buffer;
|
|
374
|
-
this.discoCodec = new
|
|
1406
|
+
this.discoCodec = new Codec$1(this.name, this.codecs);
|
|
375
1407
|
this.discoCodec.fromName(this.name);
|
|
376
1408
|
let hashAlg = this.discoCodec.hashAlg;
|
|
1409
|
+
const hashVariant = Number(hashAlg.split('-')[hashAlg.split('-').length - 1]);
|
|
1410
|
+
|
|
377
1411
|
if (hashAlg.includes('dbl')) {
|
|
378
1412
|
hashAlg = hashAlg.replace('dbl-', '');
|
|
379
|
-
|
|
1413
|
+
const hasher = await createKeccak(hashVariant);
|
|
1414
|
+
await hasher.init();
|
|
1415
|
+
hasher.update(buffer);
|
|
1416
|
+
buffer = hasher.digest('binary');
|
|
380
1417
|
}
|
|
381
|
-
|
|
1418
|
+
const hasher = await createKeccak(hashVariant);
|
|
1419
|
+
await hasher.init();
|
|
1420
|
+
hasher.update(buffer);
|
|
1421
|
+
this.digest = hasher.digest('binary');
|
|
382
1422
|
this.size = this.digest.length;
|
|
383
1423
|
|
|
384
1424
|
this.codec = this.discoCodec.encode();
|
|
@@ -392,13 +1432,13 @@ class CodecHash$1 extends BasicInterface$1 {
|
|
|
392
1432
|
return this.encoded
|
|
393
1433
|
}
|
|
394
1434
|
|
|
395
|
-
validate(buffer) {
|
|
1435
|
+
async validate(buffer) {
|
|
396
1436
|
if (Buffer.isBuffer(buffer)) {
|
|
397
|
-
const codec =
|
|
1437
|
+
const codec = varint.decode(buffer);
|
|
398
1438
|
if (this.codecs[codec]) {
|
|
399
1439
|
this.decode(buffer);
|
|
400
1440
|
} else {
|
|
401
|
-
this.encode(buffer);
|
|
1441
|
+
await this.encode(buffer);
|
|
402
1442
|
}
|
|
403
1443
|
}
|
|
404
1444
|
if (typeof buffer === 'string') {
|
|
@@ -410,13 +1450,13 @@ class CodecHash$1 extends BasicInterface$1 {
|
|
|
410
1450
|
|
|
411
1451
|
decode(buffer) {
|
|
412
1452
|
this.encoded = buffer;
|
|
413
|
-
const codec =
|
|
1453
|
+
const codec = varint.decode(buffer);
|
|
414
1454
|
|
|
415
|
-
this.discoCodec = new
|
|
1455
|
+
this.discoCodec = new Codec$1(codec, this.codecs);
|
|
416
1456
|
// TODO: validate codec
|
|
417
|
-
buffer = buffer.slice(
|
|
418
|
-
this.size =
|
|
419
|
-
this.digest = buffer.slice(
|
|
1457
|
+
buffer = buffer.slice(varint.decode.bytes);
|
|
1458
|
+
this.size = varint.decode(buffer);
|
|
1459
|
+
this.digest = buffer.slice(varint.decode.bytes);
|
|
420
1460
|
if (this.digest.length !== this.size) {
|
|
421
1461
|
throw new Error(`hash length inconsistent: 0x${this.encoded.toString('hex')}`)
|
|
422
1462
|
}
|
|
@@ -436,129 +1476,180 @@ class CodecHash$1 extends BasicInterface$1 {
|
|
|
436
1476
|
digest: this.digest,
|
|
437
1477
|
}
|
|
438
1478
|
}
|
|
439
|
-
}
|
|
1479
|
+
};
|
|
440
1480
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
else if (buffer?.name === this.name) return buffer
|
|
457
|
-
else if (buffer instanceof String) {
|
|
458
|
-
if (this.isHex(buffer)) await this.fromHex(buffer);
|
|
459
|
-
else if (this.isBase32(buffer)) await this.fromBs32(buffer);
|
|
460
|
-
else if (this.isBase58(buffer)) await this.fromBs58(buffer);
|
|
461
|
-
else throw new Error(`unsupported string ${buffer}`)
|
|
462
|
-
} else {
|
|
463
|
-
await this.create(buffer);
|
|
464
|
-
}
|
|
465
|
-
return this
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* @param {Buffer|String|Object} buffer - data - The data needed to create the desired message
|
|
470
|
-
* @param {Object} proto - {encode, decode}
|
|
471
|
-
* @param {Object} options - {hashFormat, name}
|
|
472
|
-
*/
|
|
473
|
-
constructor(buffer, proto, options = {}) {
|
|
474
|
-
super();
|
|
475
|
-
this.proto = proto;
|
|
476
|
-
this.hashFormat = options.hashFormat || 'bs32';
|
|
477
|
-
if (options.name) this.name = options.name;
|
|
478
|
-
return this.init(buffer)
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* @return {PeernetHash}
|
|
483
|
-
*/
|
|
484
|
-
get peernetHash() {
|
|
485
|
-
return new CodecHash$1(this.decoded, {name: this.name})
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
/**
|
|
489
|
-
* @return {peernetHash}
|
|
490
|
-
*/
|
|
491
|
-
get hash() {
|
|
492
|
-
const upper = this.hashFormat.charAt(0).toUpperCase();
|
|
493
|
-
const format = `${upper}${this.hashFormat.substring(1, this.hashFormat.length)}`;
|
|
494
|
-
return this.peernetHash[`to${format}`]()
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
498
|
-
* @return {Object}
|
|
499
|
-
*/
|
|
500
|
-
async decode() {
|
|
501
|
-
let encoded = this.encoded;
|
|
502
|
-
const discoCodec = new PeernetCodec(this.encoded);
|
|
503
|
-
encoded = encoded.slice(discoCodec.codecBuffer.length);
|
|
504
|
-
this.name = discoCodec.name;
|
|
505
|
-
this.decoded = await this.protoDecode(encoded);
|
|
506
|
-
try {
|
|
507
|
-
this.decoded = JSON.parse(this.decoded);
|
|
508
|
-
} catch {
|
|
509
|
-
|
|
1481
|
+
var FormatInterface$1 = /** @class */ (function (_super) {
|
|
1482
|
+
__extends(FormatInterface, _super);
|
|
1483
|
+
/**
|
|
1484
|
+
* @param {Buffer|String|Object} buffer - data - The data needed to create the desired message
|
|
1485
|
+
* @param {Object} proto - {encode, decode}
|
|
1486
|
+
* @param {Object} options - {hashFormat, name}
|
|
1487
|
+
*/
|
|
1488
|
+
function FormatInterface(buffer, proto, options) {
|
|
1489
|
+
if (options === void 0) { options = {}; }
|
|
1490
|
+
var _this = _super.call(this) || this;
|
|
1491
|
+
_this.proto = proto;
|
|
1492
|
+
_this.hashFormat = options.hashFormat || 'bs32';
|
|
1493
|
+
if (options.name)
|
|
1494
|
+
_this.name = options.name;
|
|
1495
|
+
return _this.init(buffer);
|
|
510
1496
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
1497
|
+
FormatInterface.prototype.init = function (buffer) {
|
|
1498
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
1499
|
+
return __generator(this, function (_a) {
|
|
1500
|
+
switch (_a.label) {
|
|
1501
|
+
case 0:
|
|
1502
|
+
if (!(buffer instanceof Uint8Array)) return [3 /*break*/, 2];
|
|
1503
|
+
return [4 /*yield*/, this.fromUint8Array(buffer)];
|
|
1504
|
+
case 1:
|
|
1505
|
+
_a.sent();
|
|
1506
|
+
return [3 /*break*/, 15];
|
|
1507
|
+
case 2:
|
|
1508
|
+
if (!(buffer instanceof ArrayBuffer)) return [3 /*break*/, 4];
|
|
1509
|
+
return [4 /*yield*/, this.fromArrayBuffer(buffer)];
|
|
1510
|
+
case 3:
|
|
1511
|
+
_a.sent();
|
|
1512
|
+
return [3 /*break*/, 15];
|
|
1513
|
+
case 4:
|
|
1514
|
+
if (!((buffer === null || buffer === void 0 ? void 0 : buffer.name) === this.name)) return [3 /*break*/, 5];
|
|
1515
|
+
return [2 /*return*/, buffer];
|
|
1516
|
+
case 5:
|
|
1517
|
+
if (!(buffer instanceof String)) return [3 /*break*/, 13];
|
|
1518
|
+
if (!this.isHex(buffer)) return [3 /*break*/, 7];
|
|
1519
|
+
return [4 /*yield*/, this.fromHex(buffer)];
|
|
1520
|
+
case 6:
|
|
1521
|
+
_a.sent();
|
|
1522
|
+
return [3 /*break*/, 12];
|
|
1523
|
+
case 7:
|
|
1524
|
+
if (!this.isBase32(buffer)) return [3 /*break*/, 9];
|
|
1525
|
+
return [4 /*yield*/, this.fromBs32(buffer)];
|
|
1526
|
+
case 8:
|
|
1527
|
+
_a.sent();
|
|
1528
|
+
return [3 /*break*/, 12];
|
|
1529
|
+
case 9:
|
|
1530
|
+
if (!this.isBase58(buffer)) return [3 /*break*/, 11];
|
|
1531
|
+
return [4 /*yield*/, this.fromBs58(buffer)];
|
|
1532
|
+
case 10:
|
|
1533
|
+
_a.sent();
|
|
1534
|
+
return [3 /*break*/, 12];
|
|
1535
|
+
case 11: throw new Error("unsupported string ".concat(buffer));
|
|
1536
|
+
case 12: return [3 /*break*/, 15];
|
|
1537
|
+
case 13: return [4 /*yield*/, this.create(buffer)];
|
|
1538
|
+
case 14:
|
|
1539
|
+
_a.sent();
|
|
1540
|
+
_a.label = 15;
|
|
1541
|
+
case 15: return [2 /*return*/, this];
|
|
1542
|
+
}
|
|
1543
|
+
});
|
|
1544
|
+
});
|
|
1545
|
+
};
|
|
1546
|
+
FormatInterface.prototype.hasCodec = function () {
|
|
1547
|
+
if (!this.encoded)
|
|
1548
|
+
return false;
|
|
1549
|
+
var codec = new Codec$1(this.encoded);
|
|
1550
|
+
if (codec.name)
|
|
1551
|
+
return true;
|
|
1552
|
+
};
|
|
1553
|
+
FormatInterface.prototype.decode = function () {
|
|
1554
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
1555
|
+
var encoded, codec, _a;
|
|
1556
|
+
return __generator(this, function (_b) {
|
|
1557
|
+
switch (_b.label) {
|
|
1558
|
+
case 0:
|
|
1559
|
+
encoded = this.encoded;
|
|
1560
|
+
codec = new Codec$1(this.encoded);
|
|
1561
|
+
if (!codec.codecBuffer) return [3 /*break*/, 2];
|
|
1562
|
+
encoded = encoded.slice(codec.codecBuffer.length);
|
|
1563
|
+
this.name = codec.name;
|
|
1564
|
+
_a = this;
|
|
1565
|
+
return [4 /*yield*/, this.protoDecode(encoded)];
|
|
1566
|
+
case 1:
|
|
1567
|
+
_a.decoded = _b.sent();
|
|
1568
|
+
try {
|
|
1569
|
+
this.decoded = JSON.parse(this.decoded);
|
|
1570
|
+
}
|
|
1571
|
+
catch (_c) {
|
|
1572
|
+
}
|
|
1573
|
+
return [3 /*break*/, 3];
|
|
1574
|
+
case 2: throw new Error("no codec found");
|
|
1575
|
+
case 3: return [2 /*return*/, this.decoded];
|
|
1576
|
+
}
|
|
1577
|
+
});
|
|
1578
|
+
});
|
|
1579
|
+
};
|
|
1580
|
+
FormatInterface.prototype.encode = function (decoded) {
|
|
1581
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
1582
|
+
var encoded, codec, uint8Array;
|
|
1583
|
+
return __generator(this, function (_a) {
|
|
1584
|
+
switch (_a.label) {
|
|
1585
|
+
case 0:
|
|
1586
|
+
if (!decoded)
|
|
1587
|
+
decoded = this.decoded;
|
|
1588
|
+
codec = new Codec$1(this.name);
|
|
1589
|
+
if (!(decoded instanceof Uint8Array)) return [3 /*break*/, 1];
|
|
1590
|
+
encoded = decoded;
|
|
1591
|
+
return [3 /*break*/, 3];
|
|
1592
|
+
case 1: return [4 /*yield*/, this.protoEncode(typeof decoded === 'object' ? JSON.stringify(decoded) : decoded)];
|
|
1593
|
+
case 2:
|
|
1594
|
+
encoded = _a.sent();
|
|
1595
|
+
_a.label = 3;
|
|
1596
|
+
case 3:
|
|
1597
|
+
if (codec.codecBuffer) {
|
|
1598
|
+
uint8Array = new Uint8Array(encoded.length + codec.codecBuffer.length);
|
|
1599
|
+
uint8Array.set(codec.codecBuffer);
|
|
1600
|
+
uint8Array.set(encoded, codec.codecBuffer.length);
|
|
1601
|
+
this.encoded = uint8Array;
|
|
1602
|
+
}
|
|
1603
|
+
else {
|
|
1604
|
+
throw new Error("invalid codec");
|
|
1605
|
+
}
|
|
1606
|
+
return [2 /*return*/, this.encoded];
|
|
1607
|
+
}
|
|
1608
|
+
});
|
|
1609
|
+
});
|
|
1610
|
+
};
|
|
1611
|
+
Object.defineProperty(FormatInterface.prototype, "peernetHash", {
|
|
1612
|
+
/**
|
|
1613
|
+
* @return {PeernetHash}
|
|
1614
|
+
*/
|
|
1615
|
+
get: function () {
|
|
1616
|
+
return new CodecHash$1(this.decoded, { name: this.name });
|
|
1617
|
+
},
|
|
1618
|
+
enumerable: false,
|
|
1619
|
+
configurable: true
|
|
1620
|
+
});
|
|
1621
|
+
/**
|
|
1622
|
+
* @return {peernetHash}
|
|
1623
|
+
*/
|
|
1624
|
+
FormatInterface.prototype.hash = function () {
|
|
1625
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
1626
|
+
var upper, format;
|
|
1627
|
+
return __generator(this, function (_a) {
|
|
1628
|
+
switch (_a.label) {
|
|
1629
|
+
case 0:
|
|
1630
|
+
upper = this.hashFormat.charAt(0).toUpperCase();
|
|
1631
|
+
format = "".concat(upper).concat(this.hashFormat.substring(1, this.hashFormat.length));
|
|
1632
|
+
return [4 /*yield*/, this.peernetHash];
|
|
1633
|
+
case 1: return [2 /*return*/, (_a.sent())["to".concat(format)]()];
|
|
1634
|
+
}
|
|
1635
|
+
});
|
|
1636
|
+
});
|
|
1637
|
+
};
|
|
1638
|
+
FormatInterface.prototype.fromUint8Array = function (buffer) {
|
|
1639
|
+
this.encoded = buffer;
|
|
1640
|
+
return this.hasCodec() ? this.decode() : this.create(JSON.parse(new TextDecoder().decode(this.encoded)));
|
|
1641
|
+
};
|
|
1642
|
+
FormatInterface.prototype.fromArrayBuffer = function (buffer) {
|
|
1643
|
+
this.encoded = new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength);
|
|
1644
|
+
return this.hasCodec() ? this.decode() : this.create(JSON.parse(new TextDecoder().decode(this.encoded)));
|
|
1645
|
+
};
|
|
1646
|
+
return FormatInterface;
|
|
1647
|
+
}(BasicInterface$1));
|
|
1648
|
+
|
|
1649
|
+
var BasicInterface = BasicInterface$1;
|
|
1650
|
+
var FormatInterface = FormatInterface$1;
|
|
1651
|
+
var CodecHash = CodecHash$1;
|
|
1652
|
+
var Codec = Codec$1;
|
|
1653
|
+
var Codecs = codecs;
|
|
553
1654
|
|
|
554
|
-
|
|
555
|
-
const FormatInterface = FormatInterface$1;
|
|
556
|
-
const CodecHash = CodecHash$1;
|
|
557
|
-
const Codec = PeernetCodec;
|
|
558
|
-
const Codecs = codecs;
|
|
559
|
-
|
|
560
|
-
exports.BasicInterface = BasicInterface;
|
|
561
|
-
exports.Codec = Codec;
|
|
562
|
-
exports.CodecHash = CodecHash;
|
|
563
|
-
exports.Codecs = Codecs;
|
|
564
|
-
exports.FormatInterface = FormatInterface;
|
|
1655
|
+
export { BasicInterface, Codec, CodecHash, Codecs, FormatInterface };
|