@fjall/components-infrastructure 0.89.4 → 0.89.6

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 +61 -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 +82 -70
  181. package/dist/lib/resources/aws/database/dynamodb.js +27 -28
  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,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CdnFactory = exports.Cdn = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager");
6
- const cdn_1 = require("../../resources/aws/cdn");
7
- const storage_1 = require("./storage");
8
- const compute_1 = require("./compute");
9
- const validationLogger_js_1 = require("../../utils/validationLogger.js");
1
+ import { Fn } from "aws-cdk-lib";
2
+ import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
3
+ import { CloudFrontDistribution } from "../../resources/aws/cdn/index.js";
4
+ import { isStorage } from "./storage.js";
5
+ import { isCompute, isEcsCompute, isLambdaCompute } from "./compute.js";
6
+ import { FjallLogger } from "../../utils/validationLogger.js";
10
7
  /**
11
8
  * Validates CDN props and logs warnings for misconfigured options.
12
9
  */
@@ -14,17 +11,17 @@ function validateCdnProps(props) {
14
11
  const hasCertificate = !!(props.certificate || props.certificateArn);
15
12
  // Validate certificate region warning
16
13
  if (hasCertificate && props.domainNames && props.domainNames.length > 0) {
17
- validationLogger_js_1.FjallLogger.info("CloudFront certificates must be in us-east-1 region. " +
14
+ FjallLogger.info("CloudFront certificates must be in us-east-1 region. " +
18
15
  "Ensure your certificate was created in us-east-1.");
19
16
  }
20
17
  // Validate domain names require certificate
21
18
  if (props.domainNames && props.domainNames.length > 0 && !hasCertificate) {
22
- validationLogger_js_1.FjallLogger.warn("'domainNames' provided but no 'certificate' specified. " +
19
+ FjallLogger.warn("'domainNames' provided but no 'certificate' specified. " +
23
20
  "Custom domain names require an ACM certificate in us-east-1.");
24
21
  }
25
22
  // Validate ALB origin
26
23
  if (props.originType === "alb") {
27
- if ((0, compute_1.isCompute)(props.loadBalancer) && (0, compute_1.isEcsCompute)(props.loadBalancer)) {
24
+ if (isCompute(props.loadBalancer) && isEcsCompute(props.loadBalancer)) {
28
25
  const lb = props.loadBalancer.getLoadBalancer();
29
26
  if (!lb) {
30
27
  throw new Error("Compute resource does not have a load balancer. " +
@@ -34,14 +31,14 @@ function validateCdnProps(props) {
34
31
  }
35
32
  // Validate smart origin
36
33
  if (props.originType === "auto") {
37
- if ((0, compute_1.isCompute)(props.origin)) {
38
- if ((0, compute_1.isEcsCompute)(props.origin)) {
34
+ if (isCompute(props.origin)) {
35
+ if (isEcsCompute(props.origin)) {
39
36
  if (!props.origin.getLoadBalancer()) {
40
37
  throw new Error("ECS compute must have a load balancer for CDN origin. " +
41
38
  "Enable loadBalancer in your ECS compute configuration.");
42
39
  }
43
40
  }
44
- else if ((0, compute_1.isLambdaCompute)(props.origin)) {
41
+ else if (isLambdaCompute(props.origin)) {
45
42
  if (!props.origin.getFunctionUrl()) {
46
43
  throw new Error("Lambda compute must have a function URL for CDN origin. " +
47
44
  "Enable functionUrl in your Lambda compute configuration.");
@@ -58,7 +55,7 @@ function validateCdnProps(props) {
58
55
  /**
59
56
  * CDN wrapper class that extends CloudFrontDistribution with Fjall patterns.
60
57
  */
61
- class Cdn extends cdn_1.CloudFrontDistribution {
58
+ export class Cdn extends CloudFrontDistribution {
62
59
  constructor(scope, id, props) {
63
60
  const resolvedProps = Cdn.resolveProps(scope, id, props);
64
61
  super(scope, id, resolvedProps);
@@ -71,7 +68,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
71
68
  const behaviours = Cdn.resolveBehaviours(props.behaviours);
72
69
  const certificate = props.certificate ??
73
70
  (props.certificateArn
74
- ? aws_certificatemanager_1.Certificate.fromCertificateArn(scope, `${id}Certificate`, props.certificateArn)
71
+ ? Certificate.fromCertificateArn(scope, `${id}Certificate`, props.certificateArn)
75
72
  : undefined);
76
73
  return {
77
74
  defaultOrigin,
@@ -108,7 +105,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
108
105
  static resolveDefaultOrigin(props) {
109
106
  switch (props.originType) {
110
107
  case "s3": {
111
- const bucket = (0, storage_1.isStorage)(props.bucket)
108
+ const bucket = isStorage(props.bucket)
112
109
  ? props.bucket.getBucket()
113
110
  : props.bucket;
114
111
  return {
@@ -119,8 +116,8 @@ class Cdn extends cdn_1.CloudFrontDistribution {
119
116
  }
120
117
  case "alb": {
121
118
  let loadBalancer;
122
- if ((0, compute_1.isCompute)(props.loadBalancer)) {
123
- if ((0, compute_1.isEcsCompute)(props.loadBalancer)) {
119
+ if (isCompute(props.loadBalancer)) {
120
+ if (isEcsCompute(props.loadBalancer)) {
124
121
  const lb = props.loadBalancer.getLoadBalancer();
125
122
  if (!lb) {
126
123
  throw new Error("Compute resource does not have a load balancer. " +
@@ -169,14 +166,14 @@ class Cdn extends cdn_1.CloudFrontDistribution {
169
166
  };
170
167
  }
171
168
  // Storage → S3 origin
172
- if ((0, storage_1.isStorage)(resource)) {
169
+ if (isStorage(resource)) {
173
170
  return {
174
171
  type: "s3",
175
172
  bucket: resource.getBucket()
176
173
  };
177
174
  }
178
175
  // ECS Compute → ALB origin
179
- if ((0, compute_1.isEcsCompute)(resource)) {
176
+ if (isEcsCompute(resource)) {
180
177
  const loadBalancer = resource.getLoadBalancer();
181
178
  if (loadBalancer) {
182
179
  return {
@@ -186,7 +183,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
186
183
  }
187
184
  }
188
185
  // Lambda Compute → HTTP origin (function URL)
189
- if ((0, compute_1.isLambdaCompute)(resource)) {
186
+ if (isLambdaCompute(resource)) {
190
187
  const functionUrl = resource.getFunctionUrl();
191
188
  if (functionUrl) {
192
189
  // Lambda function URL is an HTTP origin
@@ -194,7 +191,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
194
191
  // URL format: https://<domain>/
195
192
  // Split by "/" gives ["https:", "", "<domain>", ""]
196
193
  // Select index 2 to get the domain
197
- const domainName = aws_cdk_lib_1.Fn.select(2, aws_cdk_lib_1.Fn.split("/", functionUrl));
194
+ const domainName = Fn.select(2, Fn.split("/", functionUrl));
198
195
  return {
199
196
  type: "http",
200
197
  domainName
@@ -205,7 +202,6 @@ class Cdn extends cdn_1.CloudFrontDistribution {
205
202
  "Provide explicit origin configuration using originType.");
206
203
  }
207
204
  }
208
- exports.Cdn = Cdn;
209
205
  /**
210
206
  * Factory for creating CDN (CloudFront) distributions.
211
207
  *
@@ -241,7 +237,7 @@ exports.Cdn = Cdn;
241
237
  * certificate: myCert
242
238
  * }));
243
239
  */
244
- class CdnFactory {
240
+ export class CdnFactory {
245
241
  /**
246
242
  * Build a CDN factory function.
247
243
  *
@@ -256,5 +252,3 @@ class CdnFactory {
256
252
  };
257
253
  }
258
254
  }
259
- exports.CdnFactory = CdnFactory;
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9jZG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQWlDO0FBR2pDLCtFQUc0QztBQUk1QyxpREFPaUM7QUFFakMsdUNBQW9EO0FBQ3BELHVDQUttQjtBQUNuQix5RUFBOEQ7QUFxRTlEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFnQjtJQUN4QyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVyRSxzQ0FBc0M7SUFDdEMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxpQ0FBVyxDQUFDLElBQUksQ0FDZCx1REFBdUQ7WUFDckQsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6RSxpQ0FBVyxDQUFDLElBQUksQ0FDZCx5REFBeUQ7WUFDdkQsOERBQThELENBQ2pFLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUEsbUJBQVMsRUFBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFD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T0FBTyxDQUFDLElBQVMsRUFBRSxLQUFnQixFQUFPLEVBQUU7WUFDMUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWRELGdDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRm4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IHR5cGUgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQge1xuICB0eXBlIElDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgSUNhY2hlUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQge1xuICBDbG91ZEZyb250RGlzdHJpYnV0aW9uLFxuICB0eXBlIENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyxcbiAgdHlwZSBDZG5PcmlnaW5Db25maWcsXG4gIHR5cGUgQ2RuQmVoYXZpb3VyLFxuICB0eXBlIENhY2hlUG9saWN5UHJlc2V0LFxuICB0eXBlIEFjY2Vzc0dhdGVDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY2RuXCI7XG5pbXBvcnQgeyB0eXBlIElDZG4gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NkblwiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlLCBpc1N0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQge1xuICB0eXBlIEFueUNvbXB1dGUsXG4gIGlzQ29tcHV0ZSxcbiAgaXNFY3NDb21wdXRlLFxuICBpc0xhbWJkYUNvbXB1dGVcbn0gZnJvbSBcIi4vY29tcHV0ZVwiO1xuaW1wb3J0IHsgRmphbGxMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuXG4vKipcbiAqIENvbW1vbiBDRE4gcHJvcHMgc2hhcmVkIGFjcm9zcyBhbGwgb3JpZ2luIHR5cGVzLlxuICovXG5pbnRlcmZhY2UgQmFzZUNkblByb3BzIHtcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgZGVmYXVsdEFsbG93ZWRNZXRob2RzPzogXCJHRVRfSEVBRFwiIHwgXCJHRVRfSEVBRF9PUFRJT05TXCIgfCBcIkFMTFwiO1xuICBiZWhhdmlvdXJzPzogU21hcnRDZG5CZWhhdmlvdXJbXTtcbiAgZG9tYWluTmFtZXM/OiBzdHJpbmdbXTtcbiAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG4gIGNlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcbiAgbG9nQnVja2V0PzogSUJ1Y2tldDtcbiAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIjtcbiAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuO1xuICBhY2Nlc3NHYXRlPzogZmFsc2UgfCBBY2Nlc3NHYXRlQ29uZmlnO1xufVxuXG4vKipcbiAqIFMzIG9yaWdpbiBDRE4gcHJvcHMgLSB1c2Ugd2l0aCBTMyBidWNrZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0NkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQgfCBTdG9yYWdlO1xuICBvcmlnaW5QYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFMQiBvcmlnaW4gQ0ROIHByb3BzIC0gdXNlIHdpdGggQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsYkNkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIgfCBBbnlDb21wdXRlO1xuICBwcm90b2NvbFBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCI7XG59XG5cbi8qKlxuICogSFRUUCBvcmlnaW4gQ0ROIHByb3BzIC0gdXNlIHdpdGggY3VzdG9tIEhUVFAgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2RuUHJvcHMgZXh0ZW5kcyBCYXNlQ2RuUHJvcHMge1xuICBvcmlnaW5UeXBlOiBcImh0dHBcIjtcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICBvcmlnaW5QYXRoPzogc3RyaW5nO1xuICBwcm90b2NvbFBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCI7XG59XG5cbi8qKlxuICogU21hcnQgb3JpZ2luIENETiBwcm9wcyAtIGF1dG8tZGV0ZWN0IG9yaWdpbiB0eXBlIGZyb20gRmphbGwgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbWFydENkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJhdXRvXCI7XG4gIG9yaWdpbjogU3RvcmFnZSB8IEFueUNvbXB1dGUgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElDZG5Qcm9wcyA9IFMzQ2RuUHJvcHMgfCBBbGJDZG5Qcm9wcyB8IEh0dHBDZG5Qcm9wcyB8IFNtYXJ0Q2RuUHJvcHM7XG5cbi8qKlxuICogU21hcnQgYmVoYXZpb3VyIHR5cGUgdGhhdCBhY2NlcHRzIEZqYWxsIHJlc291cmNlcyBhcyBvcmlnaW5zLlxuICogVGhlIGZhY3Rvcnkgd2lsbCB0cmFuc2Zvcm0gdGhlc2UgdG8gcHJvcGVyIENkbkJlaGF2aW91ciBvYmplY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q2RuQmVoYXZpb3VyIHtcbiAgcGF0aFBhdHRlcm46IHN0cmluZztcbiAgb3JpZ2luOiBTdG9yYWdlIHwgQW55Q29tcHV0ZSB8IHN0cmluZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIENETiBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgbWlzY29uZmlndXJlZCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNkblByb3BzKHByb3BzOiBJQ2RuUHJvcHMpOiB2b2lkIHtcbiAgY29uc3QgaGFzQ2VydGlmaWNhdGUgPSAhIShwcm9wcy5jZXJ0aWZpY2F0ZSB8fCBwcm9wcy5jZXJ0aWZpY2F0ZUFybik7XG5cbiAgLy8gVmFsaWRhdGUgY2VydGlmaWNhdGUgcmVnaW9uIHdhcm5pbmdcbiAgaWYgKGhhc0NlcnRpZmljYXRlICYmIHByb3BzLmRvbWFpbk5hbWVzICYmIHByb3BzLmRvbWFpbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICBGamFsbExvZ2dlci5pbmZvKFxuICAgICAgXCJDbG91ZEZyb250IGNlcnRpZmljYXRlcyBtdXN0IGJlIGluIHVzLWVhc3QtMSByZWdpb24uIFwiICtcbiAgICAgICAgXCJFbnN1cmUgeW91ciBjZXJ0aWZpY2F0ZSB3YXMgY3JlYXRlZCBpbiB1cy1lYXN0LTEuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZG9tYWluIG5hbWVzIHJlcXVpcmUgY2VydGlmaWNhdGVcbiAgaWYgKHByb3BzLmRvbWFpbk5hbWVzICYmIHByb3BzLmRvbWFpbk5hbWVzLmxlbmd0aCA+IDAgJiYgIWhhc0NlcnRpZmljYXRlKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2RvbWFpbk5hbWVzJyBwcm92aWRlZCBidXQgbm8gJ2NlcnRpZmljYXRlJyBzcGVjaWZpZWQuIFwiICtcbiAgICAgICAgXCJDdXN0b20gZG9tYWluIG5hbWVzIHJlcXVpcmUgYW4gQUNNIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBBTEIgb3JpZ2luXG4gIGlmIChwcm9wcy5vcmlnaW5UeXBlID09PSBcImFsYlwiKSB7XG4gICAgaWYgKGlzQ29tcHV0ZShwcm9wcy5sb2FkQmFsYW5jZXIpICYmIGlzRWNzQ29tcHV0ZShwcm9wcy5sb2FkQmFsYW5jZXIpKSB7XG4gICAgICBjb25zdCBsYiA9IHByb3BzLmxvYWRCYWxhbmNlci5nZXRMb2FkQmFsYW5jZXIoKTtcbiAgICAgIGlmICghbGIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ29tcHV0ZSByZXNvdXJjZSBkb2VzIG5vdCBoYXZlIGEgbG9hZCBiYWxhbmNlci4gXCIgK1xuICAgICAgICAgICAgXCJFbnN1cmUgRUNTIGNvbXB1dGUgaGFzIGxvYWRCYWxhbmNlciBlbmFibGVkIGZvciBDRE4gb3JpZ2luLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgc21hcnQgb3JpZ2luXG4gIGlmIChwcm9wcy5vcmlnaW5UeXBlID09PSBcImF1dG9cIikge1xuICAgIGlmIChpc0NvbXB1dGUocHJvcHMub3JpZ2luKSkge1xuICAgICAgaWYgKGlzRWNzQ29tcHV0ZShwcm9wcy5vcmlnaW4pKSB7XG4gICAgICAgIGlmICghcHJvcHMub3JpZ2luLmdldExvYWRCYWxhbmNlcigpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFQ1MgY29tcHV0ZSBtdXN0IGhhdmUgYSBsb2FkIGJhbGFuY2VyIGZvciBDRE4gb3JpZ2luLiBcIiArXG4gICAgICAgICAgICAgIFwiRW5hYmxlIGxvYWRCYWxhbmNlciBpbiB5b3VyIEVDUyBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhQ29tcHV0ZShwcm9wcy5vcmlnaW4pKSB7XG4gICAgICAgIGlmICghcHJvcHMub3JpZ2luLmdldEZ1bmN0aW9uVXJsKCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkxhbWJkYSBjb21wdXRlIG11c3QgaGF2ZSBhIGZ1bmN0aW9uIFVSTCBmb3IgQ0ROIG9yaWdpbi4gXCIgK1xuICAgICAgICAgICAgICBcIkVuYWJsZSBmdW5jdGlvblVybCBpbiB5b3VyIExhbWJkYSBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdXN0IGJlIEVDMlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFQzIgY29tcHV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIENETiBvcmlnaW4uIFwiICtcbiAgICAgICAgICAgIFwiVXNlIEVDUyB3aXRoIGxvYWQgYmFsYW5jZXIgb3IgTGFtYmRhIHdpdGggZnVuY3Rpb24gVVJMLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ0ROIHdyYXBwZXIgY2xhc3MgdGhhdCBleHRlbmRzIENsb3VkRnJvbnREaXN0cmlidXRpb24gd2l0aCBGamFsbCBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGNsYXNzIENkbiBleHRlbmRzIENsb3VkRnJvbnREaXN0cmlidXRpb24gaW1wbGVtZW50cyBJQ2RuIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElDZG5Qcm9wcykge1xuICAgIGNvbnN0IHJlc29sdmVkUHJvcHMgPSBDZG4ucmVzb2x2ZVByb3BzKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcmVzb2x2ZWRQcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBJQ2RuUHJvcHMgdG8gQ2xvdWRGcm9udERpc3RyaWJ1dGlvblByb3BzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZVByb3BzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUNkblByb3BzXG4gICk6IENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyB7XG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbiA9IENkbi5yZXNvbHZlRGVmYXVsdE9yaWdpbihwcm9wcyk7XG4gICAgY29uc3QgYmVoYXZpb3VycyA9IENkbi5yZXNvbHZlQmVoYXZpb3Vycyhwcm9wcy5iZWhhdmlvdXJzKTtcblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID1cbiAgICAgIHByb3BzLmNlcnRpZmljYXRlID8/XG4gICAgICAocHJvcHMuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgPyBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGAke2lkfUNlcnRpZmljYXRlYCxcbiAgICAgICAgICAgIHByb3BzLmNlcnRpZmljYXRlQXJuXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVmYXVsdE9yaWdpbixcbiAgICAgIGRlZmF1bHRDYWNoZVBvbGljeTogcHJvcHMuY2FjaGVQb2xpY3ksXG4gICAgICBkZWZhdWx0QWxsb3dlZE1ldGhvZHM6IHByb3BzLmRlZmF1bHRBbGxvd2VkTWV0aG9kcyxcbiAgICAgIGJlaGF2aW91cnMsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICBlbmFibGVMb2dnaW5nOiBwcm9wcy5lbmFibGVMb2dnaW5nLFxuICAgICAgbG9nQnVja2V0OiBwcm9wcy5sb2dCdWNrZXQsXG4gICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHByb3BzLmZvcndhcmRIb3N0SGVhZGVyLFxuICAgICAgYWNjZXNzR2F0ZTogcHJvcHMuYWNjZXNzR2F0ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHNtYXJ0IGJlaGF2aW91cnMgdG8gQ2RuQmVoYXZpb3VyIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlQmVoYXZpb3VycyhcbiAgICBiZWhhdmlvdXJzPzogU21hcnRDZG5CZWhhdmlvdXJbXVxuICApOiBDZG5CZWhhdmlvdXJbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFiZWhhdmlvdXJzIHx8IGJlaGF2aW91cnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBiZWhhdmlvdXJzLm1hcCgoYmVoYXZpb3VyKSA9PiAoe1xuICAgICAgcGF0aFBhdHRlcm46IGJlaGF2aW91ci5wYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbjogQ2RuLmRldGVjdE9yaWdpbkZyb21SZXNvdXJjZShiZWhhdmlvdXIub3JpZ2luKSxcbiAgICAgIGNhY2hlUG9saWN5OiBiZWhhdmlvdXIuY2FjaGVQb2xpY3ksXG4gICAgICBhbGxvd2VkTWV0aG9kczogYmVoYXZpb3VyLmFsbG93ZWRNZXRob2RzXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGRlZmF1bHQgb3JpZ2luIGZyb20gSUNkblByb3BzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZURlZmF1bHRPcmlnaW4ocHJvcHM6IElDZG5Qcm9wcyk6IENkbk9yaWdpbkNvbmZpZyB7XG4gICAgc3dpdGNoIChwcm9wcy5vcmlnaW5UeXBlKSB7XG4gICAgICBjYXNlIFwiczNcIjoge1xuICAgICAgICBjb25zdCBidWNrZXQgPSBpc1N0b3JhZ2UocHJvcHMuYnVja2V0KVxuICAgICAgICAgID8gcHJvcHMuYnVja2V0LmdldEJ1Y2tldCgpXG4gICAgICAgICAgOiBwcm9wcy5idWNrZXQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzM1wiLFxuICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICBvcmlnaW5QYXRoOiBwcm9wcy5vcmlnaW5QYXRoXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCJhbGJcIjoge1xuICAgICAgICBsZXQgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gICAgICAgIGlmIChpc0NvbXB1dGUocHJvcHMubG9hZEJhbGFuY2VyKSkge1xuICAgICAgICAgIGlmIChpc0Vjc0NvbXB1dGUocHJvcHMubG9hZEJhbGFuY2VyKSkge1xuICAgICAgICAgICAgY29uc3QgbGIgPSBwcm9wcy5sb2FkQmFsYW5jZXIuZ2V0TG9hZEJhbGFuY2VyKCk7XG4gICAgICAgICAgICBpZiAoIWxiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNvbXB1dGUgcmVzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIGxvYWQgYmFsYW5jZXIuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiRW5zdXJlIEVDUyBjb21wdXRlIGhhcyBsb2FkQmFsYW5jZXIgZW5hYmxlZCBmb3IgQ0ROIG9yaWdpbi5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9hZEJhbGFuY2VyID0gbGI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJPbmx5IEVDUyBjb21wdXRlIHdpdGggbG9hZCBiYWxhbmNlciBpcyBzdXBwb3J0ZWQgZm9yIEFMQiBvcmlnaW4uIFwiICtcbiAgICAgICAgICAgICAgICBcIkxhbWJkYSBhbmQgRUMyIGNvbXB1dGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvYWRCYWxhbmNlciA9IHByb3BzLmxvYWRCYWxhbmNlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxiXCIsXG4gICAgICAgICAgbG9hZEJhbGFuY2VyLFxuICAgICAgICAgIHByb3RvY29sUG9saWN5OiBwcm9wcy5wcm90b2NvbFBvbGljeVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwiaHR0cFwiOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiaHR0cFwiLFxuICAgICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgICAgb3JpZ2luUGF0aDogcHJvcHMub3JpZ2luUGF0aCxcbiAgICAgICAgICBwcm90b2NvbFBvbGljeTogcHJvcHMucHJvdG9jb2xQb2xpY3lcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSBcImF1dG9cIjpcbiAgICAgICAgcmV0dXJuIENkbi5kZXRlY3RPcmlnaW5Gcm9tUmVzb3VyY2UocHJvcHMub3JpZ2luKTtcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBDRE4gb3JpZ2luIHR5cGU6ICR7KHByb3BzIGFzIElDZG5Qcm9wcykub3JpZ2luVHlwZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tZGV0ZWN0IG9yaWdpbiBjb25maWd1cmF0aW9uIGZyb20gYSBGamFsbCByZXNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRldGVjdE9yaWdpbkZyb21SZXNvdXJjZShcbiAgICByZXNvdXJjZTogU3RvcmFnZSB8IEFueUNvbXB1dGUgfCBzdHJpbmdcbiAgKTogQ2RuT3JpZ2luQ29uZmlnIHtcbiAgICAvLyBTdHJpbmcg4oaSIEhUVFAgb3JpZ2luXG4gICAgaWYgKHR5cGVvZiByZXNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJodHRwXCIsXG4gICAgICAgIGRvbWFpbk5hbWU6IHJlc291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFN0b3JhZ2Ug4oaSIFMzIG9yaWdpblxuICAgIGlmIChpc1N0b3JhZ2UocmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInMzXCIsXG4gICAgICAgIGJ1Y2tldDogcmVzb3VyY2UuZ2V0QnVja2V0KClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNTIENvbXB1dGUg4oaSIEFMQiBvcmlnaW5cbiAgICBpZiAoaXNFY3NDb21wdXRlKHJlc291cmNlKSkge1xuICAgICAgY29uc3QgbG9hZEJhbGFuY2VyID0gcmVzb3VyY2UuZ2V0TG9hZEJhbGFuY2VyKCk7XG4gICAgICBpZiAobG9hZEJhbGFuY2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGJcIixcbiAgICAgICAgICBsb2FkQmFsYW5jZXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYW1iZGEgQ29tcHV0ZSDihpIgSFRUUCBvcmlnaW4gKGZ1bmN0aW9uIFVSTClcbiAgICBpZiAoaXNMYW1iZGFDb21wdXRlKHJlc291cmNlKSkge1xuICAgICAgY29uc3QgZnVuY3Rpb25VcmwgPSByZXNvdXJjZS5nZXRGdW5jdGlvblVybCgpO1xuICAgICAgaWYgKGZ1bmN0aW9uVXJsKSB7XG4gICAgICAgIC8vIExhbWJkYSBmdW5jdGlvbiBVUkwgaXMgYW4gSFRUUCBvcmlnaW5cbiAgICAgICAgLy8gRXh0cmFjdCBkb21haW4gZnJvbSBVUkwgdG9rZW4gdXNpbmcgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljc1xuICAgICAgICAvLyBVUkwgZm9ybWF0OiBodHRwczovLzxkb21haW4+L1xuICAgICAgICAvLyBTcGxpdCBieSBcIi9cIiBnaXZlcyBbXCJodHRwczpcIiwgXCJcIiwgXCI8ZG9tYWluPlwiLCBcIlwiXVxuICAgICAgICAvLyBTZWxlY3QgaW5kZXggMiB0byBnZXQgdGhlIGRvbWFpblxuICAgICAgICBjb25zdCBkb21haW5OYW1lID0gRm4uc2VsZWN0KDIsIEZuLnNwbGl0KFwiL1wiLCBmdW5jdGlvblVybCkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiaHR0cFwiLFxuICAgICAgICAgIGRvbWFpbk5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5hYmxlIHRvIGRldGVjdCBDRE4gb3JpZ2luIGZyb20gcmVzb3VyY2U6ICR7dHlwZW9mIHJlc291cmNlfS4gYCArXG4gICAgICAgIFwiUHJvdmlkZSBleHBsaWNpdCBvcmlnaW4gY29uZmlndXJhdGlvbiB1c2luZyBvcmlnaW5UeXBlLlwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIENETiAoQ2xvdWRGcm9udCkgZGlzdHJpYnV0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUzMgb3JpZ2luXG4gKiBjb25zdCBhc3NldHMgPSBhcHAuYWRkU3RvcmFnZShTdG9yYWdlRmFjdG9yeS5idWlsZChcIkFzc2V0c1wiLCB7fSkpO1xuICogYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKFwiQXNzZXRzQ2RuXCIsIHtcbiAqICAgb3JpZ2luVHlwZTogXCJzM1wiLFxuICogICBidWNrZXQ6IGFzc2V0c1xuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBTEIgb3JpZ2luIChFQ1MpXG4gKiBjb25zdCBhcGkgPSBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkFwaVwiLCB7IHR5cGU6IFwiZWNzXCIsIC4uLiB9KSk7XG4gKiBhcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQoXCJBcGlDZG5cIiwge1xuICogICBvcmlnaW5UeXBlOiBcImFsYlwiLFxuICogICBsb2FkQmFsYW5jZXI6IGFwaVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTbWFydCBkZXRlY3Rpb25cbiAqIGFwcC5hZGRDZG4oQ2RuRmFjdG9yeS5idWlsZChcIkFwcENkblwiLCB7XG4gKiAgIG9yaWdpblR5cGU6IFwiYXV0b1wiLFxuICogICBvcmlnaW46IGFzc2V0c1xuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gZG9tYWluXG4gKiBhcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQoXCJBcHBDZG5cIiwge1xuICogICBvcmlnaW5UeXBlOiBcInMzXCIsXG4gKiAgIGJ1Y2tldDogYXNzZXRzLFxuICogICBkb21haW5OYW1lczogW1wiYXBwLmV4YW1wbGUuY29tXCJdLFxuICogICBjZXJ0aWZpY2F0ZTogbXlDZXJ0XG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDZG5GYWN0b3J5IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgQ0ROIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgQ0ROXG4gICAqIEBwYXJhbSBwcm9wcyAtIENETiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIENETiB3aGVuIGludm9rZWRcbiAgICovXG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNkblByb3BzKSB7XG4gICAgcmV0dXJuIChfYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBDZG4gPT4ge1xuICAgICAgdmFsaWRhdGVDZG5Qcm9wcyhwcm9wcyk7XG4gICAgICByZXR1cm4gbmV3IENkbihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { Runtime } from "aws-cdk-lib/aws-lambda";
2
2
  import { type Construct } from "constructs";
3
3
  import { type IEcsCompute, type ILambdaCompute, type IEc2Compute, type AnyCompute, isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./interfaces/compute.js";
4
- import type App from "../../app";
4
+ import type App from "../../app.js";
5
5
  import { EcsCompute, type EcsComputeProps, type EcsServiceConfig, type EcsContainerConfig, type EcsScalingConfig, type EcsClusterConfig, type EcsRoutingConfig, type EcsCapacityProviderConfig, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, type EcsCapacityProvider, type Ec2CapacityConfig, validateEcsProps, buildContainerConfigs, type ResolvedScalingConfig, resolveScalingConfig } from "./computeEcs.js";
6
6
  import { LambdaCompute, type LambdaComputeProps, type ContainerLambdaProps, type CodeLambdaProps, type FunctionUrlConfig, type ResolvedLambdaDeployment, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode, type FunctionUrlCorsOptions } from "./computeLambda.js";
7
7
  import { Ec2Compute, type Ec2ComputeProps, type SshConfig } from "./computeEc2.js";
@@ -1,32 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isEc2Compute = exports.isLambdaCompute = exports.isEcsCompute = exports.isCompute = exports.ComputeFactory = exports.COMPUTE_DEFAULTS = exports.COMPUTE_TYPE_CONFIG = exports.Ec2Compute = exports.InvokeMode = exports.HttpMethod = exports.Architecture = exports.resolveLambdaDeployment = exports.LambdaCompute = exports.resolveScalingConfig = exports.buildContainerConfigs = exports.validateEcsProps = exports.ScalingType = exports.getEcsCapacityProviderConfig = exports.ECS_CAPACITY_PROVIDER_CONFIG = exports.EcsCompute = void 0;
4
- exports.getComputeTypeConfig = getComputeTypeConfig;
5
- const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
- const compute_js_1 = require("./interfaces/compute.js");
7
- Object.defineProperty(exports, "isCompute", { enumerable: true, get: function () { return compute_js_1.isCompute; } });
8
- Object.defineProperty(exports, "isEcsCompute", { enumerable: true, get: function () { return compute_js_1.isEcsCompute; } });
9
- Object.defineProperty(exports, "isLambdaCompute", { enumerable: true, get: function () { return compute_js_1.isLambdaCompute; } });
10
- Object.defineProperty(exports, "isEc2Compute", { enumerable: true, get: function () { return compute_js_1.isEc2Compute; } });
11
- const validationLogger_js_1 = require("../../utils/validationLogger.js");
1
+ import { Runtime } from "aws-cdk-lib/aws-lambda";
2
+ import { isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./interfaces/compute.js";
3
+ import { warnIfPropertiesIgnored } from "../../utils/validationLogger.js";
12
4
  // Import and re-export from per-pattern files
13
- const computeEcs_js_1 = require("./computeEcs.js");
14
- Object.defineProperty(exports, "EcsCompute", { enumerable: true, get: function () { return computeEcs_js_1.EcsCompute; } });
15
- Object.defineProperty(exports, "ECS_CAPACITY_PROVIDER_CONFIG", { enumerable: true, get: function () { return computeEcs_js_1.ECS_CAPACITY_PROVIDER_CONFIG; } });
16
- Object.defineProperty(exports, "getEcsCapacityProviderConfig", { enumerable: true, get: function () { return computeEcs_js_1.getEcsCapacityProviderConfig; } });
17
- Object.defineProperty(exports, "ScalingType", { enumerable: true, get: function () { return computeEcs_js_1.ScalingType; } });
18
- Object.defineProperty(exports, "validateEcsProps", { enumerable: true, get: function () { return computeEcs_js_1.validateEcsProps; } });
19
- Object.defineProperty(exports, "buildContainerConfigs", { enumerable: true, get: function () { return computeEcs_js_1.buildContainerConfigs; } });
20
- Object.defineProperty(exports, "resolveScalingConfig", { enumerable: true, get: function () { return computeEcs_js_1.resolveScalingConfig; } });
21
- const computeLambda_js_1 = require("./computeLambda.js");
22
- Object.defineProperty(exports, "LambdaCompute", { enumerable: true, get: function () { return computeLambda_js_1.LambdaCompute; } });
23
- Object.defineProperty(exports, "resolveLambdaDeployment", { enumerable: true, get: function () { return computeLambda_js_1.resolveLambdaDeployment; } });
24
- Object.defineProperty(exports, "Architecture", { enumerable: true, get: function () { return computeLambda_js_1.Architecture; } });
25
- Object.defineProperty(exports, "HttpMethod", { enumerable: true, get: function () { return computeLambda_js_1.HttpMethod; } });
26
- Object.defineProperty(exports, "InvokeMode", { enumerable: true, get: function () { return computeLambda_js_1.InvokeMode; } });
27
- const computeEc2_js_1 = require("./computeEc2.js");
28
- Object.defineProperty(exports, "Ec2Compute", { enumerable: true, get: function () { return computeEc2_js_1.Ec2Compute; } });
29
- exports.COMPUTE_TYPE_CONFIG = {
5
+ import { EcsCompute, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, validateEcsProps, buildContainerConfigs, resolveScalingConfig } from "./computeEcs.js";
6
+ import { LambdaCompute, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode } from "./computeLambda.js";
7
+ import { Ec2Compute } from "./computeEc2.js";
8
+ // Re-export everything from per-pattern files
9
+ export {
10
+ // ECS
11
+ EcsCompute, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, validateEcsProps, buildContainerConfigs, resolveScalingConfig,
12
+ // Lambda
13
+ LambdaCompute, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode,
14
+ // EC2
15
+ Ec2Compute };
16
+ export const COMPUTE_TYPE_CONFIG = {
30
17
  ecs: {
31
18
  defaultPort: 80,
32
19
  defaultScaling: { minCapacity: 2, maxCapacity: 5 },
@@ -47,7 +34,7 @@ exports.COMPUTE_TYPE_CONFIG = {
47
34
  * Default values for compute resource configuration.
48
35
  * Centralised constants to ensure consistency across the codebase.
49
36
  */
50
- exports.COMPUTE_DEFAULTS = {
37
+ export const COMPUTE_DEFAULTS = {
51
38
  EC2: {
52
39
  INSTANCE_TYPE: "t4g.micro",
53
40
  MIN_CAPACITY: 1,
@@ -61,12 +48,12 @@ exports.COMPUTE_DEFAULTS = {
61
48
  },
62
49
  LAMBDA: {
63
50
  HANDLER: "index.handler",
64
- RUNTIME: aws_lambda_1.Runtime.NODEJS_22_X,
65
- ARCHITECTURE: computeLambda_js_1.Architecture.ARM_64
51
+ RUNTIME: Runtime.NODEJS_22_X,
52
+ ARCHITECTURE: Architecture.ARM_64
66
53
  }
67
54
  };
68
- function getComputeTypeConfig(type) {
69
- return exports.COMPUTE_TYPE_CONFIG[type];
55
+ export function getComputeTypeConfig(type) {
56
+ return COMPUTE_TYPE_CONFIG[type];
70
57
  }
71
58
  /**
72
59
  * Validates compute props and logs warnings for ignored or misconfigured options.
@@ -75,14 +62,14 @@ function getComputeTypeConfig(type) {
75
62
  */
76
63
  function validateComputeProps(props) {
77
64
  // ECS-specific options on non-ECS compute
78
- (0, validationLogger_js_1.warnIfPropertiesIgnored)(props, ["capacityProvider", "ec2Config", "services", "cluster"], "ecs", "ECS compute");
65
+ warnIfPropertiesIgnored(props, ["capacityProvider", "ec2Config", "services", "cluster"], "ecs", "ECS compute");
79
66
  // Lambda-specific options on non-Lambda compute
80
- (0, validationLogger_js_1.warnIfPropertiesIgnored)(props, ["functionUrl", "handler", "runtime"], "lambda", "Lambda compute");
67
+ warnIfPropertiesIgnored(props, ["functionUrl", "handler", "runtime"], "lambda", "Lambda compute");
81
68
  // EC2-specific options on non-EC2 compute
82
- (0, validationLogger_js_1.warnIfPropertiesIgnored)(props, ["ssh", "userData", "machineImage"], "ec2", "EC2 compute");
69
+ warnIfPropertiesIgnored(props, ["ssh", "userData", "machineImage"], "ec2", "EC2 compute");
83
70
  // ECS-specific validation - type narrowing handled by discriminated union
84
71
  if (props.type === "ecs") {
85
- (0, computeEcs_js_1.validateEcsProps)(props);
72
+ validateEcsProps(props);
86
73
  }
87
74
  }
88
75
  /**
@@ -117,13 +104,13 @@ function validateComputeProps(props) {
117
104
  * }));
118
105
  * ec2.getAutoScalingGroup(); // Available on Ec2Compute
119
106
  */
120
- class ComputeFactory {
107
+ export class ComputeFactory {
121
108
  // Implementation signature
122
109
  static build(id, props) {
123
110
  return (app, scope) => {
124
111
  validateComputeProps(props);
125
112
  // Auto-derive appName from App instance for ECS compute
126
- const typeConfig = exports.COMPUTE_TYPE_CONFIG[props.type];
113
+ const typeConfig = COMPUTE_TYPE_CONFIG[props.type];
127
114
  const needsVpc = typeConfig.requiresVpc ||
128
115
  ("connections" in props &&
129
116
  Array.isArray(props.connections) &&
@@ -184,7 +171,7 @@ class ComputeFactory {
184
171
  `/${appName}/${clusterName}/${service.name}`;
185
172
  collector.addService(manifestService);
186
173
  }
187
- return new computeEcs_js_1.EcsCompute(scope, id, computeProps);
174
+ return new EcsCompute(scope, id, computeProps);
188
175
  }
189
176
  case "lambda": {
190
177
  // Add appName to props for Lambda (needed for secrets path derivation)
@@ -206,10 +193,10 @@ class ComputeFactory {
206
193
  manifestLambda.secrets = lambdaComputeProps.secrets;
207
194
  }
208
195
  collector.addLambda(manifestLambda);
209
- return new computeLambda_js_1.LambdaCompute(scope, id, lambdaComputeProps);
196
+ return new LambdaCompute(scope, id, lambdaComputeProps);
210
197
  }
211
198
  case "ec2":
212
- return new computeEc2_js_1.Ec2Compute(scope, id, computeProps);
199
+ return new Ec2Compute(scope, id, computeProps);
213
200
  default: {
214
201
  const _exhaustive = computeProps;
215
202
  throw new Error(`Unsupported compute type: ${String(_exhaustive.type)}`);
@@ -218,5 +205,5 @@ class ComputeFactory {
218
205
  };
219
206
  }
220
207
  }
221
- exports.ComputeFactory = ComputeFactory;
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSkEsb0RBRUM7QUFqS0QsdURBQWlEO0FBSWpELHdEQVNpQztBQWlYeEIsMEZBclhQLHNCQUFTLE9BcVhPO0FBQUUsNkZBcFhsQix5QkFBWSxPQW9Ya0I7QUFBRSxnR0FuWGhDLDRCQUFlLE9BbVhnQztBQUFFLDZGQWxYakQseUJBQVksT0FrWGlEO0FBaFgvRCx5RUFBMEU7QUFRMUUsOENBQThDO0FBQzlDLG1EQWtCeUI7QUF5QnZCLDJGQTFDQSwwQkFBVSxPQTBDQTtBQVFWLDZHQTFDQSw0Q0FBNEIsT0EwQ0E7QUFDNUIsNkdBMUNBLDRDQUE0QixPQTBDQTtBQUM1Qiw0RkExQ0EsMkJBQVcsT0EwQ0E7QUFHWCxpR0ExQ0EsZ0NBQWdCLE9BMENBO0FBQ2hCLHNHQTFDQSxxQ0FBcUIsT0EwQ0E7QUFFckIscUdBMUNBLG9DQUFvQixPQTBDQTtBQXZDdEIseURBWTRCO0FBNkIxQiw4RkF4Q0EsZ0NBQWEsT0F3Q0E7QUFNYix3R0F4Q0EsMENBQXVCLE9Bd0NBO0FBQ3ZCLDZGQXhDQSwrQkFBWSxPQXdDQTtBQUNaLDJGQXhDQSw2QkFBVSxPQXdDQTtBQUNWLDJGQXhDQSw2QkFBVSxPQXdDQTtBQXBDWixtREFJeUI7QUFtQ3ZCLDJGQXRDQSwwQkFBVSxPQXNDQTtBQXNCQyxRQUFBLG1CQUFtQixHQUEyQztJQUN6RSxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxXQUFXLEVBQUUsSUFBSTtLQUNsQjtJQUNELEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUs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QUFDLGNBQWM7NEJBQ2pDLElBQUksa0JBQWtCLENBQUMsT0FBTyxXQUFXLEVBQUUsRUFBRTtxQkFDaEQsQ0FBQztvQkFDRixJQUNFLGtCQUFrQixDQUFDLE9BQU87d0JBQzFCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNyQyxDQUFDO3dCQUNELGNBQWMsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO29CQUN0RCxDQUFDO29CQUNELFNBQVMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBRXBDLE9BQU8sSUFBSSxnQ0FBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxLQUFLLEtBQUs7b0JBQ1IsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixNQUFNLFdBQVcsR0FBVSxZQUFZLENBQUM7b0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkJBQTZCLE1BQU0sQ0FBRSxXQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQzNFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExSUQsd0NBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHtcbiAgdHlwZSBJRWNzQ29tcHV0ZSxcbiAgdHlwZSBJTGFtYmRhQ29tcHV0ZSxcbiAgdHlwZSBJRWMyQ29tcHV0ZSxcbiAgdHlwZSBBbnlDb21wdXRlLFxuICBpc0NvbXB1dGUsXG4gIGlzRWNzQ29tcHV0ZSxcbiAgaXNMYW1iZGFDb21wdXRlLFxuICBpc0VjMkNvbXB1dGVcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb21wdXRlLmpzXCI7XG5pbXBvcnQgeyB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZCB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIE1hbmlmZXN0U2VydmljZSxcbiAgdHlwZSBNYW5pZmVzdExhbWJkYVxufSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuLy8gSW1wb3J0IGFuZCByZS1leHBvcnQgZnJvbSBwZXItcGF0dGVybiBmaWxlc1xuaW1wb3J0IHtcbiAgRWNzQ29tcHV0ZSxcbiAgdHlwZSBFY3NDb21wdXRlUHJvcHMsXG4gIHR5cGUgRWNzU2VydmljZUNvbmZpZyxcbiAgdHlwZSBFY3NDb250YWluZXJDb25maWcsXG4gIHR5cGUgRWNzU2NhbGluZ0NvbmZpZyxcbiAgdHlwZSBFY3NDbHVzdGVyQ29uZmlnLFxuICB0eXBlIEVjc1JvdXRpbmdDb25maWcsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJRyxcbiAgZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgdHlwZSBFYzJDYXBhY2l0eUNvbmZpZyxcbiAgdmFsaWRhdGVFY3NQcm9wcyxcbiAgYnVpbGRDb250YWluZXJDb25maWdzLFxuICB0eXBlIFJlc29sdmVkU2NhbGluZ0NvbmZpZyxcbiAgcmVzb2x2ZVNjYWxpbmdDb25maWdcbn0gZnJvbSBcIi4vY29tcHV0ZUVjcy5qc1wiO1xuXG5pbXBvcnQge1xuICBMYW1iZGFDb21wdXRlLFxuICB0eXBlIExhbWJkYUNvbXB1dGVQcm9wcyxcbiAgdHlwZSBDb250YWluZXJMYW1iZGFQcm9wcyxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHMsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb25maWcsXG4gIHR5cGUgUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50LFxuICByZXNvbHZlTGFtYmRhRGVwbG95bWVudCxcbiAgQXJjaGl0ZWN0dXJlLFxuICBIdHRwTWV0aG9kLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnNcbn0gZnJvbSBcIi4vY29tcHV0ZUxhbWJkYS5qc1wiO1xuXG5pbXBvcnQge1xuICBFYzJDb21wdXRlLFxuICB0eXBlIEVjMkNvbXB1dGVQcm9wcyxcbiAgdHlwZSBTc2hDb25maWdcbn0gZnJvbSBcIi4vY29tcHV0ZUVjMi5qc1wiO1xuXG4vLyBSZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHBlci1wYXR0ZXJuIGZpbGVzXG5leHBvcnQge1xuICAvLyBFQ1NcbiAgRWNzQ29tcHV0ZSxcbiAgdHlwZSBFY3NDb21wdXRlUHJvcHMsXG4gIHR5cGUgRWNzU2VydmljZUNvbmZpZyxcbiAgdHlwZSBFY3NDb250YWluZXJDb25maWcsXG4gIHR5cGUgRWNzU2NhbGluZ0NvbmZpZyxcbiAgdHlwZSBFY3NDbHVzdGVyQ29uZmlnLFxuICB0eXBlIEVjc1JvdXRpbmdDb25maWcsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJRyxcbiAgZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgdHlwZSBFYzJDYXBhY2l0eUNvbmZpZyxcbiAgdmFsaWRhdGVFY3NQcm9wcyxcbiAgYnVpbGRDb250YWluZXJDb25maWdzLFxuICB0eXBlIFJlc29sdmVkU2NhbGluZ0NvbmZpZyxcbiAgcmVzb2x2ZVNjYWxpbmdDb25maWcsXG4gIC8vIExhbWJkYVxuICBMYW1iZGFDb21wdXRlLFxuICB0eXBlIExhbWJkYUNvbXB1dGVQcm9wcyxcbiAgdHlwZSBDb250YWluZXJMYW1iZGFQcm9wcyxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHMsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb25maWcsXG4gIHR5cGUgUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50LFxuICByZXNvbHZlTGFtYmRhRGVwbG95bWVudCxcbiAgQXJjaGl0ZWN0dXJlLFxuICBIdHRwTWV0aG9kLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIC8vIEVDMlxuICBFYzJDb21wdXRlLFxuICB0eXBlIEVjMkNvbXB1dGVQcm9wcyxcbiAgdHlwZSBTc2hDb25maWdcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVUeXBlID0gXCJlY3NcIiB8IFwiZWMyXCIgfCBcImxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgLyoqIERlZmF1bHQgcG9ydCBmb3IgdGhlIGNvbXB1dGUgdHlwZS4gRUNTOiA4MCwgRUMyOiAyMiwgTGFtYmRhOiAwIChubyBwb3J0KSAqL1xuICBkZWZhdWx0UG9ydDogbnVtYmVyO1xuICAvKiogRGVmYXVsdCBzY2FsaW5nIGxpbWl0cyAqL1xuICBkZWZhdWx0U2NhbGluZzoge1xuICAgIG1pbkNhcGFjaXR5OiBudW1iZXI7XG4gICAgbWF4Q2FwYWNpdHk6IG51bWJlcjtcbiAgfTtcbiAgLyoqIFdoZXRoZXIgdGhpcyBjb21wdXRlIHR5cGUgcmVxdWlyZXMgYSBWUEMgKi9cbiAgcmVxdWlyZXNWcGM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBDT01QVVRFX1RZUEVfQ09ORklHOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENvbXB1dGVUeXBlQ29uZmlnPiA9IHtcbiAgZWNzOiB7XG4gICAgZGVmYXVsdFBvcnQ6IDgwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAyLCBtYXhDYXBhY2l0eTogNSB9LFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICByZXF1aXJlc1ZwYzogdHJ1ZVxuICB9LFxuICBsYW1iZGE6IHtcbiAgICBkZWZhdWx0UG9ydDogMCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMCwgbWF4Q2FwYWNpdHk6IDEwMCB9LFxuICAgIHJlcXVpcmVzVnBjOiBmYWxzZVxuICB9XG59O1xuXG4vKipcbiAqIERlZmF1bHQgdmFsdWVzIGZvciBjb21wdXRlIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBDZW50cmFsaXNlZCBjb25zdGFudHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY29kZWJhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QVVRFX0RFRkFVTFRTID0ge1xuICBFQzI6IHtcbiAgICBJTlNUQU5DRV9UWVBFOiBcInQ0Zy5taWNyb1wiLFxuICAgIE1JTl9DQVBBQ0lUWTogMSxcbiAgICBNQVhfQ0FQQUNJVFk6IDFcbiAgfSxcbiAgRUNTOiB7XG4gICAgLyoqIEFXUyBzYW1wbGUgaW1hZ2UgdXNlZCB3aGVuIG5vIEVDUiByZXBvc2l0b3J5IGlzIHByb3ZpZGVkICovXG4gICAgRkFMTEJBQ0tfSU1BR0U6IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgLyoqIERlZmF1bHQgdGFnIGZvciBFQ1IgaW1hZ2VzICovXG4gICAgSU1BR0VfVEFHOiBcImxhdGVzdFwiXG4gIH0sXG4gIExBTUJEQToge1xuICAgIEhBTkRMRVI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgIFJVTlRJTUU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgQVJDSElURUNUVVJFOiBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gIH1cbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZUNvbmZpZyh0eXBlOiBDb21wdXRlVHlwZSk6IENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgcmV0dXJuIENPTVBVVEVfVFlQRV9DT05GSUdbdHlwZV07XG59XG5cbi8vIFR5cGUtc2FmZSBwcm9wcyB3aXRoIGxpdGVyYWwgZGlzY3JpbWluYXRvcnMgZm9yIGZhY3Rvcnkgb3ZlcmxvYWRzXG5leHBvcnQgdHlwZSBJRWNzQ29tcHV0ZVByb3BzID0gRWNzQ29tcHV0ZVByb3BzO1xuZXhwb3J0IHR5cGUgSUxhbWJkYUNvbXB1dGVQcm9wcyA9IExhbWJkYUNvbXB1dGVQcm9wcztcbmV4cG9ydCB0eXBlIElFYzJDb21wdXRlUHJvcHMgPSBFYzJDb21wdXRlUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IElFY3NDb21wdXRlUHJvcHNcbiAgfCBJTGFtYmRhQ29tcHV0ZVByb3BzXG4gIHwgSUVjMkNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBFQ1Mtc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUNTIGNvbXB1dGVcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wiY2FwYWNpdHlQcm92aWRlclwiLCBcImVjMkNvbmZpZ1wiLCBcInNlcnZpY2VzXCIsIFwiY2x1c3RlclwiXSxcbiAgICBcImVjc1wiLFxuICAgIFwiRUNTIGNvbXB1dGVcIlxuICApO1xuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJmdW5jdGlvblVybFwiLCBcImhhbmRsZXJcIiwgXCJydW50aW1lXCJdLFxuICAgIFwibGFtYmRhXCIsXG4gICAgXCJMYW1iZGEgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gRUMyLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDMiBjb21wdXRlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInNzaFwiLCBcInVzZXJEYXRhXCIsIFwibWFjaGluZUltYWdlXCJdLFxuICAgIFwiZWMyXCIsXG4gICAgXCJFQzIgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gRUNTLXNwZWNpZmljIHZhbGlkYXRpb24gLSB0eXBlIG5hcnJvd2luZyBoYW5kbGVkIGJ5IGRpc2NyaW1pbmF0ZWQgdW5pb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiZWNzXCIpIHtcbiAgICB2YWxpZGF0ZUVjc1Byb3BzKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIGNvbXB1dGUgcmVzb3VyY2VzIHdpdGggdHlwZS1zYWZlIHJldHVybiB0eXBlcy5cbiAqXG4gKiBUaGUgZmFjdG9yeSB1c2VzIG92ZXJsb2FkcyB0byBpbmZlciB0aGUgc3BlY2lmaWMgY29tcHV0ZSB0eXBlIGZyb20gcHJvcHMsXG4gKiBlbnN1cmluZyBUeXBlU2NyaXB0IHByb3ZpZGVzIG9ubHkgdGhlIHJlbGV2YW50IG1ldGhvZHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFQ1MgY29tcHV0ZSAtIHJldHVybnMgRWNzQ29tcHV0ZSB3aXRoIEVDUy1zcGVjaWZpYyBtZXRob2RzXG4gKiBjb25zdCBlY3MgPSBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKiBlY3MuZ2V0TG9hZEJhbGFuY2VyKCk7IC8vIEF2YWlsYWJsZSBvbiBFY3NDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExhbWJkYSBjb21wdXRlIC0gcmV0dXJucyBMYW1iZGFDb21wdXRlIHdpdGggTGFtYmRhLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGxhbWJkYSA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiRm5cIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKVxuICogfSkpO1xuICogbGFtYmRhLmdldEZ1bmN0aW9uVXJsKCk7IC8vIEF2YWlsYWJsZSBvbiBMYW1iZGFDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVDMiBjb21wdXRlIC0gcmV0dXJucyBFYzJDb21wdXRlIHdpdGggRUMyLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGVjMiA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiSW5zdGFuY2VcIiwge1xuICogICB0eXBlOiBcImVjMlwiLFxuICogICBpbnN0YW5jZVR5cGU6IFwidDRnLm1pY3JvXCJcbiAqIH0pKTtcbiAqIGVjMi5nZXRBdXRvU2NhbGluZ0dyb3VwKCk7IC8vIEF2YWlsYWJsZSBvbiBFYzJDb21wdXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIC8vIE92ZXJsb2FkOiBFQ1MgcHJvcHMgcmV0dXJucyBFY3NDb21wdXRlXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRWNzQ29tcHV0ZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gRWNzQ29tcHV0ZTtcbiAgLy8gT3ZlcmxvYWQ6IExhbWJkYSBwcm9wcyByZXR1cm5zIExhbWJkYUNvbXB1dGVcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElMYW1iZGFDb21wdXRlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBMYW1iZGFDb21wdXRlO1xuICAvLyBPdmVybG9hZDogRUMyIHByb3BzIHJldHVybnMgRWMyQ29tcHV0ZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUVjMkNvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEVjMkNvbXB1dGU7XG4gIC8vIEltcGxlbWVudGF0aW9uIHNpZ25hdHVyZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUNvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueUNvbXB1dGUge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBBbnlDb21wdXRlID0+IHtcbiAgICAgIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzKTtcblxuICAgICAgLy8gQXV0by1kZXJpdmUgYXBwTmFtZSBmcm9tIEFwcCBpbnN0YW5jZSBmb3IgRUNTIGNvbXB1dGVcbiAgICAgIGNvbnN0IHR5cGVDb25maWcgPSBDT01QVVRFX1RZUEVfQ09ORklHW3Byb3BzLnR5cGVdO1xuICAgICAgY29uc3QgbmVlZHNWcGMgPVxuICAgICAgICB0eXBlQ29uZmlnLnJlcXVpcmVzVnBjIHx8XG4gICAgICAgIChcImNvbm5lY3Rpb25zXCIgaW4gcHJvcHMgJiZcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHByb3BzLmNvbm5lY3Rpb25zKSAmJlxuICAgICAgICAgIHByb3BzLmNvbm5lY3Rpb25zLmxlbmd0aCA+IDApO1xuICAgICAgbGV0IGNvbXB1dGVQcm9wczogSUNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogbmVlZHNWcGMgPyBhcHAuZ2V0VnBjKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuXG4gICAgICBpZiAoY29tcHV0ZVByb3BzLnR5cGUgPT09IFwiZWNzXCIpIHtcbiAgICAgICAgY29tcHV0ZVByb3BzID0ge1xuICAgICAgICAgIC4uLmNvbXB1dGVQcm9wcyxcbiAgICAgICAgICBhcHBOYW1lOiBjb21wdXRlUHJvcHMuYXBwTmFtZSA/PyBhcHAuZ2V0TmFtZSgpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBzcGVjaWZpYyBjb21wdXRlIGNsYXNzIGJhc2VkIG9uIHR5cGUgZGlzY3JpbWluYXRvclxuICAgICAgc3dpdGNoIChjb21wdXRlUHJvcHMudHlwZSkge1xuICAgICAgICBjYXNlIFwiZWNzXCI6IHtcbiAgICAgICAgICAvLyBSZWdpc3RlciBFQ1Mgc2VydmljZXMgd2l0aCBtYW5pZmVzdCBjb2xsZWN0b3IgZm9yIENMSSBkaXNjb3ZlcnlcbiAgICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBhcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKTtcbiAgICAgICAgICBjb25zdCBjbHVzdGVyTmFtZSA9IGlkO1xuICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb21wdXRlUHJvcHMuYXBwTmFtZSA/PyBhcHAuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIGNvbXB1dGVQcm9wcy5zZXJ2aWNlcykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2UubmFtZSxcbiAgICAgICAgICAgICAgY2x1c3Rlck5hbWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIEluY2x1ZGUgZG9ja2VyZmlsZVBhdGggaWYgc3BlY2lmaWVkIChtZXRhZGF0YSBmb3IgQ0xJKVxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZG9ja2VyZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLmRvY2tlcmZpbGVQYXRoID0gc2VydmljZS5kb2NrZXJmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5jbHVkZSBkb2NrZXJUYXJnZXQgaWYgc3BlY2lmaWVkIChtZXRhZGF0YSBmb3IgQ0xJKVxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZG9ja2VyVGFyZ2V0KSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5kb2NrZXJUYXJnZXQgPSBzZXJ2aWNlLmRvY2tlclRhcmdldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRmluZCBjb250YWluZXIgcG9ydCBmcm9tIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydFxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2l0aFBvcnQgPSBzZXJ2aWNlLmNvbnRhaW5lcnM/LmZpbmQoXG4gICAgICAgICAgICAgIChjKSA9PiBjLnBvcnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJXaXRoUG9ydD8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5jb250YWluZXJQb3J0ID0gY29udGFpbmVyV2l0aFBvcnQucG9ydDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWdncmVnYXRlIHNlY3JldHMgZnJvbSBhbGwgY29udGFpbmVycyAoZGVkdXBsaWNhdGVkKVxuICAgICAgICAgICAgY29uc3QgYWxsU2VjcmV0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2Ygc2VydmljZS5jb250YWluZXJzID8/IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChjb250YWluZXIuc2VjcmV0cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjcmV0IG9mIGNvbnRhaW5lci5zZWNyZXRzKSB7XG4gICAgICAgICAgICAgICAgICBhbGxTZWNyZXRzLmFkZChzZWNyZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbFNlY3JldHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLnNlY3JldHMgPSBBcnJheS5mcm9tKGFsbFNlY3JldHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbmNsdWRlIHNzbVNlY3JldHNQYXRoIChleHBsaWNpdCBvciBkZXJpdmVkKVxuICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLnNzbVNlY3JldHNQYXRoID1cbiAgICAgICAgICAgICAgc2VydmljZS5zc21TZWNyZXRzUGF0aCA/P1xuICAgICAgICAgICAgICBgLyR7YXBwTmFtZX0vJHtjbHVzdGVyTmFtZX0vJHtzZXJ2aWNlLm5hbWV9YDtcblxuICAgICAgICAgICAgY29sbGVjdG9yLmFkZFNlcnZpY2UobWFuaWZlc3RTZXJ2aWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBFY3NDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibGFtYmRhXCI6IHtcbiAgICAgICAgICAvLyBBZGQgYXBwTmFtZSB0byBwcm9wcyBmb3IgTGFtYmRhIChuZWVkZWQgZm9yIHNlY3JldHMgcGF0aCBkZXJpdmF0aW9uKVxuICAgICAgICAgIGNvbnN0IGxhbWJkYUNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmNvbXB1dGVQcm9wcyxcbiAgICAgICAgICAgIGFwcE5hbWU6IGFwcC5nZXROYW1lKClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQWx3YXlzIHJlZ2lzdGVyIExhbWJkYSB3aXRoIG1hbmlmZXN0IGNvbGxlY3RvciBmb3IgQ0xJIGRpc2NvdmVyeVxuICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyBhbGwgTGFtYmRhcyBhcmUgZGlzY292ZXJhYmxlIGZvciBzZWNyZXRzIG1hbmFnZW1lbnQsXG4gICAgICAgICAgLy8gZXZlbiB0aG9zZSB0aGF0IGRvbid0IGN1cnJlbnRseSBoYXZlIHNlY3JldHMgY29uZmlndXJlZFxuICAgICAgICAgIGNvbnN0IGNvbGxlY3RvciA9IGFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpO1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0TGFtYmRhOiBNYW5pZmVzdExhbWJkYSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGlkLFxuICAgICAgICAgICAgc3NtU2VjcmV0c1BhdGg6XG4gICAgICAgICAgICAgIGxhbWJkYUNvbXB1dGVQcm9wcy5zc21TZWNyZXRzUGF0aCB8fFxuICAgICAgICAgICAgICBgLyR7bGFtYmRhQ29tcHV0ZVByb3BzLmFwcE5hbWV9L2xhbWJkYS8ke2lkfWBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxhbWJkYUNvbXB1dGVQcm9wcy5zZWNyZXRzICYmXG4gICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc2VjcmV0cy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBtYW5pZmVzdExhbWJkYS5zZWNyZXRzID0gbGFtYmRhQ29tcHV0ZVByb3BzLnNlY3JldHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbGxlY3Rvci5hZGRMYW1iZGEobWFuaWZlc3RMYW1iZGEpO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBMYW1iZGFDb21wdXRlKHNjb3BlLCBpZCwgbGFtYmRhQ29tcHV0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZWMyXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBFYzJDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGNvbXB1dGVQcm9wcztcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVW5zdXBwb3J0ZWQgY29tcHV0ZSB0eXBlOiAke1N0cmluZygoX2V4aGF1c3RpdmUgYXMgSUNvbXB1dGVQcm9wcykudHlwZSl9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCB0eXBlIGd1YXJkcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IGlzQ29tcHV0ZSwgaXNFY3NDb21wdXRlLCBpc0xhbWJkYUNvbXB1dGUsIGlzRWMyQ29tcHV0ZSB9O1xuZXhwb3J0IHR5cGUgeyBJRWNzQ29tcHV0ZSwgSUxhbWJkYUNvbXB1dGUsIElFYzJDb21wdXRlLCBBbnlDb21wdXRlIH07XG4iXX0=
208
+ // Re-export type guards for convenience
209
+ export { isCompute, isEcsCompute, isLambdaCompute, isEc2Compute };
@@ -2,7 +2,7 @@ import { type Connections, type IVpc, type UserData, type IMachineImage, type IS
2
2
  import { type IAutoScalingGroup } from "aws-cdk-lib/aws-autoscaling";
3
3
  import { Construct } from "constructs";
4
4
  import { type IEc2Compute } from "./interfaces/compute.js";
5
- import { Ec2Instance } from "../../resources/aws/compute/ec2";
5
+ import { Ec2Instance } from "../../resources/aws/compute/ec2.js";
6
6
  /**
7
7
  * SSH access configuration for EC2 instances.
8
8
  * - Omit: disabled (default)
@@ -1,30 +1,29 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Ec2Compute = void 0;
4
- const constructs_1 = require("constructs");
5
- const ec2_1 = require("../../resources/aws/compute/ec2");
6
- const compute_js_1 = require("./compute.js");
1
+ import { Construct } from "constructs";
2
+ import { Ec2Instance } from "../../resources/aws/compute/ec2.js";
3
+ import { COMPUTE_DEFAULTS } from "./compute.js";
7
4
  /**
8
5
  * EC2 compute wrapper implementing IEc2Compute.
9
6
  * Provides type-safe access to EC2-specific resources.
10
7
  */
11
- class Ec2Compute extends constructs_1.Construct {
8
+ export class Ec2Compute extends Construct {
9
+ computeType = "ec2";
10
+ connections;
11
+ ec2Instance;
12
12
  constructor(scope, id, props) {
13
13
  super(scope, id);
14
- this.computeType = "ec2";
15
14
  const enableSSH = props.ssh !== undefined && props.ssh !== false;
16
15
  const ec2Props = {
17
16
  serviceName: `${id}Service`,
18
- instanceType: props.instanceType || compute_js_1.COMPUTE_DEFAULTS.EC2.INSTANCE_TYPE,
17
+ instanceType: props.instanceType || COMPUTE_DEFAULTS.EC2.INSTANCE_TYPE,
19
18
  enableSSH,
20
19
  userData: props.userData,
21
20
  machineImage: props.machineImage,
22
- minCapacity: props.minCapacity || compute_js_1.COMPUTE_DEFAULTS.EC2.MIN_CAPACITY,
23
- maxCapacity: props.maxCapacity || compute_js_1.COMPUTE_DEFAULTS.EC2.MAX_CAPACITY,
21
+ minCapacity: props.minCapacity || COMPUTE_DEFAULTS.EC2.MIN_CAPACITY,
22
+ maxCapacity: props.maxCapacity || COMPUTE_DEFAULTS.EC2.MAX_CAPACITY,
24
23
  vpc: props.vpc,
25
24
  spotCapacityPercentage: props.spotCapacityPercentage
26
25
  };
27
- this.ec2Instance = new ec2_1.Ec2Instance(scope, `${id}Ec2`, ec2Props);
26
+ this.ec2Instance = new Ec2Instance(scope, `${id}Ec2`, ec2Props);
28
27
  this.connections = this.ec2Instance.connections;
29
28
  }
30
29
  /** Get the Auto Scaling Group. */
@@ -42,5 +41,3 @@ class Ec2Compute extends constructs_1.Construct {
42
41
  return this.ec2Instance;
43
42
  }
44
43
  }
45
- exports.Ec2Compute = Ec2Compute;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZUVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZUVjMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSwyQ0FBdUM7QUFJdkMseURBQThEO0FBRTlELDZDQUFnRDtBQWtEaEQ7OztHQUdHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFNdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTkgsZ0JBQVcsR0FBRyxLQUFjLENBQUM7UUFRM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7UUFFakUsTUFBTSxRQUFRLEdBQUc7WUFDZixXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7WUFDM0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWE7WUFDdEUsU0FBUztZQUNULFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2Qsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtTQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQTNDRCxnQ0EyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgVXNlckRhdGEsXG4gIHR5cGUgSU1hY2hpbmVJbWFnZSxcbiAgdHlwZSBJU2VjdXJpdHlHcm91cFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBJQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgdHlwZSBJRWMyQ29tcHV0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY29tcHV0ZS5qc1wiO1xuXG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5cbmltcG9ydCB7IENPTVBVVEVfREVGQVVMVFMgfSBmcm9tIFwiLi9jb21wdXRlLmpzXCI7XG5cbi8qKlxuICogU1NIIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBFQzIgaW5zdGFuY2VzLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGF1dG8tZ2VuZXJhdGVkIGtleVxuICogLSBgeyBrZXlOYW1lOiBcIm15LWtleVwiIH1gOiBlbmFibGVkIHdpdGggZXhpc3Rpbmcga2V5XG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2hDb25maWcge1xuICAvKiogU1NIIGtleSBwYWlyIG5hbWUgKi9cbiAga2V5TmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgQ0lEUiBibG9ja3MgZm9yIFNTSCBhY2Nlc3MgKi9cbiAgYWxsb3dlZENpZHJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcbiAgdnBjPzogSVZwYztcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDRnLm1pY3JvXCIgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTU0ggYWNjZXNzIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgc3NoPzogU3NoQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBVc2VyIGRhdGEgc2NyaXB0ICovXG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIC8qKiBNYWNoaW5lIGltYWdlIChBTUkpICovXG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXJjZW50YWdlIG9mIGNhcGFjaXR5IHRvIHJ1biBvbiBTcG90IGluc3RhbmNlcyAoMC0xMDApLlxuICAgKiAtIE9taXQgb3IgMDogQWxsIE9uLURlbWFuZCBpbnN0YW5jZXMgKGRlZmF1bHQpXG4gICAqIC0gMTAwOiBBbGwgU3BvdCBpbnN0YW5jZXNcbiAgICogLSA1MDogSGFsZiBTcG90LCBoYWxmIE9uLURlbWFuZFxuICAgKlxuICAgKiBTcG90IGluc3RhbmNlcyBjYW4gcmVkdWNlIGNvc3RzIGJ5IHVwIHRvIDkwJSBidXQgbWF5IGJlIGludGVycnVwdGVkLlxuICAgKiBVc2UgZm9yIGZhdWx0LXRvbGVyYW50IHdvcmtsb2Fkcy5cbiAgICovXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRUMyIGNvbXB1dGUgd3JhcHBlciBpbXBsZW1lbnRpbmcgSUVjMkNvbXB1dGUuXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIEVDMi1zcGVjaWZpYyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFYzJDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUVjMkNvbXB1dGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZVR5cGUgPSBcImVjMlwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWMySW5zdGFuY2U6IEVjMkluc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5hYmxlU1NIID0gcHJvcHMuc3NoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuc3NoICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IGVjMlByb3BzID0ge1xuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUgfHwgQ09NUFVURV9ERUZBVUxUUy5FQzIuSU5TVEFOQ0VfVFlQRSxcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IENPTVBVVEVfREVGQVVMVFMuRUMyLk1JTl9DQVBBQ0lUWSxcbiAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5tYXhDYXBhY2l0eSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDMi5NQVhfQ0FQQUNJVFksXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2VcbiAgICB9O1xuXG4gICAgdGhpcy5lYzJJbnN0YW5jZSA9IG5ldyBFYzJJbnN0YW5jZShzY29wZSwgYCR7aWR9RWMyYCwgZWMyUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmVjMkluc3RhbmNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgQXV0byBTY2FsaW5nIEdyb3VwLiAqL1xuICBnZXRBdXRvU2NhbGluZ0dyb3VwKCk6IElBdXRvU2NhbGluZ0dyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZS5nZXRBdXRvU2NhbGluZ0dyb3VwKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBzZWN1cml0eSBncm91cC4gKi9cbiAgZ2V0U2VjdXJpdHlHcm91cCgpOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZWMySW5zdGFuY2UuYXNnU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgRUMyIGluc3RhbmNlIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldEVjMkluc3RhbmNlKCk6IEVjMkluc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZTtcbiAgfVxufVxuIl19
@@ -4,10 +4,12 @@ import { type Connections, type IVpc, type ISecurityGroup } from "aws-cdk-lib/aw
4
4
  import { type PolicyDocument, type IManagedPolicy, type IGrantable, Grant } from "aws-cdk-lib/aws-iam";
5
5
  import { type IApplicationLoadBalancer, type ApplicationListener } from "aws-cdk-lib/aws-elasticloadbalancingv2";
6
6
  import { Construct } from "constructs";
7
+ import type { ITopic } from "aws-cdk-lib/aws-sns";
7
8
  import { type IEcsCompute } from "./interfaces/compute.js";
8
9
  import { type ConnectionSpec } from "./interfaces/connector.js";
9
- import EcsCluster, { type EcsClusterProps, ScalingType, type DomainConfig, type EcsCapacityProvider, type Ec2CapacityConfig } from "../../resources/aws/compute/ecs";
10
- import { type SecretImport } from "../../resources/aws/secrets";
10
+ import EcsCluster, { type EcsClusterProps, ScalingType, type DomainConfig, type EcsCapacityProvider, type Ec2CapacityConfig } from "../../resources/aws/compute/ecs.js";
11
+ import type { EcsServiceAlarmThresholds } from "../../resources/aws/monitoring/index.js";
12
+ import { type SecretImport } from "../../resources/aws/secrets/index.js";
11
13
  export { ScalingType };
12
14
  export type { EcsCapacityProvider, Ec2CapacityConfig };
13
15
  /**
@@ -316,6 +318,13 @@ export interface EcsServiceConfig {
316
318
  * ssmSecretsPath: "/custom/path/to/secrets"
317
319
  */
318
320
  ssmSecretsPath?: string;
321
+ /**
322
+ * Per-service alarm configuration.
323
+ * - undefined: use defaults (CPU, memory, running tasks, 5xx if ALB)
324
+ * - false: disable alarms for this service
325
+ * - object: override specific thresholds
326
+ */
327
+ alarms?: EcsServiceAlarmThresholds | false;
319
328
  }
320
329
  /**
321
330
  * ECS compute configuration.
@@ -383,6 +392,13 @@ export interface EcsComputeProps {
383
392
  * not used during CDK synthesis.
384
393
  */
385
394
  dockerfilePath?: string;
395
+ /**
396
+ * SNS topic for alarm notifications. Resolved to ITopic and passed to EcsCluster.
397
+ * Accepts either an ITopic directly or a topic ARN string (resolved internally).
398
+ */
399
+ alertsTopic?: ITopic | string;
400
+ /** Application ID for alarm tagging (used by webhook to map alarms to applications). */
401
+ applicationId?: string;
386
402
  }
387
403
  /**
388
404
  * Validates ECS-specific props.