1import * as amp from "@distilled.cloud/aws/amp";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import * as Binding from "../../Binding.ts";
5import { isBindingHost } from "../Lambda/Function.ts";
6import { DescribeWorkspace } from "./DescribeWorkspace.ts";
7import type { Workspace } from "./Workspace.ts";
8
9export const DescribeWorkspaceHttp = Layer.effect(
10 DescribeWorkspace,
11 Effect.gen(function* () {
12 const describeWorkspace = yield* amp.describeWorkspace;
13
14 return Effect.fn(function* (workspace: Workspace) {
15 const WorkspaceId = yield* workspace.workspaceId;
16 if (!globalThis.__ALCHEMY_RUNTIME__) {
17 const host = yield* Binding.Host;
18 if (isBindingHost(host)) {
19 yield* host.bind`Allow(${host}, AWS.AMP.DescribeWorkspace(${workspace}))`(
20 {
21 policyStatements: [
22 {
23 Effect: "Allow",
24 Action: ["aps:DescribeWorkspace"],
25 Resource: [workspace.workspaceArn],
26 },
27 ],
28 },
29 );
30 }
31 }
32 return Effect.fn(`AWS.AMP.DescribeWorkspace(${workspace.LogicalId})`)(
33 function* () {
34 return yield* describeWorkspace({
35 workspaceId: yield* WorkspaceId,
36 });
37 },
38 );
39 });
40 }),
41);