1import type * as cloudcontrol from "@distilled.cloud/aws/cloudcontrol";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4
5/**
6 * Runtime binding for `cloudformation:GetResourceRequestStatus`.
7 *
8 * Polls the status of an asynchronous Cloud Control operation started with
9 * {@link CreateResource}, {@link UpdateResource}, or {@link DeleteResource}
10 * until its `OperationStatus` settles (`SUCCESS` / `FAILED` / `CANCEL_COMPLETE`).
11 * ### Tracking Requests
12 * **Example:** Poll a request token until it settles
13 * ```typescript
14 * const getResourceRequestStatus =
15 * yield* CloudControl.GetResourceRequestStatus();
16 *
17 * // runtime — bounded poll every 2s until the operation settles
18 * const settled = yield* getResourceRequestStatus({
19 * RequestToken: created.ProgressEvent!.RequestToken!,
20 * }).pipe(
21 * Effect.repeat({
22 * schedule: Schedule.spaced("2 seconds"),
23 * until: (r): boolean =>
24 * r.ProgressEvent?.OperationStatus !== "PENDING" &&
25 * r.ProgressEvent?.OperationStatus !== "IN_PROGRESS",
26 * times: 30,
27 * }),
28 * );
29 * ```
30 *
31 * @binding
32 */
33export interface GetResourceRequestStatus extends Binding.Service<
34 GetResourceRequestStatus,
35 "AWS.CloudControl.GetResourceRequestStatus",
36 () => Effect.Effect<
37 (
38 request: cloudcontrol.GetResourceRequestStatusInput,
39 ) => Effect.Effect<
40 cloudcontrol.GetResourceRequestStatusOutput,
41 cloudcontrol.GetResourceRequestStatusError
42 >
43 >
44> {}
45
46export const GetResourceRequestStatus =
47 Binding.Service<GetResourceRequestStatus>(
48 "AWS.CloudControl.GetResourceRequestStatus",
49 );