50 lines · 1.9 KB · TypeScript
RawDownload
// @effect-diagnostics anyUnknownInErrorContext:off layerMergeAllWithDependencies:off - Alchemy provider helpers expose framework-owned any requirements.import * as Alchemy from "alchemy";import * as Axiom from "alchemy/Axiom";import * as Cloudflare from "alchemy/Cloudflare";import * as Drizzle from "alchemy/Drizzle";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import * as Planetscale from "alchemy/Planetscale"; import * as RelayDb from "./src/db.ts";import { RelayObservability } from "./src/observability.ts";import { ManagedEndpointZone, RelayApiZone } from "./src/zone.ts";import Api from "./src/worker.ts"; export default Alchemy.Stack(  "T3CodeRelay",  {    providers: Layer.mergeAll(      Axiom.providers(),      Cloudflare.providers(),      Drizzle.providers(),      Planetscale.providers(),    ),    state: Cloudflare.state(),  },  Effect.gen(function* () {    const db = yield* RelayDb.PlanetscaleDatabase;    const hyperdrive = yield* RelayDb.RelayHyperdrive;    const managedEndpointZone = yield* ManagedEndpointZone.pipe(Effect.orDie);    const relayApiZone = yield* RelayApiZone.pipe(Effect.orDie);    const observability = yield* RelayObservability;    const api = yield* Api;     return {      databaseName: db.database.name,      databaseBranchName: db.branch?.name ?? "main",      hyperdriveName: hyperdrive.name,      workerName: api.workerName,      url: api.url,      relayApiZoneId: relayApiZone.zoneId,      managedEndpointZoneId: managedEndpointZone.zoneId,      mobileTracingUrl: observability.traces.otelTracesEndpoint,      mobileTracingDataset: observability.traces.name,      mobileTracingToken: observability.mobileIngestToken.token,      clientTracingUrl: observability.traces.otelTracesEndpoint,      clientTracingDataset: observability.traces.name,      clientTracingToken: observability.clientIngestToken.token,    };  }),);