@fjall/components-infrastructure 0.89.5 → 0.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/LICENSE +50 -21
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -18
  4. package/dist/lib/app.d.ts +12 -12
  5. package/dist/lib/app.js +61 -56
  6. package/dist/lib/aspects/index.d.ts +1 -1
  7. package/dist/lib/aspects/index.js +1 -6
  8. package/dist/lib/aspects/resourceInventory.js +6 -13
  9. package/dist/lib/config/audit.js +1 -5
  10. package/dist/lib/config/aws/accessAnalyser.d.ts +11 -0
  11. package/dist/lib/config/aws/accessAnalyser.js +17 -0
  12. package/dist/lib/config/aws/accountAuditRole.js +11 -15
  13. package/dist/lib/config/aws/accountMonitoringRole.js +25 -29
  14. package/dist/lib/config/aws/alarmTopic.d.ts +8 -0
  15. package/dist/lib/config/aws/alarmTopic.js +19 -0
  16. package/dist/lib/config/aws/cloudTrail.js +4 -9
  17. package/dist/lib/config/aws/configRecorder.d.ts +16 -0
  18. package/dist/lib/config/aws/configRecorder.js +51 -0
  19. package/dist/lib/config/aws/configRulePreset.d.ts +13 -0
  20. package/dist/lib/config/aws/configRulePreset.js +62 -0
  21. package/dist/lib/config/aws/disasterRecovery.d.ts +1 -1
  22. package/dist/lib/config/aws/disasterRecovery.js +56 -73
  23. package/dist/lib/config/aws/ebsDefaultEncryption.d.ts +8 -0
  24. package/dist/lib/config/aws/ebsDefaultEncryption.js +41 -0
  25. package/dist/lib/config/aws/ecrDefaultImage.js +25 -30
  26. package/dist/lib/config/aws/eventBus.js +8 -11
  27. package/dist/lib/config/aws/guardDutyDetector.d.ts +16 -0
  28. package/dist/lib/config/aws/guardDutyDetector.js +26 -0
  29. package/dist/lib/config/aws/identityCenter.d.ts +1 -1
  30. package/dist/lib/config/aws/identityCenter.js +23 -25
  31. package/dist/lib/config/aws/identityCenterGroupMembership.js +18 -22
  32. package/dist/lib/config/aws/index.d.ts +19 -8
  33. package/dist/lib/config/aws/index.js +19 -25
  34. package/dist/lib/config/aws/inspectorEnablement.d.ts +9 -0
  35. package/dist/lib/config/aws/inspectorEnablement.js +51 -0
  36. package/dist/lib/config/aws/ipam.js +9 -13
  37. package/dist/lib/config/aws/oidcConnector.js +8 -12
  38. package/dist/lib/config/aws/platform.js +1 -5
  39. package/dist/lib/config/aws/s3BlockPublicAccess.d.ts +9 -0
  40. package/dist/lib/config/aws/s3BlockPublicAccess.js +55 -0
  41. package/dist/lib/config/aws/scpPreset.d.ts +21 -0
  42. package/dist/lib/config/aws/scpPreset.js +311 -0
  43. package/dist/lib/config/aws/securityBaseline.d.ts +15 -0
  44. package/dist/lib/config/aws/securityBaseline.js +27 -0
  45. package/dist/lib/config/aws/securityHubHub.d.ts +15 -0
  46. package/dist/lib/config/aws/securityHubHub.js +28 -0
  47. package/dist/lib/config/aws/securityServicesAdmin.d.ts +20 -0
  48. package/dist/lib/config/aws/securityServicesAdmin.js +115 -0
  49. package/dist/lib/config/index.d.ts +2 -2
  50. package/dist/lib/config/index.js +2 -21
  51. package/dist/lib/index.d.ts +4 -4
  52. package/dist/lib/index.js +5 -26
  53. package/dist/lib/patterns/aws/account.d.ts +17 -1
  54. package/dist/lib/patterns/aws/account.js +60 -33
  55. package/dist/lib/patterns/aws/apexDomainPattern.d.ts +26 -0
  56. package/dist/lib/patterns/aws/apexDomainPattern.js +91 -0
  57. package/dist/lib/patterns/aws/auditRole.js +13 -16
  58. package/dist/lib/patterns/aws/buildkite.d.ts +1 -1
  59. package/dist/lib/patterns/aws/buildkite.js +70 -75
  60. package/dist/lib/patterns/aws/cdn.d.ts +5 -5
  61. package/dist/lib/patterns/aws/cdn.js +22 -28
  62. package/dist/lib/patterns/aws/compute.d.ts +1 -1
  63. package/dist/lib/patterns/aws/compute.js +31 -44
  64. package/dist/lib/patterns/aws/computeEc2.d.ts +1 -1
  65. package/dist/lib/patterns/aws/computeEc2.js +11 -14
  66. package/dist/lib/patterns/aws/computeEcs.d.ts +18 -2
  67. package/dist/lib/patterns/aws/computeEcs.js +41 -31
  68. package/dist/lib/patterns/aws/computeLambda.d.ts +2 -2
  69. package/dist/lib/patterns/aws/computeLambda.js +24 -31
  70. package/dist/lib/patterns/aws/database.d.ts +16 -7
  71. package/dist/lib/patterns/aws/database.js +81 -73
  72. package/dist/lib/patterns/aws/delegatedDomainPattern.d.ts +17 -0
  73. package/dist/lib/patterns/aws/delegatedDomainPattern.js +54 -0
  74. package/dist/lib/patterns/aws/dnsRecordComposer.d.ts +25 -0
  75. package/dist/lib/patterns/aws/dnsRecordComposer.js +225 -0
  76. package/dist/lib/patterns/aws/domain.d.ts +32 -0
  77. package/dist/lib/patterns/aws/domain.js +115 -0
  78. package/dist/lib/patterns/aws/domainDelegation.d.ts +3 -3
  79. package/dist/lib/patterns/aws/domainDelegation.js +28 -37
  80. package/dist/lib/patterns/aws/domainFactory.d.ts +20 -5
  81. package/dist/lib/patterns/aws/domainFactory.js +48 -10
  82. package/dist/lib/patterns/aws/domainValidation.d.ts +11 -0
  83. package/dist/lib/patterns/aws/domainValidation.js +145 -0
  84. package/dist/lib/patterns/aws/externalRecordsPattern.d.ts +18 -0
  85. package/dist/lib/patterns/aws/externalRecordsPattern.js +141 -0
  86. package/dist/lib/patterns/aws/fivetranProxy.d.ts +1 -1
  87. package/dist/lib/patterns/aws/fivetranProxy.js +6 -11
  88. package/dist/lib/patterns/aws/index.d.ts +21 -19
  89. package/dist/lib/patterns/aws/index.js +25 -36
  90. package/dist/lib/patterns/aws/interfaces/cdn.js +1 -5
  91. package/dist/lib/patterns/aws/interfaces/compute.js +4 -11
  92. package/dist/lib/patterns/aws/interfaces/connector.js +1 -15
  93. package/dist/lib/patterns/aws/interfaces/database.d.ts +1 -1
  94. package/dist/lib/patterns/aws/interfaces/database.js +6 -15
  95. package/dist/lib/patterns/aws/interfaces/domain.d.ts +80 -2
  96. package/dist/lib/patterns/aws/interfaces/domain.js +1 -6
  97. package/dist/lib/patterns/aws/interfaces/index.js +8 -41
  98. package/dist/lib/patterns/aws/interfaces/messaging.js +4 -11
  99. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +1 -1
  100. package/dist/lib/patterns/aws/interfaces/organisation.js +4 -11
  101. package/dist/lib/patterns/aws/interfaces/pattern.js +2 -7
  102. package/dist/lib/patterns/aws/interfaces/storage.js +1 -5
  103. package/dist/lib/patterns/aws/managedIdentityCenter.js +7 -12
  104. package/dist/lib/patterns/aws/messaging.d.ts +7 -7
  105. package/dist/lib/patterns/aws/messaging.js +22 -33
  106. package/dist/lib/patterns/aws/network.d.ts +2 -2
  107. package/dist/lib/patterns/aws/network.js +9 -14
  108. package/dist/lib/patterns/aws/organisation.d.ts +6 -2
  109. package/dist/lib/patterns/aws/organisation.js +34 -35
  110. package/dist/lib/patterns/aws/organisationFactory.d.ts +3 -3
  111. package/dist/lib/patterns/aws/organisationFactory.js +7 -12
  112. package/dist/lib/patterns/aws/pattern.js +6 -12
  113. package/dist/lib/patterns/aws/payload.js +73 -63
  114. package/dist/lib/patterns/aws/platform.d.ts +6 -3
  115. package/dist/lib/patterns/aws/platform.js +15 -15
  116. package/dist/lib/patterns/aws/storage.d.ts +6 -4
  117. package/dist/lib/patterns/aws/storage.js +35 -40
  118. package/dist/lib/patterns/aws/subdomainHostedZone.js +11 -16
  119. package/dist/lib/patterns/aws/targets/fjallTargets.d.ts +37 -0
  120. package/dist/lib/patterns/aws/targets/fjallTargets.js +66 -0
  121. package/dist/lib/patterns/aws/targets/index.d.ts +2 -0
  122. package/dist/lib/patterns/aws/targets/index.js +2 -0
  123. package/dist/lib/patterns/aws/targets/targetResolution.d.ts +76 -0
  124. package/dist/lib/patterns/aws/targets/targetResolution.js +119 -0
  125. package/dist/lib/patterns/index.d.ts +1 -0
  126. package/dist/lib/patterns/index.js +1 -0
  127. package/dist/lib/resources/aws/analytics/clickhouse.d.ts +15 -0
  128. package/dist/lib/resources/aws/analytics/clickhouse.js +292 -0
  129. package/dist/lib/resources/aws/analytics/clickhouseConstants.d.ts +73 -0
  130. package/dist/lib/resources/aws/analytics/clickhouseConstants.js +87 -0
  131. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.d.ts +13 -0
  132. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.js +28 -0
  133. package/dist/lib/resources/aws/analytics/clickhouseTypes.d.ts +47 -0
  134. package/dist/lib/resources/aws/analytics/clickhouseTypes.js +1 -0
  135. package/dist/lib/resources/aws/analytics/clickhouseUserData.d.ts +5 -0
  136. package/dist/lib/resources/aws/analytics/clickhouseUserData.js +248 -0
  137. package/dist/lib/resources/aws/analytics/index.d.ts +2 -0
  138. package/dist/lib/resources/aws/analytics/index.js +1 -0
  139. package/dist/lib/resources/aws/audit/auditRole.js +10 -15
  140. package/dist/lib/resources/aws/audit/index.d.ts +1 -1
  141. package/dist/lib/resources/aws/audit/index.js +1 -6
  142. package/dist/lib/resources/aws/backup/backupPlan.d.ts +1 -1
  143. package/dist/lib/resources/aws/backup/backupPlan.js +14 -16
  144. package/dist/lib/resources/aws/backup/backupVault.d.ts +1 -1
  145. package/dist/lib/resources/aws/backup/backupVault.js +13 -15
  146. package/dist/lib/resources/aws/backup/index.d.ts +2 -2
  147. package/dist/lib/resources/aws/backup/index.js +2 -19
  148. package/dist/lib/resources/aws/base/awsStack.js +17 -19
  149. package/dist/lib/resources/aws/base/index.d.ts +1 -1
  150. package/dist/lib/resources/aws/base/index.js +1 -18
  151. package/dist/lib/resources/aws/cdn/cloudFront.js +40 -42
  152. package/dist/lib/resources/aws/cdn/index.d.ts +1 -1
  153. package/dist/lib/resources/aws/cdn/index.js +1 -18
  154. package/dist/lib/resources/aws/compute/ec2.js +39 -39
  155. package/dist/lib/resources/aws/compute/ecs.d.ts +18 -396
  156. package/dist/lib/resources/aws/compute/ecs.js +105 -976
  157. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.d.ts +22 -0
  158. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.js +35 -0
  159. package/dist/lib/resources/aws/compute/ecsConstants.d.ts +20 -0
  160. package/dist/lib/resources/aws/compute/ecsConstants.js +49 -0
  161. package/dist/lib/resources/aws/compute/ecsContext.d.ts +12 -0
  162. package/dist/lib/resources/aws/compute/ecsContext.js +1 -0
  163. package/dist/lib/resources/aws/compute/ecsImages.d.ts +4 -0
  164. package/dist/lib/resources/aws/compute/ecsImages.js +35 -0
  165. package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +28 -0
  166. package/dist/lib/resources/aws/compute/ecsNetworking.js +290 -0
  167. package/dist/lib/resources/aws/compute/ecsRoles.d.ts +15 -0
  168. package/dist/lib/resources/aws/compute/ecsRoles.js +110 -0
  169. package/dist/lib/resources/aws/compute/ecsServiceFactory.d.ts +33 -0
  170. package/dist/lib/resources/aws/compute/ecsServiceFactory.js +183 -0
  171. package/dist/lib/resources/aws/compute/ecsTaskDefinition.d.ts +30 -0
  172. package/dist/lib/resources/aws/compute/ecsTaskDefinition.js +168 -0
  173. package/dist/lib/resources/aws/compute/ecsTypes.d.ts +337 -0
  174. package/dist/lib/resources/aws/compute/ecsTypes.js +10 -0
  175. package/dist/lib/resources/aws/compute/ecsValidation.d.ts +18 -0
  176. package/dist/lib/resources/aws/compute/ecsValidation.js +72 -0
  177. package/dist/lib/resources/aws/compute/index.d.ts +3 -3
  178. package/dist/lib/resources/aws/compute/index.js +3 -20
  179. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -2
  180. package/dist/lib/resources/aws/compute/lambda.js +81 -71
  181. package/dist/lib/resources/aws/database/dynamodb.js +24 -27
  182. package/dist/lib/resources/aws/database/index.d.ts +7 -7
  183. package/dist/lib/resources/aws/database/index.js +14 -33
  184. package/dist/lib/resources/aws/database/rdsAurora.d.ts +10 -2
  185. package/dist/lib/resources/aws/database/rdsAurora.js +76 -61
  186. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -2
  187. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +24 -21
  188. package/dist/lib/resources/aws/database/rdsDefaults.js +3 -7
  189. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +2 -2
  190. package/dist/lib/resources/aws/database/rdsHelpers.js +21 -29
  191. package/dist/lib/resources/aws/database/rdsInstance.d.ts +11 -3
  192. package/dist/lib/resources/aws/database/rdsInstance.js +101 -83
  193. package/dist/lib/resources/aws/database/rdsProxyOutput.js +5 -9
  194. package/dist/lib/resources/aws/iam/delegationRole.d.ts +18 -0
  195. package/dist/lib/resources/aws/iam/delegationRole.js +60 -0
  196. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +4 -9
  197. package/dist/lib/resources/aws/iam/identityCenter/group.js +5 -9
  198. package/dist/lib/resources/aws/iam/identityCenter/index.d.ts +3 -3
  199. package/dist/lib/resources/aws/iam/identityCenter/index.js +3 -20
  200. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -1
  201. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +5 -9
  202. package/dist/lib/resources/aws/iam/index.d.ts +5 -4
  203. package/dist/lib/resources/aws/iam/index.js +5 -21
  204. package/dist/lib/resources/aws/iam/instanceProfile.js +2 -7
  205. package/dist/lib/resources/aws/iam/managedPolicy.js +2 -7
  206. package/dist/lib/resources/aws/iam/policy.js +2 -7
  207. package/dist/lib/resources/aws/iam/role.js +2 -7
  208. package/dist/lib/resources/aws/index.d.ts +7 -7
  209. package/dist/lib/resources/aws/index.js +7 -24
  210. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +1 -1
  211. package/dist/lib/resources/aws/logging/cloudTrail.js +18 -22
  212. package/dist/lib/resources/aws/logging/index.d.ts +2 -2
  213. package/dist/lib/resources/aws/logging/index.js +2 -19
  214. package/dist/lib/resources/aws/logging/logGroup.js +4 -10
  215. package/dist/lib/resources/aws/messaging/eventbridge.js +11 -14
  216. package/dist/lib/resources/aws/messaging/index.d.ts +4 -4
  217. package/dist/lib/resources/aws/messaging/index.js +4 -21
  218. package/dist/lib/resources/aws/messaging/sns.js +11 -14
  219. package/dist/lib/resources/aws/messaging/sqs.js +32 -34
  220. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -1
  221. package/dist/lib/resources/aws/messaging/utils.js +1 -6
  222. package/dist/lib/resources/aws/monitoring/alarmDefaults.d.ts +36 -0
  223. package/dist/lib/resources/aws/monitoring/alarmDefaults.js +34 -0
  224. package/dist/lib/resources/aws/monitoring/ecsAlarms.d.ts +21 -0
  225. package/dist/lib/resources/aws/monitoring/ecsAlarms.js +88 -0
  226. package/dist/lib/resources/aws/monitoring/index.d.ts +4 -0
  227. package/dist/lib/resources/aws/monitoring/index.js +4 -5
  228. package/dist/lib/resources/aws/monitoring/lambdaAlarms.d.ts +18 -0
  229. package/dist/lib/resources/aws/monitoring/lambdaAlarms.js +44 -0
  230. package/dist/lib/resources/aws/monitoring/rdsAlarms.d.ts +20 -0
  231. package/dist/lib/resources/aws/monitoring/rdsAlarms.js +52 -0
  232. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.d.ts +17 -0
  233. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.js +26 -0
  234. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.d.ts +12 -0
  235. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.js +21 -0
  236. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.d.ts +12 -0
  237. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.js +22 -0
  238. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.d.ts +12 -0
  239. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.js +23 -0
  240. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.d.ts +17 -0
  241. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.js +21 -0
  242. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.d.ts +12 -0
  243. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.js +22 -0
  244. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.d.ts +17 -0
  245. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.js +17 -0
  246. package/dist/lib/resources/aws/networking/dnsRecord/index.d.ts +10 -0
  247. package/dist/lib/resources/aws/networking/dnsRecord/index.js +10 -0
  248. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.d.ts +16 -0
  249. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.js +21 -0
  250. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.d.ts +12 -0
  251. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.js +21 -0
  252. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.d.ts +18 -0
  253. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.js +21 -0
  254. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.d.ts +12 -0
  255. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.js +21 -0
  256. package/dist/lib/resources/aws/networking/domain.d.ts +1 -1
  257. package/dist/lib/resources/aws/networking/domain.js +32 -34
  258. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +8 -3
  259. package/dist/lib/resources/aws/networking/domainCertificate.js +22 -16
  260. package/dist/lib/resources/aws/networking/hostedZone.d.ts +23 -19
  261. package/dist/lib/resources/aws/networking/hostedZone.js +70 -134
  262. package/dist/lib/resources/aws/networking/index.d.ts +8 -7
  263. package/dist/lib/resources/aws/networking/index.js +8 -24
  264. package/dist/lib/resources/aws/networking/ipam.js +2 -7
  265. package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
  266. package/dist/lib/resources/aws/networking/ipamPool.js +45 -55
  267. package/dist/lib/resources/aws/networking/securityGroup.js +2 -7
  268. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
  269. package/dist/lib/resources/aws/networking/vpc.js +17 -21
  270. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +1 -1
  271. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +11 -15
  272. package/dist/lib/resources/aws/organisation/index.d.ts +5 -5
  273. package/dist/lib/resources/aws/organisation/index.js +4 -12
  274. package/dist/lib/resources/aws/organisation/organisation.js +5 -7
  275. package/dist/lib/resources/aws/organisation/organisationAccount.js +7 -10
  276. package/dist/lib/resources/aws/organisation/organisationPolicy.js +5 -9
  277. package/dist/lib/resources/aws/organisation/organisationalUnit.js +1 -3
  278. package/dist/lib/resources/aws/secrets/alias.js +2 -7
  279. package/dist/lib/resources/aws/secrets/index.d.ts +4 -4
  280. package/dist/lib/resources/aws/secrets/index.js +4 -21
  281. package/dist/lib/resources/aws/secrets/kms.js +15 -18
  282. package/dist/lib/resources/aws/secrets/parameter.d.ts +3 -3
  283. package/dist/lib/resources/aws/secrets/parameter.js +19 -22
  284. package/dist/lib/resources/aws/secrets/secret.d.ts +2 -2
  285. package/dist/lib/resources/aws/secrets/secret.js +12 -14
  286. package/dist/lib/resources/aws/storage/ecr.d.ts +2 -2
  287. package/dist/lib/resources/aws/storage/ecr.js +7 -13
  288. package/dist/lib/resources/aws/storage/index.d.ts +2 -2
  289. package/dist/lib/resources/aws/storage/index.js +2 -19
  290. package/dist/lib/resources/aws/storage/s3.d.ts +1 -1
  291. package/dist/lib/resources/aws/storage/s3.js +24 -12
  292. package/dist/lib/resources/aws/utilities/awsCustomResource.js +3 -7
  293. package/dist/lib/resources/aws/utilities/codeBuild.js +7 -12
  294. package/dist/lib/resources/aws/utilities/customResource.js +14 -17
  295. package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -7
  296. package/dist/lib/resources/aws/utilities/index.d.ts +5 -5
  297. package/dist/lib/resources/aws/utilities/index.js +5 -22
  298. package/dist/lib/resources/aws/utilities/resourceShare.js +2 -7
  299. package/dist/lib/resources/index.d.ts +1 -1
  300. package/dist/lib/resources/index.js +1 -18
  301. package/dist/lib/types.js +1 -3
  302. package/dist/lib/utils/accountsUtils.d.ts +5 -0
  303. package/dist/lib/utils/accountsUtils.js +18 -0
  304. package/dist/lib/utils/addSuffixToEmail.js +1 -5
  305. package/dist/lib/utils/backupTierMapping.js +2 -6
  306. package/dist/lib/utils/capitaliseString.js +1 -10
  307. package/dist/lib/utils/connections.js +9 -13
  308. package/dist/lib/utils/connector.js +10 -23
  309. package/dist/lib/utils/constructMap.d.ts +33 -0
  310. package/dist/lib/utils/constructMap.js +154 -0
  311. package/dist/lib/utils/databaseTypes.js +4 -10
  312. package/dist/lib/utils/dnsRecords.d.ts +1 -1
  313. package/dist/lib/utils/dnsRecords.js +23 -27
  314. package/dist/lib/utils/domainTypes.d.ts +0 -1
  315. package/dist/lib/utils/domainTypes.js +2 -10
  316. package/dist/lib/utils/env.js +14 -26
  317. package/dist/lib/utils/getAccountId.js +3 -7
  318. package/dist/lib/utils/getAsync.js +7 -10
  319. package/dist/lib/utils/getConfig.d.ts +0 -2
  320. package/dist/lib/utils/getConfig.js +29 -47
  321. package/dist/lib/utils/getStackOutput.js +4 -8
  322. package/dist/lib/utils/index.d.ts +12 -12
  323. package/dist/lib/utils/index.js +12 -29
  324. package/dist/lib/utils/manifestWriter.d.ts +14 -3
  325. package/dist/lib/utils/manifestWriter.js +60 -43
  326. package/dist/lib/utils/orgConfigParser.d.ts +14 -0
  327. package/dist/lib/utils/orgConfigParser.js +49 -0
  328. package/dist/lib/utils/removalPolicy.js +5 -9
  329. package/dist/lib/utils/resourceNaming.js +11 -16
  330. package/dist/lib/utils/standardTagsAspect.js +9 -16
  331. package/dist/lib/utils/stripAndCamelCase.js +1 -5
  332. package/dist/lib/utils/validationLogger.js +12 -18
  333. package/dist/lib/utils/vpcUtils.js +5 -10
  334. package/package.json +25 -8
  335. package/dist/lib/config/aws/accountId.d.ts +0 -6
  336. package/dist/lib/config/aws/accountId.js +0 -32
  337. package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
  338. package/dist/lib/config/aws/backupGlobalSettings.js +0 -49
  339. package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
  340. package/dist/lib/config/aws/costAllocationTags.js +0 -47
  341. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
  342. package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -57
  343. package/dist/lib/config/aws/ipamPoolId.d.ts +0 -16
  344. package/dist/lib/config/aws/ipamPoolId.js +0 -42
  345. package/dist/lib/config/aws/organisation.d.ts +0 -30
  346. package/dist/lib/config/aws/organisation.js +0 -92
  347. package/dist/lib/config/aws/organisationId.d.ts +0 -7
  348. package/dist/lib/config/aws/organisationId.js +0 -45
  349. package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
  350. package/dist/lib/config/aws/organisationsAccess.js +0 -49
  351. package/dist/lib/config/aws/ramSharing.d.ts +0 -4
  352. package/dist/lib/config/aws/ramSharing.js +0 -34
  353. package/dist/lib/config/monitoring.d.ts +0 -18
  354. package/dist/lib/config/monitoring.js +0 -22
  355. package/dist/lib/patterns/aws/connections.d.ts +0 -46
  356. package/dist/lib/patterns/aws/connections.js +0 -159
  357. package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
  358. package/dist/lib/patterns/aws/hostedZone.js +0 -150
  359. package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
  360. package/dist/lib/patterns/aws/managedAccount.js +0 -55
  361. package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
  362. package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
  363. package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
  364. package/dist/lib/patterns/aws/managedPlatform.js +0 -29
  365. package/dist/lib/resources/aws/database/database.d.ts +0 -14
  366. package/dist/lib/resources/aws/database/database.js +0 -28
  367. package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
  368. package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
  369. package/dist/lib/resources/aws/database/migrationLambda.d.ts +0 -80
  370. package/dist/lib/resources/aws/database/migrationLambda.js +0 -119
  371. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
  372. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -51
  373. package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
  374. package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
  375. package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -29
  376. package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -120
  377. package/dist/lib/utils/capitalizeString.d.ts +0 -12
  378. package/dist/lib/utils/capitalizeString.js +0 -30
