@orcabus/platform-cdk-constructs 0.0.10 → 0.0.12

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 (38) hide show
  1. package/.jsii +91 -6
  2. package/api-gateway/api-gateway.js +1 -1
  3. package/api-gateway/config.d.ts +14 -30
  4. package/api-gateway/config.js +1 -1
  5. package/deployment-stack-pipeline/artifact-bucket.js +1 -1
  6. package/deployment-stack-pipeline/pipeline.js +1 -1
  7. package/dynamodb/index.js +2 -2
  8. package/ecs/index.js +1 -1
  9. package/lambda/config.d.ts +1 -2
  10. package/lambda/config.js +6 -11
  11. package/lambda/index.js +10 -7
  12. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/__init__.py +92 -0
  13. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/create_helpers.py +34 -0
  14. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/globals.py +13 -0
  15. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/models.py +50 -0
  16. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/query_helpers.py +51 -0
  17. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/update_helpers.py +37 -0
  18. package/named-lambda-role/index.js +1 -1
  19. package/package.json +1 -1
  20. package/provider-function/index.js +1 -1
  21. package/shared-config/accounts.d.ts +24 -0
  22. package/shared-config/accounts.js +28 -0
  23. package/shared-config/database.d.ts +20 -0
  24. package/shared-config/database.js +24 -0
  25. package/shared-config/event-bridge.d.ts +12 -0
  26. package/shared-config/event-bridge.js +16 -0
  27. package/shared-config/file-manager.d.ts +2 -1
  28. package/shared-config/file-manager.js +14 -13
  29. package/shared-config/icav2.d.ts +4 -0
  30. package/shared-config/icav2.js +15 -0
  31. package/shared-config/index.d.ts +5 -0
  32. package/shared-config/index.js +7 -2
  33. package/shared-config/networking.d.ts +0 -4
  34. package/shared-config/networking.js +4 -8
  35. package/shared-config/s3.d.ts +3 -0
  36. package/shared-config/s3.js +14 -0
  37. package/utils/index.d.ts +7 -7
  38. package/utils/index.js +18 -26
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OrcaBusSharedComputeSecurityGroup = exports.SHARED_SECURITY_GROUP_NAME = exports.OrcaBusVpc = exports.EVENT_BUS_NAME = exports.VPC_LOOKUP_PROPS = exports.VPC_STACK_NAME = exports.VPC_NAME = void 0;
3
+ exports.OrcaBusSharedComputeSecurityGroup = exports.SHARED_SECURITY_GROUP_NAME = exports.OrcaBusVpc = exports.VPC_LOOKUP_PROPS = exports.VPC_STACK_NAME = exports.VPC_NAME = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
6
  // VPC configuration
@@ -19,15 +19,11 @@ exports.VPC_LOOKUP_PROPS = {
19
19
  vpcName: exports.VPC_NAME,
20
20
  tags: { Stack: exports.VPC_STACK_NAME },
21
21
  };
22
- /**
23
- * The name of the main event bus used by OrcaBus.
24
- */
25
- exports.EVENT_BUS_NAME = "OrcaBusMain";
26
22
  /**
27
23
  * Helper for looking up the shared OrcaBus VPC.
28
24
  */
29
25
  class OrcaBusVpc {
30
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.10" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.12" };
31
27
  /**
32
28
  * The shared VPC that is used by OrcaBus.
33
29
  * @param scope
@@ -46,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
46
42
  * Helper for looking up the shared compute security group by name.
47
43
  */
