@rio-cloud/cdk-v2-constructs 1.0.1-alpha.0
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/.gitattributes +15 -0
- package/.jsii +7832 -0
- package/.versionrc.json +14 -0
- package/API.md +8136 -0
- package/CHANGELOG.md +5 -0
- package/LICENSE +202 -0
- package/README.md +56 -0
- package/lib/datadog/datadogLogIndexMonitoring.d.ts +49 -0
- package/lib/datadog/datadogLogIndexMonitoring.js +116 -0
- package/lib/datadog/datadogMonitor.d.ts +13 -0
- package/lib/datadog/datadogMonitor.js +19 -0
- package/lib/datadog/index.d.ts +1 -0
- package/lib/datadog/index.js +19 -0
- package/lib/fargate/datadog.d.ts +18 -0
- package/lib/fargate/datadog.js +225 -0
- package/lib/fargate/rio-fargate-service.d.ts +276 -0
- package/lib/fargate/rio-fargate-service.js +147 -0
- package/lib/fargate/spring.d.ts +6 -0
- package/lib/fargate/spring.js +39 -0
- package/lib/index.d.ts +21 -0
- package/lib/index.js +34 -0
- package/lib/kafka/index.d.ts +2 -0
- package/lib/kafka/index.js +15 -0
- package/lib/kafka/kafka-event-spec.d.ts +43 -0
- package/lib/kafka/kafka-event-spec.js +106 -0
- package/lib/kafka/kafka-topic.d.ts +102 -0
- package/lib/kafka/kafka-topic.js +70 -0
- package/lib/pipeline/rio-backup-secrets-restore-stage.d.ts +40 -0
- package/lib/pipeline/rio-backup-secrets-restore-stage.js +104 -0
- package/lib/pipeline/rio-bitbucket-source-action.d.ts +25 -0
- package/lib/pipeline/rio-bitbucket-source-action.js +36 -0
- package/lib/rio-claidometer.d.ts +21 -0
- package/lib/rio-claidometer.js +39 -0
- package/lib/rio-landing-zone.d.ts +16 -0
- package/lib/rio-landing-zone.js +57 -0
- package/lib/rio-load-balancer.d.ts +26 -0
- package/lib/rio-load-balancer.js +42 -0
- package/lib/toggle.d.ts +21 -0
- package/lib/toggle.js +44 -0
- package/lib/watchful/alb.d.ts +47 -0
- package/lib/watchful/alb.js +52 -0
- package/lib/watchful/aspect.d.ts +16 -0
- package/lib/watchful/aspect.js +55 -0
- package/lib/watchful/cloudfront.d.ts +50 -0
- package/lib/watchful/cloudfront.js +65 -0
- package/lib/watchful/datadog-log-alarm.d.ts +37 -0
- package/lib/watchful/datadog-log-alarm.js +88 -0
- package/lib/watchful/datadog-metric-alarm.d.ts +32 -0
- package/lib/watchful/datadog-metric-alarm.js +158 -0
- package/lib/watchful/docdb.d.ts +62 -0
- package/lib/watchful/docdb.js +102 -0
- package/lib/watchful/dynamodb.d.ts +69 -0
- package/lib/watchful/dynamodb.js +87 -0
- package/lib/watchful/ecs.d.ts +50 -0
- package/lib/watchful/ecs.js +69 -0
- package/lib/watchful/lambda.d.ts +59 -0
- package/lib/watchful/lambda.js +65 -0
- package/lib/watchful/metric-alarm.d.ts +34 -0
- package/lib/watchful/metric-alarm.js +3 -0
- package/lib/watchful/rds.d.ts +47 -0
- package/lib/watchful/rds.js +47 -0
- package/lib/watchful/targetgroup.d.ts +47 -0
- package/lib/watchful/targetgroup.js +54 -0
- package/lib/watchful/upperToLower.d.ts +7 -0
- package/lib/watchful/upperToLower.js +35 -0
- package/lib/watchful/watchful.d.ts +119 -0
- package/lib/watchful/watchful.js +182 -0
- package/node_modules/argparse/CHANGELOG.md +216 -0
- package/node_modules/argparse/LICENSE +254 -0
- package/node_modules/argparse/README.md +84 -0
- package/node_modules/argparse/argparse.js +3707 -0
- package/node_modules/argparse/lib/sub.js +67 -0
- package/node_modules/argparse/lib/textwrap.js +440 -0
- package/node_modules/argparse/package.json +31 -0
- package/node_modules/js-yaml/CHANGELOG.md +616 -0
- package/node_modules/js-yaml/LICENSE +21 -0
- package/node_modules/js-yaml/README.md +246 -0
- package/node_modules/js-yaml/bin/js-yaml.js +126 -0
- package/node_modules/js-yaml/dist/js-yaml.js +3874 -0
- package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
- package/node_modules/js-yaml/dist/js-yaml.mjs +3851 -0
- package/node_modules/js-yaml/index.js +47 -0
- package/node_modules/js-yaml/lib/common.js +59 -0
- package/node_modules/js-yaml/lib/dumper.js +965 -0
- package/node_modules/js-yaml/lib/exception.js +55 -0
- package/node_modules/js-yaml/lib/loader.js +1727 -0
- package/node_modules/js-yaml/lib/schema/core.js +11 -0
- package/node_modules/js-yaml/lib/schema/default.js +22 -0
- package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
- package/node_modules/js-yaml/lib/schema/json.js +19 -0
- package/node_modules/js-yaml/lib/schema.js +121 -0
- package/node_modules/js-yaml/lib/snippet.js +101 -0
- package/node_modules/js-yaml/lib/type/binary.js +125 -0
- package/node_modules/js-yaml/lib/type/bool.js +35 -0
- package/node_modules/js-yaml/lib/type/float.js +97 -0
- package/node_modules/js-yaml/lib/type/int.js +156 -0
- package/node_modules/js-yaml/lib/type/map.js +8 -0
- package/node_modules/js-yaml/lib/type/merge.js +12 -0
- package/node_modules/js-yaml/lib/type/null.js +35 -0
- package/node_modules/js-yaml/lib/type/omap.js +44 -0
- package/node_modules/js-yaml/lib/type/pairs.js +53 -0
- package/node_modules/js-yaml/lib/type/seq.js +8 -0
- package/node_modules/js-yaml/lib/type/set.js +29 -0
- package/node_modules/js-yaml/lib/type/str.js +8 -0
- package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
- package/node_modules/js-yaml/lib/type.js +66 -0
- package/node_modules/js-yaml/package.json +66 -0
- package/package.json +126 -0
- package/release-commit-check.js +6 -0
- package/version.json +3 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.KafkaTopic = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const kafka_event_spec_1 = require("./kafka-event-spec");
|
|
10
|
+
/**
|
|
11
|
+
* Construct to create a kafka topic.
|
|
12
|
+
*/
|
|
13
|
+
class KafkaTopic extends constructs_1.Construct {
|
|
14
|
+
constructor(scope, id, props) {
|
|
15
|
+
var _b, _c, _d, _e, _f;
|
|
16
|
+
super(scope, id);
|
|
17
|
+
const teamEmail = ssm.StringParameter.fromStringParameterName(scope, 'TeamEmail', '/config/team/mail').stringValue;
|
|
18
|
+
const events = props.metadata.events.map(source => {
|
|
19
|
+
new kafka_event_spec_1.KafkaEventSpec(this, `${source.eventName.replace(/\./g, '_')}-EventSpec`, { source });
|
|
20
|
+
return source.eventName;
|
|
21
|
+
});
|
|
22
|
+
new aws_cdk_lib_1.CfnResource(this, 'KafkaTopic', {
|
|
23
|
+
type: 'Custom::KafkaTopic',
|
|
24
|
+
properties: {
|
|
25
|
+
ServiceToken: 'arn:aws:sns:eu-west-1:186993757734:dp-topic-manager-sns-topic',
|
|
26
|
+
Version: '3',
|
|
27
|
+
TopicName: props.name,
|
|
28
|
+
Description: props.metadata.description,
|
|
29
|
+
Events: events,
|
|
30
|
+
NumberOfPartitions: props.numberOfPartitions,
|
|
31
|
+
ReplicationFactor: (_b = props.replicationFactor) !== null && _b !== void 0 ? _b : 3,
|
|
32
|
+
RetentionMs: ((_c = props.retention) !== null && _c !== void 0 ? _c : aws_cdk_lib_1.Duration.days(7)).toMilliseconds(),
|
|
33
|
+
DeleteRetentionMs: props.isLogCompacted ? (_e = (_d = props.logCompactionProperties) === null || _d === void 0 ? void 0 : _d.deleteRetention) !== null && _e !== void 0 ? _e : aws_cdk_lib_1.Duration.days(7).toMilliseconds() : undefined,
|
|
34
|
+
InstantDeletionEnabled: (_f = props.instantDeletionEnabled) !== null && _f !== void 0 ? _f : false,
|
|
35
|
+
CleanupPolicy: props.isLogCompacted ? 'compact' : 'delete',
|
|
36
|
+
TeamEmail: teamEmail,
|
|
37
|
+
ACL: {
|
|
38
|
+
Read: props.acl.read,
|
|
39
|
+
Write: props.acl.write,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
this.node.addValidation({
|
|
44
|
+
validate: () => {
|
|
45
|
+
const result = [];
|
|
46
|
+
if (!props.name.match(/^[A-Za-z0-9.-]+$/)) {
|
|
47
|
+
result.push('Invalid [name]: expecting topic name to match the reg exp `[A-Za-z0-9.-]+`.');
|
|
48
|
+
}
|
|
49
|
+
if (!Number.isInteger(props.numberOfPartitions) || props.numberOfPartitions < 1) {
|
|
50
|
+
result.push(`Invalid [numberOfPartitions]: expecting number of partitions to be a positive integer but got ${props.numberOfPartitions}.`);
|
|
51
|
+
}
|
|
52
|
+
if (props.replicationFactor !== undefined &&
|
|
53
|
+
(!Number.isInteger(props.replicationFactor) || props.replicationFactor < 1 || props.replicationFactor > 3)) {
|
|
54
|
+
result.push('Invalid [replicationFactor]: expecting an integer between 1 and 3.');
|
|
55
|
+
}
|
|
56
|
+
if (props.metadata.events.length === 0) {
|
|
57
|
+
result.push('Invalid [metadata]: expecting [events] to have at least on element.');
|
|
58
|
+
}
|
|
59
|
+
if (!props.isLogCompacted && props.logCompactionProperties) {
|
|
60
|
+
result.push('Invalid [logCompactionProperties]: log compaction is disabled so properties must be undefined.');
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.KafkaTopic = KafkaTopic;
|
|
68
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
69
|
+
KafkaTopic[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.KafkaTopic", version: "0.0.0" };
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2Fma2EtdG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2Fma2Eva2Fma2EtdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBb0Q7QUFDcEQsMkNBQTJDO0FBQzNDLDJDQUF1QztBQUV2Qyx5REFBMEU7QUE2RzFFOztHQUVHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjs7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUMzRCxLQUFLLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixDQUNwQixDQUFDLFdBQVcsQ0FBQztRQUVkLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRCxJQUFJLGlDQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRSwrREFBK0Q7Z0JBQzdFLE9BQU8sRUFBRSxHQUFHO2dCQUNaLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDckIsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVztnQkFDdkMsTUFBTSxFQUFFLE1BQU07Z0JBQ2Qsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtnQkFDNUMsaUJBQWlCLFFBQUUsS0FBSyxDQUFDLGlCQUFpQixtQ0FBSSxDQUFDO2dCQUMvQyxXQUFXLEVBQUUsT0FBQyxLQUFLLENBQUMsU0FBUyxtQ0FBSSxzQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRTtnQkFDbkUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQUMsS0FBSyxDQUFDLHVCQUF1QiwwQ0FBRSxlQUFlLG1DQUFJLHNCQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUN6SSxzQkFBc0IsUUFBRSxLQUFLLENBQUMsc0JBQXNCLG1DQUFJLEtBQUs7Z0JBQzdELGFBQWEsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQzFELFNBQVMsRUFBRSxTQUFTO2dCQUNwQixHQUFHLEVBQUU7b0JBQ0gsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSTtvQkFDcEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztpQkFDdkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxHQUFhLEVBQUU7Z0JBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFFbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkVBQTZFLENBQUMsQ0FBQztpQkFDNUY7Z0JBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRTtvQkFDL0UsTUFBTSxDQUFDLElBQUksQ0FBQyxpR0FBaUcsS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztpQkFDM0k7Z0JBRUQsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssU0FBUztvQkFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzlHLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztpQkFDbkY7Z0JBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7aUJBQ3BGO2dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtvQkFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO2lCQUMvRztnQkFFRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFsRUgsZ0NBbUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIENmblJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IEthZmthRXZlbnRTcGVjLCBLYWZrYUV2ZW50U3BlY1NvdXJjZSB9IGZyb20gJy4va2Fma2EtZXZlbnQtc3BlYyc7XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIG1ldGEgZGF0YSBvZiBhIHRvcGljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNNZXRhRGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgc3BlY3Mgb2YgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqL1xuICByZWFkb25seSBldmVudHM6IEthZmthRXZlbnRTcGVjU291cmNlW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW50ZW50IG9mIHRoZSB0b3BpYy4gVGhpcyBtaWdodCBiZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICogb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZHVjZXIgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgdG9waWMuXG4gKlxuICogc3RyaW5ncyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBDTkFNRSBvZiB0aGUgY2VydGlmaWNhdGUgb2YgdGhlIEthZmthIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FBY2xTdGF0ZW1lbnQge1xuICAvKipcbiAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IHdyaXRlIHBlcm1pc3Npb25zXG4gICovXG4gIHJlYWRvbmx5IHdyaXRlOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBjbGllbnRzIHRoYXQgc2hvdWxkIGdldCByZWFkIHBlcm1pc3Npb25zXG4gICAqL1xuICByZWFkb25seSByZWFkOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciBhbGwgbG9nIGNvbXBhY3Rpb24gcmVsYXRlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSB0byByZXRhaW4gZGVsZXRlIHRvbWJzdG9uZSBtYXJrZXJzIGZvciBsb2cgY29tcGFjdGVkIHRvcGljcztcbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMTAgZGF5cyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCAxIGRheVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUmV0ZW50aW9uPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgc2VydmljZSBsaW1pdHMgY2FuIGJlIGZvdW5kIGluIHRoZSB0b3BpYyBsaW1pdHMgY29uZmlndXJhdGlvbiBvZiB0aGUgdG9waWMgbWFuYWdlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY29sbGFib3JhdGlvbi5tc2kuYXVkaS5jb20vc3Rhc2gvcHJvamVjdHMvUlNFVlRCVS9yZXBvcy90b3BpYy1tYW5hZ2VyL2Jyb3dzZS9jb25maWcvdG9waWMtc2VydmljZS1saW1pdHMueWFtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNQcm9wc3tcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgdG9waWM7IGhhcyB0byBtYXRjaCBwYXR0ZXJuIFtBLVphLXowLTkuLV0rXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVncmVlIG9mIHBhcmFsbGVsaXNtIG9mIHRoZSB0b3BpYzsgc2hvdWxkIGJlIGluY3JlYXNlZCBmb3JcbiAgICogbGFyZ2UgZXhwZWN0ZWQgbG9hZHMgKGUuZy4sIDI1IGZvciByaW8uYXNzZXQtaW90LWV2ZW50cykuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIHBhcnRpdGlvbnMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IG51bWJlck9mUGFydGl0aW9uczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiByZXBsaWNhdGlvbiBvZiBtZXNzYWdlczsgaGFzIHRvIGJlIGJldHdlZW4gMSBhbmQgdGhlIG51bWJlciBvZiBicm9rZXJzIChjdXJyZW50bHkgMykuXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uRmFjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lIGhvdyBsb25nIG1lc3NhZ2VzIGFyZSByZXRhaW5lZCBvbiBLYWZrYSBjbHVzdGVyO1xuICAgKlxuICAgKiBXZSByZWNvbW1lbmQgMzAgZGF5cyBmb3IgZ2VuZXJhbCBldmVudHMgYW5kIDcgZGF5cyBmb3Igc2Vuc29yIGV2ZW50cyBhbmQgb3RoZXIgaGlnaC1sb2FkIGNhc2VzLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAzIHRvIDMwIGRheXMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHQgNyBkYXlzXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogSWYgc2V0IHRvICdmYWxzZSwgdGhlIHRvcGljJ3MgZGF0YSB3aWxsIGJlIGRlbGV0ZWQgb24gS2Fma2EgMTAgZGF5cyBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogSWYgc2V0IHRvICd0cnVlJywgaXQgd2lsbCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IGFmdGVyIHN0YWNrIGRlbGV0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFudERlbGV0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBvZiB0aGUgdG9waWMuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogS2Fma2FUb3BpY01ldGFEYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRvIHRoZSB0b3BpYydzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBhY2w6IEthZmthQWNsU3RhdGVtZW50O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIHRvcGljIGlzIGxvZyBjb21wYWN0ZWQgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2dDb21wYWN0ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE11c3Qgb25seSBiZSBwcm92aWRlZCBpZiAnaXNMb2dDb21wYWN0ZWQnIGlzICd0cnVlJy5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBsb2dDb21wYWN0aW9uUHJvcGVydGllcz86IExvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCB0byBjcmVhdGUgYSBrYWZrYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIEthZmthVG9waWMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBLYWZrYVRvcGljUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgdGVhbUVtYWlsID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgJ1RlYW1FbWFpbCcsXG4gICAgICAnL2NvbmZpZy90ZWFtL21haWwnLFxuICAgICkuc3RyaW5nVmFsdWU7XG5cbiAgICBjb25zdCBldmVudHMgPSBwcm9wcy5tZXRhZGF0YS5ldmVudHMubWFwKHNvdXJjZSA9PiB7XG4gICAgICBuZXcgS2Fma2FFdmVudFNwZWModGhpcywgYCR7c291cmNlLmV2ZW50TmFtZS5yZXBsYWNlKC9cXC4vZywgJ18nKX0tRXZlbnRTcGVjYCwgeyBzb3VyY2UgfSk7XG4gICAgICByZXR1cm4gc291cmNlLmV2ZW50TmFtZTtcbiAgICB9KTtcblxuICAgIG5ldyBDZm5SZXNvdXJjZSh0aGlzLCAnS2Fma2FUb3BpYycsIHtcbiAgICAgIHR5cGU6ICdDdXN0b206OkthZmthVG9waWMnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBTZXJ2aWNlVG9rZW46ICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTg2OTkzNzU3NzM0OmRwLXRvcGljLW1hbmFnZXItc25zLXRvcGljJyxcbiAgICAgICAgVmVyc2lvbjogJzMnLFxuICAgICAgICBUb3BpY05hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgIERlc2NyaXB0aW9uOiBwcm9wcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgRXZlbnRzOiBldmVudHMsXG4gICAgICAgIE51bWJlck9mUGFydGl0aW9uczogcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zLFxuICAgICAgICBSZXBsaWNhdGlvbkZhY3RvcjogcHJvcHMucmVwbGljYXRpb25GYWN0b3IgPz8gMyxcbiAgICAgICAgUmV0ZW50aW9uTXM6IChwcm9wcy5yZXRlbnRpb24gPz8gRHVyYXRpb24uZGF5cyg3KSkudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgRGVsZXRlUmV0ZW50aW9uTXM6IHByb3BzLmlzTG9nQ29tcGFjdGVkID8gcHJvcHMubG9nQ29tcGFjdGlvblByb3BlcnRpZXM/LmRlbGV0ZVJldGVudGlvbiA/PyBEdXJhdGlvbi5kYXlzKDcpLnRvTWlsbGlzZWNvbmRzKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIEluc3RhbnREZWxldGlvbkVuYWJsZWQ6IHByb3BzLmluc3RhbnREZWxldGlvbkVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICAgIENsZWFudXBQb2xpY3k6IHByb3BzLmlzTG9nQ29tcGFjdGVkID8gJ2NvbXBhY3QnIDogJ2RlbGV0ZScsXG4gICAgICAgIFRlYW1FbWFpbDogdGVhbUVtYWlsLFxuICAgICAgICBBQ0w6IHtcbiAgICAgICAgICBSZWFkOiBwcm9wcy5hY2wucmVhZCxcbiAgICAgICAgICBXcml0ZTogcHJvcHMuYWNsLndyaXRlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHtcbiAgICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoIXByb3BzLm5hbWUubWF0Y2goL15bQS1aYS16MC05Li1dKyQvKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtuYW1lXTogZXhwZWN0aW5nIHRvcGljIG5hbWUgdG8gbWF0Y2ggdGhlIHJlZyBleHAgYFtBLVphLXowLTkuLV0rYC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwcm9wcy5udW1iZXJPZlBhcnRpdGlvbnMpIHx8IHByb3BzLm51bWJlck9mUGFydGl0aW9ucyA8IDEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChgSW52YWxpZCBbbnVtYmVyT2ZQYXJ0aXRpb25zXTogZXhwZWN0aW5nIG51bWJlciBvZiBwYXJ0aXRpb25zIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlciBidXQgZ290ICR7cHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMucmVwbGljYXRpb25GYWN0b3IpIHx8IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yIDwgMSB8fCBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA+IDMpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW3JlcGxpY2F0aW9uRmFjdG9yXTogZXhwZWN0aW5nIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLm1ldGFkYXRhLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbWV0YWRhdGFdOiBleHBlY3RpbmcgW2V2ZW50c10gdG8gaGF2ZSBhdCBsZWFzdCBvbiBlbGVtZW50LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwcm9wcy5pc0xvZ0NvbXBhY3RlZCAmJiBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtsb2dDb21wYWN0aW9uUHJvcGVydGllc106IGxvZyBjb21wYWN0aW9uIGlzIGRpc2FibGVkIHNvIHByb3BlcnRpZXMgbXVzdCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as pipelines from 'aws-cdk-lib/pipelines';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
export interface RioSecretsDeployStepProps {
|
|
4
|
+
/**
|
|
5
|
+
* Points to CodePipeline source step
|
|
6
|
+
*/
|
|
7
|
+
readonly input: pipelines.CodePipelineSource;
|
|
8
|
+
/**
|
|
9
|
+
* Path to secrets file containing encrypted secrets
|
|
10
|
+
* @default Looks for file under 2 paths with the following priority:
|
|
11
|
+
* 1. ./infrastructure/src/secrets/secrets.yaml followed by path
|
|
12
|
+
* 2. ./src/secrets/secrets.yaml
|
|
13
|
+
*/
|
|
14
|
+
readonly secretsFilePath?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class RioSecretsDeployStep extends pipelines.CodeBuildStep {
|
|
17
|
+
/**
|
|
18
|
+
* Creates and attaches a codebuild project to the pipeline which looks for secrets.yaml under first ./infrastructure/src/secrets and then ./src/secrets.
|
|
19
|
+
* The secrets are then uploaded to SSM and Secrets Manager according to the data in secrets.yaml
|
|
20
|
+
* The Format of secrets file should be like the following example in yaml:
|
|
21
|
+
*
|
|
22
|
+
* ---
|
|
23
|
+
* SSM:
|
|
24
|
+
*
|
|
25
|
+
* /config/application/secret: password
|
|
26
|
+
*
|
|
27
|
+
* /config/application2/secret: password
|
|
28
|
+
*
|
|
29
|
+
* SecretsManager:
|
|
30
|
+
*
|
|
31
|
+
* plain_text_secret: value
|
|
32
|
+
*
|
|
33
|
+
* json_secret:
|
|
34
|
+
*
|
|
35
|
+
* key1: value1
|
|
36
|
+
*
|
|
37
|
+
* key2: value2
|
|
38
|
+
*/
|
|
39
|
+
constructor(scope: Construct, id: string, props: RioSecretsDeployStepProps);
|
|
40
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RioSecretsDeployStep = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const cdk = require("aws-cdk-lib");
|
|
7
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
const pipelines = require("aws-cdk-lib/pipelines");
|
|
9
|
+
class RioSecretsDeployStep extends pipelines.CodeBuildStep {
|
|
10
|
+
/**
|
|
11
|
+
* Creates and attaches a codebuild project to the pipeline which looks for secrets.yaml under first ./infrastructure/src/secrets and then ./src/secrets.
|
|
12
|
+
* The secrets are then uploaded to SSM and Secrets Manager according to the data in secrets.yaml
|
|
13
|
+
* The Format of secrets file should be like the following example in yaml:
|
|
14
|
+
*
|
|
15
|
+
* ---
|
|
16
|
+
* SSM:
|
|
17
|
+
*
|
|
18
|
+
* /config/application/secret: password
|
|
19
|
+
*
|
|
20
|
+
* /config/application2/secret: password
|
|
21
|
+
*
|
|
22
|
+
* SecretsManager:
|
|
23
|
+
*
|
|
24
|
+
* plain_text_secret: value
|
|
25
|
+
*
|
|
26
|
+
* json_secret:
|
|
27
|
+
*
|
|
28
|
+
* key1: value1
|
|
29
|
+
*
|
|
30
|
+
* key2: value2
|
|
31
|
+
*/
|
|
32
|
+
constructor(scope, id, props) {
|
|
33
|
+
super(id, {
|
|
34
|
+
input: props.input,
|
|
35
|
+
...getCommonCodeBuildProperties(cdk.Stack.of(scope).account, cdk.Stack.of(scope).region, props.secretsFilePath),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.RioSecretsDeployStep = RioSecretsDeployStep;
|
|
40
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
41
|
+
RioSecretsDeployStep[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RioSecretsDeployStep", version: "0.0.0" };
|
|
42
|
+
function getCommonCodeBuildProperties(account, region, userDefinedSecretsFilePath) {
|
|
43
|
+
return {
|
|
44
|
+
commands: getCodeBuildCommands(region, userDefinedSecretsFilePath),
|
|
45
|
+
rolePolicyStatements: getCodeBuildRolePolicyStatements(account),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const SECRETS_FILE_PATH_ENVIRONMENT_VARIABLE = 'SECRETS_FILE_PATH';
|
|
49
|
+
function getCodeBuildCommands(region, userDefinedSecretsFilePath) {
|
|
50
|
+
return [
|
|
51
|
+
'apt-get --quiet update',
|
|
52
|
+
'wget --quiet https://github.com/mozilla/sops/releases/download/v3.7.1/sops_3.7.1_amd64.deb',
|
|
53
|
+
'apt-get --quiet install ./sops_3.7.1_amd64.deb',
|
|
54
|
+
...determineSecretsFilePathCommandsForCodeBuild(userDefinedSecretsFilePath),
|
|
55
|
+
'echo "Using the following secrets file: \${SECRETS_FILE_PATH}',
|
|
56
|
+
`PAYLOAD=$(sops --output-type json --decrypt \${${SECRETS_FILE_PATH_ENVIRONMENT_VARIABLE})`,
|
|
57
|
+
`LAMBDA_ERROR=$(aws lambda invoke --function-name "SecretsRestoreHandler" --payload \"\${PAYLOAD}\" --cli-binary-format raw-in-base64-out --region ${region} output | jq 'has("FunctionError")')`,
|
|
58
|
+
// eslint-disable-next-line quotes
|
|
59
|
+
`if [ "\${LAMBDA_ERROR}" = 'true' ]; then echo 'The \'SecretsRestoreHandler\' lambda failed with an error. Check the Cloudwatch logs \'/aws/lambda/SecretsRestoreHandler\' for more information'; exit 1; fi`,
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
function getCodeBuildRolePolicyStatements(account) {
|
|
63
|
+
const backupAccountId = '903404386550';
|
|
64
|
+
const iamPolicyKMS = new iam.PolicyStatement({
|
|
65
|
+
actions: ['kms:Decrypt'],
|
|
66
|
+
resources: [
|
|
67
|
+
`arn:aws:kms:*:${backupAccountId}:key/*`,
|
|
68
|
+
`arn:aws:kms:*:${account}:key/*`,
|
|
69
|
+
],
|
|
70
|
+
conditions: {
|
|
71
|
+
'ForAnyValue:StringLike': {
|
|
72
|
+
'kms:ResourceAliases': 'alias/rio-lz-backup-key*',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const iamPolicyLambdaExecution = new iam.PolicyStatement({
|
|
77
|
+
actions: ['lambda:InvokeFunction'],
|
|
78
|
+
resources: [
|
|
79
|
+
`arn:aws:lambda:eu-west-1:${account}:function:SecretsRestoreHandler`,
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
return [
|
|
83
|
+
iamPolicyKMS,
|
|
84
|
+
iamPolicyLambdaExecution,
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
function determineSecretsFilePathCommandsForCodeBuild(userDefinedSecretsFilePath) {
|
|
88
|
+
const defaultSecretsFileName = 'secrets.yaml';
|
|
89
|
+
const defaultSecretsFilePaths1 = `./infrastructure/src/secrets/${defaultSecretsFileName}`;
|
|
90
|
+
const defaultSecretsFilePaths2 = `./src/secrets/${defaultSecretsFileName}`;
|
|
91
|
+
if (userDefinedSecretsFilePath) {
|
|
92
|
+
return [
|
|
93
|
+
`echo "Secrets file explicitly set to: ${userDefinedSecretsFilePath}"`,
|
|
94
|
+
`export ${SECRETS_FILE_PATH_ENVIRONMENT_VARIABLE}='${userDefinedSecretsFilePath}'`,
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return [
|
|
99
|
+
`echo 'No explicit secrets file set, looking at the default locations: ${[defaultSecretsFilePaths1, defaultSecretsFilePaths2]}'`,
|
|
100
|
+
`if [ -f '${defaultSecretsFilePaths1}' ]; then export ${SECRETS_FILE_PATH_ENVIRONMENT_VARIABLE}='${defaultSecretsFilePaths1}'; else export ${SECRETS_FILE_PATH_ENVIRONMENT_VARIABLE}='${defaultSecretsFilePaths2}'; fi`,
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWJhY2t1cC1zZWNyZXRzLXJlc3RvcmUtc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUvcmlvLWJhY2t1cC1zZWNyZXRzLXJlc3RvcmUtc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLG1EQUFtRDtBQWlCbkQsTUFBYSxvQkFBcUIsU0FBUSxTQUFTLENBQUMsYUFBYTtJQUMvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDO1NBQ2hILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUJILG9EQTZCQzs7O0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxPQUFlLEVBQUUsTUFBYyxFQUFFLDBCQUE4QztJQUNuSCxPQUFPO1FBQ0wsUUFBUSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQztRQUNsRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUM7S0FDaEUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHNDQUFzQyxHQUFHLG1CQUFtQixDQUFDO0FBRW5FLFNBQVMsb0JBQW9CLENBQUMsTUFBYyxFQUFFLDBCQUE4QztJQUMxRixPQUFPO1FBQ0wsd0JBQXdCO1FBQ3hCLDRGQUE0RjtRQUM1RixnREFBZ0Q7UUFDaEQsR0FBRyw0Q0FBNEMsQ0FBQywwQkFBMEIsQ0FBQztRQUMzRSwrREFBK0Q7UUFDL0Qsa0RBQWtELHNDQUFzQyxHQUFHO1FBQzNGLHFKQUFxSixNQUFNLHNDQUFzQztRQUNqTSxrQ0FBa0M7UUFDbEMsNk1BQTZNO0tBQzlNLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQ0FBZ0MsQ0FBQyxPQUFlO0lBQ3ZELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3hCLFNBQVMsRUFBRTtZQUNULGlCQUFpQixlQUFlLFFBQVE7WUFDeEMsaUJBQWlCLE9BQU8sUUFBUTtTQUNqQztRQUNELFVBQVUsRUFBRTtZQUNWLHdCQUF3QixFQUFFO2dCQUN4QixxQkFBcUIsRUFBRSwwQkFBMEI7YUFDbEQ7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2xDLFNBQVMsRUFBRTtZQUNULDRCQUE0QixPQUFPLGlDQUFpQztTQUNyRTtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxZQUFZO1FBQ1osd0JBQXdCO0tBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyw0Q0FBNEMsQ0FBQywwQkFBOEM7SUFDbEcsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQUM7SUFDOUMsTUFBTSx3QkFBd0IsR0FBRyxnQ0FBZ0Msc0JBQXNCLEVBQUUsQ0FBQztJQUMxRixNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixzQkFBc0IsRUFBRSxDQUFDO0lBQzNFLElBQUksMEJBQTBCLEVBQUU7UUFDOUIsT0FBTztZQUNMLHlDQUF5QywwQkFBMEIsR0FBRztZQUN0RSxVQUFVLHNDQUFzQyxLQUFLLDBCQUEwQixHQUFHO1NBQ25GLENBQUM7S0FDSDtTQUFNO1FBQ0wsT0FBTztZQUNMLHlFQUF5RSxDQUFDLHdCQUF3QixFQUFFLHdCQUF3QixDQUFDLEdBQUc7WUFDaEksWUFBWSx3QkFBd0Isb0JBQW9CLHNDQUFzQyxLQUFLLHdCQUF3QixrQkFBa0Isc0NBQXNDLEtBQUssd0JBQXdCLE9BQU87U0FDeE4sQ0FBQztLQUNIO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBQb2ludHMgdG8gQ29kZVBpcGVsaW5lIHNvdXJjZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBpbnB1dDogcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZTtcbiAgLyoqXG4gICAqIFBhdGggdG8gc2VjcmV0cyBmaWxlIGNvbnRhaW5pbmcgZW5jcnlwdGVkIHNlY3JldHNcbiAgICogQGRlZmF1bHQgTG9va3MgZm9yIGZpbGUgdW5kZXIgMiBwYXRocyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHk6XG4gICAqIDEuIC4vaW5mcmFzdHJ1Y3R1cmUvc3JjL3NlY3JldHMvc2VjcmV0cy55YW1sIGZvbGxvd2VkIGJ5IHBhdGhcbiAgICogMi4gLi9zcmMvc2VjcmV0cy9zZWNyZXRzLnlhbWxcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNGaWxlUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJpb1NlY3JldHNEZXBsb3lTdGVwIGV4dGVuZHMgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYXR0YWNoZXMgYSBjb2RlYnVpbGQgcHJvamVjdCB0byB0aGUgcGlwZWxpbmUgd2hpY2ggbG9va3MgZm9yIHNlY3JldHMueWFtbCB1bmRlciBmaXJzdCAuL2luZnJhc3RydWN0dXJlL3NyYy9zZWNyZXRzIGFuZCB0aGVuIC4vc3JjL3NlY3JldHMuXG4gICAqIFRoZSBzZWNyZXRzIGFyZSB0aGVuIHVwbG9hZGVkIHRvIFNTTSBhbmQgU2VjcmV0cyBNYW5hZ2VyIGFjY29yZGluZyB0byB0aGUgZGF0YSBpbiBzZWNyZXRzLnlhbWxcbiAgICogVGhlIEZvcm1hdCBvZiBzZWNyZXRzIGZpbGUgc2hvdWxkIGJlIGxpa2UgdGhlIGZvbGxvd2luZyBleGFtcGxlIGluIHlhbWw6XG4gICAqXG4gICAqIC0tLVxuICAgKiBTU006XG4gICAqXG4gICAqICAgICAgICAgL2NvbmZpZy9hcHBsaWNhdGlvbi9zZWNyZXQ6IHBhc3N3b3JkXG4gICAqXG4gICAqICAgICAgICAgL2NvbmZpZy9hcHBsaWNhdGlvbjIvc2VjcmV0OiBwYXNzd29yZFxuICAgKlxuICAgKiBTZWNyZXRzTWFuYWdlcjpcbiAgICpcbiAgICogICAgICAgICBwbGFpbl90ZXh0X3NlY3JldDogdmFsdWVcbiAgICpcbiAgICogICAgICAgICBqc29uX3NlY3JldDpcbiAgICpcbiAgICogICAgICAgICAgICAga2V5MTogdmFsdWUxXG4gICAqXG4gICAqICAgICAgICAgICAgIGtleTI6IHZhbHVlMlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMgKSB7XG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGlucHV0OiBwcm9wcy5pbnB1dCxcbiAgICAgIC4uLmdldENvbW1vbkNvZGVCdWlsZFByb3BlcnRpZXMoY2RrLlN0YWNrLm9mKHNjb3BlKS5hY2NvdW50LCBjZGsuU3RhY2sub2Yoc2NvcGUpLnJlZ2lvbiwgcHJvcHMuc2VjcmV0c0ZpbGVQYXRoKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb21tb25Db2RlQnVpbGRQcm9wZXJ0aWVzKGFjY291bnQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmcsIHVzZXJEZWZpbmVkU2VjcmV0c0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQaWNrPHBpcGVsaW5lcy5Db2RlQnVpbGRTdGVwUHJvcHMsICdjb21tYW5kcycgfCAncm9sZVBvbGljeVN0YXRlbWVudHMnPiB7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZHM6IGdldENvZGVCdWlsZENvbW1hbmRzKHJlZ2lvbiwgdXNlckRlZmluZWRTZWNyZXRzRmlsZVBhdGgpLFxuICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBnZXRDb2RlQnVpbGRSb2xlUG9saWN5U3RhdGVtZW50cyhhY2NvdW50KSxcbiAgfTtcbn1cblxuY29uc3QgU0VDUkVUU19GSUxFX1BBVEhfRU5WSVJPTk1FTlRfVkFSSUFCTEUgPSAnU0VDUkVUU19GSUxFX1BBVEgnO1xuXG5mdW5jdGlvbiBnZXRDb2RlQnVpbGRDb21tYW5kcyhyZWdpb246IHN0cmluZywgdXNlckRlZmluZWRTZWNyZXRzRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAnYXB0LWdldCAtLXF1aWV0IHVwZGF0ZScsXG4gICAgJ3dnZXQgLS1xdWlldCBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YzLjcuMS9zb3BzXzMuNy4xX2FtZDY0LmRlYicsXG4gICAgJ2FwdC1nZXQgLS1xdWlldCBpbnN0YWxsIC4vc29wc18zLjcuMV9hbWQ2NC5kZWInLFxuICAgIC4uLmRldGVybWluZVNlY3JldHNGaWxlUGF0aENvbW1hbmRzRm9yQ29kZUJ1aWxkKHVzZXJEZWZpbmVkU2VjcmV0c0ZpbGVQYXRoKSxcbiAgICAnZWNobyBcIlVzaW5nIHRoZSBmb2xsb3dpbmcgc2VjcmV0cyBmaWxlOiBcXCR7U0VDUkVUU19GSUxFX1BBVEh9JyxcbiAgICBgUEFZTE9BRD0kKHNvcHMgLS1vdXRwdXQtdHlwZSBqc29uIC0tZGVjcnlwdCBcXCR7JHtTRUNSRVRTX0ZJTEVfUEFUSF9FTlZJUk9OTUVOVF9WQVJJQUJMRX0pYCxcbiAgICBgTEFNQkRBX0VSUk9SPSQoYXdzIGxhbWJkYSBpbnZva2UgLS1mdW5jdGlvbi1uYW1lIFwiU2VjcmV0c1Jlc3RvcmVIYW5kbGVyXCIgLS1wYXlsb2FkIFxcXCJcXCR7UEFZTE9BRH1cXFwiIC0tY2xpLWJpbmFyeS1mb3JtYXQgcmF3LWluLWJhc2U2NC1vdXQgLS1yZWdpb24gJHtyZWdpb259IG91dHB1dCB8IGpxICdoYXMoXCJGdW5jdGlvbkVycm9yXCIpJylgLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBxdW90ZXNcbiAgICBgaWYgWyBcIlxcJHtMQU1CREFfRVJST1J9XCIgPSAndHJ1ZScgXTsgdGhlbiBlY2hvICdUaGUgXFwnU2VjcmV0c1Jlc3RvcmVIYW5kbGVyXFwnIGxhbWJkYSBmYWlsZWQgd2l0aCBhbiBlcnJvci4gQ2hlY2sgdGhlIENsb3Vkd2F0Y2ggbG9ncyBcXCcvYXdzL2xhbWJkYS9TZWNyZXRzUmVzdG9yZUhhbmRsZXJcXCcgZm9yIG1vcmUgaW5mb3JtYXRpb24nOyBleGl0IDE7IGZpYCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29kZUJ1aWxkUm9sZVBvbGljeVN0YXRlbWVudHMoYWNjb3VudDogc3RyaW5nKTogaWFtLlBvbGljeVN0YXRlbWVudFtdIHtcbiAgY29uc3QgYmFja3VwQWNjb3VudElkID0gJzkwMzQwNDM4NjU1MCc7XG4gIGNvbnN0IGlhbVBvbGljeUtNUyA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgcmVzb3VyY2VzOiBbXG4gICAgICBgYXJuOmF3czprbXM6Kjoke2JhY2t1cEFjY291bnRJZH06a2V5LypgLFxuICAgICAgYGFybjphd3M6a21zOio6JHthY2NvdW50fTprZXkvKmAsXG4gICAgXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICAnRm9yQW55VmFsdWU6U3RyaW5nTGlrZSc6IHtcbiAgICAgICAgJ2ttczpSZXNvdXJjZUFsaWFzZXMnOiAnYWxpYXMvcmlvLWx6LWJhY2t1cC1rZXkqJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbiA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VGdW5jdGlvbiddLFxuICAgIHJlc291cmNlczogW1xuICAgICAgYGFybjphd3M6bGFtYmRhOmV1LXdlc3QtMToke2FjY291bnR9OmZ1bmN0aW9uOlNlY3JldHNSZXN0b3JlSGFuZGxlcmAsXG4gICAgXSxcbiAgfSk7XG4gIHJldHVybiBbXG4gICAgaWFtUG9saWN5S01TLFxuICAgIGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbixcbiAgXTtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lU2VjcmV0c0ZpbGVQYXRoQ29tbWFuZHNGb3JDb2RlQnVpbGQodXNlckRlZmluZWRTZWNyZXRzRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZGVmYXVsdFNlY3JldHNGaWxlTmFtZSA9ICdzZWNyZXRzLnlhbWwnO1xuICBjb25zdCBkZWZhdWx0U2VjcmV0c0ZpbGVQYXRoczEgPSBgLi9pbmZyYXN0cnVjdHVyZS9zcmMvc2VjcmV0cy8ke2RlZmF1bHRTZWNyZXRzRmlsZU5hbWV9YDtcbiAgY29uc3QgZGVmYXVsdFNlY3JldHNGaWxlUGF0aHMyID0gYC4vc3JjL3NlY3JldHMvJHtkZWZhdWx0U2VjcmV0c0ZpbGVOYW1lfWA7XG4gIGlmICh1c2VyRGVmaW5lZFNlY3JldHNGaWxlUGF0aCkge1xuICAgIHJldHVybiBbXG4gICAgICBgZWNobyBcIlNlY3JldHMgZmlsZSBleHBsaWNpdGx5IHNldCB0bzogJHt1c2VyRGVmaW5lZFNlY3JldHNGaWxlUGF0aH1cImAsXG4gICAgICBgZXhwb3J0ICR7U0VDUkVUU19GSUxFX1BBVEhfRU5WSVJPTk1FTlRfVkFSSUFCTEV9PScke3VzZXJEZWZpbmVkU2VjcmV0c0ZpbGVQYXRofSdgLFxuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGBlY2hvICdObyBleHBsaWNpdCBzZWNyZXRzIGZpbGUgc2V0LCBsb29raW5nIGF0IHRoZSBkZWZhdWx0IGxvY2F0aW9uczogJHtbZGVmYXVsdFNlY3JldHNGaWxlUGF0aHMxLCBkZWZhdWx0U2VjcmV0c0ZpbGVQYXRoczJdfSdgLFxuICAgICAgYGlmIFsgLWYgJyR7ZGVmYXVsdFNlY3JldHNGaWxlUGF0aHMxfScgXTsgdGhlbiBleHBvcnQgJHtTRUNSRVRTX0ZJTEVfUEFUSF9FTlZJUk9OTUVOVF9WQVJJQUJMRX09JyR7ZGVmYXVsdFNlY3JldHNGaWxlUGF0aHMxfSc7IGVsc2UgZXhwb3J0ICR7U0VDUkVUU19GSUxFX1BBVEhfRU5WSVJPTk1FTlRfVkFSSUFCTEV9PScke2RlZmF1bHRTZWNyZXRzRmlsZVBhdGhzMn0nOyBmaWAsXG4gICAgXTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
|
|
2
|
+
import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
export declare enum TriggerKey {
|
|
5
|
+
/**
|
|
6
|
+
* points to master_repo.zip
|
|
7
|
+
*/
|
|
8
|
+
MASTER_REPO = "master_repo.zip",
|
|
9
|
+
/**
|
|
10
|
+
* points to branch_repo.zip
|
|
11
|
+
*/
|
|
12
|
+
BRANCH_REPO = "branch_repo.zip"
|
|
13
|
+
}
|
|
14
|
+
export interface RioBitBucketSourceActionProps {
|
|
15
|
+
readonly repositoryName: string;
|
|
16
|
+
readonly sourceArtifact: codepipeline.Artifact;
|
|
17
|
+
/**
|
|
18
|
+
* The path to either master_repo.zip or branch_repo.zip
|
|
19
|
+
* @default - Points to master_repo.zip.
|
|
20
|
+
*/
|
|
21
|
+
readonly triggerKey?: TriggerKey;
|
|
22
|
+
}
|
|
23
|
+
export declare class RioBitBucketSourceAction extends codepipeline_actions.S3SourceAction {
|
|
24
|
+
constructor(scope: Construct, props: RioBitBucketSourceActionProps);
|
|
25
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RioBitBucketSourceAction = exports.TriggerKey = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const codepipeline_actions = require("aws-cdk-lib/aws-codepipeline-actions");
|
|
8
|
+
const s3 = require("aws-cdk-lib/aws-s3");
|
|
9
|
+
var TriggerKey;
|
|
10
|
+
(function (TriggerKey) {
|
|
11
|
+
/**
|
|
12
|
+
* points to master_repo.zip
|
|
13
|
+
*/
|
|
14
|
+
TriggerKey["MASTER_REPO"] = "master_repo.zip";
|
|
15
|
+
/**
|
|
16
|
+
* points to branch_repo.zip
|
|
17
|
+
*/
|
|
18
|
+
TriggerKey["BRANCH_REPO"] = "branch_repo.zip";
|
|
19
|
+
})(TriggerKey = exports.TriggerKey || (exports.TriggerKey = {}));
|
|
20
|
+
class RioBitBucketSourceAction extends codepipeline_actions.S3SourceAction {
|
|
21
|
+
constructor(scope, props) {
|
|
22
|
+
var _b;
|
|
23
|
+
const DEFAULT_TRIGGER_KEY = TriggerKey.MASTER_REPO;
|
|
24
|
+
super({
|
|
25
|
+
trigger: codepipeline_actions.S3Trigger.EVENTS,
|
|
26
|
+
actionName: 'S3Trigger',
|
|
27
|
+
bucket: s3.Bucket.fromBucketName(scope, 'TriggerBucket', aws_cdk_lib_1.Fn.importValue('bitbucket-integration-s3-bucket')),
|
|
28
|
+
bucketKey: `${props.repositoryName}/trigger/${(_b = props.triggerKey) !== null && _b !== void 0 ? _b : DEFAULT_TRIGGER_KEY}`,
|
|
29
|
+
output: props.sourceArtifact,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.RioBitBucketSourceAction = RioBitBucketSourceAction;
|
|
34
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
35
|
+
RioBitBucketSourceAction[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RioBitBucketSourceAction", version: "0.0.0" };
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWJpdGJ1Y2tldC1zb3VyY2UtYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BpcGVsaW5lL3Jpby1iaXRidWNrZXQtc291cmNlLWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFpQztBQUVqQyw2RUFBNkU7QUFDN0UseUNBQXlDO0FBR3pDLElBQVksVUFTWDtBQVRELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILDZDQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsNkNBQStCLENBQUE7QUFDakMsQ0FBQyxFQVRXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBU3JCO0FBV0QsTUFBYSx3QkFBeUIsU0FBUSxvQkFBb0IsQ0FBQyxjQUFjO0lBRS9FLFlBQVksS0FBZ0IsRUFBRSxLQUFvQzs7UUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQ25ELEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUM5QyxVQUFVLEVBQUUsV0FBVztZQUN2QixNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQzNHLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxjQUFjLFlBQVksTUFBQSxLQUFLLENBQUMsVUFBVSxtQ0FBSSxtQkFBbUIsRUFBRTtZQUN2RixNQUFNLEVBQUUsS0FBSyxDQUFDLGNBQWM7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFYSCw0REFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGVudW0gVHJpZ2dlcktleSB7XG4gIC8qKlxuICAgKiBwb2ludHMgdG8gbWFzdGVyX3JlcG8uemlwXG4gICAqL1xuICBNQVNURVJfUkVQTyA9ICdtYXN0ZXJfcmVwby56aXAnLFxuICAvKipcbiAgICogcG9pbnRzIHRvIGJyYW5jaF9yZXBvLnppcFxuICAgKi9cbiAgQlJBTkNIX1JFUE8gPSAnYnJhbmNoX3JlcG8uemlwJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSaW9CaXRCdWNrZXRTb3VyY2VBY3Rpb25Qcm9wcyB7XG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZUFydGlmYWN0OiBjb2RlcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byBlaXRoZXIgbWFzdGVyX3JlcG8uemlwIG9yIGJyYW5jaF9yZXBvLnppcFxuICAgKiBAZGVmYXVsdCAtIFBvaW50cyB0byBtYXN0ZXJfcmVwby56aXAuXG4gICAqL1xuICByZWFkb25seSB0cmlnZ2VyS2V5PzogVHJpZ2dlcktleTtcbn1cbmV4cG9ydCBjbGFzcyBSaW9CaXRCdWNrZXRTb3VyY2VBY3Rpb24gZXh0ZW5kcyBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1NvdXJjZUFjdGlvbiB7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IFJpb0JpdEJ1Y2tldFNvdXJjZUFjdGlvblByb3BzKSB7XG4gICAgY29uc3QgREVGQVVMVF9UUklHR0VSX0tFWSA9IFRyaWdnZXJLZXkuTUFTVEVSX1JFUE87XG4gICAgc3VwZXIoe1xuICAgICAgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyxcbiAgICAgIGFjdGlvbk5hbWU6ICdTM1RyaWdnZXInLFxuICAgICAgYnVja2V0OiBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoc2NvcGUsICdUcmlnZ2VyQnVja2V0JywgRm4uaW1wb3J0VmFsdWUoJ2JpdGJ1Y2tldC1pbnRlZ3JhdGlvbi1zMy1idWNrZXQnKSksXG4gICAgICBidWNrZXRLZXk6IGAke3Byb3BzLnJlcG9zaXRvcnlOYW1lfS90cmlnZ2VyLyR7cHJvcHMudHJpZ2dlcktleSA/PyBERUZBVUxUX1RSSUdHRVJfS0VZfWAsXG4gICAgICBvdXRwdXQ6IHByb3BzLnNvdXJjZUFydGlmYWN0LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
export declare enum ClaidometerTemplate {
|
|
3
|
+
FARGATE_WEB_APP = "rio-fargate-web-app",
|
|
4
|
+
SERVERLESS_APP = "rio-serverless-app"
|
|
5
|
+
}
|
|
6
|
+
export declare enum ClaidometerProduct {
|
|
7
|
+
LANDING_ZONE = "LandingZone",
|
|
8
|
+
TEMPLATE = "Template"
|
|
9
|
+
}
|
|
10
|
+
export interface ClaidometerProps {
|
|
11
|
+
readonly product: ClaidometerProduct;
|
|
12
|
+
readonly package: string;
|
|
13
|
+
readonly feature: string;
|
|
14
|
+
readonly version?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Creates a custom resource to track usage of CLAID prodcuts.
|
|
18
|
+
*/
|
|
19
|
+
export declare class Claidometer extends Construct {
|
|
20
|
+
constructor(scope: Construct, id: string, props: ClaidometerProps);
|
|
21
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Claidometer = exports.ClaidometerProduct = exports.ClaidometerTemplate = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
var ClaidometerTemplate;
|
|
9
|
+
(function (ClaidometerTemplate) {
|
|
10
|
+
ClaidometerTemplate["FARGATE_WEB_APP"] = "rio-fargate-web-app";
|
|
11
|
+
ClaidometerTemplate["SERVERLESS_APP"] = "rio-serverless-app";
|
|
12
|
+
})(ClaidometerTemplate = exports.ClaidometerTemplate || (exports.ClaidometerTemplate = {}));
|
|
13
|
+
var ClaidometerProduct;
|
|
14
|
+
(function (ClaidometerProduct) {
|
|
15
|
+
ClaidometerProduct["LANDING_ZONE"] = "LandingZone";
|
|
16
|
+
ClaidometerProduct["TEMPLATE"] = "Template";
|
|
17
|
+
})(ClaidometerProduct = exports.ClaidometerProduct || (exports.ClaidometerProduct = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Creates a custom resource to track usage of CLAID prodcuts.
|
|
20
|
+
*/
|
|
21
|
+
class Claidometer extends constructs_1.Construct {
|
|
22
|
+
constructor(scope, id, props) {
|
|
23
|
+
super(scope, id);
|
|
24
|
+
new aws_cdk_lib_1.CustomResource(this, 'Claidometer', {
|
|
25
|
+
resourceType: 'Custom::Claidometer',
|
|
26
|
+
properties: {
|
|
27
|
+
Product: props.product,
|
|
28
|
+
Package: props.package,
|
|
29
|
+
Feature: props.feature,
|
|
30
|
+
Version: props.version || 'unversioned',
|
|
31
|
+
},
|
|
32
|
+
serviceToken: 'arn:aws:sns:eu-west-1:227101429947:claid-o-meter-snstopic1BD21F8B-17ADRC3CB4OLK',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.Claidometer = Claidometer;
|
|
37
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
38
|
+
Claidometer[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.Claidometer", version: "0.0.0" };
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWNsYWlkb21ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jpby1jbGFpZG9tZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE2QztBQUM3QywyQ0FBdUM7QUFFdkMsSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzdCLDhEQUF1QyxDQUFBO0lBQ3ZDLDREQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFIVyxtQkFBbUIsR0FBbkIsMkJBQW1CLEtBQW5CLDJCQUFtQixRQUc5QjtBQUVELElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1QixrREFBNEIsQ0FBQTtJQUM1QiwyQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFHN0I7QUFRRDs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBRXhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUN0QyxZQUFZLEVBQUUscUJBQXFCO1lBQ25DLFVBQVUsRUFBRTtnQkFDVixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxhQUFhO2FBQ3hDO1lBQ0QsWUFBWSxFQUNWLGlGQUFpRjtTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWhCSCxrQ0FpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgZW51bSBDbGFpZG9tZXRlclRlbXBsYXRlIHtcbiAgRkFSR0FURV9XRUJfQVBQID0gJ3Jpby1mYXJnYXRlLXdlYi1hcHAnLFxuICBTRVJWRVJMRVNTX0FQUCA9ICdyaW8tc2VydmVybGVzcy1hcHAnXG59XG5cbmV4cG9ydCBlbnVtIENsYWlkb21ldGVyUHJvZHVjdCB7XG4gIExBTkRJTkdfWk9ORSA9ICdMYW5kaW5nWm9uZScsXG4gIFRFTVBMQVRFID0gJ1RlbXBsYXRlJyxcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhaWRvbWV0ZXJQcm9wcyB7XG4gIHJlYWRvbmx5IHByb2R1Y3Q6IENsYWlkb21ldGVyUHJvZHVjdDtcbiAgcmVhZG9ubHkgcGFja2FnZTogc3RyaW5nO1xuICByZWFkb25seSBmZWF0dXJlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSByZXNvdXJjZSB0byB0cmFjayB1c2FnZSBvZiBDTEFJRCBwcm9kY3V0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENsYWlkb21ldGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xhaWRvbWV0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpDbGFpZG9tZXRlcicsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFByb2R1Y3Q6IHByb3BzLnByb2R1Y3QsXG4gICAgICAgIFBhY2thZ2U6IHByb3BzLnBhY2thZ2UsXG4gICAgICAgIEZlYXR1cmU6IHByb3BzLmZlYXR1cmUsXG4gICAgICAgIFZlcnNpb246IHByb3BzLnZlcnNpb24gfHwgJ3VudmVyc2lvbmVkJyxcbiAgICAgIH0sXG4gICAgICBzZXJ2aWNlVG9rZW46XG4gICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MjI3MTAxNDI5OTQ3OmNsYWlkLW8tbWV0ZXItc25zdG9waWMxQkQyMUY4Qi0xN0FEUkMzQ0I0T0xLJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
/**
|
|
5
|
+
* A wrapper to access infrastructure provided by RIO LandingZone setup (like VPC, HostedZone)
|
|
6
|
+
*/
|
|
7
|
+
export declare class RioLandingZone {
|
|
8
|
+
/**
|
|
9
|
+
* Returns the default VPC from RIO LandingZone
|
|
10
|
+
*/
|
|
11
|
+
static getDefaultVpc(scope: Construct): ec2.IVpc;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the default Route53 HostedZone from RIO LandingZone
|
|
14
|
+
*/
|
|
15
|
+
static getDefaultHostedZone(scope: Construct): route53.IHostedZone;
|
|
16
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RioLandingZone = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
8
|
+
const route53 = require("aws-cdk-lib/aws-route53");
|
|
9
|
+
/**
|
|
10
|
+
* A wrapper to access infrastructure provided by RIO LandingZone setup (like VPC, HostedZone)
|
|
11
|
+
*/
|
|
12
|
+
class RioLandingZone {
|
|
13
|
+
/**
|
|
14
|
+
* Returns the default VPC from RIO LandingZone
|
|
15
|
+
*/
|
|
16
|
+
static getDefaultVpc(scope) {
|
|
17
|
+
return ec2.Vpc.fromVpcAttributes(scope, 'LandingZoneVpc', {
|
|
18
|
+
vpcId: aws_cdk_lib_1.Fn.importValue('DefaultVPCId'),
|
|
19
|
+
availabilityZones: ['eu-west-1a', 'eu-west-1b', 'eu-west-1c'],
|
|
20
|
+
isolatedSubnetIds: [
|
|
21
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet1BID'),
|
|
22
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet2BID'),
|
|
23
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet3BID'),
|
|
24
|
+
],
|
|
25
|
+
isolatedSubnetRouteTableIds: ['', '', ''],
|
|
26
|
+
privateSubnetIds: [
|
|
27
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet1AID'),
|
|
28
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet2AID'),
|
|
29
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet3AID'),
|
|
30
|
+
],
|
|
31
|
+
privateSubnetRouteTableIds: [
|
|
32
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet1ARouteTable'),
|
|
33
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet2ARouteTable'),
|
|
34
|
+
aws_cdk_lib_1.Fn.importValue('PrivateSubnet3ARouteTable'),
|
|
35
|
+
],
|
|
36
|
+
publicSubnetIds: [
|
|
37
|
+
aws_cdk_lib_1.Fn.importValue('PublicSubnet1ID'),
|
|
38
|
+
aws_cdk_lib_1.Fn.importValue('PublicSubnet2ID'),
|
|
39
|
+
aws_cdk_lib_1.Fn.importValue('PublicSubnet3ID'),
|
|
40
|
+
],
|
|
41
|
+
publicSubnetRouteTableIds: ['', '', ''],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Returns the default Route53 HostedZone from RIO LandingZone
|
|
46
|
+
*/
|
|
47
|
+
static getDefaultHostedZone(scope) {
|
|
48
|
+
return route53.HostedZone.fromHostedZoneAttributes(scope, 'HostedZone', {
|
|
49
|
+
hostedZoneId: aws_cdk_lib_1.Fn.importValue('Landing-Zone-HostedZoneId'),
|
|
50
|
+
zoneName: aws_cdk_lib_1.Fn.importValue('Landing-Zone-HostedZoneName'),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.RioLandingZone = RioLandingZone;
|
|
55
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
56
|
+
RioLandingZone[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RioLandingZone", version: "0.0.0" };
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWxhbmRpbmctem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yaW8tbGFuZGluZy16b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFJbkQ7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFDekI7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWdCO1FBQzFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7WUFDeEQsS0FBSyxFQUFFLGdCQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUNyQyxpQkFBaUIsRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO1lBQzdELGlCQUFpQixFQUFFO2dCQUNqQixnQkFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbkMsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25DLGdCQUFFLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO2FBQ3BDO1lBQ0QsMkJBQTJCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxnQkFBZ0IsRUFBRTtnQkFDaEIsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25DLGdCQUFFLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO2dCQUNuQyxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQzthQUNwQztZQUNELDBCQUEwQixFQUFFO2dCQUMxQixnQkFBRSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztnQkFDM0MsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUM7Z0JBQzNDLGdCQUFFLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO2FBQzVDO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLGdCQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO2dCQUNqQyxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDakMsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7YUFDbEM7WUFDRCx5QkFBeUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFnQjtRQUNqRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUN0RSxZQUFZLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUM7WUFDekQsUUFBUSxFQUFFLGdCQUFFLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekNILHdDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEEgd3JhcHBlciB0byBhY2Nlc3MgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgUklPIExhbmRpbmdab25lIHNldHVwIChsaWtlIFZQQywgSG9zdGVkWm9uZSlcbiAqL1xuZXhwb3J0IGNsYXNzIFJpb0xhbmRpbmdab25lIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlZmF1bHQgVlBDIGZyb20gUklPIExhbmRpbmdab25lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldERlZmF1bHRWcGMoc2NvcGU6IENvbnN0cnVjdCk6IGVjMi5JVnBjIHtcbiAgICByZXR1cm4gZWMyLlZwYy5mcm9tVnBjQXR0cmlidXRlcyhzY29wZSwgJ0xhbmRpbmdab25lVnBjJywge1xuICAgICAgdnBjSWQ6IEZuLmltcG9ydFZhbHVlKCdEZWZhdWx0VlBDSWQnKSxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2V1LXdlc3QtMWEnLCAnZXUtd2VzdC0xYicsICdldS13ZXN0LTFjJ10sXG4gICAgICBpc29sYXRlZFN1Ym5ldElkczogW1xuICAgICAgICBGbi5pbXBvcnRWYWx1ZSgnUHJpdmF0ZVN1Ym5ldDFCSUQnKSxcbiAgICAgICAgRm4uaW1wb3J0VmFsdWUoJ1ByaXZhdGVTdWJuZXQyQklEJyksXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQcml2YXRlU3VibmV0M0JJRCcpLFxuICAgICAgXSxcbiAgICAgIGlzb2xhdGVkU3VibmV0Um91dGVUYWJsZUlkczogWycnLCAnJywgJyddLFxuICAgICAgcHJpdmF0ZVN1Ym5ldElkczogW1xuICAgICAgICBGbi5pbXBvcnRWYWx1ZSgnUHJpdmF0ZVN1Ym5ldDFBSUQnKSxcbiAgICAgICAgRm4uaW1wb3J0VmFsdWUoJ1ByaXZhdGVTdWJuZXQyQUlEJyksXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQcml2YXRlU3VibmV0M0FJRCcpLFxuICAgICAgXSxcbiAgICAgIHByaXZhdGVTdWJuZXRSb3V0ZVRhYmxlSWRzOiBbXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQcml2YXRlU3VibmV0MUFSb3V0ZVRhYmxlJyksXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQcml2YXRlU3VibmV0MkFSb3V0ZVRhYmxlJyksXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQcml2YXRlU3VibmV0M0FSb3V0ZVRhYmxlJyksXG4gICAgICBdLFxuICAgICAgcHVibGljU3VibmV0SWRzOiBbXG4gICAgICAgIEZuLmltcG9ydFZhbHVlKCdQdWJsaWNTdWJuZXQxSUQnKSxcbiAgICAgICAgRm4uaW1wb3J0VmFsdWUoJ1B1YmxpY1N1Ym5ldDJJRCcpLFxuICAgICAgICBGbi5pbXBvcnRWYWx1ZSgnUHVibGljU3VibmV0M0lEJyksXG4gICAgICBdLFxuICAgICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogWycnLCAnJywgJyddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlZmF1bHQgUm91dGU1MyBIb3N0ZWRab25lIGZyb20gUklPIExhbmRpbmdab25lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldERlZmF1bHRIb3N0ZWRab25lKHNjb3BlOiBDb25zdHJ1Y3QpOiByb3V0ZTUzLklIb3N0ZWRab25lIHtcbiAgICByZXR1cm4gcm91dGU1My5Ib3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhzY29wZSwgJ0hvc3RlZFpvbmUnLCB7XG4gICAgICBob3N0ZWRab25lSWQ6IEZuLmltcG9ydFZhbHVlKCdMYW5kaW5nLVpvbmUtSG9zdGVkWm9uZUlkJyksXG4gICAgICB6b25lTmFtZTogRm4uaW1wb3J0VmFsdWUoJ0xhbmRpbmctWm9uZS1Ib3N0ZWRab25lTmFtZScpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
|
|
3
|
+
import * as route53 from 'aws-cdk-lib/aws-route53';
|
|
4
|
+
import { Construct } from 'constructs';
|
|
5
|
+
export interface RioLoadBalancerProps {
|
|
6
|
+
/**
|
|
7
|
+
* The VPC network to place the load balancer in.
|
|
8
|
+
*/
|
|
9
|
+
readonly vpc: ec2.IVpc;
|
|
10
|
+
/**
|
|
11
|
+
* The hosted zone in which to the Route53 record should be created.
|
|
12
|
+
*/
|
|
13
|
+
readonly hostedZone: route53.IHostedZone;
|
|
14
|
+
/**
|
|
15
|
+
* The service name which is used to build the domain name (serviceName.hostedZone)
|
|
16
|
+
*/
|
|
17
|
+
readonly serviceName: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a secure application load balancer with certificate and Route53 ARecord.
|
|
21
|
+
*/
|
|
22
|
+
export declare class RioLoadBalancer extends Construct {
|
|
23
|
+
readonly loadbalancer: elbv2.ApplicationLoadBalancer;
|
|
24
|
+
readonly listener: elbv2.ApplicationListener;
|
|
25
|
+
constructor(scope: Construct, id: string, props: RioLoadBalancerProps);
|
|
26
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RioLoadBalancer = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const acm = require("aws-cdk-lib/aws-certificatemanager");
|
|
7
|
+
const elbv2 = require("aws-cdk-lib/aws-elasticloadbalancingv2");
|
|
8
|
+
const route53 = require("aws-cdk-lib/aws-route53");
|
|
9
|
+
const route53_targets = require("aws-cdk-lib/aws-route53-targets");
|
|
10
|
+
const constructs_1 = require("constructs");
|
|
11
|
+
/**
|
|
12
|
+
* Creates a secure application load balancer with certificate and Route53 ARecord.
|
|
13
|
+
*/
|
|
14
|
+
class RioLoadBalancer extends constructs_1.Construct {
|
|
15
|
+
constructor(scope, id, props) {
|
|
16
|
+
super(scope, id);
|
|
17
|
+
const domainName = `${props.serviceName}.${props.hostedZone.zoneName}`;
|
|
18
|
+
const certificate = new acm.Certificate(this, 'Certificate', {
|
|
19
|
+
domainName,
|
|
20
|
+
validation: acm.CertificateValidation.fromDns(props.hostedZone),
|
|
21
|
+
});
|
|
22
|
+
this.loadbalancer = new elbv2.ApplicationLoadBalancer(this, 'LB', {
|
|
23
|
+
vpc: props.vpc,
|
|
24
|
+
internetFacing: true,
|
|
25
|
+
http2Enabled: true,
|
|
26
|
+
});
|
|
27
|
+
this.listener = this.loadbalancer.addListener('Listener', {
|
|
28
|
+
certificates: [certificate],
|
|
29
|
+
protocol: elbv2.ApplicationProtocol.HTTPS,
|
|
30
|
+
sslPolicy: elbv2.SslPolicy.FORWARD_SECRECY_TLS12_RES_GCM,
|
|
31
|
+
});
|
|
32
|
+
new route53.ARecord(this, 'ARecord', {
|
|
33
|
+
zone: props.hostedZone,
|
|
34
|
+
recordName: domainName,
|
|
35
|
+
target: route53.RecordTarget.fromAlias(new route53_targets.LoadBalancerTarget(this.loadbalancer)),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.RioLoadBalancer = RioLoadBalancer;
|
|
40
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
41
|
+
RioLoadBalancer[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RioLoadBalancer", version: "0.0.0" };
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWxvYWQtYmFsYW5jZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmlvLWxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBMEQ7QUFFMUQsZ0VBQWdFO0FBQ2hFLG1EQUFtRDtBQUNuRCxtRUFBbUU7QUFDbkUsMkNBQXVDO0FBaUJ2Qzs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQUs1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxVQUFVLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDM0QsVUFBVTtZQUNWLFVBQVUsRUFBRSxHQUFHLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDaEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ2hFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQ3hELFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUMzQixRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUs7WUFDekMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsNkJBQTZCO1NBQ3pELENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ25DLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVTtZQUN0QixVQUFVLEVBQUUsVUFBVTtZQUN0QixNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xHLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaENILDBDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVsYnYyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyJztcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcm91dGU1M190YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmlvTG9hZEJhbGFuY2VyUHJvcHMge1xuICAvKipcbiAgICogVGhlIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBsb2FkIGJhbGFuY2VyIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFRoZSBob3N0ZWQgem9uZSBpbiB3aGljaCB0byB0aGUgUm91dGU1MyByZWNvcmQgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lO1xuICAvKipcbiAgICogVGhlIHNlcnZpY2UgbmFtZSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkb21haW4gbmFtZSAoc2VydmljZU5hbWUuaG9zdGVkWm9uZSlcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlY3VyZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIHdpdGggY2VydGlmaWNhdGUgYW5kIFJvdXRlNTMgQVJlY29yZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJpb0xvYWRCYWxhbmNlciBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgcmVhZG9ubHkgbG9hZGJhbGFuY2VyOiBlbGJ2Mi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgcmVhZG9ubHkgbGlzdGVuZXI6IGVsYnYyLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJpb0xvYWRCYWxhbmNlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0uJHtwcm9wcy5ob3N0ZWRab25lLnpvbmVOYW1lfWA7XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBhY20uQ2VydGlmaWNhdGUodGhpcywgJ0NlcnRpZmljYXRlJywge1xuICAgICAgZG9tYWluTmFtZSxcbiAgICAgIHZhbGlkYXRpb246IGFjbS5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhwcm9wcy5ob3N0ZWRab25lKSxcbiAgICB9KTtcblxuICAgIHRoaXMubG9hZGJhbGFuY2VyID0gbmV3IGVsYnYyLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyKHRoaXMsICdMQicsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgaW50ZXJuZXRGYWNpbmc6IHRydWUsXG4gICAgICBodHRwMkVuYWJsZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxpc3RlbmVyID0gdGhpcy5sb2FkYmFsYW5jZXIuYWRkTGlzdGVuZXIoJ0xpc3RlbmVyJywge1xuICAgICAgY2VydGlmaWNhdGVzOiBbY2VydGlmaWNhdGVdLFxuICAgICAgcHJvdG9jb2w6IGVsYnYyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMsXG4gICAgICBzc2xQb2xpY3k6IGVsYnYyLlNzbFBvbGljeS5GT1JXQVJEX1NFQ1JFQ1lfVExTMTJfUkVTX0dDTSxcbiAgICB9KTtcblxuICAgIG5ldyByb3V0ZTUzLkFSZWNvcmQodGhpcywgJ0FSZWNvcmQnLCB7XG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZSxcbiAgICAgIHRhcmdldDogcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyByb3V0ZTUzX3RhcmdldHMuTG9hZEJhbGFuY2VyVGFyZ2V0KHRoaXMubG9hZGJhbGFuY2VyKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
|
package/lib/toggle.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
/** Checks if the given feature is enabled or not.
|
|
3
|
+
*
|
|
4
|
+
* The toggle configuration is stored in context section of json file.
|
|
5
|
+
* It returns true if the value is 'true'. All other values are interpreted as 'false'.
|
|
6
|
+
* If no toggle is found, it returns the given fallback (default is false);
|
|
7
|
+
*
|
|
8
|
+
* The key of json context should include the ticket number.
|
|
9
|
+
*
|
|
10
|
+
* Example json
|
|
11
|
+
* {
|
|
12
|
+
* context: {
|
|
13
|
+
* "rioclaid-1234-awesomeFeatureToggle": "true"
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @param context Either the projen project or a cdk construct. Used to look up the json config.
|
|
18
|
+
* @param toggleName Name of the feature toggle. (example: rioclaid-1234-awesomeFeatureToggle)
|
|
19
|
+
* @param fallback Default return value if no configuration for the toggle exist.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isToggleEnabled(context: Construct, toggleName: string, fallback?: boolean): boolean;
|
package/lib/toggle.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isToggleEnabled = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
/** Checks if the given feature is enabled or not.
|
|
6
|
+
*
|
|
7
|
+
* The toggle configuration is stored in context section of json file.
|
|
8
|
+
* It returns true if the value is 'true'. All other values are interpreted as 'false'.
|
|
9
|
+
* If no toggle is found, it returns the given fallback (default is false);
|
|
10
|
+
*
|
|
11
|
+
* The key of json context should include the ticket number.
|
|
12
|
+
*
|
|
13
|
+
* Example json
|
|
14
|
+
* {
|
|
15
|
+
* context: {
|
|
16
|
+
* "rioclaid-1234-awesomeFeatureToggle": "true"
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* @param context Either the projen project or a cdk construct. Used to look up the json config.
|
|
21
|
+
* @param toggleName Name of the feature toggle. (example: rioclaid-1234-awesomeFeatureToggle)
|
|
22
|
+
* @param fallback Default return value if no configuration for the toggle exist.
|
|
23
|
+
*/
|
|
24
|
+
function isToggleEnabled(context, toggleName, fallback = false) {
|
|
25
|
+
let contextValue;
|
|
26
|
+
if (context instanceof constructs_1.Construct) {
|
|
27
|
+
contextValue = context.node.tryGetContext(toggleName);
|
|
28
|
+
}
|
|
29
|
+
if (typeof contextValue === 'boolean') {
|
|
30
|
+
return contextValue;
|
|
31
|
+
}
|
|
32
|
+
if (typeof contextValue === 'string') {
|
|
33
|
+
return contextValue === 'true';
|
|
34
|
+
}
|
|
35
|
+
if (typeof contextValue === 'boolean') {
|
|
36
|
+
return contextValue;
|
|
37
|
+
}
|
|
38
|
+
if (typeof contextValue === 'string') {
|
|
39
|
+
return contextValue === 'true';
|
|
40
|
+
}
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
43
|
+
exports.isToggleEnabled = isToggleEnabled;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RvZ2dsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFrQixFQUFFLFVBQWtCLEVBQUUsV0FBb0IsS0FBSztJQUUvRixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLE9BQU8sWUFBWSxzQkFBUyxFQUFFO1FBQ2hDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN2RDtJQUVELElBQUksT0FBTyxZQUFZLEtBQUssU0FBUyxFQUFFO1FBQ3JDLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBQ0QsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDcEMsT0FBTyxZQUFZLEtBQUssTUFBTSxDQUFDO0tBQ2hDO0lBQ0QsSUFBSSxPQUFPLFlBQVksS0FBSyxTQUFTLEVBQUU7UUFDckMsT0FBTyxZQUFZLENBQUM7S0FDckI7SUFDRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNwQyxPQUFPLFlBQVksS0FBSyxNQUFNLENBQUM7S0FDaEM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBckJELDBDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKiogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQgb3Igbm90LlxuICpcbiAqIFRoZSB0b2dnbGUgY29uZmlndXJhdGlvbiBpcyBzdG9yZWQgaW4gY29udGV4dCBzZWN0aW9uIG9mIGpzb24gZmlsZS5cbiAqIEl0IHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgJ3RydWUnLiBBbGwgb3RoZXIgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyAnZmFsc2UnLlxuICogSWYgbm8gdG9nZ2xlIGlzIGZvdW5kLCBpdCByZXR1cm5zIHRoZSBnaXZlbiBmYWxsYmFjayAoZGVmYXVsdCBpcyBmYWxzZSk7XG4gKlxuICogVGhlIGtleSBvZiBqc29uIGNvbnRleHQgc2hvdWxkIGluY2x1ZGUgdGhlIHRpY2tldCBudW1iZXIuXG4gKlxuICogRXhhbXBsZSBqc29uXG4gKiB7XG4gKiAgICBjb250ZXh0OiB7XG4gKiAgICAgIFwicmlvY2xhaWQtMTIzNC1hd2Vzb21lRmVhdHVyZVRvZ2dsZVwiOiBcInRydWVcIlxuICogICAgfVxuICogfVxuICpcbiAqIEBwYXJhbSBjb250ZXh0IEVpdGhlciB0aGUgcHJvamVuIHByb2plY3Qgb3IgYSBjZGsgY29uc3RydWN0LiBVc2VkIHRvIGxvb2sgdXAgdGhlIGpzb24gY29uZmlnLlxuICogQHBhcmFtIHRvZ2dsZU5hbWUgTmFtZSBvZiB0aGUgZmVhdHVyZSB0b2dnbGUuIChleGFtcGxlOiByaW9jbGFpZC0xMjM0LWF3ZXNvbWVGZWF0dXJlVG9nZ2xlKVxuICogQHBhcmFtIGZhbGxiYWNrIERlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIG5vIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0b2dnbGUgZXhpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvZ2dsZUVuYWJsZWQoY29udGV4dDogQ29uc3RydWN0LCB0b2dnbGVOYW1lOiBzdHJpbmcsIGZhbGxiYWNrOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcblxuICBsZXQgY29udGV4dFZhbHVlO1xuICBpZiAoY29udGV4dCBpbnN0YW5jZW9mIENvbnN0cnVjdCkge1xuICAgIGNvbnRleHRWYWx1ZSA9IGNvbnRleHQubm9kZS50cnlHZXRDb250ZXh0KHRvZ2dsZU5hbWUpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBjb250ZXh0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGNvbnRleHRWYWx1ZSA9PT0gJ3RydWUnO1xuICB9XG4gIGlmICh0eXBlb2YgY29udGV4dFZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9XG4gIGlmICh0eXBlb2YgY29udGV4dFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjb250ZXh0VmFsdWUgPT09ICd0cnVlJztcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn0iXX0=
|