1import * as GCP from "@/GCP";
2import * as Effect from "effect/Effect";
3import { serveProbes } from "../../bindingHost.ts";
4
5export const PAYLOAD = JSON.stringify({ host: "api.example.com" });
6
7export const AppConfig = GCP.ParameterManager.Parameter("AppConfig", {
8 format: "JSON",
9});
10
11export const V1 = Effect.gen(function* () {
12 const parameter = yield* AppConfig;
13 return yield* GCP.ParameterManager.ParametersVersion("V1", {
14 parameter: parameter.name,
15 data: PAYLOAD,
16 });
17});
18
19/**
20 * Effect-native Cloud Run service exercising every Parameter Manager
21 * binding as its own runtime service account. Deployed from
22 * {@link ../Bindings.test.ts}.
23 */
24export default class ParameterManagerBindingsHost extends GCP.Function<ParameterManagerBindingsHost>()(
25 "ParameterManagerBindingsHost",
26 { main: import.meta.url, invokerIamDisabled: true },
27 Effect.gen(function* () {
28 const getParameter = yield* GCP.ParameterManager.GetParameter(AppConfig);
29 const getVersion = yield* GCP.ParameterManager.GetParameterVersion(V1);
30 const render = yield* GCP.ParameterManager.RenderParameterVersion(V1);
31
32 return {
33 fetch: serveProbes({
34 getParameter: getParameter(),
35 getParameterVersion: getVersion(),
36 renderParameterVersion: render(),
37 }),
38 };
39 }).pipe(
40 Effect.provide(GCP.ParameterManager.GetParameterHttp),
41 Effect.provide(GCP.ParameterManager.GetParameterVersionHttp),
42 Effect.provide(GCP.ParameterManager.RenderParameterVersionHttp),
43 ),
44) {}