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 permissionGroups: ["DNS Read", "DNS Write"],
14 makeClient: dnsReadWriteClient,
15 }),
16 ),
17);
18
19/** Build the combined read + write client over an injectable auth and zone id. */
20export const dnsReadWriteClient = (
21 auth: DnsAuth,
22 zoneId: Effect.Effect<string>,
23): ReadWriteDnsClient => ({
24 ...dnsReadClient(auth, zoneId),
25 ...dnsWriteClient(auth, zoneId),
26});