Using middleware dependencies in Effect Typescript library

Can middleware depend on the result of another middleware?

like this where i am trying to do yield* CurrentUser but its not possible because the R type must be never. Assume CurrentUser will be provided by another middleware

export class RPCRateLimitMiddleware
  extends RpcMiddleware.Tag<RPCRateLimitMiddleware>()(
    'RPCRateLimitMiddleware',
    {
      failure: S.Union(RateLimitExceededError, InternalServerError),
    },
  )
{}

export const RPCRateLimitMiddlewareLive: Layer.Layer<
  RPCRateLimitMiddleware,
  never,
  never
> = Layer.effect(
  RPCRateLimitMiddleware,
  Effect.gen(function*() {
    const { RateLimit } = yield* Effect.promise(() =>
      import('../services/RateLimit')
    )

    return RPCRateLimitMiddleware.of(({ headers, rpc }) =>
      Effect.gen(function*() {
        const currentUser = yield* CurrentUser

        return void 0
      }).pipe(
        Effect.provide(RateLimit.Default),
      )
    )
  }),
)
Was this page helpful?