Effect CommunityEC
Effect Community8mo ago
17 replies
yelr | JackDyre

Trouble with `@effect/rpc` Web Handler Hanging in Next.js

I am trying to use
@effect/rpc
with nextjs, but I can't get the web handler to work. The web handler just hangs before executing my rpc handler.

export const PromptGroup = RpcGroup.make(
  Rpc.make("Prompt", {
    success: Schema.String,
    payload: {
      prompt: Schema.String,
    },
  }),
);

const PromptRpcHandler = PromptGroup.toLayer({
  Prompt: ({ prompt }) =>
    Effect.gen(function* () {
      console.log("EXECUTING INSIDE THE WEB HANDLER"); // <- Never prints this
      return prompt; // <- Dummy impl for now
    }),
});

const webHandler = Effect.gen(function* () {
  const app = yield* RpcServer.toHttpApp(PromptGroup);
  return HttpApp.toWebHandler(app);
}).pipe(
  Effect.provide([PromptRpcHandler, layerRpcSerialization]),
  Effect.scoped,
);

export const POST = async (request: NextRequest) => {
  const handler = await Effect.runPromise(webHandler);
  console.log("WEB HANDLER HAS BEEN CONSTRUCTED");
  console.log("TYPE OF WEB HANDLER IS:");
  console.log(typeof handler);
  const resp = await handler(request); // <- Hangs here
  return resp;
};


// next dev server logs:

✓ Compiled /api/rpc in 959ms
WEB HANDLER HAS BEEN CONSTRUCTED
TYPE OF WEB HANDLER IS:
function

// hangs here
Was this page helpful?