MCPcopy Create free account
hub / github.com/MoonshotAI/kimi-code / installReverseRpcHandler

Function installReverseRpcHandler

packages/server-e2e/src/reverse-rpc.ts:34–66  ·  view source on GitHub ↗
(
  ws: WsClient,
  opts: ReverseRpcOptions<Req, Res>,
)

Source from the content-addressed store, hash-verified

32 * response. Returns an unsubscribe handle.
33 */
34export function installReverseRpcHandler<Req, Res>(
35 ws: WsClient,
36 opts: ReverseRpcOptions<Req, Res>,
37): () => void {
38 const unsubscribe = ws.onFrame((frame: AnyFrame) => {
39 if (frame.type !== opts.requestEventType) return;
40 const payload = frame.payload as Req | undefined;
41 if (!payload) return;
42 const sessionId = (payload as { session_id?: string }).session_id;
43 const id = (payload as Record<string, unknown>)[opts.idField] as string | undefined;
44 if (!sessionId || !id) {
45 opts.logger('warn', `reverse-rpc: ${opts.requestEventType} missing session_id/${opts.idField}`, {
46 payload,
47 });
48 return;
49 }
50 // Fire-and-forget: the WS handler is sync; we kick off the resolve and
51 // log async failures.
52 Promise.resolve()
53 .then(async () => {
54 const response = await opts.handler(payload);
55 await opts.postResolve(sessionId, id, response);
56 })
57 .catch((err) => {
58 opts.logger('warn', `reverse-rpc: ${opts.requestEventType} resolve failed`, {
59 err: String(err),
60 sessionId,
61 id,
62 });
63 });
64 });
65 return unsubscribe;
66}

Callers 2

onApprovalRequestedMethod · 0.85
onQuestionAskedMethod · 0.85

Calls 3

resolveMethod · 0.65
onFrameMethod · 0.45
handlerMethod · 0.45

Tested by

no test coverage detected