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 GetParameterRequest extends Omit<
7 SSM.GetParameterRequest,
8 "Name"
9> {}
10
11/**
12 * Runtime binding for `ssm:GetParameter`.
13 *
14 * Bind this operation to a `Parameter` inside a function runtime to get a
15 * callable that automatically injects the parameter name. For `SecureString`
16 * parameters the binding also grants `kms:Decrypt` on the parameter's
17 * encryption key so `WithDecryption: true` works out of the box.
18 * ### Reading a Parameter
19 * **Example:** Read a String Parameter
20 * ```typescript
21 * const getParameter = yield* SSM.GetParameter(config);
22 *
23 * const result = yield* getParameter();
24 * const value = result.Parameter?.Value;
25 * ```
26 *
27 * **Example:** Read a SecureString Parameter with Decryption
28 * ```typescript
29 * const getSecret = yield* SSM.GetParameter(apiKey);
30 *
31 * const result = yield* getSecret({ WithDecryption: true });
32 * ```
33 *
34 * @binding
35 */
36export interface GetParameter extends Binding.Service<
37 GetParameter,
38 "AWS.SSM.GetParameter",
39 <P extends Parameter>(
40 parameter: P,
41 ) => Effect.Effect<
42 (
43 request?: GetParameterRequest,
44 ) => Effect.Effect<SSM.GetParameterResult, SSM.GetParameterError>
45 >
46> {}
47export const GetParameter = Binding.Service<GetParameter>(
48 "AWS.SSM.GetParameter",
49);