@pipeline-builder/pipeline-core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +69 -0
- package/lib/cdk.d.ts +38 -0
- package/lib/cdk.js +44 -0
- package/lib/config/app-config.d.ts +109 -0
- package/lib/config/app-config.js +197 -0
- package/lib/config/aws-config-cdk.d.ts +49 -0
- package/lib/config/aws-config-cdk.js +65 -0
- package/lib/config/billing-config.d.ts +24 -0
- package/lib/config/billing-config.js +497 -0
- package/lib/config/config-types.d.ts +346 -0
- package/lib/config/config-types.js +4 -0
- package/lib/config/entitlements.d.ts +23 -0
- package/lib/config/entitlements.js +46 -0
- package/lib/config/handler-constants.d.ts +10 -0
- package/lib/config/handler-constants.js +39 -0
- package/lib/config/infrastructure-config.d.ts +66 -0
- package/lib/config/infrastructure-config.js +197 -0
- package/lib/config/server-config.d.ts +53 -0
- package/lib/config/server-config.js +175 -0
- package/lib/config/service-client.d.ts +13 -0
- package/lib/config/service-client.js +20 -0
- package/lib/core/artifact-manager.d.ts +62 -0
- package/lib/core/artifact-manager.js +83 -0
- package/lib/core/id-generator.d.ts +50 -0
- package/lib/core/id-generator.js +50 -0
- package/lib/core/metadata-builder.d.ts +48 -0
- package/lib/core/metadata-builder.js +278 -0
- package/lib/core/metadata-helpers.d.ts +31 -0
- package/lib/core/metadata-helpers.js +55 -0
- package/lib/core/network-types.d.ts +200 -0
- package/lib/core/network-types.js +4 -0
- package/lib/core/network.d.ts +33 -0
- package/lib/core/network.js +112 -0
- package/lib/core/pipeline-helpers.d.ts +61 -0
- package/lib/core/pipeline-helpers.js +563 -0
- package/lib/core/pipeline-types.d.ts +118 -0
- package/lib/core/pipeline-types.js +131 -0
- package/lib/core/role-types.d.ts +254 -0
- package/lib/core/role-types.js +4 -0
- package/lib/core/role.d.ts +14 -0
- package/lib/core/role.js +117 -0
- package/lib/core/security-group-types.d.ts +84 -0
- package/lib/core/security-group-types.js +4 -0
- package/lib/core/security-group.d.ts +14 -0
- package/lib/core/security-group.js +33 -0
- package/lib/handlers/plugin-lookup-handler.d.ts +32 -0
- package/lib/handlers/plugin-lookup-handler.js +292 -0
- package/lib/handlers/pnpm-lock.yaml +12 -0
- package/lib/index.d.ts +45 -0
- package/lib/index.js +53 -0
- package/lib/pipeline/pipeline-builder.d.ts +123 -0
- package/lib/pipeline/pipeline-builder.js +476 -0
- package/lib/pipeline/pipeline-configuration.d.ts +81 -0
- package/lib/pipeline/pipeline-configuration.js +214 -0
- package/lib/pipeline/plugin-lookup.d.ts +131 -0
- package/lib/pipeline/plugin-lookup.js +316 -0
- package/lib/pipeline/plugin-spec.d.ts +138 -0
- package/lib/pipeline/plugin-spec.js +4 -0
- package/lib/pipeline/source-builder.d.ts +62 -0
- package/lib/pipeline/source-builder.js +164 -0
- package/lib/pipeline/source-types.d.ts +221 -0
- package/lib/pipeline/source-types.js +4 -0
- package/lib/pipeline/stage-builder.d.ts +78 -0
- package/lib/pipeline/stage-builder.js +129 -0
- package/lib/pipeline/step-types.d.ts +222 -0
- package/lib/pipeline/step-types.js +4 -0
- package/lib/template/evaluator.d.ts +42 -0
- package/lib/template/evaluator.js +164 -0
- package/lib/template/index.d.ts +34 -0
- package/lib/template/index.js +118 -0
- package/lib/template/metrics.d.ts +10 -0
- package/lib/template/metrics.js +43 -0
- package/lib/template/plugin-resolver.d.ts +8 -0
- package/lib/template/plugin-resolver.js +48 -0
- package/lib/template/tokenizer.d.ts +49 -0
- package/lib/template/tokenizer.js +233 -0
- package/lib/template/topo-sort.d.ts +17 -0
- package/lib/template/topo-sort.js +88 -0
- package/lib/template/validate.d.ts +45 -0
- package/lib/template/validate.js +96 -0
- package/lib/template/walker.d.ts +34 -0
- package/lib/template/walker.js +83 -0
- package/package.json +184 -0
package/lib/core/role.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { Duration, Stack } from 'aws-cdk-lib';
|
|
4
|
+
import { Effect, ManagedPolicy, OpenIdConnectPrincipal, OpenIdConnectProvider, PolicyStatement, Role, ServicePrincipal, } from 'aws-cdk-lib/aws-iam';
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
|
+
import { UniqueId } from './id-generator.js';
|
|
7
|
+
import { Config } from '../config/app-config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a RoleConfig into a CDK IRole.
|
|
10
|
+
* Uses discriminated union narrowing to delegate to the appropriate CDK lookup.
|
|
11
|
+
*
|
|
12
|
+
* @param scope - CDK construct scope
|
|
13
|
+
* @param id - UniqueId instance for generating unique construct IDs
|
|
14
|
+
* @param config - Role configuration to resolve
|
|
15
|
+
* @returns Resolved CDK IRole ready to pass to CodePipeline
|
|
16
|
+
*/
|
|
17
|
+
export function resolveRole(scope, id, config) {
|
|
18
|
+
switch (config.type) {
|
|
19
|
+
case 'roleArn':
|
|
20
|
+
return Role.fromRoleArn(scope, id.generate('role:arn'), config.options.roleArn, {
|
|
21
|
+
mutable: config.options.mutable,
|
|
22
|
+
});
|
|
23
|
+
case 'roleName':
|
|
24
|
+
return Role.fromRoleName(scope, id.generate('role:name'), config.options.roleName, {
|
|
25
|
+
mutable: config.options.mutable,
|
|
26
|
+
});
|
|
27
|
+
case 'codeBuildDefault':
|
|
28
|
+
return createCodeBuildDefaultRole(scope, id, config.options);
|
|
29
|
+
case 'oidc':
|
|
30
|
+
return createOidcRole(scope, id, config.options);
|
|
31
|
+
default: {
|
|
32
|
+
const _exhaustive = config;
|
|
33
|
+
throw new Error(`Unknown role config type: ${_exhaustive.type}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new IAM role with CodeBuild service principal and CloudWatch Logs permissions.
|
|
39
|
+
*/
|
|
40
|
+
function createCodeBuildDefaultRole(scope, id, options) {
|
|
41
|
+
const role = new Role(scope, id.generate('role:codebuild'), {
|
|
42
|
+
assumedBy: new ServicePrincipal('codebuild.amazonaws.com'),
|
|
43
|
+
...(options.roleName && { roleName: options.roleName }),
|
|
44
|
+
});
|
|
45
|
+
const stack = Stack.of(scope);
|
|
46
|
+
const logGroupPrefix = Config.get('aws').logging.groupName;
|
|
47
|
+
// Derive ARN pattern from the configured log group name (strip trailing segment for wildcard)
|
|
48
|
+
const logGroupPattern = logGroupPrefix.replace(/\/[^/]*$/, '/*');
|
|
49
|
+
role.addToPolicy(new PolicyStatement({
|
|
50
|
+
effect: Effect.ALLOW,
|
|
51
|
+
actions: [
|
|
52
|
+
'logs:CreateLogGroup',
|
|
53
|
+
'logs:CreateLogStream',
|
|
54
|
+
'logs:PutLogEvents',
|
|
55
|
+
],
|
|
56
|
+
resources: [
|
|
57
|
+
`arn:aws:logs:${stack.region}:${stack.account}:log-group:${logGroupPattern}:*`,
|
|
58
|
+
],
|
|
59
|
+
}));
|
|
60
|
+
return role;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new IAM role with an OIDC federated trust principal.
|
|
64
|
+
*
|
|
65
|
+
* Supports either referencing an existing OIDC provider by ARN
|
|
66
|
+
* or creating a new one from issuer URL + client IDs.
|
|
67
|
+
*/
|
|
68
|
+
function createOidcRole(scope, id, options) {
|
|
69
|
+
if (options.providerArn && options.issuer) {
|
|
70
|
+
throw new Error('OIDC role config must specify either providerArn or issuer, not both');
|
|
71
|
+
}
|
|
72
|
+
let provider;
|
|
73
|
+
if (options.providerArn) {
|
|
74
|
+
provider = OpenIdConnectProvider.fromOpenIdConnectProviderArn(scope, id.generate('oidc:provider'), options.providerArn);
|
|
75
|
+
}
|
|
76
|
+
else if (options.issuer) {
|
|
77
|
+
provider = new OpenIdConnectProvider(scope, id.generate('oidc:provider'), {
|
|
78
|
+
url: options.issuer,
|
|
79
|
+
clientIds: options.clientIds ?? ['sts.amazonaws.com'],
|
|
80
|
+
thumbprints: options.thumbprints,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw new Error('OIDC role config requires either providerArn or issuer');
|
|
85
|
+
}
|
|
86
|
+
const principal = new OpenIdConnectPrincipal(provider, {
|
|
87
|
+
...(options.conditions && { StringEquals: options.conditions }),
|
|
88
|
+
...(options.conditionsLike && { StringLike: options.conditionsLike }),
|
|
89
|
+
});
|
|
90
|
+
const role = new Role(scope, id.generate('role:oidc'), {
|
|
91
|
+
assumedBy: principal,
|
|
92
|
+
...(options.roleName && { roleName: options.roleName }),
|
|
93
|
+
...(options.description && { description: options.description }),
|
|
94
|
+
...(options.maxSessionDuration && {
|
|
95
|
+
maxSessionDuration: Duration.seconds(options.maxSessionDuration),
|
|
96
|
+
}),
|
|
97
|
+
...(options.permissionsBoundaryArn && {
|
|
98
|
+
permissionsBoundary: ManagedPolicy.fromManagedPolicyArn(scope, id.generate('oidc:boundary'), options.permissionsBoundaryArn),
|
|
99
|
+
}),
|
|
100
|
+
});
|
|
101
|
+
if (options.managedPolicyArns) {
|
|
102
|
+
for (const arn of options.managedPolicyArns) {
|
|
103
|
+
role.addManagedPolicy(ManagedPolicy.fromManagedPolicyArn(scope, id.generate('oidc:policy'), arn));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (options.policyStatements) {
|
|
107
|
+
for (const stmt of options.policyStatements) {
|
|
108
|
+
role.addToPolicy(new PolicyStatement({
|
|
109
|
+
effect: stmt.effect === 'Deny' ? Effect.DENY : Effect.ALLOW,
|
|
110
|
+
actions: stmt.actions,
|
|
111
|
+
resources: stmt.resources,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return role;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3JvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsTUFBTSxFQUdOLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixJQUFJLEVBQ0osZ0JBQWdCLEdBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBZ0IsRUFDaEIsRUFBWSxFQUNaLE1BQWtCO0lBRWxCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLEtBQUssU0FBUztZQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDOUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTzthQUNoQyxDQUFDLENBQUM7UUFDTCxLQUFLLFVBQVU7WUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pGLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87YUFDaEMsQ0FBQyxDQUFDO1FBQ0wsS0FBSyxrQkFB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SUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSxlQUFlLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgRWZmZWN0LFxuICB0eXBlIElPcGVuSWRDb25uZWN0UHJvdmlkZXIsXG4gIHR5cGUgSVJvbGUsXG4gIE1hbmFnZWRQb2xpY3ksXG4gIE9wZW5JZENvbm5lY3RQcmluY2lwYWwsXG4gIE9wZW5JZENvbm5lY3RQcm92aWRlcixcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZERlZmF1bHRSb2xlT3B0aW9ucywgT2lkY1JvbGVPcHRpb25zLCBSb2xlQ29uZmlnIH0gZnJvbSAnLi9yb2xlLXR5cGVzLmpzJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIGEgUm9sZUNvbmZpZyBpbnRvIGEgQ0RLIElSb2xlLlxuICogVXNlcyBkaXNjcmltaW5hdGVkIHVuaW9uIG5hcnJvd2luZyB0byBkZWxlZ2F0ZSB0byB0aGUgYXBwcm9wcmlhdGUgQ0RLIGxvb2t1cC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBDREsgY29uc3RydWN0IHNjb3BlXG4gKiBAcGFyYW0gaWQgLSBVbmlxdWVJZCBpbnN0YW5jZSBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgY29uc3RydWN0IElEc1xuICogQHBhcmFtIGNvbmZpZyAtIFJvbGUgY29uZmlndXJhdGlvbiB0byByZXNvbHZlXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBDREsgSVJvbGUgcmVhZHkgdG8gcGFzcyB0byBDb2RlUGlwZWxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSb2xlKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogVW5pcXVlSWQsXG4gIGNvbmZpZzogUm9sZUNvbmZpZyxcbik6IElSb2xlIHtcbiAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgIGNhc2UgJ3JvbGVBcm4nOlxuICAgICAgcmV0dXJuIFJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGlkLmdlbmVyYXRlKCdyb2xlOmFybicpLCBjb25maWcub3B0aW9ucy5yb2xlQXJuLCB7XG4gICAgICAgIG11dGFibGU6IGNvbmZpZy5vcHRpb25zLm11dGFibGUsXG4gICAgICB9KTtcbiAgICBjYXNlICdyb2xlTmFtZSc6XG4gICAgICByZXR1cm4gUm9sZS5mcm9tUm9sZU5hbWUoc2NvcGUsIGlkLmdlbmVyYXRlKCdyb2xlOm5hbWUnKSwgY29uZmlnLm9wdGlvbnMucm9sZU5hbWUsIHtcbiAgICAgICAgbXV0YWJsZTogY29uZmlnLm9wdGlvbnMubXV0YWJsZSxcbiAgICAgIH0pO1xuICAgIGNhc2UgJ2NvZGVCdWlsZERlZmF1bHQnOlxuICAgICAgcmV0dXJuIGNyZWF0ZUNvZGVCdWlsZERlZmF1bHRSb2xlKHNjb3BlLCBpZCwgY29uZmlnLm9wdGlvbnMpO1xuICAgIGNhc2UgJ29pZGMnOlxuICAgICAgcmV0dXJuIGNyZWF0ZU9pZGNSb2xlKHNjb3BlLCBpZCwgY29uZmlnLm9wdGlvbnMpO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGNvbmZpZztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByb2xlIGNvbmZpZyB0eXBlOiAkeyhfZXhoYXVzdGl2ZSBhcyBSb2xlQ29uZmlnKS50eXBlfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgSUFNIHJvbGUgd2l0aCBDb2RlQnVpbGQgc2VydmljZSBwcmluY2lwYWwgYW5kIENsb3VkV2F0Y2ggTG9ncyBwZXJtaXNzaW9ucy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29kZUJ1aWxkRGVmYXVsdFJvbGUoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBVbmlxdWVJZCxcbiAgb3B0aW9uczogQ29kZUJ1aWxkRGVmYXVsdFJvbGVPcHRpb25zLFxuKTogSVJvbGUge1xuICBjb25zdCByb2xlID0gbmV3IFJvbGUoc2NvcGUsIGlkLmdlbmVyYXRlKCdyb2xlOmNvZGVidWlsZCcpLCB7XG4gICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnY29kZWJ1aWxkLmFtYXpvbmF3cy5jb20nKSxcbiAgICAuLi4ob3B0aW9ucy5yb2xlTmFtZSAmJiB7IHJvbGVOYW1lOiBvcHRpb25zLnJvbGVOYW1lIH0pLFxuICB9KTtcblxuICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgY29uc3QgbG9nR3JvdXBQcmVmaXggPSBDb25maWcuZ2V0KCdhd3MnKS5sb2dnaW5nLmdyb3VwTmFtZTtcbiAgLy8gRGVyaXZlIEFSTiBwYXR0ZXJuIGZyb20gdGhlIGNvbmZpZ3VyZWQgbG9nIGdyb3VwIG5hbWUgKHN0cmlwIHRyYWlsaW5nIHNlZ21lbnQgZm9yIHdpbGRjYXJkKVxuICBjb25zdCBsb2dHcm91cFBhdHRlcm4gPSBsb2dHcm91cFByZWZpeC5yZXBsYWNlKC9cXC9bXi9dKiQvLCAnLyonKTtcbiAgcm9sZS5hZGRUb1BvbGljeShcbiAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnbG9nczpDcmVhdGVMb2dHcm91cCcsXG4gICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmxvZ3M6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06bG9nLWdyb3VwOiR7bG9nR3JvdXBQYXR0ZXJufToqYCxcbiAgICAgIF0sXG4gICAgfSksXG4gICk7XG5cbiAgcmV0dXJuIHJvbGU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBJQU0gcm9sZSB3aXRoIGFuIE9JREMgZmVkZXJhdGVkIHRydXN0IHByaW5jaXBhbC5cbiAqXG4gKiBTdXBwb3J0cyBlaXRoZXIgcmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgT0lEQyBwcm92aWRlciBieSBBUk5cbiAqIG9yIGNyZWF0aW5nIGEgbmV3IG9uZSBmcm9tIGlzc3VlciBVUkwgKyBjbGllbnQgSURzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVPaWRjUm9sZShcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IFVuaXF1ZUlkLFxuICBvcHRpb25zOiBPaWRjUm9sZU9wdGlvbnMsXG4pOiBJUm9sZSB7XG4gIGlmIChvcHRpb25zLnByb3ZpZGVyQXJuICYmIG9wdGlvbnMuaXNzdWVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPSURDIHJvbGUgY29uZmlnIG11c3Qgc3BlY2lmeSBlaXRoZXIgcHJvdmlkZXJBcm4gb3IgaXNzdWVyLCBub3QgYm90aCcpO1xuICB9XG5cbiAgbGV0IHByb3ZpZGVyOiBJT3BlbklkQ29ubmVjdFByb3ZpZGVyO1xuXG4gIGlmIChvcHRpb25zLnByb3ZpZGVyQXJuKSB7XG4gICAgcHJvdmlkZXIgPSBPcGVuSWRDb25uZWN0UHJvdmlkZXIuZnJvbU9wZW5JZENvbm5lY3RQcm92aWRlckFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQuZ2VuZXJhdGUoJ29pZGM6cHJvdmlkZXInKSxcbiAgICAgIG9wdGlvbnMucHJvdmlkZXJBcm4sXG4gICAgKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmlzc3Vlcikge1xuICAgIHByb3ZpZGVyID0gbmV3IE9wZW5JZENvbm5lY3RQcm92aWRlcihzY29wZSwgaWQuZ2VuZXJhdGUoJ29pZGM6cHJvdmlkZXInKSwge1xuICAgICAgdXJsOiBvcHRpb25zLmlzc3VlcixcbiAgICAgIGNsaWVudElkczogb3B0aW9ucy5jbGllbnRJZHMgPz8gWydzdHMuYW1hem9uYXdzLmNvbSddLFxuICAgICAgdGh1bWJwcmludHM6IG9wdGlvbnMudGh1bWJwcmludHMsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPSURDIHJvbGUgY29uZmlnIHJlcXVpcmVzIGVpdGhlciBwcm92aWRlckFybiBvciBpc3N1ZXInKTtcbiAgfVxuXG4gIGNvbnN0IHByaW5jaXBhbCA9IG5ldyBPcGVuSWRDb25uZWN0UHJpbmNpcGFsKHByb3ZpZGVyLCB7XG4gICAgLi4uKG9wdGlvbnMuY29uZGl0aW9ucyAmJiB7IFN0cmluZ0VxdWFsczogb3B0aW9ucy5jb25kaXRpb25zIH0pLFxuICAgIC4uLihvcHRpb25zLmNvbmRpdGlvbnNMaWtlICYmIHsgU3RyaW5nTGlrZTogb3B0aW9ucy5jb25kaXRpb25zTGlrZSB9KSxcbiAgfSk7XG5cbiAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHNjb3BlLCBpZC5nZW5lcmF0ZSgncm9sZTpvaWRjJyksIHtcbiAgICBhc3N1bWVkQnk6IHByaW5jaXBhbCxcbiAgICAuLi4ob3B0aW9ucy5yb2xlTmFtZSAmJiB7IHJvbGVOYW1lOiBvcHRpb25zLnJvbGVOYW1lIH0pLFxuICAgIC4uLihvcHRpb25zLmRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gfSksXG4gICAgLi4uKG9wdGlvbnMubWF4U2Vzc2lvbkR1cmF0aW9uICYmIHtcbiAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heFNlc3Npb25EdXJhdGlvbiksXG4gICAgfSksXG4gICAgLi4uKG9wdGlvbnMucGVybWlzc2lvbnNCb3VuZGFyeUFybiAmJiB7XG4gICAgICBwZXJtaXNzaW9uc0JvdW5kYXJ5OiBNYW5hZ2VkUG9saWN5LmZyb21NYW5hZ2VkUG9saWN5QXJuKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgaWQuZ2VuZXJhdGUoJ29pZGM6Ym91bmRhcnknKSxcbiAgICAgICAgb3B0aW9ucy5wZXJtaXNzaW9uc0JvdW5kYXJ5QXJuLFxuICAgICAgKSxcbiAgICB9KSxcbiAgfSk7XG5cbiAgaWYgKG9wdGlvbnMubWFuYWdlZFBvbGljeUFybnMpIHtcbiAgICBmb3IgKGNvbnN0IGFybiBvZiBvcHRpb25zLm1hbmFnZWRQb2xpY3lBcm5zKSB7XG4gICAgICByb2xlLmFkZE1hbmFnZWRQb2xpY3koTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybihzY29wZSwgaWQuZ2VuZXJhdGUoJ29pZGM6cG9saWN5JyksIGFybikpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnBvbGljeVN0YXRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IHN0bXQgb2Ygb3B0aW9ucy5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IHN0bXQuZWZmZWN0ID09PSAnRGVueScgPyBFZmZlY3QuREVOWSA6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBzdG10LmFjdGlvbnMsXG4gICAgICAgICAgcmVzb3VyY2VzOiBzdG10LnJlc291cmNlcyxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb2xlO1xufVxuIl19
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security group configuration using explicit security group IDs
|
|
3
|
+
*
|
|
4
|
+
* Looks up existing security groups by their IDs via `SecurityGroup.fromSecurityGroupId`.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const sg: SecurityGroupIdsConfig = {
|
|
9
|
+
* type: 'securityGroupIds',
|
|
10
|
+
* options: {
|
|
11
|
+
* securityGroupIds: ['sg-12345678', 'sg-87654321'],
|
|
12
|
+
* }
|
|
13
|
+
* };
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export interface SecurityGroupIdsConfig {
|
|
17
|
+
readonly type: 'securityGroupIds';
|
|
18
|
+
readonly options: SecurityGroupIdsOptions;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Security group configuration using name-based lookup
|
|
22
|
+
*
|
|
23
|
+
* Looks up an existing security group by name and VPC ID
|
|
24
|
+
* via `SecurityGroup.fromLookupByName`.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const sg: SecurityGroupLookupConfig = {
|
|
29
|
+
* type: 'securityGroupLookup',
|
|
30
|
+
* options: {
|
|
31
|
+
* securityGroupName: 'my-codebuild-sg',
|
|
32
|
+
* vpcId: 'vpc-0a1b2c3d4e5f6a7b8',
|
|
33
|
+
* }
|
|
34
|
+
* };
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export interface SecurityGroupLookupConfig {
|
|
38
|
+
readonly type: 'securityGroupLookup';
|
|
39
|
+
readonly options: SecurityGroupLookupOptions;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Configuration options for security group lookup by IDs
|
|
43
|
+
*/
|
|
44
|
+
export interface SecurityGroupIdsOptions {
|
|
45
|
+
/**
|
|
46
|
+
* List of security group IDs
|
|
47
|
+
* @example ['sg-12345678', 'sg-87654321']
|
|
48
|
+
*/
|
|
49
|
+
readonly securityGroupIds: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Whether the imported security groups can be modified by attaching
|
|
52
|
+
* ingress/egress rules. Set to false to avoid additional API calls
|
|
53
|
+
* during synthesis.
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
56
|
+
readonly mutable?: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Configuration options for security group lookup by name
|
|
60
|
+
*/
|
|
61
|
+
export interface SecurityGroupLookupOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Name of the security group to look up
|
|
64
|
+
* @example 'my-codebuild-sg'
|
|
65
|
+
*/
|
|
66
|
+
readonly securityGroupName: string;
|
|
67
|
+
/**
|
|
68
|
+
* VPC ID that contains the security group.
|
|
69
|
+
* Required for name-based lookup.
|
|
70
|
+
* @example 'vpc-0a1b2c3d4e5f6a7b8'
|
|
71
|
+
*/
|
|
72
|
+
readonly vpcId: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Union type of all supported security group configurations.
|
|
76
|
+
*
|
|
77
|
+
* Used at the pipeline level (`CodeBuildDefaults.securityGroups`) to specify
|
|
78
|
+
* security groups for CodeBuild actions.
|
|
79
|
+
*
|
|
80
|
+
* Each variant resolves to CDK `ISecurityGroup[]`:
|
|
81
|
+
* - SecurityGroupIdsConfig: Security groups looked up by IDs
|
|
82
|
+
* - SecurityGroupLookupConfig: Security group looked up by name + VPC
|
|
83
|
+
*/
|
|
84
|
+
export type SecurityGroupConfig = SecurityGroupIdsConfig | SecurityGroupLookupConfig;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
export {};
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9zZWN1cml0eS1ncm91cC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2VjdXJpdHkgZ3JvdXAgY29uZmlndXJhdGlvbiB1c2luZyBleHBsaWNpdCBzZWN1cml0eSBncm91cCBJRHNcbiAqXG4gKiBMb29rcyB1cCBleGlzdGluZyBzZWN1cml0eSBncm91cHMgYnkgdGhlaXIgSURzIHZpYSBgU2VjdXJpdHlHcm91cC5mcm9tU2VjdXJpdHlHcm91cElkYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2c6IFNlY3VyaXR5R3JvdXBJZHNDb25maWcgPSB7XG4gKiAgIHR5cGU6ICdzZWN1cml0eUdyb3VwSWRzJyxcbiAqICAgb3B0aW9uczoge1xuICogICAgIHNlY3VyaXR5R3JvdXBJZHM6IFsnc2ctMTIzNDU2NzgnLCAnc2ctODc2NTQzMjEnXSxcbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBJZHNDb25maWcge1xuICByZWFkb25seSB0eXBlOiAnc2VjdXJpdHlHcm91cElkcyc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFNlY3VyaXR5R3JvdXBJZHNPcHRpb25zO1xufVxuXG4vKipcbiAqIFNlY3VyaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb24gdXNpbmcgbmFtZS1iYXNlZCBsb29rdXBcbiAqXG4gKiBMb29rcyB1cCBhbiBleGlzdGluZyBzZWN1cml0eSBncm91cCBieSBuYW1lIGFuZCBWUEMgSURcbiAqIHZpYSBgU2VjdXJpdHlHcm91cC5mcm9tTG9va3VwQnlOYW1lYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2c6IFNlY3VyaXR5R3JvdXBMb29rdXBDb25maWcgPSB7XG4gKiAgIHR5cGU6ICdzZWN1cml0eUdyb3VwTG9va3VwJyxcbiAqICAgb3B0aW9uczoge1xuICogICAgIHNlY3VyaXR5R3JvdXBOYW1lOiAnbXktY29kZWJ1aWxkLXNnJyxcbiAqICAgICB2cGNJZDogJ3ZwYy0wYTFiMmMzZDRlNWY2YTdiOCcsXG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwTG9va3VwQ29uZmlnIHtcbiAgcmVhZG9ubHkgdHlwZTogJ3NlY3VyaXR5R3JvdXBMb29rdXAnO1xuICByZWFkb25seSBvcHRpb25zOiBTZWN1cml0eUdyb3VwTG9va3VwT3B0aW9ucztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNlY3VyaXR5IGdyb3VwIGxvb2t1cCBieSBJRHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwSWRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHNlY3VyaXR5IGdyb3VwIElEc1xuICAgKiBAZXhhbXBsZSBbJ3NnLTEyMzQ1Njc4JywgJ3NnLTg3NjU0MzIxJ11cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbXBvcnRlZCBzZWN1cml0eSBncm91cHMgY2FuIGJlIG1vZGlmaWVkIGJ5IGF0dGFjaGluZ1xuICAgKiBpbmdyZXNzL2VncmVzcyBydWxlcy4gU2V0IHRvIGZhbHNlIHRvIGF2b2lkIGFkZGl0aW9uYWwgQVBJIGNhbGxzXG4gICAqIGR1cmluZyBzeW50aGVzaXMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igc2VjdXJpdHkgZ3JvdXAgbG9va3VwIGJ5IG5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwTG9va3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzZWN1cml0eSBncm91cCB0byBsb29rIHVwXG4gICAqIEBleGFtcGxlICdteS1jb2RlYnVpbGQtc2cnXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWUEMgSUQgdGhhdCBjb250YWlucyB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqIFJlcXVpcmVkIGZvciBuYW1lLWJhc2VkIGxvb2t1cC5cbiAgICogQGV4YW1wbGUgJ3ZwYy0wYTFiMmMzZDRlNWY2YTdiOCdcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVW5pb24gdHlwZSBvZiBhbGwgc3VwcG9ydGVkIHNlY3VyaXR5IGdyb3VwIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFVzZWQgYXQgdGhlIHBpcGVsaW5lIGxldmVsIChgQ29kZUJ1aWxkRGVmYXVsdHMuc2VjdXJpdHlHcm91cHNgKSB0byBzcGVjaWZ5XG4gKiBzZWN1cml0eSBncm91cHMgZm9yIENvZGVCdWlsZCBhY3Rpb25zLlxuICpcbiAqIEVhY2ggdmFyaWFudCByZXNvbHZlcyB0byBDREsgYElTZWN1cml0eUdyb3VwW11gOlxuICogLSBTZWN1cml0eUdyb3VwSWRzQ29uZmlnOiBTZWN1cml0eSBncm91cHMgbG9va2VkIHVwIGJ5IElEc1xuICogLSBTZWN1cml0eUdyb3VwTG9va3VwQ29uZmlnOiBTZWN1cml0eSBncm91cCBsb29rZWQgdXAgYnkgbmFtZSArIFZQQ1xuICovXG5leHBvcnQgdHlwZSBTZWN1cml0eUdyb3VwQ29uZmlnID0gU2VjdXJpdHlHcm91cElkc0NvbmZpZyB8IFNlY3VyaXR5R3JvdXBMb29rdXBDb25maWc7XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ISecurityGroup } from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { UniqueId } from './id-generator.js';
|
|
4
|
+
import type { SecurityGroupConfig } from './security-group-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a SecurityGroupConfig into CDK ISecurityGroup[].
|
|
7
|
+
* Uses discriminated union narrowing to delegate to the appropriate CDK lookup.
|
|
8
|
+
*
|
|
9
|
+
* @param scope - CDK construct scope
|
|
10
|
+
* @param id - UniqueId instance for generating unique construct IDs
|
|
11
|
+
* @param config - Security group configuration to resolve
|
|
12
|
+
* @returns Resolved CDK ISecurityGroup array
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveSecurityGroup(scope: Construct, id: UniqueId, config: SecurityGroupConfig): ISecurityGroup[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { SecurityGroup, Vpc } from 'aws-cdk-lib/aws-ec2';
|
|
4
|
+
import { Construct } from 'constructs';
|
|
5
|
+
import { UniqueId } from './id-generator.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a SecurityGroupConfig into CDK ISecurityGroup[].
|
|
8
|
+
* Uses discriminated union narrowing to delegate to the appropriate CDK lookup.
|
|
9
|
+
*
|
|
10
|
+
* @param scope - CDK construct scope
|
|
11
|
+
* @param id - UniqueId instance for generating unique construct IDs
|
|
12
|
+
* @param config - Security group configuration to resolve
|
|
13
|
+
* @returns Resolved CDK ISecurityGroup array
|
|
14
|
+
*/
|
|
15
|
+
export function resolveSecurityGroup(scope, id, config) {
|
|
16
|
+
switch (config.type) {
|
|
17
|
+
case 'securityGroupIds':
|
|
18
|
+
return config.options.securityGroupIds.map((sgId) => SecurityGroup.fromSecurityGroupId(scope, id.generate('sg:id'), sgId, { mutable: config.options.mutable }));
|
|
19
|
+
case 'securityGroupLookup': {
|
|
20
|
+
const vpc = Vpc.fromLookup(scope, id.generate('sg:vpc'), {
|
|
21
|
+
vpcId: config.options.vpcId,
|
|
22
|
+
});
|
|
23
|
+
return [
|
|
24
|
+
SecurityGroup.fromLookupByName(scope, id.generate('sg:lookup'), config.options.securityGroupName, vpc),
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
default: {
|
|
28
|
+
const _exhaustive = config;
|
|
29
|
+
throw new Error(`Unknown security group config type: ${_exhaustive.type}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9zZWN1cml0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBdUIsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxLQUFnQixFQUNoQixFQUFZLEVBQ1osTUFBMkI7SUFFM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsS0FBSyxrQkFBa0I7WUFDckIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDeEMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDekMsS0FBSyxFQUNMLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3BCLElBQUksRUFDSixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUNwQyxDQUNGLENBQUM7UUFDSixLQUFLLHFCQUFxQixFQUFFLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSzthQUM1QixDQUFDLENBQUM7WUFDSCxPQUFPO2dCQUNMLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDNUIsS0FBSyxFQUNMLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQ2hDLEdBQUcsQ0FDSjthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsU0FBUyxDQUFDO1lBQ1IsTUFBTSxXQUFXLEdBQVUsTUFBTSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXdDLFdBQW1DLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgdHlwZSBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCwgVnBjIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eUdyb3VwQ29uZmlnIH0gZnJvbSAnLi9zZWN1cml0eS1ncm91cC10eXBlcy5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBhIFNlY3VyaXR5R3JvdXBDb25maWcgaW50byBDREsgSVNlY3VyaXR5R3JvdXBbXS5cbiAqIFVzZXMgZGlzY3JpbWluYXRlZCB1bmlvbiBuYXJyb3dpbmcgdG8gZGVsZWdhdGUgdG8gdGhlIGFwcHJvcHJpYXRlIENESyBsb29rdXAuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gQ0RLIGNvbnN0cnVjdCBzY29wZVxuICogQHBhcmFtIGlkIC0gVW5pcXVlSWQgaW5zdGFuY2UgZm9yIGdlbmVyYXRpbmcgdW5pcXVlIGNvbnN0cnVjdCBJRHNcbiAqIEBwYXJhbSBjb25maWcgLSBTZWN1cml0eSBncm91cCBjb25maWd1cmF0aW9uIHRvIHJlc29sdmVcbiAqIEByZXR1cm5zIFJlc29sdmVkIENESyBJU2VjdXJpdHlHcm91cCBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlY3VyaXR5R3JvdXAoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBVbmlxdWVJZCxcbiAgY29uZmlnOiBTZWN1cml0eUdyb3VwQ29uZmlnLFxuKTogSVNlY3VyaXR5R3JvdXBbXSB7XG4gIHN3aXRjaCAoY29uZmlnLnR5cGUpIHtcbiAgICBjYXNlICdzZWN1cml0eUdyb3VwSWRzJzpcbiAgICAgIHJldHVybiBjb25maWcub3B0aW9ucy5zZWN1cml0eUdyb3VwSWRzLm1hcChcbiAgICAgICAgKHNnSWQpID0+IFNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZChcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICBpZC5nZW5lcmF0ZSgnc2c6aWQnKSxcbiAgICAgICAgICBzZ0lkLFxuICAgICAgICAgIHsgbXV0YWJsZTogY29uZmlnLm9wdGlvbnMubXV0YWJsZSB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICBjYXNlICdzZWN1cml0eUdyb3VwTG9va3VwJzoge1xuICAgICAgY29uc3QgdnBjID0gVnBjLmZyb21Mb29rdXAoc2NvcGUsIGlkLmdlbmVyYXRlKCdzZzp2cGMnKSwge1xuICAgICAgICB2cGNJZDogY29uZmlnLm9wdGlvbnMudnBjSWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFNlY3VyaXR5R3JvdXAuZnJvbUxvb2t1cEJ5TmFtZShcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICBpZC5nZW5lcmF0ZSgnc2c6bG9va3VwJyksXG4gICAgICAgICAgY29uZmlnLm9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUsXG4gICAgICAgICAgdnBjLFxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gY29uZmlnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNlY3VyaXR5IGdyb3VwIGNvbmZpZyB0eXBlOiAkeyhfZXhoYXVzdGl2ZSBhcyBTZWN1cml0eUdyb3VwQ29uZmlnKS50eXBlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CloudFormationCustomResourceEvent, CloudFormationCustomResourceResponse } from 'aws-lambda';
|
|
2
|
+
/**
|
|
3
|
+
* Lambda handler for CloudFormation Custom Resource that performs plugin lookup.
|
|
4
|
+
*
|
|
5
|
+
* Authenticates using JWT token from AWS Secrets Manager (PLATFORM_SECRET_NAME env var).
|
|
6
|
+
* Create the secret with: `pipeline-manager infra store-token`
|
|
7
|
+
*
|
|
8
|
+
* Request Types:
|
|
9
|
+
* - Create/Update: fetches and returns plugin configuration from API
|
|
10
|
+
* - Delete: no-op (always succeeds)
|
|
11
|
+
*
|
|
12
|
+
* Response:
|
|
13
|
+
* - Success: Returns base64-encoded plugin JSON in Data.ResultValue
|
|
14
|
+
* - Failure: Returns error message in Reason
|
|
15
|
+
*
|
|
16
|
+
* @param event - CloudFormation custom resource event
|
|
17
|
+
* @returns CloudFormation response
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* Custom Resource Properties:
|
|
21
|
+
* ```json
|
|
22
|
+
* {
|
|
23
|
+
* "baseURL": "https://api.example.com",
|
|
24
|
+
* "pluginFilter": {
|
|
25
|
+
* "name": "nodejs-build",
|
|
26
|
+
* "version": "1.0.0",
|
|
27
|
+
* "isActive": true
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const handler: (event: CloudFormationCustomResourceEvent) => Promise<CloudFormationCustomResourceResponse>;
|