73 lines · 2.8 KB · TypeScript
RawDownload
import * as ManagedRuntime from "effect/ManagedRuntime";import type * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import * as Socket from "effect/unstable/socket/Socket"; import { remoteHttpClientLayer } from "@t3tools/client-runtime/rpc";import { makeRelayClientTracingLayer } from "@t3tools/shared/relayTracing";import * as PrimaryEnvironmentHttpClient from "../environments/primary/httpClient";import { primaryEnvironmentHttpLayer } from "../environments/primary/httpLayer"; import { browserCryptoLayer } from "../cloud/dpop";import { managedRelayClientLayer } from "../cloud/managedRelayLayer";import { resolveCloudPublicConfig, resolveRelayTracingConfig } from "../cloud/publicConfig"; function configuredRelayUrl(): string {  return resolveCloudPublicConfig().relayUrl ?? "http://relay.invalid";} const httpClientLayer = remoteHttpClientLayer((input, init) => globalThis.fetch(input, init));const relayTracingLayer = makeRelayClientTracingLayer(resolveRelayTracingConfig(), {  serviceName: "t3-web-relay-client",  serviceVersion: import.meta.env.APP_VERSION,  runtime: "browser",  client: typeof window !== "undefined" && window.desktopBridge ? "desktop" : "web",}).pipe(Layer.provide(httpClientLayer)); type RuntimeLayerSource =  | typeof httpClientLayer  | typeof browserCryptoLayer  | typeof Socket.layerWebSocketConstructorGlobal  | typeof relayTracingLayer  | ReturnType<typeof managedRelayClientLayer>; const primaryHttpRuntime = ManagedRuntime.make(  PrimaryEnvironmentHttpClient.layer.pipe(Layer.provide(primaryEnvironmentHttpLayer)),); export type PrimaryHttpEffectRunner = <A, E>(  effect: Effect.Effect<A, E, PrimaryEnvironmentHttpClient.PrimaryEnvironmentHttpClient>,) => Promise<A>; const livePrimaryHttpRunner: PrimaryHttpEffectRunner = (effect) =>  primaryHttpRuntime.runPromise(effect); let primaryHttpRunner = livePrimaryHttpRunner; export const runPrimaryHttp = <A, E>(  effect: Effect.Effect<A, E, PrimaryEnvironmentHttpClient.PrimaryEnvironmentHttpClient>,) => primaryHttpRunner(effect); export function __setPrimaryHttpRunnerForTests(runner?: PrimaryHttpEffectRunner): void {  primaryHttpRunner = runner ?? livePrimaryHttpRunner;} const runtimeLayer = Layer.mergeAll(  httpClientLayer,  browserCryptoLayer,  Socket.layerWebSocketConstructorGlobal,  relayTracingLayer,  managedRelayClientLayer(configuredRelayUrl()).pipe(    Layer.provide(Layer.mergeAll(httpClientLayer, browserCryptoLayer)),  ),); export const runtime: ManagedRuntime.ManagedRuntime<  Layer.Success<RuntimeLayerSource>,  Layer.Error<RuntimeLayerSource>> = ManagedRuntime.make(runtimeLayer); export const runtimeContextLayer: Layer.Layer<  Layer.Success<RuntimeLayerSource>,  Layer.Error<RuntimeLayerSource>> = Layer.effectContext(runtime.contextEffect);