@rio-cloud/cdk-v2-constructs 8.8.2 → 9.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.jsii +3550 -7420
  2. package/lib/contributions/cop-frontend/cloudfront/rio-cloudfront-distribution.js +1 -5
  3. package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.js +1 -5
  4. package/lib/contributions/smart-route/gitlab-runner/runner-roles.js +1 -5
  5. package/lib/contributions/smart-route/gitlab-runner/spot-role.js +1 -5
  6. package/lib/contributions/team-claid/aws-backup-monitoring/aws-backup-monitoring.js +1 -7
  7. package/lib/contributions/team-claid/aws-glue/csv-table.js +1 -5
  8. package/lib/contributions/team-claid/aws-glue/schema.js +1 -5
  9. package/lib/contributions/team-claid/aws-glue/view-table.js +1 -5
  10. package/lib/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.js +1 -5
  11. package/lib/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.js +1 -5
  12. package/lib/contributions/team-outbound-order-book/index.d.ts +1 -0
  13. package/lib/contributions/team-outbound-order-book/index.js +18 -0
  14. package/lib/contributions/team-shipper-inbound-blue/index.d.ts +1 -0
  15. package/lib/contributions/team-shipper-inbound-blue/index.js +18 -0
  16. package/lib/contributions/team-shipper-inbound-blue/pipeline/code-build-project.js +1 -5
  17. package/lib/contributions/team-shipper-inbound-blue/pipeline/pipeline-build-stage-actions.js +1 -5
  18. package/lib/contributions/team-transport/datadog/datadog-dashboard-construct.js +41 -0
  19. package/lib/contributions/team-transport/datadog/datadog-dashboard-downloader.js +120 -0
  20. package/lib/contributions/{team-transport-two → team-transport}/datadog/index.js +1 -1
  21. package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/datadog-synthetics-test-custom-resource/handler.cjs +109 -106
  22. package/lib/contributions/team-transport/datadog-synthetics/datadog-synthetics-test.js +77 -0
  23. package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/index.js +1 -1
  24. package/lib/contributions/team-transport/index.d.ts +3 -0
  25. package/lib/contributions/team-transport/index.js +20 -0
  26. package/lib/contributions/team-transport/pipeline/application-stage.js +16 -0
  27. package/lib/contributions/team-transport/pipeline/build-project.js +39 -0
  28. package/lib/contributions/{team-transport-two → team-transport}/pipeline/buildspecs.d.ts +3 -3
  29. package/lib/contributions/team-transport/pipeline/buildspecs.js +227 -0
  30. package/lib/contributions/team-transport/pipeline/datadog-monitors.js +45 -0
  31. package/lib/contributions/{team-transport-two → team-transport}/pipeline/index.js +1 -1
  32. package/lib/contributions/team-transport/pipeline/monitoring-deploy-step.js +28 -0
  33. package/lib/contributions/{team-transport-two → team-transport}/pipeline/pipeline-stack.d.ts +2 -0
  34. package/lib/contributions/team-transport/pipeline/pipeline-stack.js +430 -0
  35. package/lib/datadogv2/datadog-lambda-instrumentation.d.ts +1 -1
  36. package/lib/datadogv2/datadog-lambda-instrumentation.js +5 -2
  37. package/lib/datadogv2/secret-locator-custom-resource/on-create.cjs +85 -76
  38. package/lib/datadogv2/service-catalog-custom-resource/on-create.cjs +85 -82
  39. package/lib/datadogv2/validate-lambda-environment.d.ts +3 -0
  40. package/lib/datadogv2/validate-lambda-environment.js +33 -0
  41. package/lib/fargate/codedeploy-custom-resources/create-deployment-is-complete.cjs +85 -76
  42. package/lib/fargate/codedeploy-custom-resources/create-deployment-on-create.cjs +85 -76
  43. package/lib/fargate/codedeploy-custom-resources/run-monitoring-test-suite-runner.cjs +90 -81
  44. package/lib/index.d.ts +0 -8
  45. package/lib/index.js +1 -9
  46. package/lib/sbom-catalog/lambda/handler.cjs +88 -84
  47. package/package.json +22 -11
  48. package/version.json +1 -1
  49. package/lib/contributions/team-transport-two/datadog/datadog-dashboard-construct.js +0 -45
  50. package/lib/contributions/team-transport-two/datadog/datadog-dashboard-downloader.js +0 -120
  51. package/lib/contributions/team-transport-two/datadog-synthetics/datadog-synthetics-test.js +0 -81
  52. package/lib/contributions/team-transport-two/pipeline/application-stage.js +0 -16
  53. package/lib/contributions/team-transport-two/pipeline/build-project.js +0 -39
  54. package/lib/contributions/team-transport-two/pipeline/buildspecs.js +0 -205
  55. package/lib/contributions/team-transport-two/pipeline/datadog-monitors.js +0 -45
  56. package/lib/contributions/team-transport-two/pipeline/monitoring-deploy-step.js +0 -28
  57. package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +0 -432
  58. /package/lib/contributions/{team-transport-two → team-transport}/datadog/datadog-dashboard-construct.d.ts +0 -0
  59. /package/lib/contributions/{team-transport-two → team-transport}/datadog/datadog-dashboard-downloader.d.ts +0 -0
  60. /package/lib/contributions/{team-transport-two → team-transport}/datadog/index.d.ts +0 -0
  61. /package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/datadog-synthetics-test.d.ts +0 -0
  62. /package/lib/contributions/{team-transport-two → team-transport}/datadog-synthetics/index.d.ts +0 -0
  63. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/application-stage.d.ts +0 -0
  64. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/build-project.d.ts +0 -0
  65. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/datadog-monitors.d.ts +0 -0
  66. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/index.d.ts +0 -0
  67. /package/lib/contributions/{team-transport-two → team-transport}/pipeline/monitoring-deploy-step.d.ts +0 -0
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.datadogDashboardDownloader = exports.downloadDashboards = void 0;
4
- const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
5
- const client_ssm_1 = require("@aws-sdk/client-ssm");
6
- const datadog_api_client_1 = require("@datadog/datadog-api-client");
7
- const fs = require("fs");
8
- const CLI_GREEN = '\x1b[32m';
9
- const CLI_BLUE = '\x1b[34m';
10
- const CLI_RESET = '\x1b[0m';
11
- /**
12
- * Downloads dashboards from Datadog and saves them to the local filesystem.
13
- * Run this function with a reference to your CDK application to download dashboards defined via {@link DownloadableDatadogDashboard} and update
14
- * the existing dashboard definition files in place.
15
- *
16
- * See {@link datadogDashboardDownloader} for a convenience wrapper that can be used in your CDK entrypoint script.
17
- *
18
- * @param app - CDK application in entrypoint
19
- */
20
- const downloadDashboards = async (application) => {
21
- console.log('Downloading dashboards...');
22
- const assembly = application.synth();
23
- await Promise.all(assembly.stacksRecursively.map(async (stack) => {
24
- let isStackRelevant = false;
25
- const dashboardPathByLogicalId = {};
26
- Object.entries(stack.template.Resources || []).forEach(([logicalId, resource]) => {
27
- if (resource.Type === 'Datadog::Dashboards::Dashboard') {
28
- const metadata = resource.Metadata || {};
29
- const dashboardPath = metadata['rio-dashboard-path'];
30
- if (dashboardPath) {
31
- dashboardPathByLogicalId[logicalId] = dashboardPath;
32
- isStackRelevant = true;
33
- }
34
- }
35
- });
36
- if (!isStackRelevant) {
37
- return;
38
- }
39
- const datadogConfiguration = await getDatadogConfiguration();
40
- const cloudFormationClient = new client_cloudformation_1.CloudFormationClient();
41
- const response = await cloudFormationClient.send(new client_cloudformation_1.ListStackResourcesCommand({ StackName: stack.stackName }));
42
- await Promise.all((response.StackResourceSummaries || []).map(async (resource) => {
43
- if (resource.ResourceType === 'Datadog::Dashboards::Dashboard' && resource.LogicalResourceId) {
44
- const dashboardPath = dashboardPathByLogicalId[resource.LogicalResourceId];
45
- if (dashboardPath) {
46
- console.log(`Downloading ${CLI_GREEN}${resource.LogicalResourceId}${CLI_RESET} (${resource.PhysicalResourceId}) to ${CLI_BLUE}${dashboardPath}${CLI_RESET}`);
47
- const dashboard = await downloadDashboardViaDatadogApi(datadogConfiguration, resource.PhysicalResourceId);
48
- console.log('Saving ...');
49
- fs.writeFileSync(dashboardPath, prettifyDashboard(dashboard));
50
- }
51
- }
52
- }));
53
- }));
54
- };
55
- exports.downloadDashboards = downloadDashboards;
56
- const getSsmParameter = async (parameterName) => {
57
- const ssmClient = new client_ssm_1.SSMClient();
58
- const command = new client_ssm_1.GetParameterCommand({ Name: parameterName });
59
- const response = await ssmClient.send(command);
60
- return response.Parameter?.Value;
61
- };
62
- const getDatadogConfiguration = async () => {
63
- const apiKey = await getSsmParameter('/rio/config/datadog-integration/api-key');
64
- const appKey = await getSsmParameter('/rio/config/datadog-integration/application-key');
65
- const site = await getSsmParameter('/rio/config/datadog-integration/site');
66
- return {
67
- apiKey,
68
- appKey,
69
- site,
70
- };
71
- };
72
- const downloadDashboardViaDatadogApi = async (config, dashboardId) => {
73
- const configuration = datadog_api_client_1.client.createConfiguration({
74
- authMethods: {
75
- apiKeyAuth: config.apiKey,
76
- appKeyAuth: config.appKey,
77
- },
78
- });
79
- configuration.setServerVariables({
80
- site: config.site,
81
- });
82
- const apiInstance = new datadog_api_client_1.v1.DashboardsApi(configuration);
83
- return apiInstance.getDashboard({
84
- dashboardId: dashboardId,
85
- });
86
- };
87
- const prettifyDashboard = (dashboard) => {
88
- // drop keys that are not present in the output when using the "export" button in the GUI
89
- delete dashboard.id;
90
- delete dashboard.isReadOnly;
91
- delete dashboard.authorHandle;
92
- delete dashboard.authorName;
93
- delete dashboard.url;
94
- delete dashboard.createdAt;
95
- delete dashboard.modifiedAt;
96
- delete dashboard.restrictedRoles;
97
- const serializedDashboard = datadog_api_client_1.v1.ObjectSerializer.serialize(dashboard, 'Dashboard', '');
98
- return JSON.stringify(serializedDashboard, null, 2);
99
- };
100
- /**
101
- * Downloads dashboards from Datadog and saves them to the local filesystem.
102
- * Call this wrapper with your CDK app in your entrypoint script.
103
- *
104
- * Run `cdk synth` with the environment variable
105
- * `DOWNLOAD_DASHBOARDS=true`, to download dashboards defined via {@link DownloadableDatadogDashboard} and update
106
- * the existing dashboard definition files in place.
107
- *
108
- * @param app - CDK application in entrypoint
109
- */
110
- const datadogDashboardDownloader = (app) => {
111
- const downloadDashboardsFlag = process.env.DOWNLOAD_DASHBOARDS?.toLowerCase();
112
- if (downloadDashboardsFlag && ['true', '1', 'yes'].includes(downloadDashboardsFlag)) {
113
- return (0, exports.downloadDashboards)(app)
114
- .then(() => console.log('Dashboards downloaded successfully'))
115
- .catch(error => console.error('Failed to download dashboards', error));
116
- }
117
- return Promise.resolve();
118
- };
119
- exports.datadogDashboardDownloader = datadogDashboardDownloader;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1kYXNoYm9hcmQtZG93bmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nL2RhdGFkb2ctZGFzaGJvYXJkLWRvd25sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMEVBQWlHO0FBQ2pHLG9EQUFxRTtBQUNyRSxvRUFBeUQ7QUFFekQseUJBQXlCO0FBRXpCLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUM3QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDNUIsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTVCOzs7Ozs7OztHQVFHO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsV0FBZ0IsRUFBRSxFQUFFO0lBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN6QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFckMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQzNDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixNQUFNLHdCQUF3QixHQUE4QixFQUFFLENBQUM7UUFDL0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQy9FLElBQUssUUFBZ0IsQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLEVBQUUsQ0FBQztnQkFDaEUsTUFBTSxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNsRCxNQUFNLGFBQWEsR0FBRyxRQUFR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LElBQUksc0JBQXNCLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7UUFDcEYsT0FBTyxJQUFBLDBCQUFrQixFQUFDLEdBQUcsQ0FBQzthQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQzdELEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBUlcsUUFBQSwwQkFBMEIsOEJBUXJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DbGllbnQsIExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgR2V0UGFyYW1ldGVyQ29tbWFuZCwgU1NNQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbSc7XG5pbXBvcnQgeyBjbGllbnQsIHYxIH0gZnJvbSAnQGRhdGFkb2cvZGF0YWRvZy1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcblxuY29uc3QgQ0xJX0dSRUVOID0gJ1xceDFiWzMybSc7XG5jb25zdCBDTElfQkxVRSA9ICdcXHgxYlszNG0nO1xuY29uc3QgQ0xJX1JFU0VUID0gJ1xceDFiWzBtJztcblxuLyoqXG4gKiBEb3dubG9hZHMgZGFzaGJvYXJkcyBmcm9tIERhdGFkb2cgYW5kIHNhdmVzIHRoZW0gdG8gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uXG4gKiBSdW4gdGhpcyBmdW5jdGlvbiB3aXRoIGEgcmVmZXJlbmNlIHRvIHlvdXIgQ0RLIGFwcGxpY2F0aW9uIHRvIGRvd25sb2FkIGRhc2hib2FyZHMgZGVmaW5lZCB2aWEge0BsaW5rIERvd25sb2FkYWJsZURhdGFkb2dEYXNoYm9hcmR9IGFuZCB1cGRhdGVcbiAqIHRoZSBleGlzdGluZyBkYXNoYm9hcmQgZGVmaW5pdGlvbiBmaWxlcyBpbiBwbGFjZS5cbiAqXG4gKiBTZWUge0BsaW5rIGRhdGFkb2dEYXNoYm9hcmREb3dubG9hZGVyfSBmb3IgYSBjb252ZW5pZW5jZSB3cmFwcGVyIHRoYXQgY2FuIGJlIHVzZWQgaW4geW91ciBDREsgZW50cnlwb2ludCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIENESyBhcHBsaWNhdGlvbiBpbiBlbnRyeXBvaW50XG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZERhc2hib2FyZHMgPSBhc3luYyAoYXBwbGljYXRpb246IEFwcCkgPT4ge1xuICBjb25zb2xlLmxvZygnRG93bmxvYWRpbmcgZGFzaGJvYXJkcy4uLicpO1xuICBjb25zdCBhc3NlbWJseSA9IGFwcGxpY2F0aW9uLnN5bnRoKCk7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgYXNzZW1ibHkuc3RhY2tzUmVjdXJzaXZlbHkubWFwKGFzeW5jIHN0YWNrID0+IHtcbiAgICAgIGxldCBpc1N0YWNrUmVsZXZhbnQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGRhc2hib2FyZFBhdGhCeUxvZ2ljYWxJZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgT2JqZWN0LmVudHJpZXMoc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzIHx8IFtdKS5mb3JFYWNoKChbbG9naWNhbElkLCByZXNvdXJjZV0pID0+IHtcbiAgICAgICAgaWYgKChyZXNvdXJjZSBhcyBhbnkpLlR5cGUgPT09ICdEYXRhZG9nOjpEYXNoYm9hcmRzOjpEYXNoYm9hcmQnKSB7XG4gICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSAocmVzb3VyY2UgYXMgYW55KS5NZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgICBjb25zdCBkYXNoYm9hcmRQYXRoID0gbWV0YWRhdGFbJ3Jpby1kYXNoYm9hcmQtcGF0aCddO1xuICAgICAgICAgIGlmIChkYXNoYm9hcmRQYXRoKSB7XG4gICAgICAgICAgICBkYXNoYm9hcmRQYXRoQnlMb2dpY2FsSWRbbG9naWNhbElkXSA9IGRhc2hib2FyZFBhdGg7XG4gICAgICAgICAgICBpc1N0YWNrUmVsZXZhbnQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghaXNTdGFja1JlbGV2YW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YWRvZ0NvbmZpZ3VyYXRpb24gPSBhd2FpdCBnZXREYXRhZG9nQ29uZmlndXJhdGlvbigpO1xuXG4gICAgICBjb25zdCBjbG91ZEZvcm1hdGlvbkNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbG91ZEZvcm1hdGlvbkNsaWVudC5zZW5kKG5ldyBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kKHsgU3RhY2tOYW1lOiBzdGFjay5zdGFja05hbWUgfSkpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIChyZXNwb25zZS5TdGFja1Jlc291cmNlU3VtbWFyaWVzIHx8IFtdKS5tYXAoYXN5bmMgcmVzb3VyY2UgPT4ge1xuICAgICAgICAgIGlmIChyZXNvdXJjZS5SZXNvdXJjZVR5cGUgPT09ICdEYXRhZG9nOjpEYXNoYm9hcmRzOjpEYXNoYm9hcmQnICYmIHJlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBkYXNoYm9hcmRQYXRoID0gZGFzaGJvYXJkUGF0aEJ5TG9naWNhbElkW3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmIChkYXNoYm9hcmRQYXRoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBEb3dubG9hZGluZyAke0NMSV9HUkVFTn0ke3Jlc291cmNlLkxvZ2ljYWxSZXNvdXJjZUlkfSR7Q0xJX1JFU0VUfSAoJHtyZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWR9KSB0byAke0NMSV9CTFVFfSR7ZGFzaGJvYXJkUGF0aH0ke0NMSV9SRVNFVH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IGRvd25sb2FkRGFzaGJvYXJkVmlhRGF0YWRvZ0FwaShcbiAgICAgICAgICAgICAgICBkYXRhZG9nQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgICByZXNvdXJjZS5QaHlzaWNhbFJlc291cmNlSWQgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTYXZpbmcgLi4uJyk7XG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZGFzaGJvYXJkUGF0aCwgcHJldHRpZnlEYXNoYm9hcmQoZGFzaGJvYXJkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KVxuICApO1xufTtcblxuY29uc3QgZ2V0U3NtUGFyYW1ldGVyID0gYXN5bmMgKHBhcmFtZXRlck5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHNzbUNsaWVudCA9IG5ldyBTU01DbGllbnQoKTtcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKHsgTmFtZTogcGFyYW1ldGVyTmFtZSB9KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzc21DbGllbnQuc2VuZChjb21tYW5kKTtcbiAgcmV0dXJuIHJlc3BvbnNlLlBhcmFtZXRlcj8uVmFsdWUgYXMgc3RyaW5nO1xufTtcblxuY29uc3QgZ2V0RGF0YWRvZ0NvbmZpZ3VyYXRpb24gPSBhc3luYyAoKTogUHJvbWlzZTx7IGFwaUtleTogc3RyaW5nOyBhcHBLZXk6IHN0cmluZzsgc2l0ZTogc3RyaW5nIH0+ID0+IHtcbiAgY29uc3QgYXBpS2V5ID0gYXdhaXQgZ2V0U3NtUGFyYW1ldGVyKCcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL2FwaS1rZXknKTtcbiAgY29uc3QgYXBwS2V5ID0gYXdhaXQgZ2V0U3NtUGFyYW1ldGVyKCcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL2FwcGxpY2F0aW9uLWtleScpO1xuICBjb25zdCBzaXRlID0gYXdhaXQgZ2V0U3NtUGFyYW1ldGVyKCcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL3NpdGUnKTtcbiAgcmV0dXJuIHtcbiAgICBhcGlLZXksXG4gICAgYXBwS2V5LFxuICAgIHNpdGUsXG4gIH07XG59O1xuXG5jb25zdCBkb3dubG9hZERhc2hib2FyZFZpYURhdGFkb2dBcGkgPSBhc3luYyAoXG4gIGNvbmZpZzoge1xuICAgIGFwaUtleTogc3RyaW5nO1xuICAgIGFwcEtleTogc3RyaW5nO1xuICAgIHNpdGU6IHN0cmluZztcbiAgfSxcbiAgZGFzaGJvYXJkSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2MS5EYXNoYm9hcmQ+ID0+IHtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IGNsaWVudC5jcmVhdGVDb25maWd1cmF0aW9uKHtcbiAgICBhdXRoTWV0aG9kczoge1xuICAgICAgYXBpS2V5QXV0aDogY29uZmlnLmFwaUtleSxcbiAgICAgIGFwcEtleUF1dGg6IGNvbmZpZy5hcHBLZXksXG4gICAgfSxcbiAgfSk7XG4gIGNvbmZpZ3VyYXRpb24uc2V0U2VydmVyVmFyaWFibGVzKHtcbiAgICBzaXRlOiBjb25maWcuc2l0ZSxcbiAgfSk7XG4gIGNvbnN0IGFwaUluc3RhbmNlID0gbmV3IHYxLkRhc2hib2FyZHNBcGkoY29uZmlndXJhdGlvbik7XG4gIHJldHVybiBhcGlJbnN0YW5jZS5nZXREYXNoYm9hcmQoe1xuICAgIGRhc2hib2FyZElkOiBkYXNoYm9hcmRJZCxcbiAgfSk7XG59O1xuXG5jb25zdCBwcmV0dGlmeURhc2hib2FyZCA9IChkYXNoYm9hcmQ6IHYxLkRhc2hib2FyZCk6IHN0cmluZyA9PiB7XG4gIC8vIGRyb3Aga2V5cyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3V0cHV0IHdoZW4gdXNpbmcgdGhlIFwiZXhwb3J0XCIgYnV0dG9uIGluIHRoZSBHVUlcbiAgZGVsZXRlIGRhc2hib2FyZC5pZDtcbiAgZGVsZXRlIGRhc2hib2FyZC5pc1JlYWRPbmx5O1xuICBkZWxldGUgZGFzaGJvYXJkLmF1dGhvckhhbmRsZTtcbiAgZGVsZXRlIGRhc2hib2FyZC5hdXRob3JOYW1lO1xuICBkZWxldGUgZGFzaGJvYXJkLnVybDtcbiAgZGVsZXRlIGRhc2hib2FyZC5jcmVhdGVkQXQ7XG4gIGRlbGV0ZSBkYXNoYm9hcmQubW9kaWZpZWRBdDtcbiAgZGVsZXRlIGRhc2hib2FyZC5yZXN0cmljdGVkUm9sZXM7XG5cbiAgY29uc3Qgc2VyaWFsaXplZERhc2hib2FyZCA9IHYxLk9iamVjdFNlcmlhbGl6ZXIuc2VyaWFsaXplKGRhc2hib2FyZCwgJ0Rhc2hib2FyZCcsICcnKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWREYXNoYm9hcmQsIG51bGwsIDIpO1xufTtcblxuLyoqXG4gKiBEb3dubG9hZHMgZGFzaGJvYXJkcyBmcm9tIERhdGFkb2cgYW5kIHNhdmVzIHRoZW0gdG8gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uXG4gKiBDYWxsIHRoaXMgd3JhcHBlciB3aXRoIHlvdXIgQ0RLIGFwcCBpbiB5b3VyIGVudHJ5cG9pbnQgc2NyaXB0LlxuICpcbiAqIFJ1biBgY2RrIHN5bnRoYCB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogYERPV05MT0FEX0RBU0hCT0FSRFM9dHJ1ZWAsIHRvIGRvd25sb2FkIGRhc2hib2FyZHMgZGVmaW5lZCB2aWEge0BsaW5rIERvd25sb2FkYWJsZURhdGFkb2dEYXNoYm9hcmR9IGFuZCB1cGRhdGVcbiAqIHRoZSBleGlzdGluZyBkYXNoYm9hcmQgZGVmaW5pdGlvbiBmaWxlcyBpbiBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gQ0RLIGFwcGxpY2F0aW9uIGluIGVudHJ5cG9pbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFkb2dEYXNoYm9hcmREb3dubG9hZGVyID0gKGFwcDogQXBwKSA9PiB7XG4gIGNvbnN0IGRvd25sb2FkRGFzaGJvYXJkc0ZsYWcgPSBwcm9jZXNzLmVudi5ET1dOTE9BRF9EQVNIQk9BUkRTPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZG93bmxvYWREYXNoYm9hcmRzRmxhZyAmJiBbJ3RydWUnLCAnMScsICd5ZXMnXS5pbmNsdWRlcyhkb3dubG9hZERhc2hib2FyZHNGbGFnKSkge1xuICAgIHJldHVybiBkb3dubG9hZERhc2hib2FyZHMoYXBwKVxuICAgICAgLnRoZW4oKCkgPT4gY29uc29sZS5sb2coJ0Rhc2hib2FyZHMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHknKSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgZGFzaGJvYXJkcycsIGVycm9yKSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufTtcbiJdfQ==
@@ -1,81 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.DatadogSyntheticsTest = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const cdk = require("aws-cdk-lib");
7
- const lambda = require("aws-cdk-lib/aws-lambda");
8
- const logs = require("aws-cdk-lib/aws-logs");
9
- const customResources = require("aws-cdk-lib/custom-resources");
10
- const constructs_1 = require("constructs");
11
- const path = require("path");
12
- const path_1 = require("path");
13
- const constants_1 = require("../../../constants");
14
- const datadogv2_1 = require("../../../datadogv2");
15
- const rio_claidometer_1 = require("../../../rio-claidometer");
16
- const rio_landing_zone_1 = require("../../../rio-landing-zone");
17
- /**
18
- * Creates a Datadog Synthetics test via Datadog API through a custom resource.
19
- *
20
- * See https://docs.datadoghq.com/api/latest/synthetics/ for more information (especially the typescript examples).
21
- * Currently, tests of type `api`, `browser` and `mobile` are supported.
22
- *
23
- * The resource does the following modification to the passed `testConfig`:
24
- * - Adds team name and service name to the test name.
25
- * - Adds the usual tags (account_id, account_name, service, team, team_identifier) to the test tags.
26
- */
27
- class DatadogSyntheticsTest extends constructs_1.Construct {
28
- constructor(scope, id, props) {
29
- super(scope, id);
30
- const datadogSecret = datadogv2_1.DatadogSharedSecret.credentialsSecret(this);
31
- const teamName = rio_landing_zone_1.RioLandingZone.getTeamNameParameter(this).stringValue;
32
- const teamIdentifier = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(this).stringValue;
33
- const accountName = rio_landing_zone_1.RioLandingZone.getAccountNameParameter(this).stringValue;
34
- const datadogHandler = new lambda.Function(this, 'DatadogSyntheticsHandler', {
35
- runtime: constants_1.DEFAULT_NODE_RUNTIME,
36
- code: lambda.Code.fromAsset((0, path_1.join)(__dirname, 'datadog-synthetics-test-custom-resource'), {
37
- exclude: ['*.js', '*.d.ts'],
38
- }),
39
- handler: 'handler.handler',
40
- environment: {
41
- DATADOG_SECRET_ARN: datadogSecret.secretArn,
42
- },
43
- logRetention: logs.RetentionDays.ONE_WEEK,
44
- });
45
- datadogSecret.grantRead(datadogHandler);
46
- const provider = new customResources.Provider(this, 'DatadogSyntheticsProvider', {
47
- onEventHandler: datadogHandler,
48
- });
49
- const enhancedName = `${teamName} ${props.serviceName} ${props.testConfig.name}`;
50
- const enhancedTags = [
51
- ...(props.testConfig.tags ?? []),
52
- `account_id:${cdk.Stack.of(this).account}`,
53
- `account_name:${accountName}`,
54
- `service:${props.serviceName}`,
55
- `team:${teamName}`,
56
- `team_identifier:${teamIdentifier}`,
57
- ];
58
- const enhancedTestConfig = {
59
- ...props.testConfig,
60
- name: enhancedName,
61
- tags: enhancedTags,
62
- };
63
- new cdk.CustomResource(this, 'DatadogSyntheticsTestResource', {
64
- serviceToken: provider.serviceToken,
65
- properties: {
66
- TestConfig: JSON.stringify(enhancedTestConfig),
67
- },
68
- });
69
- const [feature, packageName] = __dirname.split(path.sep).reverse();
70
- new rio_claidometer_1.Claidometer(this, 'Claidometer', {
71
- product: rio_claidometer_1.ClaidometerProduct.CDK_CONTRIBUTION,
72
- packageName,
73
- feature,
74
- version: '0.0.1',
75
- });
76
- }
77
- }
78
- exports.DatadogSyntheticsTest = DatadogSyntheticsTest;
79
- _a = JSII_RTTI_SYMBOL_1;
80
- DatadogSyntheticsTest[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.DatadogSyntheticsTest", version: "0.0.0" };
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1zeW50aGV0aWNzLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vZGF0YWRvZy1zeW50aGV0aWNzL2RhdGFkb2ctc3ludGhldGljcy10ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EsbUNBQW1DO0FBQ25DLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0MsZ0VBQWdFO0FBQ2hFLDJDQUF1QztBQUN2Qyw2QkFBNkI7QUFDN0IsK0JBQTRCO0FBQzVCLGtEQUEwRDtBQUMxRCxrREFBeUQ7QUFDekQsOERBQTJFO0FBQzNFLGdFQUEyRDtBQWlCM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUztJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxhQUFhLEdBQUcsK0JBQW1CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEUsTUFBTSxRQUFRLEdBQUcsaUNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdkUsTUFBTSxjQUFjLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsaUNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFFN0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUMzRSxPQUFPLEVBQUUsZ0NBQW9CO1lBQzdCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUseUNBQXlDLENBQUMsRUFBRTtnQkFDdEYsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUM1QixDQUFDO1lBQ0YsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUU7Z0JBQ1gsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLFNBQVM7YUFDNUM7WUFDRCxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1NBQzFDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSwyQkFBMkIsRUFBRTtZQUMvRSxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakYsTUFBTSxZQUFZLEdBQUc7WUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUMxQyxnQkFBZ0IsV0FBVyxFQUFFO1lBQzdCLFdBQVcsS0FBSyxDQUFDLFdBQVcsRUFBRTtZQUM5QixRQUFRLFFBQVEsRUFBRTtZQUNsQixtQkFBbUIsY0FBYyxFQUFFO1NBQ3BDLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFtQjtZQUN6QyxHQUFHLEtBQUssQ0FBQyxVQUFVO1lBQ25CLElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUM7UUFFRixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFO1lBQzVELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7YUFDL0M7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25FLElBQUksNkJBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxvQ0FBa0IsQ0FBQyxnQkFBZ0I7WUFDNUMsV0FBVztZQUNYLE9BQU87WUFDUCxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXhESCxzREF5REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIFN5bnRoZXRpY3NBUElUZXN0LFxuICBTeW50aGV0aWNzQnJvd3NlclRlc3QsXG4gIFN5bnRoZXRpY3NNb2JpbGVUZXN0LFxufSBmcm9tICdAZGF0YWRvZy9kYXRhZG9nLWFwaS1jbGllbnQvZGlzdC9wYWNrYWdlcy9kYXRhZG9nLWFwaS1jbGllbnQtdjEnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgREVGQVVMVF9OT0RFX1JVTlRJTUUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRGF0YWRvZ1NoYXJlZFNlY3JldCB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBDbGFpZG9tZXRlciwgQ2xhaWRvbWV0ZXJQcm9kdWN0IH0gZnJvbSAnLi4vLi4vLi4vcmlvLWNsYWlkb21ldGVyJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbnR5cGUgU3ludGhldGljc1Rlc3QgPSBTeW50aGV0aWNzQVBJVGVzdCB8IFN5bnRoZXRpY3NCcm93c2VyVGVzdCB8IFN5bnRoZXRpY3NNb2JpbGVUZXN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dTeW50aGV0aWNzVGVzdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHdoaWNoIHRoZSB0ZXN0IGJlbG9uZ3MuXG4gICAqXG4gICAqIFVzZWQgdG8gZW5oYW5jZSB0aGUgdGVzdCBuYW1lIGFuZCBhcHBseSB0aGUgYHNlcnZpY2VgIHRhZy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAanNpaSBpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RDb25maWc6IFN5bnRoZXRpY3NUZXN0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEYXRhZG9nIFN5bnRoZXRpY3MgdGVzdCB2aWEgRGF0YWRvZyBBUEkgdGhyb3VnaCBhIGN1c3RvbSByZXNvdXJjZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vYXBpL2xhdGVzdC9zeW50aGV0aWNzLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiAoZXNwZWNpYWxseSB0aGUgdHlwZXNjcmlwdCBleGFtcGxlcykuXG4gKiBDdXJyZW50bHksIHRlc3RzIG9mIHR5cGUgYGFwaWAsIGBicm93c2VyYCBhbmQgYG1vYmlsZWAgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBUaGUgcmVzb3VyY2UgZG9lcyB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbiB0byB0aGUgcGFzc2VkIGB0ZXN0Q29uZmlnYDpcbiAqIC0gQWRkcyB0ZWFtIG5hbWUgYW5kIHNlcnZpY2UgbmFtZSB0byB0aGUgdGVzdCBuYW1lLlxuICogLSBBZGRzIHRoZSB1c3VhbCB0YWdzIChhY2NvdW50X2lkLCBhY2NvdW50X25hbWUsIHNlcnZpY2UsIHRlYW0sIHRlYW1faWRlbnRpZmllcikgdG8gdGhlIHRlc3QgdGFncy5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFkb2dTeW50aGV0aWNzVGVzdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nU3ludGhldGljc1Rlc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBkYXRhZG9nU2VjcmV0ID0gRGF0YWRvZ1NoYXJlZFNlY3JldC5jcmVkZW50aWFsc1NlY3JldCh0aGlzKTtcblxuICAgIGNvbnN0IHRlYW1OYW1lID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbU5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCBhY2NvdW50TmFtZSA9IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuXG4gICAgY29uc3QgZGF0YWRvZ0hhbmRsZXIgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdEYXRhZG9nU3ludGhldGljc0hhbmRsZXInLCB7XG4gICAgICBydW50aW1lOiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgJ2RhdGFkb2ctc3ludGhldGljcy10ZXN0LWN1c3RvbS1yZXNvdXJjZScpLCB7XG4gICAgICAgIGV4Y2x1ZGU6IFsnKi5qcycsICcqLmQudHMnXSxcbiAgICAgIH0pLFxuICAgICAgaGFuZGxlcjogJ2hhbmRsZXIuaGFuZGxlcicsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBEQVRBRE9HX1NFQ1JFVF9BUk46IGRhdGFkb2dTZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgfSxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgIH0pO1xuICAgIGRhdGFkb2dTZWNyZXQuZ3JhbnRSZWFkKGRhdGFkb2dIYW5kbGVyKTtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGN1c3RvbVJlc291cmNlcy5Qcm92aWRlcih0aGlzLCAnRGF0YWRvZ1N5bnRoZXRpY3NQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiBkYXRhZG9nSGFuZGxlcixcbiAgICB9KTtcblxuICAgIGNvbnN0IGVuaGFuY2VkTmFtZSA9IGAke3RlYW1OYW1lfSAke3Byb3BzLnNlcnZpY2VOYW1lfSAke3Byb3BzLnRlc3RDb25maWcubmFtZX1gO1xuICAgIGNvbnN0IGVuaGFuY2VkVGFncyA9IFtcbiAgICAgIC4uLihwcm9wcy50ZXN0Q29uZmlnLnRhZ3MgPz8gW10pLFxuICAgICAgYGFjY291bnRfaWQ6JHtjZGsuU3RhY2sub2YodGhpcykuYWNjb3VudH1gLFxuICAgICAgYGFjY291bnRfbmFtZToke2FjY291bnROYW1lfWAsXG4gICAgICBgc2VydmljZToke3Byb3BzLnNlcnZpY2VOYW1lfWAsXG4gICAgICBgdGVhbToke3RlYW1OYW1lfWAsXG4gICAgICBgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YCxcbiAgICBdO1xuICAgIGNvbnN0IGVuaGFuY2VkVGVzdENvbmZpZzogU3ludGhldGljc1Rlc3QgPSB7XG4gICAgICAuLi5wcm9wcy50ZXN0Q29uZmlnLFxuICAgICAgbmFtZTogZW5oYW5jZWROYW1lLFxuICAgICAgdGFnczogZW5oYW5jZWRUYWdzLFxuICAgIH07XG5cbiAgICBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsICdEYXRhZG9nU3ludGhldGljc1Rlc3RSZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBUZXN0Q29uZmlnOiBKU09OLnN0cmluZ2lmeShlbmhhbmNlZFRlc3RDb25maWcpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMC4wLjEnLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Application = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- class Application extends aws_cdk_lib_1.Stage {
6
- constructor(scope, id, props) {
7
- super(scope, id, props);
8
- props.appStackFactory.create(this, {
9
- serviceName: props.serviceName,
10
- stackName: props.serviceName,
11
- version: props.version,
12
- });
13
- }
14
- }
15
- exports.Application = Application;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvYXBwbGljYXRpb24tc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdEO0FBVWhELE1BQWEsV0FBWSxTQUFRLG1CQUFLO0lBQ3BDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtDQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhZ2UsIFN0YWdlUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElBcHBTdGFja0ZhY3RvcnkgfSBmcm9tICcuL3BpcGVsaW5lLXN0YWNrJztcblxuaW50ZXJmYWNlIEFwcGxpY2F0aW9uUHJvcHMgZXh0ZW5kcyBTdGFnZVByb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbiBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwcGxpY2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHByb3BzLmFwcFN0YWNrRmFjdG9yeS5jcmVhdGUodGhpcywge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgc3RhY2tOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb246IHByb3BzLnZlcnNpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RioCodeBuildProject = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const codebuild = require("aws-cdk-lib/aws-codebuild");
6
- const codepipeline = require("aws-cdk-lib/aws-codepipeline");
7
- const pipelines = require("aws-cdk-lib/pipelines");
8
- class RioCodeBuildProject extends pipelines.CodeBuildStep {
9
- constructor(scope, id, props) {
10
- super(id, {
11
- input: props.input,
12
- partialBuildSpec: props.partialBuildSpec,
13
- commands: [],
14
- buildEnvironment: {
15
- buildImage: props?.buildEnvironment?.buildImage ||
16
- codebuild.LinuxBuildImage.fromCodeBuildImageId('aws/codebuild/amazonlinux2-x86_64-standard:5.0'),
17
- computeType: props?.buildEnvironment?.computeType || codebuild.ComputeType.LARGE,
18
- environmentVariables: {
19
- AWS_ACCOUNT_ID: { value: aws_cdk_lib_1.Stack.of(scope).account },
20
- SERVICE_NAME: { value: props.serviceName },
21
- HOSTED_ZONE: { value: props.hostedZoneName },
22
- ...props.buildEnvironment?.environmentVariables,
23
- },
24
- privileged: props?.buildEnvironment?.privileged,
25
- certificate: props?.buildEnvironment?.certificate,
26
- },
27
- primaryOutputDirectory: props.cdkOutDirectory ?? './',
28
- env: {
29
- PIPELINE_EXECUTION_ID: codepipeline.GlobalVariables.executionId,
30
- ...props.env,
31
- },
32
- cache: props.cacheBucket
33
- ? codebuild.Cache.bucket(props.cacheBucket, { prefix: `codebuild-cache/${props.serviceName}` })
34
- : undefined,
35
- });
36
- }
37
- }
38
- exports.RioCodeBuildProject = RioCodeBuildProject;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZC1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvQztBQUNwQyx1REFBdUQ7QUFDdkQsNkRBQTZEO0FBRTdELG1EQUFtRDtBQWNuRCxNQUFhLG1CQUFvQixTQUFRLFNBQVMsQ0FBQyxhQUFhO0lBQzlELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDdkUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLFFBQVEsRUFBRSxFQUFFO1lBQ1osZ0JBQWdCLEVBQUU7Z0JBQ2hCLFVBQVUsRUFDUixLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVTtvQkFDbkMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxnREFBZ0QsQ0FBQztnQkFDbEcsV0FBVyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUNoRixvQkFBb0IsRUFBRTtvQkFDcEIsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDbEQsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFO29CQUM1QyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0I7aUJBQ2hEO2dCQUNELFVBQVUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVTtnQkFDL0MsV0FBVyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxXQUFXO2FBQ2xEO1lBQ0Qsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJO1lBQ3JELEdBQUcsRUFBRTtnQkFDSCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsZUFBZSxDQUFDLFdBQVc7Z0JBQy9ELEdBQUcsS0FBSyxDQUFDLEdBQUc7YUFDYjtZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDdEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUMvRixDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTlCRCxrREE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvZGVidWlsZCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCAqIGFzIGNvZGVwaXBlbGluZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgcGlwZWxpbmVzIGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBSaW9Db2RlQnVpbGRQcm9qZWN0UHJvcHMge1xuICBpbnB1dDogcGlwZWxpbmVzLklGaWxlU2V0UHJvZHVjZXI7XG4gIGNka091dERpcmVjdG9yeT86IHN0cmluZztcbiAgcGFydGlhbEJ1aWxkU3BlYzogY29kZWJ1aWxkLkJ1aWxkU3BlYztcbiAgYnVpbGRFbnZpcm9ubWVudD86IGNvZGVidWlsZC5CdWlsZEVudmlyb25tZW50O1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBob3N0ZWRab25lTmFtZTogc3RyaW5nO1xuICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjYWNoZUJ1Y2tldD86IElCdWNrZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSaW9Db2RlQnVpbGRQcm9qZWN0IGV4dGVuZHMgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvQ29kZUJ1aWxkUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGlucHV0OiBwcm9wcy5pbnB1dCxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHByb3BzLnBhcnRpYWxCdWlsZFNwZWMsXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6XG4gICAgICAgICAgcHJvcHM/LmJ1aWxkRW52aXJvbm1lbnQ/LmJ1aWxkSW1hZ2UgfHxcbiAgICAgICAgICBjb2RlYnVpbGQuTGludXhCdWlsZEltYWdlLmZyb21Db2RlQnVpbGRJbWFnZUlkKCdhd3MvY29kZWJ1aWxkL2FtYXpvbmxpbnV4Mi14ODZfNjQtc3RhbmRhcmQ6NS4wJyksXG4gICAgICAgIGNvbXB1dGVUeXBlOiBwcm9wcz8uYnVpbGRFbnZpcm9ubWVudD8uY29tcHV0ZVR5cGUgfHwgY29kZWJ1aWxkLkNvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIEFXU19BQ0NPVU5UX0lEOiB7IHZhbHVlOiBTdGFjay5vZihzY29wZSkuYWNjb3VudCB9LFxuICAgICAgICAgIFNFUlZJQ0VfTkFNRTogeyB2YWx1ZTogcHJvcHMuc2VydmljZU5hbWUgfSxcbiAgICAgICAgICBIT1NURURfWk9ORTogeyB2YWx1ZTogcHJvcHMuaG9zdGVkWm9uZU5hbWUgfSxcbiAgICAgICAgICAuLi5wcm9wcy5idWlsZEVudmlyb25tZW50Py5lbnZpcm9ubWVudFZhcmlhYmxlcyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJpdmlsZWdlZDogcHJvcHM/LmJ1aWxkRW52aXJvbm1lbnQ/LnByaXZpbGVnZWQsXG4gICAgICAgIGNlcnRpZmljYXRlOiBwcm9wcz8uYnVpbGRFbnZpcm9ubWVudD8uY2VydGlmaWNhdGUsXG4gICAgICB9LFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcHJvcHMuY2RrT3V0RGlyZWN0b3J5ID8/ICcuLycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgUElQRUxJTkVfRVhFQ1VUSU9OX0lEOiBjb2RlcGlwZWxpbmUuR2xvYmFsVmFyaWFibGVzLmV4ZWN1dGlvbklkLFxuICAgICAgICAuLi5wcm9wcy5lbnYsXG4gICAgICB9LFxuICAgICAgY2FjaGU6IHByb3BzLmNhY2hlQnVja2V0XG4gICAgICAgID8gY29kZWJ1aWxkLkNhY2hlLmJ1Y2tldChwcm9wcy5jYWNoZUJ1Y2tldCwgeyBwcmVmaXg6IGBjb2RlYnVpbGQtY2FjaGUvJHtwcm9wcy5zZXJ2aWNlTmFtZX1gIH0pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,205 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exportCommitHashAsVersion = exports.logCommitHash = exports.createVulnerabilityBuildSpec = exports.createMainBuildSpec = void 0;
4
- const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
5
- const RIO_LICENSE_CHECK_VERSION = '1.1.7';
6
- const LICENSE_CHECK_COMMAND = `npx -y @rio-cloud/rio-license-checker@${RIO_LICENSE_CHECK_VERSION}`;
7
- const createMainBuildSpec = (features) => {
8
- const env = {};
9
- const buildCommands = [];
10
- buildCommands.push(...(0, exports.exportCommitHashAsVersion)());
11
- env['parameter-store'] = {
12
- ACCOUNT_NAME: '/config/account/name',
13
- TEAM_IDENTIFIER: '/config/team/identifier',
14
- };
15
- if (features.gradleBuild) {
16
- buildCommands.push(...gradleBuildCommands(features.kafkaIntegration ?? false));
17
- env['parameter-store'] = {
18
- ...(env['parameter-store'] ?? {}),
19
- SERVICE_KEYSTORE_PASSWORD: '/config/${SERVICE_NAME}/service-keystore-password',
20
- LICENSE_BUCKET_NAME: '/config/oss-licenses/bucket-name',
21
- };
22
- }
23
- if (features.kafkaIntegration) {
24
- env['parameter-store'] = {
25
- ...(env['parameter-store'] ?? {}),
26
- CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION: '/config/kafka-integration/create-and-sign-certificate-script-s3-location',
27
- };
28
- }
29
- if (features.npmBuild) {
30
- env.variables = {
31
- CI: 'true',
32
- };
33
- buildCommands.push(...npmBuildCommands());
34
- }
35
- if (features.additionalBuildCommands) {
36
- buildCommands.push('### ADDITIONAL BUILD COMMANDS ###', ...features.additionalBuildCommands);
37
- }
38
- buildCommands.push(...infrastructureBuildCommands());
39
- return aws_codebuild_1.BuildSpec.fromObject({
40
- version: '0.2',
41
- env,
42
- phases: {
43
- install: {
44
- 'runtime-versions': getRuntimes(features),
45
- },
46
- pre_build: {
47
- commands: (0, exports.logCommitHash)(),
48
- },
49
- build: {
50
- commands: buildCommands,
51
- },
52
- post_build: {
53
- commands: (0, exports.logCommitHash)(),
54
- },
55
- },
56
- reports: createReports(features),
57
- cache: {
58
- paths: cachePaths(),
59
- },
60
- });
61
- };
62
- exports.createMainBuildSpec = createMainBuildSpec;
63
- const createVulnerabilityBuildSpec = (features) => {
64
- const env = {};
65
- const buildCommands = [];
66
- if (features.gradleBuild) {
67
- env.variables = {
68
- LANG: 'C.UTF-8',
69
- };
70
- env['parameter-store'] = {
71
- NIST_DATA_MIRROR_URL: '/config/nist-data-mirror/url',
72
- };
73
- env['secrets-manager'] = {
74
- SONATYPE_OSS_INDEX_USERNAME: 'arn:aws:secretsmanager:eu-west-1:577146897785:secret:/rio/config/sonatype-oss-index/credentials:username',
75
- SONATYPE_OSS_INDEX_PASSWORD: 'arn:aws:secretsmanager:eu-west-1:577146897785:secret:/rio/config/sonatype-oss-index/credentials:password',
76
- };
77
- buildCommands.push(...['### GRADLE VULNERABILITY CHECK ###', './gradlew -Dorg.gradle.jvmargs=-Xmx4g dependencyCheckAnalyze']);
78
- }
79
- if (features.npmBuild) {
80
- buildCommands.push(...[
81
- '### NPM VULNERABILITY CHECK ###',
82
- 'npm audit --registry https://registry.npmjs.org --audit-level moderate --omit=dev',
83
- ]);
84
- }
85
- buildCommands.push(...[
86
- '### INFRASTRUCTURE VULNERABILITY CHECK ###',
87
- 'cd infrastructure',
88
- 'npm audit --registry https://registry.npmjs.org --audit-level moderate --omit=dev',
89
- 'cd ..',
90
- ]);
91
- return aws_codebuild_1.BuildSpec.fromObject({
92
- version: '0.2',
93
- env,
94
- phases: {
95
- install: {
96
- 'runtime-versions': getRuntimes(features),
97
- },
98
- pre_build: {
99
- commands: (0, exports.logCommitHash)(),
100
- },
101
- build: {
102
- commands: buildCommands,
103
- },
104
- post_build: {
105
- commands: (0, exports.logCommitHash)(),
106
- },
107
- },
108
- cache: {
109
- paths: cachePathsVulnerability(),
110
- },
111
- });
112
- };
113
- exports.createVulnerabilityBuildSpec = createVulnerabilityBuildSpec;
114
- const getRuntimes = (features) => {
115
- const runtimes = {};
116
- if (features.gradleBuild) {
117
- runtimes.java = 'corretto21';
118
- }
119
- runtimes.nodejs = '24';
120
- return runtimes;
121
- };
122
- const logCommitHash = () => [
123
- '(echo "Build triggered by commit " && git log --pretty=format:"%h%x09%an%x09%s" -n 1 ) | tr -d "\\n"',
124
- ];
125
- exports.logCommitHash = logCommitHash;
126
- const exportCommitHashAsVersion = () => ['export GIT_VERSION=$(git rev-parse HEAD)'];
127
- exports.exportCommitHashAsVersion = exportCommitHashAsVersion;
128
- const infrastructureBuildCommands = () => [
129
- '### INFRASTRUCTURE BUILD ###',
130
- 'cd infrastructure',
131
- 'npm ci',
132
- `${LICENSE_CHECK_COMMAND} --type npm-backend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
133
- 'npm run cdk synth 1> /dev/null',
134
- // In pipeline: Error parsing reference: is not a valid repository/tag: invalid reference format.
135
- // workaround due to https://github.com/aws/aws-cdk/issues/18044',
136
- 'find ./ -type f -name "*DeployApplicationStacks*.assets.json" -print0 | xargs --no-run-if-empty -0 sed --in-place \'s|docker load -i asset.|docker load -i ../asset.|g\'',
137
- 'cd ..',
138
- ];
139
- const gradleBuildCommands = (kafkaIntegration) => {
140
- const commands = [];
141
- commands.push(...[
142
- '### GRADLE BUILD ###',
143
- './gradlew clean build',
144
- '# license check',
145
- `${LICENSE_CHECK_COMMAND} --type gradle --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
146
- '# self signed certificate',
147
- 'set -u; keytool -genkey -alias InternalServiceCertificate -keyalg RSA -keystore containerfiles/service-keystore.p12 -validity 3650 -storetype PKCS12 -dname "CN=internal.service.${SERVICE_NAME}.${HOSTED_ZONE}, OU=Logistics, O=Rio, L=Munich, ST=BY, C=DE" -keypass ${SERVICE_KEYSTORE_PASSWORD} -storepass ${SERVICE_KEYSTORE_PASSWORD}',
148
- ]);
149
- if (kafkaIntegration) {
150
- commands.push(...[
151
- '# kafka certificate',
152
- 'set -u; aws s3 cp --quiet s3://${CREATE_AND_SIGN_CERTIFICATE_SCRIPT_S3_LOCATION} create-and-sign-certificate',
153
- 'chmod +x create-and-sign-certificate',
154
- 'set -u; ./create-and-sign-certificate --keystore-password ${SERVICE_KEYSTORE_PASSWORD} --fqdn ${SERVICE_NAME}.${HOSTED_ZONE}',
155
- 'cp /cert/certificate.p12 containerfiles/kafka-keystore.p12',
156
- ]);
157
- }
158
- commands.push(...['# docker image build', './gradlew jibBuildTar --quiet']);
159
- return commands;
160
- };
161
- const npmBuildCommands = () => [
162
- '### NPM BUILD ###',
163
- 'export VITE_GIT_VERSION=$GIT_VERSION',
164
- 'export VITE_AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID',
165
- 'export VITE_AWS_ACCOUNT_NAME=$ACCOUNT_NAME',
166
- 'export VITE_SERVICE_NAME=$SERVICE_NAME',
167
- 'export VITE_TEAM_IDENTIFIER=$TEAM_IDENTIFIER',
168
- 'npm ci',
169
- 'npm run lint',
170
- 'npm run test:ci',
171
- `${LICENSE_CHECK_COMMAND} --type npm-frontend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
172
- 'npm run build',
173
- ];
174
- const cachePaths = () => [
175
- '/cert/**/*',
176
- '/root/.cache/**/*',
177
- '/root/.npm/**/*',
178
- '/root/.gradle/caches/**/*',
179
- '/root/.gradle/wrapper/**/*',
180
- '/root/google-cloud-tools-java/jib/**/*',
181
- 'target/jib-cache/**/*',
182
- ];
183
- const cachePathsVulnerability = () => [
184
- '/root/.cache/**/*',
185
- '/root/.gradle/caches/**/*',
186
- '/root/.gradle/wrapper/**/*',
187
- '/root/.gradle/dependency-check-data/**/*',
188
- ];
189
- const createReports = (features) => {
190
- const reports = {};
191
- if (features.gradleBuild) {
192
- reports.GradleBuildTestResults = {
193
- files: ['**/*'],
194
- 'base-directory': 'build/test-results',
195
- };
196
- }
197
- if (features.npmBuild) {
198
- reports.NpmBuildTestResults = {
199
- files: ['**/*'],
200
- 'base-directory': 'results',
201
- };
202
- }
203
- return reports;
204
- };
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRzcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZHNwZWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFzRDtBQUd0RCxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztBQUMxQyxNQUFNLHFCQUFxQixHQUFHLHlDQUF5Qyx5QkFBeUIsRUFBRSxDQUFDO0FBRTVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUEwQixFQUFhLEVBQUU7SUFDM0UsTUFBTSxHQUFHLEdBQTJDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsaUNBQXlCLEdBQUUsQ0FBQyxDQUFDO0lBRW5ELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxzQkFBc0I7UUFDcEMsZUFBZSxFQUFFLHlCQUF5QjtLQUMzQyxDQUFDO0lBRUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMseUJBQXlCLEVBQUUsbURBQW1EO1lBQzlFLG1CQUFtQixFQUFFLGtDQUFrQztTQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7WUFDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJ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S0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsU0FBUztTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUGlwZWxpbmVGZWF0dXJlcyB9IGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuXG5jb25zdCBSSU9fTElDRU5TRV9DSEVDS19WRVJTSU9OID0gJzEuMS43JztcbmNvbnN0IExJQ0VOU0VfQ0hFQ0tfQ09NTUFORCA9IGBucHggLXkgQHJpby1jbG91ZC9yaW8tbGljZW5zZS1jaGVja2VyQCR7UklPX0xJQ0VOU0VfQ0hFQ0tfVkVSU0lPTn1gO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFpbkJ1aWxkU3BlYyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcyk6IEJ1aWxkU3BlYyA9PiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLmV4cG9ydENvbW1pdEhhc2hBc1ZlcnNpb24oKSk7XG5cbiAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICBBQ0NPVU5UX05BTUU6ICcvY29uZmlnL2FjY291bnQvbmFtZScsXG4gICAgVEVBTV9JREVOVElGSUVSOiAnL2NvbmZpZy90ZWFtL2lkZW50aWZpZXInLFxuICB9O1xuXG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5ncmFkbGVCdWlsZENvbW1hbmRzKGZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24gPz8gZmFsc2UpKTtcbiAgICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgICAgLi4uKGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPz8ge30pLFxuICAgICAgU0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRDogJy9jb25maWcvJHtTRVJWSUNFX05BTUV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQnLFxuICAgICAgTElDRU5TRV9CVUNLRVRfTkFNRTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIC4uLihlbnZbJ3BhcmFtZXRlci1zdG9yZSddID8/IHt9KSxcbiAgICAgIENSRUFURV9BTkRfU0lHTl9DRVJUSUZJQ0FURV9TQ1JJUFRfUzNfTE9DQVRJT046XG4gICAgICAgICcvY29uZmlnL2thZmthLWludGVncmF0aW9uL2NyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZS1zY3JpcHQtczMtbG9jYXRpb24nLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgZW52LnZhcmlhYmxlcyA9IHtcbiAgICAgIENJOiAndHJ1ZScsXG4gICAgfTtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goLi4ubnBtQnVpbGRDb21tYW5kcygpKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMuYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goJyMjIyBBRERJVElPTkFMIEJVSUxEIENPTU1BTkRTICMjIycsIC4uLmZlYXR1cmVzLmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzKTtcbiAgfVxuXG4gIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5pbmZyYXN0cnVjdHVyZUJ1aWxkQ29tbWFuZHMoKSk7XG5cbiAgcmV0dXJuIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICB2ZXJzaW9uOiAnMC4yJyxcbiAgICBlbnYsXG4gICAgcGhhc2VzOiB7XG4gICAgICBpbnN0YWxsOiB7XG4gICAgICAgICdydW50aW1lLXZlcnNpb25zJzogZ2V0UnVudGltZXMoZmVhdHVyZXMpLFxuICAgICAgfSxcbiAgICAgIHByZV9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBidWlsZENvbW1hbmRzLFxuICAgICAgfSxcbiAgICAgIHBvc3RfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXBvcnRzOiBjcmVhdGVSZXBvcnRzKGZlYXR1cmVzKSxcbiAgICBjYWNoZToge1xuICAgICAgcGF0aHM6IGNhY2hlUGF0aHMoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKSA9PiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBlbnYudmFyaWFibGVzID0ge1xuICAgICAgTEFORzogJ0MuVVRGLTgnLFxuICAgIH07XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIE5JU1RfREFUQV9NSVJST1JfVVJMOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsXG4gICAgfTtcbiAgICBlbnZbJ3NlY3JldHMtbWFuYWdlciddID0ge1xuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1VTRVJOQU1FOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6dXNlcm5hbWUnLFxuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1BBU1NXT1JEOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6cGFzc3dvcmQnLFxuICAgIH07XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKFxuICAgICAgLi4uWycjIyMgR1JBRExFIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJywgJy4vZ3JhZGxldyAtRG9yZy5ncmFkbGUuanZtYXJncz0tWG14NGcgZGVwZW5kZW5jeUNoZWNrQW5hbHl6ZSddXG4gICAgKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgICAuLi5bXG4gICAgICAgICcjIyMgTlBNIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJyxcbiAgICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICBdXG4gICAgKTtcbiAgfVxuICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBJTkZSQVNUUlVDVFVSRSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsXG4gICAgICAnY2QgaW5mcmFzdHJ1Y3R1cmUnLFxuICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICAnY2QgLi4nLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgIHZlcnNpb246ICcwLjInLFxuICAgIGVudixcbiAgICBwaGFzZXM6IHtcbiAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgJ3J1bnRpbWUtdmVyc2lvbnMnOiBnZXRSdW50aW1lcyhmZWF0dXJlcyksXG4gICAgICB9LFxuICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGJ1aWxkQ29tbWFuZHMsXG4gICAgICB9LFxuICAgICAgcG9zdF9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNhY2hlOiB7XG4gICAgICBwYXRoczogY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmNvbnN0IGdldFJ1bnRpbWVzID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKSA9PiB7XG4gIGNvbnN0IHJ1bnRpbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJ1bnRpbWVzLmphdmEgPSAnY29ycmV0dG8yMSc7XG4gIH1cbiAgcnVudGltZXMubm9kZWpzID0gJzI0JztcbiAgcmV0dXJuIHJ1bnRpbWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ0NvbW1pdEhhc2ggPSAoKSA9PiBbXG4gICcoZWNobyBcIkJ1aWxkIHRyaWdnZXJlZCBieSBjb21taXQgXCIgJiYgZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6XCIlaCV4MDklYW4leDA5JXNcIiAtbiAxICkgfCB0ciAtZCBcIlxcXFxuXCInLFxuXTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydENvbW1pdEhhc2hBc1ZlcnNpb24gPSAoKSA9PiBbJ2V4cG9ydCBHSVRfVkVSU0lPTj0kKGdpdCByZXYtcGFyc2UgSEVBRCknXTtcblxuY29uc3QgaW5mcmFzdHJ1Y3R1cmVCdWlsZENvbW1hbmRzID0gKCkgPT4gW1xuICAnIyMjIElORlJBU1RSVUNUVVJFIEJVSUxEICMjIycsXG4gICdjZCBpbmZyYXN0cnVjdHVyZScsXG4gICducG0gY2knLFxuICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBucG0tYmFja2VuZCAtLWFjY291bnQtbmFtZSBcXCR7QUNDT1VOVF9OQU1FfSAtLXNlcnZpY2UtbmFtZSBcXCR7U0VSVklDRV9OQU1FfSAtLXVwbG9hZGAsXG4gICducG0gcnVuIGNkayBzeW50aCAxPiAvZGV2L251bGwnLFxuICAvLyBJbiBwaXBlbGluZTogRXJyb3IgcGFyc2luZyByZWZlcmVuY2U6IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnkvdGFnOiBpbnZhbGlkIHJlZmVyZW5jZSBmb3JtYXQuXG4gIC8vIHdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTgwNDQnLFxuICAnZmluZCAuLyAtdHlwZSBmIC1uYW1lIFwiKkRlcGxveUFwcGxpY2F0aW9uU3RhY2tzKi5hc3NldHMuanNvblwiIC1wcmludDAgfCB4YXJncyAtLW5vLXJ1bi1pZi1lbXB0eSAtMCBzZWQgLS1pbi1wbGFjZSBcXCdzfGRvY2tlciBsb2FkIC1pIGFzc2V0Lnxkb2NrZXIgbG9hZCAtaSAuLi9hc3NldC58Z1xcJycsXG4gICdjZCAuLicsXG5dO1xuXG5jb25zdCBncmFkbGVCdWlsZENvbW1hbmRzID0gKGthZmthSW50ZWdyYXRpb246IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgY29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBHUkFETEUgQlVJTEQgIyMjJyxcbiAgICAgICcuL2dyYWRsZXcgY2xlYW4gYnVpbGQnLFxuICAgICAgJyMgbGljZW5zZSBjaGVjaycsXG4gICAgICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBncmFkbGUgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAgICAgJyMgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUnLFxuICAgICAgJ3NldCAtdTsga2V5dG9vbCAtZ2Vua2V5IC1hbGlhcyBJbnRlcm5hbFNlcnZpY2VDZXJ0aWZpY2F0ZSAta2V5YWxnIFJTQSAta2V5c3RvcmUgY29udGFpbmVyZmlsZXMvc2VydmljZS1rZXlzdG9yZS5wMTIgLXZhbGlkaXR5IDM2NTAgLXN0b3JldHlwZSBQS0NTMTIgLWRuYW1lIFwiQ049aW50ZXJuYWwuc2VydmljZS4ke1NFUlZJQ0VfTkFNRX0uJHtIT1NURURfWk9ORX0sIE9VPUxvZ2lzdGljcywgTz1SaW8sIEw9TXVuaWNoLCBTVD1CWSwgQz1ERVwiIC1rZXlwYXNzICR7U0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRH0gLXN0b3JlcGFzcyAke1NFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkR9JyxcbiAgICBdXG4gICk7XG4gIGlmIChrYWZrYUludGVncmF0aW9uKSB7XG4gICAgY29tbWFuZHMucHVzaChcbiAgICAgIC4uLltcbiAgICAgICAgJyMga2Fma2EgY2VydGlmaWNhdGUnLFxuICAgICAgICAnc2V0IC11OyBhd3MgczMgY3AgLS1xdWlldCBzMzovLyR7Q1JFQVRFX0FORF9TSUdOX0NFUlRJRklDQVRFX1NDUklQVF9TM19MT0NBVElPTn0gY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlJyxcbiAgICAgICAgJ2NobW9kICt4IGNyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZScsXG4gICAgICAgICdzZXQgLXU7IC4vY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlIC0ta2V5c3RvcmUtcGFzc3dvcmQgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfSAtLWZxZG4gJHtTRVJWSUNFX05BTUV9LiR7SE9TVEVEX1pPTkV9JyxcbiAgICAgICAgJ2NwIC9jZXJ0L2NlcnRpZmljYXRlLnAxMiBjb250YWluZXJmaWxlcy9rYWZrYS1rZXlzdG9yZS5wMTInLFxuICAgICAgXVxuICAgICk7XG4gIH1cbiAgY29tbWFuZHMucHVzaCguLi5bJyMgZG9ja2VyIGltYWdlIGJ1aWxkJywgJy4vZ3JhZGxldyBqaWJCdWlsZFRhciAtLXF1aWV0J10pO1xuICByZXR1cm4gY29tbWFuZHM7XG59O1xuXG5jb25zdCBucG1CdWlsZENvbW1hbmRzID0gKCkgPT4gW1xuICAnIyMjIE5QTSBCVUlMRCAjIyMnLFxuICAnZXhwb3J0IFZJVEVfR0lUX1ZFUlNJT049JEdJVF9WRVJTSU9OJyxcbiAgJ2V4cG9ydCBWSVRFX0FXU19BQ0NPVU5UX0lEPSRBV1NfQUNDT1VOVF9JRCcsXG4gICdleHBvcnQgVklURV9BV1NfQUNDT1VOVF9OQU1FPSRBQ0NPVU5UX05BTUUnLFxuICAnZXhwb3J0IFZJVEVfU0VSVklDRV9OQU1FPSRTRVJWSUNFX05BTUUnLFxuICAnZXhwb3J0IFZJVEVfVEVBTV9JREVOVElGSUVSPSRURUFNX0lERU5USUZJRVInLFxuICAnbnBtIGNpJyxcbiAgJ25wbSBydW4gbGludCcsXG4gICducG0gcnVuIHRlc3Q6Y2knLFxuICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBucG0tZnJvbnRlbmQgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAnbnBtIHJ1biBidWlsZCcsXG5dO1xuXG5jb25zdCBjYWNoZVBhdGhzID0gKCkgPT4gW1xuICAnL2NlcnQvKiovKicsXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8ubnBtLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS9jYWNoZXMvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL3dyYXBwZXIvKiovKicsXG4gICcvcm9vdC9nb29nbGUtY2xvdWQtdG9vbHMtamF2YS9qaWIvKiovKicsXG4gICd0YXJnZXQvamliLWNhY2hlLyoqLyonLFxuXTtcblxuY29uc3QgY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkgPSAoKSA9PiBbXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL2NhY2hlcy8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvd3JhcHBlci8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvZGVwZW5kZW5jeS1jaGVjay1kYXRhLyoqLyonLFxuXTtcblxuY29uc3QgY3JlYXRlUmVwb3J0cyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcykgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJlcG9ydHMuR3JhZGxlQnVpbGRUZXN0UmVzdWx0cyA9IHtcbiAgICAgIGZpbGVzOiBbJyoqLyonXSxcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdidWlsZC90ZXN0LXJlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgcmVwb3J0cy5OcG1CdWlsZFRlc3RSZXN1bHRzID0ge1xuICAgICAgZmlsZXM6IFsnKiovKiddLFxuICAgICAgJ2Jhc2UtZGlyZWN0b3J5JzogJ3Jlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlcG9ydHM7XG59O1xuIl19
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataDogPipelineErrorAlertForVulnerabilityChecks = exports.DatadogPipelineErrorAlert = void 0;
4
- const datadogv2_1 = require("../../../datadogv2");
5
- class DatadogPipelineErrorAlert extends datadogv2_1.DatadogMonitor {
6
- constructor(scope, id, props) {
7
- super(scope, id, {
8
- serviceName: props.serviceName,
9
- notification: new datadogv2_1.NoNotification(),
10
- monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
11
- extraTags: ['cicd'],
12
- query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
13
- lowercaseQuery: true,
14
- name: 'CI pipeline status',
15
- message: '{{#is_alert}}\\nThe CI build is broken\\n{{/is_alert}} \\n\\n{{#is_alert_recovery}}\\nThe CI build works again.\\n{{/is_alert_recovery}}',
16
- priority: 5,
17
- optionOverrides: {
18
- requireFullWindow: false,
19
- evaluationDelay: 0,
20
- },
21
- });
22
- }
23
- }
24
- exports.DatadogPipelineErrorAlert = DatadogPipelineErrorAlert;
25
- class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogv2_1.DatadogMonitor {
26
- constructor(scope, id, props) {
27
- super(scope, id, {
28
- serviceName: props.serviceName,
29
- notification: props.notification,
30
- monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
31
- extraTags: ['cicd'],
32
- query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
33
- lowercaseQuery: true,
34
- name: 'Vulnerability checks',
35
- message: 'Vulnerabilities detected',
36
- priority: 3,
37
- optionOverrides: {
38
- requireFullWindow: false,
39
- evaluationDelay: 0,
40
- },
41
- });
42
- }
43
- }
44
- exports.DataDogPipelineErrorAlertForVulnerabilityChecks = DataDogPipelineErrorAlertForVulnerabilityChecks;
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tb25pdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9kYXRhZG9nLW1vbml0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGtEQUFpSDtBQVNqSCxNQUFhLHlCQUEwQixTQUFRLDBCQUFjO0lBQzNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0Q7UUFDaEcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsWUFBWSxFQUFFLElBQUksMEJBQWMsRUFBRTtZQUNsQyxXQUFXLEVBQUUsd0NBQTRCLENBQUMsV0FBVztZQUNyRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDbkIsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87WUFDbkksY0FBYyxFQUFFLElBQUk7WUFDcEIsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixPQUFPLEVBQ0wsMElBQTBJO1lBQzVJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsZUFBZSxFQUFFO2dCQUNmLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLGVBQWUsRUFBRSxDQUFDO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkJELDhEQW1CQztBQUVELE1BQWEsK0NBQWdELFNBQVEsMEJBQWM7SUFDakYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLHdDQUE0QixDQUFDLFdBQVc7WUFDckQsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ25CLEtBQUssRUFBRSxxRUFBcUUsS0FBSyxDQUFDLFlBQVksZUFBZSxLQUFLLENBQUMsU0FBUyxPQUFPO1lBQ25JLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxRQUFRLEVBQUUsQ0FBQztZQUNYLGVBQWUsRUFBRTtnQkFDZixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixlQUFlLEVBQUUsQ0FBQzthQUNuQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxCRCwwR0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dNb25pdG9yLCBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLCBJTm90aWZpY2F0aW9uLCBOb05vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5cbmludGVyZmFjZSBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMge1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IFJlZmVyZW5jZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIG5vdGlmaWNhdGlvbj86IElOb3RpZmljYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0IGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT21pdDxEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMsICdub3RpZmljYXRpb24nPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uOiBuZXcgTm9Ob3RpZmljYXRpb24oKSxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgZXh0cmFUYWdzOiBbJ2NpY2QnXSxcbiAgICAgIHF1ZXJ5OiBgbWluKGxhc3RfNW0pOm1pbjpkZXBsb3ltZW50LmNvZGVwaXBlbGluZS5leGVjdXRpb25ze3BpcGVsaW5lX25hbWU6JHtwcm9wcy5waXBlbGluZU5hbWV9LGFjY291bnRfaWQ6JHtwcm9wcy5hY2NvdW50SWR9fSA8IDFgLFxuICAgICAgbG93ZXJjYXNlUXVlcnk6IHRydWUsXG4gICAgICBuYW1lOiAnQ0kgcGlwZWxpbmUgc3RhdHVzJyxcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICd7eyNpc19hbGVydH19XFxcXG5UaGUgQ0kgYnVpbGQgaXMgYnJva2VuXFxcXG57ey9pc19hbGVydH19IFxcXFxuXFxcXG57eyNpc19hbGVydF9yZWNvdmVyeX19XFxcXG5UaGUgQ0kgYnVpbGQgd29ya3MgYWdhaW4uXFxcXG57ey9pc19hbGVydF9yZWNvdmVyeX19JyxcbiAgICAgIHByaW9yaXR5OiA1LFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlcXVpcmVGdWxsV2luZG93OiBmYWxzZSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMubm90aWZpY2F0aW9uLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBleHRyYVRhZ3M6IFsnY2ljZCddLFxuICAgICAgcXVlcnk6IGBtaW4obGFzdF81bSk6bWluOmRlcGxveW1lbnQuY29kZXBpcGVsaW5lLmV4ZWN1dGlvbnN7cGlwZWxpbmVfbmFtZToke3Byb3BzLnBpcGVsaW5lTmFtZX0sYWNjb3VudF9pZDoke3Byb3BzLmFjY291bnRJZH19IDwgMWAsXG4gICAgICBsb3dlcmNhc2VRdWVyeTogdHJ1ZSxcbiAgICAgIG5hbWU6ICdWdWxuZXJhYmlsaXR5IGNoZWNrcycsXG4gICAgICBtZXNzYWdlOiAnVnVsbmVyYWJpbGl0aWVzIGRldGVjdGVkJyxcbiAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHJlcXVpcmVGdWxsV2luZG93OiBmYWxzZSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RioCapabilityMonitoringDeployStep = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
6
- const pipelines = require("aws-cdk-lib/pipelines");
7
- class RioCapabilityMonitoringDeployStep extends pipelines.CodeBuildStep {
8
- constructor(scope, id, props) {
9
- super(id, {
10
- additionalInputs: props.monitoringArtifacts.reduce((result, item) => ({
11
- ...result,
12
- [`${Object.keys(result).length}`]: item.input,
13
- }), {}),
14
- commands: props.monitoringArtifacts
15
- .map((item, index) => item.files.map((file) => [
16
- `echo "Uploading ${index}/${file}" to S3`,
17
- `aws s3 cp "${index}/${file}" s3://monitoring-testsuite-runner-${aws_cdk_lib_1.Stack.of(scope).account}`,
18
- ]))
19
- .flat(2),
20
- buildEnvironment: {
21
- buildImage: aws_codebuild_1.LinuxLambdaBuildImage.AMAZON_LINUX_2023_NODE_20,
22
- computeType: aws_codebuild_1.ComputeType.LAMBDA_1GB,
23
- },
24
- });
25
- }
26
- }
27
- exports.RioCapabilityMonitoringDeployStep = RioCapabilityMonitoringDeployStep;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy1kZXBsb3ktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9tb25pdG9yaW5nLWRlcGxveS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvQztBQUNwQyw2REFBK0U7QUFDL0UsbURBQW1EO0FBWW5ELE1BQWEsaUNBQWtDLFNBQVEsU0FBUyxDQUFDLGFBQWE7SUFDNUUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QztRQUNyRixLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ1IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxNQUFXLEVBQUUsSUFBc0MsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEQsR0FBRyxNQUFNO2dCQUNULENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDOUMsQ0FBQyxFQUNGLEVBQUUsQ0FDSDtZQUNELFFBQVEsRUFBRSxLQUFLLENBQUMsbUJBQW1CO2lCQUNoQyxHQUFHLENBQUMsQ0FBQyxJQUFzQyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDL0IsbUJBQW1CLEtBQUssSUFBSSxJQUFJLFNBQVM7Z0JBQ3pDLGNBQWMsS0FBSyxJQUFJLElBQUksc0NBQXNDLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTthQUMzRixDQUFDLENBQ0g7aUJBQ0EsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLGdCQUFnQixFQUFFO2dCQUNoQixVQUFVLEVBQUUscUNBQXFCLENBQUMseUJBQXlCO2dCQUMzRCxXQUFXLEVBQUUsMkJBQVcsQ0FBQyxVQUFVO2FBQ3BDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBeEJELDhFQXdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29tcHV0ZVR5cGUsIExpbnV4TGFtYmRhQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgcGlwZWxpbmVzIGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBSaW9DYXBhYmlsaXR5TW9uaXRvcmluZ0FydGlmYWN0cyB7XG4gIGlucHV0OiBwaXBlbGluZXMuSUZpbGVTZXRQcm9kdWNlcjtcbiAgZmlsZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcFByb3BzIHtcbiAgbW9uaXRvcmluZ0FydGlmYWN0czogUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdBcnRpZmFjdHNbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCBleHRlbmRzIHBpcGVsaW5lcy5Db2RlQnVpbGRTdGVwIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGFkZGl0aW9uYWxJbnB1dHM6IHByb3BzLm1vbml0b3JpbmdBcnRpZmFjdHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0OiBhbnksIGl0ZW06IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nQXJ0aWZhY3RzKSA9PiAoe1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICBbYCR7T2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGh9YF06IGl0ZW0uaW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKSxcbiAgICAgIGNvbW1hbmRzOiBwcm9wcy5tb25pdG9yaW5nQXJ0aWZhY3RzXG4gICAgICAgIC5tYXAoKGl0ZW06IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nQXJ0aWZhY3RzLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICAgIGl0ZW0uZmlsZXMubWFwKChmaWxlOiBzdHJpbmcpID0+IFtcbiAgICAgICAgICAgIGBlY2hvIFwiVXBsb2FkaW5nICR7aW5kZXh9LyR7ZmlsZX1cIiB0byBTM2AsXG4gICAgICAgICAgICBgYXdzIHMzIGNwIFwiJHtpbmRleH0vJHtmaWxlfVwiIHMzOi8vbW9uaXRvcmluZy10ZXN0c3VpdGUtcnVubmVyLSR7U3RhY2sub2Yoc2NvcGUpLmFjY291bnR9YCxcbiAgICAgICAgICBdKVxuICAgICAgICApXG4gICAgICAgIC5mbGF0KDIpLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=