1import type * as secretmanager from "@distilled.cloud/gcp/secretmanager_v1";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { RuntimeContext } from "../../RuntimeContext.ts";
5import type { LocationsSecret } from "./LocationsSecret.ts";
6import type { Secret } from "./Secret.ts";
7
8export interface AddSecretVersionRequest {
9 /**
10 * Secret payload. `data` is the standard-base64 encoding of at most
11 * 64KiB of bytes.
12 */
13 payload: secretmanager.SecretPayload;
14}
15
16/**
17 * Runtime binding for Secret Manager `secrets.addVersion`.
18 *
19 * Bind this operation to a {@link Secret} or {@link LocationsSecret} in a
20 * Function/Action init phase.
21 * Provide {@link AddSecretVersionHttp}.
22 *
23 * ### Adding Secret Versions
24 * **Example:** Add a version
25 * ```typescript
26 * const addVersion = yield* GCP.SecretManager.AddSecretVersion(secret);
27 * yield* addVersion({ payload: { data: btoa("hello") } });
28 * ```
29 *
30 * @binding
31 * @category SecretManager
32 */
33export interface AddSecretVersion extends Binding.Service<
34 AddSecretVersion,
35 "GCP.SecretManager.AddSecretVersion",
36 (
37 secret: Secret | LocationsSecret,
38 ) => Effect.Effect<
39 (
40 request: AddSecretVersionRequest,
41 ) => Effect.Effect<
42 secretmanager.SecretVersion,
43 secretmanager.AddVersionProjectsSecretsError,
44 RuntimeContext
45 >
46 >
47> {}
48
49export const AddSecretVersion = Binding.Service<AddSecretVersion>(
50 "GCP.SecretManager.AddSecretVersion",
51);