@keplr-wallet/router 0.9.0 → 0.9.12-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/build/index.d.ts +1 -3
  2. package/build/index.js +1 -3
  3. package/build/index.js.map +1 -1
  4. package/build/json-uint8-array/hex.d.ts +2 -0
  5. package/build/json-uint8-array/hex.js +31 -0
  6. package/build/json-uint8-array/hex.js.map +1 -0
  7. package/build/json-uint8-array/index.js +4 -3
  8. package/build/json-uint8-array/index.js.map +1 -1
  9. package/build/json-uint8-array/json.spec.js +5 -6
  10. package/build/json-uint8-array/json.spec.js.map +1 -1
  11. package/build/message.d.ts +5 -0
  12. package/build/message.js.map +1 -1
  13. package/build/router/index.d.ts +22 -3
  14. package/build/router/index.js +54 -12
  15. package/build/router/index.js.map +1 -1
  16. package/build/types.d.ts +2 -2
  17. package/package.json +2 -7
  18. package/src/index.ts +1 -3
  19. package/src/json-uint8-array/hex.ts +28 -0
  20. package/src/json-uint8-array/index.ts +7 -6
  21. package/src/json-uint8-array/json.spec.ts +0 -1
  22. package/src/message.ts +6 -0
  23. package/src/router/index.ts +64 -3
  24. package/src/types.ts +8 -2
  25. package/build/env/content-script.d.ts +0 -4
  26. package/build/env/content-script.js +0 -18
  27. package/build/env/content-script.js.map +0 -1
  28. package/build/env/extension.d.ts +0 -5
  29. package/build/env/extension.js +0 -127
  30. package/build/env/extension.js.map +0 -1
  31. package/build/env/extension.spec.d.ts +0 -1
  32. package/build/env/extension.spec.js +0 -33
  33. package/build/env/extension.spec.js.map +0 -1
  34. package/build/env/index.d.ts +0 -3
  35. package/build/env/index.js +0 -16
  36. package/build/env/index.js.map +0 -1
  37. package/build/env/mock.d.ts +0 -7
  38. package/build/env/mock.js +0 -23
  39. package/build/env/mock.js.map +0 -1
  40. package/build/guard/content-script.d.ts +0 -4
  41. package/build/guard/content-script.js +0 -14
  42. package/build/guard/content-script.js.map +0 -1
  43. package/build/guard/extension.d.ts +0 -5
  44. package/build/guard/extension.js +0 -27
  45. package/build/guard/extension.js.map +0 -1
  46. package/build/guard/index.d.ts +0 -3
  47. package/build/guard/index.js +0 -16
  48. package/build/guard/index.js.map +0 -1
  49. package/build/guard/mock.d.ts +0 -5
  50. package/build/guard/mock.js +0 -10
  51. package/build/guard/mock.js.map +0 -1
  52. package/build/mock/mock.spec.d.ts +0 -1
  53. package/build/mock/mock.spec.js +0 -118
  54. package/build/mock/mock.spec.js.map +0 -1
  55. package/build/requester/content-script.d.ts +0 -5
  56. package/build/requester/content-script.js +0 -51
  57. package/build/requester/content-script.js.map +0 -1
  58. package/build/requester/extension.d.ts +0 -6
  59. package/build/requester/extension.js +0 -59
  60. package/build/requester/extension.js.map +0 -1
  61. package/build/requester/index.d.ts +0 -3
  62. package/build/requester/index.js +0 -16
  63. package/build/requester/index.js.map +0 -1
  64. package/build/requester/mock.d.ts +0 -8
  65. package/build/requester/mock.js +0 -52
  66. package/build/requester/mock.js.map +0 -1
  67. package/build/router/extension.d.ts +0 -9
  68. package/build/router/extension.js +0 -77
  69. package/build/router/extension.js.map +0 -1
  70. package/build/router/mock.d.ts +0 -17
  71. package/build/router/mock.js +0 -59
  72. package/build/router/mock.js.map +0 -1
  73. package/build/router/types.d.ts +0 -22
  74. package/build/router/types.js +0 -57
  75. package/build/router/types.js.map +0 -1
  76. package/src/env/content-script.ts +0 -18
  77. package/src/env/extension.spec.ts +0 -77
  78. package/src/env/extension.ts +0 -151
  79. package/src/env/index.ts +0 -3
  80. package/src/env/mock.ts +0 -23
  81. package/src/guard/content-script.ts +0 -19
  82. package/src/guard/extension.ts +0 -36
  83. package/src/guard/index.ts +0 -3
  84. package/src/guard/mock.ts +0 -10
  85. package/src/mock/mock.spec.ts +0 -131
  86. package/src/requester/content-script.ts +0 -45
  87. package/src/requester/extension.ts +0 -66
  88. package/src/requester/index.ts +0 -3
  89. package/src/requester/mock.ts +0 -48
  90. package/src/router/extension.ts +0 -72
  91. package/src/router/mock.ts +0 -55
  92. package/src/router/types.ts +0 -64
