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 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(); + }; +} 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 {