48
44
  class OrcaBusSharedComputeSecurityGroup {
49
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.10" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.12" };
50
46
  /**
51
47
  * The shared security group that is used by compute resources to access the database.
52
48
  * @param scope
@@ -58,4 +54,4 @@ class OrcaBusSharedComputeSecurityGroup {
58
54
  }
59
55
  }
60
56
  exports.OrcaBusSharedComputeSecurityGroup = OrcaBusSharedComputeSecurityGroup;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5ldHdvcmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlEQU02QjtBQUc3QixvQkFBb0I7QUFDcEI7O0dBRUc7QUFDVSxRQUFBLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbkM7O0dBRUc7QUFDVSxRQUFBLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDM0M7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFxQjtJQUNoRCxPQUFPLEVBQUUsZ0JBQVE7SUFDakIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFjLEVBQUU7Q0FDaEMsQ0FBQztBQUVGOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBRTVDOztHQUVHO0FBQ0gsTUFBYSxVQUFVOztJQUNyQjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFnQjtRQUN2QyxPQUFPLGFBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLHdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQzs7QUFSSCxnQ0FTQztBQUVEOztHQUVHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQWEsaUNBQWlDOztJQUM1Qzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBZ0IsRUFBRSxHQUFTO1FBQ2xELE9BQU8sdUJBQWEsQ0FBQyxnQkFBZ0IsQ0FDbkMsS0FBSyxFQUNMLHFCQUFxQixFQUNyQixrQ0FBMEIsRUFDMUIsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDOztBQWRILDhFQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVNlY3VyaXR5R3JvdXAsXG4gIElWcGMsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFZwYyxcbiAgVnBjTG9va3VwT3B0aW9ucyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8vIFZQQyBjb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtYWluIFZQQyBuYW1lIHVzZWQgYnkgT3JjYUJ1cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZQQ19OQU1FID0gXCJtYWluLXZwY1wiO1xuLyoqXG4gKiBUaGUgc3RhY2sgbmFtZSB3aGVyZSB0aGUgVlBDIGlzIGRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBWUENfU1RBQ0tfTkFNRSA9IFwibmV0d29ya2luZ1wiO1xuLyoqXG4gKiBWUEMgbG9va3VwIG9wdGlvbnMgYXMgbmVlZGVkIGJ5IENESyBmb3IgbG9va2luZyB1cCB0aGUgVlBDLlxuICovXG5leHBvcnQgY29uc3QgVlBDX0xPT0tVUF9QUk9QUzogVnBjTG9va3VwT3B0aW9ucyA9IHtcbiAgdnBjTmFtZTogVlBDX05BTUUsXG4gIHRhZ3M6IHsgU3RhY2s6IFZQQ19TVEFDS19OQU1FIH0sXG59O1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIGV2ZW50IGJ1cyB1c2VkIGJ5IE9yY2FCdXMuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkVOVF9CVVNfTkFNRSA9IFwiT3JjYUJ1c01haW5cIjtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGxvb2tpbmcgdXAgdGhlIHNoYXJlZCBPcmNhQnVzIFZQQy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9yY2FCdXNWcGMge1xuICAvKipcbiAgICogVGhlIHNoYXJlZCBWUEMgdGhhdCBpcyB1c2VkIGJ5IE9yY2FCdXMuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcmV0dXJucyBJVnBjXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb29rdXAoc2NvcGU6IENvbnN0cnVjdCk6IElWcGMge1xuICAgIHJldHVybiBWcGMuZnJvbUxvb2t1cChzY29wZSwgXCJPcmNhQnVzTWFpblZwY1wiLCBWUENfTE9PS1VQX1BST1BTKTtcbiAgfVxufVxuXG4vKipcbiAqIFNoYXJlZCBzZWN1cml0eSBncm91cCB1c2VkIGJ5IGNvbXB1dGUgcmVzb3VyY2VzIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFSRURfU0VDVVJJVFlfR1JPVVBfTkFNRSA9IFwiT3JjYUJ1c1NoYXJlZENvbXB1dGVTZWN1cml0eUdyb3VwXCI7XG5cbi8qKlxuICogSGVscGVyIGZvciBsb29raW5nIHVwIHRoZSBzaGFyZWQgY29tcHV0ZSBzZWN1cml0eSBncm91cCBieSBuYW1lLlxuICovXG5leHBvcnQgY2xhc3MgT3JjYUJ1c1NoYXJlZENvbXB1dGVTZWN1cml0eUdyb3VwIHtcbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgc2VjdXJpdHkgZ3JvdXAgdGhhdCBpcyB1c2VkIGJ5IGNvbXB1dGUgcmVzb3VyY2VzIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gdnBjXG4gICAqIEByZXR1cm5zIElTZWN1cml0eUdyb3VwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb29rdXAoc2NvcGU6IENvbnN0cnVjdCwgdnBjOiBJVnBjKTogSVNlY3VyaXR5R3JvdXAge1xuICAgIHJldHVybiBTZWN1cml0eUdyb3VwLmZyb21Mb29rdXBCeU5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIFwiU2hhcmVkU2VjdXJpdHlHcm91cFwiLFxuICAgICAgU0hBUkVEX1NFQ1VSSVRZX0dST1VQX05BTUUsXG4gICAgICB2cGMsXG4gICAgKTtcbiAgfVxufVxuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5ldHdvcmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlEQU02QjtBQUc3QixvQkFBb0I7QUFDcEI7O0dBRUc7QUFDVSxRQUFBLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbkM7O0dBRUc7QUFDVSxRQUFBLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFDM0M7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFxQjtJQUNoRCxPQUFPLEVBQUUsZ0JBQVE7SUFDakIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFjLEVBQUU7Q0FDaEMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBYSxVQUFVOztJQUNyQjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFnQjtRQUN2QyxPQUFPLGFBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLHdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQzs7QUFSSCxnQ0FTQztBQUVEOztHQUVHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRyxtQ0FBbUMsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQWEsaUNBQWlDOztJQUM1Qzs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBZ0IsRUFBRSxHQUFTO1FBQ2xELE9BQU8sdUJBQWEsQ0FBQyxnQkFBZ0IsQ0FDbkMsS0FBSyxFQUNMLHFCQUFxQixFQUNyQixrQ0FBMEIsRUFDMUIsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDOztBQWRILDhFQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVNlY3VyaXR5R3JvdXAsXG4gIElWcGMsXG4gIFNlY3VyaXR5R3JvdXAsXG4gIFZwYyxcbiAgVnBjTG9va3VwT3B0aW9ucyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8vIFZQQyBjb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtYWluIFZQQyBuYW1lIHVzZWQgYnkgT3JjYUJ1cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZQQ19OQU1FID0gXCJtYWluLXZwY1wiO1xuLyoqXG4gKiBUaGUgc3RhY2sgbmFtZSB3aGVyZSB0aGUgVlBDIGlzIGRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBWUENfU1RBQ0tfTkFNRSA9IFwibmV0d29ya2luZ1wiO1xuLyoqXG4gKiBWUEMgbG9va3VwIG9wdGlvbnMgYXMgbmVlZGVkIGJ5IENESyBmb3IgbG9va2luZyB1cCB0aGUgVlBDLlxuICovXG5leHBvcnQgY29uc3QgVlBDX0xPT0tVUF9QUk9QUzogVnBjTG9va3VwT3B0aW9ucyA9IHtcbiAgdnBjTmFtZTogVlBDX05BTUUsXG4gIHRhZ3M6IHsgU3RhY2s6IFZQQ19TVEFDS19OQU1FIH0sXG59O1xuXG4vKipcbiAqIEhlbHBlciBmb3IgbG9va2luZyB1cCB0aGUgc2hhcmVkIE9yY2FCdXMgVlBDLlxuICovXG5leHBvcnQgY2xhc3MgT3JjYUJ1c1ZwYyB7XG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIFZQQyB0aGF0IGlzIHVzZWQgYnkgT3JjYUJ1cy5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEByZXR1cm5zIElWcGNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cChzY29wZTogQ29uc3RydWN0KTogSVZwYyB7XG4gICAgcmV0dXJuIFZwYy5mcm9tTG9va3VwKHNjb3BlLCBcIk9yY2FCdXNNYWluVnBjXCIsIFZQQ19MT09LVVBfUFJPUFMpO1xuICB9XG59XG5cbi8qKlxuICogU2hhcmVkIHNlY3VyaXR5IGdyb3VwIHVzZWQgYnkgY29tcHV0ZSByZXNvdXJjZXMgdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJFRF9TRUNVUklUWV9HUk9VUF9OQU1FID0gXCJPcmNhQnVzU2hhcmVkQ29tcHV0ZVNlY3VyaXR5R3JvdXBcIjtcblxuLyoqXG4gKiBIZWxwZXIgZm9yIGxvb2tpbmcgdXAgdGhlIHNoYXJlZCBjb21wdXRlIHNlY3VyaXR5IGdyb3VwIGJ5IG5hbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcmNhQnVzU2hhcmVkQ29tcHV0ZVNlY3VyaXR5R3JvdXAge1xuICAvKipcbiAgICogVGhlIHNoYXJlZCBzZWN1cml0eSBncm91cCB0aGF0IGlzIHVzZWQgYnkgY29tcHV0ZSByZXNvdXJjZXMgdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSB2cGNcbiAgICogQHJldHVybnMgSVNlY3VyaXR5R3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cChzY29wZTogQ29uc3RydWN0LCB2cGM6IElWcGMpOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgcmV0dXJuIFNlY3VyaXR5R3JvdXAuZnJvbUxvb2t1cEJ5TmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgXCJTaGFyZWRTZWN1cml0eUdyb3VwXCIsXG4gICAgICBTSEFSRURfU0VDVVJJVFlfR1JPVVBfTkFNRSxcbiAgICAgIHZwYyxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { StageName } from "./accounts";
2
+ export declare const pipelineCacheBucket: Record<StageName, string>;
3
+ export declare const pipelineCachePrefix: Record<StageName, string>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pipelineCachePrefix = exports.pipelineCacheBucket = void 0;
4
+ exports.pipelineCacheBucket = {
5
+ BETA: "pipeline-dev-cache-503977275616-ap-southeast-2",
6
+ GAMMA: "pipeline-stg-cache-503977275616-ap-southeast-2",
7
+ PROD: "pipeline-prod-cache-503977275616-ap-southeast-2",
8
+ };
9
+ exports.pipelineCachePrefix = {
10
+ BETA: "byob-icav2/development/",
11
+ GAMMA: "byob-icav2/staging/",
12
+ PROD: "byob-icav2/production/",
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLG1CQUFtQixHQUE4QjtJQUM1RCxJQUFJLEVBQUUsZ0RBQWdEO0lBQ3RELEtBQUssRUFBRSxnREFBZ0Q7SUFDdkQsSUFBSSxFQUFFLGlEQUFpRDtDQUN4RCxDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBOEI7SUFDNUQsSUFBSSxFQUFFLHlCQUF5QjtJQUMvQixLQUFLLEVBQUUscUJBQXFCO0lBQzVCLElBQUksRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlwZWxpbmVDYWNoZUJ1Y2tldDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogXCJwaXBlbGluZS1kZXYtY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gIEdBTU1BOiBcInBpcGVsaW5lLXN0Zy1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgUFJPRDogXCJwaXBlbGluZS1wcm9kLWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMlwiLFxufTtcbmV4cG9ydCBjb25zdCBwaXBlbGluZUNhY2hlUHJlZml4OiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImJ5b2ItaWNhdjIvZGV2ZWxvcG1lbnQvXCIsXG4gIEdBTU1BOiBcImJ5b2ItaWNhdjIvc3RhZ2luZy9cIixcbiAgUFJPRDogXCJieW9iLWljYXYyL3Byb2R1Y3Rpb24vXCIsXG59O1xuXG4iXX0=
package/utils/index.d.ts CHANGED
@@ -1,8 +1,11 @@
1
+ /**
2
+ *
3
+ * Shared configuration should now be placed in the shared-config package.
4
+ *
5
+ */
1
6
  import { Construct } from "constructs";
