@rio-cloud/cdk-v2-constructs 2.0.5 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -2990,6 +2990,56 @@
2990
2990
  }
2991
2991
  },
2992
2992
  "types": {
2993
+ "@rio-cloud/cdk-v2-constructs.AppStackProps": {
2994
+ "assembly": "@rio-cloud/cdk-v2-constructs",
2995
+ "datatype": true,
2996
+ "docs": {
2997
+ "stability": "stable"
2998
+ },
2999
+ "fqn": "@rio-cloud/cdk-v2-constructs.AppStackProps",
3000
+ "interfaces": [
3001
+ "aws-cdk-lib.StackProps"
3002
+ ],
3003
+ "kind": "interface",
3004
+ "locationInModule": {
3005
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
3006
+ "line": 94
3007
+ },
3008
+ "name": "AppStackProps",
3009
+ "properties": [
3010
+ {
3011
+ "abstract": true,
3012
+ "docs": {
3013
+ "stability": "stable"
3014
+ },
3015
+ "immutable": true,
3016
+ "locationInModule": {
3017
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
3018
+ "line": 95
3019
+ },
3020
+ "name": "serviceName",
3021
+ "type": {
3022
+ "primitive": "string"
3023
+ }
3024
+ },
3025
+ {
3026
+ "abstract": true,
3027
+ "docs": {
3028
+ "stability": "stable"
3029
+ },
3030
+ "immutable": true,
3031
+ "locationInModule": {
3032
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
3033
+ "line": 96
3034
+ },
3035
+ "name": "version",
3036
+ "type": {
3037
+ "primitive": "string"
3038
+ }
3039
+ }
3040
+ ],
3041
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:AppStackProps"
3042
+ },
2993
3043
  "@rio-cloud/cdk-v2-constructs.Claidometer": {
2994
3044
  "assembly": "@rio-cloud/cdk-v2-constructs",
2995
3045
  "base": "constructs.Construct",
@@ -4078,6 +4128,57 @@
4078
4128
  "name": "Framework",
4079
4129
  "symbolId": "src/fargate/rio-fargate-service:Framework"
4080
4130
  },
4131
+ "@rio-cloud/cdk-v2-constructs.IAppStackFactory": {
4132
+ "assembly": "@rio-cloud/cdk-v2-constructs",
4133
+ "docs": {
4134
+ "example": "// Use e.g. within ApplicationProps as JSONObject:\n{ create: (construct, props) => new Stack(construct, 'AppStack', props) }\n\n// or simply as class interface within your stack implementation:\nclass PipelineStage extends Stage implements IAppStackFactory {\n constructor(scope: Construct, id: string, props: StageProps) {\n super(scope, id, props);\n // your stage definitiom\n }\n\n create(scope: Construct, props: AppStackProps): void {\n // app stack initiation goes in here\n }\n}",
4135
+ "remarks": "Simply place the AppStack creation into the create-method:",
4136
+ "stability": "stable",
4137
+ "summary": "Provider interface to create the AppStack within the specific scope."
4138
+ },
4139
+ "fqn": "@rio-cloud/cdk-v2-constructs.IAppStackFactory",
4140
+ "kind": "interface",
4141
+ "locationInModule": {
4142
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
4143
+ "line": 84
4144
+ },
4145
+ "methods": [
4146
+ {
4147
+ "abstract": true,
4148
+ "docs": {
4149
+ "stability": "stable",
4150
+ "summary": "Factory method, being invoked with the specific scope during pipeline instantiation."
4151
+ },
4152
+ "locationInModule": {
4153
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
4154
+ "line": 91
4155
+ },
4156
+ "name": "create",
4157
+ "parameters": [
4158
+ {
4159
+ "docs": {
4160
+ "summary": "the parent construct for the app stack."
4161
+ },
4162
+ "name": "scope",
4163
+ "type": {
4164
+ "fqn": "constructs.Construct"
4165
+ }
4166
+ },
4167
+ {
4168
+ "docs": {
4169
+ "summary": "the app stacks properties."
4170
+ },
4171
+ "name": "props",
4172
+ "type": {
4173
+ "fqn": "@rio-cloud/cdk-v2-constructs.AppStackProps"
4174
+ }
4175
+ }
4176
+ ]
4177
+ }
4178
+ ],
4179
+ "name": "IAppStackFactory",
4180
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:IAppStackFactory"
4181
+ },
4081
4182
  "@rio-cloud/cdk-v2-constructs.IWatchful": {
4082
4183
  "assembly": "@rio-cloud/cdk-v2-constructs",
4083
4184
  "docs": {
@@ -5191,6 +5292,214 @@
5191
5292
  ],
5192
5293
  "symbolId": "src/watchful/metric-alarm:MetricAlarmProps"
5193
5294
  },
5295
+ "@rio-cloud/cdk-v2-constructs.PipelineStack": {
5296
+ "assembly": "@rio-cloud/cdk-v2-constructs",
5297
+ "base": "aws-cdk-lib.Stack",
5298
+ "docs": {
5299
+ "stability": "stable"
5300
+ },
5301
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineStack",
5302
+ "initializer": {
5303
+ "docs": {
5304
+ "stability": "stable"
5305
+ },
5306
+ "locationInModule": {
5307
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5308
+ "line": 137
5309
+ },
5310
+ "parameters": [
5311
+ {
5312
+ "name": "scope",
5313
+ "type": {
5314
+ "fqn": "constructs.Construct"
5315
+ }
5316
+ },
5317
+ {
5318
+ "name": "id",
5319
+ "type": {
5320
+ "primitive": "string"
5321
+ }
5322
+ },
5323
+ {
5324
+ "name": "props",
5325
+ "type": {
5326
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackProps"
5327
+ }
5328
+ }
5329
+ ]
5330
+ },
5331
+ "kind": "class",
5332
+ "locationInModule": {
5333
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5334
+ "line": 127
5335
+ },
5336
+ "name": "PipelineStack",
5337
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStack"
5338
+ },
5339
+ "@rio-cloud/cdk-v2-constructs.PipelineStackProps": {
5340
+ "assembly": "@rio-cloud/cdk-v2-constructs",
5341
+ "datatype": true,
5342
+ "docs": {
5343
+ "stability": "stable"
5344
+ },
5345
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackProps",
5346
+ "interfaces": [
5347
+ "aws-cdk-lib.StackProps"
5348
+ ],
5349
+ "kind": "interface",
5350
+ "locationInModule": {
5351
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5352
+ "line": 22
5353
+ },
5354
+ "name": "PipelineStackProps",
5355
+ "properties": [
5356
+ {
5357
+ "abstract": true,
5358
+ "docs": {
5359
+ "remarks": "This acts as a wrapper for all resources you want to deploy via the pipeline.",
5360
+ "stability": "stable",
5361
+ "summary": "Provider for appStack to be deployed."
5362
+ },
5363
+ "immutable": true,
5364
+ "locationInModule": {
5365
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5366
+ "line": 39
5367
+ },
5368
+ "name": "appStackFactory",
5369
+ "type": {
5370
+ "fqn": "@rio-cloud/cdk-v2-constructs.IAppStackFactory"
5371
+ }
5372
+ },
5373
+ {
5374
+ "abstract": true,
5375
+ "docs": {
5376
+ "stability": "stable",
5377
+ "summary": "Defines which kind of pipeline is deployed."
5378
+ },
5379
+ "immutable": true,
5380
+ "locationInModule": {
5381
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5382
+ "line": 44
5383
+ },
5384
+ "name": "pipelineType",
5385
+ "type": {
5386
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineType"
5387
+ }
5388
+ },
5389
+ {
5390
+ "abstract": true,
5391
+ "docs": {
5392
+ "remarks": "I.e. the stack is named after the service\n- The serviceName is handed over to all Datadog monitors\n- RIO convention is that uploaded license-check-files are named after the service, i.e. serviceName.txt",
5393
+ "stability": "stable",
5394
+ "summary": "The name of the service - This has to be the same name as the repository as the s3 trigger file created by the bitbucket-integration uses this as a prefix - The serviceName is available as an environment variable SERVICE_NAME in the CodeBuildStep - The serviceName is available in the AppStackProps in the appStackFactory - The serviceName is available as stackName property in the AppStackProps in the appStackFactory."
5395
+ },
5396
+ "immutable": true,
5397
+ "locationInModule": {
5398
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5399
+ "line": 32
5400
+ },
5401
+ "name": "serviceName",
5402
+ "type": {
5403
+ "primitive": "string"
5404
+ }
5405
+ },
5406
+ {
5407
+ "abstract": true,
5408
+ "docs": {
5409
+ "remarks": "A pre-defined buildspec.yaml fitting the pipelineType is used if not provided.",
5410
+ "stability": "stable",
5411
+ "summary": "Path to a custom buildspec.yaml that is used if provided."
5412
+ },
5413
+ "immutable": true,
5414
+ "locationInModule": {
5415
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5416
+ "line": 51
5417
+ },
5418
+ "name": "customBuildspecPath",
5419
+ "optional": true,
5420
+ "type": {
5421
+ "primitive": "string"
5422
+ }
5423
+ },
5424
+ {
5425
+ "abstract": true,
5426
+ "docs": {
5427
+ "remarks": "The RioSecretsDeployStep is added prior to deployment of the AppStack if a path is provided.\n\nNo secrets are deployed if no path is provided.",
5428
+ "stability": "stable",
5429
+ "summary": "Path to secrets file containing encrypted secrets."
5430
+ },
5431
+ "immutable": true,
5432
+ "locationInModule": {
5433
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5434
+ "line": 60
5435
+ },
5436
+ "name": "secretsDeployStepProps",
5437
+ "optional": true,
5438
+ "type": {
5439
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps"
5440
+ }
5441
+ }
5442
+ ],
5443
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStackProps"
5444
+ },
5445
+ "@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps": {
5446
+ "assembly": "@rio-cloud/cdk-v2-constructs",
5447
+ "datatype": true,
5448
+ "docs": {
5449
+ "see": "rio.RioSecretsDeployStepProps",
5450
+ "stability": "stable",
5451
+ "summary": "Selected properties being handed over to RioSecretsDeployStep."
5452
+ },
5453
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps",
5454
+ "kind": "interface",
5455
+ "locationInModule": {
5456
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5457
+ "line": 105
5458
+ },
5459
+ "name": "PipelineStackRioSecretsDeployStepProps",
5460
+ "properties": [
5461
+ {
5462
+ "abstract": true,
5463
+ "docs": {
5464
+ "stability": "stable"
5465
+ },
5466
+ "immutable": true,
5467
+ "locationInModule": {
5468
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5469
+ "line": 106
5470
+ },
5471
+ "name": "secretsFilePath",
5472
+ "type": {
5473
+ "primitive": "string"
5474
+ }
5475
+ }
5476
+ ],
5477
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStackRioSecretsDeployStepProps"
5478
+ },
5479
+ "@rio-cloud/cdk-v2-constructs.PipelineType": {
5480
+ "assembly": "@rio-cloud/cdk-v2-constructs",
5481
+ "docs": {
5482
+ "stability": "stable"
5483
+ },
5484
+ "fqn": "@rio-cloud/cdk-v2-constructs.PipelineType",
5485
+ "kind": "enum",
5486
+ "locationInModule": {
5487
+ "filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
5488
+ "line": 109
5489
+ },
5490
+ "members": [
5491
+ {
5492
+ "docs": {
5493
+ "remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file via command \"./gradlew checkLicenses\".\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project.",
5494
+ "stability": "stable",
5495
+ "summary": "Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka."
5496
+ },
5497
+ "name": "STANDARD_GRADLE"
5498
+ }
5499
+ ],
5500
+ "name": "PipelineType",
5501
+ "symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineType"
5502
+ },
5194
5503
  "@rio-cloud/cdk-v2-constructs.RioBitBucketSourceAction": {
5195
5504
  "assembly": "@rio-cloud/cdk-v2-constructs",
5196
5505
  "base": "aws-cdk-lib.aws_codepipeline_actions.S3SourceAction",
@@ -7187,7 +7496,7 @@
7187
7496
  },
7188
7497
  "locationInModule": {
7189
7498
  "filename": "src/watchful/lambda.ts",
7190
- "line": 66
7499
+ "line": 68
7191
7500
  },
7192
7501
  "parameters": [
7193
7502
  {
@@ -7213,7 +7522,7 @@
7213
7522
  "kind": "class",
7214
7523
  "locationInModule": {
7215
7524
  "filename": "src/watchful/lambda.ts",
7216
- "line": 62
7525
+ "line": 64
7217
7526
  },
7218
7527
  "name": "WatchLambdaFunction",
7219
7528
  "symbolId": "src/watchful/lambda:WatchLambdaFunction"
@@ -7229,7 +7538,7 @@
7229
7538
  "kind": "interface",
7230
7539
  "locationInModule": {
7231
7540
  "filename": "src/watchful/lambda.ts",
7232
- "line": 12
7541
+ "line": 14
7233
7542
  },
7234
7543
  "name": "WatchLambdaFunctionOptions",
7235
7544
  "properties": [
@@ -7244,7 +7553,7 @@
7244
7553
  "immutable": true,
7245
7554
  "locationInModule": {
7246
7555
  "filename": "src/watchful/lambda.ts",
7247
- "line": 36
7556
+ "line": 38
7248
7557
  },
7249
7558
  "name": "durationThresholdPercent",
7250
7559
  "optional": true,
@@ -7263,7 +7572,7 @@
7263
7572
  "immutable": true,
7264
7573
  "locationInModule": {
7265
7574
  "filename": "src/watchful/lambda.ts",
7266
- "line": 18
7575
+ "line": 20
7267
7576
  },
7268
7577
  "name": "errorsPerMinuteThreshold",
7269
7578
  "optional": true,
@@ -7281,7 +7590,7 @@
7281
7590
  "immutable": true,
7282
7591
  "locationInModule": {
7283
7592
  "filename": "src/watchful/lambda.ts",
7284
- "line": 25
7593
+ "line": 27
7285
7594
  },
7286
7595
  "name": "throttlesPerMinuteThreshold",
7287
7596
  "optional": true,
@@ -7306,7 +7615,7 @@
7306
7615
  "kind": "interface",
7307
7616
  "locationInModule": {
7308
7617
  "filename": "src/watchful/lambda.ts",
7309
- "line": 42
7618
+ "line": 44
7310
7619
  },
7311
7620
  "name": "WatchLambdaFunctionProps",
7312
7621
  "properties": [
@@ -7320,7 +7629,7 @@
7320
7629
  "immutable": true,
7321
7630
  "locationInModule": {
7322
7631
  "filename": "src/watchful/lambda.ts",
7323
- "line": 52
7632
+ "line": 54
7324
7633
  },
7325
7634
  "name": "fn",
7326
7635
  "type": {
@@ -7337,7 +7646,7 @@
7337
7646
  "immutable": true,
7338
7647
  "locationInModule": {
7339
7648
  "filename": "src/watchful/lambda.ts",
7340
- "line": 46
7649
+ "line": 48
7341
7650
  },
7342
7651
  "name": "watchful",
7343
7652
  "type": {
@@ -7870,5 +8179,5 @@
7870
8179
  }
7871
8180
  },
7872
8181
  "version": "0.0.0",
7873
- "fingerprint": "Jy+OKKtMmQl6v7Nh66t68Cg+74EnVQYYcPwEwkdbVvs="
8182
+ "fingerprint": "wQh8wZb2kBC0KyheUi2gQaDene6z7Ds5OQAEc3gNxPA="
7874
8183
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [2.2.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.1.0&sourceBranch=refs%2Ftags%2Fv2.2.0) (2022-06-14)
6
+
7
+
8
+ ### Features
9
+
10
+ * New construct - Opinionated RIO pipeline ([7f6fd07](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/7f6fd0778d498f4d62a9b5def6ac476b95f3ab4e))
11
+ * New construct - Opinionated RIO pipeline ([a290a92](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/a290a92ace145966537e51546449fd64cddd99ad))
12
+ * New construct - Opinionated RIO pipeline ([0e16395](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/0e16395374a83d6a5ff05abc7c68f9141a73c991))
13
+ * New construct - Opinionated RIO pipeline ([ca831c2](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/ca831c2321c0a68ad24ecf80d76dc1d857a72868))
14
+ * New construct - Opinionated RIO pipeline ([e1e5bbf](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/e1e5bbf7444745702fd3cee65ecbf2820e1f4d26))
15
+ * New construct - Opinionated RIO pipeline ([c79b5ba](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/c79b5bad900db68fb06aed8606852618c58cae6f))
16
+ * New construct - Opinionated RIO pipeline ([9a3e471](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/9a3e471508966faa9c0fa391518de6a817545698))
17
+ * New construct - Opinionated RIO pipeline ([5bebea5](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/5bebea5ebec06fbc8c8b637310f9d98a0e98cc48))
18
+ * New construct - Opinionated RIO pipeline ([3f6ac5d](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/3f6ac5d673c083643f5831d52b6a9ff7eacc9698))
19
+ * New construct - Opinionated RIO pipeline ([744d9b9](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/744d9b93bd3816d1f8c588f05456cdbadbdb035f))
20
+ * New construct - Opinionated RIO pipeline ([8872869](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/88728697b502be5e383a91627af4bdc0eff34366))
21
+ * New construct - Opinionated RIO pipeline ([89ac4d8](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/89ac4d84315326b326b0b56e2317ec6f6af03490))
22
+
23
+ ## [2.1.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.6&sourceBranch=refs%2Ftags%2Fv2.1.0) (2022-06-02)
24
+
25
+
26
+ ### Features
27
+
28
+ * :sparkles: Added log monitor error for lambda in watchful ([2e01032](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/2e010327cd11b92f455aace32d10ce47f0afb503))
29
+
30
+ ### [2.0.6](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.5&sourceBranch=refs%2Ftags%2Fv2.0.6) (2022-05-31)
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * Migrate Datadog log monitoring to Datadog's "New Events Feature" ([97a3621](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/97a36210a466d9b13fdf07c4cc859c168159e302))
36
+
5
37
  ### [2.0.5](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.4&sourceBranch=refs%2Ftags%2Fv2.0.5) (2022-05-30)
6
38
 
7
39
 
@@ -0,0 +1,12 @@
1
+ import { Stage, StageProps } from 'aws-cdk-lib';
2
+ import { Construct } from 'constructs';
3
+ import { IAppStackFactory } from './pipeline-stack';
4
+ interface ApplicationProps extends StageProps {
5
+ readonly serviceName: string;
6
+ readonly version: string;
7
+ readonly appStackFactory: IAppStackFactory;
8
+ }
9
+ export declare class Application extends Stage {
10
+ constructor(scope: Construct, id: string, props: ApplicationProps);
11
+ }
12
+ export {};
@@ -0,0 +1,16 @@
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==
@@ -0,0 +1,13 @@
1
+ import * as pipelines from 'aws-cdk-lib/pipelines';
2
+ import { Construct } from 'constructs';
3
+ export interface RioGradleCodeBuildProjectProps {
4
+ input: pipelines.IFileSetProducer;
5
+ cdkOutDirectory?: string;
6
+ buildSpecPath: string;
7
+ serviceName: string;
8
+ hostedZoneName: string;
9
+ env?: Record<string, string>;
10
+ }
11
+ export declare class RioGradleCodeBuildProject extends pipelines.CodeBuildStep {
12
+ constructor(scope: Construct, id: string, props: RioGradleCodeBuildProjectProps);
13
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RioGradleCodeBuildProject = void 0;
4
+ const fs = require("fs");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const codebuild = require("aws-cdk-lib/aws-codebuild");
7
+ const pipelines = require("aws-cdk-lib/pipelines");
8
+ const yaml = require("js-yaml");
9
+ class RioGradleCodeBuildProject extends pipelines.CodeBuildStep {
10
+ constructor(scope, id, props) {
11
+ var _a;
12
+ super(id, {
13
+ input: props.input,
14
+ partialBuildSpec: codebuild.BuildSpec.fromObject(yaml.load(fs.readFileSync(props.buildSpecPath, { encoding: 'utf-8' }))),
15
+ commands: [],
16
+ buildEnvironment: {
17
+ buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2_3,
18
+ computeType: codebuild.ComputeType.LARGE,
19
+ environmentVariables: {
20
+ AWS_ACCOUNT_ID: { value: aws_cdk_lib_1.Stack.of(scope).account },
21
+ SERVICE_NAME: { value: props.serviceName },
22
+ HOSTED_ZONE: { value: props.hostedZoneName },
23
+ },
24
+ },
25
+ primaryOutputDirectory: (_a = props.cdkOutDirectory) !== null && _a !== void 0 ? _a : './',
26
+ env: props.env,
27
+ });
28
+ }
29
+ }
30
+ exports.RioGradleCodeBuildProject = RioGradleCodeBuildProject;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZC1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2Q0FBb0M7QUFDcEMsdURBQXVEO0FBQ3ZELG1EQUFtRDtBQUVuRCxnQ0FBZ0M7QUFXaEMsTUFBYSx5QkFBMEIsU0FBUSxTQUFTLENBQUMsYUFBYTtJQUNwRSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDOztRQUM3RSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQztZQUNsSSxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFO2dCQUNoQixVQUFVLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQ3RELFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ3hDLG9CQUFvQixFQUFFO29CQUNwQixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFO29CQUNsRCxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDMUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUU7aUJBQzdDO2FBQ0Y7WUFDRCxzQkFBc0IsUUFBRSxLQUFLLENBQUMsZUFBZSxtQ0FBSSxJQUFJO1lBQ3JELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUNmLENBQ0EsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBCRCw4REFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvZGVidWlsZCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3RQcm9wcyB7XG4gIGlucHV0OiBwaXBlbGluZXMuSUZpbGVTZXRQcm9kdWNlcjtcbiAgY2RrT3V0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICBidWlsZFNwZWNQYXRoOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmc7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0IGV4dGVuZHMgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGlucHV0OiBwcm9wcy5pbnB1dCxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IGNvZGVidWlsZC5CdWlsZFNwZWMuZnJvbU9iamVjdCh5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKHByb3BzLmJ1aWxkU3BlY1BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIGFzIE9iamVjdCksXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfMyxcbiAgICAgICAgY29tcHV0ZVR5cGU6IGNvZGVidWlsZC5Db21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBBV1NfQUNDT1VOVF9JRDogeyB2YWx1ZTogU3RhY2sub2Yoc2NvcGUpLmFjY291bnQgfSxcbiAgICAgICAgICBTRVJWSUNFX05BTUU6IHsgdmFsdWU6IHByb3BzLnNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgSE9TVEVEX1pPTkU6IHsgdmFsdWU6IHByb3BzLmhvc3RlZFpvbmVOYW1lIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcHJvcHMuY2RrT3V0RGlyZWN0b3J5ID8/ICcuLycsXG4gICAgICBlbnY6IHByb3BzLmVudixcbiAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { Reference } from 'aws-cdk-lib';
2
+ import { Construct } from 'constructs';
3
+ import { DatadogMonitor } from '../../../datadog/datadogMonitor';
4
+ interface DatadogPipelineMonitorProps {
5
+ pipelineName: string | Reference;
6
+ serviceName: string;
7
+ accountId: string;
8
+ }
9
+ export declare class DatadogPipelineErrorAlert extends DatadogMonitor {
10
+ constructor(scope: Construct, id: string, props: DatadogPipelineMonitorProps);
11
+ }
12
+ export declare class DataDogPipelineErrorAlertForVulnerabilityChecks extends DatadogMonitor {
13
+ constructor(scope: Construct, id: string, props: DatadogPipelineMonitorProps);
14
+ }
15
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataDogPipelineErrorAlertForVulnerabilityChecks = exports.DatadogPipelineErrorAlert = void 0;
4
+ const datadogMonitor_1 = require("../../../datadog/datadogMonitor");
5
+ class DatadogPipelineErrorAlert extends datadogMonitor_1.DatadogMonitor {
6
+ constructor(scope, id, props) {
7
+ super(scope, id, {
8
+ serviceName: props.serviceName,
9
+ monitor: {
10
+ type: 'query alert',
11
+ tags: ['cicd'],
12
+ query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
13
+ name: 'CI pipeline status',
14
+ message: '[P5] {{#is_alert}}\\nThe CI build is broken\\n{{/is_alert}} \\n\\n{{#is_alert_recovery}}\\nThe CI build works again.\\n{{/is_alert_recovery}}',
15
+ options: {
16
+ require_full_window: false,
17
+ },
18
+ },
19
+ });
20
+ }
21
+ }
22
+ exports.DatadogPipelineErrorAlert = DatadogPipelineErrorAlert;
23
+ class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogMonitor_1.DatadogMonitor {
24
+ constructor(scope, id, props) {
25
+ super(scope, id, {
26
+ serviceName: props.serviceName,
27
+ alertTypes: ['opsgenie'],
28
+ monitor: {
29
+ type: 'query alert',
30
+ tags: ['cicd'],
31
+ query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
32
+ name: 'Vulnerability checks',
33
+ message: '[P3] Vulnerabilities detected',
34
+ options: {
35
+ require_full_window: false,
36
+ },
37
+ },
38
+ });
39
+ }
40
+ }
41
+ exports.DataDogPipelineErrorAlertForVulnerabilityChecks = DataDogPipelineErrorAlertForVulnerabilityChecks;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tb25pdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9kYXRhZG9nLW1vbml0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9FQUFpRTtBQVFqRSxNQUFhLHlCQUEwQixTQUFRLCtCQUFjO0lBQzNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87Z0JBQ25JLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLE9BQU8sRUFBRSwrSUFBK0k7Z0JBQ3hKLE9BQU8sRUFBRTtvQkFDUCxtQkFBbUIsRUFBRSxLQUFLO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaEJELDhEQWdCQztBQUVELE1BQWEsK0NBQWdELFNBQVEsK0JBQWM7SUFDakYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87Z0JBQ25JLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLE9BQU8sRUFBRTtvQkFDUCxtQkFBbUIsRUFBRSxLQUFLO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakJELDBHQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZmVyZW5jZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9nL2RhdGFkb2dNb25pdG9yJztcblxuaW50ZXJmYWNlIERhdGFkb2dQaXBlbGluZU1vbml0b3JQcm9wcyB7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgUmVmZXJlbmNlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5IGFsZXJ0JyxcbiAgICAgICAgdGFnczogWydjaWNkJ10sXG4gICAgICAgIHF1ZXJ5OiBgbWluKGxhc3RfNW0pOm1pbjpkZXBsb3ltZW50LmNvZGVwaXBlbGluZS5leGVjdXRpb25ze3BpcGVsaW5lX25hbWU6JHtwcm9wcy5waXBlbGluZU5hbWV9LGFjY291bnRfaWQ6JHtwcm9wcy5hY2NvdW50SWR9fSA8IDFgLFxuICAgICAgICBuYW1lOiAnQ0kgcGlwZWxpbmUgc3RhdHVzJyxcbiAgICAgICAgbWVzc2FnZTogJ1tQNV0ge3sjaXNfYWxlcnR9fVxcXFxuVGhlIENJIGJ1aWxkIGlzIGJyb2tlblxcXFxue3svaXNfYWxlcnR9fSBcXFxcblxcXFxue3sjaXNfYWxlcnRfcmVjb3Zlcnl9fVxcXFxuVGhlIENJIGJ1aWxkIHdvcmtzIGFnYWluLlxcXFxue3svaXNfYWxlcnRfcmVjb3Zlcnl9fScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZXF1aXJlX2Z1bGxfd2luZG93OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ1BpcGVsaW5lTW9uaXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbJ29wc2dlbmllJ10sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIHR5cGU6ICdxdWVyeSBhbGVydCcsXG4gICAgICAgIHRhZ3M6IFsnY2ljZCddLFxuICAgICAgICBxdWVyeTogYG1pbihsYXN0XzVtKTptaW46ZGVwbG95bWVudC5jb2RlcGlwZWxpbmUuZXhlY3V0aW9uc3twaXBlbGluZV9uYW1lOiR7cHJvcHMucGlwZWxpbmVOYW1lfSxhY2NvdW50X2lkOiR7cHJvcHMuYWNjb3VudElkfX0gPCAxYCxcbiAgICAgICAgbmFtZTogJ1Z1bG5lcmFiaWxpdHkgY2hlY2tzJyxcbiAgICAgICAgbWVzc2FnZTogJ1tQM10gVnVsbmVyYWJpbGl0aWVzIGRldGVjdGVkJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHJlcXVpcmVfZnVsbF93aW5kb3c6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export * from './pipeline-stack';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./pipeline-stack"), exports);
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS1zdGFjayc7XG4iXX0=
@@ -0,0 +1,105 @@
1
+ import { Stack, StackProps } from 'aws-cdk-lib';
2
+ import { Construct } from 'constructs';
3
+ /**
4
+ * @struct
5
+ */
6
+ export interface PipelineStackProps extends StackProps {
7
+ /**
8
+ * The name of the service
9
+ * - This has to be the same name as the repository as the s3 trigger file created by the bitbucket-integration uses this as a prefix
10
+ * - The serviceName is available as an environment variable SERVICE_NAME in the CodeBuildStep
11
+ * - The serviceName is available in the AppStackProps in the appStackFactory
12
+ * - The serviceName is available as stackName property in the AppStackProps in the appStackFactory. I.e. the stack is named after the service
13
+ * - The serviceName is handed over to all Datadog monitors
14
+ * - RIO convention is that uploaded license-check-files are named after the service, i.e. serviceName.txt
15
+ */
16
+ readonly serviceName: string;
17
+ /**
18
+ * Provider for appStack to be deployed.
19
+ *
20
+ * This acts as a wrapper for all resources you want to deploy via the pipeline.
21
+ */
22
+ readonly appStackFactory: IAppStackFactory;
23
+ /**
24
+ * Defines which kind of pipeline is deployed.
25
+ */
26
+ readonly pipelineType: PipelineType;
27
+ /**
28
+ * Path to a custom buildspec.yaml that is used if provided.
29
+ *
30
+ * A pre-defined buildspec.yaml fitting the pipelineType is used if not provided.
31
+ */
32
+ readonly customBuildspecPath?: string;
33
+ /**
34
+ * Path to secrets file containing encrypted secrets.
35
+ *
36
+ * The RioSecretsDeployStep is added prior to deployment of the AppStack if a path is provided.
37
+ *
38
+ * No secrets are deployed if no path is provided.
39
+ */
40
+ readonly secretsDeployStepProps?: PipelineStackRioSecretsDeployStepProps;
41
+ }
42
+ /**
43
+ * Provider interface to create the AppStack within the specific scope
44
+ *
45
+ * Simply place the AppStack creation into the create-method:
46
+ * @example
47
+ *
48
+ * // Use e.g. within ApplicationProps as JSONObject:
49
+ * { create: (construct, props) => new Stack(construct, 'AppStack', props) }
50
+ *
51
+ * // or simply as class interface within your stack implementation:
52
+ * class PipelineStage extends Stage implements IAppStackFactory {
53
+ * constructor(scope: Construct, id: string, props: StageProps) {
54
+ * super(scope, id, props);
55
+ * // your stage definitiom
56
+ * }
57
+ *
58
+ * create(scope: Construct, props: AppStackProps): void {
59
+ * // app stack initiation goes in here
60
+ * }
61
+ * }
62
+ */
63
+ export interface IAppStackFactory {
64
+ /**
65
+ * Factory method, being invoked with the specific scope during pipeline instantiation
66
+ *
67
+ * @param scope the parent construct for the app stack
68
+ * @param props the app stacks properties
69
+ */
70
+ create(scope: Construct, props: AppStackProps): void;
71
+ }
72
+ export interface AppStackProps extends StackProps {
73
+ readonly serviceName: string;
74
+ readonly version: string;
75
+ }
76
+ /**
77
+ * Selected properties being handed over to RioSecretsDeployStep.
78
+ *
79
+ * @see rio.RioSecretsDeployStep
80
+ * @see rio.RioSecretsDeployStepProps
81
+ */
82
+ export interface PipelineStackRioSecretsDeployStepProps {
83
+ readonly secretsFilePath: string;
84
+ }
85
+ export declare enum PipelineType {
86
+ /**
87
+ * Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
88
+ *
89
+ * Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and
90
+ * branch pipeline and includes the following steps
91
+ * - build and test of the artifact via command "./gradlew clean build".
92
+ * <p> This gradle command must be provided by the gradle project.
93
+ * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
94
+ * <p> This gradle command must be provided by the gradle project.
95
+ * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
96
+ * - build the container image via command "./gradlew jibBuildTar".
97
+ * <p> This gradle command must be provided by the gradle project.
98
+ */
99
+ STANDARD_GRADLE = "STANDARD_GRADLE"
100
+ }
101
+ export declare class PipelineStack extends Stack {
102
+ private static addLifecycleRuleArtifactBucket;
103
+ constructor(scope: Construct, id: string, props: PipelineStackProps);
104
+ private renamePipelineToLowerCase;
105
+ }
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PipelineStack = exports.PipelineType = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const path = require("path");
7
+ const cdk = require("aws-cdk-lib");
8
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
9
+ const codepipeline = require("aws-cdk-lib/aws-codepipeline");
10
+ const codepipeline_actions = require("aws-cdk-lib/aws-codepipeline-actions");
11
+ const events = require("aws-cdk-lib/aws-events");
12
+ const targets = require("aws-cdk-lib/aws-events-targets");
13
+ const s3 = require("aws-cdk-lib/aws-s3");
14
+ const ssm = require("aws-cdk-lib/aws-ssm");
15
+ const pipelines = require("aws-cdk-lib/pipelines");
16
+ const pipelines_1 = require("aws-cdk-lib/pipelines");
17
+ const rio = require("../../../index");
18
+ const upperToLower_1 = require("../../../watchful/upperToLower");
19
+ const application_stage_1 = require("./application-stage");
20
+ const build_project_1 = require("./build-project");
21
+ const datadog_monitors_1 = require("./datadog-monitors");
22
+ var PipelineType;
23
+ (function (PipelineType) {
24
+ /**
25
+ * Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
26
+ *
27
+ * Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and
28
+ * branch pipeline and includes the following steps
29
+ * - build and test of the artifact via command "./gradlew clean build".
30
+ * <p> This gradle command must be provided by the gradle project.
31
+ * - license-check and upload of license-check-file via command "./gradlew checkLicenses".
32
+ * <p> This gradle command must be provided by the gradle project.
33
+ * - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
34
+ * - build the container image via command "./gradlew jibBuildTar".
35
+ * <p> This gradle command must be provided by the gradle project.
36
+ */
37
+ PipelineType["STANDARD_GRADLE"] = "STANDARD_GRADLE";
38
+ })(PipelineType = exports.PipelineType || (exports.PipelineType = {}));
39
+ class PipelineStack extends aws_cdk_lib_1.Stack {
40
+ constructor(scope, id, props) {
41
+ super(scope, id, props);
42
+ // Creating the main pipeline
43
+ const bucket = s3.Bucket.fromBucketName(this, 'TriggerBucket', aws_cdk_lib_1.Fn.importValue('bitbucket-integration-s3-bucket'));
44
+ const hostedZone = rio.RioLandingZone.getDefaultHostedZone(this);
45
+ const inputMasterTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.MASTER_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
46
+ const inputBranchTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.BRANCH_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
47
+ const ossLicensesBucketParameter = ssm.StringParameter.fromStringParameterAttributes(this, 'OssLicensesBucketParameter', {
48
+ parameterName: '/config/oss-licenses/bucket-name',
49
+ });
50
+ const ossLicensesBucket = s3.Bucket.fromBucketName(this, 'OssLicensesBucket', ossLicensesBucketParameter.stringValue);
51
+ const serviceKeystorePassword = ssm.StringParameter.fromSecureStringParameterAttributes(this, 'KeystorePassword', {
52
+ parameterName: `/config/${props.serviceName}/service-keystore-password`,
53
+ version: 1,
54
+ });
55
+ const accountNameParameter = ssm.StringParameter.fromStringParameterName(this, 'AccountNameParameter', '/config/account/name');
56
+ const gradlebuild = new build_project_1.RioGradleCodeBuildProject(this, 'GradleBuild', {
57
+ input: inputMasterTriggerFile,
58
+ cdkOutDirectory: 'infrastructure/cdk.out',
59
+ buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
60
+ hostedZoneName: hostedZone.zoneName,
61
+ serviceName: props.serviceName,
62
+ });
63
+ const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
64
+ synth: gradlebuild,
65
+ });
66
+ // CloudAssemblyArtifacts must be smaller than 256MB. Due to the gradle artifact we are exceeding this limit and pipeline fails in deployment step.
67
+ // Issue is known and not fixed for already some years. See: https://github.com/aws/aws-cdk/issues/9917
68
+ // Dirty fix: Assets are already uploaded and thus not needed. Remove them from pipeline artifact.
69
+ const stripAssetsStep = new pipelines_1.CodeBuildStep('StripAssetsFromAssembly', {
70
+ input: pipeline.cloudAssemblyFileSet,
71
+ commands: [
72
+ 'S3_PATH=${CODEBUILD_SOURCE_VERSION#"arn:aws:s3:::"}',
73
+ 'ZIP_ARCHIVE=$(basename $S3_PATH)',
74
+ 'rm -rfv asset.*',
75
+ 'zip -r -q -A $ZIP_ARCHIVE *',
76
+ 'aws s3 cp $ZIP_ARCHIVE s3://$S3_PATH',
77
+ ],
78
+ });
79
+ pipeline.addWave('BeforeDeploy', { pre: [stripAssetsStep] });
80
+ pipeline.addStage(new application_stage_1.Application(this, 'DeployApplicationStacks', {
81
+ appStackFactory: props.appStackFactory,
82
+ serviceName: props.serviceName,
83
+ version: codepipeline.GlobalVariables.executionId,
84
+ }), {
85
+ pre: props.secretsDeployStepProps ? [
86
+ new rio.RioSecretsDeployStep(this, 'DeploySecrets', { ...props.secretsDeployStepProps, input: inputMasterTriggerFile }),
87
+ ] : undefined,
88
+ });
89
+ pipeline.buildPipeline();
90
+ const rule = new events.Rule(this, 'PipelineSchedule', { schedule: events.Schedule.expression('cron(0 9 ? * 2#1 *)') });
91
+ rule.addTarget(new targets.CodePipeline(pipeline.pipeline));
92
+ PipelineStack.addLifecycleRuleArtifactBucket(pipeline);
93
+ ossLicensesBucket.grantReadWrite(gradlebuild);
94
+ ossLicensesBucketParameter.grantRead(gradlebuild);
95
+ serviceKeystorePassword.grantRead(gradlebuild);
96
+ accountNameParameter.grantRead(gradlebuild);
97
+ pipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsStep.project);
98
+ // Branch pipeline
99
+ const branchBuild = new build_project_1.RioGradleCodeBuildProject(this, 'BranchBuild', {
100
+ input: inputBranchTriggerFile,
101
+ cdkOutDirectory: 'infrastructure/cdk.out',
102
+ buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
103
+ hostedZoneName: hostedZone.zoneName,
104
+ serviceName: props.serviceName,
105
+ });
106
+ const branchPipeline = new pipelines.CodePipeline(this, 'BranchPipeline', {
107
+ synth: branchBuild,
108
+ selfMutation: false,
109
+ });
110
+ branchPipeline.addWave('BranchBuild').addPost(branchBuild);
111
+ branchPipeline.buildPipeline();
112
+ PipelineStack.addLifecycleRuleArtifactBucket(branchPipeline);
113
+ ossLicensesBucket.grantReadWrite(branchBuild);
114
+ ossLicensesBucketParameter.grantRead(branchBuild);
115
+ serviceKeystorePassword.grantRead(branchBuild);
116
+ accountNameParameter.grantRead(branchBuild);
117
+ // Vulnerability Pipeline
118
+ const vulnerabilityBuild = new build_project_1.RioGradleCodeBuildProject(this, 'VulnerabilityChecks', {
119
+ input: inputMasterTriggerFile,
120
+ buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec-vulnerability-checks.yaml'),
121
+ hostedZoneName: hostedZone.zoneName,
122
+ serviceName: props.serviceName,
123
+ });
124
+ const vulnerabilityPipeline = new pipelines.CodePipeline(this, 'VulnerabilityPipeline', {
125
+ synth: vulnerabilityBuild,
126
+ selfMutation: false,
127
+ });
128
+ vulnerabilityPipeline.addWave('VulnerabilityChecks').addPost(vulnerabilityBuild);
129
+ vulnerabilityPipeline.buildPipeline();
130
+ const vulnerabilityRule = new events.Rule(this, 'VulnerabilityPipelineSchedule', { schedule: events.Schedule.expression('cron(0 5 ? * MON-FRI *)') });
131
+ vulnerabilityRule.addTarget(new targets.CodePipeline(vulnerabilityPipeline.pipeline));
132
+ PipelineStack.addLifecycleRuleArtifactBucket(vulnerabilityPipeline);
133
+ new datadog_monitors_1.DatadogPipelineErrorAlert(this, 'DatadogPipelineErrorMonitor', {
134
+ serviceName: props.serviceName,
135
+ pipelineName: this.renamePipelineToLowerCase(pipeline),
136
+ accountId: this.account,
137
+ });
138
+ new datadog_monitors_1.DataDogPipelineErrorAlertForVulnerabilityChecks(this, 'DataDogPipelineErrorForVulnerabilityChecksMonitor', {
139
+ serviceName: props.serviceName,
140
+ pipelineName: this.renamePipelineToLowerCase(vulnerabilityPipeline),
141
+ accountId: this.account,
142
+ });
143
+ }
144
+ static addLifecycleRuleArtifactBucket(pipeline) {
145
+ const artifactsBucket = pipeline.pipeline.artifactBucket;
146
+ artifactsBucket.addLifecycleRule({
147
+ enabled: true,
148
+ expiration: aws_cdk_lib_1.Duration.days(90),
149
+ });
150
+ }
151
+ renamePipelineToLowerCase(pipeline) {
152
+ const upperToLowerCr = new cdk.CustomResource(this, `${pipeline.node.id}-UpperToLower`, {
153
+ resourceType: 'Custom::UpperToLower',
154
+ serviceToken: upperToLower_1.UpperToLower.getOrCreate(this).provider.serviceToken,
155
+ properties: {
156
+ Upper: pipeline.pipeline.pipelineName,
157
+ },
158
+ });
159
+ return upperToLowerCr.getAtt('Lower');
160
+ }
161
+ }
162
+ exports.PipelineStack = PipelineStack;
163
+ _a = JSII_RTTI_SYMBOL_1;
164
+ PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDZDQUF5RTtBQUN6RSw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLGlEQUFpRDtBQUNqRCwwREFBMEQ7QUFDMUQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFDbkQscURBQXNEO0FBRXRELHNDQUFzQztBQUN0QyxpRUFBOEQ7QUFDOUQsMkRBQWtEO0FBQ2xELG1EQUE0RDtBQUM1RCx5REFBZ0g7QUE0RmhILElBQVksWUFnQlg7QUFoQkQsV0FBWSxZQUFZO0lBRXRCOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILG1EQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFoQlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFnQnZCO0FBRUQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFVdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4Qiw2QkFBNkI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcs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WUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxZQUFZLEVBQUUsMkJBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDbEUsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVk7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7QUExSkgsc0NBMkpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlZmVyZW5jZSwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmVfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHJpbyBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBVcHBlclRvTG93ZXIgfSBmcm9tICcuLi8uLi8uLi93YXRjaGZ1bC91cHBlclRvTG93ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uLXN0YWdlJztcbmltcG9ydCB7IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QgfSBmcm9tICcuL2J1aWxkLXByb2plY3QnO1xuaW1wb3J0IHsgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCwgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgfSBmcm9tICcuL2RhdGFkb2ctbW9uaXRvcnMnO1xuXG4vKipcbiAgKiBAc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKiAtIFRoaXMgaGFzIHRvIGJlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHJlcG9zaXRvcnkgYXMgdGhlIHMzIHRyaWdnZXIgZmlsZSBjcmVhdGVkIGJ5IHRoZSBiaXRidWNrZXQtaW50ZWdyYXRpb24gdXNlcyB0aGlzIGFzIGEgcHJlZml4XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRVJWSUNFX05BTUUgaW4gdGhlIENvZGVCdWlsZFN0ZXBcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnlcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIHN0YWNrTmFtZSBwcm9wZXJ0eSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5LiBJLmUuIHRoZSBzdGFjayBpcyBuYW1lZCBhZnRlciB0aGUgc2VydmljZVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBoYW5kZWQgb3ZlciB0byBhbGwgRGF0YWRvZyBtb25pdG9yc1xuICAgKiAtIFJJTyBjb252ZW50aW9uIGlzIHRoYXQgdXBsb2FkZWQgbGljZW5zZS1jaGVjay1maWxlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2UsIGkuZS4gc2VydmljZU5hbWUudHh0XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYXBwU3RhY2sgdG8gYmUgZGVwbG95ZWQuXG4gICAqXG4gICAqIFRoaXMgYWN0cyBhcyBhIHdyYXBwZXIgZm9yIGFsbCByZXNvdXJjZXMgeW91IHdhbnQgdG8gZGVwbG95IHZpYSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hpY2gga2luZCBvZiBwaXBlbGluZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGEgY3VzdG9tIGJ1aWxkc3BlYy55YW1sIHRoYXQgaXMgdXNlZCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21CdWlsZHNwZWNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNlY3JldHMgZmlsZSBjb250YWluaW5nIGVuY3J5cHRlZCBzZWNyZXRzLlxuICAgKlxuICAgKiBUaGUgUmlvU2VjcmV0c0RlcGxveVN0ZXAgaXMgYWRkZWQgcHJpb3IgdG8gZGVwbG95bWVudCBvZiB0aGUgQXBwU3RhY2sgaWYgYSBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBObyBzZWNyZXRzIGFyZSBkZXBsb3llZCBpZiBubyBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcz86IFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiB7IGNyZWF0ZTogKGNvbnN0cnVjdCwgcHJvcHMpID0+IG5ldyBTdGFjayhjb25zdHJ1Y3QsICdBcHBTdGFjaycsIHByb3BzKSB9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3Rvcnkge1xuICogICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhZ2VQcm9wcykge1xuICogICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICogICAgIC8vIHlvdXIgc3RhZ2UgZGVmaW5pdGlvbVxuICogICB9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAqICAgICAvLyBhcHAgc3RhY2sgaW5pdGlhdGlvbiBnb2VzIGluIGhlcmVcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBwYXJlbnQgY29uc3RydWN0IGZvciB0aGUgYXBwIHN0YWNrXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgYXBwIHN0YWNrcyBwcm9wZXJ0aWVzXG4gICAqL1xuICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMgKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcblxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay4gQmUgYXdhcmU6IFRoZSBwcm92aWRlZCBzZXJ2aWNlIHdvbid0IGhhdmUgYWNjZXNzIHRvIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRSA9ICdTVEFOREFSRF9HUkFETEUnLFxufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RzQnVja2V0ID0gcGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQ7XG4gICAgKGFydGlmYWN0c0J1Y2tldCBhcyBzMy5CdWNrZXQpLmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoOTApLFxuICAgIH0pO1xuICB9XG5cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBDcmVhdGluZyB0aGUgbWFpbiBwaXBlbGluZVxuICAgIGNvbnN0IGJ1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnVHJpZ2dlckJ1Y2tldCcsIEZuLmltcG9ydFZhbHVlKCdiaXRidWNrZXQtaW50ZWdyYXRpb24tczMtYnVja2V0JykpO1xuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgY29uc3QgaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcbiAgICBjb25zdCBpbnB1dEJyYW5jaFRyaWdnZXJGaWxlID0gcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5zMyhidWNrZXQsIGAke3Byb3BzLnNlcnZpY2VOYW1lfS90cmlnZ2VyLyR7cmlvLlRyaWdnZXJLZXkuQlJBTkNIX1JFUE99YCwgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH0pO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmljZUtleXN0b3JlUGFzc3dvcmQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdLZXlzdG9yZVBhc3N3b3JkJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogYC9jb25maWcvJHtwcm9wcy5zZXJ2aWNlTmFtZX0vc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWVQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnR3JhZGxlQnVpbGQnLCB7XG4gICAgICBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGNka091dERpcmVjdG9yeTogJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgYnVpbGRTcGVjUGF0aDogcHJvcHMuY3VzdG9tQnVpbGRzcGVjUGF0aCB8fCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnYnVpbGRzcGVjLnlhbWwnKSxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh0aGlzLCAnUGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogZ3JhZGxlYnVpbGQsXG4gICAgfSk7XG5cbiAgICAvLyBDbG91ZEFzc2VtYmx5QXJ0aWZhY3RzIG11c3QgYmUgc21hbGxlciB0aGFuIDI1Nk1CLiBEdWUgdG8gdGhlIGdyYWRsZSBhcnRpZmFjdCB3ZSBhcmUgZXhjZWVkaW5nIHRoaXMgbGltaXQgYW5kIHBpcGVsaW5lIGZhaWxzIGluIGRlcGxveW1lbnQgc3RlcC5cbiAgICAvLyBJc3N1ZSBpcyBrbm93biBhbmQgbm90IGZpeGVkIGZvciBhbHJlYWR5IHNvbWUgeWVhcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgLy8gRGlydHkgZml4OiBBc3NldHMgYXJlIGFscmVhZHkgdXBsb2FkZWQgYW5kIHRodXMgbm90IG5lZWRlZC4gUmVtb3ZlIHRoZW0gZnJvbSBwaXBlbGluZSBhcnRpZmFjdC5cbiAgICBjb25zdCBzdHJpcEFzc2V0c1N0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChcbiAgICAgICdTdHJpcEFzc2V0c0Zyb21Bc3NlbWJseScsIHtcbiAgICAgICAgaW5wdXQ6IHBpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICAgJ1pJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpJyxcbiAgICAgICAgICAncm0gLXJmdiBhc3NldC4qJyxcbiAgICAgICAgICAnemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqJyxcbiAgICAgICAgICAnYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoJ0JlZm9yZURlcGxveScsIHsgcHJlOiBbc3RyaXBBc3NldHNTdGVwXSB9KTtcblxuICAgIHBpcGVsaW5lLmFkZFN0YWdlKG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnRGVwbG95QXBwbGljYXRpb25TdGFja3MnLCB7XG4gICAgICBhcHBTdGFja0ZhY3Rvcnk6IHByb3BzLmFwcFN0YWNrRmFjdG9yeSxcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb246IGNvZGVwaXBlbGluZS5HbG9iYWxWYXJpYWJsZXMuZXhlY3V0aW9uSWQsXG4gICAgfSksIHtcbiAgICAgIHByZTogcHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA/IFtcbiAgICAgICAgbmV3IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95U2VjcmV0cycsIHsgLi4ucHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcywgaW5wdXQ6IGlucHV0TWFzdGVyVHJpZ2dlckZpbGUgfSksXG4gICAgICBdIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1BpcGVsaW5lU2NoZWR1bGUnLCB7IHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbignY3JvbigwIDkgPyAqIDIjMSAqKScpIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShwaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQocGlwZWxpbmUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGdyYWRsZWJ1aWxkKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoZ3JhZGxlYnVpbGQpO1xuICAgIHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChncmFkbGVidWlsZCk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGdyYWRsZWJ1aWxkKTtcbiAgICBwaXBlbGluZS5waXBlbGluZS5hcnRpZmFjdEJ1Y2tldC5ncmFudFJlYWRXcml0ZShzdHJpcEFzc2V0c1N0ZXAucHJvamVjdCk7XG5cbiAgICAvLyBCcmFuY2ggcGlwZWxpbmVcbiAgICBjb25zdCBicmFuY2hCdWlsZCA9IG5ldyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0KHRoaXMsICdCcmFuY2hCdWlsZCcsIHtcbiAgICAgIGlucHV0OiBpbnB1dEJyYW5jaFRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICBidWlsZFNwZWNQYXRoOiBwcm9wcy5jdXN0b21CdWlsZHNwZWNQYXRoIHx8IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMueWFtbCcpLFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh0aGlzLCAnQnJhbmNoUGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIGJyYW5jaFBpcGVsaW5lLmFkZFdhdmUoJ0JyYW5jaEJ1aWxkJykuYWRkUG9zdChicmFuY2hCdWlsZCk7XG4gICAgYnJhbmNoUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQoYnJhbmNoUGlwZWxpbmUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGJyYW5jaEJ1aWxkKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcblxuICAgIC8vIFZ1bG5lcmFiaWxpdHkgUGlwZWxpbmVcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5QnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnVnVsbmVyYWJpbGl0eUNoZWNrcycsIHtcbiAgICAgIGlucHV0OiBpbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgYnVpbGRTcGVjUGF0aDogcHJvcHMuY3VzdG9tQnVpbGRzcGVjUGF0aCB8fCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnYnVpbGRzcGVjLXZ1bG5lcmFiaWxpdHktY2hlY2tzLnlhbWwnKSxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdWdWxuZXJhYmlsaXR5UGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZVNjaGVkdWxlJywgeyBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ2Nyb24oMCA1ID8gKiBNT04tRlJJICopJykgfSk7XG4gICAgdnVsbmVyYWJpbGl0eVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIFBpcGVsaW5lU3RhY2suYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHZ1bG5lcmFiaWxpdHlQaXBlbGluZSk7XG5cbiAgICBuZXcgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCh0aGlzLCAnRGF0YWRvZ1BpcGVsaW5lRXJyb3JNb25pdG9yJywge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLnJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMucmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpOiBSZWZlcmVuY2Uge1xuICAgIGNvbnN0IHVwcGVyVG9Mb3dlckNyID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtwaXBlbGluZS5ub2RlLmlkfS1VcHBlclRvTG93ZXJgLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlVwcGVyVG9Mb3dlcicsXG4gICAgICBzZXJ2aWNlVG9rZW46IFVwcGVyVG9Mb3dlci5nZXRPckNyZWF0ZSh0aGlzKS5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFVwcGVyOiBwaXBlbGluZS5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiB1cHBlclRvTG93ZXJDci5nZXRBdHQoJ0xvd2VyJyk7XG4gIH1cbn1cbiJdfQ==
@@ -52,7 +52,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
52
52
  monitor: {
53
53
  name: 'Log quota almost reached',
54
54
  type: 'metric alert',
55
- query: `sum(last_5m):sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false,datadog_index:${props.indexName}}.as_count().rollup(sum, 86400) >= ${alertThreshold}`,
55
+ query: `sum(last_1d):sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false,datadog_index:${props.indexName}}.as_count() >= ${alertThreshold}`,
56
56
  message: `[P3] Inspect your log volume at ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)} or adapt the log quota at ${datadogLogsIndexesConfigurationDeepLink}`,
57
57
  options: {
58
58
  thresholds: {
@@ -60,7 +60,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
60
60
  warning: warningThreshold,
61
61
  },
62
62
  include_tags: false,
63
- notify_no_data: props.sparseLogging ? false : true,
63
+ notify_no_data: !props.sparseLogging,
64
64
  no_data_timeframe: 24 * 60,
65
65
  },
66
66
  },
@@ -79,7 +79,7 @@ class DatadogLogsAnomalyMonitor extends datadogMonitor_1.DatadogMonitor {
79
79
  message: `[P4] Logs are getting out of control: ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)}`,
80
80
  options: {
81
81
  include_tags: false,
82
- notify_no_data: props.sparseLogging ? false : true,
82
+ notify_no_data: !props.sparseLogging,
83
83
  threshold_windows: {
84
84
  trigger_window: 'last_15m',
85
85
  recovery_window: 'last_15m',
@@ -113,4 +113,4 @@ function datadogLogsSearchWithIndexFilterDeepLink(indexName) {
113
113
  return `https://app.datadoghq.eu/logs?index=${indexName}`;
114
114
  }
115
115
  const datadogLogsIndexesConfigurationDeepLink = 'https://app.datadoghq.eu/logs/pipelines/indexes';
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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VztZQUM5QixVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsd0NBQXdDLEtBQUssQ0FBQyxTQUFTLHVEQUF1RDtnQkFDckgsT0FBTyxFQUFFLDBGQUEwRix1Q0FBdUMsdUVBQXVFO2dCQUNqTixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLHdDQUF3QyxDQUFDLFNBQWlCO0lBQ2pFLE9BQU8sdUNBQXVDLFNBQVMsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLHVDQUF1QyxHQUFHLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4vZGF0YWRvZ01vbml0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZSBpbiBEYXRhZG9nLiBDYW4gYmUgdXNlZCB0byBxdWVyeSB0aGUgbW9uaXRvcnMuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRGF0YWRvZyBpbmRleC5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdG8gdXNlIGZvciBhbGVydGluZy5cbiAgICogRm9yIE9wc0dlbmllLCB5b3UgbmVlZCB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlICdvcHNnZW5pZS1pbnRlZ3JhdGlvbicgYWNjb3VudCBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBhbGVydFR5cGU6IERhdGFkb2dBbGVydFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBkYWlseUxvZ1F1b3RhOiBEYXRhZG9nTG9nUXVvdGFQcm9wcztcblxuICAvKipcbiAgICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBsb2cgbWVzc2FnZSB3aXRoaW4gMjQgaG91cnMgb3IgbWlzc2luZyBoaXN0b3JpY2FsIGRhdGEuXG4gICAqIFdpdGhvdXQgc2V0dGluZyB0aGlzIHZhbHVlIGl0IHdpbGwgbGVhZCB0byBhbiBlbXB0eSByZXN1bHQgYW5kIHRoZXJlZm9yZSB0cmlnZ2VyIGFuIGFsZXJ0LlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcGFyc2VMb2dnaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nTG9nUXVvdGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGFpbHkgbG9nIHF1b3RhIGZvciB0aGUgdGVhbS1zcGVjaWZpYyBpbmRleCBpbiBtaWxsaW9uIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlSW5NaWxsaW9uRXZlbnRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB3YXJuaW5nIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqL1xuICByZWFkb25seSB3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGFybSB0aHJlc2hvbGQgZm9yIHRoZSBkYWlseSBsb2cgcXVvdGEgbW9uaXRvciBpbiBwZXJjZW50LlxuICAgKiBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3YXJuaW5nIHRocmVzaG9sZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzaWMgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmcgZm9yIGEgRGF0YWRvZyBsb2dzIGluZGV4LlxuICogSXQgZm9sbG93cyB0aGUgRGF0YWRvZyBndWlkZSBhdCBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9sb2dzL2d1aWRlL2xvZ3MtbW9uaXRvcnMtb24tdm9sdW1lcy9cbiAqIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG1vbml0b3JzLlxuICogICAxLiBBIG1ldHJpYyBhbGVydCB0aGF0IGZpcmVzIHdoZW4geW91IHJlYWNoIGEgY2VydGFpbiB0aHJlc2hvbGQgb2YgeW91ciBkYWlseSBsb2cgcXVvdGEuXG4gKiAgIDIuIEFuIGFub21hbHkgbW9uaXRvciB0aGF0IGRldGVjdHMgbG9nIGFtb3VudCBzcGlrZXMuXG4gKiAgIDMuIEFuIGV2ZW50IGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgaGl0IHRoZSBkYWlseSBsb2cgcXVvdGEuXG4gKlxuICogQSBkYXRhZG9nIGxvZyBpbmRleCBpcyB0ZWFtIHNwZWNpZmljIGFuZCB0aHVzIHRoZSBtb25pdG9yIG5lZWRzIHRvIGJlIGRlcGxveWVkIGp1c3Qgb25jZSBwZXIgaW5kZXgvdGVhbS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ3NBbm9tYWx5TW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0FsZXJ0QW5vbWFseU1vbml0b3InLCBwcm9wcyk7XG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZE1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZFYyTW9uaXRvcicsIHByb3BzKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHtcbiAgICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCA8IDAgfHwgcHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW3dhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnRdOiBleHBlY3RpbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA8IDAgfHwgcHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFthbGVydFRocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgcHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50KSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3dhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnRdJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgY29uc3QgbG9nUXVvdGFJbkV2ZW50cyA9IE1hdGguZmxvb3IocHJvcHMuZGFpbHlMb2dRdW90YS52YWx1ZUluTWlsbGlvbkV2ZW50cyAqIDFfMDAwXzAwMCk7XG4gICAgY29uc3Qgd2FybmluZ1RocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcbiAgICBjb25zdCBhbGVydFRocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IC8gMTAwKSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIHF1b3RhIGFsbW9zdCByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgc3VtKGxhc3RfNW0pOnN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLnJvbGx1cChzdW0sIDg2NDAwKSA+PSAke2FsZXJ0VGhyZXNob2xkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDNdIEluc3BlY3QgeW91ciBsb2cgdm9sdW1lIGF0ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9IG9yIGFkYXB0IHRoZSBsb2cgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICAgIGNyaXRpY2FsOiBhbGVydFRocmVzaG9sZCxcbiAgICAgICAgICAgIHdhcm5pbmc6IHdhcm5pbmdUaHJlc2hvbGQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmNsdWRlX3RhZ3M6IGZhbHNlLFxuICAgICAgICAgIG5vdGlmeV9ub19kYXRhOiBwcm9wcy5zcGFyc2VMb2dnaW5nID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgIG5vX2RhdGFfdGltZWZyYW1lOiAyNCAqIDYwLCAvLyAxIGRheVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBhbW91bnQgaXMgcmlzaW5nIHRvIHVuZXhwZWN0ZWQgbGV2ZWxzJyxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgYXZnKGxhc3RfNGgpOmFub21hbGllcyhzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ldmVudHN7ZGF0YWRvZ19pc19leGNsdWRlZDpmYWxzZSxkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfX0uYXNfY291bnQoKSwgJ3JvYnVzdCcsIDIsIGRpcmVjdGlvbj0nYWJvdmUnLCBhbGVydF93aW5kb3c9J2xhc3RfMTVtJywgaW50ZXJ2YWw9NjAsIGNvdW50X2RlZmF1bHRfemVybz0ndHJ1ZScsIHNlYXNvbmFsaXR5PSd3ZWVrbHknLCB0aW1lem9uZT0nZXVyb3BlL2JlcmxpbicpID49IDFgLFxuICAgICAgICBtZXNzYWdlOiBgW1A0XSBMb2dzIGFyZSBnZXR0aW5nIG91dCBvZiBjb250cm9sOiAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBpbmNsdWRlX3RhZ3M6IGZhbHNlLFxuICAgICAgICAgIG5vdGlmeV9ub19kYXRhOiBwcm9wcy5zcGFyc2VMb2dnaW5nID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgIHRocmVzaG9sZF93aW5kb3dzOiB7XG4gICAgICAgICAgICB0cmlnZ2VyX3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICAgIHJlY292ZXJ5X3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ2V2ZW50LXYyIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBldmVudHMoXCJzb3VyY2U6ZGF0YWRvZyBkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBEYWlseSBxdW90YSByZWFjaGVkXCIpLnJvbGx1cChcImNvdW50XCIpLmxhc3QoXCI1bVwiKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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RUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSx3Q0FBd0MsS0FBSyxDQUFDLFNBQVMsdURBQXVEO2dCQUNySCxPQUFPLEVBQUUsMEZBQTBGLHVDQUF1Qyx1RUFBdUU7Z0JBQ2pOLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsRUFBRTtvQkFDYixVQUFVLEVBQUU7d0JBQ1YsUUFBUSxFQUFFLENBQUM7cUJBQ1o7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFNBQVMsd0NBQXdDLENBQUMsU0FBaUI7SUFDakUsT0FBTyx1Q0FBdUMsU0FBUyxFQUFFLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sdUNBQXVDLEdBQUcsaURBQWlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dNb25pdG9yLCBEYXRhZG9nQWxlcnRUeXBlIH0gZnJvbSAnLi9kYXRhZG9nTW9uaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzIHtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlIGluIERhdGFkb2cuIENhbiBiZSB1c2VkIHRvIHF1ZXJ5IHRoZSBtb25pdG9ycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBEYXRhZG9nIGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0byB1c2UgZm9yIGFsZXJ0aW5nLlxuICAgKiBGb3IgT3BzR2VuaWUsIHlvdSBuZWVkIHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgJ29wc2dlbmllLWludGVncmF0aW9uJyBhY2NvdW50IG1vZHVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VHlwZTogRGF0YWRvZ0FsZXJ0VHlwZTtcblxuICAvKipcbiAgICogVGhlIGRhaWx5IGxvZyBxdW90YSBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRhaWx5TG9nUXVvdGE6IERhdGFkb2dMb2dRdW90YVByb3BzO1xuXG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGxvZyBtZXNzYWdlIHdpdGhpbiAyNCBob3VycyBvciBtaXNzaW5nIGhpc3RvcmljYWwgZGF0YS5cbiAgICogV2l0aG91dCBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgd2lsbCBsZWFkIHRvIGFuIGVtcHR5IHJlc3VsdCBhbmQgdGhlcmVmb3JlIHRyaWdnZXIgYW4gYWxlcnQuXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZUxvZ2dpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dRdW90YVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgZm9yIHRoZSB0ZWFtLXNwZWNpZmljIGluZGV4IGluIG1pbGxpb24gZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVJbk1pbGxpb25FdmVudHM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdhcm5pbmcgdGhyZXNob2xkIGZvciB0aGUgZGFpbHkgbG9nIHF1b3RhIG1vbml0b3IgaW4gcGVyY2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFsYXJtIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqIFRoZSB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdhcm5pbmcgdGhyZXNob2xkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNpYyBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBmb3IgYSBEYXRhZG9nIGxvZ3MgaW5kZXguXG4gKiBJdCBmb2xsb3dzIHRoZSBEYXRhZG9nIGd1aWRlIGF0IGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2xvZ3MvZ3VpZGUvbG9ncy1tb25pdG9ycy1vbi12b2x1bWVzL1xuICogYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgbW9uaXRvcnMuXG4gKiAgIDEuIEEgbWV0cmljIGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgcmVhY2ggYSBjZXJ0YWluIHRocmVzaG9sZCBvZiB5b3VyIGRhaWx5IGxvZyBxdW90YS5cbiAqICAgMi4gQW4gYW5vbWFseSBtb25pdG9yIHRoYXQgZGV0ZWN0cyBsb2cgYW1vdW50IHNwaWtlcy5cbiAqICAgMy4gQW4gZXZlbnQgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHlvdSBoaXQgdGhlIGRhaWx5IGxvZyBxdW90YS5cbiAqXG4gKiBBIGRhdGFkb2cgbG9nIGluZGV4IGlzIHRlYW0gc3BlY2lmaWMgYW5kIHRodXMgdGhlIG1vbml0b3IgbmVlZHMgdG8gYmUgZGVwbG95ZWQganVzdCBvbmNlIHBlciBpbmRleC90ZWFtLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yJywgcHJvcHMpO1xuICAgIG5ldyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nQWxlcnRBbm9tYWx5TW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkVjJNb25pdG9yJywgcHJvcHMpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF0nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBjb25zdCBsb2dRdW90YUluRXZlbnRzID0gTWF0aC5mbG9vcihwcm9wcy5kYWlseUxvZ1F1b3RhLnZhbHVlSW5NaWxsaW9uRXZlbnRzICogMV8wMDBfMDAwKTtcbiAgICBjb25zdCB3YXJuaW5nVGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCAvIDEwMCkpO1xuICAgIGNvbnN0IGFsZXJ0VGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgcXVvdGEgYWxtb3N0IHJlYWNoZWQnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBzdW0obGFzdF8xZCk6c3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2UsZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX19LmFzX2NvdW50KCkgPj0gJHthbGVydFRocmVzaG9sZH1gLFxuICAgICAgICBtZXNzYWdlOiBgW1AzXSBJbnNwZWN0IHlvdXIgbG9nIHZvbHVtZSBhdCAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfSBvciBhZGFwdCB0aGUgbG9nIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgICBjcml0aWNhbDogYWxlcnRUaHJlc2hvbGQsXG4gICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogIXByb3BzLnNwYXJzZUxvZ2dpbmcsXG4gICAgICAgICAgbm9fZGF0YV90aW1lZnJhbWU6IDI0ICogNjAsIC8vIDEgZGF5XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIGFtb3VudCBpcyByaXNpbmcgdG8gdW5leHBlY3RlZCBsZXZlbHMnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBhdmcobGFzdF80aCk6YW5vbWFsaWVzKHN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLCAncm9idXN0JywgMiwgZGlyZWN0aW9uPSdhYm92ZScsIGFsZXJ0X3dpbmRvdz0nbGFzdF8xNW0nLCBpbnRlcnZhbD02MCwgY291bnRfZGVmYXVsdF96ZXJvPSd0cnVlJywgc2Vhc29uYWxpdHk9J3dlZWtseScsIHRpbWV6b25lPSdldXJvcGUvYmVybGluJykgPj0gMWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDRdIExvZ3MgYXJlIGdldHRpbmcgb3V0IG9mIGNvbnRyb2w6ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6ICFwcm9wcy5zcGFyc2VMb2dnaW5nLFxuICAgICAgICAgIHRocmVzaG9sZF93aW5kb3dzOiB7XG4gICAgICAgICAgICB0cmlnZ2VyX3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICAgIHJlY292ZXJ5X3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ2V2ZW50LXYyIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBldmVudHMoXCJzb3VyY2U6ZGF0YWRvZyBkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBEYWlseSBxdW90YSByZWFjaGVkXCIpLnJvbGx1cChcImNvdW50XCIpLmxhc3QoXCI1bVwiKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -19,3 +19,4 @@ export * from './pipeline/rio-bitbucket-source-action';
19
19
  export * from './pipeline/rio-backup-secrets-restore-stage';
20
20
  export * from './kafka';
21
21
  export * from './datadog';
22
+ export * from './contributions/team-transport-two/pipeline';
package/lib/index.js CHANGED
@@ -31,4 +31,5 @@ __exportStar(require("./pipeline/rio-bitbucket-source-action"), exports);
31
31
  __exportStar(require("./pipeline/rio-backup-secrets-restore-stage"), exports);
32
32
  __exportStar(require("./kafka"), exports);
33
33
  __exportStar(require("./datadog"), exports);
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCO0FBQy9CLG9EQUFrQztBQUNsQyxpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxvREFBa0M7QUFDbEMseURBQXVDO0FBQ3ZDLGtFQUFnRDtBQUNoRCwrREFBNkM7QUFDN0Msc0RBQW9DO0FBQ3BDLDBEQUF3QztBQUN4QyxpREFBK0I7QUFDL0Isd0RBQXNDO0FBRXRDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUU5Qyx5RUFBdUQ7QUFDdkQsOEVBQTREO0FBRTVELDBDQUF3QjtBQUV4Qiw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2FsYic7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2FzcGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2Vjcyc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2RvY2RiJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvZHluYW1vZGInO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9sYW1iZGEnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC90YXJnZXRncm91cCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2RhdGFkb2ctbWV0cmljLWFsYXJtJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvZGF0YWRvZy1sb2ctYWxhcm0nO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC93YXRjaGZ1bCc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL21ldHJpYy1hbGFybSc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL3Jkcyc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2Nsb3VkZnJvbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL3Jpby1sYW5kaW5nLXpvbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tbG9hZC1iYWxhbmNlcic7XG5leHBvcnQgKiBmcm9tICcuL3Jpby1jbGFpZG9tZXRlcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vZmFyZ2F0ZS9yaW8tZmFyZ2F0ZS1zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9yaW8tYml0YnVja2V0LXNvdXJjZS1hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9yaW8tYmFja3VwLXNlY3JldHMtcmVzdG9yZS1zdGFnZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4va2Fma2EnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuIl19
34
+ __exportStar(require("./contributions/team-transport-two/pipeline"), exports);
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCO0FBQy9CLG9EQUFrQztBQUNsQyxpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxvREFBa0M7QUFDbEMseURBQXVDO0FBQ3ZDLGtFQUFnRDtBQUNoRCwrREFBNkM7QUFDN0Msc0RBQW9DO0FBQ3BDLDBEQUF3QztBQUN4QyxpREFBK0I7QUFDL0Isd0RBQXNDO0FBRXRDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUU5Qyx5RUFBdUQ7QUFDdkQsOEVBQTREO0FBRTVELDBDQUF3QjtBQUV4Qiw0Q0FBMEI7QUFFMUIsOEVBQTREIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9hbGInO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9hc3BlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9lY3MnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9kb2NkYic7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2R5bmFtb2RiJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvbGFtYmRhJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvdGFyZ2V0Z3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9kYXRhZG9nLW1ldHJpYy1hbGFybSc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2RhdGFkb2ctbG9nLWFsYXJtJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvd2F0Y2hmdWwnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9tZXRyaWMtYWxhcm0nO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9yZHMnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9yaW8tbGFuZGluZy16b25lJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxvYWQtYmFsYW5jZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tY2xhaWRvbWV0ZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLWJpdGJ1Y2tldC1zb3VyY2UtYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLWJhY2t1cC1zZWNyZXRzLXJlc3RvcmUtc3RhZ2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcblxuZXhwb3J0ICogZnJvbSAnLi9kYXRhZG9nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZSc7XG4iXX0=
@@ -53,6 +53,7 @@ export declare class WatchLambdaFunction extends Construct {
53
53
  private readonly watchful;
54
54
  private readonly fn;
55
55
  constructor(scope: Construct, id: string, props: WatchLambdaFunctionProps);
56
+ private createLogErrorMonitor;
56
57
  private createErrorsMonitor;
57
58
  private createThrottlesMonitor;
58
59
  private createDurationMonitor;
@@ -3,8 +3,10 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.WatchLambdaFunction = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
7
  const cw = require("aws-cdk-lib/aws-cloudwatch");
7
8
  const constructs_1 = require("constructs");
9
+ const datadog_log_alarm_1 = require("./datadog-log-alarm");
8
10
  const DEFAULT_DURATION_THRESHOLD_PERCENT = 80;
9
11
  /**
10
12
  * A Construct which creates the following alarms for lambda functions:
@@ -23,6 +25,21 @@ class WatchLambdaFunction extends constructs_1.Construct {
23
25
  this.watchful.createAlarm(this, 'Errors', this.createErrorsMonitor(props.errorsPerMinuteThreshold));
24
26
  this.watchful.createAlarm(this, 'Throttles', this.createThrottlesMonitor(props.throttlesPerMinuteThreshold));
25
27
  this.watchful.createAlarm(this, 'Duration', this.createDurationMonitor(timeoutSec, props.durationThresholdPercent));
28
+ this.watchful.createLogAlarm(this, 'LogErrorMonitor', this.createLogErrorMonitor());
29
+ }
30
+ createLogErrorMonitor() {
31
+ return {
32
+ autoCloseOpsGenieAlerts: true,
33
+ period: aws_cdk_lib_1.Duration.minutes(5),
34
+ unitOfPeriod: datadog_log_alarm_1.UnitOfPeriod.MINUTES,
35
+ periodOperator: datadog_log_alarm_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
36
+ statistic: 'count',
37
+ queryFilters: 'error',
38
+ alarmDescription: 'Auto-generated alert for Lambda error logs',
39
+ threshold: 1,
40
+ priority: 3,
41
+ index: '*',
42
+ };
26
43
  }
27
44
  createErrorsMonitor(errorsPerMinuteThreshold = 0) {
28
45
  const fn = this.fn;
@@ -62,4 +79,4 @@ class WatchLambdaFunction extends constructs_1.Construct {
62
79
  exports.WatchLambdaFunction = WatchLambdaFunction;
63
80
  _a = JSII_RTTI_SYMBOL_1;
64
81
  WatchLambdaFunction[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.WatchLambdaFunction", version: "0.0.0" };
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhdGNoZnVsL2xhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFpRDtBQUVqRCwyQ0FBdUM7QUFJdkMsTUFBTSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFnRDlDOzs7Ozs7R0FNRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFJaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQWtDLENBQUM7UUFDckUsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUM1QixVQUFVLEVBQ1YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE9BQU87WUFDTCxNQUFNLEVBQUUsWUFBWTtZQUNwQixnQkFBZ0IsRUFBRSxRQUFRLHdCQUF3QixvQkFBb0I7WUFDdEUsU0FBUyxFQUFFLHdCQUF3QjtZQUNuQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCO1lBQ2hFLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FBQywyQkFBMkIsR0FBRyxDQUFDO1FBQzVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE9BQU87WUFDTCxNQUFNLEVBQUUsZUFBZTtZQUN2QixnQkFBZ0IsRUFBRSxRQUFRLDJCQUEyQix1QkFBdUI7WUFDNUUsU0FBUyxFQUFFLDJCQUEyQjtZQUN0QyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCO1lBQ2hFLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsVUFBa0IsRUFDbEIsMkJBQW1DLGtDQUFrQztRQUVyRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUN2RixPQUFPO1lBQ0wsTUFBTSxFQUFFLGNBQWM7WUFDdEIsZ0JBQWdCLEVBQUUsa0JBQWtCLG9CQUFvQixNQUFNLHdCQUF3QixJQUFJO1lBQzFGLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDaEUsU0FBUyxFQUFFLG9CQUFvQixHQUFHLElBQUk7WUFDdEMsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDO0lBQ0osQ0FBQzs7QUEzREgsa0RBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3cgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZXRyaWNBbGFybVByb3BzIH0gZnJvbSAnLi9tZXRyaWMtYWxhcm0nO1xuaW1wb3J0IHsgSVdhdGNoZnVsIH0gZnJvbSAnLi93YXRjaGZ1bCc7XG5cbmNvbnN0IERFRkFVTFRfRFVSQVRJT05fVEhSRVNIT0xEX1BFUkNFTlQgPSA4MDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBkZWZpbmluZyBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hMYW1iZGFGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICAgKiBOdW1iZXIgb2YgYWxsb3dlZCBlcnJvcnMgcGVyIG1pbnV0ZS4gSWYgdGhlcmUgYXJlIG1vcmUgZXJyb3JzIHRoYW4gdGhhdCwgYW4gYWxhcm0gd2lsbCB0cmlnZ2VyLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICByZWFkb25seSBlcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAgICogTnVtYmVyIG9mIGFsbG93ZWQgdGhyb3R0bGVzIHBlciBtaW51dGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gIHJlYWRvbmx5IHRocm90dGxlc1Blck1pbnV0ZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICAgKiBUaHJlc2hvbGQgZm9yIHRoZSBkdXJhdGlvbiBhbGFybSBhcyBwZXJjZW50YWdlIG9mIHRoZSBmdW5jdGlvbidzIHRpbWVvdXRcbiAgICAgKiB2YWx1ZS5cbiAgICAgKlxuICAgICAqIElmIHRoaXMgaXMgc2V0IHRvIDUwJSwgdGhlIGFsYXJtIHdpbGwgYmUgc2V0IHdoZW4gcDk5IGxhdGVuY3kgb2YgdGhlXG4gICAgICogZnVuY3Rpb24gZXhjZWVkcyA1MCUgb2YgdGhlIGZ1bmN0aW9uJ3MgdGltZW91dCBzZXR0aW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgODBcbiAgICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb25UaHJlc2hvbGRQZXJjZW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGRlZmluaW5nIGEgV2F0Y2hMYW1iZGFGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdGNoTGFtYmRhRnVuY3Rpb25Qcm9wcyBleHRlbmRzIFdhdGNoTGFtYmRhRnVuY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAgICogVGhlIHJlZmVyZW5jZSB0byBJV2F0Y2hmdWwgY2xhc3MuIFVzZWQgaW50ZXJuYWxseS5cbiAgICAgKi9cbiAgcmVhZG9ubHkgd2F0Y2hmdWw6IElXYXRjaGZ1bDtcblxuICAvKipcbiAgICAgKiBUaGUgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQuXG4gICAgICogW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICAgKi9cbiAgcmVhZG9ubHkgZm46IGxhbWJkYS5GdW5jdGlvbjtcbn1cblxuLyoqXG4gKiBBIENvbnN0cnVjdCB3aGljaCBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgYWxhcm1zIGZvciBsYW1iZGEgZnVuY3Rpb25zOlxuICpcbiAqIC0gZXJyb3JzXG4gKiAtIHRocm90dGxlc1xuICogLSBkdXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgV2F0Y2hMYW1iZGFGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2F0Y2hmdWw6IElXYXRjaGZ1bDtcbiAgcHJpdmF0ZSByZWFkb25seSBmbjogbGFtYmRhLkZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXYXRjaExhbWJkYUZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBwcm9wcy5mbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgY29uc3QgdGltZW91dFNlYyA9IGNmbkZ1bmN0aW9uLnRpbWVvdXQgfHwgMztcblxuICAgIHRoaXMud2F0Y2hmdWwgPSBwcm9wcy53YXRjaGZ1bDtcbiAgICB0aGlzLmZuID0gcHJvcHMuZm47XG5cbiAgICB0aGlzLndhdGNoZnVsLmNyZWF0ZUFsYXJtKHRoaXMsICdFcnJvcnMnLCB0aGlzLmNyZWF0ZUVycm9yc01vbml0b3IocHJvcHMuZXJyb3JzUGVyTWludXRlVGhyZXNob2xkKSk7XG4gICAgdGhpcy53YXRjaGZ1bC5jcmVhdGVBbGFybSh0aGlzLCAnVGhyb3R0bGVzJywgdGhpcy5jcmVhdGVUaHJvdHRsZXNNb25pdG9yKHByb3BzLnRocm90dGxlc1Blck1pbnV0ZVRocmVzaG9sZCkpO1xuICAgIHRoaXMud2F0Y2hmdWwuY3JlYXRlQWxhcm0odGhpcyxcbiAgICAgICdEdXJhdGlvbicsXG4gICAgICB0aGlzLmNyZWF0ZUR1cmF0aW9uTW9uaXRvcih0aW1lb3V0U2VjLCBwcm9wcy5kdXJhdGlvblRocmVzaG9sZFBlcmNlbnQpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVycm9yc01vbml0b3IoZXJyb3JzUGVyTWludXRlVGhyZXNob2xkID0gMCk6IE1ldHJpY0FsYXJtUHJvcHMge1xuICAgIGNvbnN0IGZuID0gdGhpcy5mbjtcbiAgICBjb25zdCBlcnJvcnNNZXRyaWMgPSBmbi5tZXRyaWNFcnJvcnMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBlcnJvcnNNZXRyaWMsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgT3ZlciAke2Vycm9yc1Blck1pbnV0ZVRocmVzaG9sZH0gZXJyb3JzIHBlciBtaW51dGVgLFxuICAgICAgdGhyZXNob2xkOiBlcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGN3LkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGhyb3R0bGVzTW9uaXRvcih0aHJvdHRsZXNQZXJNaW51dGVUaHJlc2hvbGQgPSAwKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IHRocm90dGxlc01ldHJpYyA9IGZuLm1ldHJpY1Rocm90dGxlcygpO1xuICAgIHJldHVybiB7XG4gICAgICBtZXRyaWM6IHRocm90dGxlc01ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBPdmVyICR7dGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkfSB0aHJvdHRsZXMgcGVyIG1pbnV0ZWAsXG4gICAgICB0aHJlc2hvbGQ6IHRocm90dGxlc1Blck1pbnV0ZVRocmVzaG9sZCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEdXJhdGlvbk1vbml0b3IoXG4gICAgdGltZW91dFNlYzogbnVtYmVyLFxuICAgIGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZDogbnVtYmVyID0gREVGQVVMVF9EVVJBVElPTl9USFJFU0hPTERfUEVSQ0VOVCxcbiAgKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IGR1cmF0aW9uTWV0cmljID0gZm4ubWV0cmljRHVyYXRpb24oKTtcbiAgICBjb25zdCBkdXJhdGlvblRocmVzaG9sZFNlYyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZCAvIDEwMCkgKiB0aW1lb3V0U2VjKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBkdXJhdGlvbk1ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBwOTkgbGF0ZW5jeSA+PSAke2R1cmF0aW9uVGhyZXNob2xkU2VjfXMgKCR7ZHVyYXRpb25QZXJjZW50VGhyZXNob2xkfSUpYCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IGR1cmF0aW9uVGhyZXNob2xkU2VjICogMTAwMCwgLy8gbWlsbGlzZWNvbmRzXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhdGNoZnVsL2xhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QyxpREFBaUQ7QUFFakQsMkNBQXVDO0FBQ3ZDLDJEQUFzRjtBQUl0RixNQUFNLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQWdEOUM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUztJQUloRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztRQUM3RyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQzVCLFVBQVUsRUFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUN2RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQzFCLElBQUksRUFDSixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQzdCLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU87WUFDTCx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLE1BQU0sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsWUFBWSxFQUFFLGdDQUFZLENBQUMsT0FBTztZQUNsQyxjQUFjLEVBQUUsc0NBQWtCLENBQUMsa0NBQWtDO1lBQ3JFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGdCQUFnQixFQUFFLDRDQUE0QztZQUM5RCxTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUNPLG1CQUFtQixDQUFDLHdCQUF3QixHQUFHLENBQUM7UUFDdEQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkMsT0FBTztZQUNMLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLGdCQUFnQixFQUFFLFFBQVEsd0JBQXdCLG9CQUFvQjtZQUN0RSxTQUFTLEVBQUUsd0JBQXdCO1lBQ25DLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDaEUsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLDJCQUEyQixHQUFHLENBQUM7UUFDNUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0MsT0FBTztZQUNMLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGdCQUFnQixFQUFFLFFBQVEsMkJBQTJCLHVCQUF1QjtZQUM1RSxTQUFTLEVBQUUsMkJBQTJCO1lBQ3RDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDaEUsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUMzQixVQUFrQixFQUNsQiwyQkFBbUMsa0NBQWtDO1FBRXJFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU87WUFDTCxNQUFNLEVBQUUsY0FBYztZQUN0QixnQkFBZ0IsRUFBRSxrQkFBa0Isb0JBQW9CLE1BQU0sd0JBQXdCLElBQUk7WUFDMUYsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQjtZQUNoRSxTQUFTLEVBQUUsb0JBQW9CLEdBQUcsSUFBSTtZQUN0QyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3JCLENBQUM7SUFDSixDQUFDOztBQTlFSCxrREErRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGN3IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29tcGFyaXNvbk9wZXJhdG9yLCBMb2dBbGFybVByb3BzLCBVbml0T2ZQZXJpb2QgfSBmcm9tICcuL2RhdGFkb2ctbG9nLWFsYXJtJztcbmltcG9ydCB7IE1ldHJpY0FsYXJtUHJvcHMgfSBmcm9tICcuL21ldHJpYy1hbGFybSc7XG5pbXBvcnQgeyBJV2F0Y2hmdWwgfSBmcm9tICcuL3dhdGNoZnVsJztcblxuY29uc3QgREVGQVVMVF9EVVJBVElPTl9USFJFU0hPTERfUEVSQ0VOVCA9IDgwO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRlZmluaW5nIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaExhbWJkYUZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgICAqIE51bWJlciBvZiBhbGxvd2VkIGVycm9ycyBwZXIgbWludXRlLiBJZiB0aGVyZSBhcmUgbW9yZSBlcnJvcnMgdGhhbiB0aGF0LCBhbiBhbGFybSB3aWxsIHRyaWdnZXIuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gIHJlYWRvbmx5IGVycm9yc1Blck1pbnV0ZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICAgKiBOdW1iZXIgb2YgYWxsb3dlZCB0aHJvdHRsZXMgcGVyIG1pbnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgICAqIFRocmVzaG9sZCBmb3IgdGhlIGR1cmF0aW9uIGFsYXJtIGFzIHBlcmNlbnRhZ2Ugb2YgdGhlIGZ1bmN0aW9uJ3MgdGltZW91dFxuICAgICAqIHZhbHVlLlxuICAgICAqXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gNTAlLCB0aGUgYWxhcm0gd2lsbCBiZSBzZXQgd2hlbiBwOTkgbGF0ZW5jeSBvZiB0aGVcbiAgICAgKiBmdW5jdGlvbiBleGNlZWRzIDUwJSBvZiB0aGUgZnVuY3Rpb24ncyB0aW1lb3V0IHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA4MFxuICAgICAqL1xuICByZWFkb25seSBkdXJhdGlvblRocmVzaG9sZFBlcmNlbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYSBXYXRjaExhbWJkYUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hMYW1iZGFGdW5jdGlvblByb3BzIGV4dGVuZHMgV2F0Y2hMYW1iZGFGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICAgKiBUaGUgcmVmZXJlbmNlIHRvIElXYXRjaGZ1bCBjbGFzcy4gVXNlZCBpbnRlcm5hbGx5LlxuICAgICAqL1xuICByZWFkb25seSB3YXRjaGZ1bDogSVdhdGNoZnVsO1xuXG4gIC8qKlxuICAgICAqIFRoZSBsYW1iZGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgd2F0Y2hlZC5cbiAgICAgKiBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgICAqL1xuICByZWFkb25seSBmbjogbGFtYmRhLkZ1bmN0aW9uO1xufVxuXG4vKipcbiAqIEEgQ29uc3RydWN0IHdoaWNoIGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBhbGFybXMgZm9yIGxhbWJkYSBmdW5jdGlvbnM6XG4gKlxuICogLSBlcnJvcnNcbiAqIC0gdGhyb3R0bGVzXG4gKiAtIGR1cmF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBXYXRjaExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB3YXRjaGZ1bDogSVdhdGNoZnVsO1xuICBwcml2YXRlIHJlYWRvbmx5IGZuOiBsYW1iZGEuRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdhdGNoTGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IHByb3BzLmZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgICBjb25zdCB0aW1lb3V0U2VjID0gY2ZuRnVuY3Rpb24udGltZW91dCB8fCAzO1xuXG4gICAgdGhpcy53YXRjaGZ1bCA9IHByb3BzLndhdGNoZnVsO1xuICAgIHRoaXMuZm4gPSBwcm9wcy5mbjtcblxuICAgIHRoaXMud2F0Y2hmdWwuY3JlYXRlQWxhcm0odGhpcywgJ0Vycm9ycycsIHRoaXMuY3JlYXRlRXJyb3JzTW9uaXRvcihwcm9wcy5lcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQpKTtcbiAgICB0aGlzLndhdGNoZnVsLmNyZWF0ZUFsYXJtKHRoaXMsICdUaHJvdHRsZXMnLCB0aGlzLmNyZWF0ZVRocm90dGxlc01vbml0b3IocHJvcHMudGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkKSk7XG4gICAgdGhpcy53YXRjaGZ1bC5jcmVhdGVBbGFybSh0aGlzLFxuICAgICAgJ0R1cmF0aW9uJyxcbiAgICAgIHRoaXMuY3JlYXRlRHVyYXRpb25Nb25pdG9yKHRpbWVvdXRTZWMsIHByb3BzLmR1cmF0aW9uVGhyZXNob2xkUGVyY2VudCksXG4gICAgKTtcbiAgICB0aGlzLndhdGNoZnVsLmNyZWF0ZUxvZ0FsYXJtKFxuICAgICAgdGhpcyxcbiAgICAgICdMb2dFcnJvck1vbml0b3InLFxuICAgICAgdGhpcy5jcmVhdGVMb2dFcnJvck1vbml0b3IoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMb2dFcnJvck1vbml0b3IoKTogTG9nQWxhcm1Qcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dG9DbG9zZU9wc0dlbmllQWxlcnRzOiB0cnVlLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgdW5pdE9mUGVyaW9kOiBVbml0T2ZQZXJpb2QuTUlOVVRFUywgLy8gdG9EbzogbW92ZSB0aGF0IHNvbWV3aGVyZSBlbHNlIGFuZCBzZXQgZGVmYXVsdHMgdGhlcmU/XG4gICAgICBwZXJpb2RPcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICBzdGF0aXN0aWM6ICdjb3VudCcsXG4gICAgICBxdWVyeUZpbHRlcnM6ICdlcnJvcicsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgYWxlcnQgZm9yIExhbWJkYSBlcnJvciBsb2dzJyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgaW5kZXg6ICcqJywgLy8gdG9Ebzogd2Ugc2hvdWxkIHRha2UgaGVyZSB0aGUgdGVhbSBuYW1lIGJ1dCBmb3Igb2xkZXIgc2V0dXBzIHRvIHdvcmsgd2Uga2VlcCB0aGF0IGZvciBjb21wYXRpYmlsaXR5XG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUVycm9yc01vbml0b3IoZXJyb3JzUGVyTWludXRlVGhyZXNob2xkID0gMCk6IE1ldHJpY0FsYXJtUHJvcHMge1xuICAgIGNvbnN0IGZuID0gdGhpcy5mbjtcbiAgICBjb25zdCBlcnJvcnNNZXRyaWMgPSBmbi5tZXRyaWNFcnJvcnMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBlcnJvcnNNZXRyaWMsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgT3ZlciAke2Vycm9yc1Blck1pbnV0ZVRocmVzaG9sZH0gZXJyb3JzIHBlciBtaW51dGVgLFxuICAgICAgdGhyZXNob2xkOiBlcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGN3LkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGhyb3R0bGVzTW9uaXRvcih0aHJvdHRsZXNQZXJNaW51dGVUaHJlc2hvbGQgPSAwKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IHRocm90dGxlc01ldHJpYyA9IGZuLm1ldHJpY1Rocm90dGxlcygpO1xuICAgIHJldHVybiB7XG4gICAgICBtZXRyaWM6IHRocm90dGxlc01ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBPdmVyICR7dGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkfSB0aHJvdHRsZXMgcGVyIG1pbnV0ZWAsXG4gICAgICB0aHJlc2hvbGQ6IHRocm90dGxlc1Blck1pbnV0ZVRocmVzaG9sZCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEdXJhdGlvbk1vbml0b3IoXG4gICAgdGltZW91dFNlYzogbnVtYmVyLFxuICAgIGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZDogbnVtYmVyID0gREVGQVVMVF9EVVJBVElPTl9USFJFU0hPTERfUEVSQ0VOVCxcbiAgKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IGR1cmF0aW9uTWV0cmljID0gZm4ubWV0cmljRHVyYXRpb24oKTtcbiAgICBjb25zdCBkdXJhdGlvblRocmVzaG9sZFNlYyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZCAvIDEwMCkgKiB0aW1lb3V0U2VjKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBkdXJhdGlvbk1ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBwOTkgbGF0ZW5jeSA+PSAke2R1cmF0aW9uVGhyZXNob2xkU2VjfXMgKCR7ZHVyYXRpb25QZXJjZW50VGhyZXNob2xkfSUpYCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IGR1cmF0aW9uVGhyZXNob2xkU2VjICogMTAwMCwgLy8gbWlsbGlzZWNvbmRzXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "2.0.5",
18
+ "version": "2.2.0",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "jsii": {
@@ -0,0 +1,11 @@
1
+ import { Documentation, Language } from 'jsii-docgen';
2
+
3
+ const docs = await Documentation.forProject('.');
4
+
5
+ console.info("Step 1")
6
+ const markdown = (await docs.toMarkdown({ language: Language.TYPESCRIPT, })); // returns a markdown string
7
+ console.info("Step 2")
8
+
9
+ const json = (await docs.toJson({ language: Language.TYPESCRIPT })).render(); // returns a JSON object
10
+
11
+ console.log({markdown: markdown.render(), json})
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "2.0.5"
2
+ "version": "2.2.0"
3
3
  }