/** * @since 1.0.0 */ import * as Body from "@effect/platform/HttpBody" import * as Client from "@effect/platform/HttpClient" import * as ClientRequest from "@effect/platform/HttpClientRequest" import type * as Rpc from "@effect/rpc/Rpc" import * as Resolver from "@effect/rpc/RpcResolver" import * as ResolverNoStream from "@effect/rpc/RpcResolverNoStream" import type * as Router from "@effect/rpc/RpcRouter" import * as Effect from "effect/Effect" import type * as RequestResolver from "effect/RequestResolver" import * as Schedule from "effect/Schedule" import type * as Schema from "effect/Schema" /** * @category constructors * @since 1.0.0 */ export const make = >( client: Client.HttpClient ): RequestResolver.RequestResolver< Rpc.Request>, Schema.SerializableWithResult.Context> > => ResolverNoStream.make((requests) => client.post("", { body: Body.unsafeJson(requests) }).pipe( Effect.flatMap((_) => _.json), Effect.scoped ) )() /** * @category constructors * @since 1.0.0 */ export const makeClient = >( baseUrl: string ): Schema.SerializableWithResult.Context> extends never ? Effect.Effect< Resolver.Client< RequestResolver.RequestResolver< Rpc.Request> > >, never, Client.HttpClient > : "request context is not `never`" => Effect.map(Client.HttpClient, (client) => Resolver.toClient(make(client.pipe( Client.mapRequest(ClientRequest.prependUrl(baseUrl)), Client.retry( Schedule.exponential(50).pipe( Schedule.intersect(Schedule.recurs(5)) ) ) )) as any)) as any