@metamask/snaps-rpc-methods
Version:
MetaMask Snaps JSON-RPC method implementations
92 lines • 4.98 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSnapsMethodMiddleware = void 0;
const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
const rpc_errors_1 = require("@metamask/rpc-errors");
const snaps_utils_1 = require("@metamask/snaps-utils");
const cancelBackgroundEvent_1 = require("./cancelBackgroundEvent.cjs");
const clearState_1 = require("./clearState.cjs");
const closeWebSocket_1 = require("./closeWebSocket.cjs");
const createInterface_1 = require("./createInterface.cjs");
const endTrace_1 = require("./endTrace.cjs");
const getAllSnaps_1 = require("./getAllSnaps.cjs");
const getBackgroundEvents_1 = require("./getBackgroundEvents.cjs");
const getClientStatus_1 = require("./getClientStatus.cjs");
const getFile_1 = require("./getFile.cjs");
const getInterfaceContext_1 = require("./getInterfaceContext.cjs");
const getInterfaceState_1 = require("./getInterfaceState.cjs");
const getSnaps_1 = require("./getSnaps.cjs");
const getState_1 = require("./getState.cjs");
const getWebSockets_1 = require("./getWebSockets.cjs");
const invokeKeyring_1 = require("./invokeKeyring.cjs");
const invokeSnapSugar_1 = require("./invokeSnapSugar.cjs");
const listEntropySources_1 = require("./listEntropySources.cjs");
const messengerCall_1 = require("./messengerCall.cjs");
const openWebSocket_1 = require("./openWebSocket.cjs");
const requestSnaps_1 = require("./requestSnaps.cjs");
const resolveInterface_1 = require("./resolveInterface.cjs");
const scheduleBackgroundEvent_1 = require("./scheduleBackgroundEvent.cjs");
const sendWebSocketMessage_1 = require("./sendWebSocketMessage.cjs");
const setState_1 = require("./setState.cjs");
const startTrace_1 = require("./startTrace.cjs");
const trackError_1 = require("./trackError.cjs");
const trackEvent_1 = require("./trackEvent.cjs");
const updateInterface_1 = require("./updateInterface.cjs");
/* eslint-disable @typescript-eslint/naming-convention */
const methodHandlers = {
wallet_getAllSnaps: getAllSnaps_1.getAllSnapsHandler,
wallet_getSnaps: getSnaps_1.getSnapsHandler,
wallet_requestSnaps: requestSnaps_1.requestSnapsHandler,
wallet_invokeSnap: invokeSnapSugar_1.invokeSnapSugarHandler,
wallet_invokeKeyring: invokeKeyring_1.invokeKeyringHandler,
snap_clearState: clearState_1.clearStateHandler,
snap_getClientStatus: getClientStatus_1.getClientStatusHandler,
snap_getFile: getFile_1.getFileHandler,
snap_getState: getState_1.getStateHandler,
snap_createInterface: createInterface_1.createInterfaceHandler,
snap_updateInterface: updateInterface_1.updateInterfaceHandler,
snap_getInterfaceState: getInterfaceState_1.getInterfaceStateHandler,
snap_getInterfaceContext: getInterfaceContext_1.getInterfaceContextHandler,
snap_listEntropySources: listEntropySources_1.listEntropySourcesHandler,
snap_resolveInterface: resolveInterface_1.resolveInterfaceHandler,
snap_scheduleBackgroundEvent: scheduleBackgroundEvent_1.scheduleBackgroundEventHandler,
snap_cancelBackgroundEvent: cancelBackgroundEvent_1.cancelBackgroundEventHandler,
snap_getBackgroundEvents: getBackgroundEvents_1.getBackgroundEventsHandler,
snap_setState: setState_1.setStateHandler,
snap_trackError: trackError_1.trackErrorHandler,
snap_trackEvent: trackEvent_1.trackEventHandler,
snap_openWebSocket: openWebSocket_1.openWebSocketHandler,
snap_closeWebSocket: closeWebSocket_1.closeWebSocketHandler,
snap_sendWebSocketMessage: sendWebSocketMessage_1.sendWebSocketMessageHandler,
snap_getWebSockets: getWebSockets_1.getWebSocketsHandler,
snap_startTrace: startTrace_1.startTraceHandler,
snap_endTrace: endTrace_1.endTraceHandler,
snap_messengerCall: messengerCall_1.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.
*/
function createSnapsMethodMiddleware(isSnap, hooks, messenger) {
const nestedMiddleware = (0, json_rpc_engine_1.createMethodMiddleware)({
handlers: methodHandlers,
hooks,
messenger,
onError: snaps_utils_1.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(rpc_errors_1.rpcErrors.methodNotFound());
}
return nestedMiddleware(request, response, next, end);
};
}
exports.createSnapsMethodMiddleware = createSnapsMethodMiddleware;
//# sourceMappingURL=middleware.cjs.map