1import * as ag from "@distilled.cloud/aws/api-gateway";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import * as Output from "../../Output.ts";
5import { registerApiGatewayBinding } from "./BindingHttp.ts";
6import {
7 DeleteUsagePlanKey,
8 type DeleteUsagePlanKeyRequest,
9} from "./DeleteUsagePlanKey.ts";
10import type { UsagePlan } from "./UsagePlan.ts";
11
12/**
13 * HTTP implementation of the {@link DeleteUsagePlanKey} binding. Grants
14 * `apigateway:DELETE` on the plan's per-key paths and calls the API with
15 * the host Function's credentials.
16 */
17export const DeleteUsagePlanKeyHttp = Layer.effect(
18 DeleteUsagePlanKey,
19 Effect.gen(function* () {
20 const deleteUsagePlanKey = yield* ag.deleteUsagePlanKey;
21 return Effect.fn(function* <P extends UsagePlan>(usagePlan: P) {
22 const UsagePlanId = yield* usagePlan.id;
23 yield* registerApiGatewayBinding({
24 cap: "AWS.ApiGateway.DeleteUsagePlanKey",
25 target: usagePlan,
26 verb: "DELETE",
27 paths: (region) => [
28 Output.interpolate`arn:aws:apigateway:${region}::/usageplans/${usagePlan.id}/keys/*`,
29 ],
30 });
31 return Effect.fn(
32 `AWS.ApiGateway.DeleteUsagePlanKey(${usagePlan.LogicalId})`,
33 )(function* (request: DeleteUsagePlanKeyRequest) {
34 return yield* deleteUsagePlanKey({
35 ...request,
36 usagePlanId: yield* UsagePlanId,
37 });
38 });
39 });
40 }),
41);