1import * as appconfig from "@distilled.cloud/aws/appconfig";
2import * as Output from "../../Output.ts";
3import type { Application } from "./Application.ts";
4import { makeAppConfigHttpBinding } from "./BindingHttp.ts";
5import type { ConfigurationProfile } from "./ConfigurationProfile.ts";
6import { CreateHostedConfigurationVersion } from "./CreateHostedConfigurationVersion.ts";
7
8/**
9 * HTTP implementation of the {@link CreateHostedConfigurationVersion}
10 * binding. Calls `appconfig:CreateHostedConfigurationVersion` with the
11 * Lambda's IAM role, scoped to the bound configuration profile and its
12 * hosted versions.
13 */
14export const CreateHostedConfigurationVersionHttp = makeAppConfigHttpBinding(
15 CreateHostedConfigurationVersion,
16 {
17 operation: appconfig.createHostedConfigurationVersion,
18 spec: (
19 application: Application,
20 configurationProfile: ConfigurationProfile,
21 ) => ({
22 identifiers: {
23 ApplicationId: application.applicationId,
24 ConfigurationProfileId: configurationProfile.configurationProfileId,
25 },
26 // Per the service authorization reference, the action is authorized
27 // against BOTH the application and the configuration profile.
28 iam: ({ region, accountId }) => ({
29 actions: ["appconfig:CreateHostedConfigurationVersion"],
30 resources: [
31 Output.interpolate`arn:aws:appconfig:${region}:${accountId}:application/${application.applicationId}`,
32 Output.interpolate`arn:aws:appconfig:${region}:${accountId}:application/${application.applicationId}/configurationprofile/${configurationProfile.configurationProfileId}`,
33 Output.interpolate`arn:aws:appconfig:${region}:${accountId}:application/${application.applicationId}/configurationprofile/${configurationProfile.configurationProfileId}/hostedconfigurationversion/*`,
34 ],
35 }),
36 }),
37 },
38);