2
- import { SynthesisMessage } from 'aws-cdk-lib/cx-api';
3
- export type StageName = "BETA" | "GAMMA" | "PROD";
4
- export declare const region = "ap-southeast-2";
5
- export declare const accountIdAlias: Record<StageName, string>;
7
+ import { SynthesisMessage } from "aws-cdk-lib/cx-api";
8
+ import { StageName } from "../shared-config/accounts";
6
9
  export declare function resolveStageName(scope: Construct): StageName;
7
10
  /**
8
11
  * Stringify the message data.
@@ -12,6 +15,3 @@ export declare function synthesisMessageToString(sm: SynthesisMessage): string;
12
15
  * Validate the secret name so that it doesn't end with 6 characters and a hyphen.
13
16
  */
14
17
  export declare const validateSecretName: (secretName: string) => void;
15
- export declare const pipelineCacheBucket: Record<StageName, string>;
16
- export declare const pipelineCachePrefix: Record<StageName, string>;
17
- export declare const icav2ProjectId: Record<StageName, string>;
package/utils/index.js CHANGED
@@ -1,22 +1,29 @@
1
1
  "use strict";
2
+ /**
3
+ *
4
+ * Shared configuration should now be placed in the shared-config package.
5
+ *
6
+ */
2
7
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.icav2ProjectId = exports.pipelineCachePrefix = exports.pipelineCacheBucket = exports.validateSecretName = exports.accountIdAlias = exports.region = void 0;
8
+ exports.validateSecretName = void 0;
4
9
  exports.resolveStageName = resolveStageName;
