1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 11:22:43 +02:00
metamask-extension/app/scripts/lib/createMetaRPCHandler.js
Alex Donesky 20986e17b7
Persist state in metaRPCHandler so that we are sure state is persisted before sending back response to actions (#15978)
* persist state in metaRPCHandler so that we are sure state is persisted before sending back response to actions
2022-10-10 17:10:44 -05:00

56 lines
1.2 KiB
JavaScript

import { ethErrors, serializeError } from 'eth-rpc-errors';
import { isManifestV3 } from '../../../shared/modules/mv3.utils';
const createMetaRPCHandler = (api, outStream, store, localStoreApiWrapper) => {
return async (data) => {
if (outStream._writableState.ended) {
return;
}
if (!api[data.method]) {
outStream.write({
jsonrpc: '2.0',
error: ethErrors.rpc.methodNotFound({
message: `${data.method} not found`,
}),
id: data.id,
});
return;
}
let result;
let error;
try {
result = await api[data.method](...data.params);
} catch (err) {
error = err;
} finally {
if (isManifestV3 && store && data.method !== 'getState') {
localStoreApiWrapper.set(store.getState());
}
}
if (outStream._writableState.ended) {
if (error) {
console.error(error);
}
return;
}
if (error) {
outStream.write({
jsonrpc: '2.0',
error: serializeError(error, { shouldIncludeStack: true }),
id: data.id,
});
} else {
outStream.write({
jsonrpc: '2.0',
result,
id: data.id,
});
}
};
};
export default createMetaRPCHandler;