1import * as Effect from "effect/Effect";
2import * as Layer from "effect/Layer";
3import { type DnsAuth, makeHttpDnsBinding } from "./DnsHttp.ts";
4import { dnsReadClient } from "./ReadDnsHttp.ts";
5import { ReadWriteDns, type ReadWriteDnsClient } from "./ReadWriteDns.ts";
6import { dnsWriteClient } from "./WriteDnsHttp.ts";
7
8/** Runtime layer for {@link ReadWriteDns}. */
9export const ReadWriteDnsHttp = Layer.effect(
10 ReadWriteDns,
11 Effect.suspend(() =>
12 makeHttpDnsBinding({
13 makeClient: dnsReadWriteClient,
14 }),
15 ),
16);
17
18/** Build the combined read + write client over an injectable auth and zone id. */
19export const dnsReadWriteClient = (
20 auth: DnsAuth,
21 zoneId: Effect.Effect<number>,
22): ReadWriteDnsClient => ({
23 ...dnsReadClient(auth, zoneId),
24 ...dnsWriteClient(auth, zoneId),
25});