All files / kernel-browser-runtime/src/kernel-worker/middleware panel-message.ts

100% Statements 8/8
50% Branches 1/2
100% Functions 3/3
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                              1x       7x       1x       7x 7x 7x 7x 5x      
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
import { RpcService } from '@metamask/kernel-rpc-methods';
import type { KernelDatabase } from '@metamask/kernel-store';
import type { Kernel } from '@metamask/ocap-kernel';
import { isJsonRpcRequest } from '@metamask/utils';
 
import { rpcHandlers } from '../../rpc-handlers/index.ts';
 
/**
 * Makes a middleware function that handles panel messages.
 *
 * @param kernel - The kernel instance.
 * @param kernelDatabase - The kernel database instance.
 * @returns The middleware function.
 */
export const makePanelMessageMiddleware = (
  kernel: Kernel,
  kernelDatabase: KernelDatabase,
): JsonRpcMiddleware => {
  const rpcService: RpcService<typeof rpcHandlers> = new RpcService(
    rpcHandlers,
    {
      kernel,
      executeDBQuery: (sql: string) => kernelDatabase.executeQuery(sql),
    },
  );
 
  return async ({ request }) => {
    const { method, params } = request;
    rpcService.assertHasMethod(method);
    const result = await rpcService.execute(method, params);
    return isJsonRpcRequest(request) ? result : undefined;
  };
};