diff --git a/packages/json-rpc-engine/CHANGELOG.md b/packages/json-rpc-engine/CHANGELOG.md index cb0e6e0268..0716a6270b 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 legacy `createOriginMiddleware` utility ([#8734](https://github.com/MetaMask/core/pull/8734)) + ## [10.3.0] ### Added diff --git a/packages/json-rpc-engine/src/createOriginMiddleware.test.ts b/packages/json-rpc-engine/src/createOriginMiddleware.test.ts new file mode 100644 index 0000000000..5c441e977d --- /dev/null +++ b/packages/json-rpc-engine/src/createOriginMiddleware.test.ts @@ -0,0 +1,27 @@ +import { JsonRpcRequest } from '@metamask/utils'; + +import { makeRequest } from '../tests/utils'; +import { createOriginMiddleware } from './createOriginMiddleware'; +import { JsonRpcEngine } from './JsonRpcEngine'; + +describe('createOriginMiddleware', () => { + it('adds the origin property to the request', async () => { + const origin = 'https://metamask.io'; + const engine = new JsonRpcEngine(); + + engine.push(createOriginMiddleware(origin)); + + engine.push((request, response, _next, end) => { + response.result = ( + request as unknown as JsonRpcRequest & { origin: string } + ).origin; + end(); + }); + + expect(await engine.handle(makeRequest())).toStrictEqual({ + id: '1', + jsonrpc: '2.0', + result: origin, + }); + }); +}); diff --git a/packages/json-rpc-engine/src/createOriginMiddleware.ts b/packages/json-rpc-engine/src/createOriginMiddleware.ts new file mode 100644 index 0000000000..e2100aa4fa --- /dev/null +++ b/packages/json-rpc-engine/src/createOriginMiddleware.ts @@ -0,0 +1,19 @@ +import { Json, JsonRpcRequest } from '@metamask/utils'; + +import { JsonRpcMiddleware } from './JsonRpcEngine'; + +/** + * Create a middleware function that adds `origin` to the request object. + * + * @deprecated Use the v2 `createOriginMiddleware` instead. + * @param origin - The origin. + * @returns The middleware. + */ +export function createOriginMiddleware( + origin: string, +): JsonRpcMiddleware { + return (request, _result, next) => { + (request as unknown as JsonRpcRequest & { origin: string }).origin = origin; + next(); + }; +} diff --git a/packages/json-rpc-engine/src/index.test.ts b/packages/json-rpc-engine/src/index.test.ts index e2b811b55a..071d71fa36 100644 --- a/packages/json-rpc-engine/src/index.test.ts +++ b/packages/json-rpc-engine/src/index.test.ts @@ -7,6 +7,7 @@ describe('@metamask/json-rpc-engine', () => { "asV2Middleware", "createAsyncMiddleware", "createMethodMiddleware", + "createOriginMiddleware", "createScaffoldMiddleware", "getUniqueId", "createIdRemapMiddleware", diff --git a/packages/json-rpc-engine/src/index.ts b/packages/json-rpc-engine/src/index.ts index 746cd0c362..1960fe5e3f 100644 --- a/packages/json-rpc-engine/src/index.ts +++ b/packages/json-rpc-engine/src/index.ts @@ -10,6 +10,7 @@ export type { MethodHandlerImplementation, } from './createMethodMiddleware'; export { createMethodMiddleware } from './createMethodMiddleware'; +export { createOriginMiddleware } from './createOriginMiddleware'; export { createScaffoldMiddleware } from './createScaffoldMiddleware'; export { getUniqueId } from './getUniqueId'; export { createIdRemapMiddleware } from './idRemapMiddleware';