1import type * as route53 from "@distilled.cloud/aws/route-53";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { HostedZone } from "./HostedZone.ts";
5
6/**
7 * `ChangeResourceRecordSets` request with `HostedZoneId` injected from the
8 * bound {@link HostedZone}.
9 */
10export interface ChangeResourceRecordSetsRequest extends Omit<
11 route53.ChangeResourceRecordSetsRequest,
12 "HostedZoneId"
13> {}
14
15/**
16 * Runtime binding for the `ChangeResourceRecordSets` operation (IAM action
17 * `route53:ChangeResourceRecordSets` on the hosted zone ARN).
18 *
19 * Creates, upserts, and deletes DNS record sets in the bound
20 * {@link HostedZone} at runtime — the core dynamic-DNS primitive (ACME
21 * `dns-01` challenges, service discovery, failover flips). Pair with
22 * {@link GetChange} to wait until the change is `INSYNC`. Provide the
23 * implementation with
24 * `Effect.provide(AWS.Route53.ChangeResourceRecordSetsHttp)`.
25 * ### Managing Records at Runtime
26 * **Example:** Upsert a TXT record
27 * ```typescript
28 * const changeRecordSets = yield* AWS.Route53.ChangeResourceRecordSets(zone);
29 *
30 * const { ChangeInfo } = yield* changeRecordSets({
31 * ChangeBatch: {
32 * Changes: [{
33 * Action: "UPSERT",
34 * ResourceRecordSet: {
35 * Name: "_acme-challenge.example.com.",
36 * Type: "TXT",
37 * TTL: 60,
38 * ResourceRecords: [{ Value: '"token"' }],
39 * },
40 * }],
41 * },
42 * });
43 * ```
44 *
45 * @binding
46 */
47export interface ChangeResourceRecordSets extends Binding.Service<
48 ChangeResourceRecordSets,
49 "AWS.Route53.ChangeResourceRecordSets",
50 (
51 zone: HostedZone,
52 ) => Effect.Effect<
53 (
54 request: ChangeResourceRecordSetsRequest,
55 ) => Effect.Effect<
56 route53.ChangeResourceRecordSetsResponse,
57 route53.ChangeResourceRecordSetsError
58 >
59 >
60> {}
61export const ChangeResourceRecordSets =
62 Binding.Service<ChangeResourceRecordSets>(
63 "AWS.Route53.ChangeResourceRecordSets",
64 );