5
10
  exports.synthesisMessageToString = synthesisMessageToString;
6
11
  const aws_cdk_lib_1 = require("aws-cdk-lib");
7
- exports.region = 'ap-southeast-2';
8
- exports.accountIdAlias = {
9
- BETA: '843407916570', // umccr_development
10
- GAMMA: '455634345446', // umccr_staging
11
- PROD: '472057503814', // umccr_production
12
- };
12
+ const accounts_1 = require("../shared-config/accounts");
13
13
  function resolveStageName(scope) {
14
14
  // See discussion in https://github.com/aws/aws-cdk/issues/1754
15
15
  // Use Stack.of(scope).account to get the account ID instead of
16
16
  // cdk.Aws.ACCOUNT_ID, which may not be available at this point in the CDK lifecycle.
17
- const match = Object.entries(exports.accountIdAlias).find(([_, value]) => value === aws_cdk_lib_1.Stack.of(scope).account);
17
+ const match = Object.entries(accounts_1.accountIdAlias).find(([_, value]) => value === aws_cdk_lib_1.Stack.of(scope).account);
18
18
  if (!match) {
19
- throw new Error(`Account ID ${aws_cdk_lib_1.Stack.of(scope).account} not found in accountIdAlias`);
19
+ // Check if the stage name is an attribute in the construct
20
+ // This is useful when running tests and other circumstances where the account ID is not available.
21
+ const stageName = scope.node.tryGetContext("stageName");
22
+ if (stageName) {
23
+ return stageName;
24
+ }
25
+ throw new Error(`Account ID ${aws_cdk_lib_1.Stack.of(scope).account} not found in accountIdAlias.
26
+ Please set 'stageName' as a construct attribute in your stack as a fallback`);
20
27
  }
21
28
  return match[0];
22
29
  }
