@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.
Files changed (110) hide show
  1. package/.gitattributes +15 -0
  2. package/.jsii +7832 -0
  3. package/.versionrc.json +14 -0
  4. package/API.md +8136 -0
  5. package/CHANGELOG.md +5 -0
  6. package/LICENSE +202 -0
  7. package/README.md +56 -0
  8. package/lib/datadog/datadogLogIndexMonitoring.d.ts +49 -0
  9. package/lib/datadog/datadogLogIndexMonitoring.js +116 -0
  10. package/lib/datadog/datadogMonitor.d.ts +13 -0
  11. package/lib/datadog/datadogMonitor.js +19 -0
  12. package/lib/datadog/index.d.ts +1 -0
  13. package/lib/datadog/index.js +19 -0
  14. package/lib/fargate/datadog.d.ts +18 -0
  15. package/lib/fargate/datadog.js +225 -0
  16. package/lib/fargate/rio-fargate-service.d.ts +276 -0
  17. package/lib/fargate/rio-fargate-service.js +147 -0
  18. package/lib/fargate/spring.d.ts +6 -0
  19. package/lib/fargate/spring.js +39 -0
  20. package/lib/index.d.ts +21 -0
  21. package/lib/index.js +34 -0
  22. package/lib/kafka/index.d.ts +2 -0
  23. package/lib/kafka/index.js +15 -0
  24. package/lib/kafka/kafka-event-spec.d.ts +43 -0
  25. package/lib/kafka/kafka-event-spec.js +106 -0
  26. package/lib/kafka/kafka-topic.d.ts +102 -0
  27. package/lib/kafka/kafka-topic.js +70 -0
  28. package/lib/pipeline/rio-backup-secrets-restore-stage.d.ts +40 -0
  29. package/lib/pipeline/rio-backup-secrets-restore-stage.js +104 -0
  30. package/lib/pipeline/rio-bitbucket-source-action.d.ts +25 -0
  31. package/lib/pipeline/rio-bitbucket-source-action.js +36 -0
  32. package/lib/rio-claidometer.d.ts +21 -0
  33. package/lib/rio-claidometer.js +39 -0
  34. package/lib/rio-landing-zone.d.ts +16 -0
  35. package/lib/rio-landing-zone.js +57 -0
  36. package/lib/rio-load-balancer.d.ts +26 -0
  37. package/lib/rio-load-balancer.js +42 -0
  38. package/lib/toggle.d.ts +21 -0
  39. package/lib/toggle.js +44 -0
  40. package/lib/watchful/alb.d.ts +47 -0
  41. package/lib/watchful/alb.js +52 -0
  42. package/lib/watchful/aspect.d.ts +16 -0
  43. package/lib/watchful/aspect.js +55 -0
  44. package/lib/watchful/cloudfront.d.ts +50 -0
  45. package/lib/watchful/cloudfront.js +65 -0
  46. package/lib/watchful/datadog-log-alarm.d.ts +37 -0
  47. package/lib/watchful/datadog-log-alarm.js +88 -0
  48. package/lib/watchful/datadog-metric-alarm.d.ts +32 -0
  49. package/lib/watchful/datadog-metric-alarm.js +158 -0
  50. package/lib/watchful/docdb.d.ts +62 -0
  51. package/lib/watchful/docdb.js +102 -0
  52. package/lib/watchful/dynamodb.d.ts +69 -0
  53. package/lib/watchful/dynamodb.js +87 -0
  54. package/lib/watchful/ecs.d.ts +50 -0
  55. package/lib/watchful/ecs.js +69 -0
  56. package/lib/watchful/lambda.d.ts +59 -0
  57. package/lib/watchful/lambda.js +65 -0
  58. package/lib/watchful/metric-alarm.d.ts +34 -0
  59. package/lib/watchful/metric-alarm.js +3 -0
  60. package/lib/watchful/rds.d.ts +47 -0
  61. package/lib/watchful/rds.js +47 -0
  62. package/lib/watchful/targetgroup.d.ts +47 -0
  63. package/lib/watchful/targetgroup.js +54 -0
  64. package/lib/watchful/upperToLower.d.ts +7 -0
  65. package/lib/watchful/upperToLower.js +35 -0
  66. package/lib/watchful/watchful.d.ts +119 -0
  67. package/lib/watchful/watchful.js +182 -0
  68. package/node_modules/argparse/CHANGELOG.md +216 -0
  69. package/node_modules/argparse/LICENSE +254 -0
  70. package/node_modules/argparse/README.md +84 -0
  71. package/node_modules/argparse/argparse.js +3707 -0
  72. package/node_modules/argparse/lib/sub.js +67 -0
  73. package/node_modules/argparse/lib/textwrap.js +440 -0
  74. package/node_modules/argparse/package.json +31 -0
  75. package/node_modules/js-yaml/CHANGELOG.md +616 -0
  76. package/node_modules/js-yaml/LICENSE +21 -0
  77. package/node_modules/js-yaml/README.md +246 -0
  78. package/node_modules/js-yaml/bin/js-yaml.js +126 -0
  79. package/node_modules/js-yaml/dist/js-yaml.js +3874 -0
  80. package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
  81. package/node_modules/js-yaml/dist/js-yaml.mjs +3851 -0
  82. package/node_modules/js-yaml/index.js +47 -0
  83. package/node_modules/js-yaml/lib/common.js +59 -0
  84. package/node_modules/js-yaml/lib/dumper.js +965 -0
  85. package/node_modules/js-yaml/lib/exception.js +55 -0
  86. package/node_modules/js-yaml/lib/loader.js +1727 -0
  87. package/node_modules/js-yaml/lib/schema/core.js +11 -0
  88. package/node_modules/js-yaml/lib/schema/default.js +22 -0
  89. package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
  90. package/node_modules/js-yaml/lib/schema/json.js +19 -0
  91. package/node_modules/js-yaml/lib/schema.js +121 -0
  92. package/node_modules/js-yaml/lib/snippet.js +101 -0
  93. package/node_modules/js-yaml/lib/type/binary.js +125 -0
  94. package/node_modules/js-yaml/lib/type/bool.js +35 -0
  95. package/node_modules/js-yaml/lib/type/float.js +97 -0
  96. package/node_modules/js-yaml/lib/type/int.js +156 -0
  97. package/node_modules/js-yaml/lib/type/map.js +8 -0
  98. package/node_modules/js-yaml/lib/type/merge.js +12 -0
  99. package/node_modules/js-yaml/lib/type/null.js +35 -0
  100. package/node_modules/js-yaml/lib/type/omap.js +44 -0
  101. package/node_modules/js-yaml/lib/type/pairs.js +53 -0
  102. package/node_modules/js-yaml/lib/type/seq.js +8 -0
  103. package/node_modules/js-yaml/lib/type/set.js +29 -0
  104. package/node_modules/js-yaml/lib/type/str.js +8 -0
  105. package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
  106. package/node_modules/js-yaml/lib/type.js +66 -0
  107. package/node_modules/js-yaml/package.json +66 -0
  108. package/package.json +126 -0
  109. package/release-commit-check.js +6 -0
  110. 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=
@@ -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=