Effect CommunityEC
Effect Community2y ago
19 replies
imulab

Trouble Injecting Dependencies into RPC Routers from `rpc-http` Package

Hi everyone, I am currently having trouble with providing service dependencies to RPC routers from the rpc-http package.

The actual RPC implementation requires a Wecom.Properties dependencies from the context and simply returns that:
  export const ProcedureLive = RPC.effect(
    Procedure,
    () => Effect.gen(function*($) {
      const props = yield* $(Wecom.Properties)

      return {
        corpId: props.corpId,
        agentId: props.agentId,
      }
    })
  )


I thought I can provide the dependent layer when I wire up the http server:

export const makeLayer = ({
  serveOptions,
}: {
  serveOptions: Omit<ServeOptions, 'fetch' | 'error'>,
}) => Http.router.empty.pipe(
  Http.router.post("/api", HttpRouter.toHttpApp(Rpc.router)),
  Http.server.serve(Http.middleware.logger),
  Http.server.withLogAddress,
  Layer.provide(Layer.succeed(Wecom.Properties, { agentId: "1", corpSecret: Secret.fromString("2"), corpId: "3" })),
  Layer.provide(BunHttpServer.server.layer(serveOptions))
)


But the server reports "service not found" when I run it. So question: how can I pipe an entire layer of dependencies to my RPC handlers.
Was this page helpful?