cdk-drizzle-migrate 0.0.9

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 (76) hide show
  1. package/.jsii +4136 -0
  2. package/.jsiiignore +0 -0
  3. package/API.md +249 -0
  4. package/LICENSE +202 -0
  5. package/README.md +115 -0
  6. package/lib/drizzle-migrate-provider.d.ts +58 -0
  7. package/lib/drizzle-migrate-provider.js +95 -0
  8. package/lib/handler/handler.js +49302 -0
  9. package/lib/handler/index.d.ts +8 -0
  10. package/lib/handler/index.js +8 -0
  11. package/lib/index.d.ts +1 -0
  12. package/lib/index.js +18 -0
  13. package/node_modules/@types/aws-lambda/LICENSE +21 -0
  14. package/node_modules/@types/aws-lambda/README.md +15 -0
  15. package/node_modules/@types/aws-lambda/common/api-gateway.d.ts +83 -0
  16. package/node_modules/@types/aws-lambda/common/cloudfront.d.ts +245 -0
  17. package/node_modules/@types/aws-lambda/handler.d.ts +172 -0
  18. package/node_modules/@types/aws-lambda/index.d.ts +54 -0
  19. package/node_modules/@types/aws-lambda/package.json +226 -0
  20. package/node_modules/@types/aws-lambda/trigger/alb.d.ts +48 -0
  21. package/node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts +38 -0
  22. package/node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts +246 -0
  23. package/node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts +336 -0
  24. package/node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts +121 -0
  25. package/node_modules/@types/aws-lambda/trigger/autoscaling.d.ts +41 -0
  26. package/node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts +158 -0
  27. package/node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts +236 -0
  28. package/node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts +22 -0
  29. package/node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts +21 -0
  30. package/node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts +69 -0
  31. package/node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts +8 -0
  32. package/node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts +37 -0
  33. package/node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts +104 -0
  34. package/node_modules/@types/aws-lambda/trigger/codecommit.d.ts +35 -0
  35. package/node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts +31 -0
  36. package/node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts +32 -0
  37. package/node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts +23 -0
  38. package/node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts +11 -0
  39. package/node_modules/@types/aws-lambda/trigger/codepipeline.d.ts +55 -0
  40. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts +41 -0
  41. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts +22 -0
  42. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts +76 -0
  43. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts +52 -0
  44. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts +51 -0
  45. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts +21 -0
  46. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts +128 -0
  47. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts +15 -0
  48. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts +26 -0
  49. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts +16 -0
  50. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts +31 -0
  51. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts +73 -0
  52. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts +53 -0
  53. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts +40 -0
  54. package/node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts +22 -0
  55. package/node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts +64 -0
  56. package/node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts +55 -0
  57. package/node_modules/@types/aws-lambda/trigger/eventbridge.d.ts +19 -0
  58. package/node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts +36 -0
  59. package/node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts +48 -0
  60. package/node_modules/@types/aws-lambda/trigger/iot.d.ts +28 -0
  61. package/node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts +51 -0
  62. package/node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts +56 -0
  63. package/node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts +45 -0
  64. package/node_modules/@types/aws-lambda/trigger/lex-v2.d.ts +164 -0
  65. package/node_modules/@types/aws-lambda/trigger/lex.d.ts +120 -0
  66. package/node_modules/@types/aws-lambda/trigger/msk.d.ts +28 -0
  67. package/node_modules/@types/aws-lambda/trigger/s3-batch.d.ts +41 -0
  68. package/node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts +290 -0
  69. package/node_modules/@types/aws-lambda/trigger/s3.d.ts +60 -0
  70. package/node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts +15 -0
  71. package/node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts +27 -0
  72. package/node_modules/@types/aws-lambda/trigger/ses.d.ts +109 -0
  73. package/node_modules/@types/aws-lambda/trigger/sns.d.ts +39 -0
  74. package/node_modules/@types/aws-lambda/trigger/sqs.d.ts +58 -0
  75. package/node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts +110 -0
  76. package/package.json +165 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DrizzleMigrate = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const fs_1 = require("fs");
