1import * as secretmanager from "@distilled.cloud/gcp/secretmanager_v1";
2import * as Layer from "effect/Layer";
3import {
4 AccessSecretVersion,
5 type AccessSecretVersionRequest,
6} from "./AccessSecretVersion.ts";
7import { makeSecretHttpBinding } from "./BindingHttp.ts";
8
9/**
10 * HTTP implementation of {@link AccessSecretVersion}.
11 *
12 * @layer
13 * @provides GCP.SecretManager.AccessSecretVersion
14 */
15export const AccessSecretVersionHttp = Layer.effect(
16 AccessSecretVersion,
17 makeSecretHttpBinding<
18 secretmanager.AccessProjectsSecretsVersionsRequest,
19 secretmanager.AccessSecretVersionResponse,
20 secretmanager.AccessProjectsSecretsVersionsError,
21 AccessSecretVersionRequest
22 >({
23 tag: "GCP.SecretManager.AccessSecretVersion",
24 iam: {
25 role: "roles/secretmanager.secretAccessor",
26 on: "secretmanager.secret",
27 },
28 operation: secretmanager.accessProjectsSecretsVersions,
29 toInput: (secretName, request) => ({
30 name: `${secretName}/versions/${request?.version ?? "latest"}`,
31 }),
32 }),
33);