@wormhole-foundation/sdk-base 0.1.6 → 0.1.7-beta.2
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/cjs/utils/encoding.d.ts +25 -0
- package/dist/cjs/utils/encoding.d.ts.map +1 -0
- package/dist/cjs/utils/encoding.js +52 -0
- package/dist/cjs/utils/encoding.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +1 -1
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +14 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/esm/utils/encoding.d.ts +25 -0
- package/dist/esm/utils/encoding.d.ts.map +1 -0
- package/dist/esm/utils/encoding.js +45 -0
- package/dist/esm/utils/encoding.js.map +1 -0
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/package.json +4 -1
- package/src/utils/encoding.ts +58 -0
- package/src/utils/index.ts +2 -1
- package/dist/cjs/utils/hexstring.d.ts +0 -5
- package/dist/cjs/utils/hexstring.d.ts.map +0 -1
- package/dist/cjs/utils/hexstring.js +0 -75
- package/dist/cjs/utils/hexstring.js.map +0 -1
- package/dist/esm/utils/hexstring.d.ts +0 -5
- package/dist/esm/utils/hexstring.d.ts.map +0 -1
- package/dist/esm/utils/hexstring.js +0 -68
- package/dist/esm/utils/hexstring.js.map +0 -1
- package/src/utils/hexstring.ts +0 -62
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const stripPrefix: (prefix: string, str: string) => string;
|
|
2
|
+
export declare function isBase64Encoded(input: string): boolean;
|
|
3
|
+
declare function isHexEncoded(input: string): boolean;
|
|
4
|
+
export declare const hex: {
|
|
5
|
+
valid: typeof isHexEncoded;
|
|
6
|
+
decode: (input: string) => Uint8Array;
|
|
7
|
+
encode: (input: string | Uint8Array, prefix?: boolean) => string;
|
|
8
|
+
};
|
|
9
|
+
export declare const b64: {
|
|
10
|
+
valid: typeof isBase64Encoded;
|
|
11
|
+
decode: (str: string) => Uint8Array;
|
|
12
|
+
encode: (input: string | Uint8Array) => string;
|
|
13
|
+
};
|
|
14
|
+
export declare const b58: {
|
|
15
|
+
decode: (str: string) => Uint8Array;
|
|
16
|
+
encode: (input: string | Uint8Array) => string;
|
|
17
|
+
};
|
|
18
|
+
export declare const bignum: {
|
|
19
|
+
decode: (input: string) => bigint;
|
|
20
|
+
encode: (input: bigint, prefix?: boolean) => string;
|
|
21
|
+
};
|
|
22
|
+
export declare const toUint8Array: (value: string | bigint) => Uint8Array;
|
|
23
|
+
export declare const fromUint8Array: (value: Uint8Array) => string;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/utils/encoding.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,WAAY,MAAM,OAAO,MAAM,KAAG,MACC,CAAC;AAM5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGtD;AAGD,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5C;AAED,eAAO,MAAM,GAAG;;oBAEI,MAAM;oBACN,MAAM,GAAG,UAAU,WAAU,OAAO;CAIvD,CAAA;AAED,eAAO,MAAM,GAAG;;;oBAGI,MAAM,GAAG,UAAU;CACtC,CAAA;AAED,eAAO,MAAM,GAAG;;oBAEI,MAAM,GAAG,UAAU;CACtC,CAAA;AAED,eAAO,MAAM,MAAM;oBACC,MAAM;oBACN,MAAM,WAAU,OAAO;CAC1C,CAAA;AAGD,eAAO,MAAM,YAAY,UAAW,MAAM,GAAG,MAAM,KAAG,UAKrD,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAElD,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fromUint8Array = exports.toUint8Array = exports.bignum = exports.b58 = exports.b64 = exports.hex = exports.isBase64Encoded = exports.stripPrefix = void 0;
|
|
4
|
+
const base_1 = require("@scure/base");
|
|
5
|
+
const stripPrefix = (prefix, str) => str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
6
|
+
exports.stripPrefix = stripPrefix;
|
|
7
|
+
// This function uses a regex string to check if the input could
|
|
8
|
+
// possibly be base64 encoded.
|
|
9
|
+
// WARNING: There are clear text strings that are NOT base64 encoded
|
|
10
|
+
// that will pass this check.
|
|
11
|
+
function isBase64Encoded(input) {
|
|
12
|
+
const b64Regex = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$');
|
|
13
|
+
return b64Regex.test(input);
|
|
14
|
+
}
|
|
15
|
+
exports.isBase64Encoded = isBase64Encoded;
|
|
16
|
+
function isHexEncoded(input) {
|
|
17
|
+
const regex = /^[0-9a-fA-F]+$/;
|
|
18
|
+
const normalized = (0, exports.stripPrefix)('0x', input);
|
|
19
|
+
return normalized.length % 2 === 0 && regex.test(normalized);
|
|
20
|
+
}
|
|
21
|
+
exports.hex = {
|
|
22
|
+
valid: isHexEncoded,
|
|
23
|
+
decode: (input) => base_1.base16.decode((0, exports.stripPrefix)('0x', input).toUpperCase()),
|
|
24
|
+
encode: (input, prefix = false) => {
|
|
25
|
+
input = typeof input === "string" ? (0, exports.toUint8Array)(input) : input;
|
|
26
|
+
return (prefix ? "0x" : "") + base_1.base16.encode(input).toLowerCase();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.b64 = {
|
|
30
|
+
valid: isBase64Encoded,
|
|
31
|
+
decode: base_1.base64.decode,
|
|
32
|
+
encode: (input) => base_1.base64.encode(typeof input === "string" ? (0, exports.toUint8Array)(input) : input)
|
|
33
|
+
};
|
|
34
|
+
exports.b58 = {
|
|
35
|
+
decode: base_1.base58.decode,
|
|
36
|
+
encode: (input) => base_1.base58.encode(typeof input === "string" ? (0, exports.toUint8Array)(input) : input),
|
|
37
|
+
};
|
|
38
|
+
exports.bignum = {
|
|
39
|
+
decode: (input) => BigInt(input),
|
|
40
|
+
encode: (input, prefix = false) => (prefix ? "0x" : "") + input.toString(16)
|
|
41
|
+
};
|
|
42
|
+
const toUint8Array = (value) => {
|
|
43
|
+
if (typeof value === "bigint")
|
|
44
|
+
return (0, exports.toUint8Array)(exports.bignum.encode(value));
|
|
45
|
+
return (new TextEncoder()).encode(value);
|
|
46
|
+
};
|
|
47
|
+
exports.toUint8Array = toUint8Array;
|
|
48
|
+
const fromUint8Array = (value) => {
|
|
49
|
+
return (new TextDecoder()).decode(value);
|
|
50
|
+
};
|
|
51
|
+
exports.fromUint8Array = fromUint8Array;
|
|
52
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/utils/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export * from "./array";
|
|
2
|
-
export * from "./hexstring";
|
|
3
2
|
export * from "./layout";
|
|
4
3
|
export * from "./mapping";
|
|
5
4
|
export * from "./metaprogramming";
|
|
6
5
|
export * from "./amount";
|
|
7
6
|
export * from "./misc";
|
|
7
|
+
export * as encoding from "./encoding";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -10,15 +10,28 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
13
18
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
20
|
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
16
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.encoding = void 0;
|
|
17
30
|
__exportStar(require("./array"), exports);
|
|
18
|
-
__exportStar(require("./hexstring"), exports);
|
|
19
31
|
__exportStar(require("./layout"), exports);
|
|
20
32
|
__exportStar(require("./mapping"), exports);
|
|
21
33
|
__exportStar(require("./metaprogramming"), exports);
|
|
22
34
|
__exportStar(require("./amount"), exports);
|
|
23
35
|
__exportStar(require("./misc"), exports);
|
|
36
|
+
exports.encoding = __importStar(require("./encoding"));
|
|
24
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,4CAA0B;AAC1B,oDAAkC;AAClC,2CAAyB;AACzB,yCAAuB;AAEvB,uDAAuC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const stripPrefix: (prefix: string, str: string) => string;
|
|
2
|
+
export declare function isBase64Encoded(input: string): boolean;
|
|
3
|
+
declare function isHexEncoded(input: string): boolean;
|
|
4
|
+
export declare const hex: {
|
|
5
|
+
valid: typeof isHexEncoded;
|
|
6
|
+
decode: (input: string) => Uint8Array;
|
|
7
|
+
encode: (input: string | Uint8Array, prefix?: boolean) => string;
|
|
8
|
+
};
|
|
9
|
+
export declare const b64: {
|
|
10
|
+
valid: typeof isBase64Encoded;
|
|
11
|
+
decode: (str: string) => Uint8Array;
|
|
12
|
+
encode: (input: string | Uint8Array) => string;
|
|
13
|
+
};
|
|
14
|
+
export declare const b58: {
|
|
15
|
+
decode: (str: string) => Uint8Array;
|
|
16
|
+
encode: (input: string | Uint8Array) => string;
|
|
17
|
+
};
|
|
18
|
+
export declare const bignum: {
|
|
19
|
+
decode: (input: string) => bigint;
|
|
20
|
+
encode: (input: bigint, prefix?: boolean) => string;
|
|
21
|
+
};
|
|
22
|
+
export declare const toUint8Array: (value: string | bigint) => Uint8Array;
|
|
23
|
+
export declare const fromUint8Array: (value: Uint8Array) => string;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/utils/encoding.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,WAAY,MAAM,OAAO,MAAM,KAAG,MACC,CAAC;AAM5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGtD;AAGD,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5C;AAED,eAAO,MAAM,GAAG;;oBAEI,MAAM;oBACN,MAAM,GAAG,UAAU,WAAU,OAAO;CAIvD,CAAA;AAED,eAAO,MAAM,GAAG;;;oBAGI,MAAM,GAAG,UAAU;CACtC,CAAA;AAED,eAAO,MAAM,GAAG;;oBAEI,MAAM,GAAG,UAAU;CACtC,CAAA;AAED,eAAO,MAAM,MAAM;oBACC,MAAM;oBACN,MAAM,WAAU,OAAO;CAC1C,CAAA;AAGD,eAAO,MAAM,YAAY,UAAW,MAAM,GAAG,MAAM,KAAG,UAKrD,CAAA;AAED,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAElD,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { base16, base64, base58 } from '@scure/base';
|
|
2
|
+
export const stripPrefix = (prefix, str) => str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
3
|
+
// This function uses a regex string to check if the input could
|
|
4
|
+
// possibly be base64 encoded.
|
|
5
|
+
// WARNING: There are clear text strings that are NOT base64 encoded
|
|
6
|
+
// that will pass this check.
|
|
7
|
+
export function isBase64Encoded(input) {
|
|
8
|
+
const b64Regex = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$');
|
|
9
|
+
return b64Regex.test(input);
|
|
10
|
+
}
|
|
11
|
+
function isHexEncoded(input) {
|
|
12
|
+
const regex = /^[0-9a-fA-F]+$/;
|
|
13
|
+
const normalized = stripPrefix('0x', input);
|
|
14
|
+
return normalized.length % 2 === 0 && regex.test(normalized);
|
|
15
|
+
}
|
|
16
|
+
export const hex = {
|
|
17
|
+
valid: isHexEncoded,
|
|
18
|
+
decode: (input) => base16.decode(stripPrefix('0x', input).toUpperCase()),
|
|
19
|
+
encode: (input, prefix = false) => {
|
|
20
|
+
input = typeof input === "string" ? toUint8Array(input) : input;
|
|
21
|
+
return (prefix ? "0x" : "") + base16.encode(input).toLowerCase();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const b64 = {
|
|
25
|
+
valid: isBase64Encoded,
|
|
26
|
+
decode: base64.decode,
|
|
27
|
+
encode: (input) => base64.encode(typeof input === "string" ? toUint8Array(input) : input)
|
|
28
|
+
};
|
|
29
|
+
export const b58 = {
|
|
30
|
+
decode: base58.decode,
|
|
31
|
+
encode: (input) => base58.encode(typeof input === "string" ? toUint8Array(input) : input),
|
|
32
|
+
};
|
|
33
|
+
export const bignum = {
|
|
34
|
+
decode: (input) => BigInt(input),
|
|
35
|
+
encode: (input, prefix = false) => (prefix ? "0x" : "") + input.toString(16)
|
|
36
|
+
};
|
|
37
|
+
export const toUint8Array = (value) => {
|
|
38
|
+
if (typeof value === "bigint")
|
|
39
|
+
return toUint8Array(bignum.encode(value));
|
|
40
|
+
return (new TextEncoder()).encode(value);
|
|
41
|
+
};
|
|
42
|
+
export const fromUint8Array = (value) => {
|
|
43
|
+
return (new TextDecoder()).decode(value);
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/utils/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export * from "./array";
|
|
2
|
-
export * from "./hexstring";
|
|
3
2
|
export * from "./layout";
|
|
4
3
|
export * from "./mapping";
|
|
5
4
|
export * from "./metaprogramming";
|
|
6
5
|
export * from "./amount";
|
|
7
6
|
export * from "./misc";
|
|
7
|
+
export * as encoding from "./encoding";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export * from "./array";
|
|
2
|
-
export * from "./hexstring";
|
|
3
2
|
export * from "./layout";
|
|
4
3
|
export * from "./mapping";
|
|
5
4
|
export * from "./metaprogramming";
|
|
6
5
|
export * from "./amount";
|
|
7
6
|
export * from "./misc";
|
|
7
|
+
export * as encoding from "./encoding";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wormhole-foundation/sdk-base",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7-beta.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/wormhole-foundation/connect-sdk.git"
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
"dist/**/*",
|
|
21
21
|
"src/**/*"
|
|
22
22
|
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@scure/base":"^1.1.3"
|
|
25
|
+
},
|
|
23
26
|
"sideEffects": false,
|
|
24
27
|
"scripts": {
|
|
25
28
|
"test": "jest --config ../../jest.config.ts __tests__/*.ts",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { base16, base64, base58 } from '@scure/base';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const stripPrefix = (prefix: string, str: string): string =>
|
|
5
|
+
str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
6
|
+
|
|
7
|
+
// This function uses a regex string to check if the input could
|
|
8
|
+
// possibly be base64 encoded.
|
|
9
|
+
// WARNING: There are clear text strings that are NOT base64 encoded
|
|
10
|
+
// that will pass this check.
|
|
11
|
+
export function isBase64Encoded(input: string): boolean {
|
|
12
|
+
const b64Regex = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$');
|
|
13
|
+
return b64Regex.test(input);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
function isHexEncoded(input: string): boolean {
|
|
18
|
+
const regex = /^[0-9a-fA-F]+$/;
|
|
19
|
+
const normalized = stripPrefix('0x', input)
|
|
20
|
+
return normalized.length % 2 === 0 && regex.test(normalized);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const hex = {
|
|
24
|
+
valid: isHexEncoded,
|
|
25
|
+
decode: (input: string) => base16.decode(stripPrefix('0x', input).toUpperCase()),
|
|
26
|
+
encode: (input: string | Uint8Array, prefix: boolean = false) => {
|
|
27
|
+
input = typeof input === "string" ? toUint8Array(input) : input;
|
|
28
|
+
return (prefix ? "0x" : "") + base16.encode(input).toLowerCase()
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const b64 = {
|
|
33
|
+
valid: isBase64Encoded,
|
|
34
|
+
decode: base64.decode,
|
|
35
|
+
encode: (input: string | Uint8Array) => base64.encode(typeof input === "string" ? toUint8Array(input) : input)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const b58 = {
|
|
39
|
+
decode: base58.decode,
|
|
40
|
+
encode: (input: string | Uint8Array) => base58.encode(typeof input === "string" ? toUint8Array(input) : input),
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const bignum = {
|
|
44
|
+
decode: (input: string) => BigInt(input),
|
|
45
|
+
encode: (input: bigint, prefix: boolean = false) => (prefix ? "0x" : "") + input.toString(16)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
export const toUint8Array = (value: string | bigint): Uint8Array => {
|
|
50
|
+
if (typeof value === "bigint")
|
|
51
|
+
return toUint8Array(bignum.encode(value))
|
|
52
|
+
|
|
53
|
+
return (new TextEncoder()).encode(value);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const fromUint8Array = (value: Uint8Array): string => {
|
|
57
|
+
return (new TextDecoder()).decode(value);
|
|
58
|
+
}
|
package/src/utils/index.ts
CHANGED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare const stripPrefix: (prefix: string, str: string) => string;
|
|
2
|
-
export declare const isHexByteString: (str: string, expectedBytes?: number) => boolean;
|
|
3
|
-
export declare const hexByteStringToUint8Array: (str: string) => Uint8Array;
|
|
4
|
-
export declare const uint8ArrayToHexByteString: (arr: Uint8Array, addPrefix?: boolean) => string;
|
|
5
|
-
//# sourceMappingURL=hexstring.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hexstring.d.ts","sourceRoot":"","sources":["../../../src/utils/hexstring.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,WAAY,MAAM,OAAO,MAAM,KAAG,MACD,CAAC;AA6B1D,eAAO,MAAM,eAAe,QAAS,MAAM,kBAAkB,MAAM,KAAG,OAWrE,CAAA;AAGD,eAAO,MAAM,yBAAyB,QAAS,MAAM,KAAG,UAYvD,CAAA;AAGD,eAAO,MAAM,yBAAyB,QAAS,UAAU,0BAAqB,MAEJ,CAAC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.uint8ArrayToHexByteString = exports.hexByteStringToUint8Array = exports.isHexByteString = exports.stripPrefix = void 0;
|
|
4
|
-
const stripPrefix = (prefix, str) => str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
5
|
-
exports.stripPrefix = stripPrefix;
|
|
6
|
-
const tryAsciiHexCharToNumber = (str, index) => {
|
|
7
|
-
//we could use parseInt(char, 16) but given that we are doing this for every single char and
|
|
8
|
-
// parseInt has to check for optional "0x" prefix and other conversion stuff, let's just be
|
|
9
|
-
// explicit and not overly wasteful with performance
|
|
10
|
-
const charCode = str.charCodeAt(index);
|
|
11
|
-
switch (charCode) {
|
|
12
|
-
case 48:
|
|
13
|
-
case 49:
|
|
14
|
-
case 50:
|
|
15
|
-
case 51:
|
|
16
|
-
case 52:
|
|
17
|
-
case 53:
|
|
18
|
-
case 54:
|
|
19
|
-
case 55:
|
|
20
|
-
case 56:
|
|
21
|
-
case 57:
|
|
22
|
-
return charCode - 48; //ascii 0-9 is 48-57
|
|
23
|
-
case 65:
|
|
24
|
-
case 66:
|
|
25
|
-
case 67:
|
|
26
|
-
case 68:
|
|
27
|
-
case 69:
|
|
28
|
-
case 70:
|
|
29
|
-
return charCode - 65 + 10; //ascii A-F is 65-70
|
|
30
|
-
case 97:
|
|
31
|
-
case 98:
|
|
32
|
-
case 99:
|
|
33
|
-
case 100:
|
|
34
|
-
case 101:
|
|
35
|
-
case 102:
|
|
36
|
-
return charCode - 97 + 10; //ascii a-f is 97-102
|
|
37
|
-
default:
|
|
38
|
-
return Number.NaN;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
const asciiHexCharToNumber = (str, index) => {
|
|
42
|
-
const val = tryAsciiHexCharToNumber(str, index);
|
|
43
|
-
if (Number.isNaN(val))
|
|
44
|
-
throw new Error(`Character ${str.charAt(index)} at position ${index} in ${str} is not a hex char`);
|
|
45
|
-
return val;
|
|
46
|
-
};
|
|
47
|
-
const isHexByteString = (str, expectedBytes) => {
|
|
48
|
-
let i = ((str.length > 1 && str[1] == "x") ? 2 : 0);
|
|
49
|
-
if ((str.length % 2 !== 0) ||
|
|
50
|
-
(expectedBytes !== undefined && str.length - i !== 2 * expectedBytes))
|
|
51
|
-
return false;
|
|
52
|
-
for (; i < str.length; ++i)
|
|
53
|
-
if (Number.isNaN(tryAsciiHexCharToNumber(str, i)))
|
|
54
|
-
return false;
|
|
55
|
-
return true;
|
|
56
|
-
};
|
|
57
|
-
exports.isHexByteString = isHexByteString;
|
|
58
|
-
//TODO naming: arrayify (ethers), toBytes (solana)
|
|
59
|
-
const hexByteStringToUint8Array = (str) => {
|
|
60
|
-
if (str.length % 2 !== 0)
|
|
61
|
-
throw new Error(`hex byte string has odd length: ${str}`);
|
|
62
|
-
const prefixOffset = str.length > 2 && str[1] === "x" ? 2 : 0;
|
|
63
|
-
const ret = new Uint8Array((str.length - prefixOffset) / 2);
|
|
64
|
-
for (let i = prefixOffset; i < str.length; i += 2)
|
|
65
|
-
ret[(i - prefixOffset) / 2] =
|
|
66
|
-
asciiHexCharToNumber(str, i) * 16 +
|
|
67
|
-
asciiHexCharToNumber(str, i + 1);
|
|
68
|
-
return ret;
|
|
69
|
-
};
|
|
70
|
-
exports.hexByteStringToUint8Array = hexByteStringToUint8Array;
|
|
71
|
-
//TODO naming: hexlify (ethers)
|
|
72
|
-
const uint8ArrayToHexByteString = (arr, addPrefix = true) => (addPrefix ? "0x" : "") +
|
|
73
|
-
Array.from(arr).map(byte => byte.toString(16).padStart(2, "0")).join("");
|
|
74
|
-
exports.uint8ArrayToHexByteString = uint8ArrayToHexByteString;
|
|
75
|
-
//# sourceMappingURL=hexstring.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hexstring.js","sourceRoot":"","sources":["../../../src/utils/hexstring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare const stripPrefix: (prefix: string, str: string) => string;
|
|
2
|
-
export declare const isHexByteString: (str: string, expectedBytes?: number) => boolean;
|
|
3
|
-
export declare const hexByteStringToUint8Array: (str: string) => Uint8Array;
|
|
4
|
-
export declare const uint8ArrayToHexByteString: (arr: Uint8Array, addPrefix?: boolean) => string;
|
|
5
|
-
//# sourceMappingURL=hexstring.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hexstring.d.ts","sourceRoot":"","sources":["../../../src/utils/hexstring.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,WAAY,MAAM,OAAO,MAAM,KAAG,MACD,CAAC;AA6B1D,eAAO,MAAM,eAAe,QAAS,MAAM,kBAAkB,MAAM,KAAG,OAWrE,CAAA;AAGD,eAAO,MAAM,yBAAyB,QAAS,MAAM,KAAG,UAYvD,CAAA;AAGD,eAAO,MAAM,yBAAyB,QAAS,UAAU,0BAAqB,MAEJ,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
export const stripPrefix = (prefix, str) => str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
2
|
-
const tryAsciiHexCharToNumber = (str, index) => {
|
|
3
|
-
//we could use parseInt(char, 16) but given that we are doing this for every single char and
|
|
4
|
-
// parseInt has to check for optional "0x" prefix and other conversion stuff, let's just be
|
|
5
|
-
// explicit and not overly wasteful with performance
|
|
6
|
-
const charCode = str.charCodeAt(index);
|
|
7
|
-
switch (charCode) {
|
|
8
|
-
case 48:
|
|
9
|
-
case 49:
|
|
10
|
-
case 50:
|
|
11
|
-
case 51:
|
|
12
|
-
case 52:
|
|
13
|
-
case 53:
|
|
14
|
-
case 54:
|
|
15
|
-
case 55:
|
|
16
|
-
case 56:
|
|
17
|
-
case 57:
|
|
18
|
-
return charCode - 48; //ascii 0-9 is 48-57
|
|
19
|
-
case 65:
|
|
20
|
-
case 66:
|
|
21
|
-
case 67:
|
|
22
|
-
case 68:
|
|
23
|
-
case 69:
|
|
24
|
-
case 70:
|
|
25
|
-
return charCode - 65 + 10; //ascii A-F is 65-70
|
|
26
|
-
case 97:
|
|
27
|
-
case 98:
|
|
28
|
-
case 99:
|
|
29
|
-
case 100:
|
|
30
|
-
case 101:
|
|
31
|
-
case 102:
|
|
32
|
-
return charCode - 97 + 10; //ascii a-f is 97-102
|
|
33
|
-
default:
|
|
34
|
-
return Number.NaN;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const asciiHexCharToNumber = (str, index) => {
|
|
38
|
-
const val = tryAsciiHexCharToNumber(str, index);
|
|
39
|
-
if (Number.isNaN(val))
|
|
40
|
-
throw new Error(`Character ${str.charAt(index)} at position ${index} in ${str} is not a hex char`);
|
|
41
|
-
return val;
|
|
42
|
-
};
|
|
43
|
-
export const isHexByteString = (str, expectedBytes) => {
|
|
44
|
-
let i = ((str.length > 1 && str[1] == "x") ? 2 : 0);
|
|
45
|
-
if ((str.length % 2 !== 0) ||
|
|
46
|
-
(expectedBytes !== undefined && str.length - i !== 2 * expectedBytes))
|
|
47
|
-
return false;
|
|
48
|
-
for (; i < str.length; ++i)
|
|
49
|
-
if (Number.isNaN(tryAsciiHexCharToNumber(str, i)))
|
|
50
|
-
return false;
|
|
51
|
-
return true;
|
|
52
|
-
};
|
|
53
|
-
//TODO naming: arrayify (ethers), toBytes (solana)
|
|
54
|
-
export const hexByteStringToUint8Array = (str) => {
|
|
55
|
-
if (str.length % 2 !== 0)
|
|
56
|
-
throw new Error(`hex byte string has odd length: ${str}`);
|
|
57
|
-
const prefixOffset = str.length > 2 && str[1] === "x" ? 2 : 0;
|
|
58
|
-
const ret = new Uint8Array((str.length - prefixOffset) / 2);
|
|
59
|
-
for (let i = prefixOffset; i < str.length; i += 2)
|
|
60
|
-
ret[(i - prefixOffset) / 2] =
|
|
61
|
-
asciiHexCharToNumber(str, i) * 16 +
|
|
62
|
-
asciiHexCharToNumber(str, i + 1);
|
|
63
|
-
return ret;
|
|
64
|
-
};
|
|
65
|
-
//TODO naming: hexlify (ethers)
|
|
66
|
-
export const uint8ArrayToHexByteString = (arr, addPrefix = true) => (addPrefix ? "0x" : "") +
|
|
67
|
-
Array.from(arr).map(byte => byte.toString(16).padStart(2, "0")).join("");
|
|
68
|
-
//# sourceMappingURL=hexstring.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hexstring.js","sourceRoot":"","sources":["../../../src/utils/hexstring.ts"],"names":[],"mappings":"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"}
|
package/src/utils/hexstring.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
export const stripPrefix = (prefix: string, str: string): string =>
|
|
2
|
-
str.startsWith(prefix) ? str.slice(prefix.length) : str;
|
|
3
|
-
|
|
4
|
-
const tryAsciiHexCharToNumber = (str: string, index: number): number => {
|
|
5
|
-
//we could use parseInt(char, 16) but given that we are doing this for every single char and
|
|
6
|
-
// parseInt has to check for optional "0x" prefix and other conversion stuff, let's just be
|
|
7
|
-
// explicit and not overly wasteful with performance
|
|
8
|
-
const charCode = str.charCodeAt(index);
|
|
9
|
-
switch (charCode) {
|
|
10
|
-
case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:
|
|
11
|
-
return charCode - 48; //ascii 0-9 is 48-57
|
|
12
|
-
case 65: case 66: case 67: case 68: case 69: case 70:
|
|
13
|
-
return charCode - 65 + 10; //ascii A-F is 65-70
|
|
14
|
-
case 97: case 98: case 99: case 100: case 101: case 102:
|
|
15
|
-
return charCode - 97 + 10; //ascii a-f is 97-102
|
|
16
|
-
default:
|
|
17
|
-
return Number.NaN;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const asciiHexCharToNumber = (str: string, index: number): number => {
|
|
22
|
-
const val = tryAsciiHexCharToNumber(str, index);
|
|
23
|
-
if (Number.isNaN(val))
|
|
24
|
-
throw new Error(
|
|
25
|
-
`Character ${str.charAt(index)} at position ${index} in ${str} is not a hex char`
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
return val;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const isHexByteString = (str: string, expectedBytes?: number): boolean => {
|
|
32
|
-
let i = ((str.length > 1 && str[1] == "x") ? 2 : 0);
|
|
33
|
-
if ((str.length % 2 !== 0) ||
|
|
34
|
-
(expectedBytes !== undefined && str.length - i !== 2 * expectedBytes))
|
|
35
|
-
return false;
|
|
36
|
-
|
|
37
|
-
for (; i < str.length; ++i)
|
|
38
|
-
if (Number.isNaN(tryAsciiHexCharToNumber(str, i)))
|
|
39
|
-
return false;
|
|
40
|
-
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
//TODO naming: arrayify (ethers), toBytes (solana)
|
|
45
|
-
export const hexByteStringToUint8Array = (str: string): Uint8Array => {
|
|
46
|
-
if (str.length % 2 !== 0)
|
|
47
|
-
throw new Error(`hex byte string has odd length: ${str}`);
|
|
48
|
-
|
|
49
|
-
const prefixOffset = str.length > 2 && str[1] === "x" ? 2 : 0;
|
|
50
|
-
const ret = new Uint8Array((str.length - prefixOffset) / 2);
|
|
51
|
-
for (let i = prefixOffset; i < str.length; i += 2)
|
|
52
|
-
ret[(i - prefixOffset) / 2] =
|
|
53
|
-
asciiHexCharToNumber(str, i) * 16 +
|
|
54
|
-
asciiHexCharToNumber(str, i + 1);
|
|
55
|
-
|
|
56
|
-
return ret;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
//TODO naming: hexlify (ethers)
|
|
60
|
-
export const uint8ArrayToHexByteString = (arr: Uint8Array, addPrefix = true): string =>
|
|
61
|
-
(addPrefix ? "0x" : "") +
|
|
62
|
-
Array.from(arr).map(byte => byte.toString(16).padStart(2, "0")).join("");
|