7
+ const path = require("path");
8
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ const lambda = require("aws-cdk-lib/aws-lambda");
10
+ const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
11
+ const logs = require("aws-cdk-lib/aws-logs");
12
+ const cr = require("aws-cdk-lib/custom-resources");
13
+ const constructs_1 = require("constructs");
14
+ /**
15
+ * A custom resource that runs Drizzle migrations
16
+ */
17
+ class DrizzleMigrate extends constructs_1.Construct {
18
+ constructor(scope, id, props) {
19
+ super(scope, id);
20
+ const migrationsDir = path.join(process.cwd(), props.migrationsPath);
21
+ const handlerDir = path.join(__dirname, "handler");
22
+ const ts_filename = path.join(handlerDir, "index.ts");
23
+ const js_filename = path.join(handlerDir, "index.js");
24
+ const entry = (0, fs_1.existsSync)(ts_filename) ? ts_filename : js_filename;
25
+ const onEventHandler = new aws_lambda_nodejs_1.NodejsFunction(this, "MigrateHandler", {
26
+ runtime: lambda.Runtime.NODEJS_20_X,
27
+ entry: entry,
28
+ logRetention: logs.RetentionDays.ONE_WEEK,
29
+ timeout: aws_cdk_lib_1.Duration.minutes(5),
30
+ vpc: props.vpc,
31
+ vpcSubnets: props.vpcSubnets,
32
+ ...props.handlerProps,
33
+ environment: {
34
+ NO_COLOR: "1",
35
+ ...(props.handlerProps?.environment || {}),
36
+ },
37
+ bundling: {
38
+ sourceMap: false,
39
+ // Include the migrations directory in the bundle
40
+ commandHooks: {
41
+ beforeBundling(_, outputDir) {
42
+ return [
43
+ `cp ${handlerDir}/handler.js ${outputDir}`,
44
+ `cp -r ${migrationsDir} ${path.join(outputDir, "migrations")}`,
45
+ `mkdir -p ${path.join(outputDir, "certs")}`,
46
+ `curl -fL https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem -o ${path.join(outputDir, "certs", "global-bundle.pem")}`,
47
+ ];
48
+ },
49
+ afterBundling() {
50
+ return [];
51
+ },
52
+ beforeInstall() {
53
+ return [];
54
+ },
55
+ },
56
+ ...props.handlerProps?.bundling,
57
+ },
58
+ });
59
+ // If the user gave us a security group, assume it can connect to the database.
60
+ // If not, make sure the CDK created security group allows access to the DB.
61
+ if (props.cluster &&
62
+ (!props.handlerProps ||
63
+ typeof props.handlerProps.securityGroups === "undefined" ||
64
+ props.handlerProps.securityGroups.length === 0)) {
65
+ props.cluster.connections.allowDefaultPortFrom(onEventHandler.connections, "Allow drizzle migrate lambda to connect to db");
66
+ }
67
+ this.handler = onEventHandler;
68
+ // Grant the Lambda function permission to read the secret
69
+ props.dbSecret.grantRead(onEventHandler);
70
+ const provider = new cr.Provider(this, "Provider", {
71
+ onEventHandler,
72
+ logRetention: logs.RetentionDays.ONE_WEEK,
73
+ });
74
+ this.resource = new aws_cdk_lib_1.CustomResource(this, "CustomResource", {
75
+ serviceToken: provider.serviceToken,
76
+ properties: {
77
+ secretArn: props.dbSecret.secretArn,
78
+ // We're now using a fixed path inside the Lambda bundle
79
+ migrationsPath: "migrations",
80
+ // Adding a timestamp ensures the resource is updated on each deployment
81
+ timestamp: Date.now().toString(),
82
+ },
83
+ });
84
+ const resourceCfn = this.resource.node.defaultChild;
85
+ resourceCfn.addPropertyOverride("ServiceTimeout", 900);
86
+ // Add dependency to ensure database is created before migrations run
87
+ if (props.cluster) {
88
+ this.resource.node.addDependency(props.cluster);
89
+ }
90
+ }
91
+ }
92
+ exports.DrizzleMigrate = DrizzleMigrate;
93
+ _a = JSII_RTTI_SYMBOL_1;
94
+ DrizzleMigrate[_a] = { fqn: "cdk-drizzle-migrate.DrizzleMigrate", version: "0.0.9" };
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpenpsZS1taWdyYXRlLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RyaXp6bGUtbWlncmF0ZS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUErQjtBQUMvQiw2QkFBNEI7QUFDNUIsNkNBQW1FO0FBRW5FLGlEQUFnRDtBQUNoRCxxRUFBbUY7QUFDbkYsNkNBQTRDO0FBRzVDLG1EQUFrRDtBQUNsRCwyQ0FBc0M7QUE4Q3RDOztHQUVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFXM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUVsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFFakUsTUFBTSxjQUFjLEdBQUcsSUFBSSxrQ0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLEtBQUssRUFBRSxLQUFLO1lBQ1osWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMs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QUM7O0FBbEdILHdDQW1HQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgeyBDZm5SZXNvdXJjZSwgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24sIE5vZGVqc0Z1bmN0aW9uUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgcmRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgY3IgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIERyaXp6bGVNaWdyYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpenpsZU1pZ3JhdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2Ugc2VjcmV0IGNvbnRhaW5pbmcgY29ubmVjdGlvbiBkZXRhaWxzXG4gICAqIE11c3QgY29udGFpbiBzdGFuZGFyZCBDREsgZGF0YWJhc2Ugc2VjcmV0IHByb3BlcnRpZXM6IHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgZW5naW5lLCBldGMuXG4gICAqL1xuICByZWFkb25seSBkYlNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldFxuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgbWlncmF0aW9ucyBkaXJlY3RvcnlcbiAgICogVGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBidW5kbGVkIHdpdGggdGhlIExhbWJkYSBmdW5jdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbWlncmF0aW9uc1BhdGg6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGN1c3RvbWl6ZSB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqIEV4Y2x1ZGVzIHJ1bnRpbWUsIGVudHJ5LCBhbmQgaGFuZGxlciB3aGljaCBhcmUgbWFuYWdlZCBieSB0aGUgY29uc3RydWN0XG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBMYW1iZGEgY29uZmlndXJhdGlvbiBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyUHJvcHM/OiBOb2RlanNGdW5jdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgd2hlcmUgdGhlIExhbWJkYSBmdW5jdGlvbiB3aWxsIGJlIGRlcGxveWVkXG4gICAqIFJlcXVpcmVkIHRvIGFsbG93IHRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2VcbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGNcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3VibmV0IHNlbGVjdGlvbiB0byBkZXBsb3kgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgKiBAZGVmYXVsdCAtIFBSSVZBVEVfV0lUSF9FR1JFU1Mgc3VibmV0c1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb25cblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgY2x1c3RlciBvciBpbnN0YW5jZVxuICAgKiBJZiBwcm92aWRlZCBhbmQgYSBuZXcgc2VjdXJpdHkgZ3JvdXAgaXMgY3JlYXRlZCwgdGhlIHNlY3VyaXR5IGdyb3VwIHdpbGwgYmVcbiAgICogY29uZmlndXJlZCB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGRhdGFiYXNlXG4gICAqIEBkZWZhdWx0IC0gTm8gZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogcmRzLklEYXRhYmFzZUNsdXN0ZXIgfCByZHMuSURhdGFiYXNlSW5zdGFuY2Vcbn1cblxuLyoqXG4gKiBBIGN1c3RvbSByZXNvdXJjZSB0aGF0IHJ1bnMgRHJpenpsZSBtaWdyYXRpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBEcml6emxlTWlncmF0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHJlc291cmNlIHRoYXQgd2FzIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2VcblxuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIHRoZSBtaWdyYXRpb25zXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGFuZGxlcjogTm9kZWpzRnVuY3Rpb25cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHJpenpsZU1pZ3JhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGNvbnN0IG1pZ3JhdGlvbnNEaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgcHJvcHMubWlncmF0aW9uc1BhdGgpXG4gICAgY29uc3QgaGFuZGxlckRpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlclwiKVxuXG4gICAgY29uc3QgdHNfZmlsZW5hbWUgPSBwYXRoLmpvaW4oaGFuZGxlckRpciwgXCJpbmRleC50c1wiKVxuICAgIGNvbnN0IGpzX2ZpbGVuYW1lID0gcGF0aC5qb2luKGhhbmRsZXJEaXIsIFwiaW5kZXguanNcIilcbiAgICBjb25zdCBlbnRyeSA9IGV4aXN0c1N5bmModHNfZmlsZW5hbWUpID8gdHNfZmlsZW5hbWUgOiBqc19maWxlbmFtZVxuXG4gICAgY29uc3Qgb25FdmVudEhhbmRsZXIgPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJNaWdyYXRlSGFuZGxlclwiLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgIC4uLnByb3BzLmhhbmRsZXJQcm9wcyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE5PX0NPTE9SOiBcIjFcIixcbiAgICAgICAgLi4uKHByb3BzLmhhbmRsZXJQcm9wcz8uZW52aXJvbm1lbnQgfHwge30pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgIC8vIEluY2x1ZGUgdGhlIG1pZ3JhdGlvbnMgZGlyZWN0b3J5IGluIHRoZSBidW5kbGVcbiAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgYmVmb3JlQnVuZGxpbmcoXzogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGBjcCAke2hhbmRsZXJEaXJ9L2hhbmRsZXIuanMgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgYGNwIC1yICR7bWlncmF0aW9uc0Rpcn0gJHtwYXRoLmpvaW4ob3V0cHV0RGlyLCBcIm1pZ3JhdGlvbnNcIil9YCxcbiAgICAgICAgICAgICAgYG1rZGlyIC1wICR7cGF0aC5qb2luKG91dHB1dERpciwgXCJjZXJ0c1wiKX1gLFxuICAgICAgICAgICAgICBgY3VybCAtZkwgaHR0cHM6Ly90cnVzdHN0b3JlLnBraS5yZHMuYW1hem9uYXdzLmNvbS9nbG9iYWwvZ2xvYmFsLWJ1bmRsZS5wZW0gLW8gJHtwYXRoLmpvaW4ob3V0cHV0RGlyLCBcImNlcnRzXCIsIFwiZ2xvYmFsLWJ1bmRsZS5wZW1cIil9YCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGFmdGVyQnVuZGxpbmcoKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiZWZvcmVJbnN0YWxsKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzLmhhbmRsZXJQcm9wcz8uYnVuZGxpbmcsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICAvLyBJZiB0aGUgdXNlciBnYXZlIHVzIGEgc2VjdXJpdHkgZ3JvdXAsIGFzc3VtZSBpdCBjYW4gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuXG4gICAgLy8gSWYgbm90LCBtYWtlIHN1cmUgdGhlIENESyBjcmVhdGVkIHNlY3VyaXR5IGdyb3VwIGFsbG93cyBhY2Nlc3MgdG8gdGhlIERCLlxuICAgIGlmIChcbiAgICAgIHByb3BzLmNsdXN0ZXIgJiZcbiAgICAgICghcHJvcHMuaGFuZGxlclByb3BzIHx8XG4gICAgICAgIHR5cGVvZiBwcm9wcy5oYW5kbGVyUHJvcHMuc2VjdXJpdHlHcm91cHMgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgcHJvcHMuaGFuZGxlclByb3BzLnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHByb3BzLmNsdXN0ZXIuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20oXG4gICAgICAgIG9uRXZlbnRIYW5kbGVyLmNvbm5lY3Rpb25zLFxuICAgICAgICBcIkFsbG93IGRyaXp6bGUgbWlncmF0ZSBsYW1iZGEgdG8gY29ubmVjdCB0byBkYlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVyID0gb25FdmVudEhhbmRsZXJcblxuICAgIC8vIEdyYW50IHRoZSBMYW1iZGEgZnVuY3Rpb24gcGVybWlzc2lvbiB0byByZWFkIHRoZSBzZWNyZXRcbiAgICBwcm9wcy5kYlNlY3JldC5ncmFudFJlYWQob25FdmVudEhhbmRsZXIpXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBjci5Qcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyLFxuICAgICAgbG9nUmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgfSlcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJDdXN0b21SZXNvdXJjZVwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc2VjcmV0QXJuOiBwcm9wcy5kYlNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIC8vIFdlJ3JlIG5vdyB1c2luZyBhIGZpeGVkIHBhdGggaW5zaWRlIHRoZSBMYW1iZGEgYnVuZGxlXG4gICAgICAgIG1pZ3JhdGlvbnNQYXRoOiBcIm1pZ3JhdGlvbnNcIixcbiAgICAgICAgLy8gQWRkaW5nIGEgdGltZXN0YW1wIGVuc3VyZXMgdGhlIHJlc291cmNlIGlzIHVwZGF0ZWQgb24gZWFjaCBkZXBsb3ltZW50XG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzb3VyY2VDZm4gPSB0aGlzLnJlc291cmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJlc291cmNlXG4gICAgcmVzb3VyY2VDZm4uYWRkUHJvcGVydHlPdmVycmlkZShcIlNlcnZpY2VUaW1lb3V0XCIsIDkwMClcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5IHRvIGVuc3VyZSBkYXRhYmFzZSBpcyBjcmVhdGVkIGJlZm9yZSBtaWdyYXRpb25zIHJ1blxuICAgIGlmIChwcm9wcy5jbHVzdGVyKSB7XG4gICAgICB0aGlzLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5jbHVzdGVyKVxuICAgIH1cbiAgfVxufVxuIl19