@metamask/snaps-simulation
Version:
A simulation framework for MetaMask Snaps, enabling headless testing of Snaps in a controlled environment
40 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createJsonRpcEngine = void 0;
const eth_json_rpc_middleware_1 = require("@metamask/eth-json-rpc-middleware");
const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
const snaps_rpc_methods_1 = require("@metamask/snaps-rpc-methods");
const internal_methods_1 = require("./internal-methods/index.cjs");
const mock_1 = require("./mock.cjs");
const constants_1 = require("../constants.cjs");
/**
* Create a JSON-RPC engine for use in a simulated environment. This engine
* should be used to handle all JSON-RPC requests. It is set up to handle
* requests that would normally be handled internally by the MetaMask client, as
* well as Snap-specific requests.
*
* @param options - The options to use when creating the engine.
* @param options.store - The Redux store to use.
* @param options.restrictedHooks - Any hooks used by the middleware handlers.
* @param options.permittedHooks - Any hooks used by the middleware handlers.
* @param options.permissionMiddleware - The permission middleware to use.
* @param options.endpoint - The JSON-RPC endpoint to use for Ethereum requests.
* @returns A JSON-RPC engine.
*/
function createJsonRpcEngine({ store, restrictedHooks, permittedHooks, permissionMiddleware, endpoint = constants_1.DEFAULT_JSON_RPC_ENDPOINT, }) {
const engine = new json_rpc_engine_1.JsonRpcEngine();
engine.push((0, mock_1.createMockMiddleware)(store));
// The hooks here do not match the hooks used by the clients, so this
// middleware should not be used outside of the simulation environment.
engine.push((0, internal_methods_1.createInternalMethodsMiddleware)(restrictedHooks));
engine.push((0, snaps_rpc_methods_1.createSnapsMethodMiddleware)(true, permittedHooks));
engine.push(permissionMiddleware);
engine.push((0, eth_json_rpc_middleware_1.createFetchMiddleware)({
btoa: globalThis.btoa,
fetch: globalThis.fetch,
rpcUrl: endpoint,
}));
return engine;
}
exports.createJsonRpcEngine = createJsonRpcEngine;
//# sourceMappingURL=engine.cjs.map