@metamask-previews/json-rpc-engine 10.5.0-preview-4f4c98e → 10.5.0-preview-eb263b0ee

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 (206) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/JsonRpcEngine.cjs +352 -0
  3. package/dist/JsonRpcEngine.cjs.map +1 -0
  4. package/dist/{JsonRpcEngine.d.ts → JsonRpcEngine.d.cts} +3 -3
  5. package/dist/JsonRpcEngine.d.cts.map +1 -0
  6. package/dist/JsonRpcEngine.d.mts +132 -0
  7. package/dist/JsonRpcEngine.d.mts.map +1 -0
  8. package/dist/{JsonRpcEngine.js → JsonRpcEngine.mjs} +5 -5
  9. package/dist/JsonRpcEngine.mjs.map +1 -0
  10. package/dist/asV2Middleware.cjs +57 -0
  11. package/dist/asV2Middleware.cjs.map +1 -0
  12. package/dist/{asV2Middleware.d.ts → asV2Middleware.d.cts} +6 -6
  13. package/dist/asV2Middleware.d.cts.map +1 -0
  14. package/dist/asV2Middleware.d.mts +20 -0
  15. package/dist/asV2Middleware.d.mts.map +1 -0
  16. package/dist/{asV2Middleware.js → asV2Middleware.mjs} +5 -5
  17. package/dist/asV2Middleware.mjs.map +1 -0
  18. package/dist/createAsyncMiddleware.cjs +71 -0
  19. package/dist/createAsyncMiddleware.cjs.map +1 -0
  20. package/dist/{createAsyncMiddleware.d.ts → createAsyncMiddleware.d.cts} +3 -3
  21. package/dist/createAsyncMiddleware.d.cts.map +1 -0
  22. package/dist/createAsyncMiddleware.d.mts +28 -0
  23. package/dist/createAsyncMiddleware.d.mts.map +1 -0
  24. package/dist/{createAsyncMiddleware.js → createAsyncMiddleware.mjs} +1 -1
  25. package/dist/createAsyncMiddleware.mjs.map +1 -0
  26. package/dist/createMethodMiddleware.cjs +56 -0
  27. package/dist/createMethodMiddleware.cjs.map +1 -0
  28. package/dist/{createMethodMiddleware.d.ts → createMethodMiddleware.d.cts} +6 -6
  29. package/dist/createMethodMiddleware.d.cts.map +1 -0
  30. package/dist/createMethodMiddleware.d.mts +86 -0
  31. package/dist/createMethodMiddleware.d.mts.map +1 -0
  32. package/dist/{createMethodMiddleware.js → createMethodMiddleware.mjs} +3 -3
  33. package/dist/createMethodMiddleware.mjs.map +1 -0
  34. package/dist/createOriginMiddleware.cjs +18 -0
  35. package/dist/createOriginMiddleware.cjs.map +1 -0
  36. package/dist/{createOriginMiddleware.d.ts → createOriginMiddleware.d.cts} +3 -3
  37. package/dist/createOriginMiddleware.d.cts.map +1 -0
  38. package/dist/createOriginMiddleware.d.mts +11 -0
  39. package/dist/createOriginMiddleware.d.mts.map +1 -0
  40. package/dist/{createOriginMiddleware.js → createOriginMiddleware.mjs} +1 -1
  41. package/dist/createOriginMiddleware.mjs.map +1 -0
  42. package/dist/createScaffoldMiddleware.cjs +31 -0
  43. package/dist/createScaffoldMiddleware.cjs.map +1 -0
  44. package/dist/{createScaffoldMiddleware.d.ts → createScaffoldMiddleware.d.cts} +3 -3
  45. package/dist/createScaffoldMiddleware.d.cts.map +1 -0
  46. package/dist/createScaffoldMiddleware.d.mts +18 -0
  47. package/dist/createScaffoldMiddleware.d.mts.map +1 -0
  48. package/dist/{createScaffoldMiddleware.js → createScaffoldMiddleware.mjs} +1 -1
  49. package/dist/createScaffoldMiddleware.mjs.map +1 -0
  50. package/dist/getUniqueId.cjs +20 -0
  51. package/dist/getUniqueId.cjs.map +1 -0
  52. package/dist/{getUniqueId.d.ts → getUniqueId.d.cts} +1 -1
  53. package/dist/getUniqueId.d.cts.map +1 -0
  54. package/dist/getUniqueId.d.mts +9 -0
  55. package/dist/getUniqueId.d.mts.map +1 -0
  56. package/dist/{getUniqueId.js → getUniqueId.mjs} +1 -1
  57. package/dist/getUniqueId.mjs.map +1 -0
  58. package/dist/idRemapMiddleware.cjs +29 -0
  59. package/dist/idRemapMiddleware.cjs.map +1 -0
  60. package/dist/{idRemapMiddleware.d.ts → idRemapMiddleware.d.cts} +3 -3
  61. package/dist/idRemapMiddleware.d.cts.map +1 -0
  62. package/dist/idRemapMiddleware.d.mts +14 -0
  63. package/dist/idRemapMiddleware.d.mts.map +1 -0
  64. package/dist/{idRemapMiddleware.js → idRemapMiddleware.mjs} +2 -2
  65. package/dist/idRemapMiddleware.mjs.map +1 -0
  66. package/dist/index.cjs +22 -0
  67. package/dist/index.cjs.map +1 -0
  68. package/dist/index.d.cts +13 -0
  69. package/dist/index.d.cts.map +1 -0
  70. package/dist/index.d.mts +13 -0
  71. package/dist/index.d.mts.map +1 -0
  72. package/dist/index.mjs +10 -0
  73. package/dist/index.mjs.map +1 -0
  74. package/dist/mergeMiddleware.cjs +18 -0
  75. package/dist/mergeMiddleware.cjs.map +1 -0
  76. package/dist/{mergeMiddleware.d.ts → mergeMiddleware.d.cts} +3 -3
  77. package/dist/mergeMiddleware.d.cts.map +1 -0
  78. package/dist/mergeMiddleware.d.mts +11 -0
  79. package/dist/mergeMiddleware.d.mts.map +1 -0
  80. package/dist/{mergeMiddleware.js → mergeMiddleware.mjs} +2 -2
  81. package/dist/mergeMiddleware.mjs.map +1 -0
  82. package/dist/v2/JsonRpcEngineV2.cjs +220 -0
  83. package/dist/v2/JsonRpcEngineV2.cjs.map +1 -0
  84. package/dist/v2/{JsonRpcEngineV2.d.ts → JsonRpcEngineV2.d.cts} +5 -5
  85. package/dist/v2/JsonRpcEngineV2.d.cts.map +1 -0
  86. package/dist/v2/JsonRpcEngineV2.d.mts +136 -0
  87. package/dist/v2/JsonRpcEngineV2.d.mts.map +1 -0
  88. package/dist/v2/{JsonRpcEngineV2.js → JsonRpcEngineV2.mjs} +13 -9
  89. package/dist/v2/JsonRpcEngineV2.mjs.map +1 -0
  90. package/dist/v2/JsonRpcServer.cjs +178 -0
  91. package/dist/v2/JsonRpcServer.cjs.map +1 -0
  92. package/dist/v2/{JsonRpcServer.d.ts → JsonRpcServer.d.cts} +4 -4
  93. package/dist/v2/JsonRpcServer.d.cts.map +1 -0
  94. package/dist/v2/JsonRpcServer.d.mts +104 -0
  95. package/dist/v2/JsonRpcServer.d.mts.map +1 -0
  96. package/dist/v2/{JsonRpcServer.js → JsonRpcServer.mjs} +5 -5
  97. package/dist/v2/JsonRpcServer.mjs.map +1 -0
  98. package/dist/v2/MiddlewareContext.cjs +108 -0
  99. package/dist/v2/MiddlewareContext.cjs.map +1 -0
  100. package/dist/v2/{MiddlewareContext.d.ts → MiddlewareContext.d.cts} +2 -2
  101. package/dist/v2/MiddlewareContext.d.cts.map +1 -0
  102. package/dist/v2/MiddlewareContext.d.mts +108 -0
  103. package/dist/v2/MiddlewareContext.d.mts.map +1 -0
  104. package/dist/v2/{MiddlewareContext.js → MiddlewareContext.mjs} +2 -2
  105. package/dist/v2/MiddlewareContext.mjs.map +1 -0
  106. package/dist/v2/asLegacyMiddleware.cjs +45 -0
  107. package/dist/v2/asLegacyMiddleware.cjs.map +1 -0
  108. package/dist/v2/{asLegacyMiddleware.d.ts → asLegacyMiddleware.d.cts} +5 -5
  109. package/dist/v2/asLegacyMiddleware.d.cts.map +1 -0
  110. package/dist/v2/asLegacyMiddleware.d.mts +19 -0
  111. package/dist/v2/asLegacyMiddleware.d.mts.map +1 -0
  112. package/dist/v2/{asLegacyMiddleware.js → asLegacyMiddleware.mjs} +4 -4
  113. package/dist/v2/asLegacyMiddleware.mjs.map +1 -0
  114. package/dist/v2/compatibility-utils.cjs +167 -0
  115. package/dist/v2/compatibility-utils.cjs.map +1 -0
  116. package/dist/v2/{compatibility-utils.d.ts → compatibility-utils.d.cts} +5 -5
  117. package/dist/v2/compatibility-utils.d.cts.map +1 -0
  118. package/dist/v2/compatibility-utils.d.mts +75 -0
  119. package/dist/v2/compatibility-utils.d.mts.map +1 -0
  120. package/dist/v2/{compatibility-utils.js → compatibility-utils.mjs} +6 -6
  121. package/dist/v2/compatibility-utils.mjs.map +1 -0
  122. package/dist/v2/createMethodMiddleware.cjs +44 -0
  123. package/dist/v2/createMethodMiddleware.cjs.map +1 -0
  124. package/dist/v2/{createMethodMiddleware.d.ts → createMethodMiddleware.d.cts} +5 -5
  125. package/dist/v2/createMethodMiddleware.d.cts.map +1 -0
  126. package/dist/v2/createMethodMiddleware.d.mts +71 -0
  127. package/dist/v2/createMethodMiddleware.d.mts.map +1 -0
  128. package/dist/v2/{createMethodMiddleware.js → createMethodMiddleware.mjs} +3 -2
  129. package/dist/v2/createMethodMiddleware.mjs.map +1 -0
  130. package/dist/v2/createOriginMiddleware.cjs +18 -0
  131. package/dist/v2/createOriginMiddleware.cjs.map +1 -0
  132. package/dist/v2/{createOriginMiddleware.d.ts → createOriginMiddleware.d.cts} +4 -4
  133. package/dist/v2/createOriginMiddleware.d.cts.map +1 -0
  134. package/dist/v2/createOriginMiddleware.d.mts +13 -0
  135. package/dist/v2/createOriginMiddleware.d.mts.map +1 -0
  136. package/dist/v2/{createOriginMiddleware.js → createOriginMiddleware.mjs} +2 -1
  137. package/dist/v2/createOriginMiddleware.mjs.map +1 -0
  138. package/dist/v2/createScaffoldMiddleware.cjs +25 -0
  139. package/dist/v2/createScaffoldMiddleware.cjs.map +1 -0
  140. package/dist/v2/{createScaffoldMiddleware.d.ts → createScaffoldMiddleware.d.cts} +4 -4
  141. package/dist/v2/createScaffoldMiddleware.d.cts.map +1 -0
  142. package/dist/v2/createScaffoldMiddleware.d.mts +30 -0
  143. package/dist/v2/createScaffoldMiddleware.d.mts.map +1 -0
  144. package/dist/v2/{createScaffoldMiddleware.js → createScaffoldMiddleware.mjs} +1 -1
  145. package/dist/v2/createScaffoldMiddleware.mjs.map +1 -0
  146. package/dist/v2/index.cjs +26 -0
  147. package/dist/v2/index.cjs.map +1 -0
  148. package/dist/v2/index.d.cts +14 -0
  149. package/dist/v2/index.d.cts.map +1 -0
  150. package/dist/v2/index.d.mts +14 -0
  151. package/dist/v2/index.d.mts.map +1 -0
  152. package/dist/v2/index.mjs +10 -0
  153. package/dist/v2/index.mjs.map +1 -0
  154. package/dist/v2/utils.cjs +122 -0
  155. package/dist/v2/utils.cjs.map +1 -0
  156. package/dist/v2/{utils.d.ts → utils.d.cts} +5 -5
  157. package/dist/v2/utils.d.cts.map +1 -0
  158. package/dist/v2/utils.d.mts +85 -0
  159. package/dist/v2/utils.d.mts.map +1 -0
  160. package/dist/v2/{utils.js → utils.mjs} +3 -3
  161. package/dist/v2/utils.mjs.map +1 -0
  162. package/package.json +25 -15
  163. package/dist/JsonRpcEngine.d.ts.map +0 -1
  164. package/dist/JsonRpcEngine.js.map +0 -1
  165. package/dist/asV2Middleware.d.ts.map +0 -1
  166. package/dist/asV2Middleware.js.map +0 -1
  167. package/dist/createAsyncMiddleware.d.ts.map +0 -1
  168. package/dist/createAsyncMiddleware.js.map +0 -1
  169. package/dist/createMethodMiddleware.d.ts.map +0 -1
  170. package/dist/createMethodMiddleware.js.map +0 -1
  171. package/dist/createOriginMiddleware.d.ts.map +0 -1
  172. package/dist/createOriginMiddleware.js.map +0 -1
  173. package/dist/createScaffoldMiddleware.d.ts.map +0 -1
  174. package/dist/createScaffoldMiddleware.js.map +0 -1
  175. package/dist/getUniqueId.d.ts.map +0 -1
  176. package/dist/getUniqueId.js.map +0 -1
  177. package/dist/idRemapMiddleware.d.ts.map +0 -1
  178. package/dist/idRemapMiddleware.js.map +0 -1
  179. package/dist/index.d.ts +0 -13
  180. package/dist/index.d.ts.map +0 -1
  181. package/dist/index.js +0 -10
  182. package/dist/index.js.map +0 -1
  183. package/dist/mergeMiddleware.d.ts.map +0 -1
  184. package/dist/mergeMiddleware.js.map +0 -1
  185. package/dist/v2/JsonRpcEngineV2.d.ts.map +0 -1
  186. package/dist/v2/JsonRpcEngineV2.js.map +0 -1
  187. package/dist/v2/JsonRpcServer.d.ts.map +0 -1
  188. package/dist/v2/JsonRpcServer.js.map +0 -1
  189. package/dist/v2/MiddlewareContext.d.ts.map +0 -1
  190. package/dist/v2/MiddlewareContext.js.map +0 -1
  191. package/dist/v2/asLegacyMiddleware.d.ts.map +0 -1
  192. package/dist/v2/asLegacyMiddleware.js.map +0 -1
  193. package/dist/v2/compatibility-utils.d.ts.map +0 -1
  194. package/dist/v2/compatibility-utils.js.map +0 -1
  195. package/dist/v2/createMethodMiddleware.d.ts.map +0 -1
  196. package/dist/v2/createMethodMiddleware.js.map +0 -1
  197. package/dist/v2/createOriginMiddleware.d.ts.map +0 -1
  198. package/dist/v2/createOriginMiddleware.js.map +0 -1
  199. package/dist/v2/createScaffoldMiddleware.d.ts.map +0 -1
  200. package/dist/v2/createScaffoldMiddleware.js.map +0 -1
  201. package/dist/v2/index.d.ts +0 -14
  202. package/dist/v2/index.d.ts.map +0 -1
  203. package/dist/v2/index.js +0 -10
  204. package/dist/v2/index.js.map +0 -1
  205. package/dist/v2/utils.d.ts.map +0 -1
  206. package/dist/v2/utils.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -9,7 +9,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Changed