package/build/index.d.ts CHANGED
@@ -3,8 +3,6 @@ export * from "./handler";
3
3
  export * from "./interfaces";
4
4
  export * from "./types";
5
5
  export * from "./message";
6
- export * from "./requester";
7
6
  export * from "./constant";
8
7
  export * from "./encoding";
9
- export * from "./guard";
10
- export * from "./env";
8
+ export * from "./json-uint8-array";
package/build/index.js CHANGED
@@ -15,9 +15,7 @@ __exportStar(require("./handler"), exports);
15
15
  __exportStar(require("./interfaces"), exports);
16
16
  __exportStar(require("./types"), exports);
17
17
  __exportStar(require("./message"), exports);
18
- __exportStar(require("./requester"), exports);
19
18
  __exportStar(require("./constant"), exports);
20
19
  __exportStar(require("./encoding"), exports);
21
- __exportStar(require("./guard"), exports);
22
- __exportStar(require("./env"), exports);
20
+ __exportStar(require("./json-uint8-array"), exports);
23
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB;AACxB,4CAA0B;AAC1B,8CAA4B;AAC5B,6CAA2B;AAC3B,6CAA2B;AAC3B,0CAAwB;AACxB,wCAAsB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,qDAAmC"}
@@ -0,0 +1,2 @@
1
+ export declare function toHex(data: Uint8Array): string;
2
+ export declare function fromHex(hexstring: string): Uint8Array;
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../src/json-uint8-array/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"}
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JSONUint8Array = void 0;
4
- const buffer_1 = require("buffer/");
5
4
  // The JSON encoder that supports the `Uint8Array`.
5
+ const hex_1 = require("./hex");
6
6
  class JSONUint8Array {
7
7
  static parse(text) {
8
8
  return JSON.parse(text, (_, value) => {
9
9
  if (value &&
10
10
  typeof value === "string" &&
11
11
  value.startsWith("__uint8array__")) {
12
- return new Uint8Array(buffer_1.Buffer.from(value.replace("__uint8array__", ""), "hex"));
12
+ return hex_1.fromHex(value.replace("__uint8array__", ""));
13
13
  }
14
14
  return value;
15
15
  });
@@ -23,7 +23,8 @@ class JSONUint8Array {
23
23
  "data" in value &&
24
24
  value.type === "Buffer" &&
25
25
  Array.isArray(value.data)))) {
26
- return `__uint8array__${buffer_1.Buffer.from(value).toString("hex")}`;
26
+ const array = value instanceof Uint8Array ? value : new Uint8Array(value.data);
27
+ return `__uint8array__${hex_1.toHex(array)}`;
27
28
  }
28
29
  return value;
29
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/json-uint8-array/index.ts"],"names":[],"mappings":";;;AAAA,oCAAiC;AAEjC,mDAAmD;AACnD,MAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACnC,IACE,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAClC;gBACA,OAAO,IAAI,UAAU,CACnB,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CACxD,CAAC;aACH;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,CAAC,EAAE,KAAK,EAAE,EAAE;YACtC,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,OAAO,iBAAiB,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D;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;AA9CD,wCA8CC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/json-uint8-array/index.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,CAAC,EAAE,KAAK,EAAE,EAAE;YACnC,IACE,KAAK;gBACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAClC;gBACA,OAAO,aAAO,CAAC,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,CAAC,EAAE,KAAK,EAAE,EAAE;YACtC,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,WAAK,CAAC,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;AA/CD,wCA+CC"}
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const assert_1 = __importDefault(require("assert"));
7
- const buffer_1 = require("buffer/");
8
7
  const index_1 = require("./index");
