1import type * as SSM from "@distilled.cloud/aws/ssm";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Parameter } from "./Parameter.ts";
5
6export interface GetParametersRequest extends Omit<
7 SSM.GetParametersRequest,
8 "Names"
9> {}
10
11export type GetParametersParameters = [Parameter, ...Parameter[]];
12
13/**
14 * Runtime binding for `ssm:GetParameters`.
15 *
16 * Bind this operation to one or more `Parameter`s inside a function runtime
17 * to get a callable that fetches all of them in a single API call. The
18 * binding grants `ssm:GetParameters` on the exact parameter ARNs and
19 * `kms:Decrypt` on the encryption keys of any `SecureString` parameters.
20 * ### Reading Multiple Parameters
21 * **Example:** Read Several Parameters at Once
22 * ```typescript
23 * const getParameters = yield* SSM.GetParameters(dbUrl, apiKey);
24 *
25 * const result = yield* getParameters({ WithDecryption: true });
26 * for (const parameter of result.Parameters ?? []) {
27 * yield* Effect.log(`${parameter.Name} = ${parameter.Value}`);
28 * }
29 * ```
30 *
31 * @binding
32 */
33export interface GetParameters extends Binding.Service<
34 GetParameters,
35 "AWS.SSM.GetParameters",
36 (
37 ...parameters: GetParametersParameters
38 ) => Effect.Effect<
39 (
40 request?: GetParametersRequest,
41 ) => Effect.Effect<SSM.GetParametersResult, SSM.GetParametersError>
42 >
43> {}
44export const GetParameters = Binding.Service<GetParameters>(
45 "AWS.SSM.GetParameters",
46);