1import type * as ds from "@distilled.cloud/aws/directory-service";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Directory } from "./Directory.ts";
5
6/**
7 * Runtime binding for the `DescribeDomainControllers` operation (IAM action
8 * `ds:DescribeDomainControllers`), scoped to one {@link Directory}.
9 *
10 * Lists the bound directory's domain controllers — id, DNS address,
11 * Availability Zone, and status (`Active`, `Impaired`, …) — so a monitoring
12 * function can alert on an impaired controller. The directory id is
13 * injected from the binding. Provide the implementation with
14 * `Effect.provide(AWS.DirectoryService.DescribeDomainControllersHttp)`.
15 * ### Monitoring the Directory
16 * **Example:** Alert on Impaired Domain Controllers
17 * ```typescript
18 * // init — bind the operation to the directory
19 * const describeDomainControllers =
20 * yield* AWS.DirectoryService.DescribeDomainControllers(directory);
21 *
22 * // runtime
23 * const { DomainControllers } = yield* describeDomainControllers();
24 * for (const controller of DomainControllers ?? []) {
25 * if (controller.Status === "Impaired") {
26 * yield* Effect.logError(`impaired controller: ${controller.DomainControllerId}`);
27 * }
28 * }
29 * ```
30 *
31 * @binding
32 */
33export interface DescribeDomainControllers extends Binding.Service<
34 DescribeDomainControllers,
35 "AWS.DirectoryService.DescribeDomainControllers",
36 (
37 directory: Directory,
38 ) => Effect.Effect<
39 (
40 request?: Omit<ds.DescribeDomainControllersRequest, "DirectoryId">,
41 ) => Effect.Effect<
42 ds.DescribeDomainControllersResult,
43 ds.DescribeDomainControllersError
44 >
45 >
46> {}
47export const DescribeDomainControllers =
48 Binding.Service<DescribeDomainControllers>(
49 "AWS.DirectoryService.DescribeDomainControllers",
50 );