UNPKG

@metamask/snaps-rpc-methods

Version:
88 lines 4.38 kB
import { createMethodMiddleware } from "@metamask/json-rpc-engine"; import { rpcErrors } from "@metamask/rpc-errors"; import { logError } from "@metamask/snaps-utils"; import { cancelBackgroundEventHandler } from "./cancelBackgroundEvent.mjs"; import { clearStateHandler } from "./clearState.mjs"; import { closeWebSocketHandler } from "./closeWebSocket.mjs"; import { createInterfaceHandler } from "./createInterface.mjs"; import { endTraceHandler } from "./endTrace.mjs"; import { getAllSnapsHandler } from "./getAllSnaps.mjs"; import { getBackgroundEventsHandler } from "./getBackgroundEvents.mjs"; import { getClientStatusHandler } from "./getClientStatus.mjs"; import { getFileHandler } from "./getFile.mjs"; import { getInterfaceContextHandler } from "./getInterfaceContext.mjs"; import { getInterfaceStateHandler } from "./getInterfaceState.mjs"; import { getSnapsHandler } from "./getSnaps.mjs"; import { getStateHandler } from "./getState.mjs"; import { getWebSocketsHandler } from "./getWebSockets.mjs"; import { invokeKeyringHandler } from "./invokeKeyring.mjs"; import { invokeSnapSugarHandler } from "./invokeSnapSugar.mjs"; import { listEntropySourcesHandler } from "./listEntropySources.mjs"; import { messengerCallHandler } from "./messengerCall.mjs"; import { openWebSocketHandler } from "./openWebSocket.mjs"; import { requestSnapsHandler } from "./requestSnaps.mjs"; import { resolveInterfaceHandler } from "./resolveInterface.mjs"; import { scheduleBackgroundEventHandler } from "./scheduleBackgroundEvent.mjs"; import { sendWebSocketMessageHandler } from "./sendWebSocketMessage.mjs"; import { setStateHandler } from "./setState.mjs"; import { startTraceHandler } from "./startTrace.mjs"; import { trackErrorHandler } from "./trackError.mjs"; import { trackEventHandler } from "./trackEvent.mjs"; import { updateInterfaceHandler } from "./updateInterface.mjs"; /* eslint-disable @typescript-eslint/naming-convention */ const methodHandlers = { wallet_getAllSnaps: getAllSnapsHandler, wallet_getSnaps: getSnapsHandler, wallet_requestSnaps: requestSnapsHandler, wallet_invokeSnap: invokeSnapSugarHandler, wallet_invokeKeyring: invokeKeyringHandler, snap_clearState: clearStateHandler, snap_getClientStatus: getClientStatusHandler, snap_getFile: getFileHandler, snap_getState: getStateHandler, snap_createInterface: createInterfaceHandler, snap_updateInterface: updateInterfaceHandler, snap_getInterfaceState: getInterfaceStateHandler, snap_getInterfaceContext: getInterfaceContextHandler, snap_listEntropySources: listEntropySourcesHandler, snap_resolveInterface: resolveInterfaceHandler, snap_scheduleBackgroundEvent: scheduleBackgroundEventHandler, snap_cancelBackgroundEvent: cancelBackgroundEventHandler, snap_getBackgroundEvents: getBackgroundEventsHandler, snap_setState: setStateHandler, snap_trackError: trackErrorHandler, snap_trackEvent: trackEventHandler, snap_openWebSocket: openWebSocketHandler, snap_closeWebSocket: closeWebSocketHandler, snap_sendWebSocketMessage: sendWebSocketMessageHandler, snap_getWebSockets: getWebSocketsHandler, snap_startTrace: startTraceHandler, snap_endTrace: endTraceHandler, snap_messengerCall: messengerCallHandler, }; /* eslint-enable @typescript-eslint/naming-convention */ /** * Creates a middleware that handles permitted snap RPC methods. * * @param isSnap - A flag that should indicate whether the requesting origin is a snap or not. * @param hooks - An object containing the hooks made available to the permitted RPC methods. * @param messenger - The messenger. * @returns The middleware. */ export function createSnapsMethodMiddleware(isSnap, hooks, messenger) { const nestedMiddleware = createMethodMiddleware({ handlers: methodHandlers, hooks, messenger, onError: logError, }); // This is not actually a misused promise, the type is just wrong // eslint-disable-next-line @typescript-eslint/no-misused-promises return async function methodMiddleware(request, response, next, end) { if (String.prototype.startsWith.call(request.method, 'snap_') && !isSnap) { return end(rpcErrors.methodNotFound()); } return nestedMiddleware(request, response, next, end); }; } //# sourceMappingURL=middleware.mjs.map