@orcabus/platform-cdk-constructs 0.0.104 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +286 -31
- package/api-gateway/api-gateway.js +1 -1
- package/api-gateway/config.js +8 -4
- package/deployment-stack-pipeline/artifact-bucket.js +1 -1
- package/deployment-stack-pipeline/pipeline.d.ts +80 -1
- package/deployment-stack-pipeline/pipeline.js +149 -18
- package/dynamodb/index.js +2 -2
- package/ecs/index.js +1 -1
- package/eventbridge-rules/sfn-slack-notification.js +1 -1
- package/lambda/index.js +1 -1
- package/monitored-queue/index.js +1 -1
- package/named-lambda-role/index.js +1 -1
- package/package.json +1 -1
- package/provider-function/index.js +1 -1
- package/shared-config/networking.js +2 -2
- package/shared-config/slack.js +1 -1
package/.jsii
CHANGED
|
@@ -4604,6 +4604,67 @@
|
|
|
4604
4604
|
],
|
|
4605
4605
|
"symbolId": "api-gateway/api-gateway:OrcaBusApiGatewayProps"
|
|
4606
4606
|
},
|
|
4607
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps": {
|
|
4608
|
+
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4609
|
+
"datatype": true,
|
|
4610
|
+
"docs": {
|
|
4611
|
+
"stability": "experimental"
|
|
4612
|
+
},
|
|
4613
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps",
|
|
4614
|
+
"kind": "interface",
|
|
4615
|
+
"locationInModule": {
|
|
4616
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4617
|
+
"line": 106
|
|
4618
|
+
},
|
|
4619
|
+
"name": "CodeBuildStepProps",
|
|
4620
|
+
"namespace": "deploymentPipeline",
|
|
4621
|
+
"properties": [
|
|
4622
|
+
{
|
|
4623
|
+
"abstract": true,
|
|
4624
|
+
"docs": {
|
|
4625
|
+
"stability": "experimental",
|
|
4626
|
+
"summary": "the main command for the build step to run."
|
|
4627
|
+
},
|
|
4628
|
+
"immutable": true,
|
|
4629
|
+
"locationInModule": {
|
|
4630
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4631
|
+
"line": 110
|
|
4632
|
+
},
|
|
4633
|
+
"name": "command",
|
|
4634
|
+
"type": {
|
|
4635
|
+
"collection": {
|
|
4636
|
+
"elementtype": {
|
|
4637
|
+
"primitive": "string"
|
|
4638
|
+
},
|
|
4639
|
+
"kind": "array"
|
|
4640
|
+
}
|
|
4641
|
+
}
|
|
4642
|
+
},
|
|
4643
|
+
{
|
|
4644
|
+
"abstract": true,
|
|
4645
|
+
"docs": {
|
|
4646
|
+
"stability": "experimental",
|
|
4647
|
+
"summary": "Partial buildspec for this CodeBuildStep."
|
|
4648
|
+
},
|
|
4649
|
+
"immutable": true,
|
|
4650
|
+
"locationInModule": {
|
|
4651
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4652
|
+
"line": 114
|
|
4653
|
+
},
|
|
4654
|
+
"name": "partialBuildSpec",
|
|
4655
|
+
"optional": true,
|
|
4656
|
+
"type": {
|
|
4657
|
+
"collection": {
|
|
4658
|
+
"elementtype": {
|
|
4659
|
+
"primitive": "any"
|
|
4660
|
+
},
|
|
4661
|
+
"kind": "map"
|
|
4662
|
+
}
|
|
4663
|
+
}
|
|
4664
|
+
}
|
|
4665
|
+
],
|
|
4666
|
+
"symbolId": "deployment-stack-pipeline/pipeline:CodeBuildStepProps"
|
|
4667
|
+
},
|
|
4607
4668
|
"@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket": {
|
|
4608
4669
|
"assembly": "@orcabus/platform-cdk-constructs",
|
|
4609
4670
|
"base": "constructs.Construct",
|
|
@@ -4726,7 +4787,7 @@
|
|
|
4726
4787
|
},
|
|
4727
4788
|
"locationInModule": {
|
|
4728
4789
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4729
|
-
"line":
|
|
4790
|
+
"line": 244
|
|
4730
4791
|
},
|
|
4731
4792
|
"parameters": [
|
|
4732
4793
|
{
|
|
@@ -4752,7 +4813,7 @@
|
|
|
4752
4813
|
"kind": "class",
|
|
4753
4814
|
"locationInModule": {
|
|
4754
4815
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4755
|
-
"line":
|
|
4816
|
+
"line": 238
|
|
4756
4817
|
},
|
|
4757
4818
|
"name": "DeploymentStackPipeline",
|
|
4758
4819
|
"namespace": "deploymentPipeline",
|
|
@@ -4765,7 +4826,7 @@
|
|
|
4765
4826
|
"immutable": true,
|
|
4766
4827
|
"locationInModule": {
|
|
4767
4828
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4768
|
-
"line":
|
|
4829
|
+
"line": 242
|
|
4769
4830
|
},
|
|
4770
4831
|
"name": "pipeline",
|
|
4771
4832
|
"type": {
|
|
@@ -4785,7 +4846,7 @@
|
|
|
4785
4846
|
"kind": "interface",
|
|
4786
4847
|
"locationInModule": {
|
|
4787
4848
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4788
|
-
"line":
|
|
4849
|
+
"line": 117
|
|
4789
4850
|
},
|
|
4790
4851
|
"name": "DeploymentStackPipelineProps",
|
|
4791
4852
|
"namespace": "deploymentPipeline",
|
|
@@ -4793,14 +4854,14 @@
|
|
|
4793
4854
|
{
|
|
4794
4855
|
"abstract": true,
|
|
4795
4856
|
"docs": {
|
|
4796
|
-
"remarks": "e.g. [\"
|
|
4857
|
+
"remarks": "e.g. [\"pnpm install --frozen-lockfile\", \"pnpm cdk synth\"]",
|
|
4797
4858
|
"stability": "experimental",
|
|
4798
4859
|
"summary": "The command to run to synth the cdk stack which also installing the cdk dependencies."
|
|
4799
4860
|
},
|
|
4800
4861
|
"immutable": true,
|
|
4801
4862
|
"locationInModule": {
|
|
4802
4863
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4803
|
-
"line":
|
|
4864
|
+
"line": 163
|
|
4804
4865
|
},
|
|
4805
4866
|
"name": "cdkSynthCmd",
|
|
4806
4867
|
"type": {
|
|
@@ -4825,7 +4886,7 @@
|
|
|
4825
4886
|
"immutable": true,
|
|
4826
4887
|
"locationInModule": {
|
|
4827
4888
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4828
|
-
"line":
|
|
4889
|
+
"line": 124
|
|
4829
4890
|
},
|
|
4830
4891
|
"name": "githubBranch",
|
|
4831
4892
|
"type": {
|
|
@@ -4842,7 +4903,7 @@
|
|
|
4842
4903
|
"immutable": true,
|
|
4843
4904
|
"locationInModule": {
|
|
4844
4905
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4845
|
-
"line":
|
|
4906
|
+
"line": 128
|
|
4846
4907
|
},
|
|
4847
4908
|
"name": "githubRepo",
|
|
4848
4909
|
"type": {
|
|
@@ -4858,7 +4919,7 @@
|
|
|
4858
4919
|
"immutable": true,
|
|
4859
4920
|
"locationInModule": {
|
|
4860
4921
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4861
|
-
"line":
|
|
4922
|
+
"line": 145
|
|
4862
4923
|
},
|
|
4863
4924
|
"name": "pipelineName",
|
|
4864
4925
|
"type": {
|
|
@@ -4874,7 +4935,7 @@
|
|
|
4874
4935
|
"immutable": true,
|
|
4875
4936
|
"locationInModule": {
|
|
4876
4937
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4877
|
-
"line":
|
|
4938
|
+
"line": 132
|
|
4878
4939
|
},
|
|
4879
4940
|
"name": "stack",
|
|
4880
4941
|
"type": {
|
|
@@ -4890,7 +4951,7 @@
|
|
|
4890
4951
|
"immutable": true,
|
|
4891
4952
|
"locationInModule": {
|
|
4892
4953
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4893
|
-
"line":
|
|
4954
|
+
"line": 141
|
|
4894
4955
|
},
|
|
4895
4956
|
"name": "stackConfig",
|
|
4896
4957
|
"type": {
|
|
@@ -4907,13 +4968,30 @@
|
|
|
4907
4968
|
"immutable": true,
|
|
4908
4969
|
"locationInModule": {
|
|
4909
4970
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4910
|
-
"line":
|
|
4971
|
+
"line": 137
|
|
4911
4972
|
},
|
|
4912
4973
|
"name": "stackName",
|
|
4913
4974
|
"type": {
|
|
4914
4975
|
"primitive": "string"
|
|
4915
4976
|
}
|
|
4916
4977
|
},
|
|
4978
|
+
{
|
|
4979
|
+
"abstract": true,
|
|
4980
|
+
"docs": {
|
|
4981
|
+
"remarks": "This step will execute in parallel with {@link unitIacTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nensure your command includes 'cd' to the main app directory, as the build context starts from the root.",
|
|
4982
|
+
"stability": "experimental",
|
|
4983
|
+
"summary": "Configuration for the CodeBuild step that runs unit tests for the main application code."
|
|
4984
|
+
},
|
|
4985
|
+
"immutable": true,
|
|
4986
|
+
"locationInModule": {
|
|
4987
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4988
|
+
"line": 183
|
|
4989
|
+
},
|
|
4990
|
+
"name": "unitAppTestConfig",
|
|
4991
|
+
"type": {
|
|
4992
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps"
|
|
4993
|
+
}
|
|
4994
|
+
},
|
|
4917
4995
|
{
|
|
4918
4996
|
"abstract": true,
|
|
4919
4997
|
"docs": {
|
|
@@ -4924,7 +5002,7 @@
|
|
|
4924
5002
|
"immutable": true,
|
|
4925
5003
|
"locationInModule": {
|
|
4926
5004
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4927
|
-
"line":
|
|
5005
|
+
"line": 169
|
|
4928
5006
|
},
|
|
4929
5007
|
"name": "cdkOut",
|
|
4930
5008
|
"optional": true,
|
|
@@ -4932,6 +5010,24 @@
|
|
|
4932
5010
|
"primitive": "string"
|
|
4933
5011
|
}
|
|
4934
5012
|
},
|
|
5013
|
+
{
|
|
5014
|
+
"abstract": true,
|
|
5015
|
+
"docs": {
|
|
5016
|
+
"remarks": "If specified, the pipeline will check for CloudFormation drift and fail if detected.",
|
|
5017
|
+
"stability": "experimental",
|
|
5018
|
+
"summary": "Configuration for drift detection checks before deployment."
|
|
5019
|
+
},
|
|
5020
|
+
"immutable": true,
|
|
5021
|
+
"locationInModule": {
|
|
5022
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5023
|
+
"line": 229
|
|
5024
|
+
},
|
|
5025
|
+
"name": "driftCheckConfig",
|
|
5026
|
+
"optional": true,
|
|
5027
|
+
"type": {
|
|
5028
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig"
|
|
5029
|
+
}
|
|
5030
|
+
},
|
|
4935
5031
|
{
|
|
4936
5032
|
"abstract": true,
|
|
4937
5033
|
"docs": {
|
|
@@ -4942,7 +5038,7 @@
|
|
|
4942
5038
|
"immutable": true,
|
|
4943
5039
|
"locationInModule": {
|
|
4944
5040
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4945
|
-
"line":
|
|
5041
|
+
"line": 200
|
|
4946
5042
|
},
|
|
4947
5043
|
"name": "enableSlackNotification",
|
|
4948
5044
|
"optional": true,
|
|
@@ -4960,7 +5056,7 @@
|
|
|
4960
5056
|
"immutable": true,
|
|
4961
5057
|
"locationInModule": {
|
|
4962
5058
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4963
|
-
"line":
|
|
5059
|
+
"line": 159
|
|
4964
5060
|
},
|
|
4965
5061
|
"name": "excludedFilePaths",
|
|
4966
5062
|
"optional": true,
|
|
@@ -4983,7 +5079,7 @@
|
|
|
4983
5079
|
"immutable": true,
|
|
4984
5080
|
"locationInModule": {
|
|
4985
5081
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
4986
|
-
"line":
|
|
5082
|
+
"line": 152
|
|
4987
5083
|
},
|
|
4988
5084
|
"name": "includedFilePaths",
|
|
4989
5085
|
"optional": true,
|
|
@@ -5007,7 +5103,7 @@
|
|
|
5007
5103
|
"immutable": true,
|
|
5008
5104
|
"locationInModule": {
|
|
5009
5105
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5010
|
-
"line":
|
|
5106
|
+
"line": 208
|
|
5011
5107
|
},
|
|
5012
5108
|
"name": "notificationEvents",
|
|
5013
5109
|
"optional": true,
|
|
@@ -5031,7 +5127,7 @@
|
|
|
5031
5127
|
"immutable": true,
|
|
5032
5128
|
"locationInModule": {
|
|
5033
5129
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5034
|
-
"line":
|
|
5130
|
+
"line": 216
|
|
5035
5131
|
},
|
|
5036
5132
|
"name": "reuseExistingArtifactBucket",
|
|
5037
5133
|
"optional": true,
|
|
@@ -5048,7 +5144,7 @@
|
|
|
5048
5144
|
"immutable": true,
|
|
5049
5145
|
"locationInModule": {
|
|
5050
5146
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5051
|
-
"line":
|
|
5147
|
+
"line": 195
|
|
5052
5148
|
},
|
|
5053
5149
|
"name": "stageEnv",
|
|
5054
5150
|
"optional": true,
|
|
@@ -5067,7 +5163,7 @@
|
|
|
5067
5163
|
"immutable": true,
|
|
5068
5164
|
"locationInModule": {
|
|
5069
5165
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5070
|
-
"line":
|
|
5166
|
+
"line": 224
|
|
5071
5167
|
},
|
|
5072
5168
|
"name": "stripAssemblyAssets",
|
|
5073
5169
|
"optional": true,
|
|
@@ -5086,7 +5182,7 @@
|
|
|
5086
5182
|
"immutable": true,
|
|
5087
5183
|
"locationInModule": {
|
|
5088
5184
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5089
|
-
"line":
|
|
5185
|
+
"line": 175
|
|
5090
5186
|
},
|
|
5091
5187
|
"name": "synthBuildSpec",
|
|
5092
5188
|
"optional": true,
|
|
@@ -5098,10 +5194,169 @@
|
|
|
5098
5194
|
"kind": "map"
|
|
5099
5195
|
}
|
|
5100
5196
|
}
|
|
5197
|
+
},
|
|
5198
|
+
{
|
|
5199
|
+
"abstract": true,
|
|
5200
|
+
"docs": {
|
|
5201
|
+
"remarks": "This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.\nBoth must succeed before the synth step runs.\n\nThe default command will be from the root of the repo: [\"npm install --global corepack@latest\", \"corepack enable\", \"make install\", \"make test\"]",
|
|
5202
|
+
"stability": "experimental",
|
|
5203
|
+
"summary": "Configuration for the CodeBuild step that runs unit tests for Infrastructure-as-Code (IaC) at the repository root."
|
|
5204
|
+
},
|
|
5205
|
+
"immutable": true,
|
|
5206
|
+
"locationInModule": {
|
|
5207
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5208
|
+
"line": 191
|
|
5209
|
+
},
|
|
5210
|
+
"name": "unitIacTestConfig",
|
|
5211
|
+
"optional": true,
|
|
5212
|
+
"type": {
|
|
5213
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.CodeBuildStepProps"
|
|
5214
|
+
}
|
|
5101
5215
|
}
|
|
5102
5216
|
],
|
|
5103
5217
|
"symbolId": "deployment-stack-pipeline/pipeline:DeploymentStackPipelineProps"
|
|
5104
5218
|
},
|
|
5219
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig": {
|
|
5220
|
+
"assembly": "@orcabus/platform-cdk-constructs",
|
|
5221
|
+
"datatype": true,
|
|
5222
|
+
"docs": {
|
|
5223
|
+
"stability": "experimental",
|
|
5224
|
+
"summary": "Configuration for pre-deployment drift detection checks."
|
|
5225
|
+
},
|
|
5226
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.DriftCheckConfig",
|
|
5227
|
+
"kind": "interface",
|
|
5228
|
+
"locationInModule": {
|
|
5229
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5230
|
+
"line": 89
|
|
5231
|
+
},
|
|
5232
|
+
"name": "DriftCheckConfig",
|
|
5233
|
+
"namespace": "deploymentPipeline",
|
|
5234
|
+
"properties": [
|
|
5235
|
+
{
|
|
5236
|
+
"abstract": true,
|
|
5237
|
+
"docs": {
|
|
5238
|
+
"remarks": "Examples: \"pnpm cdk\", \"pnpm cdk-stateful\", \"pnpm cdk-stateless\".\nMust support: \"drift <stackId>\".",
|
|
5239
|
+
"stability": "experimental",
|
|
5240
|
+
"summary": "CDK CLI entrypoint used to run the drift command."
|
|
5241
|
+
},
|
|
5242
|
+
"immutable": true,
|
|
5243
|
+
"locationInModule": {
|
|
5244
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5245
|
+
"line": 95
|
|
5246
|
+
},
|
|
5247
|
+
"name": "cdkCommand",
|
|
5248
|
+
"type": {
|
|
5249
|
+
"primitive": "string"
|
|
5250
|
+
}
|
|
5251
|
+
},
|
|
5252
|
+
{
|
|
5253
|
+
"abstract": true,
|
|
5254
|
+
"docs": {
|
|
5255
|
+
"remarks": "If your app is in a subdirectory, prefix with \"cd <dir> &&\".\nExample: \"cd dev && pnpm install --frozen-lockfile --ignore-scripts\"\n\nDefault: \"pnpm install --frozen-lockfile --ignore-scripts\"",
|
|
5256
|
+
"stability": "experimental",
|
|
5257
|
+
"summary": "Command to install dependencies before running CDK."
|
|
5258
|
+
},
|
|
5259
|
+
"immutable": true,
|
|
5260
|
+
"locationInModule": {
|
|
5261
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5262
|
+
"line": 103
|
|
5263
|
+
},
|
|
5264
|
+
"name": "installCommand",
|
|
5265
|
+
"optional": true,
|
|
5266
|
+
"type": {
|
|
5267
|
+
"primitive": "string"
|
|
5268
|
+
}
|
|
5269
|
+
}
|
|
5270
|
+
],
|
|
5271
|
+
"symbolId": "deployment-stack-pipeline/pipeline:DriftCheckConfig"
|
|
5272
|
+
},
|
|
5273
|
+
"@orcabus/platform-cdk-constructs.deploymentPipeline.FailOnDriftBuildStepProps": {
|
|
5274
|
+
"assembly": "@orcabus/platform-cdk-constructs",
|
|
5275
|
+
"datatype": true,
|
|
5276
|
+
"docs": {
|
|
5277
|
+
"stability": "experimental"
|
|
5278
|
+
},
|
|
5279
|
+
"fqn": "@orcabus/platform-cdk-constructs.deploymentPipeline.FailOnDriftBuildStepProps",
|
|
5280
|
+
"kind": "interface",
|
|
5281
|
+
"locationInModule": {
|
|
5282
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5283
|
+
"line": 638
|
|
5284
|
+
},
|
|
5285
|
+
"name": "FailOnDriftBuildStepProps",
|
|
5286
|
+
"namespace": "deploymentPipeline",
|
|
5287
|
+
"properties": [
|
|
5288
|
+
{
|
|
5289
|
+
"abstract": true,
|
|
5290
|
+
"docs": {
|
|
5291
|
+
"remarks": "Used to assume the CDK lookup role and set AWS_DEFAULT_REGION.",
|
|
5292
|
+
"stability": "experimental",
|
|
5293
|
+
"summary": "AWS account and region where the drift check runs."
|
|
5294
|
+
},
|
|
5295
|
+
"immutable": true,
|
|
5296
|
+
"locationInModule": {
|
|
5297
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5298
|
+
"line": 643
|
|
5299
|
+
},
|
|
5300
|
+
"name": "accountEnv",
|
|
5301
|
+
"type": {
|
|
5302
|
+
"fqn": "aws-cdk-lib.Environment"
|
|
5303
|
+
}
|
|
5304
|
+
},
|
|
5305
|
+
{
|
|
5306
|
+
"abstract": true,
|
|
5307
|
+
"docs": {
|
|
5308
|
+
"remarks": "Examples: \"pnpm cdk\", \"pnpm cdk-stateful\", \"pnpm cdk-stateless\".\nMust support: \"drift <stackId>\".",
|
|
5309
|
+
"stability": "experimental",
|
|
5310
|
+
"summary": "CDK CLI entrypoint used to run the drift command."
|
|
5311
|
+
},
|
|
5312
|
+
"immutable": true,
|
|
5313
|
+
"locationInModule": {
|
|
5314
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5315
|
+
"line": 657
|
|
5316
|
+
},
|
|
5317
|
+
"name": "cdkCommand",
|
|
5318
|
+
"type": {
|
|
5319
|
+
"primitive": "string"
|
|
5320
|
+
}
|
|
5321
|
+
},
|
|
5322
|
+
{
|
|
5323
|
+
"abstract": true,
|
|
5324
|
+
"docs": {
|
|
5325
|
+
"remarks": "Format: `<rootStack>/<constructId>/<envName>/<stackName>`\n\nExample: `DevStack/DeploymentPipeline/OrcaBusBeta/TestStack`",
|
|
5326
|
+
"stability": "experimental",
|
|
5327
|
+
"summary": "Fully qualified CDK stack ID to check for drift."
|
|
5328
|
+
},
|
|
5329
|
+
"immutable": true,
|
|
5330
|
+
"locationInModule": {
|
|
5331
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5332
|
+
"line": 651
|
|
5333
|
+
},
|
|
5334
|
+
"name": "stackId",
|
|
5335
|
+
"type": {
|
|
5336
|
+
"primitive": "string"
|
|
5337
|
+
}
|
|
5338
|
+
},
|
|
5339
|
+
{
|
|
5340
|
+
"abstract": true,
|
|
5341
|
+
"docs": {
|
|
5342
|
+
"remarks": "If your app is in a subdirectory, prefix with \"cd <dir> &&\".\nExample: \"cd dev && pnpm install --frozen-lockfile --ignore-scripts\"\n\nDefault: \"pnpm install --frozen-lockfile --ignore-scripts\"",
|
|
5343
|
+
"stability": "experimental",
|
|
5344
|
+
"summary": "Command to install dependencies before running CDK."
|
|
5345
|
+
},
|
|
5346
|
+
"immutable": true,
|
|
5347
|
+
"locationInModule": {
|
|
5348
|
+
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5349
|
+
"line": 665
|
|
5350
|
+
},
|
|
5351
|
+
"name": "installCommand",
|
|
5352
|
+
"optional": true,
|
|
5353
|
+
"type": {
|
|
5354
|
+
"primitive": "string"
|
|
5355
|
+
}
|
|
5356
|
+
}
|
|
5357
|
+
],
|
|
5358
|
+
"symbolId": "deployment-stack-pipeline/pipeline:FailOnDriftBuildStepProps"
|
|
5359
|
+
},
|
|
5105
5360
|
"@orcabus/platform-cdk-constructs.deploymentPipeline.ICrossDeploymentArtifactBucket": {
|
|
5106
5361
|
"assembly": "@orcabus/platform-cdk-constructs",
|
|
5107
5362
|
"docs": {
|
|
@@ -5161,7 +5416,7 @@
|
|
|
5161
5416
|
"kind": "interface",
|
|
5162
5417
|
"locationInModule": {
|
|
5163
5418
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5164
|
-
"line":
|
|
5419
|
+
"line": 71
|
|
5165
5420
|
},
|
|
5166
5421
|
"name": "StackConfigProps",
|
|
5167
5422
|
"namespace": "deploymentPipeline",
|
|
@@ -5175,7 +5430,7 @@
|
|
|
5175
5430
|
"immutable": true,
|
|
5176
5431
|
"locationInModule": {
|
|
5177
5432
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5178
|
-
"line":
|
|
5433
|
+
"line": 75
|
|
5179
5434
|
},
|
|
5180
5435
|
"name": "beta",
|
|
5181
5436
|
"type": {
|
|
@@ -5196,7 +5451,7 @@
|
|
|
5196
5451
|
"immutable": true,
|
|
5197
5452
|
"locationInModule": {
|
|
5198
5453
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5199
|
-
"line":
|
|
5454
|
+
"line": 79
|
|
5200
5455
|
},
|
|
5201
5456
|
"name": "gamma",
|
|
5202
5457
|
"type": {
|
|
@@ -5217,7 +5472,7 @@
|
|
|
5217
5472
|
"immutable": true,
|
|
5218
5473
|
"locationInModule": {
|
|
5219
5474
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5220
|
-
"line":
|
|
5475
|
+
"line": 83
|
|
5221
5476
|
},
|
|
5222
5477
|
"name": "prod",
|
|
5223
5478
|
"type": {
|
|
@@ -5242,7 +5497,7 @@
|
|
|
5242
5497
|
"kind": "interface",
|
|
5243
5498
|
"locationInModule": {
|
|
5244
5499
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5245
|
-
"line":
|
|
5500
|
+
"line": 56
|
|
5246
5501
|
},
|
|
5247
5502
|
"name": "StageEnvProps",
|
|
5248
5503
|
"namespace": "deploymentPipeline",
|
|
@@ -5256,7 +5511,7 @@
|
|
|
5256
5511
|
"immutable": true,
|
|
5257
5512
|
"locationInModule": {
|
|
5258
5513
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5259
|
-
"line":
|
|
5514
|
+
"line": 60
|
|
5260
5515
|
},
|
|
5261
5516
|
"name": "beta",
|
|
5262
5517
|
"type": {
|
|
@@ -5272,7 +5527,7 @@
|
|
|
5272
5527
|
"immutable": true,
|
|
5273
5528
|
"locationInModule": {
|
|
5274
5529
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5275
|
-
"line":
|
|
5530
|
+
"line": 64
|
|
5276
5531
|
},
|
|
5277
5532
|
"name": "gamma",
|
|
5278
5533
|
"type": {
|
|
@@ -5288,7 +5543,7 @@
|
|
|
5288
5543
|
"immutable": true,
|
|
5289
5544
|
"locationInModule": {
|
|
5290
5545
|
"filename": "deployment-stack-pipeline/pipeline.ts",
|
|
5291
|
-
"line":
|
|
5546
|
+
"line": 68
|
|
5292
5547
|
},
|
|
5293
5548
|
"name": "prod",
|
|
5294
5549
|
"type": {
|
|
@@ -7163,6 +7418,6 @@
|
|
|
7163
7418
|
"symbolId": "shared-config/slack:SlackAlerts"
|
|
7164
7419
|
}
|
|
7165
7420
|
},
|
|
7166
|
-
"version": "
|
|
7167
|
-
"fingerprint": "
|
|
7421
|
+
"version": "1.0.1",
|
|
7422
|
+
"fingerprint": "hQx69zKup+4mWchHaR83j+DeI6JgfjMNK/P/+Aq5FjY="
|
|
7168
7423
|
}
|
|
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
|
15
15
|
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
16
16
|
const config_1 = require("./config");
|
|
17
17
|
class OrcaBusApiGateway extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.0.1" };
|
|
19
19
|
/**
|
|
20
20
|
* The AWS region where the API Gateway is deployed.
|
|
21
21
|
*/
|
package/api-gateway/config.js
CHANGED
|
@@ -18,9 +18,13 @@ exports.DEFAULT_LOGS_CONFIG = {
|
|
|
18
18
|
},
|
|
19
19
|
};
|
|
20
20
|
exports.DEFAULT_ALLOW_CORS_ORIGINS = {
|
|
21
|
-
BETA: [
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
BETA: [
|
|
22
|
+
"https://orcaui.dev.umccr.org",
|
|
23
|
+
"https://portal.dev.umccr.org",
|
|
24
|
+
"http://localhost:3000",
|
|
25
|
+
],
|
|
26
|
+
GAMMA: ["https://orcaui.stg.umccr.org", "https://portal.stg.umccr.org"],
|
|
27
|
+
PROD: ["https://orcaui.umccr.org", "https://portal.umccr.org"],
|
|
24
28
|
};
|
|
25
29
|
// portal - TokenServiceStack
|
|
26
30
|
exports.COGNITO_PORTAL_APP_CLIENT_ID_PARAMETER_NAME = "/data_portal/client/data2/cog_app_client_id_stage";
|
|
@@ -57,4 +61,4 @@ exports.getDefaultApiGatewayConfiguration = getDefaultApiGatewayConfiguration;
|
|
|
57
61
|
* The SSM parameter name for the HTTP Lambda authorizer ARN.
|
|
58
62
|
*/
|
|
59
63
|
exports.AUTH_STACK_HTTP_LAMBDA_AUTHORIZER_PARAMETER_NAME = "/orcabus/authorization-stack/http-lambda-authorization-arn";
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRDtBQUNyRCw2Q0FBNEM7QUFlL0IsUUFBQSxtQkFBbUIsR0FBdUM7SUFDckUsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO0tBQ3JDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFLHdCQUFhLENBQUMsU0FBUztRQUNsQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO0tBQ3BDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQWdDO0lBQ3JFLElBQUksRUFBRTtRQUNKLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsdUJBQXVCO0tBQ3hCO0lBQ0QsS0FBSyxFQUFFLENBQUMsOEJBQThCLEVBQUUsOEJBQThCLENBQUM7SUFDdkUsSUFBSSxFQUFFLENBQUMsMEJBQTBCLEVBQUUsMEJBQTBCLENBQUM7Q0FDL0QsQ0FBQztBQUVGLDZCQUE2QjtBQUNoQixRQUFBLDJDQUEyQyxHQUN0RCxtREFBbUQsQ0FBQztBQUV6QyxRQUFBLDJDQUEyQyxHQUN0RCxpQ0FBaUMsQ0FBQztBQUVwQyx3QkFBd0I7QUFDWCxRQUFBLDBDQUEwQyxHQUNyRCw2Q0FBNkMsQ0FBQztBQUVoRCwrQ0FBK0M7QUFDL0MsTUFBTSxzQ0FBc0MsR0FBRztJQUM3QyxtREFBMkM7SUFDM0MsbURBQTJDO0NBQzVDLENBQUM7QUFFRix3Q0FBd0M7QUFDM0IsUUFBQSxzQ0FBc0MsR0FHL0M7SUFDRixJQUFJLEVBQUU7UUFDSixHQUFHLHNDQUFzQztRQUN6QyxrREFBMEM7S0FDM0M7SUFDRCxLQUFLLEVBQUUsc0NBQXNDO0lBQzdDLElBQUksRUFBRSxzQ0FBc0M7Q0FDN0MsQ0FBQztBQUVXLFFBQUEsMkNBQTJDLEdBQ3RELHNDQUFzQyxDQUFDO0FBRTVCLFFBQUEsOEJBQThCLEdBQUcsd0JBQXdCLENBQUM7QUFDMUQsUUFBQSxpQ0FBaUMsR0FBRyx5QkFBeUIsQ0FBQztBQUM5RCxRQUFBLDZCQUE2QixHQUFHLHVCQUF1QixDQUFDO0FBRTlELE1BQU0saUNBQWlDLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUU7SUFDcEUsT0FBTztRQUNMLGlDQUFpQyxFQUMvQiw4Q0FBc0MsQ0FBQyxLQUFLLENBQUM7UUFDL0MsZ0JBQWdCLEVBQUUsa0NBQTBCLENBQUMsS0FBSyxDQUFDO1FBQ25ELGVBQWUsRUFBRSwyQkFBbUIsQ0FBQyxLQUFLLENBQUM7S0FDNUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVBXLFFBQUEsaUNBQWlDLHFDQU81QztBQUVGOztHQUVHO0FBQ1UsUUFBQSxnREFBZ0QsR0FDM0QsNERBQTRELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvZ3NDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXRlbnRpb24gcG9saWN5IGZvciB0aGUgQVBJIEdhdGV3YXkgbG9ncy5cbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbjogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHRoZSBsb2cgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPR1NfQ09ORklHOiBSZWNvcmQ8U3RhZ2VOYW1lLCBMb2dzQ29uZmlnUHJvcHM+ID0ge1xuICBCRVRBOiB7XG4gICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIEdBTU1BOiB7XG4gICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gIH0sXG4gIFBST0Q6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gIEJFVEE6IFtcbiAgICBcImh0dHBzOi8vb3JjYXVpLmRldi51bWNjci5vcmdcIixcbiAgICBcImh0dHBzOi8vcG9ydGFsLmRldi51bWNjci5vcmdcIixcbiAgICBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLFxuICBdLFxuICBHQU1NQTogW1wiaHR0cHM6Ly9vcmNhdWkuc3RnLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vcG9ydGFsLnN0Zy51bWNjci5vcmdcIl0sXG4gIFBST0Q6IFtcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vcG9ydGFsLnVtY2NyLm9yZ1wiXSxcbn07XG5cbi8vIHBvcnRhbCAtIFRva2VuU2VydmljZVN0YWNrXG5leHBvcnQgY29uc3QgQ09HTklUT19QT1JUQUxfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9kYXRhMi9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiO1xuXG5leHBvcnQgY29uc3QgQ09HTklUT19PUkNBVUlfQVBQX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL29yY2F1aS9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiO1xuXG4vLyBsb2NhbGhvc3QgZGV2ZWxvcG1lbnRcbmV4cG9ydCBjb25zdCBDT0dOSVRPX0xPQ0FMX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUgPVxuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvY29nX2FwcF9jbGllbnRfaWRfbG9jYWxcIjtcblxuLy8gQmFzZSBjbGllbnQgSURzIHVzZWQgYWNyb3NzIGFsbCBlbnZpcm9ubWVudHNcbmNvbnN0IEJBU0VfQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVTID0gW1xuICBDT0dOSVRPX1BPUlRBTF9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FLFxuICBDT0dOSVRPX09SQ0FVSV9BUFBfQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FLFxuXTtcblxuLy8gRW52aXJvbm1lbnQtc3BlY2lmaWMgY2xpZW50IElEIGFycmF5c1xuZXhwb3J0IGNvbnN0IENPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZOiBSZWNvcmQ8XG4gIFN0YWdlTmFtZSxcbiAgc3RyaW5nW11cbj4gPSB7XG4gIEJFVEE6IFtcbiAgICAuLi5CQVNFX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FUyxcbiAgICBDT0dOSVRPX0xPQ0FMX0FQUF9DTElFTlRfSURfUEFSQU1FVEVSX05BTUUsXG4gIF0sXG4gIEdBTU1BOiBCQVNFX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FUyxcbiAgUFJPRDogQkFTRV9DT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRVMsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0dOSVRPX1VTRVJfUE9PTF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICBDT0dOSVRPX0NMSUVOVF9JRF9QQVJBTUVURVJfTkFNRV9BUlJBWVtzdGFnZV0sXG4gICAgY29yc0FsbG93T3JpZ2luczogREVGQVVMVF9BTExPV19DT1JTX09SSUdJTlNbc3RhZ2VdLFxuICAgIGFwaUd3TG9nc0NvbmZpZzogREVGQVVMVF9MT0dTX0NPTkZJR1tzdGFnZV0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBIVFRQIExhbWJkYSBhdXRob3JpemVyIEFSTi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFVVEhfU1RBQ0tfSFRUUF9MQU1CREFfQVVUSE9SSVpFUl9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL29yY2FidXMvYXV0aG9yaXphdGlvbi1zdGFjay9odHRwLWxhbWJkYS1hdXRob3JpemF0aW9uLWFyblwiO1xuIl19
|
|
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
|
|
|
13
13
|
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
|
|
14
14
|
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
|
|
15
15
|
class CrossDeploymentArtifactBucket extends constructs_1.Construct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.0.1" };
|
|
17
17
|
/**
|
|
18
18
|
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
19
19
|
*/
|
|
@@ -41,6 +41,35 @@ export interface StackConfigProps {
|
|
|
41
41
|
*/
|
|
42
42
|
readonly prod: Record<string, any>;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Configuration for pre-deployment drift detection checks.
|
|
46
|
+
*/
|
|
47
|
+
export interface DriftCheckConfig {
|
|
48
|
+
/**
|
|
49
|
+
* CDK CLI entrypoint used to run the drift command.
|
|
50
|
+
* Examples: "pnpm cdk", "pnpm cdk-stateful", "pnpm cdk-stateless".
|
|
51
|
+
* Must support: "drift <stackId>".
|
|
52
|
+
*/
|
|
53
|
+
readonly cdkCommand: string;
|
|
54
|
+
/**
|
|
55
|
+
* Command to install dependencies before running CDK.
|
|
56
|
+
* If your app is in a subdirectory, prefix with "cd <dir> &&".
|
|
57
|
+
* Example: "cd dev && pnpm install --frozen-lockfile --ignore-scripts"
|
|
58
|
+
*
|
|
59
|
+
* Default: "pnpm install --frozen-lockfile --ignore-scripts"
|
|
60
|
+
*/
|
|
61
|
+
readonly installCommand?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface CodeBuildStepProps {
|
|
64
|
+
/**
|
|
65
|
+
* the main command for the build step to run
|
|
66
|
+
*/
|
|
67
|
+
readonly command: string[];
|
|
68
|
+
/**
|
|
69
|
+
* Partial buildspec for this CodeBuildStep
|
|
70
|
+
*/
|
|
71
|
+
readonly partialBuildSpec?: Record<string, any>;
|
|
72
|
+
}
|
|
44
73
|
export interface DeploymentStackPipelineProps {
|
|
45
74
|
/**
|
|
46
75
|
* The GitHub branch name the pipeline will listen to.
|
|
@@ -85,7 +114,7 @@ export interface DeploymentStackPipelineProps {
|
|
|
85
114
|
*/
|
|
86
115
|
readonly excludedFilePaths?: string[];
|
|
87
116
|
/**
|
|
88
|
-
* The command to run to synth the cdk stack which also installing the cdk dependencies. e.g. ["
|
|
117
|
+
* The command to run to synth the cdk stack which also installing the cdk dependencies. e.g. ["pnpm install --frozen-lockfile", "pnpm cdk synth"]
|
|
89
118
|
*/
|
|
90
119
|
readonly cdkSynthCmd: string[];
|
|
91
120
|
/**
|
|
@@ -100,6 +129,22 @@ export interface DeploymentStackPipelineProps {
|
|
|
100
129
|
* @default DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC
|
|
101
130
|
*/
|
|
102
131
|
readonly synthBuildSpec?: Record<string, any>;
|
|
132
|
+
/**
|
|
133
|
+
* Configuration for the CodeBuild step that runs unit tests for the main application code.
|
|
134
|
+
* This step will execute in parallel with {@link unitIacTestConfig} as part of the synth stage dependencies.
|
|
135
|
+
* Both must succeed before the synth step runs.
|
|
136
|
+
*
|
|
137
|
+
* ensure your command includes 'cd' to the main app directory, as the build context starts from the root.
|
|
138
|
+
*/
|
|
139
|
+
readonly unitAppTestConfig: CodeBuildStepProps;
|
|
140
|
+
/**
|
|
141
|
+
* Configuration for the CodeBuild step that runs unit tests for Infrastructure-as-Code (IaC) at the repository root.
|
|
142
|
+
* This step will execute in parallel with {@link unitAppTestConfig} as part of the synth stage dependencies.
|
|
143
|
+
* Both must succeed before the synth step runs.
|
|
144
|
+
*
|
|
145
|
+
* The default command will be from the root of the repo: ["npm install --global corepack@latest", "corepack enable", "make install", "make test"]
|
|
146
|
+
*/
|
|
147
|
+
readonly unitIacTestConfig?: CodeBuildStepProps;
|
|
103
148
|
/**
|
|
104
149
|
* The stage environment for the deployment stack
|
|
105
150
|
*/
|
|
@@ -131,6 +176,11 @@ export interface DeploymentStackPipelineProps {
|
|
|
131
176
|
* @see https://github.com/aws/aws-cdk/issues/9917
|
|
132
177
|
*/
|
|
133
178
|
readonly stripAssemblyAssets?: boolean;
|
|
179
|
+
/**
|
|
180
|
+
* Configuration for drift detection checks before deployment.
|
|
181
|
+
* If specified, the pipeline will check for CloudFormation drift and fail if detected.
|
|
182
|
+
*/
|
|
183
|
+
readonly driftCheckConfig?: DriftCheckConfig;
|
|
134
184
|
}
|
|
135
185
|
/**
|
|
136
186
|
* A CDK construct that creates a deployment pipeline across environments for the OrcaBus project.
|
|
@@ -145,3 +195,32 @@ export declare class DeploymentStackPipeline extends Construct {
|
|
|
145
195
|
readonly pipeline: Pipeline;
|
|
146
196
|
constructor(scope: Construct, id: string, props: DeploymentStackPipelineProps);
|
|
147
197
|
}
|
|
198
|
+
export interface FailOnDriftBuildStepProps {
|
|
199
|
+
/**
|
|
200
|
+
* AWS account and region where the drift check runs.
|
|
201
|
+
* Used to assume the CDK lookup role and set AWS_DEFAULT_REGION.
|
|
202
|
+
*/
|
|
203
|
+
readonly accountEnv: Environment;
|
|
204
|
+
/**
|
|
205
|
+
* Fully qualified CDK stack ID to check for drift.
|
|
206
|
+
*
|
|
207
|
+
* Format: `<rootStack>/<constructId>/<envName>/<stackName>`
|
|
208
|
+
*
|
|
209
|
+
* Example: `DevStack/DeploymentPipeline/OrcaBusBeta/TestStack`
|
|
210
|
+
*/
|
|
211
|
+
readonly stackId: string;
|
|
212
|
+
/**
|
|
213
|
+
* CDK CLI entrypoint used to run the drift command.
|
|
214
|
+
* Examples: "pnpm cdk", "pnpm cdk-stateful", "pnpm cdk-stateless".
|
|
215
|
+
* Must support: "drift <stackId>".
|
|
216
|
+
*/
|
|
217
|
+
readonly cdkCommand: string;
|
|
218
|
+
/**
|
|
219
|
+
* Command to install dependencies before running CDK.
|
|
220
|
+
* If your app is in a subdirectory, prefix with "cd <dir> &&".
|
|
221
|
+
* Example: "cd dev && pnpm install --frozen-lockfile --ignore-scripts"
|
|
222
|
+
*
|
|
223
|
+
* Default: "pnpm install --frozen-lockfile --ignore-scripts"
|
|
224
|
+
*/
|
|
225
|
+
readonly installCommand?: string;
|
|
226
|
+
}
|
|
@@ -13,6 +13,7 @@ const aws_chatbot_1 = require("aws-cdk-lib/aws-chatbot");
|
|
|
13
13
|
const aws_codestarnotifications_1 = require("aws-cdk-lib/aws-codestarnotifications");
|
|
14
14
|
const artifact_bucket_1 = require("./artifact-bucket");
|
|
15
15
|
const aws_codepipeline_actions_1 = require("aws-cdk-lib/aws-codepipeline-actions");
|
|
16
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
16
17
|
/**
|
|
17
18
|
* The default partial build spec for the synth step in the pipeline.
|
|
18
19
|
*/
|
|
@@ -32,14 +33,14 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
|
|
|
32
33
|
* before using this construct.
|
|
33
34
|
*/
|
|
34
35
|
class DeploymentStackPipeline extends constructs_1.Construct {
|
|
35
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "
|
|
36
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.0.1" };
|
|
36
37
|
/**
|
|
37
38
|
* The code pipeline construct that is created.
|
|
38
39
|
*/
|
|
39
40
|
pipeline;
|
|
40
41
|
constructor(scope, id, props) {
|
|
41
42
|
super(scope, id);
|
|
42
|
-
const codeStarArn = aws_ssm_1.StringParameter.valueForStringParameter(this, "
|
|
43
|
+
const codeStarArn = aws_ssm_1.StringParameter.valueForStringParameter(this, "codestar_github_arn");
|
|
43
44
|
const codeStarSourceActionName = "pipeline-src";
|
|
44
45
|
const sourceFile = pipelines_1.CodePipelineSource.connection(`OrcaBus/${props.githubRepo}`, props.githubBranch, {
|
|
45
46
|
connectionArn: codeStarArn,
|
|
@@ -55,6 +56,9 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
55
56
|
pipelineType: aws_codepipeline_1.PipelineType.V2,
|
|
56
57
|
pipelineName: props.pipelineName,
|
|
57
58
|
crossAccountKeys: true,
|
|
59
|
+
// enable restartExecutionOnUpdate
|
|
60
|
+
// https://stackoverflow.com/questions/75701776/updatepipeline-stage-in-cdk-pipeline-is-cancelled
|
|
61
|
+
restartExecutionOnUpdate: true,
|
|
58
62
|
});
|
|
59
63
|
if (props.includedFilePaths || props.excludedFilePaths) {
|
|
60
64
|
const filePaths = {};
|
|
@@ -83,21 +87,67 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
83
87
|
},
|
|
84
88
|
]);
|
|
85
89
|
}
|
|
90
|
+
// Add unit test for IaC at the root of the
|
|
91
|
+
const { command: unitIacTestCommand = [
|
|
92
|
+
"npm install --global corepack@latest",
|
|
93
|
+
"corepack enable",
|
|
94
|
+
"make install",
|
|
95
|
+
"make test",
|
|
96
|
+
], partialBuildSpec: unitIacPartialBuildSpec = undefined, } = props.unitIacTestConfig || {};
|
|
97
|
+
const unitIacTest = new pipelines_1.CodeBuildStep("UnitIacTest", {
|
|
98
|
+
commands: unitIacTestCommand,
|
|
99
|
+
input: sourceFile,
|
|
100
|
+
buildEnvironment: {
|
|
101
|
+
privileged: true,
|
|
102
|
+
computeType: aws_codebuild_1.ComputeType.LARGE,
|
|
103
|
+
buildImage: aws_codebuild_1.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
|
|
104
|
+
environmentVariables: {
|
|
105
|
+
NODE_OPTIONS: {
|
|
106
|
+
value: "--max-old-space-size=8192",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
partialBuildSpec: unitIacPartialBuildSpec
|
|
111
|
+
? aws_codebuild_1.BuildSpec.fromObject(unitIacPartialBuildSpec)
|
|
112
|
+
: undefined,
|
|
113
|
+
});
|
|
114
|
+
// Adding unit test for the main app
|
|
115
|
+
const { command: unitAppTestCommand, partialBuildSpec: unitAppPartialBuildSpec = undefined, } = props.unitAppTestConfig;
|
|
116
|
+
const unitAppTest = new pipelines_1.CodeBuildStep("UnitAppTest", {
|
|
117
|
+
commands: unitAppTestCommand,
|
|
118
|
+
input: sourceFile,
|
|
119
|
+
buildEnvironment: {
|
|
120
|
+
privileged: true,
|
|
121
|
+
computeType: aws_codebuild_1.ComputeType.LARGE,
|
|
122
|
+
buildImage: aws_codebuild_1.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
|
|
123
|
+
environmentVariables: {
|
|
124
|
+
NODE_OPTIONS: {
|
|
125
|
+
value: "--max-old-space-size=8192",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
partialBuildSpec: unitAppPartialBuildSpec
|
|
130
|
+
? aws_codebuild_1.BuildSpec.fromObject(unitAppPartialBuildSpec)
|
|
131
|
+
: undefined,
|
|
132
|
+
});
|
|
86
133
|
const { synthBuildSpec = exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC } = props;
|
|
134
|
+
const synthStep = new pipelines_1.CodeBuildStep("CdkSynth", {
|
|
135
|
+
installCommands: [
|
|
136
|
+
"node -v",
|
|
137
|
+
"npm install --global corepack@latest",
|
|
138
|
+
"corepack --version",
|
|
139
|
+
"corepack enable",
|
|
140
|
+
],
|
|
141
|
+
commands: props.cdkSynthCmd,
|
|
142
|
+
input: sourceFile,
|
|
143
|
+
primaryOutputDirectory: props.cdkOut || "cdk.out",
|
|
144
|
+
partialBuildSpec: aws_codebuild_1.BuildSpec.fromObject(synthBuildSpec),
|
|
145
|
+
});
|
|
146
|
+
synthStep.addStepDependency(unitIacTest);
|
|
147
|
+
synthStep.addStepDependency(unitAppTest);
|
|
87
148
|
const cdkPipeline = new pipelines_1.CodePipeline(this, "CDKCodePipeline", {
|
|
88
149
|
codePipeline: this.pipeline,
|
|
89
|
-
synth:
|
|
90
|
-
installCommands: [
|
|
91
|
-
"node -v",
|
|
92
|
-
"npm install --global corepack@latest",
|
|
93
|
-
"corepack --version",
|
|
94
|
-
"corepack enable",
|
|
95
|
-
],
|
|
96
|
-
commands: props.cdkSynthCmd,
|
|
97
|
-
input: sourceFile,
|
|
98
|
-
primaryOutputDirectory: props.cdkOut || "cdk.out",
|
|
99
|
-
partialBuildSpec: aws_codebuild_1.BuildSpec.fromObject(synthBuildSpec),
|
|
100
|
-
}),
|
|
150
|
+
synth: synthStep,
|
|
101
151
|
selfMutation: true,
|
|
102
152
|
codeBuildDefaults: {
|
|
103
153
|
buildEnvironment: {
|
|
@@ -140,8 +190,43 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
140
190
|
pre: [stripAssetsFromAssembly],
|
|
141
191
|
});
|
|
142
192
|
}
|
|
143
|
-
|
|
144
|
-
|
|
193
|
+
// Construct function to get StackId for drift check
|
|
194
|
+
const rootStackName = aws_cdk_lib_1.Stack.of(this).stackName;
|
|
195
|
+
const constructId = this.node.id;
|
|
196
|
+
const getStackId = (envName) => `${rootStackName}/${constructId}/${envName}/${props.stackName}`;
|
|
197
|
+
// Drift check config
|
|
198
|
+
const isDriftCheckStep = !!props.driftCheckConfig;
|
|
199
|
+
const cdkInstallCmd = props.driftCheckConfig?.installCommand ??
|
|
200
|
+
"pnpm install --frozen-lockfile --ignore-scripts";
|
|
201
|
+
const cdkRunCmd = props.driftCheckConfig?.cdkCommand ?? ``;
|
|
202
|
+
const betaEnvName = "OrcaBusBeta";
|
|
203
|
+
cdkPipeline.addStage(new DeploymentStage(this, betaEnvName, stageEnv.beta, props.stackName, props.stack, props.stackConfig.beta, props.githubRepo, props.githubBranch), {
|
|
204
|
+
pre: isDriftCheckStep
|
|
205
|
+
? [
|
|
206
|
+
new FailOnDriftBuildStep("DriftOnFailBetaCheck", {
|
|
207
|
+
accountEnv: stageEnv.beta,
|
|
208
|
+
stackId: getStackId(betaEnvName),
|
|
209
|
+
cdkCommand: cdkRunCmd,
|
|
210
|
+
installCommand: cdkInstallCmd,
|
|
211
|
+
}),
|
|
212
|
+
]
|
|
213
|
+
: undefined,
|
|
214
|
+
});
|
|
215
|
+
/**
|
|
216
|
+
* GAMMA
|
|
217
|
+
*/
|
|
218
|
+
const gammaEnvName = "OrcaBusGamma";
|
|
219
|
+
cdkPipeline.addStage(new DeploymentStage(this, gammaEnvName, stageEnv.gamma, props.stackName, props.stack, props.stackConfig.gamma, props.githubRepo, props.githubBranch), {
|
|
220
|
+
pre: isDriftCheckStep
|
|
221
|
+
? [
|
|
222
|
+
new FailOnDriftBuildStep("DriftOnFailGammaCheck", {
|
|
223
|
+
accountEnv: stageEnv.gamma,
|
|
224
|
+
stackId: getStackId(gammaEnvName),
|
|
225
|
+
cdkCommand: cdkRunCmd,
|
|
226
|
+
installCommand: cdkInstallCmd,
|
|
227
|
+
}),
|
|
228
|
+
]
|
|
229
|
+
: undefined,
|
|
145
230
|
post: [
|
|
146
231
|
new ManualApprovalActionStep("PromoteToProd", {
|
|
147
232
|
actionName: "PromoteToProd",
|
|
@@ -154,7 +239,22 @@ class DeploymentStackPipeline extends constructs_1.Construct {
|
|
|
154
239
|
}),
|
|
155
240
|
],
|
|
156
241
|
});
|
|
157
|
-
|
|
242
|
+
/**
|
|
243
|
+
* PROD
|
|
244
|
+
*/
|
|
245
|
+
const prodEnvName = "OrcaBusProd";
|
|
246
|
+
cdkPipeline.addStage(new DeploymentStage(this, prodEnvName, stageEnv.prod, props.stackName, props.stack, props.stackConfig.prod, props.githubRepo, props.githubBranch), {
|
|
247
|
+
pre: isDriftCheckStep
|
|
248
|
+
? [
|
|
249
|
+
new FailOnDriftBuildStep("DriftOnFailProdCheck", {
|
|
250
|
+
accountEnv: stageEnv.prod,
|
|
251
|
+
stackId: getStackId(prodEnvName),
|
|
252
|
+
cdkCommand: cdkRunCmd,
|
|
253
|
+
installCommand: cdkInstallCmd,
|
|
254
|
+
}),
|
|
255
|
+
]
|
|
256
|
+
: undefined,
|
|
257
|
+
});
|
|
158
258
|
cdkPipeline.buildPipeline();
|
|
159
259
|
if (stripAssetsFromAssembly) {
|
|
160
260
|
cdkPipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsFromAssembly.project);
|
|
@@ -212,4 +312,35 @@ class DeploymentStage extends aws_cdk_lib_1.Stage {
|
|
|
212
312
|
});
|
|
213
313
|
}
|
|
214
314
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFJbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVMrQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUU5Qzs7R0FFRztBQUNVLFFBQUEscUNBQXFDLEdBQUc7SUFDbkQsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFO1lBQ1Asa0JBQWtCLEVBQUU7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQThIRjs7Ozs7R0FLRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7O0lBQ3BEOztPQUVHO0lBQ00sUUFBUSxDQUFXO0lBRTVCLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW1DO1FBRW5DLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcseUJBQWUsQ0FBQyx1QkFBdUIsQ0FDekQsSUFBSSxFQUNKLDhCQUE4QixDQUMvQixDQUFDO1FBQ0YsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsOEJBQWtCLENBQUMsVUFBVSxDQUM5QyxXQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFDN0IsS0FBSyxDQUFDLFlBQVksRUFDbEI7WUFDRSxhQUFhLEVBQUUsV0FBVztZQUMxQixVQUFVLEVBQUUsd0JBQXdCO1lBQ3BDLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQ0YsQ0FBQztRQUVGLE1BQU0sK0JBQStCLEdBQ25DLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUM7UUFDNUMsTUFBTSxjQUFjLEdBQUcsK0JBQStCO1lBQ3BELENBQUMs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aW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBMaW51eEFybUJ1aWxkSW1hZ2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBNYW51YWxBcHByb3ZhbFN0ZXAsXG4gIFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICBTdGVwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge1xuICBQaXBlbGluZSxcbiAgQ2ZuUGlwZWxpbmUsXG4gIFBpcGVsaW5lVHlwZSxcbiAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsXG4gIElTdGFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7XG4gIEJFVEFfRU5WSVJPTk1FTlQsXG4gIEdBTU1BX0VOVklST05NRU5ULFxuICBQUk9EX0VOVklST05NRU5ULFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IFNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNoYXRib3RcIjtcbmltcG9ydCB7IERldGFpbFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVzdGFybm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHsgQ3Jvc3NEZXBsb3ltZW50QXJ0aWZhY3RCdWNrZXQgfSBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmltcG9ydCB7XG4gIE1hbnVhbEFwcHJvdmFsQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgcGFydGlhbCBidWlsZCBzcGVjIGZvciB0aGUgc3ludGggc3RlcCBpbiB0aGUgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDID0ge1xuICBwaGFzZXM6IHtcbiAgICBpbnN0YWxsOiB7XG4gICAgICBcInJ1bnRpbWUtdmVyc2lvbnNcIjoge1xuICAgICAgICBub2RlanM6IFwiMjIueFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUVudlByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGJldGEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgZ2FtbWEgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZXRhIChkZXYpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYW1tYSAoc3RnKSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb2Qgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wieWFybiBpbnN0YWxsIC0taW1tdXRhYmxlXCIsIFwieWFybiBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgcGFzc2VkIGFzIHRoZSBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQ1xuICAgKi9cbiAgcmVhZG9ubHkgc3ludGhCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcIi9vcmNhYnVzL2NvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN5bnRoQnVpbGRTcGVjID0gREVGQVVMVF9TWU5USF9TVEVQX1BBUlRJQUxfQlVJTERfU1BFQyB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBuZXcgQ29kZUJ1aWxkU3RlcChcIkNka1N5bnRoXCIsIHtcbiAgICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXG4gICAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgICAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgICAgICAgICBcImNvcmVwYWNrIC0tdmVyc2lvblwiLFxuICAgICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGNvbW1hbmRzOiBwcm9wcy5jZGtTeW50aENtZCxcbiAgICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHByb3BzLmNka091dCB8fCBcImNkay5vdXRcIixcbiAgICAgICAgcGFydGlhbEJ1aWxkU3BlYzogQnVpbGRTcGVjLmZyb21PYmplY3Qoc3ludGhCdWlsZFNwZWMpLFxuICAgICAgfSksXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJPcmNhQnVzQmV0YVwiLFxuICAgICAgICBzdGFnZUVudi5iZXRhLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5iZXRhLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiT3JjYUJ1c0dhbW1hXCIsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcG9zdDogW1xuICAgICAgICAgIG5ldyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAoXCJQcm9tb3RlVG9Qcm9kXCIsIHtcbiAgICAgICAgICAgIGFjdGlvbk5hbWU6IFwiUHJvbW90ZVRvUHJvZFwiLFxuICAgICAgICAgICAgLy8gQ3VzdG9tIHN0ZXBzIGJ5cGFzcyBzdGFnZSBwcmUvcG9zdCBvcmRlcmluZywgc28gcnVuT3JkZXIgbXVzdCBiZSBleHBsaWNpdGx5IHNldC5cbiAgICAgICAgICAgIC8vIFNldCB0byA1IHRvIGVuc3VyZSB0aGlzIHJ1bnMgYWZ0ZXIgYWxsIE9yY2FCdXNHYW1tYSBzdGFnZSBzdGVwcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIC8vIChHYW1tYSBkZXBsb3ltZW50IHR5cGljYWxseSB1c2VzIDIgc3RlcHMsIHNvIDUgcHJvdmlkZXMgYWRlcXVhdGUgYnVmZmVyKVxuICAgICAgICAgICAgcnVuT3JkZXI6IDUsXG4gICAgICAgICAgICAvLyA2MC1taW51dGUgdGltZW91dCBhbGxvd3MgcXVldWVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgdG8gcHJvY2VlZCBpZiBhcHByb3ZhbCBleHBpcmVzXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDYwKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJPcmNhQnVzUHJvZFwiLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBpZiAoc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkpIHtcbiAgICAgIGNka1BpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseS5wcm9qZWN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlU2xhY2tOb3RpZmljYXRpb24gPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIvY2hhdGJvdF9hcm4vc2xhY2svYWxlcnRzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbi5mcm9tU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBpcGVsaW5lLm5vdGlmeU9uKFwiUGlwZWxpbmVTbGFja05vdGlmaWNhdGlvblwiLCB0YXJnZXQsIHtcbiAgICAgICAgZXZlbnRzOiBwcm9wcy5ub3RpZmljYXRpb25FdmVudHMgfHwgW1xuICAgICAgICAgIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbFR5cGU6IERldGFpbFR5cGUuRlVMTCxcbiAgICAgICAgbm90aWZpY2F0aW9uUnVsZU5hbWU6IGBPcmNhQnVzLSR7cHJvcHMucGlwZWxpbmVOYW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAgd2l0aCByZXF1aXJlZCBydW5PcmRlci5cbiAqL1xuaW50ZXJmYWNlIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzIGV4dGVuZHMgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIG9yZGVyIGZvciB0aGlzIGFjdGlvbiBpbiB0aGUgcGlwZWxpbmUgc3RhZ2UuIFRoZSBzdGFnZSBQcmUvUG9zdCBvcmRlciBkb2VzIG5vdCBhcHBseSB0byB0aGlzIGN1c3RvbVxuICAgKiBzdGVwL2FjdGlvbiwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJ1bk9yZGVyLlxuICAgKi9cbiAgcnVuT3JkZXI6IG51bWJlcjtcbn1cbi8qKlxuICogQ3VzdG9tIG1hbnVhbCBhcHByb3ZhbCBzdGVwIGZvciBDREsgQ29kZVBpcGVsaW5lLlxuICpcbiAqIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgZ2FwIHRvIGVuYWJsZSB1c2luZyBNYW51YWxBcHByb3ZhbEFjdGlvbiB3aXRoaW4gYSBTdGVwIGNsYXNzLFxuICogbWFraW5nIGl0IGNvbXBhdGlibGUgd2l0aCBjZGsucGlwZWxpbmVzIGNvbnN0cnVjdHMuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW51YWwgYXBwcm92YWwgYWN0aW9uLCBpbmNsdWRpbmdcbiAqL1xuY2xhc3MgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwXG4gIGV4dGVuZHMgU3RlcFxuICBpbXBsZW1lbnRzIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHM7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQpO1xuICAgIHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcHJvZHVjZUFjdGlvbihcbiAgICBzdGFnZTogSVN0YWdlLFxuICAgIG9wdGlvbnM6IFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICApOiBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0IHtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uKHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykpO1xuXG4gICAgcmV0dXJuIHsgcnVuT3JkZXJzQ29uc3VtZWQ6IDEgfTtcbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
315
|
+
class FailOnDriftBuildStep extends pipelines_1.CodeBuildStep {
|
|
316
|
+
constructor(id, { accountEnv, stackId, cdkCommand, installCommand, }) {
|
|
317
|
+
const cdkInstall = installCommand
|
|
318
|
+
? installCommand
|
|
319
|
+
: "pnpm install --frozen-lockfile --ignore-scripts";
|
|
320
|
+
super(id, {
|
|
321
|
+
commands: [
|
|
322
|
+
"node -v",
|
|
323
|
+
"npm install --global corepack@latest",
|
|
324
|
+
"corepack --version",
|
|
325
|
+
"corepack enable",
|
|
326
|
+
cdkInstall,
|
|
327
|
+
`LOOKUP_ROLE_ARN="arn:aws:iam::${accountEnv.account}:role/cdk-hnb659fds-lookup-role-${accountEnv.account}-${accountEnv.region}"`,
|
|
328
|
+
'SESSION_NAME="drift-check"',
|
|
329
|
+
'read AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN < <(aws sts assume-role --role-arn "$LOOKUP_ROLE_ARN" --role-session-name "$SESSION_NAME" --duration-seconds 900 --query \'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]\' --output text)',
|
|
330
|
+
"export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN",
|
|
331
|
+
`export AWS_DEFAULT_REGION="${accountEnv.region}"`,
|
|
332
|
+
"aws sts get-caller-identity",
|
|
333
|
+
`if ${cdkCommand} ls | grep -Fq "${stackId}"; then echo "Stack ${stackId} found; checking for drift..."; ${cdkCommand} drift "${stackId}" -e --fail; else echo "Stack not found in cdk ls; skipping drift check."; fi`,
|
|
334
|
+
],
|
|
335
|
+
rolePolicyStatements: [
|
|
336
|
+
new aws_iam_1.PolicyStatement({
|
|
337
|
+
actions: ["sts:AssumeRole"],
|
|
338
|
+
resources: [
|
|
339
|
+
`arn:aws:iam::${accountEnv.account}:role/cdk-hnb659fds-lookup-role-${accountEnv.account}-${accountEnv.region}`,
|
|
340
|
+
],
|
|
341
|
+
}),
|
|
342
|
+
],
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFPc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUk4QztBQUM5QyxpREFBc0Q7QUFFdEQ7O0dBRUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHO0lBQ25ELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRTtZQUNQLGtCQUFrQixFQUFFO2dCQUNsQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFrTEY7Ozs7O0dBS0c7QUFDSCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTOztJQUNwRDs7T0FFRztJQUNNLFFBQVEsQ0FBVztJQUU1QixZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFtQztRQUVuQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sV0FBVyxHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ3pELElBQUksRUFDSixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLDhCQUFrQixDQUFDLFVBQVUsQ0FDOUMsV0FBVyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQzdCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCO1lBQ0UsYUFBYSxFQUFFLFdBQVc7WUFDMUIsVUFBVSxFQUFFLHdCQUF3QjtZQUNwQyxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLCtCQUErQixHQUNuQyxLQUFLLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDO1FBQzVDLE1BQU0sY0FBYyxHQUFHLCtCQUEr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QUFzQztnQkFDdEMsb0JBQW9CO2dCQUNwQixpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBRVYsaUNBQWlDLFVBQVUsQ0FBQyxPQUFPLG1DQUFtQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2hJLDRCQUE0QjtnQkFDNUIsbVFBQW1RO2dCQUNuUSxrRUFBa0U7Z0JBQ2xFLDhCQUE4QixVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsRCw2QkFBNkI7Z0JBRTdCLE1BQU0sVUFBVSxtQkFBbUIsT0FBTyx1QkFBdUIsT0FBTyxtQ0FBbUMsVUFBVSxXQUFXLE9BQU8sK0VBQStFO2FBQ3ZOO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLFNBQVMsRUFBRTt3QkFDVCxnQkFBZ0IsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtxQkFDL0c7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCdWlsZFNwZWMsXG4gIENvbXB1dGVUeXBlLFxuICBJUHJvamVjdCxcbiAgTGludXhBcm1CdWlsZEltYWdlLFxuICBQaXBlbGluZVByb2plY3QsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkXCI7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkU3RlcCxcbiAgQ29kZVBpcGVsaW5lLFxuICBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0LFxuICBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5LFxuICBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgU3RlcCxcbn0gZnJvbSBcImF3cy1jZGstbGliL3BpcGVsaW5lc1wiO1xuaW1wb3J0IHtcbiAgUGlwZWxpbmUsXG4gIENmblBpcGVsaW5lLFxuICBQaXBlbGluZVR5cGUsXG4gIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLFxuICBJU3RhZ2UsXG4gIEFydGlmYWN0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZVwiO1xuaW1wb3J0IHtcbiAgQkVUQV9FTlZJUk9OTUVOVCxcbiAgR0FNTUFfRU5WSVJPTk1FTlQsXG4gIFBST0RfRU5WSVJPTk1FTlQsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2hhdGJvdFwiO1xuaW1wb3J0IHsgRGV0YWlsVHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29kZXN0YXJub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldCB9IGZyb20gXCIuL2FydGlmYWN0LWJ1Y2tldFwiO1xuaW1wb3J0IHtcbiAgQ29kZUJ1aWxkQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvbixcbiAgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIHRoZSBzeW50aCBzdGVwIGluIHRoZSBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1lOVEhfU1RFUF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlRW52UHJvcHMge1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgYmV0YSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBnYW1tYSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2FtbWE6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogRW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tDb25maWdQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJldGEgKGRldikgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGJldGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhbW1hIChzdGcpIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcHJvZCBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZDogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBwcmUtZGVwbG95bWVudCBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyaWZ0Q2hlY2tDb25maWcge1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIERlZmF1bHQ6IFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIHRoZSBtYWluIGNvbW1hbmQgZm9yIHRoZSBidWlsZCBzdGVwIHRvIHJ1blxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYXJ0aWFsIGJ1aWxkc3BlYyBmb3IgdGhpcyBDb2RlQnVpbGRTdGVwXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhY2tQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgYnJhbmNoIG5hbWUgdGhlIHBpcGVsaW5lIHdpbGwgbGlzdGVuIHRvLlxuICAgKiBBdm9pZCB1c2luZyBicmFuY2ggbmFtZXMgdGhhdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIHBhcmVudGhlc2VzLlxuICAgKiBBbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycyBhcmU6IFwiKyAtID0gLiBfIDogLyBAXCIuXG4gICAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgZHVlIHRvIEFXUyByZXNvdXJjZSB0YWdnaW5nIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlcG9zaXRvcnkgbmFtZSB0aGF0IGV4aXN0IGluIHRoZSAnT3JjYUJ1cycgZ2l0aHViIG9yZ2FuaXNhdGlvbi4gZS5nLiBgYS1taWNyby1zZXJ2aWNlLXJlcG9gXG4gICAqL1xuICByZWFkb25seSBnaXRodWJSZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdG8gd2hpY2ggdGhlIHBpcGVsaW5lIHdpbGwgYmUgZGVwbG95aW5nIHRvIGl0cyByZXNwZWN0aXZlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBhbnk7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgbmFtZSAoaW4gY2xvdWRmb3JtYXRpb24pIGZvciB0aGUgc3RhY2sgZGVmaW5lZCBpbiBgc3RhY2tgLiBUaGUgc3RhY2sgbmFtZSB3aWxsIHByZXBlbmQgd2l0aCB0aGUgc3RhZ2VcbiAgICogbmFtZSBlLmcuIGBPcmNhQnVzQmV0YS08c3RhY2tOYW1lPmAsIGBPcmNhQnVzR2FtbWEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c1Byb2QtPHN0YWNrTmFtZT5gXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBjb25maWd1cmF0aW9uL2NvbnN0YW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzdGFjayBwcm9wcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrQ29uZmlnOiBTdGFja0NvbmZpZ1Byb3BzO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5hbWUgaW4gdGhlIGJhc3Rpb24gYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGF0dGVybnMgb2YgR2l0IHJlcG9zaXRvcnkgZmlsZSBwYXRocyB0aGF0LCB3aGVuIGEgY29tbWl0IGlzIHB1c2hlZCwgYXJlIHRvIGJlIElOQ0xVREVEIGFzIGNyaXRlcmlhIHRoYXQgc3RhcnRzIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBFWENMVURFRCBmcm9tIHN0YXJ0aW5nIHRoZSBwaXBlbGluZS5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY29kZXBpcGVsaW5lLXBpcGVsaW5lLWdpdGZpbGVwYXRoZmlsdGVyY3JpdGVyaWEuaHRtbFxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWRGaWxlUGF0aHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1biB0byBzeW50aCB0aGUgY2RrIHN0YWNrIHdoaWNoIGFsc28gaW5zdGFsbGluZyB0aGUgY2RrIGRlcGVuZGVuY2llcy4gZS5nLiBbXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGVcIiwgXCJwbnBtIGNkayBzeW50aFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU3ludGhDbWQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjZGsgb3V0cHV0IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBjZGtPdXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcCBkdXJpbmcgdGhlIENESyBzeW50aCBwaGFzZS4gSXQgd2lsbCBwYXNzZWQgYXMgdGhlIGBwYXJ0aWFsQnVpbGRTcGVjYCB0byB0aGUgYENvZGVCdWlsZFN0ZXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDXG4gICAqL1xuICByZWFkb25seSBzeW50aEJ1aWxkU3BlYz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIHRoZSBtYWluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdElhY1Rlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIGVuc3VyZSB5b3VyIGNvbW1hbmQgaW5jbHVkZXMgJ2NkJyB0byB0aGUgbWFpbiBhcHAgZGlyZWN0b3J5LCBhcyB0aGUgYnVpbGQgY29udGV4dCBzdGFydHMgZnJvbSB0aGUgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRBcHBUZXN0Q29uZmlnOiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgdGhhdCBydW5zIHVuaXQgdGVzdHMgZm9yIEluZnJhc3RydWN0dXJlLWFzLUNvZGUgKElhQykgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogVGhpcyBzdGVwIHdpbGwgZXhlY3V0ZSBpbiBwYXJhbGxlbCB3aXRoIHtAbGluayB1bml0QXBwVGVzdENvbmZpZ30gYXMgcGFydCBvZiB0aGUgc3ludGggc3RhZ2UgZGVwZW5kZW5jaWVzLlxuICAgKiBCb3RoIG11c3Qgc3VjY2VlZCBiZWZvcmUgdGhlIHN5bnRoIHN0ZXAgcnVucy5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29tbWFuZCB3aWxsIGJlIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG86IFtcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLCBcImNvcmVwYWNrIGVuYWJsZVwiLCBcIm1ha2UgaW5zdGFsbFwiLCBcIm1ha2UgdGVzdFwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdElhY1Rlc3RDb25maWc/OiBDb2RlQnVpbGRTdGVwUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgZW52aXJvbm1lbnQgZm9yIHRoZSBkZXBsb3ltZW50IHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFnZUVudj86IFN0YWdlRW52UHJvcHM7XG4gIC8qKlxuICAgKiBFbmFibGUgbm90aWZpY2F0aW9uIHRvIHRoZSAnYWxlcnRzLWJ1aWxkJyBzbGFjayBjaGFubmVsLlxuICAgKiBAZGVmYXVsdCBUcnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVTbGFja05vdGlmaWNhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcGlwZWxpbmUgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIFNsYWNrIGNoYW5uZWwgbm90aWZpY2F0aW9uLlxuICAgKiBPbmx5IGFwcGxpZXMgaWYgYGVuYWJsZVNsYWNrTm90aWZpY2F0aW9uYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1BpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRURdIOKAk1xuICAgKiAgIE9ubHkgZmFpbGVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgd2lsbCB0cmlnZ2VyIGEgbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRXZlbnRzPzogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXVzZSB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGZvciBjcm9zcy1kZXBsb3ltZW50IHBpcGVsaW5lcy5cbiAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgbG9vayB1cCB0aGUgZXhpc3RpbmcgYXJ0aWZhY3QgYnVja2V0IGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VFeGlzdGluZ0FydGlmYWN0QnVja2V0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlIGFzc2V0cyBmcm9tIHRoZSBDREsgYXNzZW1ibHkgcHJlLWRlcGxveW1lbnQgdG8gcHJldmVudCBoaXR0aW5nIENvZGVQaXBlbGluZSdzIDI1NiBNQiBhcnRpZmFjdCBzaXplIGxpbWl0LlxuICAgKiBVc2VmdWwgd2hlbiBDREsgYXNzZXRzIChMYW1iZGEgY29kZSwgRG9ja2VyIGltYWdlcywgZXRjLikgYXJlIGxhcmdlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgKi9cbiAgcmVhZG9ubHkgc3RyaXBBc3NlbWJseUFzc2V0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBkcmlmdCBkZXRlY3Rpb24gY2hlY2tzIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBwaXBlbGluZSB3aWxsIGNoZWNrIGZvciBDbG91ZEZvcm1hdGlvbiBkcmlmdCBhbmQgZmFpbCBpZiBkZXRlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRyaWZ0Q2hlY2tDb25maWc/OiBEcmlmdENoZWNrQ29uZmlnO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdW5pdCB0ZXN0IGZvciBJYUMgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdElhY1Rlc3RDb21tYW5kID0gW1xuICAgICAgICBcIm5wbSBpbnN0YWxsIC0tZ2xvYmFsIGNvcmVwYWNrQGxhdGVzdFwiLFxuICAgICAgICBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgICBcIm1ha2UgaW5zdGFsbFwiLFxuICAgICAgICBcIm1ha2UgdGVzdFwiLFxuICAgICAgXSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjID0gdW5kZWZpbmVkLFxuICAgIH0gPSBwcm9wcy51bml0SWFjVGVzdENvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB1bml0SWFjVGVzdCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiVW5pdElhY1Rlc3RcIiwge1xuICAgICAgY29tbWFuZHM6IHVuaXRJYWNUZXN0Q29tbWFuZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgTk9ERV9PUFRJT05TOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0SWFjUGFydGlhbEJ1aWxkU3BlY1xuICAgICAgICA/IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIEFkZGluZyB1bml0IHRlc3QgZm9yIHRoZSBtYWluIGFwcFxuICAgIGNvbnN0IHtcbiAgICAgIGNvbW1hbmQ6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjID0gdW5kZWZpbmVkLFxuICAgIH0gPSBwcm9wcy51bml0QXBwVGVzdENvbmZpZztcbiAgICBjb25zdCB1bml0QXBwVGVzdCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiVW5pdEFwcFRlc3RcIiwge1xuICAgICAgY29tbWFuZHM6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgTk9ERV9PUFRJT05TOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0QXBwUGFydGlhbEJ1aWxkU3BlY1xuICAgICAgICA/IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgc3ludGhCdWlsZFNwZWMgPSBERUZBVUxUX1NZTlRIX1NURVBfUEFSVElBTF9CVUlMRF9TUEVDIH0gPSBwcm9wcztcbiAgICBjb25zdCBzeW50aFN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIkNka1N5bnRoXCIsIHtcbiAgICAgIGluc3RhbGxDb21tYW5kczogW1xuICAgICAgICBcIm5vZGUgLXZcIixcbiAgICAgICAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgICAgICAgXCJjb3JlcGFjayAtLXZlcnNpb25cIixcbiAgICAgICAgXCJjb3JlcGFjayBlbmFibGVcIixcbiAgICAgIF0sXG4gICAgICBjb21tYW5kczogcHJvcHMuY2RrU3ludGhDbWQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHByb3BzLmNka091dCB8fCBcImNkay5vdXRcIixcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHN5bnRoQnVpbGRTcGVjKSxcbiAgICB9KTtcbiAgICBzeW50aFN0ZXAuYWRkU3RlcERlcGVuZGVuY3kodW5pdElhY1Rlc3QpO1xuICAgIHN5bnRoU3RlcC5hZGRTdGVwRGVwZW5kZW5jeSh1bml0QXBwVGVzdCk7XG5cbiAgICBjb25zdCBjZGtQaXBlbGluZSA9IG5ldyBDb2RlUGlwZWxpbmUodGhpcywgXCJDREtDb2RlUGlwZWxpbmVcIiwge1xuICAgICAgY29kZVBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgc3ludGg6IHN5bnRoU3RlcCxcbiAgICAgIHNlbGZNdXRhdGlvbjogdHJ1ZSxcbiAgICAgIGNvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgICAgTk9ERV9PUFRJT05TOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0U3RhZ2VFbnY6IFN0YWdlRW52UHJvcHMgPSB7XG4gICAgICBiZXRhOiBCRVRBX0VOVklST05NRU5ULFxuICAgICAgZ2FtbWE6IEdBTU1BX0VOVklST05NRU5ULFxuICAgICAgcHJvZDogUFJPRF9FTlZJUk9OTUVOVCxcbiAgICB9O1xuICAgIGNvbnN0IHN0YWdlRW52ID0gcHJvcHMuc3RhZ2VFbnYgfHwgZGVmYXVsdFN0YWdlRW52O1xuXG4gICAgLy8gQWZ0ZXIgYXNzZXRzIGFyZSBwdWJsaXNoZWQsIHRoZXkgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgYXNzZW1ibHkgZGlyZWN0b3J5XG4gICAgLy8gdG8gaGVscCBwcmV2ZW50IGhpdHRpbmcgdGhlIENvZGVQaXBlbGluZSBhcnRpZmFjdCBsaW1pdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICBsZXQgc3RyaXBBc3NldHNGcm9tQXNzZW1ibHk6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLnN0cmlwQXNzZW1ibHlBc3NldHMpIHtcbiAgICAgIHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJTdHJpcEFzc2V0c0Zyb21Bc3NlbWJseVwiLCB7XG4gICAgICAgIGlucHV0OiBjZGtQaXBlbGluZS5jbG91ZEFzc2VtYmx5RmlsZVNldCxcbiAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAnUzNfUEFUSD0ke0NPREVCVUlMRF9TT1VSQ0VfVkVSU0lPTiNcImFybjphd3M6czM6OjpcIn0nLFxuICAgICAgICAgIFwiWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSClcIixcbiAgICAgICAgICBcImVjaG8gJFMzX1BBVEhcIixcbiAgICAgICAgICBcImVjaG8gJFpJUF9BUkNISVZFXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwicm0gLXJmdiBhc3NldC4qXCIsXG4gICAgICAgICAgXCJ6aXAgLXIgLXEgLUEgJFpJUF9BUkNISVZFICpcIixcbiAgICAgICAgICBcImxzXCIsXG4gICAgICAgICAgXCJhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEhcIixcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBjZGtQaXBlbGluZS5hZGRXYXZlKFwiQmVmb3JlU3RhZ2VEZXBsb3ltZW50XCIsIHtcbiAgICAgICAgcHJlOiBbc3RyaXBBc3NldHNGcm9tQXNzZW1ibHldLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IGZ1bmN0aW9uIHRvIGdldCBTdGFja0lkIGZvciBkcmlmdCBjaGVja1xuICAgIGNvbnN0IHJvb3RTdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgY29uc3QgY29uc3RydWN0SWQgPSB0aGlzLm5vZGUuaWQ7XG4gICAgY29uc3QgZ2V0U3RhY2tJZCA9IChlbnZOYW1lOiBzdHJpbmcpID0+XG4gICAgICBgJHtyb290U3RhY2tOYW1lfS8ke2NvbnN0cnVjdElkfS8ke2Vudk5hbWV9LyR7cHJvcHMuc3RhY2tOYW1lfWA7XG5cbiAgICAvLyBEcmlmdCBjaGVjayBjb25maWdcbiAgICBjb25zdCBpc0RyaWZ0Q2hlY2tTdGVwID0gISFwcm9wcy5kcmlmdENoZWNrQ29uZmlnO1xuICAgIGNvbnN0IGNka0luc3RhbGxDbWQgPVxuICAgICAgcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uaW5zdGFsbENvbW1hbmQgPz9cbiAgICAgIFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIjtcbiAgICBjb25zdCBjZGtSdW5DbWQgPSBwcm9wcy5kcmlmdENoZWNrQ29uZmlnPy5jZGtDb21tYW5kID8/IGBgO1xuXG4gICAgY29uc3QgYmV0YUVudk5hbWUgPSBcIk9yY2FCdXNCZXRhXCI7XG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBiZXRhRW52TmFtZSxcbiAgICAgICAgc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuYmV0YSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsQmV0YUNoZWNrXCIsIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50RW52OiBzdGFnZUVudi5iZXRhLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQoYmV0YUVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBHQU1NQVxuICAgICAqL1xuICAgIGNvbnN0IGdhbW1hRW52TmFtZSA9IFwiT3JjYUJ1c0dhbW1hXCI7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGdhbW1hRW52TmFtZSxcbiAgICAgICAgc3RhZ2VFbnYuZ2FtbWEsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLmdhbW1hLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxHYW1tYUNoZWNrXCIsIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50RW52OiBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKGdhbW1hRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdDogW1xuICAgICAgICAgIG5ldyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAoXCJQcm9tb3RlVG9Qcm9kXCIsIHtcbiAgICAgICAgICAgIGFjdGlvbk5hbWU6IFwiUHJvbW90ZVRvUHJvZFwiLFxuICAgICAgICAgICAgLy8gQ3VzdG9tIHN0ZXBzIGJ5cGFzcyBzdGFnZSBwcmUvcG9zdCBvcmRlcmluZywgc28gcnVuT3JkZXIgbXVzdCBiZSBleHBsaWNpdGx5IHNldC5cbiAgICAgICAgICAgIC8vIFNldCB0byA1IHRvIGVuc3VyZSB0aGlzIHJ1bnMgYWZ0ZXIgYWxsIE9yY2FCdXNHYW1tYSBzdGFnZSBzdGVwcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIC8vIChHYW1tYSBkZXBsb3ltZW50IHR5cGljYWxseSB1c2VzIDIgc3RlcHMsIHNvIDUgcHJvdmlkZXMgYWRlcXVhdGUgYnVmZmVyKVxuICAgICAgICAgICAgcnVuT3JkZXI6IDUsXG4gICAgICAgICAgICAvLyA2MC1taW51dGUgdGltZW91dCBhbGxvd3MgcXVldWVkIHBpcGVsaW5lIGV4ZWN1dGlvbnMgdG8gcHJvY2VlZCBpZiBhcHByb3ZhbCBleHBpcmVzXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDYwKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFBST0RcbiAgICAgKi9cbiAgICBjb25zdCBwcm9kRW52TmFtZSA9IFwiT3JjYUJ1c1Byb2RcIjtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcHJvZEVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LnByb2QsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLnByb2QsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbFByb2RDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYucHJvZCxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKHByb2RFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY2RrUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgaWYgKHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5KSB7XG4gICAgICBjZGtQaXBlbGluZS5waXBlbGluZS5hcnRpZmFjdEJ1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkucHJvamVjdCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVuYWJsZVNsYWNrTm90aWZpY2F0aW9uID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4gPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiL2NoYXRib3RfYXJuL3NsYWNrL2FsZXJ0cy1idWlsZFwiLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IFNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb24uZnJvbVNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25Bcm4oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvblwiLFxuICAgICAgICBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5waXBlbGluZS5ub3RpZnlPbihcIlBpcGVsaW5lU2xhY2tOb3RpZmljYXRpb25cIiwgdGFyZ2V0LCB7XG4gICAgICAgIGV2ZW50czogcHJvcHMubm90aWZpY2F0aW9uRXZlbnRzIHx8IFtcbiAgICAgICAgICBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVELFxuICAgICAgICBdLFxuICAgICAgICBkZXRhaWxUeXBlOiBEZXRhaWxUeXBlLkZVTEwsXG4gICAgICAgIG5vdGlmaWNhdGlvblJ1bGVOYW1lOiBgT3JjYUJ1cy0ke3Byb3BzLnBpcGVsaW5lTmFtZX1gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwIHdpdGggcmVxdWlyZWQgcnVuT3JkZXIuXG4gKi9cbmludGVyZmFjZSBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcyBleHRlbmRzIE1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJ1biBvcmRlciBmb3IgdGhpcyBhY3Rpb24gaW4gdGhlIHBpcGVsaW5lIHN0YWdlLiBUaGUgc3RhZ2UgUHJlL1Bvc3Qgb3JkZXIgZG9lcyBub3QgYXBwbHkgdG8gdGhpcyBjdXN0b21cbiAgICogc3RlcC9hY3Rpb24sIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBydW5PcmRlci5cbiAgICovXG4gIHJ1bk9yZGVyOiBudW1iZXI7XG59XG4vKipcbiAqIEN1c3RvbSBtYW51YWwgYXBwcm92YWwgc3RlcCBmb3IgQ0RLIENvZGVQaXBlbGluZS5cbiAqXG4gKiBUaGlzIGNsYXNzIGJyaWRnZXMgdGhlIGdhcCB0byBlbmFibGUgdXNpbmcgTWFudWFsQXBwcm92YWxBY3Rpb24gd2l0aGluIGEgU3RlcCBjbGFzcyxcbiAqIG1ha2luZyBpdCBjb21wYXRpYmxlIHdpdGggY2RrLnBpcGVsaW5lcyBjb25zdHJ1Y3RzLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHN0ZXAuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbWFudWFsIGFwcHJvdmFsIGFjdGlvbiwgaW5jbHVkaW5nXG4gKi9cbmNsYXNzIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFxuICBleHRlbmRzIFN0ZXBcbiAgaW1wbGVtZW50cyBJQ29kZVBpcGVsaW5lQWN0aW9uRmFjdG9yeVxue1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzO1xuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcykge1xuICAgIHN1cGVyKGlkKTtcbiAgICB0aGlzLm1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMgPSBvcHRpb25zO1xuICB9XG5cbiAgcHVibGljIHByb2R1Y2VBY3Rpb24oXG4gICAgc3RhZ2U6IElTdGFnZSxcbiAgICBvcHRpb25zOiBQcm9kdWNlQWN0aW9uT3B0aW9ucyxcbiAgKTogQ29kZVBpcGVsaW5lQWN0aW9uRmFjdG9yeVJlc3VsdCB7XG4gICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBNYW51YWxBcHByb3ZhbEFjdGlvbih0aGlzLm1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMpKTtcblxuICAgIHJldHVybiB7IHJ1bk9yZGVyc0NvbnN1bWVkOiAxIH07XG4gIH1cbn1cblxuY2xhc3MgRGVwbG95bWVudFN0YWdlIGV4dGVuZHMgU3RhZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGVudmlyb25tZW50TmFtZTogc3RyaW5nLFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgc3RhY2tDbGFzczogbmV3IChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogYW55KSA9PiBTdGFjayxcbiAgICBhcHBTdGFja1Byb3BzOiBhbnksXG4gICAgZ2l0aHViUmVwbzogc3RyaW5nLFxuICAgIGdpdGh1YkJyYW5jaD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGVudmlyb25tZW50TmFtZSwgeyBlbnY6IGVudiB9KTtcblxuICAgIGxldCBzb3VyY2UgPSBgaHR0cHM6Ly9naXRodWIuY29tL09yY2FCdXMvJHtnaXRodWJSZXBvfWA7XG4gICAgaWYgKGdpdGh1YkJyYW5jaCAhPT0gdW5kZWZpbmVkICYmIGdpdGh1YkJyYW5jaCAhPT0gXCJtYWluXCIpIHtcbiAgICAgIHNvdXJjZSA9IGAke3NvdXJjZX0vdHJlZS8ke2dpdGh1YkJyYW5jaH1gO1xuICAgIH1cblxuICAgIG5ldyBzdGFja0NsYXNzKHRoaXMsIHN0YWNrTmFtZSwge1xuICAgICAgZW52OiBlbnYsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIFwidW1jY3Itb3JnOlByb2R1Y3RcIjogXCJPcmNhQnVzXCIsXG4gICAgICAgIFwidW1jY3Itb3JnOkNyZWF0b3JcIjogXCJDREtcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6U2VydmljZVwiOiBzdGFja05hbWUsXG4gICAgICAgIFwidW1jY3Itb3JnOlNvdXJjZVwiOiBzb3VyY2UsXG4gICAgICB9LFxuICAgICAgLi4uYXBwU3RhY2tQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZhaWxPbkRyaWZ0QnVpbGRTdGVwUHJvcHMge1xuICAvKipcbiAgICogQVdTIGFjY291bnQgYW5kIHJlZ2lvbiB3aGVyZSB0aGUgZHJpZnQgY2hlY2sgcnVucy5cbiAgICogVXNlZCB0byBhc3N1bWUgdGhlIENESyBsb29rdXAgcm9sZSBhbmQgc2V0IEFXU19ERUZBVUxUX1JFR0lPTi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRFbnY6IEVudmlyb25tZW50O1xuICAvKipcbiAgICogRnVsbHkgcXVhbGlmaWVkIENESyBzdGFjayBJRCB0byBjaGVjayBmb3IgZHJpZnQuXG4gICAqXG4gICAqIEZvcm1hdDogYDxyb290U3RhY2s+Lzxjb25zdHJ1Y3RJZD4vPGVudk5hbWU+LzxzdGFja05hbWU+YFxuICAgKlxuICAgKiBFeGFtcGxlOiBgRGV2U3RhY2svRGVwbG95bWVudFBpcGVsaW5lL09yY2FCdXNCZXRhL1Rlc3RTdGFja2BcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENESyBDTEkgZW50cnlwb2ludCB1c2VkIHRvIHJ1biB0aGUgZHJpZnQgY29tbWFuZC5cbiAgICogRXhhbXBsZXM6IFwicG5wbSBjZGtcIiwgXCJwbnBtIGNkay1zdGF0ZWZ1bFwiLCBcInBucG0gY2RrLXN0YXRlbGVzc1wiLlxuICAgKiBNdXN0IHN1cHBvcnQ6IFwiZHJpZnQgPHN0YWNrSWQ+XCIuXG4gICAqL1xuICByZWFkb25seSBjZGtDb21tYW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzIGJlZm9yZSBydW5uaW5nIENESy5cbiAgICogSWYgeW91ciBhcHAgaXMgaW4gYSBzdWJkaXJlY3RvcnksIHByZWZpeCB3aXRoIFwiY2QgPGRpcj4gJiZcIi5cbiAgICogRXhhbXBsZTogXCJjZCBkZXYgJiYgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIlxuICAgKlxuICAgKiBEZWZhdWx0OiBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kPzogc3RyaW5nO1xufVxuXG5jbGFzcyBGYWlsT25EcmlmdEJ1aWxkU3RlcCBleHRlbmRzIENvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBpZDogc3RyaW5nLFxuICAgIHtcbiAgICAgIGFjY291bnRFbnYsXG4gICAgICBzdGFja0lkLFxuICAgICAgY2RrQ29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kLFxuICAgIH06IEZhaWxPbkRyaWZ0QnVpbGRTdGVwUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IGNka0luc3RhbGwgPSBpbnN0YWxsQ29tbWFuZFxuICAgICAgPyBpbnN0YWxsQ29tbWFuZFxuICAgICAgOiBcInBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCI7XG5cbiAgICBzdXBlcihpZCwge1xuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgXCJub2RlIC12XCIsXG4gICAgICAgIFwibnBtIGluc3RhbGwgLS1nbG9iYWwgY29yZXBhY2tAbGF0ZXN0XCIsXG4gICAgICAgIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gICAgICAgIFwiY29yZXBhY2sgZW5hYmxlXCIsXG4gICAgICAgIGNka0luc3RhbGwsXG5cbiAgICAgICAgYExPT0tVUF9ST0xFX0FSTj1cImFybjphd3M6aWFtOjoke2FjY291bnRFbnYuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7YWNjb3VudEVudi5hY2NvdW50fS0ke2FjY291bnRFbnYucmVnaW9ufVwiYCxcbiAgICAgICAgJ1NFU1NJT05fTkFNRT1cImRyaWZ0LWNoZWNrXCInLFxuICAgICAgICAncmVhZCBBV1NfQUNDRVNTX0tFWV9JRCBBV1NfU0VDUkVUX0FDQ0VTU19LRVkgQVdTX1NFU1NJT05fVE9LRU4gPCA8KGF3cyBzdHMgYXNzdW1lLXJvbGUgLS1yb2xlLWFybiBcIiRMT09LVVBfUk9MRV9BUk5cIiAtLXJvbGUtc2Vzc2lvbi1uYW1lIFwiJFNFU1NJT05fTkFNRVwiIC0tZHVyYXRpb24tc2Vjb25kcyA5MDAgLS1xdWVyeSBcXCdDcmVkZW50aWFscy5bQWNjZXNzS2V5SWQsU2VjcmV0QWNjZXNzS2V5LFNlc3Npb25Ub2tlbl1cXCcgLS1vdXRwdXQgdGV4dCknLFxuICAgICAgICBcImV4cG9ydCBBV1NfQUNDRVNTX0tFWV9JRCBBV1NfU0VDUkVUX0FDQ0VTU19LRVkgQVdTX1NFU1NJT05fVE9LRU5cIixcbiAgICAgICAgYGV4cG9ydCBBV1NfREVGQVVMVF9SRUdJT049XCIke2FjY291bnRFbnYucmVnaW9ufVwiYCxcbiAgICAgICAgXCJhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHlcIixcblxuICAgICAgICBgaWYgJHtjZGtDb21tYW5kfSBscyB8IGdyZXAgLUZxIFwiJHtzdGFja0lkfVwiOyB0aGVuIGVjaG8gXCJTdGFjayAke3N0YWNrSWR9IGZvdW5kOyBjaGVja2luZyBmb3IgZHJpZnQuLi5cIjsgJHtjZGtDb21tYW5kfSBkcmlmdCBcIiR7c3RhY2tJZH1cIiAtZSAtLWZhaWw7IGVsc2UgZWNobyBcIlN0YWNrIG5vdCBmb3VuZCBpbiBjZGsgbHM7IHNraXBwaW5nIGRyaWZ0IGNoZWNrLlwiOyBmaWAsXG4gICAgICBdLFxuICAgICAgcm9sZVBvbGljeVN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wic3RzOkFzc3VtZVJvbGVcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czppYW06OiR7YWNjb3VudEVudi5hY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtJHthY2NvdW50RW52LmFjY291bnR9LSR7YWNjb3VudEVudi5yZWdpb259YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/dynamodb/index.js
CHANGED
|
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
|
|
|
40
40
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
41
|
const config_1 = require("./config");
|
|
42
42
|
class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
43
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "
|
|
43
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.0.1" };
|
|
44
44
|
table;
|
|
45
45
|
constructor(scope, id, props) {
|
|
46
46
|
super(scope, id);
|
|
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
|
75
75
|
}
|
|
76
76
|
exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
|
|
77
77
|
class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
|
|
78
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "
|
|
78
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.0.1" };
|
|
79
79
|
table;
|
|
80
80
|
constructor(scope, id, props) {
|
|
81
81
|
super(scope, id);
|
package/ecs/index.js
CHANGED
|
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
|
|
|
55
55
|
['ARM64']: lambda.Architecture.ARM_64
|
|
56
56
|
};
|
|
57
57
|
class EcsFargateTaskConstruct extends constructs_1.Construct {
|
|
58
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.0.1" };
|
|
59
59
|
cluster;
|
|
60
60
|
taskDefinition;
|
|
61
61
|
taskExecutionRole;
|
|
@@ -17,7 +17,7 @@ var SfnEventStatus;
|
|
|
17
17
|
SfnEventStatus["ABORTED"] = "ABORTED";
|
|
18
18
|
})(SfnEventStatus || (exports.SfnEventStatus = SfnEventStatus = {}));
|
|
19
19
|
class SfnSlackNotification extends constructs_1.Construct {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.0.1" };
|
|
21
21
|
rule;
|
|
22
22
|
constructor(scope, id, props) {
|
|
23
23
|
super(scope, id);
|
package/lambda/index.js
CHANGED
|
@@ -57,7 +57,7 @@ function getPythonUvDockerImage() {
|
|
|
57
57
|
return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
|
|
58
58
|
}
|
|
59
59
|
class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
60
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "
|
|
60
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.0.1" };
|
|
61
61
|
// Class constructs, to be used for caching the layers
|
|
62
62
|
// This means that if there are multiple lambdas throughout the stack
|
|
63
63
|
// They will all use the same layer
|
package/monitored-queue/index.js
CHANGED
|
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
|
13
13
|
* SNS topic.
|
|
14
14
|
*/
|
|
15
15
|
class MonitoredQueue extends constructs_1.Construct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.0.1" };
|
|
17
17
|
queue;
|
|
18
18
|
deadLetterQueue;
|
|
19
19
|
alarm;
|
|
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
|
7
7
|
* A construct which represents a named role that a Lambda function can assume.
|
|
8
8
|
*/
|
|
9
9
|
class NamedLambdaRole extends aws_iam_1.Role {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.0.1" };
|
|
11
11
|
constructor(scope, id, props) {
|
|
12
12
|
super(scope, id, {
|
|
13
13
|
assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
15
15
|
* to the provider framework.
|
|
16
16
|
*/
|
|
17
17
|
class ProviderFunction extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.0.1" };
|
|
19
19
|
_function;
|
|
20
20
|
_response;
|
|
21
21
|
constructor(scope, id, props) {
|
|
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
|
|
|
23
23
|
* Helper for looking up the shared OrcaBus VPC.
|
|
24
24
|
*/
|
|
25
25
|
class OrcaBusVpc {
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.0.1" };
|
|
27
27
|
/**
|
|
28
28
|
* The shared VPC that is used by OrcaBus.
|
|
29
29
|
* @param scope
|
|
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
|
|
|
42
42
|
* Helper for looking up the shared compute security group by name.
|
|
43
43
|
*/
|
|
44
44
|
class OrcaBusSharedComputeSecurityGroup {
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.0.1" };
|
|
46
46
|
/**
|
|
47
47
|
* The shared security group that is used by compute resources to access the database.
|
|
48
48
|
* @param scope
|
package/shared-config/slack.js
CHANGED
|
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
|
|
|
11
11
|
* A helper class to construct the arn for the slack SNS topic.
|
|
12
12
|
*/
|
|
13
13
|
class SlackAlerts {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.0.1" };
|
|
15
15
|
/**
|
|
16
16
|
* Format the ARN for the slack alerts SNS topic for the current stack.
|
|
17
17
|
* @param stack
|