@aws-cdk/toolkit-lib 0.3.1 → 0.3.3

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 (367) hide show
  1. package/README.md +1 -1
  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/deploy/index.d.ts +1 -1
  7. package/lib/actions/deploy/index.js +1 -1
  8. package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
  9. package/lib/actions/deploy/private/deploy-options.js +1 -1
  10. package/lib/actions/deploy/private/helpers.d.ts +3 -2
  11. package/lib/actions/deploy/private/helpers.js +3 -3
  12. package/lib/actions/diff/private/helpers.d.ts +5 -9
  13. package/lib/actions/diff/private/helpers.js +6 -23
  14. package/lib/api/aws-auth/account-cache.d.ts +41 -0
  15. package/lib/api/aws-auth/account-cache.js +108 -0
  16. package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
  17. package/lib/api/aws-auth/awscli-compatible.js +250 -0
  18. package/lib/api/aws-auth/cached.d.ts +11 -0
  19. package/lib/api/aws-auth/cached.js +26 -0
  20. package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
  21. package/lib/api/aws-auth/credential-plugins.js +154 -0
  22. package/lib/api/aws-auth/private/index.d.ts +11 -0
  23. package/lib/api/aws-auth/private/index.js +37 -0
  24. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  25. package/lib/api/aws-auth/provider-caching.js +24 -0
  26. package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
  27. package/lib/api/aws-auth/proxy-agent.js +54 -0
  28. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  29. package/lib/api/aws-auth/sdk-logger.js +128 -0
  30. package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
  31. package/lib/api/aws-auth/sdk-provider.js +373 -0
  32. package/lib/api/aws-auth/sdk.d.ts +235 -0
  33. package/lib/api/aws-auth/sdk.js +391 -0
  34. package/lib/api/aws-auth/tracing.d.ts +11 -0
  35. package/lib/api/aws-auth/tracing.js +60 -0
  36. package/lib/api/aws-auth/types.d.ts +79 -1
  37. package/lib/api/aws-auth/types.js +74 -1
  38. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  39. package/lib/api/aws-auth/user-agent.js +20 -0
  40. package/lib/api/aws-auth/util.d.ts +6 -0
  41. package/lib/api/aws-auth/util.js +21 -0
  42. package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
  43. package/lib/api/bootstrap/bootstrap-environment.js +323 -0
  44. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  45. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  46. package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
  47. package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
  48. package/lib/api/bootstrap/index.d.ts +3 -0
  49. package/lib/api/bootstrap/index.js +23 -0
  50. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  51. package/lib/api/bootstrap/legacy-template.js +82 -0
  52. package/lib/api/cloud-assembly/environment.d.ts +43 -0
  53. package/lib/api/cloud-assembly/environment.js +127 -0
  54. package/lib/api/cloud-assembly/index.d.ts +1 -1
  55. package/lib/api/cloud-assembly/index.js +3 -3
  56. package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
  57. package/lib/api/cloud-assembly/private/context-aware-source.js +5 -5
  58. package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
  59. package/lib/api/cloud-assembly/private/prepare-source.js +14 -12
  60. package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
  61. package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
  62. package/lib/api/cloud-assembly/private/source-builder.js +10 -8
  63. package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
  64. package/lib/api/cloud-assembly/private/stack-assembly.js +10 -9
  65. package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
  66. package/lib/api/cloud-assembly/stack-assembly.js +139 -0
  67. package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
  68. package/lib/api/cloud-assembly/stack-collection.js +112 -0
  69. package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
  70. package/lib/api/cloud-assembly/stack-selector.js +62 -5
  71. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
  72. package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
  73. package/lib/api/cloudformation/index.d.ts +4 -0
  74. package/lib/api/cloudformation/index.js +21 -0
  75. package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
  76. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  77. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  78. package/lib/api/cloudformation/stack-helpers.js +163 -0
  79. package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
  80. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  81. package/lib/api/context.d.ts +40 -0
  82. package/lib/api/context.js +84 -0
  83. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  84. package/lib/api/deployments/asset-manifest-builder.js +33 -0
  85. package/lib/api/deployments/asset-publishing.d.ts +60 -0
  86. package/lib/api/deployments/asset-publishing.js +144 -0
  87. package/lib/api/deployments/assets.d.ts +11 -0
  88. package/lib/api/deployments/assets.js +109 -0
  89. package/lib/api/deployments/cfn-api.d.ts +145 -0
  90. package/lib/api/deployments/cfn-api.js +444 -0
  91. package/lib/api/deployments/checks.d.ts +9 -0
  92. package/lib/api/deployments/checks.js +72 -0
  93. package/lib/api/deployments/deploy-stack.d.ts +164 -0
  94. package/lib/api/deployments/deploy-stack.js +490 -0
  95. package/lib/api/deployments/deployment-method.d.ts +24 -0
  96. package/lib/api/deployments/deployment-method.js +3 -0
  97. package/lib/api/deployments/deployment-result.d.ts +21 -0
  98. package/lib/api/deployments/deployment-result.js +10 -0
  99. package/lib/api/deployments/deployments.d.ts +289 -0
  100. package/lib/api/deployments/deployments.js +355 -0
  101. package/lib/api/deployments/index.d.ts +6 -0
  102. package/lib/api/deployments/index.js +27 -0
  103. package/lib/api/diff/diff-formatter.d.ts +147 -0
  104. package/lib/api/diff/diff-formatter.js +225 -0
  105. package/lib/api/diff/index.d.ts +1 -0
  106. package/lib/api/diff/index.js +18 -0
  107. package/lib/api/environment/environment-access.d.ts +139 -0
  108. package/lib/api/environment/environment-access.js +205 -0
  109. package/lib/api/environment/environment-resources.d.ts +75 -0
  110. package/lib/api/environment/environment-resources.js +213 -0
  111. package/lib/api/environment/index.d.ts +3 -0
  112. package/lib/api/environment/index.js +20 -0
  113. package/lib/api/environment/placeholders.d.ts +10 -0
  114. package/lib/api/environment/placeholders.js +23 -0
  115. package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
  116. package/lib/api/garbage-collection/garbage-collector.js +614 -0
  117. package/lib/api/garbage-collection/index.d.ts +3 -0
  118. package/lib/api/garbage-collection/index.js +21 -0
  119. package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
  120. package/lib/api/garbage-collection/progress-printer.js +80 -0
  121. package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
  122. package/lib/api/garbage-collection/stack-refresh.js +152 -0
  123. package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
  124. package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
  125. package/lib/api/hotswap/code-build-projects.d.ts +4 -0
  126. package/lib/api/hotswap/code-build-projects.js +62 -0
  127. package/lib/api/hotswap/common.d.ts +89 -0
  128. package/lib/api/hotswap/common.js +137 -0
  129. package/lib/api/hotswap/ecs-services.d.ts +4 -0
  130. package/lib/api/hotswap/ecs-services.js +159 -0
  131. package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
  132. package/lib/api/hotswap/hotswap-deployments.js +441 -0
  133. package/lib/api/hotswap/index.d.ts +2 -0
  134. package/lib/api/hotswap/index.js +19 -0
  135. package/lib/api/hotswap/lambda-functions.d.ts +4 -0
  136. package/lib/api/hotswap/lambda-functions.js +297 -0
  137. package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
  138. package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
  139. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
  140. package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
  141. package/lib/api/index.d.ts +25 -0
  142. package/lib/api/index.js +42 -0
  143. package/lib/api/io/index.d.ts +3 -1
  144. package/lib/api/io/index.js +18 -1
  145. package/lib/api/io/io-host.d.ts +15 -0
  146. package/lib/api/io/io-host.js +3 -0
  147. package/lib/api/io/io-message.d.ts +76 -0
  148. package/lib/api/io/io-message.js +3 -0
  149. package/lib/api/io/private/index.d.ts +7 -1
  150. package/lib/api/io/private/index.js +8 -5
  151. package/lib/api/io/private/io-default-messages.d.ts +21 -0
  152. package/lib/api/io/private/io-default-messages.js +59 -0
  153. package/lib/api/io/private/io-helper.d.ts +32 -0
  154. package/lib/api/io/private/io-helper.js +51 -0
  155. package/lib/api/io/private/level-priority.d.ts +11 -0
  156. package/lib/api/io/private/level-priority.js +33 -0
  157. package/lib/api/io/private/message-maker.d.ts +89 -0
  158. package/lib/api/io/private/message-maker.js +60 -0
  159. package/lib/api/io/private/messages.d.ts +178 -0
  160. package/lib/api/io/private/messages.js +534 -0
  161. package/lib/api/io/private/span.d.ts +93 -0
  162. package/lib/api/io/private/span.js +87 -0
  163. package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
  164. package/lib/api/io/private/testing/fake-io-host.js +41 -0
  165. package/lib/api/io/private/testing/index.d.ts +2 -0
  166. package/lib/api/io/private/testing/index.js +19 -0
  167. package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
  168. package/lib/api/io/private/testing/test-io-host.js +61 -0
  169. package/lib/api/io/private/types.d.ts +4 -0
  170. package/lib/api/io/private/types.js +3 -0
  171. package/lib/api/io/toolkit-action.d.ts +4 -0
  172. package/lib/api/io/toolkit-action.js +3 -0
  173. package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
  174. package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
  175. package/lib/api/logs-monitor/index.d.ts +2 -0
  176. package/lib/api/logs-monitor/index.js +19 -0
  177. package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
  178. package/lib/api/logs-monitor/logs-monitor.js +194 -0
  179. package/lib/api/notices.d.ts +210 -0
  180. package/lib/api/notices.js +430 -0
  181. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  182. package/lib/api/plugin/context-provider-plugin.js +7 -0
  183. package/lib/api/plugin/index.d.ts +3 -0
  184. package/lib/api/plugin/index.js +20 -0
  185. package/lib/api/plugin/mode.d.ts +4 -0
  186. package/lib/api/plugin/mode.js +9 -0
  187. package/lib/api/plugin/plugin.d.ts +72 -0
  188. package/lib/api/plugin/plugin.js +132 -0
  189. package/lib/api/private.d.ts +1 -0
  190. package/lib/api/private.js +18 -0
  191. package/lib/api/refactoring/cloudformation.d.ts +15 -0
  192. package/lib/api/refactoring/cloudformation.js +3 -0
  193. package/lib/api/refactoring/digest.d.ts +26 -0
  194. package/lib/api/refactoring/digest.js +175 -0
  195. package/lib/api/refactoring/index.d.ts +51 -0
  196. package/lib/api/refactoring/index.js +223 -0
  197. package/lib/api/require-approval.d.ts +17 -0
  198. package/lib/api/require-approval.js +22 -0
  199. package/lib/api/resource-import/importer.d.ts +216 -0
  200. package/lib/api/resource-import/importer.js +331 -0
  201. package/lib/api/resource-import/index.d.ts +2 -0
  202. package/lib/api/resource-import/index.js +19 -0
  203. package/lib/api/resource-import/migrator.d.ts +26 -0
  204. package/lib/api/resource-import/migrator.js +73 -0
  205. package/lib/api/resource-metadata/index.d.ts +1 -0
  206. package/lib/api/resource-metadata/index.js +18 -0
  207. package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
  208. package/lib/api/resource-metadata/resource-metadata.js +42 -0
  209. package/lib/api/rwlock.d.ts +60 -0
  210. package/lib/api/rwlock.js +204 -0
  211. package/lib/api/settings.d.ts +26 -0
  212. package/lib/api/settings.js +107 -0
  213. package/lib/api/shared-private.d.ts +8 -5
  214. package/lib/api/shared-private.js +2921 -9246
  215. package/lib/api/shared-private.js.map +4 -4
  216. package/lib/api/shared-public.d.ts +179 -37
  217. package/lib/api/shared-public.js +3106 -16
  218. package/lib/api/shared-public.js.map +4 -4
  219. package/lib/api/stack-events/index.d.ts +4 -0
  220. package/lib/api/stack-events/index.js +23 -0
  221. package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
  222. package/lib/api/stack-events/stack-activity-monitor.js +164 -0
  223. package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
  224. package/lib/api/stack-events/stack-event-poller.js +130 -0
  225. package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
  226. package/lib/api/stack-events/stack-progress-monitor.js +98 -0
  227. package/lib/api/stack-events/stack-status.d.ts +42 -0
  228. package/lib/api/stack-events/stack-status.js +90 -0
  229. package/lib/api/streams.d.ts +7 -0
  230. package/lib/api/streams.js +24 -0
  231. package/lib/api/tags.d.ts +9 -0
  232. package/lib/api/tags.js +10 -0
  233. package/lib/api/toolkit-error.d.ts +86 -0
  234. package/lib/api/toolkit-error.js +132 -0
  235. package/lib/api/toolkit-info.d.ts +52 -0
  236. package/lib/api/toolkit-info.js +157 -0
  237. package/lib/api/tree.d.ts +31 -0
  238. package/lib/api/tree.js +37 -0
  239. package/lib/api/work-graph/index.d.ts +3 -0
  240. package/lib/api/work-graph/index.js +20 -0
  241. package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
  242. package/lib/api/work-graph/work-graph-builder.js +172 -0
  243. package/lib/api/work-graph/work-graph-types.d.ts +50 -0
  244. package/lib/api/work-graph/work-graph-types.js +13 -0
  245. package/lib/api/work-graph/work-graph.d.ts +72 -0
  246. package/lib/api/work-graph/work-graph.js +349 -0
  247. package/lib/context-providers/ami.d.ts +13 -0
  248. package/lib/context-providers/ami.js +52 -0
  249. package/lib/context-providers/availability-zones.d.ts +13 -0
  250. package/lib/context-providers/availability-zones.js +29 -0
  251. package/lib/context-providers/cc-api-provider.d.ts +30 -0
  252. package/lib/context-providers/cc-api-provider.js +145 -0
  253. package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
  254. package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
  255. package/lib/context-providers/hosted-zones.d.ts +12 -0
  256. package/lib/context-providers/hosted-zones.js +69 -0
  257. package/lib/context-providers/index.d.ts +44 -0
  258. package/lib/context-providers/index.js +128 -0
  259. package/lib/context-providers/keys.d.ts +13 -0
  260. package/lib/context-providers/keys.js +54 -0
  261. package/lib/context-providers/load-balancers.d.ts +20 -0
  262. package/lib/context-providers/load-balancers.js +161 -0
  263. package/lib/context-providers/security-groups.d.ts +9 -0
  264. package/lib/context-providers/security-groups.js +69 -0
  265. package/lib/context-providers/ssm-parameters.d.ts +25 -0
  266. package/lib/context-providers/ssm-parameters.js +61 -0
  267. package/lib/context-providers/vpcs.d.ts +13 -0
  268. package/lib/context-providers/vpcs.js +291 -0
  269. package/lib/index.d.ts +1 -0
  270. package/lib/index.js +2 -1
  271. package/lib/index_bg.wasm +0 -0
  272. package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
  273. package/lib/payloads/bootstrap-environment-progress.js +3 -0
  274. package/lib/payloads/context.d.ts +9 -0
  275. package/lib/payloads/context.js +3 -0
  276. package/lib/payloads/deploy.d.ts +43 -0
  277. package/lib/payloads/deploy.js +3 -0
  278. package/lib/payloads/destroy.d.ts +23 -0
  279. package/lib/payloads/destroy.js +3 -0
  280. package/lib/payloads/diff.d.ts +31 -0
  281. package/lib/payloads/diff.js +22 -0
  282. package/lib/payloads/hotswap.d.ts +211 -0
  283. package/lib/payloads/hotswap.js +43 -0
  284. package/lib/payloads/index.d.ts +17 -0
  285. package/lib/payloads/index.js +34 -0
  286. package/lib/payloads/list.d.ts +4 -0
  287. package/lib/payloads/list.js +3 -0
  288. package/lib/payloads/logs-monitor.d.ts +33 -0
  289. package/lib/payloads/logs-monitor.js +3 -0
  290. package/lib/payloads/progress.d.ts +14 -0
  291. package/lib/payloads/progress.js +3 -0
  292. package/lib/payloads/refactor.d.ts +14 -0
  293. package/lib/payloads/refactor.js +3 -0
  294. package/lib/payloads/rollback.d.ts +17 -0
  295. package/lib/payloads/rollback.js +3 -0
  296. package/lib/payloads/sdk-trace.d.ts +20 -0
  297. package/lib/payloads/sdk-trace.js +3 -0
  298. package/lib/payloads/stack-activity.d.ts +53 -0
  299. package/lib/payloads/stack-activity.js +3 -0
  300. package/lib/payloads/stack-details.d.ts +17 -0
  301. package/lib/payloads/stack-details.js +3 -0
  302. package/lib/payloads/synth.d.ts +7 -0
  303. package/lib/payloads/synth.js +3 -0
  304. package/lib/payloads/types.d.ts +95 -0
  305. package/lib/payloads/types.js +3 -0
  306. package/lib/payloads/watch.d.ts +27 -0
  307. package/lib/payloads/watch.js +3 -0
  308. package/lib/private/activity-printer/base.d.ts +50 -0
  309. package/lib/private/activity-printer/base.js +120 -0
  310. package/lib/private/activity-printer/current.d.ts +26 -0
  311. package/lib/private/activity-printer/current.js +122 -0
  312. package/lib/private/activity-printer/display.d.ts +13 -0
  313. package/lib/private/activity-printer/display.js +81 -0
  314. package/lib/private/activity-printer/history.d.ts +32 -0
  315. package/lib/private/activity-printer/history.js +109 -0
  316. package/lib/private/activity-printer/index.d.ts +3 -0
  317. package/lib/private/activity-printer/index.js +20 -0
  318. package/lib/private/index.d.ts +1 -0
  319. package/lib/private/index.js +18 -0
  320. package/lib/private/util.d.ts +1 -1
  321. package/lib/private/util.js +22 -22
  322. package/lib/private/util.js.map +2 -2
  323. package/lib/toolkit/private/index.d.ts +2 -0
  324. package/lib/toolkit/private/index.js +1 -1
  325. package/lib/toolkit/toolkit.d.ts +16 -0
  326. package/lib/toolkit/toolkit.js +158 -124
  327. package/lib/toolkit/types.d.ts +0 -55
  328. package/lib/toolkit/types.js +1 -1
  329. package/lib/util/archive.d.ts +1 -0
  330. package/lib/util/archive.js +86 -0
  331. package/lib/util/arrays.d.ts +14 -0
  332. package/lib/util/arrays.js +36 -0
  333. package/lib/util/bool.d.ts +7 -0
  334. package/lib/util/bool.js +13 -0
  335. package/lib/util/bytes.d.ts +8 -0
  336. package/lib/util/bytes.js +21 -0
  337. package/lib/util/cloudformation.d.ts +16 -0
  338. package/lib/util/cloudformation.js +36 -0
  339. package/lib/util/content-hash.d.ts +5 -0
  340. package/lib/util/content-hash.js +43 -0
  341. package/lib/util/directories.d.ts +22 -0
  342. package/lib/util/directories.js +59 -0
  343. package/lib/util/format-error.d.ts +9 -0
  344. package/lib/util/format-error.js +22 -0
  345. package/lib/util/index.d.ts +18 -0
  346. package/lib/util/index.js +35 -0
  347. package/lib/util/json.d.ts +48 -0
  348. package/lib/util/json.js +68 -0
  349. package/lib/util/objects.d.ts +65 -0
  350. package/lib/util/objects.js +230 -0
  351. package/lib/util/package-info.d.ts +3 -0
  352. package/lib/util/package-info.js +22 -0
  353. package/lib/util/parallel.d.ts +6 -0
  354. package/lib/util/parallel.js +48 -0
  355. package/lib/util/serialize.d.ts +27 -0
  356. package/lib/util/serialize.js +86 -0
  357. package/lib/util/string-manipulation.d.ts +18 -0
  358. package/lib/util/string-manipulation.js +46 -0
  359. package/lib/util/type-brands.d.ts +39 -0
  360. package/lib/util/type-brands.js +39 -0
  361. package/lib/util/types.d.ts +27 -0
  362. package/lib/util/types.js +25 -0
  363. package/lib/util/version-range.d.ts +2 -0
  364. package/lib/util/version-range.js +36 -0
  365. package/lib/util/yaml-cfn.d.ts +15 -0
  366. package/lib/util/yaml-cfn.js +58 -0
  367. package/package.json +12 -13
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsCliCompatible = void 0;
4
+ exports.makeRequestHandler = makeRequestHandler;
5
+ const node_util_1 = require("node:util");
6
+ const credential_providers_1 = require("@aws-sdk/credential-providers");
7
+ const ec2_metadata_service_1 = require("@aws-sdk/ec2-metadata-service");
8
+ const shared_ini_file_loader_1 = require("@smithy/shared-ini-file-loader");
9
+ const promptly = require("promptly");
10
+ const provider_caching_1 = require("./provider-caching");
11
+ const proxy_agent_1 = require("./proxy-agent");
12
+ const private_1 = require("../io/private");
13
+ const toolkit_error_1 = require("../toolkit-error");
14
+ const DEFAULT_CONNECTION_TIMEOUT = 10000;
15
+ const DEFAULT_TIMEOUT = 300000;
16
+ /**
17
+ * Behaviors to match AWS CLI
18
+ *
19
+ * See these links:
20
+ *
21
+ * https://docs.aws.amazon.com/cli/latest/topic/config-vars.html
22
+ * https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
23
+ */
24
+ class AwsCliCompatible {
25
+ ioHelper;
26
+ requestHandler;
27
+ logger;
28
+ constructor(ioHelper, requestHandler, logger) {
29
+ this.ioHelper = ioHelper;
30
+ this.requestHandler = requestHandler;
31
+ this.logger = logger;
32
+ }
33
+ async baseConfig(profile) {
34
+ const credentialProvider = await this.credentialChainBuilder({
35
+ profile,
36
+ logger: this.logger,
37
+ });
38
+ const defaultRegion = await this.region(profile);
39
+ return { credentialProvider, defaultRegion };
40
+ }
41
+ /**
42
+ * Build an AWS CLI-compatible credential chain provider
43
+ *
44
+ * The credential chain returned by this function is always caching.
45
+ */
46
+ async credentialChainBuilder(options = {}) {
47
+ const clientConfig = {
48
+ requestHandler: this.requestHandler,
49
+ customUserAgent: 'aws-cdk',
50
+ logger: options.logger,
51
+ };
52
+ // Super hacky solution to https://github.com/aws/aws-cdk/issues/32510, proposed by the SDK team.
53
+ //
54
+ // Summary of the problem: we were reading the region from the config file and passing it to
55
+ // the credential providers. However, in the case of SSO, this makes the credential provider
56
+ // use that region to do the SSO flow, which is incorrect. The region that should be used for
57
+ // that is the one set in the sso_session section of the config file.
58
+ //
59
+ // The idea here: the "clientConfig" is for configuring the inner auth client directly,
60
+ // and has the highest priority, whereas "parentClientConfig" is the upper data client
61
+ // and has lower priority than the sso_region but still higher priority than STS global region.
62
+ const parentClientConfig = {
63
+ region: await this.region(options.profile),
64
+ };
65
+ /**
66
+ * The previous implementation matched AWS CLI behavior:
67
+ *
68
+ * If a profile is explicitly set using `--profile`,
69
+ * we use that to the exclusion of everything else.
70
+ *
71
+ * Note: this does not apply to AWS_PROFILE,
72
+ * environment credentials still take precedence over AWS_PROFILE
73
+ */
74
+ if (options.profile) {
75
+ return (0, provider_caching_1.makeCachingProvider)((0, credential_providers_1.fromIni)({
76
+ profile: options.profile,
77
+ ignoreCache: true,
78
+ mfaCodeProvider: this.tokenCodeFn.bind(this),
79
+ clientConfig,
80
+ parentClientConfig,
81
+ logger: options.logger,
82
+ }));
83
+ }
84
+ const envProfile = process.env.AWS_PROFILE || process.env.AWS_DEFAULT_PROFILE;
85
+ /**
86
+ * Env AWS - EnvironmentCredentials with string AWS
87
+ * Env Amazon - EnvironmentCredentials with string AMAZON
88
+ * Profile Credentials - PatchedSharedIniFileCredentials with implicit profile, credentials file, http options, and token fn
89
+ * SSO with implicit profile only
90
+ * SharedIniFileCredentials with implicit profile and preferStaticCredentials true (profile with source_profile)
91
+ * Shared Credential file that points to Environment Credentials with AWS prefix
92
+ * Shared Credential file that points to EC2 Metadata
93
+ * Shared Credential file that points to ECS Credentials
94
+ * SSO Credentials - SsoCredentials with implicit profile and http options
95
+ * ProcessCredentials with implicit profile
96
+ * ECS Credentials - ECSCredentials with no input OR Web Identity - TokenFileWebIdentityCredentials with no input OR EC2 Metadata - EC2MetadataCredentials with no input
97
+ *
98
+ * These translate to:
99
+ * fromEnv()
100
+ * fromSSO()/fromIni()
101
+ * fromProcess()
102
+ * fromContainerMetadata()
103
+ * fromTokenFile()
104
+ * fromInstanceMetadata()
105
+ *
106
+ * The NodeProviderChain is already cached.
107
+ */
108
+ const nodeProviderChain = (0, credential_providers_1.fromNodeProviderChain)({
109
+ profile: envProfile,
110
+ clientConfig,
111
+ parentClientConfig,
112
+ logger: options.logger,
113
+ mfaCodeProvider: this.tokenCodeFn.bind(this),
114
+ ignoreCache: true,
115
+ });
116
+ return shouldPrioritizeEnv()
117
+ ? (0, credential_providers_1.createCredentialChain)((0, credential_providers_1.fromEnv)(), nodeProviderChain).expireAfter(60 * 60_000)
118
+ : nodeProviderChain;
119
+ }
120
+ /**
121
+ * Attempts to get the region from a number of sources and falls back to us-east-1 if no region can be found,
122
+ * as is done in the AWS CLI.
123
+ *
124
+ * The order of priority is the following:
125
+ *
126
+ * 1. Environment variables specifying region, with both an AWS prefix and AMAZON prefix
127
+ * to maintain backwards compatibility, and without `DEFAULT` in the name because
128
+ * Lambda and CodeBuild set the $AWS_REGION variable.
129
+ * 2. Regions listed in the Shared Ini Files - First checking for the profile provided
130
+ * and then checking for the default profile.
131
+ * 3. IMDS instance identity region from the Metadata Service.
132
+ * 4. us-east-1
133
+ */
134
+ async region(maybeProfile) {
135
+ const defaultRegion = 'us-east-1';
136
+ const profile = maybeProfile || process.env.AWS_PROFILE || process.env.AWS_DEFAULT_PROFILE || 'default';
137
+ const region = process.env.AWS_REGION ||
138
+ process.env.AMAZON_REGION ||
139
+ process.env.AWS_DEFAULT_REGION ||
140
+ process.env.AMAZON_DEFAULT_REGION ||
141
+ (await this.getRegionFromIni(profile)) ||
142
+ (await this.regionFromMetadataService());
143
+ if (!region) {
144
+ const usedProfile = !profile ? '' : ` (profile: "${profile}")`;
145
+ await this.ioHelper.notify(private_1.IO.DEFAULT_SDK_DEBUG.msg(`Unable to determine AWS region from environment or AWS configuration${usedProfile}, defaulting to '${defaultRegion}'`));
146
+ return defaultRegion;
147
+ }
148
+ return region;
149
+ }
150
+ /**
151
+ * The MetadataService class will attempt to fetch the instance identity document from
152
+ * IMDSv2 first, and then will attempt v1 as a fallback.
153
+ *
154
+ * If this fails, we will use us-east-1 as the region so no error should be thrown.
155
+ * @returns The region for the instance identity
156
+ */
157
+ async regionFromMetadataService() {
158
+ await this.ioHelper.notify(private_1.IO.DEFAULT_SDK_DEBUG.msg('Looking up AWS region in the EC2 Instance Metadata Service (IMDS).'));
159
+ try {
160
+ const metadataService = new ec2_metadata_service_1.MetadataService({
161
+ httpOptions: {
162
+ timeout: 1000,
163
+ },
164
+ });
165
+ await metadataService.fetchMetadataToken();
166
+ const document = await metadataService.request('/latest/dynamic/instance-identity/document', {});
167
+ return JSON.parse(document).region;
168
+ }
169
+ catch (e) {
170
+ await this.ioHelper.notify(private_1.IO.DEFAULT_SDK_DEBUG.msg(`Unable to retrieve AWS region from IMDS: ${e}`));
171
+ }
172
+ }
173
+ /**
174
+ * Looks up the region of the provided profile. If no region is present,
175
+ * it will attempt to lookup the default region.
176
+ * @param profile The profile to use to lookup the region
177
+ * @returns The region for the profile or default profile, if present. Otherwise returns undefined.
178
+ */
179
+ async getRegionFromIni(profile) {
180
+ const sharedFiles = await (0, shared_ini_file_loader_1.loadSharedConfigFiles)({ ignoreCache: true });
181
+ // Priority:
182
+ //
183
+ // credentials come before config because aws-cli v1 behaves like that.
184
+ //
185
+ // 1. profile-region-in-credentials
186
+ // 2. profile-region-in-config
187
+ // 3. default-region-in-credentials
188
+ // 4. default-region-in-config
189
+ return this.getRegionFromIniFile(profile, sharedFiles.credentialsFile)
190
+ ?? this.getRegionFromIniFile(profile, sharedFiles.configFile)
191
+ ?? this.getRegionFromIniFile('default', sharedFiles.credentialsFile)
192
+ ?? this.getRegionFromIniFile('default', sharedFiles.configFile);
193
+ }
194
+ getRegionFromIniFile(profile, data) {
195
+ return data?.[profile]?.region;
196
+ }
197
+ /**
198
+ * Ask user for MFA token for given serial
199
+ *
200
+ * Result is send to callback function for SDK to authorize the request
201
+ */
202
+ async tokenCodeFn(serialArn) {
203
+ const debugFn = (msg, ...args) => this.ioHelper.notify(private_1.IO.DEFAULT_SDK_DEBUG.msg((0, node_util_1.format)(msg, ...args)));
204
+ await debugFn('Require MFA token for serial ARN', serialArn);
205
+ try {
206
+ const token = await promptly.prompt(`MFA token for ${serialArn}: `, {
207
+ trim: true,
208
+ default: '',
209
+ });
210
+ await debugFn('Successfully got MFA token from user');
211
+ return token;
212
+ }
213
+ catch (err) {
214
+ await debugFn('Failed to get MFA token', err);
215
+ const e = new toolkit_error_1.AuthenticationError(`Error fetching MFA token: ${err.message ?? err}`);
216
+ e.name = 'SharedIniFileCredentialsProviderFailure';
217
+ throw e;
218
+ }
219
+ }
220
+ }
221
+ exports.AwsCliCompatible = AwsCliCompatible;
222
+ /**
223
+ * We used to support both AWS and AMAZON prefixes for these environment variables.
224
+ *
225
+ * Adding this for backward compatibility.
226
+ */
227
+ function shouldPrioritizeEnv() {
228
+ const id = process.env.AWS_ACCESS_KEY_ID || process.env.AMAZON_ACCESS_KEY_ID;
229
+ const key = process.env.AWS_SECRET_ACCESS_KEY || process.env.AMAZON_SECRET_ACCESS_KEY;
230
+ if (!!id && !!key) {
231
+ process.env.AWS_ACCESS_KEY_ID = id;
232
+ process.env.AWS_SECRET_ACCESS_KEY = key;
233
+ const sessionToken = process.env.AWS_SESSION_TOKEN ?? process.env.AMAZON_SESSION_TOKEN;
234
+ if (sessionToken) {
235
+ process.env.AWS_SESSION_TOKEN = sessionToken;
236
+ }
237
+ return true;
238
+ }
239
+ return false;
240
+ }
241
+ async function makeRequestHandler(ioHelper, options = {}) {
242
+ const agent = await new proxy_agent_1.ProxyAgentProvider(ioHelper).create(options);
243
+ return {
244
+ connectionTimeout: DEFAULT_CONNECTION_TIMEOUT,
245
+ requestTimeout: DEFAULT_TIMEOUT,
246
+ httpsAgent: agent,
247
+ httpAgent: agent,
248
+ };
249
+ }
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3NjbGktY29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnUkEsZ0RBU0M7QUF6UkQseUNBQW1DO0FBQ25DLHdFQUErRztBQUMvRyx3RUFBZ0U7QUFFaEUsMkVBQXVFO0FBRXZFLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQsK0NBQW1EO0FBRW5ELDJDQUFrRDtBQUNsRCxvREFBdUQ7QUFFdkQsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUM7QUFDekMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9COzs7Ozs7O0dBT0c7QUFDSCxNQUFhLGdCQUFnQjtJQUNWLFFBQVEsQ0FBVztJQUNuQixjQUFjLENBQXlCO0lBQ3ZDLE1BQU0sQ0FBVTtJQUVqQyxZQUFtQixRQUFrQixFQUFFLGNBQXNDLEVBQUUsTUFBZTtRQUM1RixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFnQjtRQUN0QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQzNELE9BQU87WUFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsVUFBa0MsRUFBRTtRQUVwQyxNQUFNLFlBQVksR0FBRztZQUNuQixjQUFjLEVBQUUsSUFBSSxD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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGNyZWF0ZUNyZWRlbnRpYWxDaGFpbiwgZnJvbUVudiwgZnJvbUluaSwgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnQGF3cy1zZGsvZWMyLW1ldGFkYXRhLXNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcic7XG5pbXBvcnQgeyBsb2FkU2hhcmVkQ29uZmlnRmlsZXMgfSBmcm9tICdAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXInO1xuaW1wb3J0IHR5cGUgeyBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciwgTG9nZ2VyIH0gZnJvbSAnQHNtaXRoeS90eXBlcyc7XG5pbXBvcnQgKiBhcyBwcm9tcHRseSBmcm9tICdwcm9tcHRseSc7XG5pbXBvcnQgeyBtYWtlQ2FjaGluZ1Byb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlci1jYWNoaW5nJztcbmltcG9ydCB7IFByb3h5QWdlbnRQcm92aWRlciB9IGZyb20gJy4vcHJveHktYWdlbnQnO1xuaW1wb3J0IHR5cGUgeyBTZGtIdHRwT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uRXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuY29uc3QgREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwMDAwMDtcblxuLyoqXG4gKiBCZWhhdmlvcnMgdG8gbWF0Y2ggQVdTIENMSVxuICpcbiAqIFNlZSB0aGVzZSBsaW5rczpcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC90b3BpYy9jb25maWctdmFycy5odG1sXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1lbnZ2YXJzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0NsaUNvbXBhdGlibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0SGFuZGxlcjogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI/OiBMb2dnZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGlvSGVscGVyOiBJb0hlbHBlciwgcmVxdWVzdEhhbmRsZXI6IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMsIGxvZ2dlcj86IExvZ2dlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyID0gcmVxdWVzdEhhbmRsZXI7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYmFzZUNvbmZpZyhwcm9maWxlPzogc3RyaW5nKTogUHJvbWlzZTx7IGNyZWRlbnRpYWxQcm92aWRlcjogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI7IGRlZmF1bHRSZWdpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbFByb3ZpZGVyID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKHtcbiAgICAgIHByb2ZpbGUsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRSZWdpb24gPSBhd2FpdCB0aGlzLnJlZ2lvbihwcm9maWxlKTtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsUHJvdmlkZXIsIGRlZmF1bHRSZWdpb24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBBV1MgQ0xJLWNvbXBhdGlibGUgY3JlZGVudGlhbCBjaGFpbiBwcm92aWRlclxuICAgKlxuICAgKiBUaGUgY3JlZGVudGlhbCBjaGFpbiByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWNoaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoXG4gICAgb3B0aW9uczogQ3JlZGVudGlhbENoYWluT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyPiB7XG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0ge1xuICAgICAgcmVxdWVzdEhhbmRsZXI6IHRoaXMucmVxdWVzdEhhbmRsZXIsXG4gICAgICBjdXN0b21Vc2VyQWdlbnQ6ICdhd3MtY2RrJyxcbiAgICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIsXG4gICAgfTtcblxuICAgIC8vIFN1cGVyIGhhY2t5IHNvbHV0aW9uIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMzI1MTAsIHByb3Bvc2VkIGJ5IHRoZSBTREsgdGVhbS5cbiAgICAvL1xuICAgIC8vIFN1bW1hcnkgb2YgdGhlIHByb2JsZW06IHdlIHdlcmUgcmVhZGluZyB0aGUgcmVnaW9uIGZyb20gdGhlIGNvbmZpZyBmaWxlIGFuZCBwYXNzaW5nIGl0IHRvXG4gICAgLy8gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJzLiBIb3dldmVyLCBpbiB0aGUgY2FzZSBvZiBTU08sIHRoaXMgbWFrZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXJcbiAgICAvLyB1c2UgdGhhdCByZWdpb24gdG8gZG8gdGhlIFNTTyBmbG93LCB3aGljaCBpcyBpbmNvcnJlY3QuIFRoZSByZWdpb24gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3JcbiAgICAvLyB0aGF0IGlzIHRoZSBvbmUgc2V0IGluIHRoZSBzc29fc2Vzc2lvbiBzZWN0aW9uIG9mIHRoZSBjb25maWcgZmlsZS5cbiAgICAvL1xuICAgIC8vIFRoZSBpZGVhIGhlcmU6IHRoZSBcImNsaWVudENvbmZpZ1wiIGlzIGZvciBjb25maWd1cmluZyB0aGUgaW5uZXIgYXV0aCBjbGllbnQgZGlyZWN0bHksXG4gICAgLy8gYW5kIGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eSwgd2hlcmVhcyBcInBhcmVudENsaWVudENvbmZpZ1wiIGlzIHRoZSB1cHBlciBkYXRhIGNsaWVudFxuICAgIC8vIGFuZCBoYXMgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgc3NvX3JlZ2lvbiBidXQgc3RpbGwgaGlnaGVyIHByaW9yaXR5IHRoYW4gU1RTIGdsb2JhbCByZWdpb24uXG4gICAgY29uc3QgcGFyZW50Q2xpZW50Q29uZmlnID0ge1xuICAgICAgcmVnaW9uOiBhd2FpdCB0aGlzLnJlZ2lvbihvcHRpb25zLnByb2ZpbGUpLFxuICAgIH07XG4gICAgLyoqXG4gICAgICogVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG1hdGNoZWQgQVdTIENMSSBiZWhhdmlvcjpcbiAgICAgKlxuICAgICAqIElmIGEgcHJvZmlsZSBpcyBleHBsaWNpdGx5IHNldCB1c2luZyBgLS1wcm9maWxlYCxcbiAgICAgKiB3ZSB1c2UgdGhhdCB0byB0aGUgZXhjbHVzaW9uIG9mIGV2ZXJ5dGhpbmcgZWxzZS5cbiAgICAgKlxuICAgICAqIE5vdGU6IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gQVdTX1BST0ZJTEUsXG4gICAgICogZW52aXJvbm1lbnQgY3JlZGVudGlhbHMgc3RpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgQVdTX1BST0ZJTEVcbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy5wcm9maWxlKSB7XG4gICAgICByZXR1cm4gbWFrZUNhY2hpbmdQcm92aWRlcihmcm9tSW5pKHtcbiAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICBpZ25vcmVDYWNoZTogdHJ1ZSxcbiAgICAgICAgbWZhQ29kZVByb3ZpZGVyOiB0aGlzLnRva2VuQ29kZUZuLmJpbmQodGhpcyksXG4gICAgICAgIGNsaWVudENvbmZpZyxcbiAgICAgICAgcGFyZW50Q2xpZW50Q29uZmlnLFxuICAgICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudlByb2ZpbGUgPSBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9QUk9GSUxFO1xuXG4gICAgLyoqXG4gICAgICogRW52IEFXUyAtIEVudmlyb25tZW50Q3JlZGVudGlhbHMgd2l0aCBzdHJpbmcgQVdTXG4gICAgICogRW52IEFtYXpvbiAtIEVudmlyb25tZW50Q3JlZGVudGlhbHMgd2l0aCBzdHJpbmcgQU1BWk9OXG4gICAgICogUHJvZmlsZSBDcmVkZW50aWFscyAtIFBhdGNoZWRTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlLCBjcmVkZW50aWFscyBmaWxlLCBodHRwIG9wdGlvbnMsIGFuZCB0b2tlbiBmblxuICAgICAqICAgIFNTTyB3aXRoIGltcGxpY2l0IHByb2ZpbGUgb25seVxuICAgICAqICAgIFNoYXJlZEluaUZpbGVDcmVkZW50aWFscyB3aXRoIGltcGxpY2l0IHByb2ZpbGUgYW5kIHByZWZlclN0YXRpY0NyZWRlbnRpYWxzIHRydWUgKHByb2ZpbGUgd2l0aCBzb3VyY2VfcHJvZmlsZSlcbiAgICAgKiAgICBTaGFyZWQgQ3JlZGVudGlhbCBmaWxlIHRoYXQgcG9pbnRzIHRvIEVudmlyb25tZW50IENyZWRlbnRpYWxzIHdpdGggQVdTIHByZWZpeFxuICAgICAqICAgIFNoYXJlZCBDcmVkZW50aWFsIGZpbGUgdGhhdCBwb2ludHMgdG8gRUMyIE1ldGFkYXRhXG4gICAgICogICAgU2hhcmVkIENyZWRlbnRpYWwgZmlsZSB0aGF0IHBvaW50cyB0byBFQ1MgQ3JlZGVudGlhbHNcbiAgICAgKiBTU08gQ3JlZGVudGlhbHMgLSBTc29DcmVkZW50aWFscyB3aXRoIGltcGxpY2l0IHByb2ZpbGUgYW5kIGh0dHAgb3B0aW9uc1xuICAgICAqIFByb2Nlc3NDcmVkZW50aWFscyB3aXRoIGltcGxpY2l0IHByb2ZpbGVcbiAgICAgKiBFQ1MgQ3JlZGVudGlhbHMgLSBFQ1NDcmVkZW50aWFscyB3aXRoIG5vIGlucHV0IE9SIFdlYiBJZGVudGl0eSAtIFRva2VuRmlsZVdlYklkZW50aXR5Q3JlZGVudGlhbHMgd2l0aCBubyBpbnB1dCBPUiBFQzIgTWV0YWRhdGEgLSBFQzJNZXRhZGF0YUNyZWRlbnRpYWxzIHdpdGggbm8gaW5wdXRcbiAgICAgKlxuICAgICAqIFRoZXNlIHRyYW5zbGF0ZSB0bzpcbiAgICAgKiBmcm9tRW52KClcbiAgICAgKiBmcm9tU1NPKCkvZnJvbUluaSgpXG4gICAgICogZnJvbVByb2Nlc3MoKVxuICAgICAqIGZyb21Db250YWluZXJNZXRhZGF0YSgpXG4gICAgICogZnJvbVRva2VuRmlsZSgpXG4gICAgICogZnJvbUluc3RhbmNlTWV0YWRhdGEoKVxuICAgICAqXG4gICAgICogVGhlIE5vZGVQcm92aWRlckNoYWluIGlzIGFscmVhZHkgY2FjaGVkLlxuICAgICAqL1xuICAgIGNvbnN0IG5vZGVQcm92aWRlckNoYWluID0gZnJvbU5vZGVQcm92aWRlckNoYWluKHtcbiAgICAgIHByb2ZpbGU6IGVudlByb2ZpbGUsXG4gICAgICBjbGllbnRDb25maWcsXG4gICAgICBwYXJlbnRDbGllbnRDb25maWcsXG4gICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgICAgbWZhQ29kZVByb3ZpZGVyOiB0aGlzLnRva2VuQ29kZUZuLmJpbmQodGhpcyksXG4gICAgICBpZ25vcmVDYWNoZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaG91bGRQcmlvcml0aXplRW52KClcbiAgICAgID8gY3JlYXRlQ3JlZGVudGlhbENoYWluKGZyb21FbnYoKSwgbm9kZVByb3ZpZGVyQ2hhaW4pLmV4cGlyZUFmdGVyKDYwICogNjBfMDAwKVxuICAgICAgOiBub2RlUHJvdmlkZXJDaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBnZXQgdGhlIHJlZ2lvbiBmcm9tIGEgbnVtYmVyIG9mIHNvdXJjZXMgYW5kIGZhbGxzIGJhY2sgdG8gdXMtZWFzdC0xIGlmIG5vIHJlZ2lvbiBjYW4gYmUgZm91bmQsXG4gICAqIGFzIGlzIGRvbmUgaW4gdGhlIEFXUyBDTEkuXG4gICAqXG4gICAqIFRoZSBvcmRlciBvZiBwcmlvcml0eSBpcyB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAxLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BlY2lmeWluZyByZWdpb24sIHdpdGggYm90aCBhbiBBV1MgcHJlZml4IGFuZCBBTUFaT04gcHJlZml4XG4gICAqICAgIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbmQgd2l0aG91dCBgREVGQVVMVGAgaW4gdGhlIG5hbWUgYmVjYXVzZVxuICAgKiAgICBMYW1iZGEgYW5kIENvZGVCdWlsZCBzZXQgdGhlICRBV1NfUkVHSU9OIHZhcmlhYmxlLlxuICAgKiAyLiBSZWdpb25zIGxpc3RlZCBpbiB0aGUgU2hhcmVkIEluaSBGaWxlcyAtIEZpcnN0IGNoZWNraW5nIGZvciB0aGUgcHJvZmlsZSBwcm92aWRlZFxuICAgKiAgICBhbmQgdGhlbiBjaGVja2luZyBmb3IgdGhlIGRlZmF1bHQgcHJvZmlsZS5cbiAgICogMy4gSU1EUyBpbnN0YW5jZSBpZGVudGl0eSByZWdpb24gZnJvbSB0aGUgTWV0YWRhdGEgU2VydmljZS5cbiAgICogNC4gdXMtZWFzdC0xXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaW9uKG1heWJlUHJvZmlsZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGVmYXVsdFJlZ2lvbiA9ICd1cy1lYXN0LTEnO1xuICAgIGNvbnN0IHByb2ZpbGUgPSBtYXliZVByb2ZpbGUgfHwgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRSB8fCAnZGVmYXVsdCc7XG5cbiAgICBjb25zdCByZWdpb24gPVxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQU1BWk9OX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OIHx8XG4gICAgICBwcm9jZXNzLmVudi5BTUFaT05fREVGQVVMVF9SRUdJT04gfHxcbiAgICAgIChhd2FpdCB0aGlzLmdldFJlZ2lvbkZyb21JbmkocHJvZmlsZSkpIHx8XG4gICAgICAoYXdhaXQgdGhpcy5yZWdpb25Gcm9tTWV0YWRhdGFTZXJ2aWNlKCkpO1xuXG4gICAgaWYgKCFyZWdpb24pIHtcbiAgICAgIGNvbnN0IHVzZWRQcm9maWxlID0gIXByb2ZpbGUgPyAnJyA6IGAgKHByb2ZpbGU6IFwiJHtwcm9maWxlfVwiKWA7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1NES19ERUJVRy5tc2coXG4gICAgICAgIGBVbmFibGUgdG8gZGV0ZXJtaW5lIEFXUyByZWdpb24gZnJvbSBlbnZpcm9ubWVudCBvciBBV1MgY29uZmlndXJhdGlvbiR7dXNlZFByb2ZpbGV9LCBkZWZhdWx0aW5nIHRvICcke2RlZmF1bHRSZWdpb259J2AsXG4gICAgICApKTtcbiAgICAgIHJldHVybiBkZWZhdWx0UmVnaW9uO1xuICAgIH1cblxuICAgIHJldHVybiByZWdpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIE1ldGFkYXRhU2VydmljZSBjbGFzcyB3aWxsIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIGluc3RhbmNlIGlkZW50aXR5IGRvY3VtZW50IGZyb21cbiAgICogSU1EU3YyIGZpcnN0LCBhbmQgdGhlbiB3aWxsIGF0dGVtcHQgdjEgYXMgYSBmYWxsYmFjay5cbiAgICpcbiAgICogSWYgdGhpcyBmYWlscywgd2Ugd2lsbCB1c2UgdXMtZWFzdC0xIGFzIHRoZSByZWdpb24gc28gbm8gZXJyb3Igc2hvdWxkIGJlIHRocm93bi5cbiAgICogQHJldHVybnMgVGhlIHJlZ2lvbiBmb3IgdGhlIGluc3RhbmNlIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZ2lvbkZyb21NZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9TREtfREVCVUcubXNnKCdMb29raW5nIHVwIEFXUyByZWdpb24gaW4gdGhlIEVDMiBJbnN0YW5jZSBNZXRhZGF0YSBTZXJ2aWNlIChJTURTKS4nKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2Uoe1xuICAgICAgICBodHRwT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgbWV0YWRhdGFTZXJ2aWNlLmZldGNoTWV0YWRhdGFUb2tlbigpO1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBhd2FpdCBtZXRhZGF0YVNlcnZpY2UucmVxdWVzdCgnL2xhdGVzdC9keW5hbWljL2luc3RhbmNlLWlkZW50aXR5L2RvY3VtZW50Jywge30pO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZG9jdW1lbnQpLnJlZ2lvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1NES19ERUJVRy5tc2coYFVuYWJsZSB0byByZXRyaWV2ZSBBV1MgcmVnaW9uIGZyb20gSU1EUzogJHtlfWApKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIHJlZ2lvbiBvZiB0aGUgcHJvdmlkZWQgcHJvZmlsZS4gSWYgbm8gcmVnaW9uIGlzIHByZXNlbnQsXG4gICAqIGl0IHdpbGwgYXR0ZW1wdCB0byBsb29rdXAgdGhlIGRlZmF1bHQgcmVnaW9uLlxuICAgKiBAcGFyYW0gcHJvZmlsZSBUaGUgcHJvZmlsZSB0byB1c2UgdG8gbG9va3VwIHRoZSByZWdpb25cbiAgICogQHJldHVybnMgVGhlIHJlZ2lvbiBmb3IgdGhlIHByb2ZpbGUgb3IgZGVmYXVsdCBwcm9maWxlLCBpZiBwcmVzZW50LiBPdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFJlZ2lvbkZyb21JbmkocHJvZmlsZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzaGFyZWRGaWxlcyA9IGF3YWl0IGxvYWRTaGFyZWRDb25maWdGaWxlcyh7IGlnbm9yZUNhY2hlOiB0cnVlIH0pO1xuXG4gICAgLy8gUHJpb3JpdHk6XG4gICAgLy9cbiAgICAvLyBjcmVkZW50aWFscyBjb21lIGJlZm9yZSBjb25maWcgYmVjYXVzZSBhd3MtY2xpIHYxIGJlaGF2ZXMgbGlrZSB0aGF0LlxuICAgIC8vXG4gICAgLy8gMS4gcHJvZmlsZS1yZWdpb24taW4tY3JlZGVudGlhbHNcbiAgICAvLyAyLiBwcm9maWxlLXJlZ2lvbi1pbi1jb25maWdcbiAgICAvLyAzLiBkZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuICAgIC8vIDQuIGRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZ1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZSwgc2hhcmVkRmlsZXMuY3JlZGVudGlhbHNGaWxlKVxuICAgID8/IHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZSwgc2hhcmVkRmlsZXMuY29uZmlnRmlsZSlcbiAgICA/PyB0aGlzLmdldFJlZ2lvbkZyb21JbmlGaWxlKCdkZWZhdWx0Jywgc2hhcmVkRmlsZXMuY3JlZGVudGlhbHNGaWxlKVxuICAgID8/IHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUoJ2RlZmF1bHQnLCBzaGFyZWRGaWxlcy5jb25maWdGaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZTogc3RyaW5nLCBkYXRhPzogYW55KSB7XG4gICAgcmV0dXJuIGRhdGE/Lltwcm9maWxlXT8ucmVnaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayB1c2VyIGZvciBNRkEgdG9rZW4gZm9yIGdpdmVuIHNlcmlhbFxuICAgKlxuICAgKiBSZXN1bHQgaXMgc2VuZCB0byBjYWxsYmFjayBmdW5jdGlvbiBmb3IgU0RLIHRvIGF1dGhvcml6ZSB0aGUgcmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB0b2tlbkNvZGVGbihzZXJpYWxBcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGVidWdGbiA9IChtc2c6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfU0RLX0RFQlVHLm1zZyhmb3JtYXQobXNnLCAuLi5hcmdzKSkpO1xuICAgIGF3YWl0IGRlYnVnRm4oJ1JlcXVpcmUgTUZBIHRva2VuIGZvciBzZXJpYWwgQVJOJywgc2VyaWFsQXJuKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW46IHN0cmluZyA9IGF3YWl0IHByb21wdGx5LnByb21wdChgTUZBIHRva2VuIGZvciAke3NlcmlhbEFybn06IGAsIHtcbiAgICAgICAgdHJpbTogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGRlYnVnRm4oJ1N1Y2Nlc3NmdWxseSBnb3QgTUZBIHRva2VuIGZyb20gdXNlcicpO1xuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBhd2FpdCBkZWJ1Z0ZuKCdGYWlsZWQgdG8gZ2V0IE1GQSB0b2tlbicsIGVycik7XG4gICAgICBjb25zdCBlID0gbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoYEVycm9yIGZldGNoaW5nIE1GQSB0b2tlbjogJHtlcnIubWVzc2FnZSA/PyBlcnJ9YCk7XG4gICAgICBlLm5hbWUgPSAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJztcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogV2UgdXNlZCB0byBzdXBwb3J0IGJvdGggQVdTIGFuZCBBTUFaT04gcHJlZml4ZXMgZm9yIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBBZGRpbmcgdGhpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJpb3JpdGl6ZUVudigpIHtcbiAgY29uc3QgaWQgPSBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCB8fCBwcm9jZXNzLmVudi5BTUFaT05fQUNDRVNTX0tFWV9JRDtcbiAgY29uc3Qga2V5ID0gcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIHx8IHByb2Nlc3MuZW52LkFNQVpPTl9TRUNSRVRfQUNDRVNTX0tFWTtcblxuICBpZiAoISFpZCAmJiAhIWtleSkge1xuICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gaWQ7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0ga2V5O1xuXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPz8gcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU47XG4gICAgaWYgKHNlc3Npb25Ub2tlbikge1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPSBzZXNzaW9uVG9rZW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbENoYWluT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ2dlcj86IExvZ2dlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0SGFuZGxlcihpb0hlbHBlcjogSW9IZWxwZXIsIG9wdGlvbnM6IFNka0h0dHBPcHRpb25zID0ge30pOiBQcm9taXNlPE5vZGVIdHRwSGFuZGxlck9wdGlvbnM+IHtcbiAgY29uc3QgYWdlbnQgPSBhd2FpdCBuZXcgUHJveHlBZ2VudFByb3ZpZGVyKGlvSGVscGVyKS5jcmVhdGUob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb25uZWN0aW9uVGltZW91dDogREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQsXG4gICAgcmVxdWVzdFRpbWVvdXQ6IERFRkFVTFRfVElNRU9VVCxcbiAgICBodHRwc0FnZW50OiBhZ2VudCxcbiAgICBodHRwQWdlbnQ6IGFnZW50LFxuICB9O1xufVxuIl19
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Cache the result of a function on an object
3
+ *
4
+ * We could have used @decorators to make this nicer but we don't use them anywhere yet,
5
+ * so let's keep it simple and readable.
6
+ */
7
+ export declare function cached<A extends object, B>(obj: A, sym: symbol, fn: () => B): B;
8
+ /**
9
+ * Like 'cached', but async
10
+ */
11
+ export declare function cachedAsync<A extends object, B>(obj: A, sym: symbol, fn: () => Promise<B>): Promise<B>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cached = cached;
4
+ exports.cachedAsync = cachedAsync;
5
+ /**
6
+ * Cache the result of a function on an object
7
+ *
8
+ * We could have used @decorators to make this nicer but we don't use them anywhere yet,
9
+ * so let's keep it simple and readable.
10
+ */
11
+ function cached(obj, sym, fn) {
12
+ if (!(sym in obj)) {
13
+ obj[sym] = fn();
14
+ }
15
+ return obj[sym];
16
+ }
17
+ /**
18
+ * Like 'cached', but async
19
+ */
20
+ async function cachedAsync(obj, sym, fn) {
21
+ if (!(sym in obj)) {
22
+ obj[sym] = await fn();
23
+ }
24
+ return obj[sym];
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2FjaGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsd0JBS0M7QUFLRCxrQ0FLQztBQXJCRDs7Ozs7R0FLRztBQUNILFNBQWdCLE1BQU0sQ0FBc0IsR0FBTSxFQUFFLEdBQVcsRUFBRSxFQUFXO0lBQzFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLEdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsT0FBUSxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBc0IsR0FBTSxFQUFFLEdBQVcsRUFBRSxFQUFvQjtJQUM5RixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQixHQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBUSxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FjaGUgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIG9uIGFuIG9iamVjdFxuICpcbiAqIFdlIGNvdWxkIGhhdmUgdXNlZCBAZGVjb3JhdG9ycyB0byBtYWtlIHRoaXMgbmljZXIgYnV0IHdlIGRvbid0IHVzZSB0aGVtIGFueXdoZXJlIHlldCxcbiAqIHNvIGxldCdzIGtlZXAgaXQgc2ltcGxlIGFuZCByZWFkYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlZDxBIGV4dGVuZHMgb2JqZWN0LCBCPihvYmo6IEEsIHN5bTogc3ltYm9sLCBmbjogKCkgPT4gQik6IEIge1xuICBpZiAoIShzeW0gaW4gb2JqKSkge1xuICAgIChvYmogYXMgYW55KVtzeW1dID0gZm4oKTtcbiAgfVxuICByZXR1cm4gKG9iaiBhcyBhbnkpW3N5bV07XG59XG5cbi8qKlxuICogTGlrZSAnY2FjaGVkJywgYnV0IGFzeW5jXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWNoZWRBc3luYzxBIGV4dGVuZHMgb2JqZWN0LCBCPihvYmo6IEEsIHN5bTogc3ltYm9sLCBmbjogKCkgPT4gUHJvbWlzZTxCPik6IFByb21pc2U8Qj4ge1xuICBpZiAoIShzeW0gaW4gb2JqKSkge1xuICAgIChvYmogYXMgYW55KVtzeW1dID0gYXdhaXQgZm4oKTtcbiAgfVxuICByZXR1cm4gKG9iaiBhcyBhbnkpW3N5bV07XG59XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import type { AwsCredentialIdentityProvider } from '@smithy/types';
2
+ import { type IoHelper } from '../io/private';
3
+ import type { PluginHost } from '../plugin';
4
+ import type { Mode } from '../plugin/mode';
5
+ /**
6
+ * Cache for credential providers.
7
+ *
8
+ * Given an account and an operating mode (read or write) will return an
9
+ * appropriate credential provider for credentials for the given account. The
10
+ * credential provider will be cached so that multiple AWS clients for the same
11
+ * environment will not make multiple network calls to obtain credentials.
12
+ *
13
+ * Will use default credentials if they are for the right account; otherwise,
14
+ * all loaded credential provider plugins will be tried to obtain credentials
15
+ * for the given account.
16
+ */
17
+ export declare class CredentialPlugins {
18
+ private readonly host;
19
+ private readonly ioHelper;
20
+ private readonly cache;
21
+ constructor(host: PluginHost, ioHelper: IoHelper);
22
+ fetchCredentialsFor(awsAccountId: string, mode: Mode): Promise<PluginCredentialsFetchResult | undefined>;
23
+ get availablePluginNames(): string[];
24
+ private lookupCredentials;
25
+ }
26
+ /**
27
+ * Result from trying to fetch credentials from the Plugin host
28
+ */
29
+ export interface PluginCredentialsFetchResult {
30
+ /**
31
+ * SDK-v3 compatible credential provider
32
+ */
33
+ readonly credentials: AwsCredentialIdentityProvider;
34
+ /**
35
+ * Name of plugin that successfully provided credentials
36
+ */
37
+ readonly pluginName: string;
38
+ }
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CredentialPlugins = void 0;
4
+ const util_1 = require("util");
5
+ const provider_caching_1 = require("./provider-caching");
6
+ const util_2 = require("../../util");
7
+ const private_1 = require("../io/private");
8
+ const toolkit_error_1 = require("../toolkit-error");
9
+ /**
10
+ * Cache for credential providers.
11
+ *
12
+ * Given an account and an operating mode (read or write) will return an
13
+ * appropriate credential provider for credentials for the given account. The
14
+ * credential provider will be cached so that multiple AWS clients for the same
15
+ * environment will not make multiple network calls to obtain credentials.
16
+ *
17
+ * Will use default credentials if they are for the right account; otherwise,
18
+ * all loaded credential provider plugins will be tried to obtain credentials
19
+ * for the given account.
20
+ */
21
+ class CredentialPlugins {
22
+ host;
23
+ ioHelper;
24
+ cache = {};
25
+ constructor(host, ioHelper) {
26
+ this.host = host;
27
+ this.ioHelper = ioHelper;
28
+ }
29
+ async fetchCredentialsFor(awsAccountId, mode) {
30
+ const key = `${awsAccountId}-${mode}`;
31
+ if (!(key in this.cache)) {
32
+ this.cache[key] = await this.lookupCredentials(awsAccountId, mode);
33
+ }
34
+ return this.cache[key];
35
+ }
36
+ get availablePluginNames() {
37
+ return this.host.credentialProviderSources.map((s) => s.name);
38
+ }
39
+ async lookupCredentials(awsAccountId, mode) {
40
+ const triedSources = [];
41
+ // Otherwise, inspect the various credential sources we have
42
+ for (const source of this.host.credentialProviderSources) {
43
+ let available;
44
+ try {
45
+ available = await source.isAvailable();
46
+ }
47
+ catch (e) {
48
+ // This shouldn't happen, but let's guard against it anyway
49
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_W0100.msg(`Uncaught exception in ${source.name}: ${(0, util_2.formatErrorMessage)(e)}`));
50
+ available = false;
51
+ }
52
+ if (!available) {
53
+ await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Credentials source ${source.name} is not available, ignoring it.`));
54
+ continue;
55
+ }
56
+ triedSources.push(source);
57
+ let canProvide;
58
+ try {
59
+ canProvide = await source.canProvideCredentials(awsAccountId);
60
+ }
61
+ catch (e) {
62
+ // This shouldn't happen, but let's guard against it anyway
63
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_W0100.msg(`Uncaught exception in ${source.name}: ${(0, util_2.formatErrorMessage)(e)}`));
64
+ canProvide = false;
65
+ }
66
+ if (!canProvide) {
67
+ continue;
68
+ }
69
+ await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Using ${source.name} credentials for account ${awsAccountId}`));
70
+ return {
71
+ credentials: await v3ProviderFromPlugin(() => source.getProvider(awsAccountId, mode, {
72
+ supportsV3Providers: true,
73
+ })),
74
+ pluginName: source.name,
75
+ };
76
+ }
77
+ return undefined;
78
+ }
79
+ }
80
+ exports.CredentialPlugins = CredentialPlugins;
81
+ /**
82
+ * Take a function that calls the plugin, and turn it into an SDKv3-compatible credential provider.
83
+ *
84
+ * What we will do is the following:
85
+ *
86
+ * - Query the plugin and see what kind of result it gives us.
87
+ * - If the result is self-refreshing or doesn't need refreshing, we turn it into an SDKv3 provider
88
+ * and return it directly.
89
+ * * If the underlying return value is a provider, we will make it a caching provider
90
+ * (because we can't know if it will cache by itself or not).
91
+ * * If the underlying return value is a static credential, caching isn't relevant.
92
+ * * If the underlying return value is V2 credentials, those have caching built-in.
93
+ * - If the result is a static credential that expires, we will wrap it in an SDKv3 provider
94
+ * that will query the plugin again when the credential expires.
95
+ */
96
+ async function v3ProviderFromPlugin(producer) {
97
+ const initial = await producer();
98
+ if (isV3Provider(initial)) {
99
+ // Already a provider, make caching
100
+ return (0, provider_caching_1.makeCachingProvider)(initial);
101
+ }
102
+ else if (isV3Credentials(initial) && initial.expiration === undefined) {
103
+ // Static credentials that don't need refreshing nor caching
104
+ return () => Promise.resolve(initial);
105
+ }
106
+ else if (isV3Credentials(initial) && initial.expiration !== undefined) {
107
+ // Static credentials that do need refreshing and caching
108
+ return refreshFromPluginProvider(initial, producer);
109
+ }
110
+ else if (isV2Credentials(initial)) {
111
+ // V2 credentials that refresh and cache themselves
112
+ return v3ProviderFromV2Credentials(initial);
113
+ }
114
+ else {
115
+ throw new toolkit_error_1.AuthenticationError(`Plugin returned a value that doesn't resemble AWS credentials: ${(0, util_1.inspect)(initial)}`);
116
+ }
117
+ }
118
+ /**
119
+ * Converts a V2 credential into a V3-compatible provider
120
+ */
121
+ function v3ProviderFromV2Credentials(x) {
122
+ return async () => {
123
+ // Get will fetch or refresh as necessary
124
+ await x.getPromise();
125
+ return {
126
+ accessKeyId: x.accessKeyId,
127
+ secretAccessKey: x.secretAccessKey,
128
+ sessionToken: x.sessionToken,
129
+ expiration: x.expireTime ?? undefined,
130
+ };
131
+ };
132
+ }
133
+ function refreshFromPluginProvider(current, producer) {
134
+ return async () => {
135
+ if ((0, provider_caching_1.credentialsAboutToExpire)(current)) {
136
+ const newCreds = await producer();
137
+ if (!isV3Credentials(newCreds)) {
138
+ throw new toolkit_error_1.AuthenticationError(`Plugin initially returned static V3 credentials but now returned something else: ${(0, util_1.inspect)(newCreds)}`);
139
+ }
140
+ current = newCreds;
141
+ }
142
+ return current;
143
+ };
144
+ }
145
+ function isV3Provider(x) {
146
+ return typeof x === 'function';
147
+ }
148
+ function isV2Credentials(x) {
149
+ return !!(x && typeof x === 'object' && x.getPromise);
150
+ }
151
+ function isV3Credentials(x) {
152
+ return !!(x && typeof x === 'object' && x.accessKeyId && !isV2Credentials(x));
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY3JlZGVudGlhbC1wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQix5REFBbUY7QUFDbkYscUNBQWdEO0FBQ2hELDJDQUFrRDtBQUdsRCxvREFBdUQ7QUFFdkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGlCQUFpQjtJQUdDO0lBQW1DO0lBRi9DLEtBQUssR0FBZ0UsRUFBRSxDQUFDO0lBRXpGLFlBQTZCLElBQWdCLEVBQW1CLFFBQWtCO1FBQXJELFNBQUksR0FBSixJQUFJLENBQVk7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUNsRixDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLFlBQW9CLEVBQUUsSUFBVTtRQUMvRCxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBb0IsRUFBRSxJQUFVO1FBQzlELE1BQU0sWUFBWSxHQUErQixFQUFFLENBQUM7UUFDcEQsNERBQTREO1FBQzVELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3pELElBQUksU0FBa0IsQ0FBQztZQUN2QixJQUFJLENBQUM7Z0JBQ0gsU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQiwyREFBMkQ7Z0JBQzNELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2SCxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFFLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLHNCQUFzQixNQUFNLENBQUMsSUFBSSxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdILFNBQVM7WUFDWCxDQUFDO1lBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLFVBQW1CLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQkFDaEIsMkRBQTJEO2dCQUMzRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMseUJBQXlCLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBQSx5QkFBa0IsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkgsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNyQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QixZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekgsT0FBTztnQkFDTCxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUErQixFQUFFO29CQUM5RyxtQkFBbUIsRUFBRSxJQUFJO2lCQUMxQixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ3hCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBMURELDhDQTBEQztBQWlCRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxRQUE2QztJQUMvRSxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO0lBRWpDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDMUIsbUNBQW1DO1FBQ25DLE9BQU8sSUFBQSxzQ0FBbUIsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO1NBQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4RSw0REFBNEQ7UUFDNUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7U0FBTSxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hFLHlEQUF5RDtRQUN6RCxPQUFPLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO1NBQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxtREFBbUQ7UUFDbkQsT0FBTywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxtQ0FBbUIsQ0FBQyxrRUFBa0UsSUFBQSxjQUFPLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLENBQTZCO0lBQ2hFLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDaEIseUNBQXlDO1FBQ3pDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXJCLE9BQU87WUFDTCxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7WUFDMUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlO1lBQ2xDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtZQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxTQUFTO1NBQ3RDLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxPQUE4QixFQUFFLFFBQTZDO0lBQzlHLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDaEIsSUFBSSxJQUFBLDJDQUF3QixFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxtQ0FBbUIsQ0FBQyxvRkFBb0YsSUFBQSxjQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pJLENBQUM7WUFDRCxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBdUI7SUFDM0MsT0FBTyxPQUFPLENBQUMsS0FBSyxVQUFVLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLENBQXVCO0lBQzlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSyxDQUFnQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxDQUF1QjtJQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnNwZWN0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgdHlwZSB7IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZSwgRm9yUmVhZGluZywgRm9yV3JpdGluZywgUGx1Z2luUHJvdmlkZXJSZXN1bHQsIFNES3YyQ29tcGF0aWJsZUNyZWRlbnRpYWxzLCBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIsIFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxzIH0gZnJvbSAnQGF3cy1jZGsvY2xpLXBsdWdpbi1jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IEF3c0NyZWRlbnRpYWxJZGVudGl0eSwgQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCB7IGNyZWRlbnRpYWxzQWJvdXRUb0V4cGlyZSwgbWFrZUNhY2hpbmdQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXItY2FjaGluZyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkhvc3QgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHR5cGUgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luL21vZGUnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciB9IGZyb20gJy4uL3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIENhY2hlIGZvciBjcmVkZW50aWFsIHByb3ZpZGVycy5cbiAqXG4gKiBHaXZlbiBhbiBhY2NvdW50IGFuZCBhbiBvcGVyYXRpbmcgbW9kZSAocmVhZCBvciB3cml0ZSkgd2lsbCByZXR1cm4gYW5cbiAqIGFwcHJvcHJpYXRlIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIGNyZWRlbnRpYWxzIGZvciB0aGUgZ2l2ZW4gYWNjb3VudC4gVGhlXG4gKiBjcmVkZW50aWFsIHByb3ZpZGVyIHdpbGwgYmUgY2FjaGVkIHNvIHRoYXQgbXVsdGlwbGUgQVdTIGNsaWVudHMgZm9yIHRoZSBzYW1lXG4gKiBlbnZpcm9ubWVudCB3aWxsIG5vdCBtYWtlIG11bHRpcGxlIG5ldHdvcmsgY2FsbHMgdG8gb2J0YWluIGNyZWRlbnRpYWxzLlxuICpcbiAqIFdpbGwgdXNlIGRlZmF1bHQgY3JlZGVudGlhbHMgaWYgdGhleSBhcmUgZm9yIHRoZSByaWdodCBhY2NvdW50OyBvdGhlcndpc2UsXG4gKiBhbGwgbG9hZGVkIGNyZWRlbnRpYWwgcHJvdmlkZXIgcGx1Z2lucyB3aWxsIGJlIHRyaWVkIHRvIG9idGFpbiBjcmVkZW50aWFsc1xuICogZm9yIHRoZSBnaXZlbiBhY2NvdW50LlxuICovXG5leHBvcnQgY2xhc3MgQ3JlZGVudGlhbFBsdWdpbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiB7IFtrZXk6IHN0cmluZ106IFBsdWdpbkNyZWRlbnRpYWxzRmV0Y2hSZXN1bHQgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaG9zdDogUGx1Z2luSG9zdCwgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaENyZWRlbnRpYWxzRm9yKGF3c0FjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxQbHVnaW5DcmVkZW50aWFsc0ZldGNoUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qga2V5ID0gYCR7YXdzQWNjb3VudElkfS0ke21vZGV9YDtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5jYWNoZSkpIHtcbiAgICAgIHRoaXMuY2FjaGVba2V5XSA9IGF3YWl0IHRoaXMubG9va3VwQ3JlZGVudGlhbHMoYXdzQWNjb3VudElkLCBtb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXZhaWxhYmxlUGx1Z2luTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvb2t1cENyZWRlbnRpYWxzKGF3c0FjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxQbHVnaW5DcmVkZW50aWFsc0ZldGNoUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHJpZWRTb3VyY2VzOiBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VbXSA9IFtdO1xuICAgIC8vIE90aGVyd2lzZSwgaW5zcGVjdCB0aGUgdmFyaW91cyBjcmVkZW50aWFsIHNvdXJjZXMgd2UgaGF2ZVxuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHRoaXMuaG9zdC5jcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzKSB7XG4gICAgICBsZXQgYXZhaWxhYmxlOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXZhaWxhYmxlID0gYXdhaXQgc291cmNlLmlzQXZhaWxhYmxlKCk7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgbGV0J3MgZ3VhcmQgYWdhaW5zdCBpdCBhbnl3YXlcbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfVzAxMDAubXNnKGBVbmNhdWdodCBleGNlcHRpb24gaW4gJHtzb3VyY2UubmFtZX06ICR7Zm9ybWF0RXJyb3JNZXNzYWdlKGUpfWApKTtcbiAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYENyZWRlbnRpYWxzIHNvdXJjZSAke3NvdXJjZS5uYW1lfSBpcyBub3QgYXZhaWxhYmxlLCBpZ25vcmluZyBpdC5gKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHJpZWRTb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgIGxldCBjYW5Qcm92aWRlOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FuUHJvdmlkZSA9IGF3YWl0IHNvdXJjZS5jYW5Qcm92aWRlQ3JlZGVudGlhbHMoYXdzQWNjb3VudElkKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBsZXQncyBndWFyZCBhZ2FpbnN0IGl0IGFueXdheVxuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9XMDEwMC5tc2coYFVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiAke3NvdXJjZS5uYW1lfTogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCkpO1xuICAgICAgICBjYW5Qcm92aWRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNhblByb3ZpZGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBVc2luZyAke3NvdXJjZS5uYW1lfSBjcmVkZW50aWFscyBmb3IgYWNjb3VudCAke2F3c0FjY291bnRJZH1gKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRlbnRpYWxzOiBhd2FpdCB2M1Byb3ZpZGVyRnJvbVBsdWdpbigoKSA9PiBzb3VyY2UuZ2V0UHJvdmlkZXIoYXdzQWNjb3VudElkLCBtb2RlIGFzIEZvclJlYWRpbmcgfCBGb3JXcml0aW5nLCB7XG4gICAgICAgICAgc3VwcG9ydHNWM1Byb3ZpZGVyczogdHJ1ZSxcbiAgICAgICAgfSkpLFxuICAgICAgICBwbHVnaW5OYW1lOiBzb3VyY2UubmFtZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSB0cnlpbmcgdG8gZmV0Y2ggY3JlZGVudGlhbHMgZnJvbSB0aGUgUGx1Z2luIGhvc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5DcmVkZW50aWFsc0ZldGNoUmVzdWx0IHtcbiAgLyoqXG4gICAqIFNESy12MyBjb21wYXRpYmxlIGNyZWRlbnRpYWwgcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcjtcblxuICAvKipcbiAgICogTmFtZSBvZiBwbHVnaW4gdGhhdCBzdWNjZXNzZnVsbHkgcHJvdmlkZWQgY3JlZGVudGlhbHNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUYWtlIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcGx1Z2luLCBhbmQgdHVybiBpdCBpbnRvIGFuIFNES3YzLWNvbXBhdGlibGUgY3JlZGVudGlhbCBwcm92aWRlci5cbiAqXG4gKiBXaGF0IHdlIHdpbGwgZG8gaXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAtIFF1ZXJ5IHRoZSBwbHVnaW4gYW5kIHNlZSB3aGF0IGtpbmQgb2YgcmVzdWx0IGl0IGdpdmVzIHVzLlxuICogLSBJZiB0aGUgcmVzdWx0IGlzIHNlbGYtcmVmcmVzaGluZyBvciBkb2Vzbid0IG5lZWQgcmVmcmVzaGluZywgd2UgdHVybiBpdCBpbnRvIGFuIFNES3YzIHByb3ZpZGVyXG4gKiAgIGFuZCByZXR1cm4gaXQgZGlyZWN0bHkuXG4gKiAgICogSWYgdGhlIHVuZGVybHlpbmcgcmV0dXJuIHZhbHVlIGlzIGEgcHJvdmlkZXIsIHdlIHdpbGwgbWFrZSBpdCBhIGNhY2hpbmcgcHJvdmlkZXJcbiAqICAgICAoYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIGl0IHdpbGwgY2FjaGUgYnkgaXRzZWxmIG9yIG5vdCkuXG4gKiAgICogSWYgdGhlIHVuZGVybHlpbmcgcmV0dXJuIHZhbHVlIGlzIGEgc3RhdGljIGNyZWRlbnRpYWwsIGNhY2hpbmcgaXNuJ3QgcmVsZXZhbnQuXG4gKiAgICogSWYgdGhlIHVuZGVybHlpbmcgcmV0dXJuIHZhbHVlIGlzIFYyIGNyZWRlbnRpYWxzLCB0aG9zZSBoYXZlIGNhY2hpbmcgYnVpbHQtaW4uXG4gKiAtIElmIHRoZSByZXN1bHQgaXMgYSBzdGF0aWMgY3JlZGVudGlhbCB0aGF0IGV4cGlyZXMsIHdlIHdpbGwgd3JhcCBpdCBpbiBhbiBTREt2MyBwcm92aWRlclxuICogICB0aGF0IHdpbGwgcXVlcnkgdGhlIHBsdWdpbiBhZ2FpbiB3aGVuIHRoZSBjcmVkZW50aWFsIGV4cGlyZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHYzUHJvdmlkZXJGcm9tUGx1Z2luKHByb2R1Y2VyOiAoKSA9PiBQcm9taXNlPFBsdWdpblByb3ZpZGVyUmVzdWx0Pik6IFByb21pc2U8QXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI+IHtcbiAgY29uc3QgaW5pdGlhbCA9IGF3YWl0IHByb2R1Y2VyKCk7XG5cbiAgaWYgKGlzVjNQcm92aWRlcihpbml0aWFsKSkge1xuICAgIC8vIEFscmVhZHkgYSBwcm92aWRlciwgbWFrZSBjYWNoaW5nXG4gICAgcmV0dXJuIG1ha2VDYWNoaW5nUHJvdmlkZXIoaW5pdGlhbCk7XG4gIH0gZWxzZSBpZiAoaXNWM0NyZWRlbnRpYWxzKGluaXRpYWwpICYmIGluaXRpYWwuZXhwaXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gU3RhdGljIGNyZWRlbnRpYWxzIHRoYXQgZG9uJ3QgbmVlZCByZWZyZXNoaW5nIG5vciBjYWNoaW5nXG4gICAgcmV0dXJuICgpID0+IFByb21pc2UucmVzb2x2ZShpbml0aWFsKTtcbiAgfSBlbHNlIGlmIChpc1YzQ3JlZGVudGlhbHMoaW5pdGlhbCkgJiYgaW5pdGlhbC5leHBpcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBTdGF0aWMgY3JlZGVudGlhbHMgdGhhdCBkbyBuZWVkIHJlZnJlc2hpbmcgYW5kIGNhY2hpbmdcbiAgICByZXR1cm4gcmVmcmVzaEZyb21QbHVnaW5Qcm92aWRlcihpbml0aWFsLCBwcm9kdWNlcik7XG4gIH0gZWxzZSBpZiAoaXNWMkNyZWRlbnRpYWxzKGluaXRpYWwpKSB7XG4gICAgLy8gVjIgY3JlZGVudGlhbHMgdGhhdCByZWZyZXNoIGFuZCBjYWNoZSB0aGVtc2VsdmVzXG4gICAgcmV0dXJuIHYzUHJvdmlkZXJGcm9tVjJDcmVkZW50aWFscyhpbml0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgUGx1Z2luIHJldHVybmVkIGEgdmFsdWUgdGhhdCBkb2Vzbid0IHJlc2VtYmxlIEFXUyBjcmVkZW50aWFsczogJHtpbnNwZWN0KGluaXRpYWwpfWApO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBWMiBjcmVkZW50aWFsIGludG8gYSBWMy1jb21wYXRpYmxlIHByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIHYzUHJvdmlkZXJGcm9tVjJDcmVkZW50aWFscyh4OiBTREt2MkNvbXBhdGlibGVDcmVkZW50aWFscyk6IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAvLyBHZXQgd2lsbCBmZXRjaCBvciByZWZyZXNoIGFzIG5lY2Vzc2FyeVxuICAgIGF3YWl0IHguZ2V0UHJvbWlzZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc0tleUlkOiB4LmFjY2Vzc0tleUlkLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiB4LnNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHNlc3Npb25Ub2tlbjogeC5zZXNzaW9uVG9rZW4sXG4gICAgICBleHBpcmF0aW9uOiB4LmV4cGlyZVRpbWUgPz8gdW5kZWZpbmVkLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hGcm9tUGx1Z2luUHJvdmlkZXIoY3VycmVudDogQXdzQ3JlZGVudGlhbElkZW50aXR5LCBwcm9kdWNlcjogKCkgPT4gUHJvbWlzZTxQbHVnaW5Qcm92aWRlclJlc3VsdD4pOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciB7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGNyZWRlbnRpYWxzQWJvdXRUb0V4cGlyZShjdXJyZW50KSkge1xuICAgICAgY29uc3QgbmV3Q3JlZHMgPSBhd2FpdCBwcm9kdWNlcigpO1xuICAgICAgaWYgKCFpc1YzQ3JlZGVudGlhbHMobmV3Q3JlZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKGBQbHVnaW4gaW5pdGlhbGx5IHJldHVybmVkIHN0YXRpYyBWMyBjcmVkZW50aWFscyBidXQgbm93IHJldHVybmVkIHNvbWV0aGluZyBlbHNlOiAke2luc3BlY3QobmV3Q3JlZHMpfWApO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IG5ld0NyZWRzO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNWM1Byb3ZpZGVyKHg6IFBsdWdpblByb3ZpZGVyUmVzdWx0KTogeCBpcyBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzVjJDcmVkZW50aWFscyh4OiBQbHVnaW5Qcm92aWRlclJlc3VsdCk6IHggaXMgU0RLdjJDb21wYXRpYmxlQ3JlZGVudGlhbHMge1xuICByZXR1cm4gISEoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgKHggYXMgU0RLdjJDb21wYXRpYmxlQ3JlZGVudGlhbHMpLmdldFByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBpc1YzQ3JlZGVudGlhbHMoeDogUGx1Z2luUHJvdmlkZXJSZXN1bHQpOiB4IGlzIFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxzIHtcbiAgcmV0dXJuICEhKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHguYWNjZXNzS2V5SWQgJiYgIWlzVjJDcmVkZW50aWFscyh4KSk7XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ export * from '../proxy-agent';
2
+ export * from '../sdk';
3
+ export * from '../sdk-provider';
4
+ export * from '../sdk-logger';
5
+ export { AccountAccessKeyCache } from '../account-cache';
6
+ export { cached } from '../cached';
7
+ export { AwsCliCompatible } from '../awscli-compatible';
8
+ export { setSdkTracing } from '../tracing';
9
+ export { CredentialPlugins } from '../credential-plugins';
10
+ export { credentialsAboutToExpire } from '../provider-caching';
11
+ export { defaultCliUserAgent } from '../user-agent';
@@ -0,0 +1,37 @@
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
+ exports.defaultCliUserAgent = exports.credentialsAboutToExpire = exports.CredentialPlugins = exports.setSdkTracing = exports.AwsCliCompatible = exports.cached = exports.AccountAccessKeyCache = void 0;
18
+ __exportStar(require("../proxy-agent"), exports);
19
+ __exportStar(require("../sdk"), exports);
20
+ __exportStar(require("../sdk-provider"), exports);
21
+ __exportStar(require("../sdk-logger"), exports);
22
+ // temporary testing exports
23
+ var account_cache_1 = require("../account-cache");
24
+ Object.defineProperty(exports, "AccountAccessKeyCache", { enumerable: true, get: function () { return account_cache_1.AccountAccessKeyCache; } });
25
+ var cached_1 = require("../cached");
26
+ Object.defineProperty(exports, "cached", { enumerable: true, get: function () { return cached_1.cached; } });
27
+ var awscli_compatible_1 = require("../awscli-compatible");
28
+ Object.defineProperty(exports, "AwsCliCompatible", { enumerable: true, get: function () { return awscli_compatible_1.AwsCliCompatible; } });
29
+ var tracing_1 = require("../tracing");
30
+ Object.defineProperty(exports, "setSdkTracing", { enumerable: true, get: function () { return tracing_1.setSdkTracing; } });
31
+ var credential_plugins_1 = require("../credential-plugins");
32
+ Object.defineProperty(exports, "CredentialPlugins", { enumerable: true, get: function () { return credential_plugins_1.CredentialPlugins; } });
33
+ var provider_caching_1 = require("../provider-caching");
34
+ Object.defineProperty(exports, "credentialsAboutToExpire", { enumerable: true, get: function () { return provider_caching_1.credentialsAboutToExpire; } });
35
+ var user_agent_1 = require("../user-agent");
36
+ Object.defineProperty(exports, "defaultCliUserAgent", { enumerable: true, get: function () { return user_agent_1.defaultCliUserAgent; } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQix5Q0FBdUI7QUFDdkIsa0RBQWdDO0FBQ2hDLGdEQUE4QjtBQUU5Qiw0QkFBNEI7QUFDNUIsa0RBQXlEO0FBQWhELHNIQUFBLHFCQUFxQixPQUFBO0FBQzlCLG9DQUFtQztBQUExQixnR0FBQSxNQUFNLE9BQUE7QUFDZiwwREFBd0Q7QUFBL0MscUhBQUEsZ0JBQWdCLE9BQUE7QUFDekIsc0NBQTJDO0FBQWxDLHdHQUFBLGFBQWEsT0FBQTtBQUN0Qiw0REFBMEQ7QUFBakQsdUhBQUEsaUJBQWlCLE9BQUE7QUFDMUIsd0RBQStEO0FBQXRELDRIQUFBLHdCQUF3QixPQUFBO0FBQ2pDLDRDQUFvRDtBQUEzQyxpSEFBQSxtQkFBbUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4uL3Byb3h5LWFnZW50JztcbmV4cG9ydCAqIGZyb20gJy4uL3Nkayc7XG5leHBvcnQgKiBmcm9tICcuLi9zZGstcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi4vc2RrLWxvZ2dlcic7XG5cbi8vIHRlbXBvcmFyeSB0ZXN0aW5nIGV4cG9ydHNcbmV4cG9ydCB7IEFjY291bnRBY2Nlc3NLZXlDYWNoZSB9IGZyb20gJy4uL2FjY291bnQtY2FjaGUnO1xuZXhwb3J0IHsgY2FjaGVkIH0gZnJvbSAnLi4vY2FjaGVkJztcbmV4cG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuLi9hd3NjbGktY29tcGF0aWJsZSc7XG5leHBvcnQgeyBzZXRTZGtUcmFjaW5nIH0gZnJvbSAnLi4vdHJhY2luZyc7XG5leHBvcnQgeyBDcmVkZW50aWFsUGx1Z2lucyB9IGZyb20gJy4uL2NyZWRlbnRpYWwtcGx1Z2lucyc7XG5leHBvcnQgeyBjcmVkZW50aWFsc0Fib3V0VG9FeHBpcmUgfSBmcm9tICcuLi9wcm92aWRlci1jYWNoaW5nJztcbmV4cG9ydCB7IGRlZmF1bHRDbGlVc2VyQWdlbnQgfSBmcm9tICcuLi91c2VyLWFnZW50JztcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import type { AwsCredentialIdentity, AwsCredentialIdentityProvider } from '@smithy/types';
2
+ /**
3
+ * Wrap a credential provider in a cache
4
+ *
5
+ * Some credential providers in the SDKv3 are cached (the default Node
6
+ * chain, specifically) but most others are not.
7
+ *
8
+ * Since we want to avoid duplicate calls to `AssumeRole`, or duplicate
9
+ * MFA prompts or what have you, we are going to liberally wrap providers
10
+ * in caches which will return the cached value until it expires.
11
+ */
12
+ export declare function makeCachingProvider(provider: AwsCredentialIdentityProvider): AwsCredentialIdentityProvider;
13
+ export declare function credentialsAboutToExpire(token: AwsCredentialIdentity): boolean;