@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,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiffFormatter = void 0;
4
+ const node_util_1 = require("node:util");
5
+ const cxschema = require("@aws-cdk/cloud-assembly-schema");
6
+ const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
7
+ const chalk = require("chalk");
8
+ const payloads_1 = require("../../payloads");
9
+ const private_1 = require("../io/private");
10
+ const streams_1 = require("../streams");
11
+ /**
12
+ * Class for formatting the diff output
13
+ */
14
+ class DiffFormatter {
15
+ ioHelper;
16
+ oldTemplate;
17
+ newTemplate;
18
+ stackName;
19
+ changeSet;
20
+ nestedStacks;
21
+ isImport;
22
+ /**
23
+ * Stores the TemplateDiffs that get calculated in this DiffFormatter,
24
+ * indexed by the stack name.
25
+ */
26
+ _diffs = {};
27
+ constructor(props) {
28
+ this.ioHelper = props.ioHelper;
29
+ this.oldTemplate = props.templateInfo.oldTemplate;
30
+ this.newTemplate = props.templateInfo.newTemplate;
31
+ this.stackName = props.templateInfo.newTemplate.displayName ?? props.templateInfo.newTemplate.stackName;
32
+ this.changeSet = props.templateInfo.changeSet;
33
+ this.nestedStacks = props.templateInfo.nestedStacks;
34
+ this.isImport = props.templateInfo.isImport ?? false;
35
+ }
36
+ get diffs() {
37
+ return this._diffs;
38
+ }
39
+ /**
40
+ * Get or creates the diff of a stack.
41
+ * If it creates the diff, it stores the result in a map for
42
+ * easier retreval later.
43
+ */
44
+ diff(stackName, oldTemplate) {
45
+ const realStackName = stackName ?? this.stackName;
46
+ if (!this._diffs[realStackName]) {
47
+ this._diffs[realStackName] = (0, cloudformation_diff_1.fullDiff)(oldTemplate ?? this.oldTemplate, this.newTemplate.template, this.changeSet, this.isImport);
48
+ }
49
+ return this._diffs[realStackName];
50
+ }
51
+ /**
52
+ * Return whether the diff has security-impacting changes that need confirmation.
53
+ *
54
+ * If no stackName is given, then the root stack name is used.
55
+ */
56
+ permissionType(stackName) {
57
+ const diff = this.diff(stackName);
58
+ if (diff.permissionsBroadened) {
59
+ return payloads_1.PermissionChangeType.BROADENING;
60
+ }
61
+ else if (diff.permissionsAnyChanges) {
62
+ return payloads_1.PermissionChangeType.NON_BROADENING;
63
+ }
64
+ else {
65
+ return payloads_1.PermissionChangeType.NONE;
66
+ }
67
+ }
68
+ /**
69
+ * Format the stack diff
70
+ */
71
+ formatStackDiff(options = {}) {
72
+ const ioDefaultHelper = new private_1.IoDefaultMessages(this.ioHelper);
73
+ return this.formatStackDiffHelper(this.oldTemplate, this.stackName, this.nestedStacks, {
74
+ ...options,
75
+ ioDefaultHelper,
76
+ });
77
+ }
78
+ formatStackDiffHelper(oldTemplate, stackName, nestedStackTemplates, options) {
79
+ let diff = this.diff(stackName, oldTemplate);
80
+ // The stack diff is formatted via `Formatter`, which takes in a stream
81
+ // and sends its output directly to that stream. To faciliate use of the
82
+ // global CliIoHost, we create our own stream to capture the output of
83
+ // `Formatter` and return the output as a string for the consumer of
84
+ // `formatStackDiff` to decide what to do with it.
85
+ const stream = new streams_1.StringWriteStream();
86
+ let numStacksWithChanges = 0;
87
+ let formattedDiff = '';
88
+ let filteredChangesCount = 0;
89
+ try {
90
+ // must output the stack name if there are differences, even if quiet
91
+ if (stackName && (!options.quiet || !diff.isEmpty)) {
92
+ stream.write((0, node_util_1.format)(`Stack ${chalk.bold(stackName)}\n`));
93
+ }
94
+ if (!options.quiet && this.isImport) {
95
+ stream.write('Parameters and rules created during migration do not affect resource configuration.\n');
96
+ }
97
+ // detect and filter out mangled characters from the diff
98
+ if (diff.differenceCount && !options.strict) {
99
+ const mangledNewTemplate = JSON.parse((0, cloudformation_diff_1.mangleLikeCloudFormation)(JSON.stringify(this.newTemplate.template)));
100
+ const mangledDiff = (0, cloudformation_diff_1.fullDiff)(this.oldTemplate, mangledNewTemplate, this.changeSet);
101
+ filteredChangesCount = Math.max(0, diff.differenceCount - mangledDiff.differenceCount);
102
+ if (filteredChangesCount > 0) {
103
+ diff = mangledDiff;
104
+ }
105
+ }
106
+ // filter out 'AWS::CDK::Metadata' resources from the template
107
+ // filter out 'CheckBootstrapVersion' rules from the template
108
+ if (!options.strict) {
109
+ obscureDiff(diff);
110
+ }
111
+ if (!diff.isEmpty) {
112
+ numStacksWithChanges++;
113
+ // formatDifferences updates the stream with the formatted stack diff
114
+ (0, cloudformation_diff_1.formatDifferences)(stream, diff, {
115
+ ...logicalIdMapFromTemplate(this.oldTemplate),
116
+ ...buildLogicalToPathMap(this.newTemplate),
117
+ }, options.context);
118
+ }
119
+ else if (!options.quiet) {
120
+ stream.write(chalk.green('There were no differences\n'));
121
+ }
122
+ if (filteredChangesCount > 0) {
123
+ stream.write(chalk.yellow(`Omitted ${filteredChangesCount} changes because they are likely mangled non-ASCII characters. Use --strict to print them.\n`));
124
+ }
125
+ }
126
+ finally {
127
+ // store the stream containing a formatted stack diff
128
+ formattedDiff = stream.toString();
129
+ stream.end();
130
+ }
131
+ for (const nestedStackLogicalId of Object.keys(nestedStackTemplates ?? {})) {
132
+ if (!nestedStackTemplates) {
133
+ break;
134
+ }
135
+ const nestedStack = nestedStackTemplates[nestedStackLogicalId];
136
+ this.newTemplate._template = nestedStack.generatedTemplate;
137
+ const nextDiff = this.formatStackDiffHelper(nestedStack.deployedTemplate, nestedStack.physicalName ?? nestedStackLogicalId, nestedStack.nestedStackTemplates, options);
138
+ numStacksWithChanges += nextDiff.numStacksWithChanges;
139
+ formattedDiff += nextDiff.formattedDiff;
140
+ }
141
+ return {
142
+ numStacksWithChanges,
143
+ formattedDiff,
144
+ };
145
+ }
146
+ /**
147
+ * Format the security diff
148
+ */
149
+ formatSecurityDiff() {
150
+ const diff = this.diff();
151
+ // The security diff is formatted via `Formatter`, which takes in a stream
152
+ // and sends its output directly to that stream. To faciliate use of the
153
+ // global CliIoHost, we create our own stream to capture the output of
154
+ // `Formatter` and return the output as a string for the consumer of
155
+ // `formatSecurityDiff` to decide what to do with it.
156
+ const stream = new streams_1.StringWriteStream();
157
+ stream.write((0, node_util_1.format)(`Stack ${chalk.bold(this.stackName)}\n`));
158
+ try {
159
+ // formatSecurityChanges updates the stream with the formatted security diff
160
+ (0, cloudformation_diff_1.formatSecurityChanges)(stream, diff, buildLogicalToPathMap(this.newTemplate));
161
+ }
162
+ finally {
163
+ stream.end();
164
+ }
165
+ // store the stream containing a formatted stack diff
166
+ const formattedDiff = stream.toString();
167
+ return { formattedDiff, permissionChangeType: this.permissionType() };
168
+ }
169
+ }
170
+ exports.DiffFormatter = DiffFormatter;
171
+ function buildLogicalToPathMap(stack) {
172
+ const map = {};
173
+ for (const md of stack.findMetadataByType(cxschema.ArtifactMetadataEntryType.LOGICAL_ID)) {
174
+ map[md.data] = md.path;
175
+ }
176
+ return map;
177
+ }
178
+ function logicalIdMapFromTemplate(template) {
179
+ const ret = {};
180
+ for (const [logicalId, resource] of Object.entries(template.Resources ?? {})) {
181
+ const path = resource?.Metadata?.['aws:cdk:path'];
182
+ if (path) {
183
+ ret[logicalId] = path;
184
+ }
185
+ }
186
+ return ret;
187
+ }
188
+ /**
189
+ * Remove any template elements that we don't want to show users.
190
+ * This is currently:
191
+ * - AWS::CDK::Metadata resource
192
+ * - CheckBootstrapVersion Rule
193
+ */
194
+ function obscureDiff(diff) {
195
+ if (diff.unknown) {
196
+ // see https://github.com/aws/aws-cdk/issues/17942
197
+ diff.unknown = diff.unknown.filter(change => {
198
+ if (!change) {
199
+ return true;
200
+ }
201
+ if (change.newValue?.CheckBootstrapVersion) {
202
+ return false;
203
+ }
204
+ if (change.oldValue?.CheckBootstrapVersion) {
205
+ return false;
206
+ }
207
+ return true;
208
+ });
209
+ }
210
+ if (diff.resources) {
211
+ diff.resources = diff.resources.filter(change => {
212
+ if (!change) {
213
+ return true;
214
+ }
215
+ if (change.newResourceType === 'AWS::CDK::Metadata') {
216
+ return false;
217
+ }
218
+ if (change.oldResourceType === 'AWS::CDK::Metadata') {
219
+ return false;
220
+ }
221
+ return true;
222
+ });
223
+ }
224
+ }
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaWZmLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBbUM7QUFDbkMsMkRBQTJEO0FBQzNELHNFQU1zQztBQUV0QywrQkFBK0I7QUFDL0IsNkNBQXNEO0FBR3RELDJDQUFrRDtBQUNsRCx3Q0FBK0M7QUF1SC9DOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBQ1AsUUFBUSxDQUFXO0lBQ25CLFdBQVcsQ0FBTTtJQUNqQixXQUFXLENBQW9DO0lBQy9DLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQU87SUFDaEIsWUFBWSxDQUF1RTtJQUNuRixRQUFRLENBQVU7SUFFbkM7OztPQUdHO0lBQ0ssTUFBTSxHQUFxQyxFQUFFLENBQUM7SUFFdEQsWUFBWSxLQUF5QjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN4RyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLElBQUksQ0FBQyxTQUFrQixFQUFFLFdBQWlCO1FBQ2hELE1BQU0sYUFBYSxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRWxELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFBLDhCQUFRLEVBQ25DLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFDekIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUFDLFNBQWtCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixPQUFPLCtCQUFvQixDQUFDLFVBQVUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN0QyxPQUFPLCtCQUFvQixDQUFDLGNBQWMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sK0JBQW9CLENBQUMsSUFBSSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsVUFBa0MsRUFBRTtRQUN6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLDJCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0IsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsWUFBWSxFQUNqQjtZQUNFLEdBQUcsT0FBTztZQUNWLGVBQWU7U0FDaEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUMzQixXQUFnQixFQUNoQixTQUFpQixFQUNqQixvQkFBMEYsRUFDMUYsT0FBaUM7UUFFakMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0MsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLGtEQUFrRDtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7UUFFdkMsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILHFFQUFxRTtZQUNyRSxJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsa0JBQU0sRUFBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO1lBQ3hHLENBQUM7WUFFRCx5REFBeUQ7WUFDekQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBQSw4Q0FBd0IsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRyxNQUFNLFdBQVcsR0FBRyxJQUFBLDhCQUFRLEVBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25GLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLG9CQUFvQixHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixJQUFJLEdBQUcsV0FBVyxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQztZQUVELDhEQUE4RDtZQUM5RCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixvQkFBb0IsRUFBRSxDQUFDO2dCQUV2QixxRUFBcUU7Z0JBQ3JFLElBQUEsdUNBQWlCLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtvQkFDOUIsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUM3QyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQzNDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsb0JBQW9CLDhGQUE4RixDQUFDLENBQUMsQ0FBQztZQUM1SixDQUFDO1FBQ0gsQ0FBQztnQkFBUyxDQUFDO1lBQ1QscURBQXFEO1lBQ3JELGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUVELEtBQUssTUFBTSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzFCLE1BQU07WUFDUixDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsV0FBbUIsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDekMsV0FBVyxDQUFDLGdCQUFnQixFQUM1QixXQUFXLENBQUMsWUFBWSxJQUFJLG9CQUFvQixFQUNoRCxXQUFXLENBQUMsb0JBQW9CLEVBQ2hDLE9BQU8sQ0FDUixDQUFDO1lBQ0Ysb0JBQW9CLElBQUksUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RELGFBQWEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzFDLENBQUM7UUFFRCxPQUFPO1lBQ0wsb0JBQW9CO1lBQ3BCLGFBQWE7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QiwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSxvRUFBb0U7UUFDcEUscURBQXFEO1FBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQWlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsa0JBQU0sRUFBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQztZQUNILDRFQUE0RTtZQUM1RSxJQUFBLDJDQUFxQixFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2YsQ0FBQztRQUNELHFEQUFxRDtRQUNyRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0NBQ0Y7QUFsTUQsc0NBa01DO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxLQUF3QztJQUNyRSxNQUFNLEdBQUcsR0FBNkIsRUFBRSxDQUFDO0lBQ3pDLEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3pGLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxRQUFhO0lBQzdDLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFFdkMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxHQUFJLFFBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWtCO0lBQ3JDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3BELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7XG4gIGZvcm1hdERpZmZlcmVuY2VzLFxuICBmb3JtYXRTZWN1cml0eUNoYW5nZXMsXG4gIGZ1bGxEaWZmLFxuICBtYW5nbGVMaWtlQ2xvdWRGb3JtYXRpb24sXG4gIHR5cGUgVGVtcGxhdGVEaWZmLFxufSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IFBlcm1pc3Npb25DaGFuZ2VUeXBlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElvRGVmYXVsdE1lc3NhZ2VzIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZVN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbXMnO1xuXG4vKipcbiAqIE91dHB1dCBvZiBmb3JtYXRTZWN1cml0eURpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgc2VjdXJpdHkgZGlmZlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwZXJtaXNzaW9uIGNoYW5nZXMgaW4gdGhlIHNlY3VyaXR5IGRpZmYuXG4gICAqIFRoZSBJb0hvc3Qgd2lsbCB1c2UgdGhpcyB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uQ2hhbmdlVHlwZTogUGVybWlzc2lvbkNoYW5nZVR5cGU7XG59XG5cbi8qKlxuICogT3V0cHV0IG9mIGZvcm1hdFN0YWNrRGlmZlxuICovXG5pbnRlcmZhY2UgRm9ybWF0U3RhY2tEaWZmT3V0cHV0IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzdGFja3Mgd2l0aCBkaWZmIGNoYW5nZXNcbiAgICovXG4gIHJlYWRvbmx5IG51bVN0YWNrc1dpdGhDaGFuZ2VzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGZvcm1hdHRlZCBkaWZmXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZWREaWZmOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEaWZmIEZvcm1hdHRlclxuICovXG5pbnRlcmZhY2UgRGlmZkZvcm1hdHRlclByb3BzIHtcbiAgLyoqXG4gICAqIEhlbHBlciBmb3IgdGhlIElvSG9zdCBjbGFzc1xuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIHRoZSBUZW1wbGF0ZSB0aGF0IGlzIGJlaW5nIGRpZmZlZC5cbiAgICogSW5jbHVkZXMgdGhlIG9sZC9jdXJyZW50IHN0YXRlIG9mIHRoZSBzdGFjayBhcyB3ZWxsIGFzIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZUluZm86IFRlbXBsYXRlSW5mbztcbn1cblxuLyoqXG4gKiBQUm9wZXJ0aWVzIHNwZWNpZmljIHRvIGZvcm1hdHRpbmcgdGhlIHN0YWNrIGRpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFN0YWNrRGlmZk9wdGlvbnMge1xuICAvKipcbiAgICogZG8gbm90IGZpbHRlciBvdXQgQVdTOjpDREs6Ok1ldGFkYXRhIG9yIFJ1bGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBsaW5lcyBvZiBjb250ZXh0IHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmXG4gICAqXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHNpbGVuY2VzIFxcJ1RoZXJlIHdlcmUgbm8gZGlmZmVyZW5jZXNcXCcgbWVzc2FnZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFJldXNhYmxlU3RhY2tEaWZmT3B0aW9ucyBleHRlbmRzIEZvcm1hdFN0YWNrRGlmZk9wdGlvbnMge1xuICByZWFkb25seSBpb0RlZmF1bHRIZWxwZXI6IElvRGVmYXVsdE1lc3NhZ2VzO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGEgdGVtcGxhdGUncyBvbGQvbmV3IHN0YXRlXG4gKiB0aGF0IGlzIHVzZWQgZm9yIGRpZmYuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBvbGQvZXhpc3RpbmcgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG9sZFRlbXBsYXRlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5ld1RlbXBsYXRlOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEEgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IHRvIGhlbHAgdGhlIGRpZmYgb3BlcmF0aW9uLlxuICAgKiBQcm9iYWJseSBjcmVhdGVkIHZpYSBgY3JlYXRlRGlmZkNoYW5nZVNldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlU2V0PzogYW55O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IGltcG9ydGVkIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbXBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgbmVzdGVkIHN0YWNrcyBpbmNsdWRlZCBpbiB0aGUgdGVtcGxhdGVcbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IG5lc3RlZFN0YWNrcz86IHtcbiAgICBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzO1xuICB9O1xufVxuXG4vKipcbiAqIENsYXNzIGZvciBmb3JtYXR0aW5nIHRoZSBkaWZmIG91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgRGlmZkZvcm1hdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9sZFRlbXBsYXRlOiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3VGVtcGxhdGU6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VTZXQ/OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmVzdGVkU3RhY2tzOiB7IFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0ltcG9ydDogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBUZW1wbGF0ZURpZmZzIHRoYXQgZ2V0IGNhbGN1bGF0ZWQgaW4gdGhpcyBEaWZmRm9ybWF0dGVyLFxuICAgKiBpbmRleGVkIGJ5IHRoZSBzdGFjayBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGlmZnM6IHsgW25hbWU6IHN0cmluZ106IFRlbXBsYXRlRGlmZiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IERpZmZGb3JtYXR0ZXJQcm9wcykge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBwcm9wcy5pb0hlbHBlcjtcbiAgICB0aGlzLm9sZFRlbXBsYXRlID0gcHJvcHMudGVtcGxhdGVJbmZvLm9sZFRlbXBsYXRlO1xuICAgIHRoaXMubmV3VGVtcGxhdGUgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGU7XG4gICAgdGhpcy5zdGFja05hbWUgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUuZGlzcGxheU5hbWUgPz8gcHJvcHMudGVtcGxhdGVJbmZvLm5ld1RlbXBsYXRlLnN0YWNrTmFtZTtcbiAgICB0aGlzLmNoYW5nZVNldCA9IHByb3BzLnRlbXBsYXRlSW5mby5jaGFuZ2VTZXQ7XG4gICAgdGhpcy5uZXN0ZWRTdGFja3MgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubmVzdGVkU3RhY2tzO1xuICAgIHRoaXMuaXNJbXBvcnQgPSBwcm9wcy50ZW1wbGF0ZUluZm8uaXNJbXBvcnQgPz8gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZzKCkge1xuICAgIHJldHVybiB0aGlzLl9kaWZmcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3IgY3JlYXRlcyB0aGUgZGlmZiBvZiBhIHN0YWNrLlxuICAgKiBJZiBpdCBjcmVhdGVzIHRoZSBkaWZmLCBpdCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIG1hcCBmb3JcbiAgICogZWFzaWVyIHJldHJldmFsIGxhdGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBkaWZmKHN0YWNrTmFtZT86IHN0cmluZywgb2xkVGVtcGxhdGU/OiBhbnkpIHtcbiAgICBjb25zdCByZWFsU3RhY2tOYW1lID0gc3RhY2tOYW1lID8/IHRoaXMuc3RhY2tOYW1lO1xuXG4gICAgaWYgKCF0aGlzLl9kaWZmc1tyZWFsU3RhY2tOYW1lXSkge1xuICAgICAgdGhpcy5fZGlmZnNbcmVhbFN0YWNrTmFtZV0gPSBmdWxsRGlmZihcbiAgICAgICAgb2xkVGVtcGxhdGUgPz8gdGhpcy5vbGRUZW1wbGF0ZSxcbiAgICAgICAgdGhpcy5uZXdUZW1wbGF0ZS50ZW1wbGF0ZSxcbiAgICAgICAgdGhpcy5jaGFuZ2VTZXQsXG4gICAgICAgIHRoaXMuaXNJbXBvcnQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGlmZnNbcmVhbFN0YWNrTmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGRpZmYgaGFzIHNlY3VyaXR5LWltcGFjdGluZyBjaGFuZ2VzIHRoYXQgbmVlZCBjb25maXJtYXRpb24uXG4gICAqXG4gICAqIElmIG5vIHN0YWNrTmFtZSBpcyBnaXZlbiwgdGhlbiB0aGUgcm9vdCBzdGFjayBuYW1lIGlzIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHBlcm1pc3Npb25UeXBlKHN0YWNrTmFtZT86IHN0cmluZyk6IFBlcm1pc3Npb25DaGFuZ2VUeXBlIHtcbiAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmKHN0YWNrTmFtZSk7XG5cbiAgICBpZiAoZGlmZi5wZXJtaXNzaW9uc0Jyb2FkZW5lZCkge1xuICAgICAgcmV0dXJuIFBlcm1pc3Npb25DaGFuZ2VUeXBlLkJST0FERU5JTkc7XG4gICAgfSBlbHNlIGlmIChkaWZmLnBlcm1pc3Npb25zQW55Q2hhbmdlcykge1xuICAgICAgcmV0dXJuIFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTl9CUk9BREVOSU5HO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9ORTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzdGFjayBkaWZmXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0U3RhY2tEaWZmKG9wdGlvbnM6IEZvcm1hdFN0YWNrRGlmZk9wdGlvbnMgPSB7fSk6IEZvcm1hdFN0YWNrRGlmZk91dHB1dCB7XG4gICAgY29uc3QgaW9EZWZhdWx0SGVscGVyID0gbmV3IElvRGVmYXVsdE1lc3NhZ2VzKHRoaXMuaW9IZWxwZXIpO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdFN0YWNrRGlmZkhlbHBlcihcbiAgICAgIHRoaXMub2xkVGVtcGxhdGUsXG4gICAgICB0aGlzLnN0YWNrTmFtZSxcbiAgICAgIHRoaXMubmVzdGVkU3RhY2tzLFxuICAgICAge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBpb0RlZmF1bHRIZWxwZXIsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFN0YWNrRGlmZkhlbHBlcihcbiAgICBvbGRUZW1wbGF0ZTogYW55LFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIG5lc3RlZFN0YWNrVGVtcGxhdGVzOiB7IFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiBSZXVzYWJsZVN0YWNrRGlmZk9wdGlvbnMsXG4gICkge1xuICAgIGxldCBkaWZmID0gdGhpcy5kaWZmKHN0YWNrTmFtZSwgb2xkVGVtcGxhdGUpO1xuXG4gICAgLy8gVGhlIHN0YWNrIGRpZmYgaXMgZm9ybWF0dGVkIHZpYSBgRm9ybWF0dGVyYCwgd2hpY2ggdGFrZXMgaW4gYSBzdHJlYW1cbiAgICAvLyBhbmQgc2VuZHMgaXRzIG91dHB1dCBkaXJlY3RseSB0byB0aGF0IHN0cmVhbS4gVG8gZmFjaWxpYXRlIHVzZSBvZiB0aGVcbiAgICAvLyBnbG9iYWwgQ2xpSW9Ib3N0LCB3ZSBjcmVhdGUgb3VyIG93biBzdHJlYW0gdG8gY2FwdHVyZSB0aGUgb3V0cHV0IG9mXG4gICAgLy8gYEZvcm1hdHRlcmAgYW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nIGZvciB0aGUgY29uc3VtZXIgb2ZcbiAgICAvLyBgZm9ybWF0U3RhY2tEaWZmYCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LlxuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuXG4gICAgbGV0IG51bVN0YWNrc1dpdGhDaGFuZ2VzID0gMDtcbiAgICBsZXQgZm9ybWF0dGVkRGlmZiA9ICcnO1xuICAgIGxldCBmaWx0ZXJlZENoYW5nZXNDb3VudCA9IDA7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG11c3Qgb3V0cHV0IHRoZSBzdGFjayBuYW1lIGlmIHRoZXJlIGFyZSBkaWZmZXJlbmNlcywgZXZlbiBpZiBxdWlldFxuICAgICAgaWYgKHN0YWNrTmFtZSAmJiAoIW9wdGlvbnMucXVpZXQgfHwgIWRpZmYuaXNFbXB0eSkpIHtcbiAgICAgICAgc3RyZWFtLndyaXRlKGZvcm1hdChgU3RhY2sgJHtjaGFsay5ib2xkKHN0YWNrTmFtZSl9XFxuYCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMucXVpZXQgJiYgdGhpcy5pc0ltcG9ydCkge1xuICAgICAgICBzdHJlYW0ud3JpdGUoJ1BhcmFtZXRlcnMgYW5kIHJ1bGVzIGNyZWF0ZWQgZHVyaW5nIG1pZ3JhdGlvbiBkbyBub3QgYWZmZWN0IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRldGVjdCBhbmQgZmlsdGVyIG91dCBtYW5nbGVkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZGlmZlxuICAgICAgaWYgKGRpZmYuZGlmZmVyZW5jZUNvdW50ICYmICFvcHRpb25zLnN0cmljdCkge1xuICAgICAgICBjb25zdCBtYW5nbGVkTmV3VGVtcGxhdGUgPSBKU09OLnBhcnNlKG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbihKU09OLnN0cmluZ2lmeSh0aGlzLm5ld1RlbXBsYXRlLnRlbXBsYXRlKSkpO1xuICAgICAgICBjb25zdCBtYW5nbGVkRGlmZiA9IGZ1bGxEaWZmKHRoaXMub2xkVGVtcGxhdGUsIG1hbmdsZWROZXdUZW1wbGF0ZSwgdGhpcy5jaGFuZ2VTZXQpO1xuICAgICAgICBmaWx0ZXJlZENoYW5nZXNDb3VudCA9IE1hdGgubWF4KDAsIGRpZmYuZGlmZmVyZW5jZUNvdW50IC0gbWFuZ2xlZERpZmYuZGlmZmVyZW5jZUNvdW50KTtcbiAgICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICAgIGRpZmYgPSBtYW5nbGVkRGlmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBmaWx0ZXIgb3V0ICdBV1M6OkNESzo6TWV0YWRhdGEnIHJlc291cmNlcyBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAgLy8gZmlsdGVyIG91dCAnQ2hlY2tCb290c3RyYXBWZXJzaW9uJyBydWxlcyBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAgaWYgKCFvcHRpb25zLnN0cmljdCkge1xuICAgICAgICBvYnNjdXJlRGlmZihkaWZmKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWZmLmlzRW1wdHkpIHtcbiAgICAgICAgbnVtU3RhY2tzV2l0aENoYW5nZXMrKztcblxuICAgICAgICAvLyBmb3JtYXREaWZmZXJlbmNlcyB1cGRhdGVzIHRoZSBzdHJlYW0gd2l0aCB0aGUgZm9ybWF0dGVkIHN0YWNrIGRpZmZcbiAgICAgICAgZm9ybWF0RGlmZmVyZW5jZXMoc3RyZWFtLCBkaWZmLCB7XG4gICAgICAgICAgLi4ubG9naWNhbElkTWFwRnJvbVRlbXBsYXRlKHRoaXMub2xkVGVtcGxhdGUpLFxuICAgICAgICAgIC4uLmJ1aWxkTG9naWNhbFRvUGF0aE1hcCh0aGlzLm5ld1RlbXBsYXRlKSxcbiAgICAgICAgfSwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMucXVpZXQpIHtcbiAgICAgICAgc3RyZWFtLndyaXRlKGNoYWxrLmdyZWVuKCdUaGVyZSB3ZXJlIG5vIGRpZmZlcmVuY2VzXFxuJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyZWRDaGFuZ2VzQ291bnQgPiAwKSB7XG4gICAgICAgIHN0cmVhbS53cml0ZShjaGFsay55ZWxsb3coYE9taXR0ZWQgJHtmaWx0ZXJlZENoYW5nZXNDb3VudH0gY2hhbmdlcyBiZWNhdXNlIHRoZXkgYXJlIGxpa2VseSBtYW5nbGVkIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBVc2UgLS1zdHJpY3QgdG8gcHJpbnQgdGhlbS5cXG5gKSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIHN0b3JlIHRoZSBzdHJlYW0gY29udGFpbmluZyBhIGZvcm1hdHRlZCBzdGFjayBkaWZmXG4gICAgICBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgICBzdHJlYW0uZW5kKCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuZXN0ZWRTdGFja0xvZ2ljYWxJZCBvZiBPYmplY3Qua2V5cyhuZXN0ZWRTdGFja1RlbXBsYXRlcyA/PyB7fSkpIHtcbiAgICAgIGlmICghbmVzdGVkU3RhY2tUZW1wbGF0ZXMpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWRTdGFjayA9IG5lc3RlZFN0YWNrVGVtcGxhdGVzW25lc3RlZFN0YWNrTG9naWNhbElkXTtcblxuICAgICAgKHRoaXMubmV3VGVtcGxhdGUgYXMgYW55KS5fdGVtcGxhdGUgPSBuZXN0ZWRTdGFjay5nZW5lcmF0ZWRUZW1wbGF0ZTtcbiAgICAgIGNvbnN0IG5leHREaWZmID0gdGhpcy5mb3JtYXRTdGFja0RpZmZIZWxwZXIoXG4gICAgICAgIG5lc3RlZFN0YWNrLmRlcGxveWVkVGVtcGxhdGUsXG4gICAgICAgIG5lc3RlZFN0YWNrLnBoeXNpY2FsTmFtZSA/PyBuZXN0ZWRTdGFja0xvZ2ljYWxJZCxcbiAgICAgICAgbmVzdGVkU3RhY2submVzdGVkU3RhY2tUZW1wbGF0ZXMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgICAgbnVtU3RhY2tzV2l0aENoYW5nZXMgKz0gbmV4dERpZmYubnVtU3RhY2tzV2l0aENoYW5nZXM7XG4gICAgICBmb3JtYXR0ZWREaWZmICs9IG5leHREaWZmLmZvcm1hdHRlZERpZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzLFxuICAgICAgZm9ybWF0dGVkRGlmZixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc2VjdXJpdHkgZGlmZlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFNlY3VyaXR5RGlmZigpOiBGb3JtYXRTZWN1cml0eURpZmZPdXRwdXQge1xuICAgIGNvbnN0IGRpZmYgPSB0aGlzLmRpZmYoKTtcblxuICAgIC8vIFRoZSBzZWN1cml0eSBkaWZmIGlzIGZvcm1hdHRlZCB2aWEgYEZvcm1hdHRlcmAsIHdoaWNoIHRha2VzIGluIGEgc3RyZWFtXG4gICAgLy8gYW5kIHNlbmRzIGl0cyBvdXRwdXQgZGlyZWN0bHkgdG8gdGhhdCBzdHJlYW0uIFRvIGZhY2lsaWF0ZSB1c2Ugb2YgdGhlXG4gICAgLy8gZ2xvYmFsIENsaUlvSG9zdCwgd2UgY3JlYXRlIG91ciBvd24gc3RyZWFtIHRvIGNhcHR1cmUgdGhlIG91dHB1dCBvZlxuICAgIC8vIGBGb3JtYXR0ZXJgIGFuZCByZXR1cm4gdGhlIG91dHB1dCBhcyBhIHN0cmluZyBmb3IgdGhlIGNvbnN1bWVyIG9mXG4gICAgLy8gYGZvcm1hdFNlY3VyaXR5RGlmZmAgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC5cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcblxuICAgIHN0cmVhbS53cml0ZShmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSl9XFxuYCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyB1cGRhdGVzIHRoZSBzdHJlYW0gd2l0aCB0aGUgZm9ybWF0dGVkIHNlY3VyaXR5IGRpZmZcbiAgICAgIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyhzdHJlYW0sIGRpZmYsIGJ1aWxkTG9naWNhbFRvUGF0aE1hcCh0aGlzLm5ld1RlbXBsYXRlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHN0cmVhbS5lbmQoKTtcbiAgICB9XG4gICAgLy8gc3RvcmUgdGhlIHN0cmVhbSBjb250YWluaW5nIGEgZm9ybWF0dGVkIHN0YWNrIGRpZmZcbiAgICBjb25zdCBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHsgZm9ybWF0dGVkRGlmZiwgcGVybWlzc2lvbkNoYW5nZVR5cGU6IHRoaXMucGVybWlzc2lvblR5cGUoKSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTG9naWNhbFRvUGF0aE1hcChzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSB7XG4gIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGZvciAoY29uc3QgbWQgb2Ygc3RhY2suZmluZE1ldGFkYXRhQnlUeXBlKGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCkpIHtcbiAgICBtYXBbbWQuZGF0YSBhcyBzdHJpbmddID0gbWQucGF0aDtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBsb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUodGVtcGxhdGU6IGFueSkge1xuICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHJlc291cmNlXSBvZiBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZS5SZXNvdXJjZXMgPz8ge30pKSB7XG4gICAgY29uc3QgcGF0aCA9IChyZXNvdXJjZSBhcyBhbnkpPy5NZXRhZGF0YT8uWydhd3M6Y2RrOnBhdGgnXTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcmV0W2xvZ2ljYWxJZF0gPSBwYXRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBhbnkgdGVtcGxhdGUgZWxlbWVudHMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNob3cgdXNlcnMuXG4gKiBUaGlzIGlzIGN1cnJlbnRseTpcbiAqIC0gQVdTOjpDREs6Ok1ldGFkYXRhIHJlc291cmNlXG4gKiAtIENoZWNrQm9vdHN0cmFwVmVyc2lvbiBSdWxlXG4gKi9cbmZ1bmN0aW9uIG9ic2N1cmVEaWZmKGRpZmY6IFRlbXBsYXRlRGlmZikge1xuICBpZiAoZGlmZi51bmtub3duKSB7XG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc5NDJcbiAgICBkaWZmLnVua25vd24gPSBkaWZmLnVua25vd24uZmlsdGVyKGNoYW5nZSA9PiB7XG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2UubmV3VmFsdWU/LkNoZWNrQm9vdHN0cmFwVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm9sZFZhbHVlPy5DaGVja0Jvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZGlmZi5yZXNvdXJjZXMpIHtcbiAgICBkaWZmLnJlc291cmNlcyA9IGRpZmYucmVzb3VyY2VzLmZpbHRlcihjaGFuZ2UgPT4ge1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm5ld1Jlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5vbGRSZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export * from './diff-formatter';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./diff-formatter"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaWZmLWZvcm1hdHRlcic7XG4iXX0=
@@ -0,0 +1,139 @@
1
+ import type * as cxapi from '@aws-cdk/cx-api';
2
+ import type { EnvironmentResources } from './environment-resources';
3
+ import type { StringWithoutPlaceholders } from './placeholders';
4
+ import type { SDK, SdkProvider } from '../aws-auth/private';
5
+ import { type IoHelper } from '../io/private';
6
+ /**
7
+ * Access particular AWS resources, based on information from the CX manifest
8
+ *
9
+ * It is not possible to grab direct access to AWS credentials; 9 times out of 10
10
+ * we have to allow for role assumption, and role assumption can only work if
11
+ * there is a CX Manifest that contains a role ARN.
12
+ *
13
+ * This class exists so new code isn't tempted to go and get SDK credentials directly.
14
+ */
15
+ export declare class EnvironmentAccess {
16
+ private readonly sdkProvider;
17
+ private readonly sdkCache;
18
+ private readonly environmentResources;
19
+ private readonly ioHelper;
20
+ constructor(sdkProvider: SdkProvider, toolkitStackName: string, ioHelper: IoHelper);
21
+ /**
22
+ * Resolves the environment for a stack.
23
+ */
24
+ resolveStackEnvironment(stack: cxapi.CloudFormationStackArtifact): Promise<cxapi.Environment>;
25
+ /**
26
+ * Get an SDK to access the given stack's environment for stack operations
27
+ *
28
+ * Will ask plugins for readonly credentials if available, use the default
29
+ * AWS credentials if not.
30
+ *
31
+ * Will assume the deploy role if configured on the stack. Check the default `deploy-role`
32
+ * policies to see what you can do with this role.
33
+ */
34
+ accessStackForReadOnlyStackOperations(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
35
+ /**
36
+ * Get an SDK to access the given stack's environment for stack operations
37
+ *
38
+ * Will ask plugins for mutating credentials if available, use the default AWS
39
+ * credentials if not. The `mode` parameter is only used for querying
40
+ * plugins.
41
+ *
42
+ * Will assume the deploy role if configured on the stack. Check the default `deploy-role`
43
+ * policies to see what you can do with this role.
44
+ */
45
+ accessStackForMutableStackOperations(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
46
+ /**
47
+ * Get an SDK to access the given stack's environment for environmental lookups
48
+ *
49
+ * Will use a plugin if available, use the default AWS credentials if not.
50
+ * The `mode` parameter is only used for querying plugins.
51
+ *
52
+ * Will assume the lookup role if configured on the stack. Check the default `lookup-role`
53
+ * policies to see what you can do with this role. It can generally read everything
54
+ * in the account that does not require KMS access.
55
+ *
56
+ * ---
57
+ *
58
+ * For backwards compatibility reasons, there are some scenarios that are handled here:
59
+ *
60
+ * 1. The lookup role may not exist (it was added in bootstrap stack version 7). If so:
61
+ * a. Return the default credentials if the default credentials are for the stack account
62
+ * (you will notice this as `isFallbackCredentials=true`).
63
+ * b. Throw an error if the default credentials are not for the stack account.
64
+ *
65
+ * 2. The lookup role may not have the correct permissions (for example, ReadOnlyAccess was added in
66
+ * bootstrap stack version 8); the stack will have a minimum version number on it.
67
+ * a. If it does not we throw an error which should be handled in the calling
68
+ * function (and fallback to use a different role, etc)
69
+ *
70
+ * Upon success, caller will have an SDK for the right account, which may or may not have
71
+ * the right permissions.
72
+ */
73
+ accessStackForLookup(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
74
+ /**
75
+ * Get an SDK to access the given stack's environment for reading stack attributes
76
+ *
77
+ * Will use a plugin if available, use the default AWS credentials if not.
78
+ * The `mode` parameter is only used for querying plugins.
79
+ *
80
+ * Will try to assume the lookup role if given, will use the regular stack operations
81
+ * access (deploy-role) otherwise. When calling this, you should assume that you will get
82
+ * the least privileged role, so don't try to use it for anything the `deploy-role`
83
+ * wouldn't be able to do. Also you cannot rely on being able to read encrypted anything.
84
+ */
85
+ accessStackForLookupBestEffort(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
86
+ /**
87
+ * Get an SDK to access the given stack's environment for stack operations
88
+ *
89
+ * Will use a plugin if available, use the default AWS credentials if not.
90
+ * The `mode` parameter is only used for querying plugins.
91
+ *
92
+ * Will assume the deploy role if configured on the stack. Check the default `deploy-role`
93
+ * policies to see what you can do with this role.
94
+ */
95
+ private accessStackForStackOperations;
96
+ /**
97
+ * Prepare an SDK for use in the given environment and optionally with a role assumed.
98
+ */
99
+ private prepareSdk;
100
+ private cachedSdkForEnvironment;
101
+ }
102
+ /**
103
+ * SDK obtained by assuming the deploy role
104
+ * for a given environment
105
+ */
106
+ export interface TargetEnvironment {
107
+ /**
108
+ * The SDK for the given environment
109
+ */
110
+ readonly sdk: SDK;
111
+ /**
112
+ * The resolved environment for the stack
113
+ * (no more 'unknown-account/unknown-region')
114
+ */
115
+ readonly resolvedEnvironment: cxapi.Environment;
116
+ /**
117
+ * Access class for environmental resources to help the deployment
118
+ */
119
+ readonly resources: EnvironmentResources;
120
+ /**
121
+ * Whether or not we assumed a role in the process of getting these credentials
122
+ */
123
+ readonly didAssumeRole: boolean;
124
+ /**
125
+ * Whether or not these are fallback credentials
126
+ *
127
+ * Fallback credentials means that assuming the intended role failed, but the
128
+ * base credentials happen to be for the right account so we just picked those
129
+ * and hope the future SDK calls succeed.
130
+ *
131
+ * This is a backwards compatibility mechanism from around the time we introduced
132
+ * deployment roles.
133
+ */
134
+ readonly isFallbackCredentials: boolean;
135
+ /**
136
+ * Replace environment placeholders according to the current environment
137
+ */
138
+ replacePlaceholders(x: string | undefined): Promise<StringWithoutPlaceholders | undefined>;
139
+ }