1import * as binaryauthorization from "@distilled.cloud/gcp/binaryauthorization_v1";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import {
5 GetPlatformsPolicy,
6 type GetPlatformsPolicyRequest,
7} from "./GetPlatformsPolicy.ts";
8import type { PlatformsPolicy } from "./PlatformsPolicy.ts";
9import { bindGcpHost } from "../Host.ts";
10
11/**
12 * HTTP implementation of {@link GetPlatformsPolicy}.
13 *
14 * @layer
15 * @provides GCP.BinaryAuthorization.GetPlatformsPolicy
16 */
17export const GetPlatformsPolicyHttp = Layer.effect(
18 GetPlatformsPolicy,
19 Effect.gen(function* () {
20 const getPolicy = yield* binaryauthorization.getProjectsPlatformsPolicies;
21 return Effect.fn(function* (policy: PlatformsPolicy) {
22 yield* bindGcpHost({
23 tag: "GCP.BinaryAuthorization.GetPlatformsPolicy",
24 resource: policy,
25 // Platform policies have no resource-level IAM.
26 iam: [{ role: "roles/binaryauthorization.policyViewer" }],
27 });
28 const name = yield* policy.name;
29 return Effect.fn(
30 `GCP.BinaryAuthorization.GetPlatformsPolicy(${policy.LogicalId})`,
31 )(function* (request?: GetPlatformsPolicyRequest) {
32 return yield* getPolicy({
33 ...request,
34 name: yield* name,
35 });
36 });
37 });
38 }),
39);