@aws-cdk/toolkit-lib 0.3.2 → 0.3.4

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 (392) hide show
  1. package/api-extractor.json +3 -0
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/index.d.ts +1 -1
  5. package/lib/actions/bootstrap/index.js +5 -5
  6. package/lib/actions/bootstrap/private/helpers.js +3 -3
  7. package/lib/actions/deploy/index.d.ts +1 -1
  8. package/lib/actions/deploy/index.js +1 -1
  9. package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
  10. package/lib/actions/deploy/private/deploy-options.js +1 -1
  11. package/lib/actions/deploy/private/helpers.d.ts +3 -2
  12. package/lib/actions/deploy/private/helpers.js +3 -3
  13. package/lib/actions/diff/index.d.ts +1 -1
  14. package/lib/actions/diff/index.js +1 -1
  15. package/lib/actions/diff/private/helpers.d.ts +5 -9
  16. package/lib/actions/diff/private/helpers.js +13 -30
  17. package/lib/actions/refactor/index.d.ts +12 -0
  18. package/lib/actions/refactor/index.js +1 -1
  19. package/lib/api/aws-auth/account-cache.d.ts +41 -0
  20. package/lib/api/aws-auth/account-cache.js +108 -0
  21. package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
  22. package/lib/api/aws-auth/awscli-compatible.js +250 -0
  23. package/lib/api/aws-auth/cached.d.ts +11 -0
  24. package/lib/api/aws-auth/cached.js +26 -0
  25. package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
  26. package/lib/api/aws-auth/credential-plugins.js +154 -0
  27. package/lib/api/aws-auth/private/index.d.ts +11 -0
  28. package/lib/api/aws-auth/private/index.js +37 -0
  29. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  30. package/lib/api/aws-auth/provider-caching.js +24 -0
  31. package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
  32. package/lib/api/aws-auth/proxy-agent.js +54 -0
  33. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  34. package/lib/api/aws-auth/sdk-logger.js +128 -0
  35. package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
  36. package/lib/api/aws-auth/sdk-provider.js +373 -0
  37. package/lib/api/aws-auth/sdk.d.ts +235 -0
  38. package/lib/api/aws-auth/sdk.js +391 -0
  39. package/lib/api/aws-auth/tracing.d.ts +11 -0
  40. package/lib/api/aws-auth/tracing.js +60 -0
  41. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  42. package/lib/api/aws-auth/user-agent.js +20 -0
  43. package/lib/api/aws-auth/util.d.ts +6 -0
  44. package/lib/api/aws-auth/util.js +21 -0
  45. package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
  46. package/lib/api/bootstrap/bootstrap-environment.js +323 -0
  47. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  48. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  49. package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
  50. package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
  51. package/lib/api/bootstrap/index.d.ts +3 -0
  52. package/lib/api/bootstrap/index.js +23 -0
  53. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  54. package/lib/api/bootstrap/legacy-template.js +82 -0
  55. package/lib/api/cloud-assembly/environment.d.ts +43 -0
  56. package/lib/api/cloud-assembly/environment.js +127 -0
  57. package/lib/api/cloud-assembly/index.d.ts +1 -1
  58. package/lib/api/cloud-assembly/index.js +5 -4
  59. package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
  60. package/lib/api/cloud-assembly/private/context-aware-source.js +7 -7
  61. package/lib/api/cloud-assembly/private/exec.js +3 -3
  62. package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
  63. package/lib/api/cloud-assembly/private/prepare-source.js +17 -15
  64. package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
  65. package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
  66. package/lib/api/cloud-assembly/private/source-builder.d.ts +10 -8
  67. package/lib/api/cloud-assembly/private/source-builder.js +43 -24
  68. package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
  69. package/lib/api/cloud-assembly/private/stack-assembly.js +16 -15
  70. package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
  71. package/lib/api/cloud-assembly/source-builder.js +1 -1
  72. package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
  73. package/lib/api/cloud-assembly/stack-assembly.js +139 -0
  74. package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
  75. package/lib/api/cloud-assembly/stack-collection.js +112 -0
  76. package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
  77. package/lib/api/cloud-assembly/stack-selector.js +62 -5
  78. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
  79. package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
  80. package/lib/api/cloudformation/index.d.ts +4 -0
  81. package/lib/api/cloudformation/index.js +21 -0
  82. package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
  83. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  84. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  85. package/lib/api/cloudformation/stack-helpers.js +163 -0
  86. package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
  87. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  88. package/lib/api/context.d.ts +40 -0
  89. package/lib/api/context.js +84 -0
  90. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  91. package/lib/api/deployments/asset-manifest-builder.js +33 -0
  92. package/lib/api/deployments/asset-publishing.d.ts +60 -0
  93. package/lib/api/deployments/asset-publishing.js +144 -0
  94. package/lib/api/deployments/assets.d.ts +11 -0
  95. package/lib/api/deployments/assets.js +108 -0
  96. package/lib/api/deployments/cfn-api.d.ts +145 -0
  97. package/lib/api/deployments/cfn-api.js +444 -0
  98. package/lib/api/deployments/checks.d.ts +9 -0
  99. package/lib/api/deployments/checks.js +72 -0
  100. package/lib/api/deployments/deploy-stack.d.ts +164 -0
  101. package/lib/api/deployments/deploy-stack.js +490 -0
  102. package/lib/api/deployments/deployment-method.d.ts +24 -0
  103. package/lib/api/deployments/deployment-method.js +3 -0
  104. package/lib/api/deployments/deployment-result.d.ts +21 -0
  105. package/lib/api/deployments/deployment-result.js +10 -0
  106. package/lib/api/deployments/deployments.d.ts +289 -0
  107. package/lib/api/deployments/deployments.js +355 -0
  108. package/lib/api/deployments/index.d.ts +6 -0
  109. package/lib/api/deployments/index.js +27 -0
  110. package/lib/api/diff/diff-formatter.d.ts +147 -0
  111. package/lib/api/diff/diff-formatter.js +225 -0
  112. package/lib/api/diff/index.d.ts +1 -0
  113. package/lib/api/diff/index.js +18 -0
  114. package/lib/api/environment/environment-access.d.ts +139 -0
  115. package/lib/api/environment/environment-access.js +205 -0
  116. package/lib/api/environment/environment-resources.d.ts +75 -0
  117. package/lib/api/environment/environment-resources.js +213 -0
  118. package/lib/api/environment/index.d.ts +3 -0
  119. package/lib/api/environment/index.js +20 -0
  120. package/lib/api/environment/placeholders.d.ts +10 -0
  121. package/lib/api/environment/placeholders.js +23 -0
  122. package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
  123. package/lib/api/garbage-collection/garbage-collector.js +614 -0
  124. package/lib/api/garbage-collection/index.d.ts +3 -0
  125. package/lib/api/garbage-collection/index.js +21 -0
  126. package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
  127. package/lib/api/garbage-collection/progress-printer.js +80 -0
  128. package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
  129. package/lib/api/garbage-collection/stack-refresh.js +152 -0
  130. package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
  131. package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
  132. package/lib/api/hotswap/code-build-projects.d.ts +4 -0
  133. package/lib/api/hotswap/code-build-projects.js +62 -0
  134. package/lib/api/hotswap/common.d.ts +89 -0
  135. package/lib/api/hotswap/common.js +137 -0
  136. package/lib/api/hotswap/ecs-services.d.ts +4 -0
  137. package/lib/api/hotswap/ecs-services.js +159 -0
  138. package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
  139. package/lib/api/hotswap/hotswap-deployments.js +441 -0
  140. package/lib/api/hotswap/index.d.ts +2 -0
  141. package/lib/api/hotswap/index.js +19 -0
  142. package/lib/api/hotswap/lambda-functions.d.ts +4 -0
  143. package/lib/api/hotswap/lambda-functions.js +297 -0
  144. package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
  145. package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
  146. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
  147. package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
  148. package/lib/api/index.d.ts +24 -0
  149. package/lib/api/index.js +41 -0
  150. package/lib/api/io/index.d.ts +3 -1
  151. package/lib/api/io/index.js +18 -1
  152. package/lib/api/io/io-host.d.ts +15 -0
  153. package/lib/api/io/io-host.js +3 -0
  154. package/lib/api/io/io-message.d.ts +76 -0
  155. package/lib/api/io/io-message.js +3 -0
  156. package/lib/api/io/private/index.d.ts +7 -1
  157. package/lib/api/io/private/index.js +8 -5
  158. package/lib/api/io/private/io-default-messages.d.ts +21 -0
  159. package/lib/api/io/private/io-default-messages.js +59 -0
  160. package/lib/api/io/private/io-helper.d.ts +32 -0
  161. package/lib/api/io/private/io-helper.js +51 -0
  162. package/lib/api/io/private/level-priority.d.ts +11 -0
  163. package/lib/api/io/private/level-priority.js +33 -0
  164. package/lib/api/io/private/message-maker.d.ts +89 -0
  165. package/lib/api/io/private/message-maker.js +60 -0
  166. package/lib/api/io/private/messages.d.ts +178 -0
  167. package/lib/api/io/private/messages.js +534 -0
  168. package/lib/api/io/private/sdk-logger.d.ts +1 -1
  169. package/lib/api/io/private/sdk-logger.js +6 -6
  170. package/lib/api/io/private/span.d.ts +93 -0
  171. package/lib/api/io/private/span.js +87 -0
  172. package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
  173. package/lib/api/io/private/testing/fake-io-host.js +41 -0
  174. package/lib/api/io/private/testing/index.d.ts +2 -0
  175. package/lib/api/io/private/testing/index.js +19 -0
  176. package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
  177. package/lib/api/io/private/testing/test-io-host.js +61 -0
  178. package/lib/api/io/private/types.d.ts +4 -0
  179. package/lib/api/io/private/types.js +3 -0
  180. package/lib/api/io/toolkit-action.d.ts +4 -0
  181. package/lib/api/io/toolkit-action.js +3 -0
  182. package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
  183. package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
  184. package/lib/api/logs-monitor/index.d.ts +2 -0
  185. package/lib/api/logs-monitor/index.js +19 -0
  186. package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
  187. package/lib/api/logs-monitor/logs-monitor.js +194 -0
  188. package/lib/api/notices/cached-data-source.d.ts +13 -0
  189. package/lib/api/notices/cached-data-source.js +77 -0
  190. package/lib/api/notices/filter.d.ts +59 -0
  191. package/lib/api/notices/filter.js +189 -0
  192. package/lib/api/notices/index.d.ts +1 -0
  193. package/lib/api/notices/index.js +18 -0
  194. package/lib/api/notices/notices.d.ts +111 -0
  195. package/lib/api/notices/notices.js +131 -0
  196. package/lib/api/notices/types.d.ts +37 -0
  197. package/lib/api/notices/types.js +3 -0
  198. package/lib/api/notices/web-data-source.d.ts +9 -0
  199. package/lib/api/notices/web-data-source.js +70 -0
  200. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  201. package/lib/api/plugin/context-provider-plugin.js +7 -0
  202. package/lib/api/plugin/index.d.ts +3 -0
  203. package/lib/api/plugin/index.js +20 -0
  204. package/lib/api/plugin/mode.d.ts +4 -0
  205. package/lib/api/plugin/mode.js +9 -0
  206. package/lib/api/plugin/plugin.d.ts +70 -0
  207. package/lib/api/plugin/plugin.js +127 -0
  208. package/lib/api/private.d.ts +1 -0
  209. package/lib/api/private.js +18 -0
  210. package/lib/api/refactoring/cloudformation.d.ts +38 -0
  211. package/lib/api/refactoring/cloudformation.js +56 -0
  212. package/lib/api/refactoring/digest.d.ts +26 -0
  213. package/lib/api/refactoring/digest.js +175 -0
  214. package/lib/api/refactoring/exclude.d.ts +29 -0
  215. package/lib/api/refactoring/exclude.js +94 -0
  216. package/lib/api/refactoring/index.d.ts +32 -0
  217. package/lib/api/refactoring/index.js +191 -0
  218. package/lib/api/require-approval.d.ts +17 -0
  219. package/lib/api/require-approval.js +22 -0
  220. package/lib/api/resource-import/importer.d.ts +216 -0
  221. package/lib/api/resource-import/importer.js +331 -0
  222. package/lib/api/resource-import/index.d.ts +2 -0
  223. package/lib/api/resource-import/index.js +19 -0
  224. package/lib/api/resource-import/migrator.d.ts +26 -0
  225. package/lib/api/resource-import/migrator.js +73 -0
  226. package/lib/api/resource-metadata/index.d.ts +1 -0
  227. package/lib/api/resource-metadata/index.js +18 -0
  228. package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
  229. package/lib/api/resource-metadata/resource-metadata.js +42 -0
  230. package/lib/api/rwlock.d.ts +60 -0
  231. package/lib/api/rwlock.js +204 -0
  232. package/lib/api/settings.d.ts +26 -0
  233. package/lib/api/settings.js +107 -0
  234. package/lib/api/shared-private.d.ts +8 -6
  235. package/lib/api/shared-private.js +31 -12561
  236. package/lib/api/stack-events/index.d.ts +4 -0
  237. package/lib/api/stack-events/index.js +23 -0
  238. package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
  239. package/lib/api/stack-events/stack-activity-monitor.js +164 -0
  240. package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
  241. package/lib/api/stack-events/stack-event-poller.js +130 -0
  242. package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
  243. package/lib/api/stack-events/stack-progress-monitor.js +98 -0
  244. package/lib/api/stack-events/stack-status.d.ts +42 -0
  245. package/lib/api/stack-events/stack-status.js +90 -0
  246. package/lib/api/streams.d.ts +7 -0
  247. package/lib/api/streams.js +24 -0
  248. package/lib/api/tags.d.ts +9 -0
  249. package/lib/api/tags.js +10 -0
  250. package/lib/api/toolkit-info.d.ts +52 -0
  251. package/lib/api/toolkit-info.js +157 -0
  252. package/lib/api/tree.d.ts +31 -0
  253. package/lib/api/tree.js +37 -0
  254. package/lib/api/work-graph/index.d.ts +3 -0
  255. package/lib/api/work-graph/index.js +20 -0
  256. package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
  257. package/lib/api/work-graph/work-graph-builder.js +172 -0
  258. package/lib/api/work-graph/work-graph-types.d.ts +50 -0
  259. package/lib/api/work-graph/work-graph-types.js +13 -0
  260. package/lib/api/work-graph/work-graph.d.ts +72 -0
  261. package/lib/api/work-graph/work-graph.js +349 -0
  262. package/lib/context-providers/ami.d.ts +13 -0
  263. package/lib/context-providers/ami.js +52 -0
  264. package/lib/context-providers/availability-zones.d.ts +13 -0
  265. package/lib/context-providers/availability-zones.js +29 -0
  266. package/lib/context-providers/cc-api-provider.d.ts +30 -0
  267. package/lib/context-providers/cc-api-provider.js +145 -0
  268. package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
  269. package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
  270. package/lib/context-providers/hosted-zones.d.ts +12 -0
  271. package/lib/context-providers/hosted-zones.js +69 -0
  272. package/lib/context-providers/index.d.ts +44 -0
  273. package/lib/context-providers/index.js +128 -0
  274. package/lib/context-providers/keys.d.ts +13 -0
  275. package/lib/context-providers/keys.js +54 -0
  276. package/lib/context-providers/load-balancers.d.ts +20 -0
  277. package/lib/context-providers/load-balancers.js +161 -0
  278. package/lib/context-providers/security-groups.d.ts +9 -0
  279. package/lib/context-providers/security-groups.js +69 -0
  280. package/lib/context-providers/ssm-parameters.d.ts +25 -0
  281. package/lib/context-providers/ssm-parameters.js +61 -0
  282. package/lib/context-providers/vpcs.d.ts +13 -0
  283. package/lib/context-providers/vpcs.js +291 -0
  284. package/lib/index.d.ts +4 -1
  285. package/lib/index.js +5 -2
  286. package/lib/index_bg.wasm +0 -0
  287. package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
  288. package/lib/payloads/bootstrap-environment-progress.js +3 -0
  289. package/lib/payloads/context.d.ts +9 -0
  290. package/lib/payloads/context.js +3 -0
  291. package/lib/payloads/deploy.d.ts +50 -0
  292. package/lib/payloads/deploy.js +3 -0
  293. package/lib/payloads/destroy.d.ts +23 -0
  294. package/lib/payloads/destroy.js +3 -0
  295. package/lib/payloads/diff.d.ts +31 -0
  296. package/lib/payloads/diff.js +22 -0
  297. package/lib/payloads/hotswap.d.ts +212 -0
  298. package/lib/payloads/hotswap.js +43 -0
  299. package/lib/payloads/index.d.ts +17 -0
  300. package/lib/payloads/index.js +34 -0
  301. package/lib/payloads/list.d.ts +4 -0
  302. package/lib/payloads/list.js +3 -0
  303. package/lib/payloads/logs-monitor.d.ts +33 -0
  304. package/lib/payloads/logs-monitor.js +3 -0
  305. package/lib/payloads/progress.d.ts +14 -0
  306. package/lib/payloads/progress.js +3 -0
  307. package/lib/payloads/refactor.d.ts +14 -0
  308. package/lib/payloads/refactor.js +3 -0
  309. package/lib/payloads/rollback.d.ts +17 -0
  310. package/lib/payloads/rollback.js +3 -0
  311. package/lib/payloads/sdk-trace.d.ts +20 -0
  312. package/lib/payloads/sdk-trace.js +3 -0
  313. package/lib/payloads/stack-activity.d.ts +53 -0
  314. package/lib/payloads/stack-activity.js +3 -0
  315. package/lib/payloads/stack-details.d.ts +17 -0
  316. package/lib/payloads/stack-details.js +3 -0
  317. package/lib/payloads/synth.d.ts +7 -0
  318. package/lib/payloads/synth.js +3 -0
  319. package/lib/payloads/types.d.ts +95 -0
  320. package/lib/payloads/types.js +3 -0
  321. package/lib/payloads/watch.d.ts +27 -0
  322. package/lib/payloads/watch.js +3 -0
  323. package/lib/private/activity-printer/base.d.ts +50 -0
  324. package/lib/private/activity-printer/base.js +120 -0
  325. package/lib/private/activity-printer/current.d.ts +26 -0
  326. package/lib/private/activity-printer/current.js +122 -0
  327. package/lib/private/activity-printer/display.d.ts +13 -0
  328. package/lib/private/activity-printer/display.js +81 -0
  329. package/lib/private/activity-printer/history.d.ts +32 -0
  330. package/lib/private/activity-printer/history.js +109 -0
  331. package/lib/private/activity-printer/index.d.ts +3 -0
  332. package/lib/private/activity-printer/index.js +20 -0
  333. package/lib/private/index.d.ts +1 -0
  334. package/lib/private/index.js +18 -0
  335. package/lib/toolkit/non-interactive-io-host.js +5 -4
  336. package/lib/toolkit/private/index.d.ts +2 -1
  337. package/lib/toolkit/private/index.js +1 -1
  338. package/lib/toolkit/toolkit-error.d.ts +86 -0
  339. package/lib/toolkit/toolkit-error.js +132 -0
  340. package/lib/toolkit/toolkit.d.ts +2 -2
  341. package/lib/toolkit/toolkit.js +161 -130
  342. package/lib/toolkit/types.d.ts +0 -55
  343. package/lib/toolkit/types.js +1 -1
  344. package/lib/util/archive.d.ts +1 -0
  345. package/lib/util/archive.js +86 -0
  346. package/lib/util/arrays.d.ts +14 -0
  347. package/lib/util/arrays.js +36 -0
  348. package/lib/util/bool.d.ts +7 -0
  349. package/lib/util/bool.js +13 -0
  350. package/lib/util/bytes.d.ts +8 -0
  351. package/lib/util/bytes.js +21 -0
  352. package/lib/util/cloudformation.d.ts +16 -0
  353. package/lib/util/cloudformation.js +36 -0
  354. package/lib/util/content-hash.d.ts +5 -0
  355. package/lib/util/content-hash.js +43 -0
  356. package/lib/util/directories.d.ts +22 -0
  357. package/lib/util/directories.js +59 -0
  358. package/lib/util/format-error.d.ts +9 -0
  359. package/lib/util/format-error.js +22 -0
  360. package/lib/util/index.d.ts +19 -0
  361. package/lib/util/index.js +36 -0
  362. package/lib/util/json.d.ts +48 -0
  363. package/lib/util/json.js +68 -0
  364. package/lib/util/net.d.ts +9 -0
  365. package/lib/util/net.js +60 -0
  366. package/lib/util/objects.d.ts +65 -0
  367. package/lib/util/objects.js +230 -0
  368. package/lib/util/package-info.d.ts +3 -0
  369. package/lib/util/package-info.js +22 -0
  370. package/lib/util/parallel.d.ts +6 -0
  371. package/lib/util/parallel.js +48 -0
  372. package/lib/util/serialize.d.ts +27 -0
  373. package/lib/util/serialize.js +86 -0
  374. package/lib/util/string-manipulation.d.ts +18 -0
  375. package/lib/util/string-manipulation.js +46 -0
  376. package/lib/util/type-brands.d.ts +39 -0
  377. package/lib/util/type-brands.js +39 -0
  378. package/lib/util/types.d.ts +27 -0
  379. package/lib/util/types.js +25 -0
  380. package/lib/util/version-range.d.ts +2 -0
  381. package/lib/util/version-range.js +36 -0
  382. package/lib/util/yaml-cfn.d.ts +15 -0
  383. package/lib/util/yaml-cfn.js +58 -0
  384. package/package.json +26 -28
  385. package/tsdoc.json +15 -0
  386. package/lib/api/shared-private.js.map +0 -7
  387. package/lib/api/shared-public.d.ts +0 -2159
  388. package/lib/api/shared-public.js +0 -1110
  389. package/lib/api/shared-public.js.map +0 -7
  390. package/lib/private/util.d.ts +0 -1
  391. package/lib/private/util.js +0 -787
  392. package/lib/private/util.js.map +0 -7
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CcApiContextProviderPlugin = void 0;
4
+ const client_cloudcontrol_1 = require("@aws-sdk/client-cloudcontrol");
5
+ const private_1 = require("../api/aws-auth/private");
6
+ const toolkit_error_1 = require("../toolkit/toolkit-error");
7
+ const util_1 = require("../util");
8
+ class CcApiContextProviderPlugin {
9
+ aws;
10
+ constructor(aws) {
11
+ this.aws = aws;
12
+ }
13
+ /**
14
+ * This returns a data object with the value from CloudControl API result.
15
+ *
16
+ * See the documentation in the Cloud Assembly Schema for the semantics of
17
+ * each query parameter.
18
+ */
19
+ async getValue(args) {
20
+ // Validate input
21
+ if (args.exactIdentifier && args.propertyMatch) {
22
+ throw new toolkit_error_1.ContextProviderError(`Provider protocol error: specify either exactIdentifier or propertyMatch, but not both (got ${JSON.stringify(args)})`);
23
+ }
24
+ if (args.ignoreErrorOnMissingContext && args.dummyValue === undefined) {
25
+ throw new toolkit_error_1.ContextProviderError(`Provider protocol error: if ignoreErrorOnMissingContext is set, a dummyValue must be supplied (got ${JSON.stringify(args)})`);
26
+ }
27
+ if (args.dummyValue !== undefined && (!Array.isArray(args.dummyValue) || !args.dummyValue.every(isObject))) {
28
+ throw new toolkit_error_1.ContextProviderError(`Provider protocol error: dummyValue must be an array of objects (got ${JSON.stringify(args.dummyValue)})`);
29
+ }
30
+ // Do the lookup
31
+ const cloudControl = (await (0, private_1.initContextProviderSdk)(this.aws, args)).cloudControl();
32
+ try {
33
+ let resources;
34
+ if (args.exactIdentifier) {
35
+ // use getResource to get the exact indentifier
36
+ resources = await this.getResource(cloudControl, args.typeName, args.exactIdentifier);
37
+ }
38
+ else if (args.propertyMatch) {
39
+ // use listResource
40
+ resources = await this.listResources(cloudControl, args.typeName, args.propertyMatch, args.expectedMatchCount);
41
+ }
42
+ else {
43
+ throw new toolkit_error_1.ContextProviderError(`Provider protocol error: neither exactIdentifier nor propertyMatch is specified in ${JSON.stringify(args)}.`);
44
+ }
45
+ return resources.map((r) => (0, util_1.getResultObj)(r.properties, r.identifier, args.propertiesToReturn));
46
+ }
47
+ catch (err) {
48
+ if (err instanceof ZeroResourcesFoundError && args.ignoreErrorOnMissingContext) {
49
+ // We've already type-checked dummyValue.
50
+ return args.dummyValue;
51
+ }
52
+ throw err;
53
+ }
54
+ }
55
+ /**
56
+ * Calls getResource from CC API to get the resource.
57
+ * See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/get-resource.html
58
+ *
59
+ * Will always return exactly one resource, or fail.
60
+ */
61
+ async getResource(cc, typeName, exactIdentifier) {
62
+ try {
63
+ const result = await cc.getResource({
64
+ TypeName: typeName,
65
+ Identifier: exactIdentifier,
66
+ });
67
+ if (!result.ResourceDescription) {
68
+ throw new toolkit_error_1.ContextProviderError('Unexpected CloudControl API behavior: returned empty response');
69
+ }
70
+ return [foundResourceFromCcApi(result.ResourceDescription)];
71
+ }
72
+ catch (err) {
73
+ if (err instanceof client_cloudcontrol_1.ResourceNotFoundException || err.name === 'ResourceNotFoundException') {
74
+ throw new ZeroResourcesFoundError(`No resource of type ${typeName} with identifier: ${exactIdentifier}`);
75
+ }
76
+ if (!(err instanceof toolkit_error_1.ContextProviderError)) {
77
+ throw new toolkit_error_1.ContextProviderError(`Encountered CC API error while getting ${typeName} resource ${exactIdentifier}: ${err.message}`);
78
+ }
79
+ throw err;
80
+ }
81
+ }
82
+ /**
83
+ * Calls listResources from CC API to get the resources and apply args.propertyMatch to find the resources.
84
+ * See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/list-resources.html
85
+ *
86
+ * Will return 0 or more resources.
87
+ *
88
+ * Does not currently paginate through more than one result page.
89
+ */
90
+ async listResources(cc, typeName, propertyMatch, expectedMatchCount) {
91
+ try {
92
+ const result = await cc.listResources({
93
+ TypeName: typeName,
94
+ });
95
+ const found = (result.ResourceDescriptions ?? [])
96
+ .map(foundResourceFromCcApi)
97
+ .filter((r) => {
98
+ return Object.entries(propertyMatch).every(([propPath, expected]) => {
99
+ const actual = (0, util_1.findJsonValue)(r.properties, propPath);
100
+ return propertyMatchesFilter(actual, expected);
101
+ });
102
+ });
103
+ if ((expectedMatchCount === 'at-least-one' || expectedMatchCount === 'exactly-one') && found.length === 0) {
104
+ throw new ZeroResourcesFoundError(`Could not find any resources matching ${JSON.stringify(propertyMatch)}`);
105
+ }
106
+ if ((expectedMatchCount === 'at-most-one' || expectedMatchCount === 'exactly-one') && found.length > 1) {
107
+ throw new toolkit_error_1.ContextProviderError(`Found ${found.length} resources matching ${JSON.stringify(propertyMatch)}; please narrow the search criteria`);
108
+ }
109
+ return found;
110
+ }
111
+ catch (err) {
112
+ if (!(err instanceof toolkit_error_1.ContextProviderError) && !(err instanceof ZeroResourcesFoundError)) {
113
+ throw new toolkit_error_1.ContextProviderError(`Encountered CC API error while listing ${typeName} resources matching ${JSON.stringify(propertyMatch)}: ${err.message}`);
114
+ }
115
+ throw err;
116
+ }
117
+ }
118
+ }
119
+ exports.CcApiContextProviderPlugin = CcApiContextProviderPlugin;
120
+ /**
121
+ * Convert a CC API response object into a nicer object (parse the JSON)
122
+ */
123
+ function foundResourceFromCcApi(desc) {
124
+ return {
125
+ identifier: desc.Identifier ?? '*MISSING*',
126
+ properties: JSON.parse(desc.Properties ?? '{}'),
127
+ };
128
+ }
129
+ /**
130
+ * Whether the given property value matches the given filter
131
+ *
132
+ * For now we just check for strict equality, but we can implement pattern matching and fuzzy matching here later
133
+ */
134
+ function propertyMatchesFilter(actual, expected) {
135
+ return expected === actual;
136
+ }
137
+ function isObject(x) {
138
+ return typeof x === 'object' && x !== null && !Array.isArray(x);
139
+ }
140
+ /**
141
+ * A specific lookup failure indicating 0 resources found that can be recovered
142
+ */
143
+ class ZeroResourcesFoundError extends Error {
144
+ }
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtYXBpLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2MtYXBpLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHNFQUF5RTtBQUV6RSxxREFBaUU7QUFFakUsNERBQWdFO0FBQ2hFLGtDQUFzRDtBQUV0RCxNQUFhLDBCQUEwQjtJQUNSO0lBQTdCLFlBQTZCLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUF1QjtRQUMzQyxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksb0NBQW9CLENBQUMsK0ZBQStGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxzR0FBc0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEssQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyx3RUFBd0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdJLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsQ0FB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QUcsWUFBWSx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywwQ0FBMEMsUUFBUSx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMzSixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUhELGdFQTBIQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUF5QjtJQUN2RCxPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVztRQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLE1BQWUsRUFBRSxRQUFpQjtJQUMvRCxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQVU7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQVVEOztHQUVHO0FBQ0gsTUFBTSx1QkFBd0IsU0FBUSxLQUFLO0NBQzFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDY0FwaUNvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGVzY3JpcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB7IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkQ29udHJvbENsaWVudCwgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgeyBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuLi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IENvbnRleHRQcm92aWRlckVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZpbmRKc29uVmFsdWUsIGdldFJlc3VsdE9iaiB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2NBcGlDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBkYXRhIG9iamVjdCB3aXRoIHRoZSB2YWx1ZSBmcm9tIENsb3VkQ29udHJvbCBBUEkgcmVzdWx0LlxuICAgKlxuICAgKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIENsb3VkIEFzc2VtYmx5IFNjaGVtYSBmb3IgdGhlIHNlbWFudGljcyBvZlxuICAgKiBlYWNoIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBDY0FwaUNvbnRleHRRdWVyeSkge1xuICAgIC8vIFZhbGlkYXRlIGlucHV0XG4gICAgaWYgKGFyZ3MuZXhhY3RJZGVudGlmaWVyICYmIGFyZ3MucHJvcGVydHlNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBQcm92aWRlciBwcm90b2NvbCBlcnJvcjogc3BlY2lmeSBlaXRoZXIgZXhhY3RJZGVudGlmaWVyIG9yIHByb3BlcnR5TWF0Y2gsIGJ1dCBub3QgYm90aCAoZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9KWApO1xuICAgIH1cbiAgICBpZiAoYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQgJiYgYXJncy5kdW1teVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGlmIGlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCBpcyBzZXQsIGEgZHVtbXlWYWx1ZSBtdXN0IGJlIHN1cHBsaWVkIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0pYCk7XG4gICAgfVxuICAgIGlmIChhcmdzLmR1bW15VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoYXJncy5kdW1teVZhbHVlKSB8fCAhYXJncy5kdW1teVZhbHVlLmV2ZXJ5KGlzT2JqZWN0KSkpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgUHJvdmlkZXIgcHJvdG9jb2wgZXJyb3I6IGR1bW15VmFsdWUgbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIChnb3QgJHtKU09OLnN0cmluZ2lmeShhcmdzLmR1bW15VmFsdWUpfSlgKTtcbiAgICB9XG5cbiAgICAvLyBEbyB0aGUgbG9va3VwXG4gICAgY29uc3QgY2xvdWRDb250cm9sID0gKGF3YWl0IGluaXRDb250ZXh0UHJvdmlkZXJTZGsodGhpcy5hd3MsIGFyZ3MpKS5jbG91ZENvbnRyb2woKTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzb3VyY2VzOiBGb3VuZFJlc291cmNlW107XG4gICAgICBpZiAoYXJncy5leGFjdElkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gdXNlIGdldFJlc291cmNlIHRvIGdldCB0aGUgZXhhY3QgaW5kZW50aWZpZXJcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXRSZXNvdXJjZShjbG91ZENvbnRyb2wsIGFyZ3MudHlwZU5hbWUsIGFyZ3MuZXhhY3RJZGVudGlmaWVyKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncy5wcm9wZXJ0eU1hdGNoKSB7XG4gICAgICAgIC8vIHVzZSBsaXN0UmVzb3VyY2VcbiAgICAgICAgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5saXN0UmVzb3VyY2VzKGNsb3VkQ29udHJvbCwgYXJncy50eXBlTmFtZSwgYXJncy5wcm9wZXJ0eU1hdGNoLCBhcmdzLmV4cGVjdGVkTWF0Y2hDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYFByb3ZpZGVyIHByb3RvY29sIGVycm9yOiBuZWl0aGVyIGV4YWN0SWRlbnRpZmllciBub3IgcHJvcGVydHlNYXRjaCBpcyBzcGVjaWZpZWQgaW4gJHtKU09OLnN0cmluZ2lmeShhcmdzKX0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvdXJjZXMubWFwKChyKSA9PiBnZXRSZXN1bHRPYmooci5wcm9wZXJ0aWVzLCByLmlkZW50aWZpZXIsIGFyZ3MucHJvcGVydGllc1RvUmV0dXJuKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IgJiYgYXJncy5pZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQpIHtcbiAgICAgICAgLy8gV2UndmUgYWxyZWFkeSB0eXBlLWNoZWNrZWQgZHVtbXlWYWx1ZS5cbiAgICAgICAgcmV0dXJuIGFyZ3MuZHVtbXlWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgZ2V0UmVzb3VyY2UgZnJvbSBDQyBBUEkgdG8gZ2V0IHRoZSByZXNvdXJjZS5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvZ2V0LXJlc291cmNlLmh0bWxcbiAgICpcbiAgICogV2lsbCBhbHdheXMgcmV0dXJuIGV4YWN0bHkgb25lIHJlc291cmNlLCBvciBmYWlsLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNvdXJjZShcbiAgICBjYzogSUNsb3VkQ29udHJvbENsaWVudCxcbiAgICB0eXBlTmFtZTogc3RyaW5nLFxuICAgIGV4YWN0SWRlbnRpZmllcjogc3RyaW5nLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5nZXRSZXNvdXJjZSh7XG4gICAgICAgIFR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgSWRlbnRpZmllcjogZXhhY3RJZGVudGlmaWVyLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcignVW5leHBlY3RlZCBDbG91ZENvbnRyb2wgQVBJIGJlaGF2aW9yOiByZXR1cm5lZCBlbXB0eSByZXNwb25zZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2ZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkocmVzdWx0LlJlc291cmNlRGVzY3JpcHRpb24pXTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfHwgKGVyciBhcyBhbnkpLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IoYE5vIHJlc291cmNlIG9mIHR5cGUgJHt0eXBlTmFtZX0gd2l0aCBpZGVudGlmaWVyOiAke2V4YWN0SWRlbnRpZmllcn1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIENvbnRleHRQcm92aWRlckVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEVuY291bnRlcmVkIENDIEFQSSBlcnJvciB3aGlsZSBnZXR0aW5nICR7dHlwZU5hbWV9IHJlc291cmNlICR7ZXhhY3RJZGVudGlmaWVyfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgbGlzdFJlc291cmNlcyBmcm9tIENDIEFQSSB0byBnZXQgdGhlIHJlc291cmNlcyBhbmQgYXBwbHkgYXJncy5wcm9wZXJ0eU1hdGNoIHRvIGZpbmQgdGhlIHJlc291cmNlcy5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3JlZmVyZW5jZS9jbG91ZGNvbnRyb2wvbGlzdC1yZXNvdXJjZXMuaHRtbFxuICAgKlxuICAgKiBXaWxsIHJldHVybiAwIG9yIG1vcmUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBEb2VzIG5vdCBjdXJyZW50bHkgcGFnaW5hdGUgdGhyb3VnaCBtb3JlIHRoYW4gb25lIHJlc3VsdCBwYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0UmVzb3VyY2VzKFxuICAgIGNjOiBJQ2xvdWRDb250cm9sQ2xpZW50LFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlNYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZXhwZWN0ZWRNYXRjaENvdW50PzogQ2NBcGlDb250ZXh0UXVlcnlbJ2V4cGVjdGVkTWF0Y2hDb3VudCddLFxuICApOiBQcm9taXNlPEZvdW5kUmVzb3VyY2VbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYy5saXN0UmVzb3VyY2VzKHtcbiAgICAgICAgVHlwZU5hbWU6IHR5cGVOYW1lLFxuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvdW5kID0gKHJlc3VsdC5SZXNvdXJjZURlc2NyaXB0aW9ucyA/PyBbXSlcbiAgICAgICAgLm1hcChmb3VuZFJlc291cmNlRnJvbUNjQXBpKVxuICAgICAgICAuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5TWF0Y2gpLmV2ZXJ5KChbcHJvcFBhdGgsIGV4cGVjdGVkXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gZmluZEpzb25WYWx1ZShyLnByb3BlcnRpZXMsIHByb3BQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsLCBleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LWxlYXN0LW9uZScgfHwgZXhwZWN0ZWRNYXRjaENvdW50ID09PSAnZXhhY3RseS1vbmUnKSAmJiBmb3VuZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFplcm9SZXNvdXJjZXNGb3VuZEVycm9yKGBDb3VsZCBub3QgZmluZCBhbnkgcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9YCk7XG4gICAgICB9XG4gICAgICBpZiAoKGV4cGVjdGVkTWF0Y2hDb3VudCA9PT0gJ2F0LW1vc3Qtb25lJyB8fCBleHBlY3RlZE1hdGNoQ291bnQgPT09ICdleGFjdGx5LW9uZScpICYmIGZvdW5kLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBGb3VuZCAke2ZvdW5kLmxlbmd0aH0gcmVzb3VyY2VzIG1hdGNoaW5nICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlNYXRjaCl9OyBwbGVhc2UgbmFycm93IHRoZSBzZWFyY2ggY3JpdGVyaWFgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDb250ZXh0UHJvdmlkZXJFcnJvcikgJiYgIShlcnIgaW5zdGFuY2VvZiBaZXJvUmVzb3VyY2VzRm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBFbmNvdW50ZXJlZCBDQyBBUEkgZXJyb3Igd2hpbGUgbGlzdGluZyAke3R5cGVOYW1lfSByZXNvdXJjZXMgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eU1hdGNoKX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIENDIEFQSSByZXNwb25zZSBvYmplY3QgaW50byBhIG5pY2VyIG9iamVjdCAocGFyc2UgdGhlIEpTT04pXG4gKi9cbmZ1bmN0aW9uIGZvdW5kUmVzb3VyY2VGcm9tQ2NBcGkoZGVzYzogUmVzb3VyY2VEZXNjcmlwdGlvbik6IEZvdW5kUmVzb3VyY2Uge1xuICByZXR1cm4ge1xuICAgIGlkZW50aWZpZXI6IGRlc2MuSWRlbnRpZmllciA/PyAnKk1JU1NJTkcqJyxcbiAgICBwcm9wZXJ0aWVzOiBKU09OLnBhcnNlKGRlc2MuUHJvcGVydGllcyA/PyAne30nKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSBtYXRjaGVzIHRoZSBnaXZlbiBmaWx0ZXJcbiAqXG4gKiBGb3Igbm93IHdlIGp1c3QgY2hlY2sgZm9yIHN0cmljdCBlcXVhbGl0eSwgYnV0IHdlIGNhbiBpbXBsZW1lbnQgcGF0dGVybiBtYXRjaGluZyBhbmQgZnV6enkgbWF0Y2hpbmcgaGVyZSBsYXRlclxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU1hdGNoZXNGaWx0ZXIoYWN0dWFsOiB1bmtub3duLCBleHBlY3RlZDogdW5rbm93bikge1xuICByZXR1cm4gZXhwZWN0ZWQgPT09IGFjdHVhbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoeDogdW5rbm93bik6IHggaXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoeCk7XG59XG5cbi8qKlxuICogQSBwYXJzZWQgdmVyc2lvbiBvZiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQ0NBUElcbiAqL1xuaW50ZXJmYWNlIEZvdW5kUmVzb3VyY2Uge1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEEgc3BlY2lmaWMgbG9va3VwIGZhaWx1cmUgaW5kaWNhdGluZyAwIHJlc291cmNlcyBmb3VuZCB0aGF0IGNhbiBiZSByZWNvdmVyZWRcbiAqL1xuY2xhc3MgWmVyb1Jlc291cmNlc0ZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import type { EndpointServiceAvailabilityZonesContextQuery } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { IContextProviderMessages } from '.';
3
+ import { type SdkProvider } from '../api/aws-auth/private';
4
+ import type { ContextProviderPlugin } from '../api/plugin';
5
+ /**
6
+ * Plugin to retrieve the Availability Zones for an endpoint service
7
+ */
8
+ export declare class EndpointServiceAZContextProviderPlugin implements ContextProviderPlugin {
9
+ private readonly aws;
10
+ private readonly io;
11
+ constructor(aws: SdkProvider, io: IContextProviderMessages);
12
+ getValue(args: EndpointServiceAvailabilityZonesContextQuery): Promise<string[] | undefined>;
13
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndpointServiceAZContextProviderPlugin = void 0;
4
+ const private_1 = require("../api/aws-auth/private");
5
+ /**
6
+ * Plugin to retrieve the Availability Zones for an endpoint service
7
+ */
8
+ class EndpointServiceAZContextProviderPlugin {
9
+ aws;
10
+ io;
11
+ constructor(aws, io) {
12
+ this.aws = aws;
13
+ this.io = io;
14
+ }
15
+ async getValue(args) {
16
+ const region = args.region;
17
+ const account = args.account;
18
+ const serviceName = args.serviceName;
19
+ await this.io.debug(`Reading AZs for ${account}:${region}:${serviceName}`);
20
+ const ec2 = (await (0, private_1.initContextProviderSdk)(this.aws, args)).ec2();
21
+ const response = await ec2.describeVpcEndpointServices({
22
+ ServiceNames: [serviceName],
23
+ });
24
+ // expect a service in the response
25
+ if (!response.ServiceDetails || response.ServiceDetails.length === 0) {
26
+ await this.io.debug(`Could not retrieve service details for ${account}:${region}:${serviceName}`);
27
+ return [];
28
+ }
29
+ const azs = response.ServiceDetails[0].AvailabilityZones;
30
+ await this.io.debug(`Endpoint service ${account}:${region}:${serviceName} is available in availability zones ${azs}`);
31
+ return azs;
32
+ }
33
+ }
34
+ exports.EndpointServiceAZContextProviderPlugin = EndpointServiceAZContextProviderPlugin;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2VydmljZS1hdmFpbGFiaWxpdHktem9uZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmRwb2ludC1zZXJ2aWNlLWF2YWlsYWJpbGl0eS16b25lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFBbUY7QUFHbkY7O0dBRUc7QUFDSCxNQUFhLHNDQUFzQztJQUNwQjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQWtEO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sSUFBSSxNQUFNLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsMkJBQTJCLENBQUM7WUFDckQsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDbEcsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixPQUFPLElBQUksTUFBTSxJQUFJLFdBQVcsdUNBQXVDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUF2QkQsd0ZBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHsgdHlwZSBTZGtQcm92aWRlciwgaW5pdENvbnRleHRQcm92aWRlclNkayB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vYXBpL3BsdWdpbic7XG5cbi8qKlxuICogUGx1Z2luIHRvIHJldHJpZXZlIHRoZSBBdmFpbGFiaWxpdHkgWm9uZXMgZm9yIGFuIGVuZHBvaW50IHNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEVuZHBvaW50U2VydmljZUFaQ29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBFbmRwb2ludFNlcnZpY2VBdmFpbGFiaWxpdHlab25lc0NvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGFyZ3MucmVnaW9uO1xuICAgIGNvbnN0IGFjY291bnQgPSBhcmdzLmFjY291bnQ7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBhcmdzLnNlcnZpY2VOYW1lO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYFJlYWRpbmcgQVpzIGZvciAke2FjY291bnR9OiR7cmVnaW9ufToke3NlcnZpY2VOYW1lfWApO1xuICAgIGNvbnN0IGVjMiA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuZWMyKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlYzIuZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzKHtcbiAgICAgIFNlcnZpY2VOYW1lczogW3NlcnZpY2VOYW1lXSxcbiAgICB9KTtcblxuICAgIC8vIGV4cGVjdCBhIHNlcnZpY2UgaW4gdGhlIHJlc3BvbnNlXG4gICAgaWYgKCFyZXNwb25zZS5TZXJ2aWNlRGV0YWlscyB8fCByZXNwb25zZS5TZXJ2aWNlRGV0YWlscy5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYENvdWxkIG5vdCByZXRyaWV2ZSBzZXJ2aWNlIGRldGFpbHMgZm9yICR7YWNjb3VudH06JHtyZWdpb259OiR7c2VydmljZU5hbWV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGF6cyA9IHJlc3BvbnNlLlNlcnZpY2VEZXRhaWxzWzBdLkF2YWlsYWJpbGl0eVpvbmVzO1xuICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEVuZHBvaW50IHNlcnZpY2UgJHthY2NvdW50fToke3JlZ2lvbn06JHtzZXJ2aWNlTmFtZX0gaXMgYXZhaWxhYmxlIGluIGF2YWlsYWJpbGl0eSB6b25lcyAke2F6c31gKTtcbiAgICByZXR1cm4gYXpzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import type { HostedZoneContextQuery } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { IContextProviderMessages } from '.';
3
+ import type { SdkProvider } from '../api/aws-auth/private';
4
+ import type { ContextProviderPlugin } from '../api/plugin';
5
+ export declare class HostedZoneContextProviderPlugin implements ContextProviderPlugin {
6
+ private readonly aws;
7
+ private readonly io;
8
+ constructor(aws: SdkProvider, io: IContextProviderMessages);
9
+ getValue(args: HostedZoneContextQuery): Promise<object>;
10
+ private filterZones;
11
+ private isHostedZoneQuery;
12
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HostedZoneContextProviderPlugin = void 0;
4
+ const private_1 = require("../api/aws-auth/private");
5
+ const toolkit_error_1 = require("../toolkit/toolkit-error");
6
+ class HostedZoneContextProviderPlugin {
7
+ aws;
8
+ io;
9
+ constructor(aws, io) {
10
+ this.aws = aws;
11
+ this.io = io;
12
+ }
13
+ async getValue(args) {
14
+ const account = args.account;
15
+ const region = args.region;
16
+ if (!this.isHostedZoneQuery(args)) {
17
+ throw new toolkit_error_1.ContextProviderError(`HostedZoneProvider requires domainName property to be set in ${args}`);
18
+ }
19
+ const domainName = args.domainName;
20
+ await this.io.debug(`Reading hosted zone ${account}:${region}:${domainName}`);
21
+ const r53 = (await (0, private_1.initContextProviderSdk)(this.aws, args)).route53();
22
+ const response = await r53.listHostedZonesByName({ DNSName: domainName });
23
+ if (!response.HostedZones) {
24
+ throw new toolkit_error_1.ContextProviderError(`Hosted Zone not found in account ${account}, region ${region}: ${domainName}`);
25
+ }
26
+ const candidateZones = await this.filterZones(r53, response.HostedZones, args);
27
+ if (candidateZones.length !== 1) {
28
+ const filteProps = `dns:${domainName}, privateZone:${args.privateZone}, vpcId:${args.vpcId}`;
29
+ throw new toolkit_error_1.ContextProviderError(`Found zones: ${JSON.stringify(candidateZones)} for ${filteProps}, but wanted exactly 1 zone`);
30
+ }
31
+ return {
32
+ Id: candidateZones[0].Id,
33
+ Name: candidateZones[0].Name,
34
+ };
35
+ }
36
+ async filterZones(r53, zones, props) {
37
+ let candidates = [];
38
+ const domainName = props.domainName.endsWith('.') ? props.domainName : `${props.domainName}.`;
39
+ await this.io.debug(`Found the following zones ${JSON.stringify(zones)}`);
40
+ candidates = zones.filter((zone) => zone.Name === domainName);
41
+ await this.io.debug(`Found the following matched name zones ${JSON.stringify(candidates)}`);
42
+ if (props.privateZone) {
43
+ candidates = candidates.filter((zone) => zone.Config && zone.Config.PrivateZone);
44
+ }
45
+ else {
46
+ candidates = candidates.filter((zone) => !zone.Config || !zone.Config.PrivateZone);
47
+ }
48
+ if (props.vpcId) {
49
+ const vpcZones = [];
50
+ for (const zone of candidates) {
51
+ const data = await r53.getHostedZone({ Id: zone.Id });
52
+ if (!data.VPCs) {
53
+ await this.io.debug(`Expected VPC for private zone but no VPC found ${zone.Id}`);
54
+ continue;
55
+ }
56
+ if (data.VPCs.map((vpc) => vpc.VPCId).includes(props.vpcId)) {
57
+ vpcZones.push(zone);
58
+ }
59
+ }
60
+ return vpcZones;
61
+ }
62
+ return candidates;
63
+ }
64
+ isHostedZoneQuery(props) {
65
+ return props.domainName !== undefined;
66
+ }
67
+ }
68
+ exports.HostedZoneContextProviderPlugin = HostedZoneContextProviderPlugin;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkLXpvbmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG9zdGVkLXpvbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFpRTtBQUVqRSw0REFBZ0U7QUFFaEUsTUFBYSwrQkFBK0I7SUFDYjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQTRCO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLG9DQUFvQixDQUFDLGdFQUFnRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLE9BQU8sSUFBSSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBQSxnQ0FBc0IsRUFBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxvQ0FBb0MsT0FBTyxZQUFZLE1BQU0s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LENBQUMsQ0FBQztnQkFDdEIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQW1DO1FBQzNELE9BQVEsS0FBZ0MsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0lBQ3BFLENBQUM7Q0FDRjtBQWhFRCwwRUFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBIb3N0ZWRab25lIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzIH0gZnJvbSAnLic7XG5pbXBvcnQgdHlwZSB7IElSb3V0ZTUzQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgSG9zdGVkWm9uZUNvbnRleHRQcm92aWRlclBsdWdpbiBpbXBsZW1lbnRzIENvbnRleHRQcm92aWRlclBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXdzOiBTZGtQcm92aWRlciwgcHJpdmF0ZSByZWFkb25seSBpbzogSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoYXJnczogSG9zdGVkWm9uZUNvbnRleHRRdWVyeSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgYWNjb3VudCA9IGFyZ3MuYWNjb3VudDtcbiAgICBjb25zdCByZWdpb24gPSBhcmdzLnJlZ2lvbjtcbiAgICBpZiAoIXRoaXMuaXNIb3N0ZWRab25lUXVlcnkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkWm9uZVByb3ZpZGVyIHJlcXVpcmVzIGRvbWFpbk5hbWUgcHJvcGVydHkgdG8gYmUgc2V0IGluICR7YXJnc31gKTtcbiAgICB9XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IGFyZ3MuZG9tYWluTmFtZTtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBSZWFkaW5nIGhvc3RlZCB6b25lICR7YWNjb3VudH06JHtyZWdpb259OiR7ZG9tYWluTmFtZX1gKTtcbiAgICBjb25zdCByNTMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLnJvdXRlNTMoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHI1My5saXN0SG9zdGVkWm9uZXNCeU5hbWUoeyBETlNOYW1lOiBkb21haW5OYW1lIH0pO1xuICAgIGlmICghcmVzcG9uc2UuSG9zdGVkWm9uZXMpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgSG9zdGVkIFpvbmUgbm90IGZvdW5kIGluIGFjY291bnQgJHthY2NvdW50fSwgcmVnaW9uICR7cmVnaW9ufTogJHtkb21haW5OYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBjYW5kaWRhdGVab25lcyA9IGF3YWl0IHRoaXMuZmlsdGVyWm9uZXMocjUzLCByZXNwb25zZS5Ib3N0ZWRab25lcywgYXJncyk7XG4gICAgaWYgKGNhbmRpZGF0ZVpvbmVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3QgZmlsdGVQcm9wcyA9IGBkbnM6JHtkb21haW5OYW1lfSwgcHJpdmF0ZVpvbmU6JHthcmdzLnByaXZhdGVab25lfSwgdnBjSWQ6JHthcmdzLnZwY0lkfWA7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kIHpvbmVzOiAke0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZVpvbmVzKX0gZm9yICR7ZmlsdGVQcm9wc30sIGJ1dCB3YW50ZWQgZXhhY3RseSAxIHpvbmVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSWQ6IGNhbmRpZGF0ZVpvbmVzWzBdLklkLFxuICAgICAgTmFtZTogY2FuZGlkYXRlWm9uZXNbMF0uTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJab25lcyhcbiAgICByNTM6IElSb3V0ZTUzQ2xpZW50LFxuICAgIHpvbmVzOiBIb3N0ZWRab25lW10sXG4gICAgcHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnksXG4gICk6IFByb21pc2U8SG9zdGVkWm9uZVtdPiB7XG4gICAgbGV0IGNhbmRpZGF0ZXM6IEhvc3RlZFpvbmVbXSA9IFtdO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSBwcm9wcy5kb21haW5OYW1lLmVuZHNXaXRoKCcuJykgPyBwcm9wcy5kb21haW5OYW1lIDogYCR7cHJvcHMuZG9tYWluTmFtZX0uYDtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBGb3VuZCB0aGUgZm9sbG93aW5nIHpvbmVzICR7SlNPTi5zdHJpbmdpZnkoem9uZXMpfWApO1xuICAgIGNhbmRpZGF0ZXMgPSB6b25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUuTmFtZSA9PT0gZG9tYWluTmFtZSk7XG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgRm91bmQgdGhlIGZvbGxvd2luZyBtYXRjaGVkIG5hbWUgem9uZXMgJHtKU09OLnN0cmluZ2lmeShjYW5kaWRhdGVzKX1gKTtcbiAgICBpZiAocHJvcHMucHJpdmF0ZVpvbmUpIHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoem9uZSkgPT4gem9uZS5Db25maWcgJiYgem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHpvbmUpID0+ICF6b25lLkNvbmZpZyB8fCAhem9uZS5Db25maWcuUHJpdmF0ZVpvbmUpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjSWQpIHtcbiAgICAgIGNvbnN0IHZwY1pvbmVzOiBIb3N0ZWRab25lW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgem9uZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByNTMuZ2V0SG9zdGVkWm9uZSh7IElkOiB6b25lLklkIH0pO1xuICAgICAgICBpZiAoIWRhdGEuVlBDcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW8uZGVidWcoYEV4cGVjdGVkIFZQQyBmb3IgcHJpdmF0ZSB6b25lIGJ1dCBubyBWUEMgZm91bmQgJHt6b25lLklkfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLlZQQ3MubWFwKCh2cGMpID0+IHZwYy5WUENJZCkuaW5jbHVkZXMocHJvcHMudnBjSWQpKSB7XG4gICAgICAgICAgdnBjWm9uZXMucHVzaCh6b25lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZwY1pvbmVzO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgfVxuXG4gIHByaXZhdGUgaXNIb3N0ZWRab25lUXVlcnkocHJvcHM6IEhvc3RlZFpvbmVDb250ZXh0UXVlcnkgfCBhbnkpOiBwcm9wcyBpcyBIb3N0ZWRab25lQ29udGV4dFF1ZXJ5IHtcbiAgICByZXR1cm4gKHByb3BzIGFzIEhvc3RlZFpvbmVDb250ZXh0UXVlcnkpLmRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,44 @@
1
+ import * as cxschema from '@aws-cdk/cloud-assembly-schema';
2
+ import type { SdkProvider } from '../api/aws-auth/private';
3
+ import type { Context } from '../api/context';
4
+ import type { IoHelper } from '../api/io/private';
5
+ import type { PluginHost, ContextProviderPlugin } from '../api/plugin';
6
+ type ContextProviderFactory = ((sdk: SdkProvider, io: IContextProviderMessages) => ContextProviderPlugin);
7
+ export interface IContextProviderMessages {
8
+ /**
9
+ * A message that is presented to users in normal mode of operation.
10
+ *
11
+ * Should be used sparingly. The Context Provider framework already provides useful output by default.
12
+ * This can be uses in exceptionally situations, e.g. if a lookup call is expected to take a long time.
13
+ */
14
+ info(message: string): Promise<void>;
15
+ /**
16
+ * A message that helps users debugging the context provider.
17
+ *
18
+ * Should be used in most cases to note on current action.
19
+ */
20
+ debug(message: string): Promise<void>;
21
+ }
22
+ /**
23
+ * Iterate over the list of missing context values and invoke the appropriate providers from the map to retrieve them
24
+ */
25
+ export declare function provideContextValues(missingValues: cxschema.MissingContext[], context: Context, sdk: SdkProvider, pluginHost: PluginHost, ioHelper: IoHelper): Promise<void>;
26
+ /**
27
+ * Register a context provider
28
+ *
29
+ * A context provider cannot reuse the SDKs authentication mechanisms.
30
+ */
31
+ export declare function registerContextProvider(name: string, provider: ContextProviderPlugin): void;
32
+ /**
33
+ * Register a plugin context provider
34
+ *
35
+ * A plugin provider cannot reuse the SDKs authentication mechanisms.
36
+ */
37
+ export declare function registerPluginContextProvider(name: string, provider: ContextProviderPlugin): void;
38
+ /**
39
+ * Register a context provider factory
40
+ *
41
+ * A context provider factory takes an SdkProvider and returns the context provider plugin.
42
+ */
43
+ export declare function registerContextProviderFactory(name: string, provider: ContextProviderFactory): void;
44
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.provideContextValues = provideContextValues;
4
+ exports.registerContextProvider = registerContextProvider;
5
+ exports.registerPluginContextProvider = registerPluginContextProvider;
6
+ exports.registerContextProviderFactory = registerContextProviderFactory;
7
+ const cxschema = require("@aws-cdk/cloud-assembly-schema");
8
+ const cxapi = require("@aws-cdk/cx-api");
9
+ const ami_1 = require("./ami");
10
+ const availability_zones_1 = require("./availability-zones");
11
+ const cc_api_provider_1 = require("./cc-api-provider");
12
+ const endpoint_service_availability_zones_1 = require("./endpoint-service-availability-zones");
13
+ const hosted_zones_1 = require("./hosted-zones");
14
+ const keys_1 = require("./keys");
15
+ const load_balancers_1 = require("./load-balancers");
16
+ const security_groups_1 = require("./security-groups");
17
+ const ssm_parameters_1 = require("./ssm-parameters");
18
+ const vpcs_1 = require("./vpcs");
19
+ const context_1 = require("../api/context");
20
+ const environment_1 = require("../api/environment");
21
+ const private_1 = require("../api/io/private");
22
+ const toolkit_error_1 = require("../toolkit/toolkit-error");
23
+ const util_1 = require("../util");
24
+ const PLUGIN_PROVIDER_PREFIX = 'plugin';
25
+ class ContextProviderMessages {
26
+ ioHelper;
27
+ providerName;
28
+ constructor(ioHelper, providerName) {
29
+ this.ioHelper = ioHelper;
30
+ this.providerName = providerName;
31
+ }
32
+ async info(message) {
33
+ return this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0300.msg(message, {
34
+ provider: this.providerName,
35
+ }));
36
+ }
37
+ async debug(message) {
38
+ return this.ioHelper.notify(private_1.IO.CDK_ASSEMBLY_I0301.msg(message, {
39
+ provider: this.providerName,
40
+ }));
41
+ }
42
+ }
43
+ /**
44
+ * Iterate over the list of missing context values and invoke the appropriate providers from the map to retrieve them
45
+ */
46
+ async function provideContextValues(missingValues, context, sdk, pluginHost, ioHelper) {
47
+ for (const missingContext of missingValues) {
48
+ const key = missingContext.key;
49
+ const providerName = missingContext.provider === cxschema.ContextProvider.PLUGIN
50
+ ? `${PLUGIN_PROVIDER_PREFIX}:${missingContext.props.pluginName}`
51
+ : missingContext.provider;
52
+ let factory;
53
+ if (providerName.startsWith(`${PLUGIN_PROVIDER_PREFIX}:`)) {
54
+ const plugin = pluginHost.contextProviderPlugins[providerName.substring(PLUGIN_PROVIDER_PREFIX.length + 1)];
55
+ if (!plugin) {
56
+ // eslint-disable-next-line @stylistic/max-len
57
+ throw new toolkit_error_1.ContextProviderError(`Unrecognized plugin context provider name: ${missingContext.provider}.`);
58
+ }
59
+ factory = () => plugin;
60
+ }
61
+ else {
62
+ factory = availableContextProviders[providerName];
63
+ if (!factory) {
64
+ // eslint-disable-next-line @stylistic/max-len
65
+ throw new toolkit_error_1.ContextProviderError(`Unrecognized context provider name: ${missingContext.provider}. You might need to update the toolkit to match the version of the construct library.`);
66
+ }
67
+ }
68
+ const provider = factory(sdk, new ContextProviderMessages(ioHelper, providerName));
69
+ let value;
70
+ try {
71
+ const environment = missingContext.props.account && missingContext.props.region
72
+ ? cxapi.EnvironmentUtils.make(missingContext.props.account, missingContext.props.region)
73
+ : undefined;
74
+ const resolvedEnvironment = environment
75
+ ? await sdk.resolveEnvironment(environment)
76
+ : { account: '?', region: '?', name: '?' };
77
+ const arns = await (0, environment_1.replaceEnvPlaceholders)({
78
+ lookupRoleArn: missingContext.props.lookupRoleArn,
79
+ }, resolvedEnvironment, sdk);
80
+ value = await provider.getValue({ ...missingContext.props, lookupRoleArn: arns.lookupRoleArn });
81
+ }
82
+ catch (e) {
83
+ // Set a specially formatted provider value which will be interpreted
84
+ // as a lookup failure in the toolkit.
85
+ value = { [cxapi.PROVIDER_ERROR_KEY]: (0, util_1.formatErrorMessage)(e), [context_1.TRANSIENT_CONTEXT_KEY]: true };
86
+ }
87
+ context.set(key, value);
88
+ await ioHelper.notify(private_1.IO.DEFAULT_ASSEMBLY_DEBUG.msg(`Setting "${key}" context to ${JSON.stringify(value)}`));
89
+ }
90
+ }
91
+ /**
92
+ * Register a context provider
93
+ *
94
+ * A context provider cannot reuse the SDKs authentication mechanisms.
95
+ */
96
+ function registerContextProvider(name, provider) {
97
+ availableContextProviders[name] = () => provider;
98
+ }
99
+ /**
100
+ * Register a plugin context provider
101
+ *
102
+ * A plugin provider cannot reuse the SDKs authentication mechanisms.
103
+ */
104
+ function registerPluginContextProvider(name, provider) {
105
+ registerContextProvider(`${PLUGIN_PROVIDER_PREFIX}:${name}`, provider);
106
+ }
107
+ /**
108
+ * Register a context provider factory
109
+ *
110
+ * A context provider factory takes an SdkProvider and returns the context provider plugin.
111
+ */
112
+ function registerContextProviderFactory(name, provider) {
113
+ availableContextProviders[name] = provider;
114
+ }
115
+ const availableContextProviders = {
116
+ [cxschema.ContextProvider.AVAILABILITY_ZONE_PROVIDER]: (s, io) => new availability_zones_1.AZContextProviderPlugin(s, io),
117
+ [cxschema.ContextProvider.SSM_PARAMETER_PROVIDER]: (s, io) => new ssm_parameters_1.SSMContextProviderPlugin(s, io),
118
+ [cxschema.ContextProvider.HOSTED_ZONE_PROVIDER]: (s, io) => new hosted_zones_1.HostedZoneContextProviderPlugin(s, io),
119
+ [cxschema.ContextProvider.VPC_PROVIDER]: (s, io) => new vpcs_1.VpcNetworkContextProviderPlugin(s, io),
120
+ [cxschema.ContextProvider.AMI_PROVIDER]: (s, io) => new ami_1.AmiContextProviderPlugin(s, io),
121
+ [cxschema.ContextProvider.ENDPOINT_SERVICE_AVAILABILITY_ZONE_PROVIDER]: (s, io) => new endpoint_service_availability_zones_1.EndpointServiceAZContextProviderPlugin(s, io),
122
+ [cxschema.ContextProvider.SECURITY_GROUP_PROVIDER]: (s) => new security_groups_1.SecurityGroupContextProviderPlugin(s),
123
+ [cxschema.ContextProvider.LOAD_BALANCER_PROVIDER]: (s) => new load_balancers_1.LoadBalancerContextProviderPlugin(s),
124
+ [cxschema.ContextProvider.LOAD_BALANCER_LISTENER_PROVIDER]: (s) => new load_balancers_1.LoadBalancerListenerContextProviderPlugin(s),
125
+ [cxschema.ContextProvider.KEY_PROVIDER]: (s, io) => new keys_1.KeyContextProviderPlugin(s, io),
126
+ [cxschema.ContextProvider.CC_API_PROVIDER]: (s) => new cc_api_provider_1.CcApiContextProviderPlugin(s),
127
+ };
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFFQSxvREF1REM7QUFPRCwwREFFQztBQU9ELHNFQUVDO0FBT0Qsd0VBRUM7QUF2SkQsMkRBQTJEO0FBQzNELHlDQUF5QztBQUN6QywrQkFBaUQ7QUFDakQsNkRBQStEO0FBQy9ELHVEQUErRDtBQUMvRCwrRkFBK0Y7QUFDL0YsaURBQWlFO0FBQ2pFLGlDQUFrRDtBQUNsRCxxREFBZ0g7QUFDaEgsdURBQXVFO0FBQ3ZFLHFEQUE0RDtBQUM1RCxpQ0FBeUQ7QUFHekQsNENBQXVEO0FBQ3ZELG9EQUE0RDtBQUM1RCwrQ0FBdUM7QUFHdkMsNERBQWdFO0FBQ2hFLGtDQUE2QztBQUs3QyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQW1CeEMsTUFBTSx1QkFBdUI7SUFDVixRQUFRLENBQVc7SUFDbkIsWUFBWSxDQUFTO0lBRXRDLFlBQW1CLFFBQWtCLEVBQUUsWUFBb0I7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQzdELFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUM1QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDNUIsQ0FBQyxDQUFDLENBQUM7SUFD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QUFFLEVBQUUsQ0FBQyxJQUFJLDRDQUEwQixDQUFDLENBQUMsQ0FBQztDQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2FtaSc7XG5pbXBvcnQgeyBBWkNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IENjQXBpQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi9jYy1hcGktcHJvdmlkZXInO1xuaW1wb3J0IHsgRW5kcG9pbnRTZXJ2aWNlQVpDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2VuZHBvaW50LXNlcnZpY2UtYXZhaWxhYmlsaXR5LXpvbmVzJztcbmltcG9ydCB7IEhvc3RlZFpvbmVDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2hvc3RlZC16b25lcyc7XG5pbXBvcnQgeyBLZXlDb250ZXh0UHJvdmlkZXJQbHVnaW4gfSBmcm9tICcuL2tleXMnO1xuaW1wb3J0IHsgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBMb2FkQmFsYW5jZXJMaXN0ZW5lckNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vbG9hZC1iYWxhbmNlcnMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc2VjdXJpdHktZ3JvdXBzJztcbmltcG9ydCB7IFNTTUNvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vc3NtLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vdnBjcyc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgVFJBTlNJRU5UX0NPTlRFWFRfS0VZIH0gZnJvbSAnLi4vYXBpL2NvbnRleHQnO1xuaW1wb3J0IHsgcmVwbGFjZUVudlBsYWNlaG9sZGVycyB9IGZyb20gJy4uL2FwaS9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJTyB9IGZyb20gJy4uL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9hcGkvaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkhvc3QsIENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbnR5cGUgQ29udGV4dFByb3ZpZGVyRmFjdG9yeSA9ICgoc2RrOiBTZGtQcm92aWRlciwgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykgPT4gQ29udGV4dFByb3ZpZGVyUGx1Z2luKTtcbnR5cGUgUHJvdmlkZXJNYXAgPSB7IFtuYW1lOiBzdHJpbmddOiBDb250ZXh0UHJvdmlkZXJGYWN0b3J5IH07XG5cbmNvbnN0IFBMVUdJTl9QUk9WSURFUl9QUkVGSVggPSAncGx1Z2luJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMge1xuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaXMgcHJlc2VudGVkIHRvIHVzZXJzIGluIG5vcm1hbCBtb2RlIG9mIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LiBUaGUgQ29udGV4dCBQcm92aWRlciBmcmFtZXdvcmsgYWxyZWFkeSBwcm92aWRlcyB1c2VmdWwgb3V0cHV0IGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgY2FuIGJlIHVzZXMgaW4gZXhjZXB0aW9uYWxseSBzaXR1YXRpb25zLCBlLmcuIGlmIGEgbG9va3VwIGNhbGwgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIGxvbmcgdGltZS5cbiAgICovXG4gIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQSBtZXNzYWdlIHRoYXQgaGVscHMgdXNlcnMgZGVidWdnaW5nIHRoZSBjb250ZXh0IHByb3ZpZGVyLlxuICAgKlxuICAgKiBTaG91bGQgYmUgdXNlZCBpbiBtb3N0IGNhc2VzIHRvIG5vdGUgb24gY3VycmVudCBhY3Rpb24uXG4gICAqL1xuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jbGFzcyBDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyBpbXBsZW1lbnRzIElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIsIHByb3ZpZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMucHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluZm8obWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19BU1NFTUJMWV9JMDMwMC5tc2cobWVzc2FnZSwge1xuICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXJOYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX0FTU0VNQkxZX0kwMzAxLm1zZyhtZXNzYWdlLCB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlck5hbWUsXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIG1pc3NpbmcgY29udGV4dCB2YWx1ZXMgYW5kIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgcHJvdmlkZXJzIGZyb20gdGhlIG1hcCB0byByZXRyaWV2ZSB0aGVtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aWRlQ29udGV4dFZhbHVlcyhcbiAgbWlzc2luZ1ZhbHVlczogY3hzY2hlbWEuTWlzc2luZ0NvbnRleHRbXSxcbiAgY29udGV4dDogQ29udGV4dCxcbiAgc2RrOiBTZGtQcm92aWRlcixcbiAgcGx1Z2luSG9zdDogUGx1Z2luSG9zdCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKSB7XG4gIGZvciAoY29uc3QgbWlzc2luZ0NvbnRleHQgb2YgbWlzc2luZ1ZhbHVlcykge1xuICAgIGNvbnN0IGtleSA9IG1pc3NpbmdDb250ZXh0LmtleTtcblxuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyID09PSBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuUExVR0lOXG4gICAgICA/IGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OiR7KG1pc3NpbmdDb250ZXh0LnByb3BzIGFzIGN4c2NoZW1hLlBsdWdpbkNvbnRleHRRdWVyeSkucGx1Z2luTmFtZX1gXG4gICAgICA6IG1pc3NpbmdDb250ZXh0LnByb3ZpZGVyO1xuXG4gICAgbGV0IGZhY3Rvcnk7XG4gICAgaWYgKHByb3ZpZGVyTmFtZS5zdGFydHNXaXRoKGAke1BMVUdJTl9QUk9WSURFUl9QUkVGSVh9OmApKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5Ib3N0LmNvbnRleHRQcm92aWRlclBsdWdpbnNbcHJvdmlkZXJOYW1lLnN1YnN0cmluZyhQTFVHSU5fUFJPVklERVJfUFJFRklYLmxlbmd0aCArIDEpXTtcbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBVbnJlY29nbml6ZWQgcGx1Z2luIGNvbnRleHQgcHJvdmlkZXIgbmFtZTogJHttaXNzaW5nQ29udGV4dC5wcm92aWRlcn0uYCk7XG4gICAgICB9XG4gICAgICBmYWN0b3J5ID0gKCkgPT4gcGx1Z2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWN0b3J5ID0gYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyc1twcm92aWRlck5hbWVdO1xuICAgICAgaWYgKCFmYWN0b3J5KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBVbnJlY29nbml6ZWQgY29udGV4dCBwcm92aWRlciBuYW1lOiAke21pc3NpbmdDb250ZXh0LnByb3ZpZGVyfS4gWW91IG1pZ2h0IG5lZWQgdG8gdXBkYXRlIHRoZSB0b29sa2l0IHRvIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QgbGlicmFyeS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlciA9IGZhY3Rvcnkoc2RrLCBuZXcgQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMoaW9IZWxwZXIsIHByb3ZpZGVyTmFtZSkpO1xuXG4gICAgbGV0IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IG1pc3NpbmdDb250ZXh0LnByb3BzLmFjY291bnQgJiYgbWlzc2luZ0NvbnRleHQucHJvcHMucmVnaW9uXG4gICAgICAgID8gY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKG1pc3NpbmdDb250ZXh0LnByb3BzLmFjY291bnQsIG1pc3NpbmdDb250ZXh0LnByb3BzLnJlZ2lvbilcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkRW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgICAgICAgPyBhd2FpdCBzZGsucmVzb2x2ZUVudmlyb25tZW50KGVudmlyb25tZW50KVxuICAgICAgICA6IHsgYWNjb3VudDogJz8nLCByZWdpb246ICc/JywgbmFtZTogJz8nIH07XG5cbiAgICAgIGNvbnN0IGFybnMgPSBhd2FpdCByZXBsYWNlRW52UGxhY2Vob2xkZXJzKHtcbiAgICAgICAgbG9va3VwUm9sZUFybjogbWlzc2luZ0NvbnRleHQucHJvcHMubG9va3VwUm9sZUFybixcbiAgICAgIH0sIHJlc29sdmVkRW52aXJvbm1lbnQsIHNkayk7XG5cbiAgICAgIHZhbHVlID0gYXdhaXQgcHJvdmlkZXIuZ2V0VmFsdWUoeyAuLi5taXNzaW5nQ29udGV4dC5wcm9wcywgbG9va3VwUm9sZUFybjogYXJucy5sb29rdXBSb2xlQXJuIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gU2V0IGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBwcm92aWRlciB2YWx1ZSB3aGljaCB3aWxsIGJlIGludGVycHJldGVkXG4gICAgICAvLyBhcyBhIGxvb2t1cCBmYWlsdXJlIGluIHRoZSB0b29sa2l0LlxuICAgICAgdmFsdWUgPSB7IFtjeGFwaS5QUk9WSURFUl9FUlJPUl9LRVldOiBmb3JtYXRFcnJvck1lc3NhZ2UoZSksIFtUUkFOU0lFTlRfQ09OVEVYVF9LRVldOiB0cnVlIH07XG4gICAgfVxuICAgIGNvbnRleHQuc2V0KGtleSwgdmFsdWUpO1xuICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX0FTU0VNQkxZX0RFQlVHLm1zZyhgU2V0dGluZyBcIiR7a2V5fVwiIGNvbnRleHQgdG8gJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCkpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjb250ZXh0IHByb3ZpZGVyXG4gKlxuICogQSBjb250ZXh0IHByb3ZpZGVyIGNhbm5vdCByZXVzZSB0aGUgU0RLcyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIobmFtZTogc3RyaW5nLCBwcm92aWRlcjogQ29udGV4dFByb3ZpZGVyUGx1Z2luKSB7XG4gIGF2YWlsYWJsZUNvbnRleHRQcm92aWRlcnNbbmFtZV0gPSAoKSA9PiBwcm92aWRlcjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHBsdWdpbiBjb250ZXh0IHByb3ZpZGVyXG4gKlxuICogQSBwbHVnaW4gcHJvdmlkZXIgY2Fubm90IHJldXNlIHRoZSBTREtzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpbkNvbnRleHRQcm92aWRlcihuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJQbHVnaW4pIHtcbiAgcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoYCR7UExVR0lOX1BST1ZJREVSX1BSRUZJWH06JHtuYW1lfWAsIHByb3ZpZGVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRleHQgcHJvdmlkZXIgZmFjdG9yeVxuICpcbiAqIEEgY29udGV4dCBwcm92aWRlciBmYWN0b3J5IHRha2VzIGFuIFNka1Byb3ZpZGVyIGFuZCByZXR1cm5zIHRoZSBjb250ZXh0IHByb3ZpZGVyIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyRmFjdG9yeShuYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJGYWN0b3J5KSB7XG4gIGF2YWlsYWJsZUNvbnRleHRQcm92aWRlcnNbbmFtZV0gPSBwcm92aWRlcjtcbn1cblxuY29uc3QgYXZhaWxhYmxlQ29udGV4dFByb3ZpZGVyczogUHJvdmlkZXJNYXAgPSB7XG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuQVZBSUxBQklMSVRZX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBBWkNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU1NNX1BBUkFNRVRFUl9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IFNTTUNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuSE9TVEVEX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBIb3N0ZWRab25lQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5WUENfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMsIGlvKSxcbiAgW2N4c2NoZW1hLkNvbnRleHRQcm92aWRlci5BTUlfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBBbWlDb250ZXh0UHJvdmlkZXJQbHVnaW4ocywgaW8pLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkVORFBPSU5UX1NFUlZJQ0VfQVZBSUxBQklMSVRZX1pPTkVfUFJPVklERVJdOiAocywgaW8pID0+IG5ldyBFbmRwb2ludFNlcnZpY2VBWkNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU0VDVVJJVFlfR1JPVVBfUFJPVklERVJdOiAocykgPT4gbmV3IFNlY3VyaXR5R3JvdXBDb250ZXh0UHJvdmlkZXJQbHVnaW4ocyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuTE9BRF9CQUxBTkNFUl9QUk9WSURFUl06IChzKSA9PiBuZXcgTG9hZEJhbGFuY2VyQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMpLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkxPQURfQkFMQU5DRVJfTElTVEVORVJfUFJPVklERVJdOiAocykgPT4gbmV3IExvYWRCYWxhbmNlckxpc3RlbmVyQ29udGV4dFByb3ZpZGVyUGx1Z2luKHMpLFxuICBbY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLktFWV9QUk9WSURFUl06IChzLCBpbykgPT4gbmV3IEtleUNvbnRleHRQcm92aWRlclBsdWdpbihzLCBpbyksXG4gIFtjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuQ0NfQVBJX1BST1ZJREVSXTogKHMpID0+IG5ldyBDY0FwaUNvbnRleHRQcm92aWRlclBsdWdpbihzKSxcbn07XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import type { KeyContextQuery } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { KeyContextResponse } from '@aws-cdk/cx-api';
3
+ import type { IContextProviderMessages } from '.';
4
+ import type { SdkProvider } from '../api/aws-auth/private';
5
+ import type { ContextProviderPlugin } from '../api/plugin';
6
+ export declare class KeyContextProviderPlugin implements ContextProviderPlugin {
7
+ private readonly aws;
8
+ private readonly io;
9
+ constructor(aws: SdkProvider, io: IContextProviderMessages);
10
+ getValue(args: KeyContextQuery): Promise<KeyContextResponse>;
11
+ private findKey;
12
+ private readKeyProps;
13
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyContextProviderPlugin = void 0;
4
+ const private_1 = require("../api/aws-auth/private");
5
+ const toolkit_error_1 = require("../toolkit/toolkit-error");
6
+ class KeyContextProviderPlugin {
7
+ aws;
8
+ io;
9
+ constructor(aws, io) {
10
+ this.aws = aws;
11
+ this.io = io;
12
+ }
13
+ async getValue(args) {
14
+ const kms = (await (0, private_1.initContextProviderSdk)(this.aws, args)).kms();
15
+ const aliasListEntry = await this.findKey(kms, args);
16
+ return this.readKeyProps(aliasListEntry, args);
17
+ }
18
+ // TODO: use paginator function
19
+ async findKey(kms, args) {
20
+ await this.io.debug(`Listing keys in ${args.account}:${args.region}`);
21
+ let response;
22
+ let nextMarker;
23
+ do {
24
+ response = await kms.listAliases({
25
+ Marker: nextMarker,
26
+ });
27
+ const aliases = response.Aliases || [];
28
+ for (const alias of aliases) {
29
+ if (alias.AliasName == args.aliasName) {
30
+ return alias;
31
+ }
32
+ }
33
+ nextMarker = response.NextMarker;
34
+ } while (nextMarker);
35
+ const suppressError = 'ignoreErrorOnMissingContext' in args && args.ignoreErrorOnMissingContext;
36
+ const hasDummyKeyId = 'dummyValue' in args && typeof args.dummyValue === 'object' && args.dummyValue !== null && 'keyId' in args.dummyValue;
37
+ if (suppressError && hasDummyKeyId) {
38
+ const keyId = args.dummyValue.keyId;
39
+ return { TargetKeyId: keyId };
40
+ }
41
+ throw new toolkit_error_1.ContextProviderError(`Could not find any key with alias named ${args.aliasName}`);
42
+ }
43
+ async readKeyProps(alias, args) {
44
+ if (!alias.TargetKeyId) {
45
+ throw new toolkit_error_1.ContextProviderError(`Could not find any key with alias named ${args.aliasName}`);
46
+ }
47
+ await this.io.debug(`Key found ${alias.TargetKeyId}`);
48
+ return {
49
+ keyId: alias.TargetKeyId,
50
+ };
51
+ }
52
+ }
53
+ exports.KeyContextProviderPlugin = KeyContextProviderPlugin;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQWlFO0FBRWpFLDREQUFnRTtBQUVoRSxNQUFhLHdCQUF3QjtJQUNOO0lBQW1DO0lBQWhFLFlBQTZCLEdBQWdCLEVBQW1CLEVBQTRCO1FBQS9ELFFBQUcsR0FBSCxHQUFHLENBQWE7UUFBbUIsT0FBRSxHQUFGLEVBQUUsQ0FBMEI7SUFDNUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBcUI7UUFDekMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUEsZ0NBQXNCLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWpFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBZSxFQUFFLElBQXFCO1FBQzFELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdEUsSUFBSSxRQUFrQyxDQUFDO1FBQ3ZDLElBQUksVUFBOEIsQ0FBQztRQUNuQyxHQUFHLENBQUM7WUFDRixRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztZQUVELFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ25DLENBQUMsUUFBUSxVQUFVLEVBQUU7UUFFckIsTUFBTSxhQUFhLEdBQUcsNkJBQTZCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQywyQkFBc0MsQ0FBQztRQUMzRyxNQUFNLGFBQWEsR0FBRyxZQUFZLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUksSUFBSSxhQUFhLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLFVBQWdDLENBQUMsS0FBSyxDQUFDO1lBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBcUIsRUFBRSxJQUFxQjtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV0RCxPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyREQsNERBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBLZXlDb250ZXh0UmVzcG9uc2UgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBbGlhc0xpc3RFbnRyeSwgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWttcyc7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcyB9IGZyb20gJy4nO1xuaW1wb3J0IHR5cGUgeyBJS01TQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IGluaXRDb250ZXh0UHJvdmlkZXJTZGsgfSBmcm9tICcuLi9hcGkvYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyRXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgS2V5Q29udGV4dFByb3ZpZGVyUGx1Z2luIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLCBwcml2YXRlIHJlYWRvbmx5IGlvOiBJQ29udGV4dFByb3ZpZGVyTWVzc2FnZXMpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShhcmdzOiBLZXlDb250ZXh0UXVlcnkpIHtcbiAgICBjb25zdCBrbXMgPSAoYXdhaXQgaW5pdENvbnRleHRQcm92aWRlclNkayh0aGlzLmF3cywgYXJncykpLmttcygpO1xuXG4gICAgY29uc3QgYWxpYXNMaXN0RW50cnkgPSBhd2FpdCB0aGlzLmZpbmRLZXkoa21zLCBhcmdzKTtcblxuICAgIHJldHVybiB0aGlzLnJlYWRLZXlQcm9wcyhhbGlhc0xpc3RFbnRyeSwgYXJncyk7XG4gIH1cblxuICAvLyBUT0RPOiB1c2UgcGFnaW5hdG9yIGZ1bmN0aW9uXG4gIHByaXZhdGUgYXN5bmMgZmluZEtleShrbXM6IElLTVNDbGllbnQsIGFyZ3M6IEtleUNvbnRleHRRdWVyeSk6IFByb21pc2U8QWxpYXNMaXN0RW50cnk+IHtcbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBMaXN0aW5nIGtleXMgaW4gJHthcmdzLmFjY291bnR9OiR7YXJncy5yZWdpb259YCk7XG5cbiAgICBsZXQgcmVzcG9uc2U6IExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dDtcbiAgICBsZXQgbmV4dE1hcmtlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQga21zLmxpc3RBbGlhc2VzKHtcbiAgICAgICAgTWFya2VyOiBuZXh0TWFya2VyLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsaWFzZXMgPSByZXNwb25zZS5BbGlhc2VzIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiBhbGlhc2VzKSB7XG4gICAgICAgIGlmIChhbGlhcy5BbGlhc05hbWUgPT0gYXJncy5hbGlhc05hbWUpIHtcbiAgICAgICAgICByZXR1cm4gYWxpYXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV4dE1hcmtlciA9IHJlc3BvbnNlLk5leHRNYXJrZXI7XG4gICAgfSB3aGlsZSAobmV4dE1hcmtlcik7XG5cbiAgICBjb25zdCBzdXBwcmVzc0Vycm9yID0gJ2lnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCcgaW4gYXJncyAmJiBhcmdzLmlnbm9yZUVycm9yT25NaXNzaW5nQ29udGV4dCBhcyBib29sZWFuO1xuICAgIGNvbnN0IGhhc0R1bW15S2V5SWQgPSAnZHVtbXlWYWx1ZScgaW4gYXJncyAmJiB0eXBlb2YgYXJncy5kdW1teVZhbHVlID09PSAnb2JqZWN0JyAmJiBhcmdzLmR1bW15VmFsdWUgIT09IG51bGwgJiYgJ2tleUlkJyBpbiBhcmdzLmR1bW15VmFsdWU7XG4gICAgaWYgKHN1cHByZXNzRXJyb3IgJiYgaGFzRHVtbXlLZXlJZCkge1xuICAgICAgY29uc3Qga2V5SWQgPSAoYXJncy5kdW1teVZhbHVlIGFzIHsga2V5SWQ6IHN0cmluZyB9KS5rZXlJZDtcbiAgICAgIHJldHVybiB7IFRhcmdldEtleUlkOiBrZXlJZCB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFueSBrZXkgd2l0aCBhbGlhcyBuYW1lZCAke2FyZ3MuYWxpYXNOYW1lfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkS2V5UHJvcHMoYWxpYXM6IEFsaWFzTGlzdEVudHJ5LCBhcmdzOiBLZXlDb250ZXh0UXVlcnkpOiBQcm9taXNlPEtleUNvbnRleHRSZXNwb25zZT4ge1xuICAgIGlmICghYWxpYXMuVGFyZ2V0S2V5SWQpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgQ291bGQgbm90IGZpbmQgYW55IGtleSB3aXRoIGFsaWFzIG5hbWVkICR7YXJncy5hbGlhc05hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pby5kZWJ1ZyhgS2V5IGZvdW5kICR7YWxpYXMuVGFyZ2V0S2V5SWR9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5SWQ6IGFsaWFzLlRhcmdldEtleUlkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import type { LoadBalancerContextQuery, LoadBalancerListenerContextQuery } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { LoadBalancerContextResponse, LoadBalancerListenerContextResponse } from '@aws-cdk/cx-api';
3
+ import type { SdkProvider } from '../api/aws-auth/private';
4
+ import type { ContextProviderPlugin } from '../api/plugin';
5
+ /**
6
+ * Provides load balancer context information.
7
+ */
8
+ export declare class LoadBalancerContextProviderPlugin implements ContextProviderPlugin {
9
+ private readonly aws;
10
+ constructor(aws: SdkProvider);
11
+ getValue(query: LoadBalancerContextQuery): Promise<LoadBalancerContextResponse>;
12
+ }
13
+ /**
14
+ * Provides load balancer listener context information
15
+ */
16
+ export declare class LoadBalancerListenerContextProviderPlugin implements ContextProviderPlugin {
17
+ private readonly aws;
18
+ constructor(aws: SdkProvider);
19
+ getValue(query: LoadBalancerListenerContextQuery): Promise<LoadBalancerListenerContextResponse>;
20
+ }