From 0012b54ec5ec47e883d79bb6e1e15338a5d1d74d Mon Sep 17 00:00:00 2001 From: Niranjana Binoy <43930900+NiranjanaBinoy@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:54:15 -0400 Subject: [PATCH] converting get-provider-state file to typescript and extracting types to a helper file --- .../handlers/get-provider-state.js | 49 ------------ .../handlers/get-provider-state.ts | 76 +++++++++++++++++++ .../handlers/handlers-helper.ts | 22 ++++++ 3 files changed, 98 insertions(+), 49 deletions(-) delete mode 100644 app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.js create mode 100644 app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.ts create mode 100644 app/scripts/lib/rpc-method-middleware/handlers/handlers-helper.ts diff --git a/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.js b/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.js deleted file mode 100644 index 70dbb7b16cfa..000000000000 --- a/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.js +++ /dev/null @@ -1,49 +0,0 @@ -import { MESSAGE_TYPE } from '../../../../../shared/constants/app'; - -/** - * This RPC method gets background state relevant to the provider. - * The background sends RPC notifications on state changes, but the provider - * first requests state on initialization. - */ - -const getProviderState = { - methodNames: [MESSAGE_TYPE.GET_PROVIDER_STATE], - implementation: getProviderStateHandler, - hookNames: { - getProviderState: true, - }, -}; -export default getProviderState; - -/** - * @typedef {object} ProviderStateHandlerResult - * @property {string} chainId - The current chain ID. - * @property {boolean} isUnlocked - Whether the extension is unlocked or not. - * @property {string} networkVersion - The current network ID. - */ - -/** - * @typedef {object} ProviderStateHandlerOptions - * @property {() => ProviderStateHandlerResult} getProviderState - A function that - * gets the current provider state. - */ - -/** - * @param {import('json-rpc-engine').JsonRpcRequest<[]>} req - The JSON-RPC request object. - * @param {import('json-rpc-engine').JsonRpcResponse} res - The JSON-RPC response object. - * @param {Function} _next - The json-rpc-engine 'next' callback. - * @param {Function} end - The json-rpc-engine 'end' callback. - * @param {ProviderStateHandlerOptions} options - */ -async function getProviderStateHandler( - req, - res, - _next, - end, - { getProviderState: _getProviderState }, -) { - res.result = { - ...(await _getProviderState(req.origin)), - }; - return end(); -} diff --git a/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.ts b/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.ts new file mode 100644 index 000000000000..5fbf24f7e579 --- /dev/null +++ b/app/scripts/lib/rpc-method-middleware/handlers/get-provider-state.ts @@ -0,0 +1,76 @@ +import type { + JsonRpcEngineNextCallback, + JsonRpcEngineEndCallback, +} from '@metamask/json-rpc-engine'; +import type { + JsonRpcRequest, + JsonRpcResponse, + JsonRpcParams, + Json, +} from '@metamask/utils'; +import { MESSAGE_TYPE } from '../../../../../shared/constants/app'; +import { + HandlerWrapperType, + getProviderStateType, + ProviderStateHandlerResult, +} from './handlers-helper'; + +type getProviderStateImplementationType< + Params extends JsonRpcParams = JsonRpcParams, + Result extends Json = Json, +> = { + implementation: ( + _req: JsonRpcRequest, + res: JsonRpcResponse, + _next: JsonRpcEngineNextCallback, + end: JsonRpcEngineEndCallback, + { _getProviderState }: Record, + ) => Promise; +} & HandlerWrapperType; + +/** + * This RPC method gets background state relevant to the provider. + * The background sends RPC notifications on state changes, but the provider + * first requests state on initialization. + */ + +const getProviderState: getProviderStateImplementationType = { + methodNames: [MESSAGE_TYPE.GET_PROVIDER_STATE], + implementation: getProviderStateHandler, + hookNames: { + getProviderState: true, + }, +}; +export default getProviderState; + +/** + * @typedef {object} ProviderStateHandlerOptions + * @property {() => ProviderStateHandlerResult} getProviderState - A function that + * gets the current provider state. + */ + +/** + * @param _req - The JSON-RPC request object. + * @param res - The JSON-RPC response object. + * @param _next - The json-rpc-engine 'next' callback. + * @param end - The json-rpc-engine 'end' callback. + * @param options + * @param options.getProviderState + */ +async function getProviderStateHandler< + Params extends JsonRpcParams = JsonRpcParams, + Result extends Json = Json, +>( + _req: JsonRpcRequest, + res: JsonRpcResponse, + _next: JsonRpcEngineNextCallback, + end: JsonRpcEngineEndCallback, + { + getProviderState: _getProviderState, + }: Record Promise>, +): Promise { + res.result = { + ...(await _getProviderState((origin = _req.origin))), + }; + return end(); +} diff --git a/app/scripts/lib/rpc-method-middleware/handlers/handlers-helper.ts b/app/scripts/lib/rpc-method-middleware/handlers/handlers-helper.ts new file mode 100644 index 000000000000..be35cdfde144 --- /dev/null +++ b/app/scripts/lib/rpc-method-middleware/handlers/handlers-helper.ts @@ -0,0 +1,22 @@ +export type HandlerWrapperType = { + methodNames: [string]; + hookNames: Record; +}; + +/** + * @typedef {object} ProviderStateHandlerResult + * @property {string} chainId - The current chain ID. + * @property {boolean} isUnlocked - Whether the extension is unlocked or not. + * @property {string} networkVersion - The current network ID. + * @property {string[]} accounts - List of permitted accounts for the specified origin. + */ +export type ProviderStateHandlerResult = { + chainId: string; + isUnlocked: boolean; + networkVersion: string; + accounts: string[]; +}; + +export type getProviderStateType = ( + origin: string, +) => Promise;