@keplr-wallet/router 0.12.3 → 0.12.5
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/build/hex.d.ts +2 -0
- package/build/hex.js +31 -0
- package/build/hex.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/router/index.js +3 -3
- package/build/router/index.js.map +1 -1
- package/build/simple.spec.js +3 -3
- package/build/simple.spec.js.map +1 -1
- package/build/uint8-array.d.ts +6 -0
- package/build/uint8-array.js +52 -0
- package/build/uint8-array.js.map +1 -0
- package/build/uint8-array.spec.d.ts +1 -0
- package/build/uint8-array.spec.js +100 -0
- package/build/uint8-array.spec.js.map +1 -0
- package/package.json +2 -5
- package/src/hex.ts +28 -0
- package/src/index.ts +1 -0
- package/src/router/index.ts +1 -1
- package/src/simple.spec.ts +1 -1
- package/src/uint8-array.spec.ts +116 -0
- package/src/uint8-array.ts +61 -0
package/build/hex.d.ts
ADDED
package/build/hex.js
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
Belows are from @cosmjs/encoding library.
|
4
|
+
To reduce the bundle size of provider, put them directly here.
|
5
|
+
*/
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
+
exports.fromHex = exports.toHex = void 0;
|
8
|
+
function toHex(data) {
|
9
|
+
let out = "";
|
10
|
+
for (const byte of data) {
|
11
|
+
out += ("0" + byte.toString(16)).slice(-2);
|
12
|
+
}
|
13
|
+
return out;
|
14
|
+
}
|
15
|
+
exports.toHex = toHex;
|
16
|
+
function fromHex(hexstring) {
|
17
|
+
if (hexstring.length % 2 !== 0) {
|
18
|
+
throw new Error("hex string length must be a multiple of 2");
|
19
|
+
}
|
20
|
+
const listOfInts = [];
|
21
|
+
for (let i = 0; i < hexstring.length; i += 2) {
|
22
|
+
const hexByteAsString = hexstring.substr(i, 2);
|
23
|
+
if (!hexByteAsString.match(/[0-9a-f]{2}/i)) {
|
24
|
+
throw new Error("hex string contains invalid characters");
|
25
|
+
}
|
26
|
+
listOfInts.push(parseInt(hexByteAsString, 16));
|
27
|
+
}
|
28
|
+
return new Uint8Array(listOfInts);
|
29
|
+
}
|
30
|
+
exports.fromHex = fromHex;
|
31
|
+
//# sourceMappingURL=hex.js.map
|
package/build/hex.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../src/hex.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,SAAgB,KAAK,CAAC,IAAgB;IACpC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5C;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAND,sBAMC;AAED,SAAgB,OAAO,CAAC,SAAiB;IACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC5C,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QACD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;KAChD;IACD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAdD,0BAcC"}
|
package/build/index.d.ts
CHANGED
package/build/index.js
CHANGED
@@ -23,4 +23,5 @@ __exportStar(require("./message"), exports);
|
|
23
23
|
__exportStar(require("./constant"), exports);
|
24
24
|
__exportStar(require("./encoding"), exports);
|
25
25
|
__exportStar(require("./simple"), exports);
|
26
|
+
__exportStar(require("./uint8-array"), exports);
|
26
27
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB;AACxB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,2CAAyB"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB;AACxB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,2CAAyB;AACzB,gDAA8B"}
|
package/build/router/index.js
CHANGED
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
12
|
exports.Router = void 0;
|
13
13
|
const encoding_1 = require("../encoding");
|
14
|
-
const
|
14
|
+
const uint8_array_1 = require("../uint8-array");
|
15
15
|
class Router {
|
16
16
|
constructor(envProducer) {
|
17
17
|
this.envProducer = envProducer;
|
@@ -62,7 +62,7 @@ class Router {
|
|
62
62
|
if (!this.isInitialized) {
|
63
63
|
yield this._initWaiter;
|
64
64
|
}
|
65
|
-
const msg = this.msgRegistry.parseMessage(
|
65
|
+
const msg = this.msgRegistry.parseMessage(uint8_array_1.JSONUint8Array.unwrap(message));
|
66
66
|
const env = this.envProducer(sender, (_a = msg.routerMeta) !== null && _a !== void 0 ? _a : {});
|
67
67
|
for (const guard of this.guards) {
|
68
68
|
yield guard(env, msg, sender);
|
@@ -77,7 +77,7 @@ class Router {
|
|
77
77
|
if (!handler) {
|
78
78
|
throw new Error("Can't get handler");
|
79
79
|
}
|
80
|
-
return
|
80
|
+
return uint8_array_1.JSONUint8Array.wrap(yield handler(env, msg));
|
81
81
|
});
|
82
82
|
}
|
83
83
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0CAA8C;AAC9C,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0CAA8C;AAC9C,gDAAgD;AAEhD,MAAsB,MAAM;IAW1B,YAA+B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAV7C,gBAAW,GAAoB,IAAI,0BAAe,EAAE,CAAC;QACrD,sBAAiB,GAAyB,IAAI,GAAG,EAAE,CAAC;QAEpD,WAAM,GAAY,EAAE,CAAC;QAErB,SAAI,GAAG,EAAE,CAAC;QAEV,mBAAc,GAAY,KAAK,CAAC;IAGgB,CAAC;IAE3D,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,eAAe,CACpB,MAAqE;QAErE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEM,UAAU,CAAC,KAAa,EAAE,OAAgB;QAC/C,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEM,QAAQ,CAAC,KAAY;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAMY,MAAM,CACjB,IAAY,EACZ,MAA4B;;YAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,IAAI,MAAM,EAAE;gBACV,IAAI,UAAoC,CAAC;gBACzC,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC/C,UAAU,GAAG,OAAO,CAAC;gBACvB,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,EAAE,CAAC;gBACf,UAAW,EAAE,CAAC;aACf;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO;QACT,CAAC;KAAA;IAEM,QAAQ;QACb,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEe,aAAa,CAC3B,OAAY,EACZ,MAAqB;;;YAErB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,MAAM,IAAI,CAAC,WAAW,CAAC;aACxB;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,4BAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAA,GAAG,CAAC,UAAU,mCAAI,EAAE,CAAC,CAAC;YAE3D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;aAC/B;YAED,mBAAmB;YACnB,GAAG,CAAC,aAAa,EAAE,CAAC;YAEpB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;aAChC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACtC;YAED,OAAO,4BAAc,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;KACrD;CACF;AA5FD,wBA4FC"}
|
package/build/simple.spec.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const simple_1 = require("./simple");
|
4
|
-
const
|
4
|
+
const uint8_array_1 = require("./uint8-array");
|
5
5
|
describe("Test simple message", () => {
|
6
6
|
it("test simple message", () => {
|
7
7
|
const simpleMessage = new simple_1.SimpleMessage("route-test", "type-test", {
|
@@ -20,8 +20,8 @@ describe("Test simple message", () => {
|
|
20
20
|
test: 1,
|
21
21
|
test2: "test",
|
22
22
|
});
|
23
|
-
const encoded =
|
24
|
-
const decoded =
|
23
|
+
const encoded = uint8_array_1.JSONUint8Array.stringify(simpleMessage);
|
24
|
+
const decoded = uint8_array_1.JSONUint8Array.parse(encoded);
|
25
25
|
expect(decoded["route"]).toBe(undefined);
|
26
26
|
expect(decoded["type"]).toBe(undefined);
|
27
27
|
expect(decoded["test"]).toBe(1);
|
package/build/simple.spec.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"simple.spec.js","sourceRoot":"","sources":["../src/simple.spec.ts"],"names":[],"mappings":";;AAAA,qCAAyC;AACzC
|
1
|
+
{"version":3,"file":"simple.spec.js","sourceRoot":"","sources":["../src/simple.spec.ts"],"names":[],"mappings":";;AAAA,qCAAyC;AACzC,+CAA+C;AAE/C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,WAAW,EAAE;YACjE,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,EAAE;YACV,aAAa,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,WAAW,EAAE;YACjE,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,4BAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,4BAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.JSONUint8Array = void 0;
|
4
|
+
// The JSON encoder that supports the `Uint8Array`.
|
5
|
+
const hex_1 = require("./hex");
|
6
|
+
class JSONUint8Array {
|
7
|
+
static parse(text) {
|
8
|
+
return JSON.parse(text, (key, value) => {
|
9
|
+
// Prevent potential prototype poisoning.
|
10
|
+
if (key === "__proto__") {
|
11
|
+
throw new Error("__proto__ is disallowed");
|
12
|
+
}
|
13
|
+
if (value &&
|
14
|
+
typeof value === "string" &&
|
15
|
+
value.startsWith("__uint8array__")) {
|
16
|
+
return (0, hex_1.fromHex)(value.replace("__uint8array__", ""));
|
17
|
+
}
|
18
|
+
return value;
|
19
|
+
});
|
20
|
+
}
|
21
|
+
static stringify(obj) {
|
22
|
+
return JSON.stringify(obj, (key, value) => {
|
23
|
+
// Prevent potential prototype poisoning.
|
24
|
+
if (key === "__proto__") {
|
25
|
+
throw new Error("__proto__ is disallowed");
|
26
|
+
}
|
27
|
+
if (value &&
|
28
|
+
(value instanceof Uint8Array ||
|
29
|
+
(typeof value === "object" &&
|
30
|
+
"type" in value &&
|
31
|
+
"data" in value &&
|
32
|
+
value.type === "Buffer" &&
|
33
|
+
Array.isArray(value.data)))) {
|
34
|
+
const array = value instanceof Uint8Array ? value : new Uint8Array(value.data);
|
35
|
+
return `__uint8array__${(0, hex_1.toHex)(array)}`;
|
36
|
+
}
|
37
|
+
return value;
|
38
|
+
});
|
39
|
+
}
|
40
|
+
static wrap(obj) {
|
41
|
+
if (obj === undefined)
|
42
|
+
return undefined;
|
43
|
+
return JSON.parse(JSONUint8Array.stringify(obj));
|
44
|
+
}
|
45
|
+
static unwrap(obj) {
|
46
|
+
if (obj === undefined)
|
47
|
+
return undefined;
|
48
|
+
return JSONUint8Array.parse(JSON.stringify(obj));
|
49
|
+
}
|
50
|
+
}
|
51
|
+
exports.JSONUint8Array = JSONUint8Array;
|
52
|
+
//# sourceMappingURL=uint8-array.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"uint8-array.js","sourceRoot":"","sources":["../src/uint8-array.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AACnD,+BAAuC;AAEvC,MAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACrC,yCAAyC;YACzC,IAAI,GAAG,KAAK,WAAW,EAAE;gBACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;YAED,IACE,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAClC;gBACA,OAAO,IAAA,aAAO,EAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;aACrD;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAY;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,yCAAyC;YACzC,IAAI,GAAG,KAAK,WAAW,EAAE;gBACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;YAED,IACE,KAAK;gBACL,CAAC,KAAK,YAAY,UAAU;oBAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ;wBACxB,MAAM,IAAI,KAAK;wBACf,MAAM,IAAI,KAAK;wBACf,KAAK,CAAC,IAAI,KAAK,QAAQ;wBACvB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAC/B;gBACA,MAAM,KAAK,GACT,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEnE,OAAO,iBAAiB,IAAA,WAAK,EAAC,KAAK,CAAC,EAAE,CAAC;aACxC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAQ;QAClB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAExC,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAQ;QACpB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAExC,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAzDD,wCAyDC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,100 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
7
|
+
const uint8_array_1 = require("./uint8-array");
|
8
|
+
describe("Test json with Uint8Array", () => {
|
9
|
+
it("should stringify properly with uint8array", () => {
|
10
|
+
const test = {
|
11
|
+
a: 1,
|
12
|
+
b: "test",
|
13
|
+
c: new Uint8Array([1, 2, 3]),
|
14
|
+
d: Buffer.from([1, 2, 3]),
|
15
|
+
e: undefined,
|
16
|
+
f: null,
|
17
|
+
};
|
18
|
+
const text = uint8_array_1.JSONUint8Array.stringify(test);
|
19
|
+
assert_1.default.strictEqual(text, '{"a":1,"b":"test","c":"__uint8array__010203","d":"__uint8array__010203","f":null}');
|
20
|
+
});
|
21
|
+
it("should parse properly with the prefixed string with __uint8array__", () => {
|
22
|
+
const text = '{"a":1,"b":"test","c":"__uint8array__010203","d":"__uint8array__010203","f":null}';
|
23
|
+
const obj = uint8_array_1.JSONUint8Array.parse(text);
|
24
|
+
assert_1.default.deepStrictEqual(obj, {
|
25
|
+
a: 1,
|
26
|
+
b: "test",
|
27
|
+
c: new Uint8Array([1, 2, 3]),
|
28
|
+
d: new Uint8Array([1, 2, 3]),
|
29
|
+
f: null,
|
30
|
+
});
|
31
|
+
});
|
32
|
+
it("should stringify properly with uint8array for nested obj", () => {
|
33
|
+
const test = {
|
34
|
+
a: 1,
|
35
|
+
b: "test",
|
36
|
+
c: new Uint8Array([1, 2, 3]),
|
37
|
+
d: {
|
38
|
+
a: new Uint8Array([1, 2, 3]),
|
39
|
+
b: Buffer.from([1, 2, 3]),
|
40
|
+
c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
|
41
|
+
d: [new Uint8Array([1, 2, 3]), null, undefined],
|
42
|
+
},
|
43
|
+
};
|
44
|
+
const text = uint8_array_1.JSONUint8Array.stringify(test);
|
45
|
+
assert_1.default.strictEqual(text, '{"a":1,"b":"test","c":"__uint8array__010203","d":{"a":"__uint8array__010203","b":"__uint8array__010203","c":["__uint8array__010203","__uint8array__010203"],"d":["__uint8array__010203",null,null]}}');
|
46
|
+
});
|
47
|
+
it("should parse properly with uint8array for nested text", () => {
|
48
|
+
const text = '{"a":1,"b":"test","c":"__uint8array__010203","d":{"a":"__uint8array__010203","b":"__uint8array__010203","c":["__uint8array__010203","__uint8array__010203"],"d":["__uint8array__010203",null,null]}}';
|
49
|
+
const obj = uint8_array_1.JSONUint8Array.parse(text);
|
50
|
+
assert_1.default.deepStrictEqual(obj, {
|
51
|
+
a: 1,
|
52
|
+
b: "test",
|
53
|
+
c: new Uint8Array([1, 2, 3]),
|
54
|
+
d: {
|
55
|
+
a: new Uint8Array([1, 2, 3]),
|
56
|
+
b: new Uint8Array([1, 2, 3]),
|
57
|
+
c: [new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3])],
|
58
|
+
d: [new Uint8Array([1, 2, 3]), null, null],
|
59
|
+
},
|
60
|
+
});
|
61
|
+
});
|
62
|
+
it("should wrap/unwrap properly with uint8array for nested obj", () => {
|
63
|
+
const test = {
|
64
|
+
a: 1,
|
65
|
+
b: "test",
|
66
|
+
c: new Uint8Array([1, 2, 3]),
|
67
|
+
d: {
|
68
|
+
a: new Uint8Array([1, 2, 3]),
|
69
|
+
b: Buffer.from([1, 2, 3]),
|
70
|
+
c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
|
71
|
+
d: [new Uint8Array([1, 2, 3]), null, undefined],
|
72
|
+
},
|
73
|
+
};
|
74
|
+
const wraped = uint8_array_1.JSONUint8Array.wrap(test);
|
75
|
+
assert_1.default.deepStrictEqual(wraped, {
|
76
|
+
a: 1,
|
77
|
+
b: "test",
|
78
|
+
c: "__uint8array__010203",
|
79
|
+
d: {
|
80
|
+
a: "__uint8array__010203",
|
81
|
+
b: "__uint8array__010203",
|
82
|
+
c: ["__uint8array__010203", "__uint8array__010203"],
|
83
|
+
d: ["__uint8array__010203", null, null],
|
84
|
+
},
|
85
|
+
});
|
86
|
+
const unwraped = uint8_array_1.JSONUint8Array.unwrap(wraped);
|
87
|
+
assert_1.default.deepStrictEqual(unwraped, {
|
88
|
+
a: 1,
|
89
|
+
b: "test",
|
90
|
+
c: new Uint8Array([1, 2, 3]),
|
91
|
+
d: {
|
92
|
+
a: new Uint8Array([1, 2, 3]),
|
93
|
+
b: new Uint8Array([1, 2, 3]),
|
94
|
+
c: [new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3])],
|
95
|
+
d: [new Uint8Array([1, 2, 3]), null, null],
|
96
|
+
},
|
97
|
+
});
|
98
|
+
});
|
99
|
+
});
|
100
|
+
//# sourceMappingURL=uint8-array.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"uint8-array.spec.js","sourceRoot":"","sources":["../src/uint8-array.spec.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAE5B,+CAA+C;AAE/C,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG;YACX,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,IAAI;SACR,CAAC;QAEF,MAAM,IAAI,GAAG,4BAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5C,gBAAM,CAAC,WAAW,CAChB,IAAI,EACJ,mFAAmF,CACpF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,IAAI,GACR,mFAAmF,CAAC;QAEtF,MAAM,GAAG,GAAG,4BAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,gBAAM,CAAC,eAAe,CAAC,GAAG,EAAE;YAC1B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE,IAAI;SACR,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG;YACX,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE;gBACD,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;aAChD;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,4BAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5C,gBAAM,CAAC,WAAW,CAChB,IAAI,EACJ,sMAAsM,CACvM,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GACR,sMAAsM,CAAC;QAEzM,MAAM,GAAG,GAAG,4BAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,gBAAM,CAAC,eAAe,CAAC,GAAG,EAAE;YAC1B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE;gBACD,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;aAC3C;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG;YACX,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE;gBACD,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;aAChD;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,4BAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE;YAC7B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,sBAAsB;YACzB,CAAC,EAAE;gBACD,CAAC,EAAE,sBAAsB;gBACzB,CAAC,EAAE,sBAAsB;gBACzB,CAAC,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;gBACnD,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC;aACxC;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,4BAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;YAC/B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,EAAE;gBACD,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;aAC3C;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "@keplr-wallet/router",
|
3
|
-
"version": "0.12.
|
3
|
+
"version": "0.12.5",
|
4
4
|
"main": "build/index.js",
|
5
5
|
"author": "chainapsis",
|
6
6
|
"license": "Apache-2.0",
|
7
7
|
"publishConfig": {
|
8
8
|
"access": "public"
|
9
9
|
},
|
10
|
-
"dependencies": {
|
11
|
-
"@keplr-wallet/common": "0.12.3"
|
12
|
-
},
|
13
10
|
"scripts": {
|
14
11
|
"clean": "rm -rf node_modules; rm -rf build",
|
15
12
|
"build": "tsc",
|
@@ -18,5 +15,5 @@
|
|
18
15
|
"lint-test": "eslint \"src/**/*\" && prettier --check \"src/**/*\"",
|
19
16
|
"lint-fix": "eslint --fix \"src/**/*\" && prettier --write \"src/**/*\""
|
20
17
|
},
|
21
|
-
"gitHead": "
|
18
|
+
"gitHead": "653eccdbc8e05b0579ebed8e481fbae0411df461"
|
22
19
|
}
|
package/src/hex.ts
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
/*
|
2
|
+
Belows are from @cosmjs/encoding library.
|
3
|
+
To reduce the bundle size of provider, put them directly here.
|
4
|
+
*/
|
5
|
+
|
6
|
+
export function toHex(data: Uint8Array): string {
|
7
|
+
let out = "";
|
8
|
+
for (const byte of data) {
|
9
|
+
out += ("0" + byte.toString(16)).slice(-2);
|
10
|
+
}
|
11
|
+
return out;
|
12
|
+
}
|
13
|
+
|
14
|
+
export function fromHex(hexstring: string): Uint8Array {
|
15
|
+
if (hexstring.length % 2 !== 0) {
|
16
|
+
throw new Error("hex string length must be a multiple of 2");
|
17
|
+
}
|
18
|
+
|
19
|
+
const listOfInts: number[] = [];
|
20
|
+
for (let i = 0; i < hexstring.length; i += 2) {
|
21
|
+
const hexByteAsString = hexstring.substr(i, 2);
|
22
|
+
if (!hexByteAsString.match(/[0-9a-f]{2}/i)) {
|
23
|
+
throw new Error("hex string contains invalid characters");
|
24
|
+
}
|
25
|
+
listOfInts.push(parseInt(hexByteAsString, 16));
|
26
|
+
}
|
27
|
+
return new Uint8Array(listOfInts);
|
28
|
+
}
|
package/src/index.ts
CHANGED
package/src/router/index.ts
CHANGED
@@ -2,7 +2,7 @@ import { Message } from "../message";
|
|
2
2
|
import { Handler } from "../handler";
|
3
3
|
import { EnvProducer, Guard, MessageSender } from "../types";
|
4
4
|
import { MessageRegistry } from "../encoding";
|
5
|
-
import { JSONUint8Array } from "
|
5
|
+
import { JSONUint8Array } from "../uint8-array";
|
6
6
|
|
7
7
|
export abstract class Router {
|
8
8
|
protected msgRegistry: MessageRegistry = new MessageRegistry();
|
package/src/simple.spec.ts
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
import assert from "assert";
|
2
|
+
|
3
|
+
import { JSONUint8Array } from "./uint8-array";
|
4
|
+
|
5
|
+
describe("Test json with Uint8Array", () => {
|
6
|
+
it("should stringify properly with uint8array", () => {
|
7
|
+
const test = {
|
8
|
+
a: 1,
|
9
|
+
b: "test",
|
10
|
+
c: new Uint8Array([1, 2, 3]),
|
11
|
+
d: Buffer.from([1, 2, 3]),
|
12
|
+
e: undefined,
|
13
|
+
f: null,
|
14
|
+
};
|
15
|
+
|
16
|
+
const text = JSONUint8Array.stringify(test);
|
17
|
+
|
18
|
+
assert.strictEqual(
|
19
|
+
text,
|
20
|
+
'{"a":1,"b":"test","c":"__uint8array__010203","d":"__uint8array__010203","f":null}'
|
21
|
+
);
|
22
|
+
});
|
23
|
+
|
24
|
+
it("should parse properly with the prefixed string with __uint8array__", () => {
|
25
|
+
const text =
|
26
|
+
'{"a":1,"b":"test","c":"__uint8array__010203","d":"__uint8array__010203","f":null}';
|
27
|
+
|
28
|
+
const obj = JSONUint8Array.parse(text);
|
29
|
+
assert.deepStrictEqual(obj, {
|
30
|
+
a: 1,
|
31
|
+
b: "test",
|
32
|
+
c: new Uint8Array([1, 2, 3]),
|
33
|
+
d: new Uint8Array([1, 2, 3]),
|
34
|
+
f: null,
|
35
|
+
});
|
36
|
+
});
|
37
|
+
|
38
|
+
it("should stringify properly with uint8array for nested obj", () => {
|
39
|
+
const test = {
|
40
|
+
a: 1,
|
41
|
+
b: "test",
|
42
|
+
c: new Uint8Array([1, 2, 3]),
|
43
|
+
d: {
|
44
|
+
a: new Uint8Array([1, 2, 3]),
|
45
|
+
b: Buffer.from([1, 2, 3]),
|
46
|
+
c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
|
47
|
+
d: [new Uint8Array([1, 2, 3]), null, undefined],
|
48
|
+
},
|
49
|
+
};
|
50
|
+
|
51
|
+
const text = JSONUint8Array.stringify(test);
|
52
|
+
|
53
|
+
assert.strictEqual(
|
54
|
+
text,
|
55
|
+
'{"a":1,"b":"test","c":"__uint8array__010203","d":{"a":"__uint8array__010203","b":"__uint8array__010203","c":["__uint8array__010203","__uint8array__010203"],"d":["__uint8array__010203",null,null]}}'
|
56
|
+
);
|
57
|
+
});
|
58
|
+
|
59
|
+
it("should parse properly with uint8array for nested text", () => {
|
60
|
+
const text =
|
61
|
+
'{"a":1,"b":"test","c":"__uint8array__010203","d":{"a":"__uint8array__010203","b":"__uint8array__010203","c":["__uint8array__010203","__uint8array__010203"],"d":["__uint8array__010203",null,null]}}';
|
62
|
+
|
63
|
+
const obj = JSONUint8Array.parse(text);
|
64
|
+
assert.deepStrictEqual(obj, {
|
65
|
+
a: 1,
|
66
|
+
b: "test",
|
67
|
+
c: new Uint8Array([1, 2, 3]),
|
68
|
+
d: {
|
69
|
+
a: new Uint8Array([1, 2, 3]),
|
70
|
+
b: new Uint8Array([1, 2, 3]),
|
71
|
+
c: [new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3])],
|
72
|
+
d: [new Uint8Array([1, 2, 3]), null, null],
|
73
|
+
},
|
74
|
+
});
|
75
|
+
});
|
76
|
+
|
77
|
+
it("should wrap/unwrap properly with uint8array for nested obj", () => {
|
78
|
+
const test = {
|
79
|
+
a: 1,
|
80
|
+
b: "test",
|
81
|
+
c: new Uint8Array([1, 2, 3]),
|
82
|
+
d: {
|
83
|
+
a: new Uint8Array([1, 2, 3]),
|
84
|
+
b: Buffer.from([1, 2, 3]),
|
85
|
+
c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
|
86
|
+
d: [new Uint8Array([1, 2, 3]), null, undefined],
|
87
|
+
},
|
88
|
+
};
|
89
|
+
|
90
|
+
const wraped = JSONUint8Array.wrap(test);
|
91
|
+
assert.deepStrictEqual(wraped, {
|
92
|
+
a: 1,
|
93
|
+
b: "test",
|
94
|
+
c: "__uint8array__010203",
|
95
|
+
d: {
|
96
|
+
a: "__uint8array__010203",
|
97
|
+
b: "__uint8array__010203",
|
98
|
+
c: ["__uint8array__010203", "__uint8array__010203"],
|
99
|
+
d: ["__uint8array__010203", null, null],
|
100
|
+
},
|
101
|
+
});
|
102
|
+
|
103
|
+
const unwraped = JSONUint8Array.unwrap(wraped);
|
104
|
+
assert.deepStrictEqual(unwraped, {
|
105
|
+
a: 1,
|
106
|
+
b: "test",
|
107
|
+
c: new Uint8Array([1, 2, 3]),
|
108
|
+
d: {
|
109
|
+
a: new Uint8Array([1, 2, 3]),
|
110
|
+
b: new Uint8Array([1, 2, 3]),
|
111
|
+
c: [new Uint8Array([1, 2, 3]), new Uint8Array([1, 2, 3])],
|
112
|
+
d: [new Uint8Array([1, 2, 3]), null, null],
|
113
|
+
},
|
114
|
+
});
|
115
|
+
});
|
116
|
+
});
|
@@ -0,0 +1,61 @@
|
|
1
|
+
// The JSON encoder that supports the `Uint8Array`.
|
2
|
+
import { fromHex, toHex } from "./hex";
|
3
|
+
|
4
|
+
export class JSONUint8Array {
|
5
|
+
static parse(text: string) {
|
6
|
+
return JSON.parse(text, (key, value) => {
|
7
|
+
// Prevent potential prototype poisoning.
|
8
|
+
if (key === "__proto__") {
|
9
|
+
throw new Error("__proto__ is disallowed");
|
10
|
+
}
|
11
|
+
|
12
|
+
if (
|
13
|
+
value &&
|
14
|
+
typeof value === "string" &&
|
15
|
+
value.startsWith("__uint8array__")
|
16
|
+
) {
|
17
|
+
return fromHex(value.replace("__uint8array__", ""));
|
18
|
+
}
|
19
|
+
|
20
|
+
return value;
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
static stringify(obj: unknown): string {
|
25
|
+
return JSON.stringify(obj, (key, value) => {
|
26
|
+
// Prevent potential prototype poisoning.
|
27
|
+
if (key === "__proto__") {
|
28
|
+
throw new Error("__proto__ is disallowed");
|
29
|
+
}
|
30
|
+
|
31
|
+
if (
|
32
|
+
value &&
|
33
|
+
(value instanceof Uint8Array ||
|
34
|
+
(typeof value === "object" &&
|
35
|
+
"type" in value &&
|
36
|
+
"data" in value &&
|
37
|
+
value.type === "Buffer" &&
|
38
|
+
Array.isArray(value.data)))
|
39
|
+
) {
|
40
|
+
const array =
|
41
|
+
value instanceof Uint8Array ? value : new Uint8Array(value.data);
|
42
|
+
|
43
|
+
return `__uint8array__${toHex(array)}`;
|
44
|
+
}
|
45
|
+
|
46
|
+
return value;
|
47
|
+
});
|
48
|
+
}
|
49
|
+
|
50
|
+
static wrap(obj: any): any {
|
51
|
+
if (obj === undefined) return undefined;
|
52
|
+
|
53
|
+
return JSON.parse(JSONUint8Array.stringify(obj));
|
54
|
+
}
|
55
|
+
|
56
|
+
static unwrap(obj: any): any {
|
57
|
+
if (obj === undefined) return undefined;
|
58
|
+
|
59
|
+
return JSONUint8Array.parse(JSON.stringify(obj));
|
60
|
+
}
|
61
|
+
}
|