From 071b23817b10764bb2c86a695333ba4e344153c4 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 20 Apr 2026 13:21:24 +0200 Subject: [PATCH 1/3] feat: Add createOriginMiddleware --- .../src/v2/createOriginMiddleware.test.ts | 19 +++++++++++++++++++ .../src/v2/createOriginMiddleware.ts | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts create mode 100644 packages/json-rpc-engine/src/v2/createOriginMiddleware.ts diff --git a/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts b/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts new file mode 100644 index 00000000000..1b7fb15ba8d --- /dev/null +++ b/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts @@ -0,0 +1,19 @@ +import { makeRequest } from '../../tests/utils'; +import { createOriginMiddleware } from './createOriginMiddleware'; +import { JsonRpcEngineV2 } from './JsonRpcEngineV2'; + +describe('createOriginMiddleware', () => { + it('sets the origin on the context object', async () => { + const origin = 'https://metamask.io'; + const middleware = createOriginMiddleware(origin); + + const engine = JsonRpcEngineV2.create({ + middleware: [ + middleware, + ({ context }): string => context.assertGet('origin'), + ], + }); + + expect(await engine.handle(makeRequest())).toBe(origin); + }); +}); diff --git a/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts b/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts new file mode 100644 index 00000000000..16234c6dc3f --- /dev/null +++ b/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts @@ -0,0 +1,18 @@ +import { JsonRpcMiddleware } from './JsonRpcEngineV2'; +import { MiddlewareContext } from './MiddlewareContext'; +import { Json, JsonRpcRequest } from './utils'; + +/** + * Create a middleware function that adds `origin` to the middleware context. + * + * @param origin - The origin. + * @returns The middleware. + */ +export function createOriginMiddleware< + Context extends MiddlewareContext<{ origin: string }>, +>(origin: string): JsonRpcMiddleware { + return ({ context, next }) => { + context.set('origin', origin); + return next(); + }; +} From 47352ba4b032ec935e1deaaad9162156cd59555e Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 20 Apr 2026 13:23:07 +0200 Subject: [PATCH 2/3] Add CHANGELOG entry --- packages/json-rpc-engine/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/json-rpc-engine/CHANGELOG.md b/packages/json-rpc-engine/CHANGELOG.md index 19f9bd77b2f..472b1d5a516 100644 --- a/packages/json-rpc-engine/CHANGELOG.md +++ b/packages/json-rpc-engine/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add `createOriginMiddleware` utility ([#8522](https://github.com/MetaMask/core/pull/8522)) + ## [10.2.4] ### Fixed From bacdcefc3cffed888c93229e9399361354313856 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 20 Apr 2026 13:24:20 +0200 Subject: [PATCH 3/3] Add export --- packages/json-rpc-engine/src/v2/index.test.ts | 1 + packages/json-rpc-engine/src/v2/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/json-rpc-engine/src/v2/index.test.ts b/packages/json-rpc-engine/src/v2/index.test.ts index a36b0ef1b99..6e7ce718356 100644 --- a/packages/json-rpc-engine/src/v2/index.test.ts +++ b/packages/json-rpc-engine/src/v2/index.test.ts @@ -9,6 +9,7 @@ describe('@metamask/json-rpc-engine/v2', () => { "JsonRpcServer", "MiddlewareContext", "asLegacyMiddleware", + "createOriginMiddleware", "createScaffoldMiddleware", "getUniqueId", "isNotification", diff --git a/packages/json-rpc-engine/src/v2/index.ts b/packages/json-rpc-engine/src/v2/index.ts index 393b4244bd6..058448747fe 100644 --- a/packages/json-rpc-engine/src/v2/index.ts +++ b/packages/json-rpc-engine/src/v2/index.ts @@ -1,5 +1,6 @@ export { asLegacyMiddleware } from './asLegacyMiddleware'; export { getUniqueId } from '../getUniqueId'; +export { createOriginMiddleware } from './createOriginMiddleware'; export { createScaffoldMiddleware } from './createScaffoldMiddleware'; export { JsonRpcEngineV2 } from './JsonRpcEngineV2'; export type {