1import type * as SD from "@distilled.cloud/aws/servicediscovery";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Service } from "./Service.ts";
5
6export interface DiscoverInstancesRequest extends Omit<
7 SD.DiscoverInstancesRequest,
8 "NamespaceName" | "ServiceName"
9> {}
10
11/**
12 * Runtime binding for `servicediscovery:DiscoverInstances` — the Cloud Map
13 * data-plane query that returns a randomized list of registered (by default
14 * healthy) instances of a service.
15 *
16 * Bind this operation to a `Service` inside a function runtime to get a
17 * callable that automatically injects the namespace and service names.
18 * ### Discovering Instances
19 * **Example:** Discover Healthy Instances
20 * ```typescript
21 * const discover = yield* AWS.CloudMap.DiscoverInstances(service);
22 *
23 * const { Instances } = yield* discover({});
24 * for (const instance of Instances ?? []) {
25 * console.log(instance.InstanceId, instance.Attributes?.AWS_INSTANCE_IPV4);
26 * }
27 * ```
28 *
29 * **Example:** Include Unhealthy Instances
30 * ```typescript
31 * const { Instances } = yield* discover({ HealthStatus: "ALL" });
32 * ```
33 *
34 * @binding
35 */
36export interface DiscoverInstances extends Binding.Service<
37 DiscoverInstances,
38 "AWS.CloudMap.DiscoverInstances",
39 <S extends Service>(
40 service: S,
41 ) => Effect.Effect<
42 (
43 request?: DiscoverInstancesRequest,
44 ) => Effect.Effect<SD.DiscoverInstancesResponse, SD.DiscoverInstancesError>
45 >
46> {}
47export const DiscoverInstances = Binding.Service<DiscoverInstances>(
48 "AWS.CloudMap.DiscoverInstances",
49);