11
11
 
12
- - **BREAKING:** Bump minimum Node.js version to 22 ([#9168](https://github.com/MetaMask/core/pull/9168))
13
12
  - Bump `@metamask/utils` from `^11.9.0` to `^11.11.0` ([#9074](https://github.com/MetaMask/core/pull/9074))
14
13
  - Bump `@metamask/messenger` from `^1.2.0` to `^2.0.0` ([#9392](https://github.com/MetaMask/core/pull/9392))
15
14
 
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _JsonRpcEngine_instances, _a, _JsonRpcEngine_isDestroyed, _JsonRpcEngine_middleware, _JsonRpcEngine_notificationHandler, _JsonRpcEngine_assertIsNotDestroyed, _JsonRpcEngine_handleBatch, _JsonRpcEngine_handle, _JsonRpcEngine_processRequest, _JsonRpcEngine_runAllMiddleware, _JsonRpcEngine_runMiddleware, _JsonRpcEngine_runReturnHandlers, _JsonRpcEngine_checkForCompletion;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.JsonRpcEngine = void 0;
19
+ const rpc_errors_1 = require("@metamask/rpc-errors");
20
+ const safe_event_emitter_1 = __importDefault(require("@metamask/safe-event-emitter"));
21
+ const utils_1 = require("@metamask/utils");
22
+ const utils_js_1 = require("./v2/utils.cjs");
23
+ const DESTROYED_ERROR_MESSAGE = 'This engine is destroyed and can no longer be used.';
24
+ /**
25
+ * A JSON-RPC request and response processor.
26
+ *
27
+ * Give it a stack of middleware, pass it requests, and get back responses.
28
+ *
29
+ * @deprecated Use `JsonRpcEngineV2` instead.
30
+ */
31
+ class JsonRpcEngine extends safe_event_emitter_1.default {
32
+ /**
33
+ * Constructs a {@link JsonRpcEngine} instance.
34
+ *
35
+ * @param options - Options bag.
36
+ * @param options.notificationHandler - A function for handling JSON-RPC
37
+ * notifications. A JSON-RPC notification is defined as a JSON-RPC request
38
+ * without an `id` property. If this option is _not_ provided, notifications
39
+ * will be treated the same as requests. If this option _is_ provided,
40
+ * notifications will be passed to the handler function without touching
41
+ * the engine's middleware stack. This function should not throw or reject.
42
+ */
43
+ constructor({ notificationHandler } = {}) {
44
+ super();
45
+ _JsonRpcEngine_instances.add(this);
46
+ /**
47
+ * Indicating whether this engine is destroyed or not.
48
+ */
49
+ _JsonRpcEngine_isDestroyed.set(this, false);
50
+ _JsonRpcEngine_middleware.set(this, void 0);
51
+ _JsonRpcEngine_notificationHandler.set(this, void 0);
52
+ __classPrivateFieldSet(this, _JsonRpcEngine_middleware, [], "f");
53
+ __classPrivateFieldSet(this, _JsonRpcEngine_notificationHandler, notificationHandler, "f");
54
+ }
55
+ /**
56
+ * Calls the `destroy()` function of any middleware with that property, clears
57
+ * the middleware array, and marks this engine as destroyed. A destroyed
58
+ * engine cannot be used.
59
+ */
60
+ destroy() {
61
+ __classPrivateFieldGet(this, _JsonRpcEngine_middleware, "f").forEach((middleware) => {
62
+ if (
63
+ // `in` walks the prototype chain, which is probably the desired
64
+ // behavior here.
65
+ 'destroy' in middleware &&
66
+ typeof middleware.destroy === 'function') {
67
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
68
+ middleware.destroy();
69
+ }
70
+ });
71
+ __classPrivateFieldSet(this, _JsonRpcEngine_middleware, [], "f");
72
+ __classPrivateFieldSet(this, _JsonRpcEngine_isDestroyed, true, "f");
73
+ }
74
+ /**
75
+ * Add a middleware function to the engine's middleware stack.
76
+ *
77
+ * @param middleware - The middleware function to add.
78
+ */
79
+ push(middleware) {
80
+ __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_assertIsNotDestroyed).call(this);
81
+ __classPrivateFieldGet(this, _JsonRpcEngine_middleware, "f").push(middleware);
82
+ }
83
+ handle(req, callback) {
84
+ __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_assertIsNotDestroyed).call(this);
85
+ if (callback && typeof callback !== 'function') {
86
+ throw new Error('"callback" must be a function if provided.');
87
+ }
88
+ if (Array.isArray(req)) {
89
+ if (callback) {
90
+ return __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_handleBatch).call(this, req,
91
+ // This assertion is safe because of the runtime checks validating that `req` is an array and `callback` is defined.
92
+ // There is only one overload signature that satisfies both conditions, and its `callback` type is the one that's being asserted.
93
+ callback);
94
+ }
95
+ return __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_handleBatch).call(this, req);
96
+ }
97
+ if (callback) {
98
+ return __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_handle).call(this, req, callback);
99
+ }
100
+ return this._promiseHandle(req);
101
+ }
102
+ /**
103
+ * Returns this engine as a middleware function that can be pushed to other
104
+ * engines.
105
+ *
106
+ * @returns This engine as a middleware function.
107
+ */
108
+ asMiddleware() {
109
+ __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_assertIsNotDestroyed).call(this);
110
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
111
+ return async (req, res, next, end) => {
112
+ try {
113
+ const [middlewareError, isComplete, returnHandlers] = await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runAllMiddleware).call(_a, req, res, __classPrivateFieldGet(this, _JsonRpcEngine_middleware, "f"));
114
+ if (isComplete) {
115
+ await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runReturnHandlers).call(_a, returnHandlers);
116
+ return end(middlewareError);
117
+ }
118
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
119
+ return next(async (handlerCallback) => {
120
+ try {
121
+ await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runReturnHandlers).call(_a, returnHandlers);
122
+ }
123
+ catch (error) {
124
+ return handlerCallback(error);
125
+ }
126
+ return handlerCallback();
127
+ });
128
+ }
129
+ catch (error) {
130
+ return end(error);
131
+ }
132
+ };
133
+ }
134
+ /**
135
+ * A promise-wrapped _handle.
136
+ *
137
+ * @param request - The JSON-RPC request.
138
+ * @returns The JSON-RPC response.
139
+ */
140
+ // This function is used in tests, so we cannot easily change it to use the
141
+ // hash syntax.
142
+ // eslint-disable-next-line no-restricted-syntax
143
+ async _promiseHandle(request) {
144
+ return new Promise((resolve, reject) => {
145
+ __classPrivateFieldGet(this, _JsonRpcEngine_instances, "m", _JsonRpcEngine_handle).call(this, request, (error, res) => {
146
+ // For notifications, the response will be `undefined`, and any caught
147
+ // errors are unexpected and should be surfaced to the caller.
148
+ if (error && res === undefined) {
149
+ // We are not going to change this behavior.
150
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
151
+ reject(error);
152
+ }
153
+ else {
154
+ // Excepting notifications, there will always be a response, and it will
155
+ // always have any error that is caught and propagated.
156
+ resolve(res);
157
+ }
158
+ }).catch(reject);
159
+ });
160
+ }
161
+ }
162
+ exports.JsonRpcEngine = JsonRpcEngine;
163
+ _a = JsonRpcEngine, _JsonRpcEngine_isDestroyed = new WeakMap(), _JsonRpcEngine_middleware = new WeakMap(), _JsonRpcEngine_notificationHandler = new WeakMap(), _JsonRpcEngine_instances = new WeakSet(), _JsonRpcEngine_assertIsNotDestroyed = function _JsonRpcEngine_assertIsNotDestroyed() {
164
+ if (__classPrivateFieldGet(this, _JsonRpcEngine_isDestroyed, "f")) {
165
+ throw new Error(DESTROYED_ERROR_MESSAGE);
166
+ }
167
+ }, _JsonRpcEngine_handleBatch =
168
+ /**
169
+ * Handles a batch of JSON-RPC requests, either in `async` or callback
170
+ * fashion.
171
+ *
172
+ * @param requests - The request objects to process.
173
+ * @param callback - The completion callback.
174
+ * @returns The array of responses, or nothing if a callback was specified.
175
+ */
176
+ async function _JsonRpcEngine_handleBatch(requests, callback) {
177
+ // The order here is important
178
+ try {
179
+ // If the batch is an empty array, the response array must contain a single object
180
+ if (requests.length === 0) {
181
+ const response = [
182
+ {
183
+ id: null,
184
+ jsonrpc: '2.0',
185
+ error: new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.invalidRequest, 'Request batch must contain plain objects. Received an empty array'),
186
+ },
187
+ ];
188
+ if (callback) {
189
+ return callback(null, response);
190
+ }
191
+ return response;
192
+ }
193
+ // 2. Wait for all requests to finish, or throw on some kind of fatal
194
+ // error
195
+ const responses = (await Promise.all(
196
+ // 1. Begin executing each request in the order received
197
+ requests.map(this._promiseHandle.bind(this)))).filter(
198
+ // Filter out any notification responses.
199
+ (response) => response !== undefined);
200
+ // 3. Return batch response
201
+ if (callback) {
202
+ return callback(null, responses);
203
+ }
204
+ return responses;
205
+ }
206
+ catch (error) {
207
+ if (callback) {
208
+ return callback(error);
209
+ }
210
+ throw error;
211
+ }
212
+ }, _JsonRpcEngine_handle =
213
+ /**
214
+ * Ensures that the request / notification object is valid, processes it, and
215
+ * passes any error and response object to the given callback.
216
+ *
217
+ * Does not reject.
218
+ *
219
+ * @param callerReq - The request object from the caller.
220
+ * @param callback - The callback function.
221
+ * @returns Nothing.
222
+ */
223
+ async function _JsonRpcEngine_handle(callerReq, callback) {
224
+ if (!callerReq ||
225
+ Array.isArray(callerReq) ||
226
+ typeof callerReq !== 'object') {
227
+ const error = new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.invalidRequest, `Requests must be plain objects. Received: ${typeof callerReq}`, { request: callerReq });
228
+ return callback(error, { id: null, jsonrpc: '2.0', error });
229
+ }
230
+ if (typeof callerReq.method !== 'string') {
231
+ const error = new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.invalidRequest, `Must specify a string method. Received: ${typeof callerReq.method}`, { request: callerReq });
232
+ if (__classPrivateFieldGet(this, _JsonRpcEngine_notificationHandler, "f") && !(0, utils_1.isJsonRpcRequest)(callerReq)) {
233
+ // Do not reply to notifications, even if they are malformed.
234
+ return callback(null);
235
+ }
236
+ return callback(error, {
237
+ // Typecast: This could be a notification, but we want to access the
238
+ // `id` even if it doesn't exist.
239
+ id: callerReq.id ?? null,
240
+ jsonrpc: '2.0',
241
+ error,
242
+ });
243
+ }
244
+ else if (__classPrivateFieldGet(this, _JsonRpcEngine_notificationHandler, "f") &&
245
+ (0, utils_1.isJsonRpcNotification)(callerReq) &&
246
+ !(0, utils_1.isJsonRpcRequest)(callerReq)) {
247
+ try {
248
+ await __classPrivateFieldGet(this, _JsonRpcEngine_notificationHandler, "f").call(this, callerReq);
249
+ }
250
+ catch (error) {
251
+ return callback(error);
252
+ }
253
+ return callback(null);
254
+ }
255
+ let error = null;
256
+ // Handle requests.
257
+ // Typecast: Permit missing id's for backwards compatibility.
258
+ const req = { ...callerReq };
259
+ const res = {
260
+ id: req.id,
261
+ jsonrpc: req.jsonrpc,
262
+ };
263
+ try {
264
+ await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_processRequest).call(_a, req, res, __classPrivateFieldGet(this, _JsonRpcEngine_middleware, "f"));
265
+ }
266
+ catch (_error) {
267
+ // A request handler error, a re-thrown middleware error, or something
268
+ // unexpected.
269
+ error = _error;
270
+ }
271
+ if (error) {
272
+ // Ensure no result is present on an errored response
273
+ delete res.result;
274
+ res.error ?? (res.error = (0, rpc_errors_1.serializeError)(error));
275
+ }
276
+ return callback(error, res);
277
+ }, _JsonRpcEngine_processRequest = async function _JsonRpcEngine_processRequest(req, res, middlewares) {
278
+ const [error, isComplete, returnHandlers] = await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runAllMiddleware).call(_a, req, res, middlewares);
279
+ // Throw if "end" was not called, or if the response has neither a result
280
+ // nor an error.
281
+ __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_checkForCompletion).call(_a, req, res, isComplete);
282
+ // The return handlers should run even if an error was encountered during
283
+ // middleware processing.
284
+ await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runReturnHandlers).call(_a, returnHandlers);
285
+ // Now we re-throw the middleware processing error, if any, to catch it
286
+ // further up the call chain.
287
+ if (error) {
288
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
289
+ throw error;
290
+ }
291
+ }, _JsonRpcEngine_runAllMiddleware = async function _JsonRpcEngine_runAllMiddleware(req, res, middlewares) {
292
+ const returnHandlers = [];
293
+ let error = null;
294
+ let isComplete = false;
295
+ // Go down stack of middleware, call and collect optional returnHandlers
296
+ for (const middleware of middlewares) {
297
+ [error, isComplete] = await __classPrivateFieldGet(_a, _a, "m", _JsonRpcEngine_runMiddleware).call(_a, req, res, middleware, returnHandlers);
298
+ if (isComplete) {
299
+ break;
300
+ }
301
+ }
302
+ return [error, isComplete, returnHandlers.reverse()];
303
+ }, _JsonRpcEngine_runMiddleware = async function _JsonRpcEngine_runMiddleware(request, response, middleware, returnHandlers) {
304
+ return new Promise((resolve) => {
305
+ const end = (error) => {
306
+ const parsedError = error ?? response.error;
307
+ if (parsedError) {
308
+ response.error = (0, rpc_errors_1.serializeError)(parsedError);
309
+ }
310
+ // True indicates that the request should end
311
+ resolve([parsedError, true]);
312
+ };
313
+ const next = (returnHandler) => {
314
+ if (response.error) {
315
+ end(response.error);
316
+ }
317
+ else {
318
+ if (returnHandler) {
319
+ if (typeof returnHandler !== 'function') {
320
+ end(new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: "next" return handlers must be functions. ` +
321
+ `Received "${typeof returnHandler}" for request:\n${(0, utils_js_1.stringify)(request)}`, { request }));
322
+ }
323
+ returnHandlers.push(returnHandler);
324
+ }
325
+ // False indicates that the request should not end
326
+ resolve([null, false]);
327
+ }
328
+ };
329
+ try {
330
+ middleware(request, response, next, end);
331
+ }
332
+ catch (error) {
333
+ end(error);
334
+ }
335
+ });
336
+ }, _JsonRpcEngine_runReturnHandlers = async function _JsonRpcEngine_runReturnHandlers(handlers) {
337
+ for (const handler of handlers) {
338
+ await new Promise((resolve, reject) => {
339
+ // We are not going to change this behavior.
340
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
341
+ handler((error) => (error ? reject(error) : resolve()));
342
+ });
343
+ }
344
+ }, _JsonRpcEngine_checkForCompletion = function _JsonRpcEngine_checkForCompletion(request, response, isComplete) {
345
+ if (!(0, utils_1.hasProperty)(response, 'result') && !(0, utils_1.hasProperty)(response, 'error')) {
346
+ throw new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Response has no error or result for request:\n${(0, utils_js_1.stringify)(request)}`, { request });
347
+ }
348
+ if (!isComplete) {
349
+ throw new rpc_errors_1.JsonRpcError(rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Nothing ended request:\n${(0, utils_js_1.stringify)(request)}`, { request });
350
+ }
351
+ };
352
+ //# sourceMappingURL=JsonRpcEngine.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcEngine.cjs","sourceRoot":"","sources":["../src/JsonRpcEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { errorCodes, JsonRpcError, serializeError } from '@metamask/rpc-errors';\nimport SafeEventEmitter from '@metamask/safe-event-emitter';\nimport type {\n JsonRpcError as SerializedJsonRpcError,\n JsonRpcRequest,\n JsonRpcResponse,\n JsonRpcNotification,\n Json,\n JsonRpcParams,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport {\n hasProperty,\n isJsonRpcNotification,\n isJsonRpcRequest,\n} from '@metamask/utils';\n\nimport { stringify } from './v2/utils.js';\n\nexport type JsonRpcEngineCallbackError = Error | SerializedJsonRpcError | null;\n\n/**\n * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.\n */\nexport type JsonRpcEngineReturnHandler = (\n done: (error?: unknown) => void,\n) => void;\n\n/**\n * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.\n */\nexport type JsonRpcEngineNextCallback = (\n returnHandlerCallback?: JsonRpcEngineReturnHandler,\n) => void;\n\n/**\n * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.\n */\nexport type JsonRpcEngineEndCallback = (error?: unknown) => void;\n\n/**\n * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.\n */\nexport type JsonRpcMiddleware<\n Params extends JsonRpcParams,\n Result extends Json,\n> = {\n (\n req: JsonRpcRequest<Params>,\n res: PendingJsonRpcResponse<Result>,\n next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n ): void;\n destroy?: () => void | Promise<void>;\n};\n\nconst DESTROYED_ERROR_MESSAGE =\n 'This engine is destroyed and can no longer be used.';\n\n/**\n * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.\n */\nexport type JsonRpcNotificationHandler<Params extends JsonRpcParams> = (\n notification: JsonRpcNotification<Params>,\n) => void | Promise<void>;\n\ntype JsonRpcEngineArgs = {\n /**\n * A function for handling JSON-RPC notifications. A JSON-RPC notification is\n * defined as a JSON-RPC request without an `id` property. If this option is\n * _not_ provided, notifications will be treated the same as requests. If this\n * option _is_ provided, notifications will be passed to the handler\n * function without touching the engine's middleware stack.\n *\n * This function should not throw or reject.\n */\n notificationHandler?: JsonRpcNotificationHandler<JsonRpcParams>;\n};\n\n/**\n * A JSON-RPC request and response processor.\n *\n * Give it a stack of middleware, pass it requests, and get back responses.\n *\n * @deprecated Use `JsonRpcEngineV2` instead.\n */\nexport class JsonRpcEngine extends SafeEventEmitter {\n /**\n * Indicating whether this engine is destroyed or not.\n */\n #isDestroyed = false;\n\n #middleware: JsonRpcMiddleware<JsonRpcParams, Json>[];\n\n readonly #notificationHandler?:\n | JsonRpcNotificationHandler<JsonRpcParams>\n | undefined;\n\n /**\n * Constructs a {@link JsonRpcEngine} instance.\n *\n * @param options - Options bag.\n * @param options.notificationHandler - A function for handling JSON-RPC\n * notifications. A JSON-RPC notification is defined as a JSON-RPC request\n * without an `id` property. If this option is _not_ provided, notifications\n * will be treated the same as requests. If this option _is_ provided,\n * notifications will be passed to the handler function without touching\n * the engine's middleware stack. This function should not throw or reject.\n */\n constructor({ notificationHandler }: JsonRpcEngineArgs = {}) {\n super();\n this.#middleware = [];\n this.#notificationHandler = notificationHandler;\n }\n\n /**\n * Throws an error if this engine is destroyed.\n */\n #assertIsNotDestroyed(): void {\n if (this.#isDestroyed) {\n throw new Error(DESTROYED_ERROR_MESSAGE);\n }\n }\n\n /**\n * Calls the `destroy()` function of any middleware with that property, clears\n * the middleware array, and marks this engine as destroyed. A destroyed\n * engine cannot be used.\n */\n destroy(): void {\n this.#middleware.forEach(\n (middleware: JsonRpcMiddleware<JsonRpcParams, Json>) => {\n if (\n // `in` walks the prototype chain, which is probably the desired\n // behavior here.\n 'destroy' in middleware &&\n typeof middleware.destroy === 'function'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n middleware.destroy();\n }\n },\n );\n this.#middleware = [];\n this.#isDestroyed = true;\n }\n\n /**\n * Add a middleware function to the engine's middleware stack.\n *\n * @param middleware - The middleware function to add.\n */\n push<Params extends JsonRpcParams, Result extends Json>(\n middleware: JsonRpcMiddleware<Params, Result>,\n ): void {\n this.#assertIsNotDestroyed();\n this.#middleware.push(middleware as JsonRpcMiddleware<JsonRpcParams, Json>);\n }\n\n /**\n * Handle a JSON-RPC request, and return a response.\n *\n * @param request - The request to handle.\n * @param callback - An error-first callback that will receive the response.\n */\n handle<Params extends JsonRpcParams, Result extends Json>(\n request: JsonRpcRequest<Params>,\n callback: (error: unknown, response: JsonRpcResponse<Result>) => void,\n ): void;\n\n /**\n * Handle a JSON-RPC notification.\n *\n * @param notification - The notification to handle.\n * @param callback - An error-first callback that will receive a `void` response.\n */\n handle<Params extends JsonRpcParams>(\n notification: JsonRpcNotification<Params>,\n callback: (error: unknown, response: void) => void,\n ): void;\n\n /**\n * Handle an array of JSON-RPC requests and/or notifications, and return an\n * array of responses to any included requests.\n *\n * @param request - The requests to handle.\n * @param callback - An error-first callback that will receive the array of\n * responses.\n */\n handle<Params extends JsonRpcParams, Result extends Json>(\n requests: (JsonRpcRequest<Params> | JsonRpcNotification<Params>)[],\n callback: (error: unknown, responses: JsonRpcResponse<Result>[]) => void,\n ): void;\n\n /**\n * Handle a JSON-RPC request, and return a response.\n *\n * @param request - The JSON-RPC request to handle.\n * @returns The JSON-RPC response.\n */\n handle<Params extends JsonRpcParams, Result extends Json>(\n request: JsonRpcRequest<Params>,\n ): Promise<JsonRpcResponse<Result>>;\n\n /**\n * Handle a JSON-RPC notification.\n *\n * @param notification - The notification to handle.\n */\n handle<Params extends JsonRpcParams>(\n notification: JsonRpcNotification<Params>,\n ): Promise<void>;\n\n /**\n * Handle an array of JSON-RPC requests and/or notifications, and return an\n * array of responses to any included requests.\n *\n * @param request - The JSON-RPC requests to handle.\n * @returns An array of JSON-RPC responses.\n */\n handle<Params extends JsonRpcParams, Result extends Json>(\n requests: (JsonRpcRequest<Params> | JsonRpcNotification<Params>)[],\n ): Promise<JsonRpcResponse<Result>[]>;\n\n handle(\n req:\n | (JsonRpcRequest | JsonRpcNotification)[]\n | JsonRpcRequest\n | JsonRpcNotification,\n callback?: (error: unknown, response: never) => void,\n ): Promise<JsonRpcResponse[]> | Promise<JsonRpcResponse | void> {\n this.#assertIsNotDestroyed();\n\n if (callback && typeof callback !== 'function') {\n throw new Error('\"callback\" must be a function if provided.');\n }\n\n if (Array.isArray(req)) {\n if (callback) {\n return this.#handleBatch(\n req,\n // This assertion is safe because of the runtime checks validating that `req` is an array and `callback` is defined.\n // There is only one overload signature that satisfies both conditions, and its `callback` type is the one that's being asserted.\n callback as (error: unknown, responses?: JsonRpcResponse[]) => void,\n );\n }\n return this.#handleBatch(req);\n }\n\n if (callback) {\n return this.#handle(\n req,\n callback as (error: unknown, response?: JsonRpcResponse) => void,\n );\n }\n return this._promiseHandle(req);\n }\n\n /**\n * Returns this engine as a middleware function that can be pushed to other\n * engines.\n *\n * @returns This engine as a middleware function.\n */\n asMiddleware(): JsonRpcMiddleware<JsonRpcParams, Json> {\n this.#assertIsNotDestroyed();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async (req, res, next, end) => {\n try {\n const [middlewareError, isComplete, returnHandlers] =\n await JsonRpcEngine.#runAllMiddleware(req, res, this.#middleware);\n\n if (isComplete) {\n await JsonRpcEngine.#runReturnHandlers(returnHandlers);\n return end(middlewareError);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return next(async (handlerCallback) => {\n try {\n await JsonRpcEngine.#runReturnHandlers(returnHandlers);\n } catch (error) {\n return handlerCallback(error);\n }\n return handlerCallback();\n });\n } catch (error) {\n return end(error);\n }\n };\n }\n\n /**\n * Like _handle, but for batch requests.\n */\n #handleBatch(\n reqs: (JsonRpcRequest | JsonRpcNotification)[],\n ): Promise<JsonRpcResponse[]>;\n\n /**\n * Like _handle, but for batch requests.\n */\n #handleBatch(\n reqs: (JsonRpcRequest | JsonRpcNotification)[],\n callback: (error: unknown, responses?: JsonRpcResponse[]) => void,\n ): Promise<void>;\n\n /**\n * Handles a batch of JSON-RPC requests, either in `async` or callback\n * fashion.\n *\n * @param requests - The request objects to process.\n * @param callback - The completion callback.\n * @returns The array of responses, or nothing if a callback was specified.\n */\n async #handleBatch(\n requests: (JsonRpcRequest | JsonRpcNotification)[],\n callback?: (error: unknown, responses?: JsonRpcResponse[]) => void,\n ): Promise<JsonRpcResponse[] | void> {\n // The order here is important\n try {\n // If the batch is an empty array, the response array must contain a single object\n if (requests.length === 0) {\n const response: JsonRpcResponse[] = [\n {\n id: null,\n jsonrpc: '2.0',\n error: new JsonRpcError(\n errorCodes.rpc.invalidRequest,\n 'Request batch must contain plain objects. Received an empty array',\n ),\n },\n ];\n if (callback) {\n return callback(null, response);\n }\n return response;\n }\n\n // 2. Wait for all requests to finish, or throw on some kind of fatal\n // error\n const responses = (\n await Promise.all(\n // 1. Begin executing each request in the order received\n requests.map(this._promiseHandle.bind(this)),\n )\n ).filter(\n // Filter out any notification responses.\n (response): response is JsonRpcResponse => response !== undefined,\n );\n\n // 3. Return batch response\n if (callback) {\n return callback(null, responses);\n }\n return responses;\n } catch (error) {\n if (callback) {\n return callback(error);\n }\n\n throw error;\n }\n }\n\n /**\n * A promise-wrapped _handle.\n *\n * @param request - The JSON-RPC request.\n * @returns The JSON-RPC response.\n */\n // This function is used in tests, so we cannot easily change it to use the\n // hash syntax.\n // eslint-disable-next-line no-restricted-syntax\n private async _promiseHandle(\n request: JsonRpcRequest | JsonRpcNotification,\n ): Promise<JsonRpcResponse | void> {\n return new Promise((resolve, reject) => {\n this.#handle(request, (error, res) => {\n // For notifications, the response will be `undefined`, and any caught\n // errors are unexpected and should be surfaced to the caller.\n if (error && res === undefined) {\n // We are not going to change this behavior.\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(error);\n } else {\n // Excepting notifications, there will always be a response, and it will\n // always have any error that is caught and propagated.\n resolve(res);\n }\n }).catch(reject);\n });\n }\n\n /**\n * Ensures that the request / notification object is valid, processes it, and\n * passes any error and response object to the given callback.\n *\n * Does not reject.\n *\n * @param callerReq - The request object from the caller.\n * @param callback - The callback function.\n * @returns Nothing.\n */\n async #handle(\n callerReq: JsonRpcRequest | JsonRpcNotification,\n callback: (error: unknown, response?: JsonRpcResponse) => void,\n ): Promise<void> {\n if (\n !callerReq ||\n Array.isArray(callerReq) ||\n typeof callerReq !== 'object'\n ) {\n const error = new JsonRpcError(\n errorCodes.rpc.invalidRequest,\n `Requests must be plain objects. Received: ${typeof callerReq}`,\n { request: callerReq },\n );\n return callback(error, { id: null, jsonrpc: '2.0', error });\n }\n\n if (typeof callerReq.method !== 'string') {\n const error = new JsonRpcError(\n errorCodes.rpc.invalidRequest,\n `Must specify a string method. Received: ${typeof callerReq.method}`,\n { request: callerReq },\n );\n\n if (this.#notificationHandler && !isJsonRpcRequest(callerReq)) {\n // Do not reply to notifications, even if they are malformed.\n return callback(null);\n }\n\n return callback(error, {\n // Typecast: This could be a notification, but we want to access the\n // `id` even if it doesn't exist.\n id: (callerReq as JsonRpcRequest).id ?? null,\n jsonrpc: '2.0',\n error,\n });\n } else if (\n this.#notificationHandler &&\n isJsonRpcNotification(callerReq) &&\n !isJsonRpcRequest(callerReq)\n ) {\n try {\n await this.#notificationHandler(callerReq);\n } catch (error) {\n return callback(error);\n }\n return callback(null);\n }\n let error = null;\n\n // Handle requests.\n // Typecast: Permit missing id's for backwards compatibility.\n const req = { ...(callerReq as JsonRpcRequest) };\n const res: PendingJsonRpcResponse = {\n id: req.id,\n jsonrpc: req.jsonrpc,\n };\n\n try {\n await JsonRpcEngine.#processRequest(req, res, this.#middleware);\n } catch (_error) {\n // A request handler error, a re-thrown middleware error, or something\n // unexpected.\n error = _error;\n }\n\n if (error) {\n // Ensure no result is present on an errored response\n delete res.result;\n res.error ??= serializeError(error);\n }\n\n return callback(error, res as JsonRpcResponse);\n }\n\n /**\n * For the given request and response, runs all middleware and their return\n * handlers, if any, and ensures that internal request processing semantics\n * are satisfied.\n *\n * @param req - The request object.\n * @param res - The response object.\n * @param middlewares - The stack of middleware functions.\n */\n static async #processRequest(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n middlewares: JsonRpcMiddleware<JsonRpcParams, Json>[],\n ): Promise<void> {\n const [error, isComplete, returnHandlers] =\n await JsonRpcEngine.#runAllMiddleware(req, res, middlewares);\n\n // Throw if \"end\" was not called, or if the response has neither a result\n // nor an error.\n JsonRpcEngine.#checkForCompletion(req, res, isComplete);\n\n // The return handlers should run even if an error was encountered during\n // middleware processing.\n await JsonRpcEngine.#runReturnHandlers(returnHandlers);\n\n // Now we re-throw the middleware processing error, if any, to catch it\n // further up the call chain.\n if (error) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw error;\n }\n }\n\n /**\n * Serially executes the given stack of middleware.\n *\n * @param req - The request object.\n * @param res - The response object.\n * @param middlewares - The stack of middleware functions to execute.\n * @returns An array of any error encountered during middleware execution,\n * a boolean indicating whether the request was completed, and an array of\n * middleware-defined return handlers.\n */\n static async #runAllMiddleware(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n middlewares: JsonRpcMiddleware<JsonRpcParams, Json>[],\n ): Promise<\n [\n unknown, // error\n boolean, // isComplete\n JsonRpcEngineReturnHandler[],\n ]\n > {\n const returnHandlers: JsonRpcEngineReturnHandler[] = [];\n let error = null;\n let isComplete = false;\n\n // Go down stack of middleware, call and collect optional returnHandlers\n for (const middleware of middlewares) {\n [error, isComplete] = await JsonRpcEngine.#runMiddleware(\n req,\n res,\n middleware,\n returnHandlers,\n );\n\n if (isComplete) {\n break;\n }\n }\n return [error, isComplete, returnHandlers.reverse()];\n }\n\n /**\n * Runs an individual middleware function.\n *\n * @param request - The request object.\n * @param response - The response object.\n * @param middleware - The middleware function to execute.\n * @param returnHandlers - The return handlers array for the current request.\n * @returns An array of any error encountered during middleware execution,\n * and a boolean indicating whether the request should end.\n */\n static async #runMiddleware(\n request: JsonRpcRequest,\n response: PendingJsonRpcResponse,\n middleware: JsonRpcMiddleware<JsonRpcParams, Json>,\n returnHandlers: JsonRpcEngineReturnHandler[],\n ): Promise<[unknown, boolean]> {\n return new Promise((resolve) => {\n const end: JsonRpcEngineEndCallback = (error) => {\n const parsedError = error ?? response.error;\n if (parsedError) {\n response.error = serializeError(parsedError);\n }\n // True indicates that the request should end\n resolve([parsedError, true]);\n };\n\n const next: JsonRpcEngineNextCallback = (\n returnHandler?: JsonRpcEngineReturnHandler,\n ) => {\n if (response.error) {\n end(response.error);\n } else {\n if (returnHandler) {\n if (typeof returnHandler !== 'function') {\n end(\n new JsonRpcError(\n errorCodes.rpc.internal,\n `JsonRpcEngine: \"next\" return handlers must be functions. ` +\n `Received \"${typeof returnHandler}\" for request:\\n${stringify(\n request,\n )}`,\n { request },\n ),\n );\n }\n returnHandlers.push(returnHandler);\n }\n\n // False indicates that the request should not end\n resolve([null, false]);\n }\n };\n\n try {\n middleware(request, response, next, end);\n } catch (error) {\n end(error);\n }\n });\n }\n\n /**\n * Serially executes array of return handlers. The request and response are\n * assumed to be in their scope.\n *\n * @param handlers - The return handlers to execute.\n */\n static async #runReturnHandlers(\n handlers: JsonRpcEngineReturnHandler[],\n ): Promise<void> {\n for (const handler of handlers) {\n await new Promise<void>((resolve, reject) => {\n // We are not going to change this behavior.\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n handler((error) => (error ? reject(error) : resolve()));\n });\n }\n }\n\n /**\n * Throws an error if the response has neither a result nor an error, or if\n * the \"isComplete\" flag is falsy.\n *\n * @param request - The request object.\n * @param response - The response object.\n * @param isComplete - Boolean from {@link JsonRpcEngine.#runAllMiddleware}\n * indicating whether a middleware ended the request.\n */\n static #checkForCompletion(\n request: JsonRpcRequest,\n response: PendingJsonRpcResponse,\n isComplete: boolean,\n ): void {\n if (!hasProperty(response, 'result') && !hasProperty(response, 'error')) {\n throw new JsonRpcError(\n errorCodes.rpc.internal,\n `JsonRpcEngine: Response has no error or result for request:\\n${stringify(\n request,\n )}`,\n { request },\n );\n }\n\n if (!isComplete) {\n throw new JsonRpcError(\n errorCodes.rpc.internal,\n `JsonRpcEngine: Nothing ended request:\\n${stringify(request)}`,\n { request },\n );\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import SafeEventEmitter from '@metamask/safe-event-emitter';
2
- import type { JsonRpcError as SerializedJsonRpcError, JsonRpcRequest, JsonRpcResponse, JsonRpcNotification, Json, JsonRpcParams, PendingJsonRpcResponse } from '@metamask/utils';
1
+ import SafeEventEmitter from "@metamask/safe-event-emitter";
2
+ import type { JsonRpcError as SerializedJsonRpcError, JsonRpcRequest, JsonRpcResponse, JsonRpcNotification, Json, JsonRpcParams, PendingJsonRpcResponse } from "@metamask/utils";
3
3
  export type JsonRpcEngineCallbackError = Error | SerializedJsonRpcError | null;
4
4
  /**
5
5
  * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
@@ -129,4 +129,4 @@ export declare class JsonRpcEngine extends SafeEventEmitter {
129
129
  private _promiseHandle;
130
130
  }
131
131
  export {};
132
- //# sourceMappingURL=JsonRpcEngine.d.ts.map
132
+ //# sourceMappingURL=JsonRpcEngine.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcEngine.d.cts","sourceRoot":"","sources":["../src/JsonRpcEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import SafeEventEmitter from "@metamask/safe-event-emitter";
2
+ import type { JsonRpcError as SerializedJsonRpcError, JsonRpcRequest, JsonRpcResponse, JsonRpcNotification, Json, JsonRpcParams, PendingJsonRpcResponse } from "@metamask/utils";
3
+ export type JsonRpcEngineCallbackError = Error | SerializedJsonRpcError | null;
4
+ /**
5
+ * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
6
+ */
7
+ export type JsonRpcEngineReturnHandler = (done: (error?: unknown) => void) => void;
8
+ /**
9
+ * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
10
+ */
11
+ export type JsonRpcEngineNextCallback = (returnHandlerCallback?: JsonRpcEngineReturnHandler) => void;
12
+ /**
13
+ * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
14
+ */
15
+ export type JsonRpcEngineEndCallback = (error?: unknown) => void;
16
+ /**
17
+ * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
18
+ */
19
+ export type JsonRpcMiddleware<Params extends JsonRpcParams, Result extends Json> = {
20
+ (req: JsonRpcRequest<Params>, res: PendingJsonRpcResponse<Result>, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback): void;
21
+ destroy?: () => void | Promise<void>;
22
+ };
23
+ /**
24
+ * @deprecated Use `JsonRpcEngineV2` and its corresponding types instead.
25
+ */
26
+ export type JsonRpcNotificationHandler<Params extends JsonRpcParams> = (notification: JsonRpcNotification<Params>) => void | Promise<void>;
27
+ type JsonRpcEngineArgs = {
28
+ /**
29
+ * A function for handling JSON-RPC notifications. A JSON-RPC notification is
30
+ * defined as a JSON-RPC request without an `id` property. If this option is
31
+ * _not_ provided, notifications will be treated the same as requests. If this
32
+ * option _is_ provided, notifications will be passed to the handler
33
+ * function without touching the engine's middleware stack.
34
+ *
35
+ * This function should not throw or reject.
36
+ */
37
+ notificationHandler?: JsonRpcNotificationHandler<JsonRpcParams>;
38
+ };
39
+ /**
40
+ * A JSON-RPC request and response processor.
41
+ *
42
+ * Give it a stack of middleware, pass it requests, and get back responses.
43
+ *
44
+ * @deprecated Use `JsonRpcEngineV2` instead.
45
+ */
46
+ export declare class JsonRpcEngine extends SafeEventEmitter {
47
+ #private;
48
+ /**
49
+ * Constructs a {@link JsonRpcEngine} instance.
50
+ *
51
+ * @param options - Options bag.
52
+ * @param options.notificationHandler - A function for handling JSON-RPC
53
+ * notifications. A JSON-RPC notification is defined as a JSON-RPC request
54
+ * without an `id` property. If this option is _not_ provided, notifications
55
+ * will be treated the same as requests. If this option _is_ provided,
56
+ * notifications will be passed to the handler function without touching
57
+ * the engine's middleware stack. This function should not throw or reject.
58
+ */
59
+ constructor({ notificationHandler }?: JsonRpcEngineArgs);
60
+ /**
61
+ * Calls the `destroy()` function of any middleware with that property, clears
62
+ * the middleware array, and marks this engine as destroyed. A destroyed
63
+ * engine cannot be used.
64
+ */
65
+ destroy(): void;
66
+ /**
67
+ * Add a middleware function to the engine's middleware stack.
68
+ *
69
+ * @param middleware - The middleware function to add.
70
+ */
71
+ push<Params extends JsonRpcParams, Result extends Json>(middleware: JsonRpcMiddleware<Params, Result>): void;
72
+ /**
73
+ * Handle a JSON-RPC request, and return a response.
74
+ *
75
+ * @param request - The request to handle.
76
+ * @param callback - An error-first callback that will receive the response.
77
+ */
78
+ handle<Params extends JsonRpcParams, Result extends Json>(request: JsonRpcRequest<Params>, callback: (error: unknown, response: JsonRpcResponse<Result>) => void): void;
79
+ /**
80
+ * Handle a JSON-RPC notification.
81
+ *
82
+ * @param notification - The notification to handle.
83
+ * @param callback - An error-first callback that will receive a `void` response.
84
+ */
85
+ handle<Params extends JsonRpcParams>(notification: JsonRpcNotification<Params>, callback: (error: unknown, response: void) => void): void;
86
+ /**
87
+ * Handle an array of JSON-RPC requests and/or notifications, and return an
88
+ * array of responses to any included requests.
89
+ *
90
+ * @param request - The requests to handle.
91
+ * @param callback - An error-first callback that will receive the array of
92
+ * responses.
93
+ */
94
+ handle<Params extends JsonRpcParams, Result extends Json>(requests: (JsonRpcRequest<Params> | JsonRpcNotification<Params>)[], callback: (error: unknown, responses: JsonRpcResponse<Result>[]) => void): void;
95
+ /**
96
+ * Handle a JSON-RPC request, and return a response.
97
+ *
98
+ * @param request - The JSON-RPC request to handle.
99
+ * @returns The JSON-RPC response.
100
+ */
101
+ handle<Params extends JsonRpcParams, Result extends Json>(request: JsonRpcRequest<Params>): Promise<JsonRpcResponse<Result>>;
102
+ /**
103
+ * Handle a JSON-RPC notification.
104
+ *
105
+ * @param notification - The notification to handle.
106
+ */
107
+ handle<Params extends JsonRpcParams>(notification: JsonRpcNotification<Params>): Promise<void>;
108
+ /**
109
+ * Handle an array of JSON-RPC requests and/or notifications, and return an
110
+ * array of responses to any included requests.
111
+ *
112
+ * @param request - The JSON-RPC requests to handle.
113
+ * @returns An array of JSON-RPC responses.
114
+ */
115
+ handle<Params extends JsonRpcParams, Result extends Json>(requests: (JsonRpcRequest<Params> | JsonRpcNotification<Params>)[]): Promise<JsonRpcResponse<Result>[]>;
116
+ /**
117
+ * Returns this engine as a middleware function that can be pushed to other
118
+ * engines.
119
+ *
120
+ * @returns This engine as a middleware function.
121
+ */
122
+ asMiddleware(): JsonRpcMiddleware<JsonRpcParams, Json>;
123
+ /**
124
+ * A promise-wrapped _handle.
125
+ *
126
+ * @param request - The JSON-RPC request.
127
+ * @returns The JSON-RPC response.
128
+ */
129
+ private _promiseHandle;
130
+ }
131
+ export {};
132
+ //# sourceMappingURL=JsonRpcEngine.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcEngine.d.mts","sourceRoot":"","sources":["../src/JsonRpcEngine.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _JsonRpcEngine_instances, _a, _JsonRpcEngine_isDestroyed, _JsonRpcEngine_middleware, _JsonRpcEngine_notificationHandler, _JsonRpcEngine_assertIsNotDestroyed, _JsonRpcEngine_handleBatch, _JsonRpcEngine_handle, _JsonRpcEngine_processRequest, _JsonRpcEngine_runAllMiddleware, _JsonRpcEngine_runMiddleware, _JsonRpcEngine_runReturnHandlers, _JsonRpcEngine_checkForCompletion;
13
- import { errorCodes, JsonRpcError, serializeError } from '@metamask/rpc-errors';
14
- import SafeEventEmitter from '@metamask/safe-event-emitter';
15
- import { hasProperty, isJsonRpcNotification, isJsonRpcRequest, } from '@metamask/utils';
16
- import { stringify } from './v2/utils.js';
13
+ import { errorCodes, JsonRpcError, serializeError } from "@metamask/rpc-errors";
14
+ import SafeEventEmitter from "@metamask/safe-event-emitter";
15
+ import { hasProperty, isJsonRpcNotification, isJsonRpcRequest } from "@metamask/utils";
16
+ import { stringify } from "./v2/utils.mjs";
17
17
  const DESTROYED_ERROR_MESSAGE = 'This engine is destroyed and can no longer be used.';
18
18
  /**
19
19
  * A JSON-RPC request and response processor.
@@ -342,4 +342,4 @@ async function _JsonRpcEngine_handle(callerReq, callback) {
342
342
  throw new JsonRpcError(errorCodes.rpc.internal, `JsonRpcEngine: Nothing ended request:\n${stringify(request)}`, { request });
343
343
  }
344
344
  };
345
- //# sourceMappingURL=JsonRpcEngine.js.map
345
+ //# sourceMappingURL=JsonRpcEngine.mjs.map