@@ -33,23 +40,8 @@ const validateSecretName = (secretName) => {
33
40
  // Note, this should not end with a hyphen and 6 characters, otherwise secrets manager won't be
34
41
  // able to find the secret using a partial ARN.
35
42
  if (/-(.){6}$/.test(secretName)) {
36
- throw new Error('the secret name should not end with a hyphen and 6 characters');
43
+ throw new Error("the secret name should not end with a hyphen and 6 characters");
37
44
  }
38
45
  };
39
46
  exports.validateSecretName = validateSecretName;
40
- exports.pipelineCacheBucket = {
41
- BETA: 'pipeline-dev-cache-503977275616-ap-southeast-2',
42
- GAMMA: 'pipeline-stg-cache-503977275616-ap-southeast-2',
43
- PROD: 'pipeline-prod-cache-503977275616-ap-southeast-2',
44
- };
45
- exports.pipelineCachePrefix = {
46
- BETA: 'byob-icav2/development/',
47
- GAMMA: 'byob-icav2/staging/',
48
- PROD: 'byob-icav2/production/',
49
- };
50
- exports.icav2ProjectId = {
51
- BETA: 'ea19a3f5-ec7c-4940-a474-c31cd91dbad4', // development
52
- GAMMA: '157b9e78-b2e1-45a7-bfcd-691159995f7c', // staging
53
- PROD: 'eba5c946-1677-441d-bbce-6a11baadecbb' // production
54
- };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSw0Q0FXQztBQUtELDREQUVDO0FBL0JELDZDQUFrQztBQUtyQixRQUFBLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztBQUUxQixRQUFBLGNBQWMsR0FBOEI7SUFDckQsSUFBSSxFQUFFLGNBQWMsRUFBRSxvQkFBb0I7SUFDMUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7SUFDdkMsSUFBSSxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7Q0FDNUMsQ0FBQztBQUVGLFNBQWdCLGdCQUFnQixDQUFDLEtBQWdCO0lBQzdDLCtEQUErRDtJQUMvRCwrREFBK0Q7SUFDL0QscUZBQXFGO0lBQ3JGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFcEcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sOEJBQThCLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFjLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsRUFBb0I7SUFDekQsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDekQsQ0FBQztBQUVEOztHQUVHO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtJQUNyRCwrRkFBK0Y7SUFDL0YsK0NBQStDO0lBQy9DLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUNyRixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxrQkFBa0Isc0JBTTdCO0FBR1csUUFBQSxtQkFBbUIsR0FBOEI7SUFDMUQsSUFBSSxFQUFFLGdEQUFnRDtJQUN0RCxLQUFLLEVBQUUsZ0RBQWdEO0lBQ3ZELElBQUksRUFBRSxpREFBaUQ7Q0FDMUQsQ0FBQztBQUNXLFFBQUEsbUJBQW1CLEdBQThCO0lBQzFELElBQUksRUFBRSx5QkFBeUI7SUFDL0IsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixJQUFJLEVBQUUsd0JBQXdCO0NBQ2pDLENBQUM7QUFFVyxRQUFBLGNBQWMsR0FBOEI7SUFDckQsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLGNBQWM7SUFDNUQsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLFVBQVU7SUFDekQsSUFBSSxFQUFFLHNDQUFzQyxDQUFDLGFBQWE7Q0FDN0QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtTdGFja30gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1N5bnRoZXNpc01lc3NhZ2V9IGZyb20gJ2F3cy1jZGstbGliL2N4LWFwaSc7XG5cbmV4cG9ydCB0eXBlIFN0YWdlTmFtZSA9IFwiQkVUQVwiIHwgXCJHQU1NQVwiIHwgXCJQUk9EXCI7XG5cbmV4cG9ydCBjb25zdCByZWdpb24gPSAnYXAtc291dGhlYXN0LTInO1xuXG5leHBvcnQgY29uc3QgYWNjb3VudElkQWxpYXM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogJzg0MzQwNzkxNjU3MCcsIC8vIHVtY2NyX2RldmVsb3BtZW50XG4gICAgR0FNTUE6ICc0NTU2MzQzNDU0NDYnLCAvLyB1bWNjcl9zdGFnaW5nXG4gICAgUFJPRDogJzQ3MjA1NzUwMzgxNCcsIC8vIHVtY2NyX3Byb2R1Y3Rpb25cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RhZ2VOYW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBTdGFnZU5hbWUge1xuICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc1NFxuICAgIC8vIFVzZSBTdGFjay5vZihzY29wZSkuYWNjb3VudCB0byBnZXQgdGhlIGFjY291bnQgSUQgaW5zdGVhZCBvZlxuICAgIC8vIGNkay5Bd3MuQUNDT1VOVF9JRCwgd2hpY2ggbWF5IG5vdCBiZSBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBpbiB0aGUgQ0RLIGxpZmVjeWNsZS5cbiAgICBjb25zdCBtYXRjaCA9IE9iamVjdC5lbnRyaWVzKGFjY291bnRJZEFsaWFzKS5maW5kKChbXywgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gU3RhY2sub2Yoc2NvcGUpLmFjY291bnQpXG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWNjb3VudCBJRCAke1N0YWNrLm9mKHNjb3BlKS5hY2NvdW50fSBub3QgZm91bmQgaW4gYWNjb3VudElkQWxpYXNgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hbMF0gYXMgU3RhZ2VOYW1lO1xufVxuXG4vKipcbiAqIFN0cmluZ2lmeSB0aGUgbWVzc2FnZSBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhlc2lzTWVzc2FnZVRvU3RyaW5nKHNtOiBTeW50aGVzaXNNZXNzYWdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoc20uZW50cnkuZGF0YSl9IFske3NtLmlkfV1gO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBzZWNyZXQgbmFtZSBzbyB0aGF0IGl0IGRvZXNuJ3QgZW5kIHdpdGggNiBjaGFyYWN0ZXJzIGFuZCBhIGh5cGhlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU2VjcmV0TmFtZSA9IChzZWNyZXROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAvLyBOb3RlLCB0aGlzIHNob3VsZCBub3QgZW5kIHdpdGggYSBoeXBoZW4gYW5kIDYgY2hhcmFjdGVycywgb3RoZXJ3aXNlIHNlY3JldHMgbWFuYWdlciB3b24ndCBiZVxuICAgIC8vIGFibGUgdG8gZmluZCB0aGUgc2VjcmV0IHVzaW5nIGEgcGFydGlhbCBBUk4uXG4gICAgaWYgKC8tKC4pezZ9JC8udGVzdChzZWNyZXROYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBzZWNyZXQgbmFtZSBzaG91bGQgbm90IGVuZCB3aXRoIGEgaHlwaGVuIGFuZCA2IGNoYXJhY3RlcnMnKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBjb25zdCBwaXBlbGluZUNhY2hlQnVja2V0OiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICAgIEJFVEE6ICdwaXBlbGluZS1kZXYtY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yJyxcbiAgICBHQU1NQTogJ3BpcGVsaW5lLXN0Zy1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTInLFxuICAgIFBST0Q6ICdwaXBlbGluZS1wcm9kLWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMicsXG59O1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lQ2FjaGVQcmVmaXg6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogJ2J5b2ItaWNhdjIvZGV2ZWxvcG1lbnQvJyxcbiAgICBHQU1NQTogJ2J5b2ItaWNhdjIvc3RhZ2luZy8nLFxuICAgIFBST0Q6ICdieW9iLWljYXYyL3Byb2R1Y3Rpb24vJyxcbn07XG5cbmV4cG9ydCBjb25zdCBpY2F2MlByb2plY3RJZDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgICBCRVRBOiAnZWExOWEzZjUtZWM3Yy00OTQwLWE0NzQtYzMxY2Q5MWRiYWQ0JywgLy8gZGV2ZWxvcG1lbnRcbiAgICBHQU1NQTogJzE1N2I5ZTc4LWIyZTEtNDVhNy1iZmNkLTY5MTE1OTk5NWY3YycsIC8vIHN0YWdpbmdcbiAgICBQUk9EOiAnZWJhNWM5NDYtMTY3Ny00NDFkLWJiY2UtNmExMWJhYWRlY2JiJyAvLyBwcm9kdWN0aW9uXG59Il19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBUUgsNENBdUJDO0FBS0QsNERBRUM7QUFuQ0QsNkNBQW9DO0FBRXBDLHdEQUFtRTtBQUduRSxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFnQjtJQUMvQywrREFBK0Q7SUFDL0QsK0RBQStEO0lBQy9ELHFGQUFxRjtJQUNyRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUFjLENBQUMsQ0FBQyxJQUFJLENBQy9DLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQ2xELENBQUM7SUFFRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCwyREFBMkQ7UUFDM0QsbUdBQW1HO1FBQ25HLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLFNBQXNCLENBQUM7UUFDaEMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPO2tGQUN1QyxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBYyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLEVBQW9CO0lBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUU7SUFDdkQsK0ZBQStGO0lBQy9GLCtDQUErQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQVJXLFFBQUEsa0JBQWtCLHNCQVE3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIFNoYXJlZCBjb25maWd1cmF0aW9uIHNob3VsZCBub3cgYmUgcGxhY2VkIGluIHRoZSBzaGFyZWQtY29uZmlnIHBhY2thZ2UuXG4gKlxuICovXG5cbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFN5bnRoZXNpc01lc3NhZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvY3gtYXBpXCI7XG5pbXBvcnQge2FjY291bnRJZEFsaWFzLCBTdGFnZU5hbWV9IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCJcblxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN0YWdlTmFtZShzY29wZTogQ29uc3RydWN0KTogU3RhZ2VOYW1lIHtcbiAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzU0XG4gIC8vIFVzZSBTdGFjay5vZihzY29wZSkuYWNjb3VudCB0byBnZXQgdGhlIGFjY291bnQgSUQgaW5zdGVhZCBvZlxuICAvLyBjZGsuQXdzLkFDQ09VTlRfSUQsIHdoaWNoIG1heSBub3QgYmUgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgaW4gdGhlIENESyBsaWZlY3ljbGUuXG4gIGNvbnN0IG1hdGNoID0gT2JqZWN0LmVudHJpZXMoYWNjb3VudElkQWxpYXMpLmZpbmQoXG4gICAgKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSBTdGFjay5vZihzY29wZSkuYWNjb3VudCxcbiAgKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHN0YWdlIG5hbWUgaXMgYW4gYXR0cmlidXRlIGluIHRoZSBjb25zdHJ1Y3RcbiAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGVzdHMgYW5kIG90aGVyIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIGFjY291bnQgSUQgaXMgbm90IGF2YWlsYWJsZS5cbiAgICBjb25zdCBzdGFnZU5hbWUgPSBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoXCJzdGFnZU5hbWVcIik7XG4gICAgaWYgKHN0YWdlTmFtZSkge1xuICAgICAgcmV0dXJuIHN0YWdlTmFtZSBhcyBTdGFnZU5hbWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFjY291bnQgSUQgJHtTdGFjay5vZihzY29wZSkuYWNjb3VudH0gbm90IGZvdW5kIGluIGFjY291bnRJZEFsaWFzLiBcbiAgICAgIFBsZWFzZSBzZXQgJ3N0YWdlTmFtZScgYXMgYSBjb25zdHJ1Y3QgYXR0cmlidXRlIGluIHlvdXIgc3RhY2sgYXMgYSBmYWxsYmFja2AsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaFswXSBhcyBTdGFnZU5hbWU7XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IHRoZSBtZXNzYWdlIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXNNZXNzYWdlVG9TdHJpbmcoc206IFN5bnRoZXNpc01lc3NhZ2UpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoc20uZW50cnkuZGF0YSl9IFske3NtLmlkfV1gO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBzZWNyZXQgbmFtZSBzbyB0aGF0IGl0IGRvZXNuJ3QgZW5kIHdpdGggNiBjaGFyYWN0ZXJzIGFuZCBhIGh5cGhlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU2VjcmV0TmFtZSA9IChzZWNyZXROYW1lOiBzdHJpbmcpID0+IHtcbiAgLy8gTm90ZSwgdGhpcyBzaG91bGQgbm90IGVuZCB3aXRoIGEgaHlwaGVuIGFuZCA2IGNoYXJhY3RlcnMsIG90aGVyd2lzZSBzZWNyZXRzIG1hbmFnZXIgd29uJ3QgYmVcbiAgLy8gYWJsZSB0byBmaW5kIHRoZSBzZWNyZXQgdXNpbmcgYSBwYXJ0aWFsIEFSTi5cbiAgaWYgKC8tKC4pezZ9JC8udGVzdChzZWNyZXROYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidGhlIHNlY3JldCBuYW1lIHNob3VsZCBub3QgZW5kIHdpdGggYSBoeXBoZW4gYW5kIDYgY2hhcmFjdGVyc1wiLFxuICAgICk7XG4gIH1cbn07XG4iXX0=