@@ -1,17 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CloudFrontDistribution = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const capitaliseString_1 = require("../../../utils/capitaliseString");
7
- const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
8
- const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
9
- class CloudFrontDistribution extends constructs_1.Construct {
1
+ import { Construct } from "constructs";
2
+ import { CfnOutput } from "aws-cdk-lib";
3
+ import { toPascalCase } from "../../../utils/capitaliseString.js";
4
+ import { Distribution, PriceClass, ViewerProtocolPolicy, CachePolicy, OriginRequestPolicy, AllowedMethods, OriginProtocolPolicy, Function as CloudFrontFunction, FunctionCode, FunctionRuntime, FunctionEventType } from "aws-cdk-lib/aws-cloudfront";
5
+ import { S3BucketOrigin, LoadBalancerV2Origin, HttpOrigin } from "aws-cdk-lib/aws-cloudfront-origins";
6
+ export class CloudFrontDistribution extends Construct {
7
+ id;
8
+ distribution;
10
9
  constructor(scope, id, props) {
11
10
  super(scope, id);
12
11
  this.id = id;
13
12
  // Sanitise id for CloudFormation output keys (must be alphanumeric)
14
- const outputName = (0, capitaliseString_1.toPascalCase)(id);
13
+ const outputName = toPascalCase(id);
15
14
  const defaultOrigin = this.createOrigin(props.defaultOrigin);
16
15
  const defaultCachePolicy = this.resolveCachePolicy(props.defaultCachePolicy);
17
16
  // Build composable viewer request function (accessGate + forwardHostHeader)
@@ -20,7 +19,7 @@ class CloudFrontDistribution extends constructs_1.Construct {
20
19
  ? [
21
20
  {
22
21
  function: viewerRequestFunction,
23
- eventType: aws_cloudfront_1.FunctionEventType.VIEWER_REQUEST
22
+ eventType: FunctionEventType.VIEWER_REQUEST
24
23
  }
25
24
  ]
26
25
  : undefined;
@@ -30,22 +29,22 @@ class CloudFrontDistribution extends constructs_1.Construct {
30
29
  additionalBehaviors[behaviour.pathPattern] = {
31
30
  origin: this.createOrigin(behaviour.origin),
32
31
  cachePolicy: this.resolveCachePolicy(behaviour.cachePolicy),
33
- viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
32
+ viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
34
33
  allowedMethods: this.resolveAllowedMethods(behaviour.allowedMethods),
35
34
  // Forward viewer headers (cookies, auth) to non-S3 origins
36
35
  ...(behaviour.origin.type !== "s3" && {
37
- originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER
36
+ originRequestPolicy: OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER
38
37
  }),
39
38
  ...(functionAssociations !== undefined && { functionAssociations })
40
39
  };
41
40
  }
42
41
  }
43
- this.distribution = new aws_cloudfront_1.Distribution(this, `${id}Distribution`, {
42
+ this.distribution = new Distribution(this, `${id}Distribution`, {
44
43
  defaultBehavior: {
45
44
  origin: defaultOrigin,
46
45
  cachePolicy: defaultCachePolicy,
47
- viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
48
- originRequestPolicy: aws_cloudfront_1.OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER,
46
+ viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
47
+ originRequestPolicy: OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER,
49
48
  allowedMethods: this.resolveAllowedMethods(props.defaultAllowedMethods),
50
49
  ...(functionAssociations !== undefined && { functionAssociations })
51
50
  },
@@ -59,19 +58,20 @@ class CloudFrontDistribution extends constructs_1.Construct {
59
58
  logBucket: props.logBucket,
60
59
  priceClass: this.resolvePriceClass(props.priceClass)
61
60
  });
62
- new aws_cdk_lib_1.CfnOutput(this, `${outputName}DistributionDomainName`, {
61
+ new CfnOutput(this, `${outputName}DistributionDomainName`, {
63
62
  key: `${outputName}DistributionDomainName`,
63
+ exportName: `${outputName}CdnDistributionDomainName`,
64
64
  value: this.distribution.distributionDomainName,
65
65
  description: `CloudFront distribution domain name for ${id}`
66
66
  });
67
- new aws_cdk_lib_1.CfnOutput(this, `${outputName}DistributionId`, {
67
+ new CfnOutput(this, `${outputName}DistributionId`, {
68
68
  key: `${outputName}DistributionId`,
69
69
  value: this.distribution.distributionId,
70
70
  description: `CloudFront distribution ID for ${id}`
71
71
  });
72
72
  // Output credentials hint when access gate is enabled
73
73
  if (props.accessGate) {
74
- new aws_cdk_lib_1.CfnOutput(this, `${outputName}AccessGateUsername`, {
74
+ new CfnOutput(this, `${outputName}AccessGateUsername`, {
75
75
  key: `${outputName}AccessGateUsername`,
76
76
  value: props.accessGate.username,
77
77
  description: `Access gate username for ${id}`
@@ -105,9 +105,9 @@ class CloudFrontDistribution extends constructs_1.Construct {
105
105
  " request.headers['x-forwarded-host'] = { value: request.headers.host.value };";
106
106
  }
107
107
  functionBody += " return request; }";
108
- return new aws_cloudfront_1.Function(this, `${id}ViewerRequestFn`, {
109
- code: aws_cloudfront_1.FunctionCode.fromInline(functionBody),
110
- runtime: aws_cloudfront_1.FunctionRuntime.JS_2_0
108
+ return new CloudFrontFunction(this, `${id}ViewerRequestFn`, {
109
+ code: FunctionCode.fromInline(functionBody),
110
+ runtime: FunctionRuntime.JS_2_0
111
111
  });
112
112
  }
113
113
  createOrigin(config) {
@@ -117,17 +117,17 @@ class CloudFrontDistribution extends constructs_1.Construct {
117
117
  // See: https://github.com/aws/aws-cdk/issues/31462
118
118
  // OAC creates bucket → CDN dependency (bucket policy references distribution)
119
119
  // OAI works across stacks without triggering cyclic dependency errors
120
- return aws_cloudfront_origins_1.S3BucketOrigin.withOriginAccessIdentity(config.bucket, {
120
+ return S3BucketOrigin.withOriginAccessIdentity(config.bucket, {
121
121
  originPath: config.originPath
122
122
  });
123
123
  case "alb":
124
- return new aws_cloudfront_origins_1.LoadBalancerV2Origin(config.loadBalancer, {
124
+ return new LoadBalancerV2Origin(config.loadBalancer, {
125
125
  httpPort: config.httpPort,
126
126
  httpsPort: config.httpsPort,
127
127
  protocolPolicy: this.resolveOriginProtocolPolicy(config.protocolPolicy)
128
128
  });
129
129
  case "http":
130
- return new aws_cloudfront_origins_1.HttpOrigin(config.domainName, {
130
+ return new HttpOrigin(config.domainName, {
131
131
  originPath: config.originPath,
132
132
  httpPort: config.httpPort,
133
133
  httpsPort: config.httpsPort,
@@ -137,16 +137,16 @@ class CloudFrontDistribution extends constructs_1.Construct {
137
137
  }
138
138
  resolveCachePolicy(policy) {
139
139
  if (!policy) {
140
- return aws_cloudfront_1.CachePolicy.CACHING_OPTIMIZED;
140
+ return CachePolicy.CACHING_OPTIMIZED;
141
141
  }
142
142
  if (typeof policy === "string") {
143
143
  switch (policy) {
144
144
  case "CACHING_OPTIMIZED":
145
- return aws_cloudfront_1.CachePolicy.CACHING_OPTIMIZED;
145
+ return CachePolicy.CACHING_OPTIMIZED;
146
146
  case "CACHING_DISABLED":
147
- return aws_cloudfront_1.CachePolicy.CACHING_DISABLED;
147
+ return CachePolicy.CACHING_DISABLED;
148
148
  case "CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS":
149
- return aws_cloudfront_1.CachePolicy.CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS;
149
+ return CachePolicy.CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS;
150
150
  }
151
151
  }
152
152
  return policy;
@@ -154,35 +154,35 @@ class CloudFrontDistribution extends constructs_1.Construct {
154
154
  resolveAllowedMethods(methods) {
155
155
  switch (methods) {
156
156
  case "GET_HEAD":
157
- return aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD;
157
+ return AllowedMethods.ALLOW_GET_HEAD;
158
158
  case "GET_HEAD_OPTIONS":
159
- return aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD_OPTIONS;
159
+ return AllowedMethods.ALLOW_GET_HEAD_OPTIONS;
160
160
  case "ALL":
161
- return aws_cloudfront_1.AllowedMethods.ALLOW_ALL;
161
+ return AllowedMethods.ALLOW_ALL;
162
162
  default:
163
- return aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD;
163
+ return AllowedMethods.ALLOW_GET_HEAD;
164
164
  }
165
165
  }
166
166
  resolveOriginProtocolPolicy(policy) {
167
167
  switch (policy) {
168
168
  case "HTTP_ONLY":
169
- return aws_cloudfront_1.OriginProtocolPolicy.HTTP_ONLY;
169
+ return OriginProtocolPolicy.HTTP_ONLY;
170
170
  case "HTTPS_ONLY":
171
- return aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY;
171
+ return OriginProtocolPolicy.HTTPS_ONLY;
172
172
  case "MATCH_VIEWER":
173
- return aws_cloudfront_1.OriginProtocolPolicy.MATCH_VIEWER;
173
+ return OriginProtocolPolicy.MATCH_VIEWER;
174
174
  default:
175
- return aws_cloudfront_1.OriginProtocolPolicy.HTTPS_ONLY;
175
+ return OriginProtocolPolicy.HTTPS_ONLY;
176
176
  }
177
177
  }
178
178
  resolvePriceClass(priceClass) {
179
179
  switch (priceClass) {
180
180
  case "PriceClass_100":
181
- return aws_cloudfront_1.PriceClass.PRICE_CLASS_100;
181
+ return PriceClass.PRICE_CLASS_100;
182
182
  case "PriceClass_200":
183
- return aws_cloudfront_1.PriceClass.PRICE_CLASS_200;
183
+ return PriceClass.PRICE_CLASS_200;
184
184
  case "PriceClass_All":
185
- return aws_cloudfront_1.PriceClass.PRICE_CLASS_ALL;
185
+ return PriceClass.PRICE_CLASS_ALL;
186
186
  default:
187
187
  return undefined;
188
188
  }
@@ -206,5 +206,3 @@ class CloudFrontDistribution extends constructs_1.Construct {
206
206
  return this.distribution;
207
207
  }
208
208
  }
209
- exports.CloudFrontDistribution = CloudFrontDistribution;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2Nkbi9jbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsc0VBQStEO0FBQy9ELCtEQWVvQztBQUNwQywrRUFJNEM7QUF1RTVDLE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFJbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUViLG9FQUFvRTtRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFZLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDM0QsRUFBRSxFQUNGLEtBQUssQ0FBQyxpQkFBaUIsRUFDdkIsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCO1lBQ2hELENBQUMsQ0FBQztnQkFDRTtvQkFDRSxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixTQUFTLEVBQUUsa0NBQWlCLENBQUMsY0FBYztpQkFDNUM7YUFDRjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLG1CQUFtQixHQUFvQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsS0FBSyxN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SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQXBRRCx3REFvUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHtcbiAgRGlzdHJpYnV0aW9uLFxuICBQcmljZUNsYXNzLFxuICB0eXBlIElPcmlnaW4sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBDYWNoZVBvbGljeSxcbiAgdHlwZSBJQ2FjaGVQb2xpY3ksXG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIEFsbG93ZWRNZXRob2RzLFxuICBPcmlnaW5Qcm90b2NvbFBvbGljeSxcbiAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvblJ1bnRpbWUsXG4gIEZ1bmN0aW9uRXZlbnRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXRPcmlnaW4sXG4gIExvYWRCYWxhbmNlclYyT3JpZ2luLFxuICBIdHRwT3JpZ2luXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyB0eXBlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgdHlwZSBJQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuXG5leHBvcnQgdHlwZSBDYWNoZVBvbGljeVByZXNldCA9XG4gIHwgXCJDQUNISU5HX09QVElNSVpFRFwiXG4gIHwgXCJDQUNISU5HX0RJU0FCTEVEXCJcbiAgfCBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIG9yaWdpblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxiT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gIHByb3RvY29sUG9saWN5PzogXCJIVFRQX09OTFlcIiB8IFwiSFRUUFNfT05MWVwiIHwgXCJNQVRDSF9WSUVXRVJcIjtcbiAgaHR0cFBvcnQ/OiBudW1iZXI7XG4gIGh0dHBzUG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJodHRwXCI7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJvdG9jb2xQb2xpY3k/OiBcIkhUVFBfT05MWVwiIHwgXCJIVFRQU19PTkxZXCIgfCBcIk1BVENIX1ZJRVdFUlwiO1xuICBodHRwUG9ydD86IG51bWJlcjtcbiAgaHR0cHNQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDZG5PcmlnaW5Db25maWcgPVxuICB8IFMzT3JpZ2luQ29uZmlnXG4gIHwgQWxiT3JpZ2luQ29uZmlnXG4gIHwgSHR0cE9yaWdpbkNvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBDZG5CZWhhdmlvdXIge1xuICBwYXRoUGF0dGVybjogc3RyaW5nO1xuICBvcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzR2F0ZUNvbmZpZyB7XG4gIHR5cGU6IFwiYmFzaWMtYXV0aFwiO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyB7XG4gIGRlZmF1bHRPcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgZGVmYXVsdENhY2hlUG9saWN5PzogQ2FjaGVQb2xpY3lQcmVzZXQgfCBJQ2FjaGVQb2xpY3k7XG4gIGRlZmF1bHRBbGxvd2VkTWV0aG9kcz86IFwiR0VUX0hFQURcIiB8IFwiR0VUX0hFQURfT1BUSU9OU1wiIHwgXCJBTExcIjtcbiAgYmVoYXZpb3Vycz86IENkbkJlaGF2aW91cltdO1xuICBkb21haW5OYW1lcz86IHN0cmluZ1tdO1xuICBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG4gIGxvZ0J1Y2tldD86IElCdWNrZXQ7XG4gIHByaWNlQ2xhc3M/OiBcIlByaWNlQ2xhc3NfMTAwXCIgfCBcIlByaWNlQ2xhc3NfMjAwXCIgfCBcIlByaWNlQ2xhc3NfQWxsXCI7XG4gIC8qKiBBZGRzIGEgQ2xvdWRGcm9udCBGdW5jdGlvbiB0byBjb3B5IHRoZSB2aWV3ZXIgSG9zdCBoZWFkZXIgaW50byBYLUZvcndhcmRlZC1Ib3N0LlxuICAgKiBSZXF1aXJlZCB3aGVuIHRoZSBvcmlnaW4gaXMgYSBMYW1iZGEgRnVuY3Rpb24gVVJMIG9yIEFMQiBiZWhpbmQgQ2xvdWRGcm9udCxcbiAgICogYmVjYXVzZSBBbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyIHJlcGxhY2VzIEhvc3Qgd2l0aCB0aGUgb3JpZ2luIGRvbWFpbi4gKi9cbiAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuO1xuICAvKiogQWRkcyBhY2Nlc3MgZ2F0aW5nIHRvIHRoZSBkaXN0cmlidXRpb24gdmlhIGEgQ2xvdWRGcm9udCBGdW5jdGlvbi5cbiAgICogU2V0IHRvIGZhbHNlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSAob3Igb21pdCkuICovXG4gIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RGlzdHJpYnV0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAvLyBTYW5pdGlzZSBpZCBmb3IgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleXMgKG11c3QgYmUgYWxwaGFudW1lcmljKVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UoaWQpO1xuXG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbiA9IHRoaXMuY3JlYXRlT3JpZ2luKHByb3BzLmRlZmF1bHRPcmlnaW4pO1xuICAgIGNvbnN0IGRlZmF1bHRDYWNoZVBvbGljeSA9IHRoaXMucmVzb2x2ZUNhY2hlUG9saWN5KFxuICAgICAgcHJvcHMuZGVmYXVsdENhY2hlUG9saWN5XG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIGNvbXBvc2FibGUgdmlld2VyIHJlcXVlc3QgZnVuY3Rpb24gKGFjY2Vzc0dhdGUgKyBmb3J3YXJkSG9zdEhlYWRlcilcbiAgICBjb25zdCB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24gPSB0aGlzLmJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgICAgaWQsXG4gICAgICBwcm9wcy5mb3J3YXJkSG9zdEhlYWRlcixcbiAgICAgIHByb3BzLmFjY2Vzc0dhdGVcbiAgICApO1xuXG4gICAgY29uc3QgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgPSB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25cbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvcnM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICBpZiAocHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgZm9yIChjb25zdCBiZWhhdmlvdXIgb2YgcHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzW2JlaGF2aW91ci5wYXRoUGF0dGVybl0gPSB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLmNyZWF0ZU9yaWdpbihiZWhhdmlvdXIub3JpZ2luKSxcbiAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5yZXNvbHZlQ2FjaGVQb2xpY3koYmVoYXZpb3VyLmNhY2hlUG9saWN5KSxcbiAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHRoaXMucmVzb2x2ZUFsbG93ZWRNZXRob2RzKGJlaGF2aW91ci5hbGxvd2VkTWV0aG9kcyksXG4gICAgICAgICAgLy8gRm9yd2FyZCB2aWV3ZXIgaGVhZGVycyAoY29va2llcywgYXV0aCkgdG8gbm9uLVMzIG9yaWdpbnNcbiAgICAgICAgICAuLi4oYmVoYXZpb3VyLm9yaWdpbi50eXBlICE9PSBcInMzXCIgJiYge1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTpcbiAgICAgICAgICAgICAgT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmdW5jdGlvbkFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgYCR7aWR9RGlzdHJpYnV0aW9uYCwge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogZGVmYXVsdE9yaWdpbixcbiAgICAgICAgY2FjaGVQb2xpY3k6IGRlZmF1bHRDYWNoZVBvbGljeSxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVJfRVhDRVBUX0hPU1RfSEVBREVSLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogdGhpcy5yZXNvbHZlQWxsb3dlZE1ldGhvZHMocHJvcHMuZGVmYXVsdEFsbG93ZWRNZXRob2RzKSxcbiAgICAgICAgLi4uKGZ1bmN0aW9uQXNzb2NpYXRpb25zICE9PSB1bmRlZmluZWQgJiYgeyBmdW5jdGlvbkFzc29jaWF0aW9ucyB9KVxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6XG4gICAgICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxCZWhhdmlvcnMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGFkZGl0aW9uYWxCZWhhdmlvcnNcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRvbWFpbk5hbWVzOiBwcm9wcy5kb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICBlbmFibGVMb2dnaW5nOiBwcm9wcy5lbmFibGVMb2dnaW5nLFxuICAgICAgbG9nQnVja2V0OiBwcm9wcy5sb2dCdWNrZXQsXG4gICAgICBwcmljZUNsYXNzOiB0aGlzLnJlc29sdmVQcmljZUNsYXNzKHByb3BzLnByaWNlQ2xhc3MpXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uRG9tYWluTmFtZWAsIHtcbiAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1EaXN0cmlidXRpb25Eb21haW5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBkb21haW4gbmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLCB7XG4gICAgICBrZXk6IGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBJRCBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICAvLyBPdXRwdXQgY3JlZGVudGlhbHMgaGludCB3aGVuIGFjY2VzcyBnYXRlIGlzIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuYWNjZXNzR2F0ZSkge1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsIHtcbiAgICAgICAga2V5OiBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsXG4gICAgICAgIHZhbHVlOiBwcm9wcy5hY2Nlc3NHYXRlLnVzZXJuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFjY2VzcyBnYXRlIHVzZXJuYW1lIGZvciAke2lkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBvc2FibGUgQ2xvdWRGcm9udCBGdW5jdGlvbiBmb3IgVklFV0VSX1JFUVVFU1QuXG4gICAqIE1lcmdlcyBhY2Nlc3NHYXRlIGFuZCBmb3J3YXJkSG9zdEhlYWRlciBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uXG4gICAqIChDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSkuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuLFxuICAgIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWdcbiAgKTogQ2xvdWRGcm9udEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWFjY2Vzc0dhdGUgJiYgIWZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBmdW5jdGlvbkJvZHkgPSBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgdmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1wiO1xuXG4gICAgaWYgKGFjY2Vzc0dhdGUpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oXG4gICAgICAgIGAke2FjY2Vzc0dhdGUudXNlcm5hbWV9OiR7YWNjZXNzR2F0ZS5wYXNzd29yZH1gXG4gICAgICApLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgYCB2YXIgYXV0aEhlYWRlciA9IHJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO2AgK1xuICAgICAgICBgIGlmICghYXV0aEhlYWRlciB8fCBhdXRoSGVhZGVyLnZhbHVlICE9PSBcIkJhc2ljICR7Y3JlZGVudGlhbHN9XCIpIHtgICtcbiAgICAgICAgYCByZXR1cm4ge2AgK1xuICAgICAgICBgIHN0YXR1c0NvZGU6IDQwMSxgICtcbiAgICAgICAgYCBzdGF0dXNEZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixgICtcbiAgICAgICAgYCBoZWFkZXJzOiB7IFwid3d3LWF1dGhlbnRpY2F0ZVwiOiB7IHZhbHVlOiAnQmFzaWMgcmVhbG09XCJSZXN0cmljdGVkXCInIH0gfSxgICtcbiAgICAgICAgYCBib2R5OiB7IGVuY29kaW5nOiBcInRleHRcIiwgZGF0YTogXCJVbmF1dGhvcml6ZWRcIiB9YCArXG4gICAgICAgIGAgfTsgfWA7XG4gICAgfVxuXG4gICAgaWYgKGZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgXCIgcmVxdWVzdC5oZWFkZXJzWyd4LWZvcndhcmRlZC1ob3N0J10gPSB7IHZhbHVlOiByZXF1ZXN0LmhlYWRlcnMuaG9zdC52YWx1ZSB9O1wiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uQm9keSArPSBcIiByZXR1cm4gcmVxdWVzdDsgfVwiO1xuXG4gICAgcmV0dXJuIG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgYCR7aWR9Vmlld2VyUmVxdWVzdEZuYCwge1xuICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoZnVuY3Rpb25Cb2R5KSxcbiAgICAgIHJ1bnRpbWU6IEZ1bmN0aW9uUnVudGltZS5KU18yXzBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JpZ2luKGNvbmZpZzogQ2RuT3JpZ2luQ29uZmlnKTogSU9yaWdpbiB7XG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcInMzXCI6XG4gICAgICAgIC8vIFVzaW5nIE9BSSBpbnN0ZWFkIG9mIE9BQyB0byBhdm9pZCBjcm9zcy1zdGFjayBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMxNDYyXG4gICAgICAgIC8vIE9BQyBjcmVhdGVzIGJ1Y2tldCDihpIgQ0ROIGRlcGVuZGVuY3kgKGJ1Y2tldCBwb2xpY3kgcmVmZXJlbmNlcyBkaXN0cmlidXRpb24pXG4gICAgICAgIC8vIE9BSSB3b3JrcyBhY3Jvc3Mgc3RhY2tzIHdpdGhvdXQgdHJpZ2dlcmluZyBjeWNsaWMgZGVwZW5kZW5jeSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eShjb25maWcuYnVja2V0LCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgXCJhbGJcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkQmFsYW5jZXJWMk9yaWdpbihjb25maWcubG9hZEJhbGFuY2VyLCB7XG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKGNvbmZpZy5kb21haW5OYW1lLCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGgsXG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDYWNoZVBvbGljeShcbiAgICBwb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeVxuICApOiBJQ2FjaGVQb2xpY3kge1xuICAgIGlmICghcG9saWN5KSB7XG4gICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwb2xpY3kgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICAgIGNhc2UgXCJDQUNISU5HX09QVElNSVpFRFwiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfRElTQUJMRURcIjpcbiAgICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRF9GT1JfVU5DT01QUkVTU0VEX09CSkVDVFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbGljeTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbG93ZWRNZXRob2RzKFxuICAgIG1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCJcbiAgKTogQWxsb3dlZE1ldGhvZHMge1xuICAgIHN3aXRjaCAobWV0aG9kcykge1xuICAgICAgY2FzZSBcIkdFVF9IRUFEXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRDtcbiAgICAgIGNhc2UgXCJHRVRfSEVBRF9PUFRJT05TXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TO1xuICAgICAgY2FzZSBcIkFMTFwiOlxuICAgICAgICByZXR1cm4gQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgIHBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCJcbiAgKTogT3JpZ2luUHJvdG9jb2xQb2xpY3kge1xuICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICBjYXNlIFwiSFRUUF9PTkxZXCI6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQX09OTFk7XG4gICAgICBjYXNlIFwiSFRUUFNfT05MWVwiOlxuICAgICAgICByZXR1cm4gT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWTtcbiAgICAgIGNhc2UgXCJNQVRDSF9WSUVXRVJcIjpcbiAgICAgICAgcmV0dXJuIE9yaWdpblByb3RvY29sUG9saWN5Lk1BVENIX1ZJRVdFUjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVByaWNlQ2xhc3MoXG4gICAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIlxuICApOiBQcmljZUNsYXNzIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHByaWNlQ2xhc3MpIHtcbiAgICAgIGNhc2UgXCJQcmljZUNsYXNzXzEwMFwiOlxuICAgICAgICByZXR1cm4gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDA7XG4gICAgICBjYXNlIFwiUHJpY2VDbGFzc18yMDBcIjpcbiAgICAgICAgcmV0dXJuIFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMjAwO1xuICAgICAgY2FzZSBcIlByaWNlQ2xhc3NfQWxsXCI6XG4gICAgICAgIHJldHVybiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZG9tYWluIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uRG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gSUQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIENESyBEaXN0cmlidXRpb24gY29uc3RydWN0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3RyaWJ1dGlvbigpOiBEaXN0cmlidXRpb24ge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbjtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- export * from "./cloudFront";
1
+ export * from "./cloudFront.js";
@@ -1,18 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./cloudFront"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9jZG4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Nsb3VkRnJvbnRcIjtcbiJdfQ==
1
+ export * from "./cloudFront.js";
@@ -1,15 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Ec2InstanceStack = exports.Ec2Instance = void 0;
4
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
5
- const constructs_1 = require("constructs");
6
- const vpcUtils_1 = require("../../../utils/vpcUtils");
7
- const aws_cdk_lib_1 = require("aws-cdk-lib");
8
- const aws_autoscaling_1 = require("aws-cdk-lib/aws-autoscaling");
9
- const awsCustomResource_1 = require("../utilities/awsCustomResource");
10
- const custom_resources_1 = require("aws-cdk-lib/custom-resources");
11
- const vpc_1 = require("../networking/vpc");
12
- class Ec2Instance extends constructs_1.Construct {
1
+ import { InstanceType, LaunchTemplate, SubnetType, MachineImage, LaunchTemplateHttpTokens, KeyPair, SecurityGroup, Peer, Port, Connections } from "aws-cdk-lib/aws-ec2";
2
+ import { Construct } from "constructs";
3
+ import { resolvePrivateSubnetType } from "../../../utils/vpcUtils.js";
4
+ import { Duration, Stack } from "aws-cdk-lib";
5
+ import { AutoScalingGroup, GroupMetrics, TerminationPolicy, UpdatePolicy, OnDemandAllocationStrategy, SpotAllocationStrategy } from "aws-cdk-lib/aws-autoscaling";
6
+ import { AwsCustomResource } from "../utilities/awsCustomResource.js";
7
+ import { PhysicalResourceId } from "aws-cdk-lib/custom-resources";
8
+ import { Vpc } from "../networking/vpc.js";
9
+ export class Ec2Instance extends Construct {
10
+ launchTemplate;
11
+ vpc;
12
+ asgSecurityGroup;
13
+ autoScalingGroup;
14
+ keyPair;
15
+ connections;
13
16
  constructor(scope, id, props) {
14
17
  super(scope, id);
15
18
  this.addVpc(props);
@@ -19,9 +22,9 @@ class Ec2Instance extends constructs_1.Construct {
19
22
  this.suspendAutoScaling(props);
20
23
  // Initialise connections with the security group and optional defaultPort
21
24
  // When defaultPort is set, other resources can use allowToDefaultPort(ec2Instance)
22
- this.connections = new aws_ec2_1.Connections({
25
+ this.connections = new Connections({
23
26
  securityGroups: [this.asgSecurityGroup],
24
- defaultPort: props.defaultPort ? aws_ec2_1.Port.tcp(props.defaultPort) : undefined
27
+ defaultPort: props.defaultPort ? Port.tcp(props.defaultPort) : undefined
25
28
  });
26
29
  }
27
30
  addVpc(props) {
@@ -29,7 +32,7 @@ class Ec2Instance extends constructs_1.Construct {
29
32
  this.vpc = props.vpc;
30
33
  }
31
34
  else {
32
- this.vpc = new vpc_1.Vpc(this, `${props.serviceName}Vpc`, {
35
+ this.vpc = new Vpc(this, `${props.serviceName}Vpc`, {
33
36
  accountId: props.accountId,
34
37
  subnetConfiguration: props.subnetConfiguration
35
38
  });
@@ -41,23 +44,23 @@ class Ec2Instance extends constructs_1.Construct {
41
44
  }
42
45
  else {
43
46
  // TODO: Break out into a separate construct for use with better prop handling
44
- this.keyPair = new aws_ec2_1.KeyPair(this, "KeyPair", {
47
+ this.keyPair = new KeyPair(this, "KeyPair", {
45
48
  keyPairName: `${props.serviceName}KeyPair`
46
49
  });
47
50
  }
48
51
  }
49
52
  addLaunchTemplate(props) {
50
- this.asgSecurityGroup = new aws_ec2_1.SecurityGroup(this, `AsgSecurityGroup`, {
53
+ this.asgSecurityGroup = new SecurityGroup(this, `AsgSecurityGroup`, {
51
54
  vpc: this.vpc,
52
55
  description: `Security group for the ${props.serviceName} auto scaling group`
53
56
  });
54
57
  if (props.enableSSH) {
55
- this.asgSecurityGroup.addIngressRule(aws_ec2_1.Peer.anyIpv4(), aws_ec2_1.Port.tcp(22), "Allow SSH");
58
+ this.asgSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(22), "Allow SSH");
56
59
  }
57
- this.launchTemplate = new aws_ec2_1.LaunchTemplate(this, "LaunchTemplate", {
60
+ this.launchTemplate = new LaunchTemplate(this, "LaunchTemplate", {
58
61
  launchTemplateName: `${props.serviceName}LaunchTemplate`,
59
- instanceType: new aws_ec2_1.InstanceType(`${props.instanceType}`),
60
- machineImage: props.machineImage || aws_ec2_1.MachineImage.latestAmazonLinux2023(),
62
+ instanceType: new InstanceType(`${props.instanceType}`),
63
+ machineImage: props.machineImage || MachineImage.latestAmazonLinux2023(),
61
64
  userData: props.userData,
62
65
  role: props.role,
63
66
  blockDevices: props?.blockDevices,
@@ -65,7 +68,7 @@ class Ec2Instance extends constructs_1.Construct {
65
68
  detailedMonitoring: true,
66
69
  requireImdsv2: true,
67
70
  httpPutResponseHopLimit: 2,
68
- httpTokens: aws_ec2_1.LaunchTemplateHttpTokens.REQUIRED,
71
+ httpTokens: LaunchTemplateHttpTokens.REQUIRED,
69
72
  instanceMetadataTags: true,
70
73
  keyPair: this.keyPair,
71
74
  associatePublicIpAddress: !!this.keyPair
@@ -77,18 +80,18 @@ class Ec2Instance extends constructs_1.Construct {
77
80
  vpc: this.vpc,
78
81
  vpcSubnets: {
79
82
  subnetType: props.enableSSH
80
- ? aws_ec2_1.SubnetType.PUBLIC
81
- : (0, vpcUtils_1.resolvePrivateSubnetType)(this.vpc)
83
+ ? SubnetType.PUBLIC
84
+ : resolvePrivateSubnetType(this.vpc)
82
85
  },
83
86
  minCapacity: props.minCapacity,
84
87
  maxCapacity: props.maxCapacity,
85
- cooldown: aws_cdk_lib_1.Duration.seconds(60),
86
- groupMetrics: [aws_autoscaling_1.GroupMetrics.all()],
87
- updatePolicy: aws_autoscaling_1.UpdatePolicy.replacingUpdate(),
88
+ cooldown: Duration.seconds(60),
89
+ groupMetrics: [GroupMetrics.all()],
90
+ updatePolicy: UpdatePolicy.replacingUpdate(),
88
91
  newInstancesProtectedFromScaleIn: true,
89
92
  terminationPolicies: [
90
- aws_autoscaling_1.TerminationPolicy.OLDEST_LAUNCH_CONFIGURATION,
91
- aws_autoscaling_1.TerminationPolicy.CLOSEST_TO_NEXT_INSTANCE_HOUR
93
+ TerminationPolicy.OLDEST_LAUNCH_CONFIGURATION,
94
+ TerminationPolicy.CLOSEST_TO_NEXT_INSTANCE_HOUR
92
95
  ],
93
96
  ssmSessionPermissions: true
94
97
  };
@@ -97,21 +100,21 @@ class Ec2Instance extends constructs_1.Construct {
97
100
  props.spotCapacityPercentage > 0) {
98
101
  const spotPercentage = Math.min(100, Math.max(0, props.spotCapacityPercentage));
99
102
  const onDemandPercentage = 100 - spotPercentage;
100
- this.autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "AutoScalingGroup", {
103
+ this.autoScalingGroup = new AutoScalingGroup(this, "AutoScalingGroup", {
101
104
  ...baseAsgProps,
102
105
  mixedInstancesPolicy: {
103
106
  instancesDistribution: {
104
- onDemandAllocationStrategy: aws_autoscaling_1.OnDemandAllocationStrategy.PRIORITIZED,
107
+ onDemandAllocationStrategy: OnDemandAllocationStrategy.PRIORITIZED,
105
108
  onDemandBaseCapacity: 0,
106
109
  onDemandPercentageAboveBaseCapacity: onDemandPercentage,
107
- spotAllocationStrategy: aws_autoscaling_1.SpotAllocationStrategy.PRICE_CAPACITY_OPTIMIZED
110
+ spotAllocationStrategy: SpotAllocationStrategy.PRICE_CAPACITY_OPTIMIZED
108
111
  },
109
112
  launchTemplate: this.launchTemplate
110
113
  }
111
114
  });
112
115
  }
113
116
  else {
114
- this.autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "AutoScalingGroup", {
117
+ this.autoScalingGroup = new AutoScalingGroup(this, "AutoScalingGroup", {
115
118
  ...baseAsgProps,
116
119
  launchTemplate: this.launchTemplate
117
120
  });
@@ -131,17 +134,16 @@ class Ec2Instance extends constructs_1.Construct {
131
134
  AutoScalingGroupName: this.autoScalingGroup.autoScalingGroupName,
132
135
  ScalingProcesses: ["AZRebalance"]
133
136
  },
134
- physicalResourceId: custom_resources_1.PhysicalResourceId.of("suspendAutoScaling")
137
+ physicalResourceId: PhysicalResourceId.of("suspendAutoScaling")
135
138
  };
136
- new awsCustomResource_1.AwsCustomResource(this, "SuspendAutoscaling", {
139
+ new AwsCustomResource(this, "SuspendAutoscaling", {
137
140
  onCreate: suspendCall,
138
141
  onUpdate: suspendCall,
139
142
  resourceType: "Custom::suspendAutoscaling"
140
143
  });
141
144
  }
142
145
  }
143
- exports.Ec2Instance = Ec2Instance;
144
- class Ec2InstanceStack extends aws_cdk_lib_1.Stack {
146
+ export class Ec2InstanceStack extends Stack {
145
147
  constructor(scope, id, props) {
146
148
  super(scope, id, props);
147
149
  new Ec2Instance(this, id, {
@@ -149,5 +151,3 @@ class Ec2InstanceStack extends aws_cdk_lib_1.Stack {
149
151
  });
150
152
  }
151
153
  }
152
- exports.Ec2InstanceStack = Ec2InstanceStack;
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lYzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBa0I2QjtBQUM3QiwyQ0FBdUM7QUFDdkMsc0RBQW1FO0FBQ25FLDZDQUErRDtBQUUvRCxpRUFPcUM7QUFDckMsc0VBQW1FO0FBQ25FLG1FQUFrRTtBQUNsRSwyQ0FBd0M7QUFtQnhDLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBUXhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsMEVBQTBFO1FBQzFFLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQVcsQ0FBQztZQUNqQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUI7UUFDNUIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7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QUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBd0I7UUFDekMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixVQUFVLEVBQUU7Z0JBQ1Ysb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtnQkFDaEUsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUM7YUFDbEM7WUFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEUsQ0FBQztRQUVGLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ2hELFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFlBQVksRUFBRSw0QkFBNEI7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN0pELGtDQTZKQztBQUVELE1BQWEsZ0JBQWlCLFNBQVEsbUJBQUs7SUFDekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3hCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVJELDRDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBCbG9ja0RldmljZSxcbiAgdHlwZSBJTWFjaGluZUltYWdlLFxuICBJbnN0YW5jZVR5cGUsXG4gIHR5cGUgSVZwYyxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIFN1Ym5ldFR5cGUsXG4gIHR5cGUgVXNlckRhdGEsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLFxuICBLZXlQYWlyLFxuICB0eXBlIElLZXlQYWlyLFxuICBTZWN1cml0eUdyb3VwLFxuICBQZWVyLFxuICBQb3J0LFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgU3VibmV0Q29uZmlndXJhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHJlc29sdmVQcml2YXRlU3VibmV0VHlwZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy92cGNVdGlsc1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3ksXG4gIE9uRGVtYW5kQWxsb2NhdGlvblN0cmF0ZWd5LFxuICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi9uZXR3b3JraW5nL3ZwY1wiO1xuXG5pbnRlcmZhY2UgRWMySW5zdGFuY2VQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBzcG90Q2FwYWNpdHlQZXJjZW50YWdlPzogbnVtYmVyO1xuICBibG9ja0RldmljZXM/OiBCbG9ja0RldmljZVtdO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZwYz86IElWcGM7XG4gIHN1Ym5ldENvbmZpZ3VyYXRpb24/OiBTdWJuZXRDb25maWd1cmF0aW9uW107XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgaW5zdGFuY2VUeXBlOiBzdHJpbmc7XG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIHJvbGU/OiBSb2xlO1xuICBlbmFibGVTU0g/OiBib29sZWFuO1xuICBkZWZhdWx0UG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEVjMkluc3RhbmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBsYXVuY2hUZW1wbGF0ZSE6IExhdW5jaFRlbXBsYXRlO1xuICBwdWJsaWMgdnBjITogSVZwYztcbiAgcHVibGljIGFzZ1NlY3VyaXR5R3JvdXAhOiBTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIGF1dG9TY2FsaW5nR3JvdXAhOiBBdXRvU2NhbGluZ0dyb3VwO1xuICBwcml2YXRlIGtleVBhaXI6IElLZXlQYWlyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkVnBjKHByb3BzKTtcbiAgICB0aGlzLmFkZEtleVBhaXIocHJvcHMpO1xuICAgIHRoaXMuYWRkTGF1bmNoVGVtcGxhdGUocHJvcHMpO1xuICAgIHRoaXMuYWRkQXV0b1NjYWxpbmdHcm91cChwcm9wcyk7XG4gICAgdGhpcy5zdXNwZW5kQXV0b1NjYWxpbmcocHJvcHMpO1xuXG4gICAgLy8gSW5pdGlhbGlzZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZWN1cml0eSBncm91cCBhbmQgb3B0aW9uYWwgZGVmYXVsdFBvcnRcbiAgICAvLyBXaGVuIGRlZmF1bHRQb3J0IGlzIHNldCwgb3RoZXIgcmVzb3VyY2VzIGNhbiB1c2UgYWxsb3dUb0RlZmF1bHRQb3J0KGVjMkluc3RhbmNlKVxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLmFzZ1NlY3VyaXR5R3JvdXBdLFxuICAgICAgZGVmYXVsdFBvcnQ6IHByb3BzLmRlZmF1bHRQb3J0ID8gUG9ydC50Y3AocHJvcHMuZGVmYXVsdFBvcnQpIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cblxuICBhZGRWcGMocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICB0aGlzLnZwYyA9IHByb3BzLnZwYztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsIGAke3Byb3BzLnNlcnZpY2VOYW1lfVZwY2AsIHtcbiAgICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IHByb3BzLnN1Ym5ldENvbmZpZ3VyYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZEtleVBhaXIocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmVuYWJsZVNTSCkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBCcmVhayBvdXQgaW50byBhIHNlcGFyYXRlIGNvbnN0cnVjdCBmb3IgdXNlIHdpdGggYmV0dGVyIHByb3AgaGFuZGxpbmdcbiAgICAgIHRoaXMua2V5UGFpciA9IG5ldyBLZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICAgIGtleVBhaXJOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1LZXlQYWlyYFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF1bmNoVGVtcGxhdGUocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICB0aGlzLmFzZ1NlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgQXNnU2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHtwcm9wcy5zZXJ2aWNlTmFtZX0gYXV0byBzY2FsaW5nIGdyb3VwYFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZVNTSCkge1xuICAgICAgdGhpcy5hc2dTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmFueUlwdjQoKSxcbiAgICAgICAgUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubGF1bmNoVGVtcGxhdGUgPSBuZXcgTGF1bmNoVGVtcGxhdGUodGhpcywgXCJMYXVuY2hUZW1wbGF0ZVwiLCB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfUxhdW5jaFRlbXBsYXRlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IEluc3RhbmNlVHlwZShgJHtwcm9wcy5pbnN0YW5jZVR5cGV9YCksXG4gICAgICBtYWNoaW5lSW1hZ2U6IHByb3BzLm1hY2hpbmVJbWFnZSB8fCBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKCksXG4gICAgICB1c2VyRGF0YTogcHJvcHMudXNlckRhdGEsXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBwcm9wcz8uYmxvY2tEZXZpY2VzLFxuICAgICAgc2VjdXJpdHlHcm91cDogdGhpcy5hc2dTZWN1cml0eUdyb3VwLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZUltZHN2MjogdHJ1ZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWUsXG4gICAgICBrZXlQYWlyOiB0aGlzLmtleVBhaXIsXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6ICEhdGhpcy5rZXlQYWlyXG4gICAgfSk7XG4gIH1cblxuICBhZGRBdXRvU2NhbGluZ0dyb3VwKHByb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgLy8gVE9ETzogSGFuZGxlIHRlcm1pbmF0aW5nIEVDMiBpbnN0YW5jZXMgd2hlbiB1cGRhdGluZywgY3VycmVudGx5IGhhbmdzLlxuICAgIGNvbnN0IGJhc2VBc2dQcm9wcyA9IHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLmVuYWJsZVNTSFxuICAgICAgICAgID8gU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgICA6IHJlc29sdmVQcml2YXRlU3VibmV0VHlwZSh0aGlzLnZwYylcbiAgICAgIH0sXG4gICAgICBtaW5DYXBhY2l0eTogcHJvcHMubWluQ2FwYWNpdHksXG4gICAgICBtYXhDYXBhY2l0eTogcHJvcHMubWF4Q2FwYWNpdHksXG4gICAgICBjb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICBuZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbjogdHJ1ZSxcbiAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5DTE9TRVNUX1RPX05FWFRfSU5TVEFOQ0VfSE9VUlxuICAgICAgXSxcbiAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyBTdXBwb3J0IHNwb3QgaW5zdGFuY2VzIHZpYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgc3BvdFBlcmNlbnRhZ2UgPSBNYXRoLm1pbihcbiAgICAgICAgMTAwLFxuICAgICAgICBNYXRoLm1heCgwLCBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG9uRGVtYW5kUGVyY2VudGFnZSA9IDEwMCAtIHNwb3RQZXJjZW50YWdlO1xuXG4gICAgICB0aGlzLmF1dG9TY2FsaW5nR3JvdXAgPSBuZXcgQXV0b1NjYWxpbmdHcm91cCh0aGlzLCBcIkF1dG9TY2FsaW5nR3JvdXBcIiwge1xuICAgICAgICAuLi5iYXNlQXNnUHJvcHMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgaW5zdGFuY2VzRGlzdHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBvbkRlbWFuZEFsbG9jYXRpb25TdHJhdGVneTogT25EZW1hbmRBbGxvY2F0aW9uU3RyYXRlZ3kuUFJJT1JJVElaRUQsXG4gICAgICAgICAgICBvbkRlbWFuZEJhc2VDYXBhY2l0eTogMCxcbiAgICAgICAgICAgIG9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5OiBvbkRlbWFuZFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OlxuICAgICAgICAgICAgICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LlBSSUNFX0NBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IHRoaXMubGF1bmNoVGVtcGxhdGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKHRoaXMsIFwiQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICAgIC4uLmJhc2VBc2dQcm9wcyxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGU6IHRoaXMubGF1bmNoVGVtcGxhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEF1dG8gU2NhbGluZyBHcm91cC5cbiAgICovXG4gIHB1YmxpYyBnZXRBdXRvU2NhbGluZ0dyb3VwKCk6IEF1dG9TY2FsaW5nR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmF1dG9TY2FsaW5nR3JvdXA7XG4gIH1cblxuICBzdXNwZW5kQXV0b1NjYWxpbmcoX3Byb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgY29uc3Qgc3VzcGVuZENhbGwgPSB7XG4gICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogdGhpcy5hdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgfSxcbiAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwic3VzcGVuZEF1dG9TY2FsaW5nXCIpXG4gICAgfTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlN1c3BlbmRBdXRvc2NhbGluZ1wiLCB7XG4gICAgICBvbkNyZWF0ZTogc3VzcGVuZENhbGwsXG4gICAgICBvblVwZGF0ZTogc3VzcGVuZENhbGwsXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpzdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFYzJJbnN0YW5jZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRWMySW5zdGFuY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IEVjMkluc3RhbmNlKHRoaXMsIGlkLCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iXX0=