@metamask/snaps-rpc-methods
Version:
MetaMask Snaps JSON-RPC method implementations
88 lines • 4.38 kB
JavaScript
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