1import * as secretsmanager from "@distilled.cloud/aws/secrets-manager";
2import * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Secret } from "./Secret.ts";
5
6export interface RotateSecretRequest extends Omit<
7 secretsmanager.RotateSecretRequest,
8 "SecretId"
9> {}
10
11/**
12 * Runtime binding for `secretsmanager:RotateSecret`.
13 *
14 * Bind this operation to a `Secret` to get a callable that triggers an
15 * immediate rotation using the secret's configured rotation function (see
16 * {@link onSecretRotation} for wiring one up). Provide the implementation
17 * with `Effect.provide(AWS.SecretsManager.RotateSecretHttp)`.
18 * ### Rotating Secrets
19 * **Example:** Trigger an On-Demand Rotation
20 * ```typescript
21 * // init — bind the operation to the secret
22 * const rotateSecret = yield* AWS.SecretsManager.RotateSecret(secret);
23 *
24 * // runtime — kicks off the configured rotation function
25 * const result = yield* rotateSecret();
26 * const pendingVersionId = result.VersionId;
27 * ```
28 *
29 * @binding
30 */
31export interface RotateSecret extends Binding.Service<
32 RotateSecret,
33 "AWS.SecretsManager.RotateSecret",
34 (
35 secret: Secret,
36 ) => Effect.Effect<
37 (
38 request?: RotateSecretRequest,
39 ) => Effect.Effect<
40 secretsmanager.RotateSecretResponse,
41 secretsmanager.RotateSecretError
42 >
43 >
44> {}
45
46export const RotateSecret = Binding.Service<RotateSecret>(
47 "AWS.SecretsManager.RotateSecret",
48);