9
8
  describe("Test json with Uint8Array", () => {
10
9
  it("should stringify properly with uint8array", () => {
@@ -12,7 +11,7 @@ describe("Test json with Uint8Array", () => {
12
11
  a: 1,
13
12
  b: "test",
14
13
  c: new Uint8Array([1, 2, 3]),
15
- d: buffer_1.Buffer.from([1, 2, 3]),
14
+ d: Buffer.from([1, 2, 3]),
16
15
  e: undefined,
17
16
  f: null,
18
17
  };
@@ -37,8 +36,8 @@ describe("Test json with Uint8Array", () => {
37
36
  c: new Uint8Array([1, 2, 3]),
38
37
  d: {
39
38
  a: new Uint8Array([1, 2, 3]),
40
- b: buffer_1.Buffer.from([1, 2, 3]),
41
- c: [new Uint8Array([1, 2, 3]), buffer_1.Buffer.from([1, 2, 3])],
39
+ b: Buffer.from([1, 2, 3]),
40
+ c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
42
41
  d: [new Uint8Array([1, 2, 3]), null, undefined],
43
42
  },
44
43
  };
@@ -67,8 +66,8 @@ describe("Test json with Uint8Array", () => {
67
66
  c: new Uint8Array([1, 2, 3]),
68
67
  d: {
69
68
  a: new Uint8Array([1, 2, 3]),
70
- b: buffer_1.Buffer.from([1, 2, 3]),
71
- c: [new Uint8Array([1, 2, 3]), buffer_1.Buffer.from([1, 2, 3])],
69
+ b: Buffer.from([1, 2, 3]),
70
+ c: [new Uint8Array([1, 2, 3]), Buffer.from([1, 2, 3])],
72
71
  d: [new Uint8Array([1, 2, 3]), null, undefined],
73
72
  },
74
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"json.spec.js","sourceRoot":"","sources":["../../src/json-uint8-array/json.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.spec.js","sourceRoot":"","sources":["../../src/json-uint8-array/json.spec.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,11 @@ export declare abstract class Message<R> {
30
30
  * And, message manager should check that this origin is set properly.
31
31
  */
32
32
  readonly origin: string;
33
+ /**
34
+ * You can put values here that can be helpful when processing in the router.
35
+ * In logic, these values should not be used.
36
+ */
37
+ routerMeta?: Record<string, any>;
33
38
  /**
34
39
  * Ask for approval if message is sent externally.
35
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,MAAsB,OAAO;IA2B3B;;OAEG;IACH,eAAe,CACb,IAAqC,EACrC,OAAsB;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApCD,0BAoCC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,MAAsB,OAAO;IAiC3B;;OAEG;IACH,eAAe,CACb,IAAqC,EACrC,OAAsB;QAEtB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA1CD,0BA0CC"}
@@ -1,3 +1,22 @@
1
- export * from "./types";
2
- export * from "./extension";
3
- export * from "./mock";
1
+ import { Message } from "../message";
2
+ import { Handler } from "../handler";
3
+ import { EnvProducer, Guard, MessageSender } from "../types";
4
+ import { MessageRegistry } from "../encoding";
5
+ export declare abstract class Router {
6
+ protected readonly envProducer: EnvProducer;
7
+ protected msgRegistry: MessageRegistry;
8
+ protected registeredHandler: Map<string, Handler>;
9
+ protected guards: Guard[];
10
+ protected port: string;
11
+ constructor(envProducer: EnvProducer);
12
+ registerMessage(msgCls: {
13
+ new (...args: any): Message<unknown>;
14
+ } & {
15
+ type(): string;
16
+ }): void;
17
+ addHandler(route: string, handler: Handler): void;
18
+ addGuard(guard: Guard): void;
19
+ abstract listen(port: string): void;
20
+ abstract unlisten(): void;
21
+ protected handleMessage(message: any, sender: MessageSender): Promise<unknown>;
22
+ }
@@ -1,16 +1,58 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
11
10
  };
12
11
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./types"), exports);
14
- __exportStar(require("./extension"), exports);
15
- __exportStar(require("./mock"), exports);
12
+ exports.Router = void 0;
13
+ const encoding_1 = require("../encoding");
14
+ const json_uint8_array_1 = require("../json-uint8-array");
15
+ class Router {
16
+ constructor(envProducer) {
17
+ this.envProducer = envProducer;
18
+ this.msgRegistry = new encoding_1.MessageRegistry();
19
+ this.registeredHandler = new Map();
20
+ this.guards = [];
21
+ this.port = "";
22
+ }
23
+ registerMessage(msgCls) {
24
+ this.msgRegistry.registerMessage(msgCls);
25
+ }
26
+ addHandler(route, handler) {
27
+ if (this.registeredHandler.has(route)) {
28
+ throw new Error(`Already registered type ${route}`);
29
+ }
30
+ this.registeredHandler.set(route, handler);
31
+ }
32
+ addGuard(guard) {
33
+ this.guards.push(guard);
34
+ }
35
+ handleMessage(message, sender) {
36
+ var _a;
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const msg = this.msgRegistry.parseMessage(json_uint8_array_1.JSONUint8Array.unwrap(message));
39
+ const env = this.envProducer(sender, (_a = msg.routerMeta) !== null && _a !== void 0 ? _a : {});
40
+ for (const guard of this.guards) {
41
+ yield guard(env, msg, sender);
42
+ }
43
+ // Can happen throw
44
+ msg.validateBasic();
45
+ const route = msg.route();
46
+ if (!route) {
47
+ throw new Error("Null router");
48
+ }
49
+ const handler = this.registeredHandler.get(route);
50
+ if (!handler) {
51
+ throw new Error("Can't get handler");
52
+ }
53
+ return json_uint8_array_1.JSONUint8Array.wrap(yield handler(env, msg));
54
+ });
55
+ }
56
+ }
57
+ exports.Router = Router;
16
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0CAA8C;AAC9C,0DAAqD;AAErD,MAAsB,MAAM;IAQ1B,YAA+B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAP7C,gBAAW,GAAoB,IAAI,0BAAe,EAAE,CAAC;QACrD,sBAAiB,GAAyB,IAAI,GAAG,EAAE,CAAC;QAEpD,WAAM,GAAY,EAAE,CAAC;QAErB,SAAI,GAAG,EAAE,CAAC;IAEsC,CAAC;IAEpD,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;IAMe,aAAa,CAC3B,OAAY,EACZ,MAAqB;;;YAErB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,iCAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,QAAE,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,iCAAc,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;KACrD;CACF;AAzDD,wBAyDC"}
package/build/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="firefox-webext-browser" />
2
2
  import { Message } from "./message";
3
- export declare type MessageSender = Pick<browser.runtime.MessageSender, "id" | "url">;
3
+ export declare type MessageSender = Pick<browser.runtime.MessageSender, "id" | "url" | "tab">;
4
4
  export declare type FnRequestInteractionOptions = {
5
5
  forceOpenWindow?: boolean;
6
6
  channel?: string;
@@ -10,7 +10,7 @@ export interface Env {
10
10
  readonly isInternalMsg: boolean;
11
11
  readonly requestInteraction: FnRequestInteraction;
12
12
  }
13
- export declare type EnvProducer = (sender: MessageSender) => Env;
13
+ export declare type EnvProducer = (sender: MessageSender, routerMeta: Record<string, any>) => Env;
14
14
  export interface MessageRequester {
15
15
  sendMessage<M extends Message<unknown>>(port: string, msg: M): Promise<M extends Message<infer R> ? R : never>;
16
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keplr-wallet/router",
3
- "version": "0.9.0",
3
+ "version": "0.9.12-rc.3",
4
4
  "main": "build/index.js",
5
5
  "author": "chainapsis",
6
6
  "license": "Apache-2.0",
@@ -16,10 +16,5 @@
16
16
  "lint-test": "eslint \"src/**/*\" && prettier --check \"src/**/*\"",
17
17
  "lint-fix": "eslint --fix \"src/**/*\" && prettier --write \"src/**/*\""
18
18
  },
19
- "dependencies": {
20
- "@keplr-wallet/popup": "^0.9.0",
21
- "buffer": "^6.0.3",
22
- "p-queue": "^6.6.2"
23
- },
24
- "gitHead": "7b44031f1ca4f99e800b3b66bc5d7585197ea202"
19
+ "gitHead": "b9860ae52543cc989e6daaecf467536659be0fe4"
25
20
  }
package/src/index.ts CHANGED
@@ -3,8 +3,6 @@ export * from "./handler";
3
3
  export * from "./interfaces";
4
4
  export * from "./types";
5
5
  export * from "./message";
6
- export * from "./requester";
7
6
  export * from "./constant";
8
7
  export * from "./encoding";
9
- export * from "./guard";
10
- export * from "./env";
8
+ export * from "./json-uint8-array";
@@ -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
+ }
@@ -1,6 +1,6 @@
1
- import { Buffer } from "buffer/";
2
-
3
1
  // The JSON encoder that supports the `Uint8Array`.
2
+ import { fromHex, toHex } from "./hex";
3
+
4
4
  export class JSONUint8Array {
5
5
  static parse(text: string) {
6
6
  return JSON.parse(text, (_, value) => {
@@ -9,9 +9,7 @@ export class JSONUint8Array {
9
9
  typeof value === "string" &&
10
10
  value.startsWith("__uint8array__")
11
11
  ) {
12
- return new Uint8Array(
13
- Buffer.from(value.replace("__uint8array__", ""), "hex")
14
- );
12
+ return fromHex(value.replace("__uint8array__", ""));
15
13
  }
16
14
 
17
15
  return value;
@@ -29,7 +27,10 @@ export class JSONUint8Array {
29
27
  value.type === "Buffer" &&
30
28
  Array.isArray(value.data)))
31
29
  ) {
32
- return `__uint8array__${Buffer.from(value).toString("hex")}`;
30
+ const array =
31
+ value instanceof Uint8Array ? value : new Uint8Array(value.data);
32
+
33
+ return `__uint8array__${toHex(array)}`;
33
34
  }
34
35
 
35
36
  return value;
@@ -1,6 +1,5 @@
1
1
  import assert from "assert";
2
2
 
3
- import { Buffer } from "buffer/";
4
3
  import { JSONUint8Array } from "./index";
5
4
 
6
5
  describe("Test json with Uint8Array", () => {
package/src/message.ts CHANGED
@@ -36,6 +36,12 @@ export abstract class Message<R> {
36
36
  */
37
37
  public readonly origin!: string;
38
38
 
39
+ /**
40
+ * You can put values here that can be helpful when processing in the router.
41
+ * In logic, these values should not be used.
42
+ */
43
+ public routerMeta?: Record<string, any>;
44
+
39
45
  /**
40
46
  * Ask for approval if message is sent externally.
41
47
  */
@@ -1,3 +1,64 @@
1
- export * from "./types";
2
- export * from "./extension";
3
- export * from "./mock";
1
+ import { Message } from "../message";
2
+ import { Handler } from "../handler";
3
+ import { EnvProducer, Guard, MessageSender } from "../types";
4
+ import { MessageRegistry } from "../encoding";
5
+ import { JSONUint8Array } from "../json-uint8-array";
6
+
7
+ export abstract class Router {
8
+ protected msgRegistry: MessageRegistry = new MessageRegistry();
9
+ protected registeredHandler: Map<string, Handler> = new Map();
10
+
11
+ protected guards: Guard[] = [];
12
+
13
+ protected port = "";
14
+
15
+ constructor(protected readonly envProducer: EnvProducer) {}
16
+
17
+ public registerMessage(
18
+ msgCls: { new (...args: any): Message<unknown> } & { type(): string }
19
+ ): void {
20
+ this.msgRegistry.registerMessage(msgCls);
21
+ }
22
+
23
+ public addHandler(route: string, handler: Handler) {
24
+ if (this.registeredHandler.has(route)) {
25
+ throw new Error(`Already registered type ${route}`);
26
+ }
27
+
28
+ this.registeredHandler.set(route, handler);
29
+ }
30
+
31
+ public addGuard(guard: Guard): void {
32
+ this.guards.push(guard);
33
+ }
34
+
35
+ public abstract listen(port: string): void;
36
+
37
+ public abstract unlisten(): void;
38
+
39
+ protected async handleMessage(
40
+ message: any,
41
+ sender: MessageSender
42
+ ): Promise<unknown> {
43
+ const msg = this.msgRegistry.parseMessage(JSONUint8Array.unwrap(message));
44
+ const env = this.envProducer(sender, msg.routerMeta ?? {});
45
+
46
+ for (const guard of this.guards) {
47
+ await guard(env, msg, sender);
48
+ }
49
+
50
+ // Can happen throw
51
+ msg.validateBasic();
52
+
53
+ const route = msg.route();
54
+ if (!route) {
55
+ throw new Error("Null router");
56
+ }
57
+ const handler = this.registeredHandler.get(route);
58
+ if (!handler) {
59
+ throw new Error("Can't get handler");
60
+ }
61
+
62
+ return JSONUint8Array.wrap(await handler(env, msg));
63
+ }
64
+ }
package/src/types.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { Message } from "./message";
2
2
 
3
- export type MessageSender = Pick<browser.runtime.MessageSender, "id" | "url">;
3
+ export type MessageSender = Pick<
4
+ browser.runtime.MessageSender,
5
+ "id" | "url" | "tab"
6
+ >;
4
7
 
5
8
  export type FnRequestInteractionOptions = {
6
9
  forceOpenWindow?: boolean;
@@ -18,7 +21,10 @@ export interface Env {
18
21
  readonly requestInteraction: FnRequestInteraction;
19
22
  }
20
23
 
21
- export type EnvProducer = (sender: MessageSender) => Env;
24
+ export type EnvProducer = (
25
+ sender: MessageSender,
26
+ routerMeta: Record<string, any>
27
+ ) => Env;
22
28
 
23
29
  export interface MessageRequester {
24
30
  sendMessage<M extends Message<unknown>>(
@@ -1,4 +0,0 @@
1
- import { Env, MessageSender } from "../types";
2
- export declare class ContentScriptEnv {
3
- static readonly produceEnv: (sender: MessageSender) => Env;
4
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ContentScriptEnv = void 0;
4
- // ContentScriptEnv only checks the id is same as the extension id.
5
- // And, doesn't support the request interaction.
6
- class ContentScriptEnv {
7
- }
8
- exports.ContentScriptEnv = ContentScriptEnv;
9
- ContentScriptEnv.produceEnv = (sender) => {
10
- const isInternalMsg = sender.id === browser.runtime.id;
11
- return {
12
- isInternalMsg,
13
- requestInteraction: () => {
14
- throw new Error("ContentScriptEnv doesn't support `requestInteraction`");
15
- },
16
- };
17
- };
18
- //# sourceMappingURL=content-script.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-script.js","sourceRoot":"","sources":["../../src/env/content-script.ts"],"names":[],"mappings":";;;AAEA,mEAAmE;AACnE,gDAAgD;AAChD,MAAa,gBAAgB;;AAA7B,4CAaC;AAZiB,2BAAU,GAAG,CAAC,MAAqB,EAAO,EAAE;IAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAEvD,OAAO;QACL,aAAa;QACb,kBAAkB,EAAE,GAAG,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- import { Env, MessageSender } from "../types";
2
- export declare class ExtensionEnv {
3
- static readonly produceEnv: (sender: MessageSender) => Env;
4
- static readonly checkIsInternalMessage: (sender: MessageSender, extensionId: string, extensionUrl: string) => boolean;
5
- }