aws-cdk 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/CONTRIBUTING.md +276 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +16 -0
  4. package/README.md +1274 -0
  5. package/THIRD_PARTY_LICENSES +26821 -0
  6. package/bin/cdk +6 -0
  7. package/build-info.json +4 -0
  8. package/db.json.gz +0 -0
  9. package/generate.sh +25 -0
  10. package/images/garbage-collection.png +0 -0
  11. package/lib/api/aws-auth/account-cache.d.ts +39 -0
  12. package/lib/api/aws-auth/account-cache.js +102 -0
  13. package/lib/api/aws-auth/awscli-compatible.d.ts +42 -0
  14. package/lib/api/aws-auth/awscli-compatible.js +264 -0
  15. package/lib/api/aws-auth/cached.d.ts +11 -0
  16. package/lib/api/aws-auth/cached.js +26 -0
  17. package/lib/api/aws-auth/credential-plugins.d.ts +36 -0
  18. package/lib/api/aws-auth/credential-plugins.js +153 -0
  19. package/lib/api/aws-auth/index.d.ts +3 -0
  20. package/lib/api/aws-auth/index.js +20 -0
  21. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  22. package/lib/api/aws-auth/provider-caching.js +24 -0
  23. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  24. package/lib/api/aws-auth/sdk-logger.js +130 -0
  25. package/lib/api/aws-auth/sdk-provider.d.ts +207 -0
  26. package/lib/api/aws-auth/sdk-provider.js +359 -0
  27. package/lib/api/aws-auth/sdk.d.ts +223 -0
  28. package/lib/api/aws-auth/sdk.js +366 -0
  29. package/lib/api/aws-auth/tracing.d.ts +11 -0
  30. package/lib/api/aws-auth/tracing.js +61 -0
  31. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  32. package/lib/api/aws-auth/user-agent.js +21 -0
  33. package/lib/api/aws-auth/util.d.ts +6 -0
  34. package/lib/api/aws-auth/util.js +23 -0
  35. package/lib/api/bootstrap/bootstrap-environment.d.ts +33 -0
  36. package/lib/api/bootstrap/bootstrap-environment.js +322 -0
  37. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  38. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  39. package/lib/api/bootstrap/bootstrap-template.yaml +692 -0
  40. package/lib/api/bootstrap/deploy-bootstrap.d.ts +37 -0
  41. package/lib/api/bootstrap/deploy-bootstrap.js +143 -0
  42. package/lib/api/bootstrap/index.d.ts +2 -0
  43. package/lib/api/bootstrap/index.js +19 -0
  44. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  45. package/lib/api/bootstrap/legacy-template.js +82 -0
  46. package/lib/api/context.d.ts +40 -0
  47. package/lib/api/context.js +82 -0
  48. package/lib/api/cxapp/cloud-assembly.d.ts +150 -0
  49. package/lib/api/cxapp/cloud-assembly.js +305 -0
  50. package/lib/api/cxapp/cloud-executable.d.ts +44 -0
  51. package/lib/api/cxapp/cloud-executable.js +90 -0
  52. package/lib/api/cxapp/environments.d.ts +9 -0
  53. package/lib/api/cxapp/environments.js +66 -0
  54. package/lib/api/cxapp/exec.d.ts +56 -0
  55. package/lib/api/cxapp/exec.js +275 -0
  56. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  57. package/lib/api/deployments/asset-manifest-builder.js +35 -0
  58. package/lib/api/deployments/asset-publishing.d.ts +77 -0
  59. package/lib/api/deployments/asset-publishing.js +163 -0
  60. package/lib/api/deployments/assets.d.ts +10 -0
  61. package/lib/api/deployments/assets.js +111 -0
  62. package/lib/api/deployments/checks.d.ts +8 -0
  63. package/lib/api/deployments/checks.js +73 -0
  64. package/lib/api/deployments/cloudformation.d.ts +235 -0
  65. package/lib/api/deployments/cloudformation.js +598 -0
  66. package/lib/api/deployments/deploy-stack.d.ts +177 -0
  67. package/lib/api/deployments/deploy-stack.js +484 -0
  68. package/lib/api/deployments/deployment-method.d.ts +24 -0
  69. package/lib/api/deployments/deployment-method.js +3 -0
  70. package/lib/api/deployments/deployment-result.d.ts +21 -0
  71. package/lib/api/deployments/deployment-result.js +10 -0
  72. package/lib/api/deployments/deployments.d.ts +340 -0
  73. package/lib/api/deployments/deployments.js +369 -0
  74. package/lib/api/deployments/hotswap-deployments.d.ts +14 -0
  75. package/lib/api/deployments/hotswap-deployments.js +357 -0
  76. package/lib/api/deployments/index.d.ts +6 -0
  77. package/lib/api/deployments/index.js +23 -0
  78. package/lib/api/deployments/nested-stack-helpers.d.ts +25 -0
  79. package/lib/api/deployments/nested-stack-helpers.js +88 -0
  80. package/lib/api/environment-access.d.ts +138 -0
  81. package/lib/api/environment-access.js +203 -0
  82. package/lib/api/environment-resources.d.ts +73 -0
  83. package/lib/api/environment-resources.js +208 -0
  84. package/lib/api/evaluate-cloudformation-template.d.ts +84 -0
  85. package/lib/api/evaluate-cloudformation-template.js +443 -0
  86. package/lib/api/garbage-collection/garbage-collector.d.ts +152 -0
  87. package/lib/api/garbage-collection/garbage-collector.js +607 -0
  88. package/lib/api/garbage-collection/progress-printer.d.ts +21 -0
  89. package/lib/api/garbage-collection/progress-printer.js +69 -0
  90. package/lib/api/garbage-collection/stack-refresh.d.ts +44 -0
  91. package/lib/api/garbage-collection/stack-refresh.js +154 -0
  92. package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
  93. package/lib/api/hotswap/appsync-mapping-templates.js +157 -0
  94. package/lib/api/hotswap/code-build-projects.d.ts +3 -0
  95. package/lib/api/hotswap/code-build-projects.js +55 -0
  96. package/lib/api/hotswap/common.d.ts +126 -0
  97. package/lib/api/hotswap/common.js +170 -0
  98. package/lib/api/hotswap/ecs-services.d.ts +3 -0
  99. package/lib/api/hotswap/ecs-services.js +140 -0
  100. package/lib/api/hotswap/lambda-functions.d.ts +3 -0
  101. package/lib/api/hotswap/lambda-functions.js +309 -0
  102. package/lib/api/hotswap/s3-bucket-deployments.d.ts +9 -0
  103. package/lib/api/hotswap/s3-bucket-deployments.js +112 -0
  104. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -0
  105. package/lib/api/hotswap/stepfunctions-state-machines.js +42 -0
  106. package/lib/api/index.d.ts +5 -0
  107. package/lib/api/index.js +22 -0
  108. package/lib/api/logs/find-cloudwatch-logs.d.ts +24 -0
  109. package/lib/api/logs/find-cloudwatch-logs.js +97 -0
  110. package/lib/api/logs/logs-monitor.d.ts +53 -0
  111. package/lib/api/logs/logs-monitor.js +169 -0
  112. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  113. package/lib/api/plugin/context-provider-plugin.js +7 -0
  114. package/lib/api/plugin/index.d.ts +3 -0
  115. package/lib/api/plugin/index.js +20 -0
  116. package/lib/api/plugin/mode.d.ts +4 -0
  117. package/lib/api/plugin/mode.js +9 -0
  118. package/lib/api/plugin/plugin.d.ts +63 -0
  119. package/lib/api/plugin/plugin.js +106 -0
  120. package/lib/api/settings.d.ts +29 -0
  121. package/lib/api/settings.js +141 -0
  122. package/lib/api/tags.d.ts +9 -0
  123. package/lib/api/tags.js +10 -0
  124. package/lib/api/toolkit-info.d.ts +51 -0
  125. package/lib/api/toolkit-info.js +156 -0
  126. package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +237 -0
  127. package/lib/api/util/cloudformation/stack-activity-monitor.js +550 -0
  128. package/lib/api/util/cloudformation/stack-event-poller.d.ts +63 -0
  129. package/lib/api/util/cloudformation/stack-event-poller.js +129 -0
  130. package/lib/api/util/cloudformation/stack-status.d.ts +42 -0
  131. package/lib/api/util/cloudformation/stack-status.js +88 -0
  132. package/lib/api/util/display.d.ts +13 -0
  133. package/lib/api/util/display.js +80 -0
  134. package/lib/api/util/placeholders.d.ts +10 -0
  135. package/lib/api/util/placeholders.js +24 -0
  136. package/lib/api/util/rwlock.d.ts +65 -0
  137. package/lib/api/util/rwlock.js +179 -0
  138. package/lib/api/util/string-manipulation.d.ts +10 -0
  139. package/lib/api/util/string-manipulation.js +33 -0
  140. package/lib/api/util/template-body-parameter.d.ts +21 -0
  141. package/lib/api/util/template-body-parameter.js +104 -0
  142. package/lib/cli/cdk-toolkit.d.ts +594 -0
  143. package/lib/cli/cdk-toolkit.js +1019 -0
  144. package/lib/cli/cli-config.d.ts +10 -0
  145. package/lib/cli/cli-config.js +406 -0
  146. package/lib/cli/cli.d.ts +4 -0
  147. package/lib/cli/cli.js +538 -0
  148. package/lib/cli/convert-to-user-input.d.ts +3 -0
  149. package/lib/cli/convert-to-user-input.js +434 -0
  150. package/lib/cli/parse-command-line-arguments.d.ts +1 -0
  151. package/lib/cli/parse-command-line-arguments.js +806 -0
  152. package/lib/cli/platform-warnings.d.ts +2 -0
  153. package/lib/cli/platform-warnings.js +45 -0
  154. package/lib/cli/user-configuration.d.ts +90 -0
  155. package/lib/cli/user-configuration.js +272 -0
  156. package/lib/cli/user-input.d.ts +1163 -0
  157. package/lib/cli/user-input.js +3 -0
  158. package/lib/cli/util/console-formatters.d.ts +18 -0
  159. package/lib/cli/util/console-formatters.js +42 -0
  160. package/lib/cli/util/npm.d.ts +1 -0
  161. package/lib/cli/util/npm.js +22 -0
  162. package/lib/cli/util/yargs-helpers.d.ts +22 -0
  163. package/lib/cli/util/yargs-helpers.js +49 -0
  164. package/lib/cli/version.d.ts +13 -0
  165. package/lib/cli/version.js +120 -0
  166. package/lib/commands/context.d.ts +35 -0
  167. package/lib/commands/context.js +156 -0
  168. package/lib/commands/docs.d.ts +13 -0
  169. package/lib/commands/docs.js +32 -0
  170. package/lib/commands/doctor.d.ts +1 -0
  171. package/lib/commands/doctor.js +69 -0
  172. package/lib/commands/migrate.d.ts +327 -0
  173. package/lib/commands/migrate.js +804 -0
  174. package/lib/context-providers/ami.d.ts +11 -0
  175. package/lib/context-providers/ami.js +50 -0
  176. package/lib/context-providers/availability-zones.d.ts +11 -0
  177. package/lib/context-providers/availability-zones.js +27 -0
  178. package/lib/context-providers/endpoint-service-availability-zones.d.ts +11 -0
  179. package/lib/context-providers/endpoint-service-availability-zones.js +33 -0
  180. package/lib/context-providers/hosted-zones.d.ts +10 -0
  181. package/lib/context-providers/hosted-zones.js +67 -0
  182. package/lib/context-providers/index.d.ts +30 -0
  183. package/lib/context-providers/index.js +109 -0
  184. package/lib/context-providers/keys.d.ts +11 -0
  185. package/lib/context-providers/keys.js +52 -0
  186. package/lib/context-providers/load-balancers.d.ts +20 -0
  187. package/lib/context-providers/load-balancers.js +159 -0
  188. package/lib/context-providers/security-groups.d.ts +9 -0
  189. package/lib/context-providers/security-groups.js +70 -0
  190. package/lib/context-providers/ssm-parameters.d.ts +23 -0
  191. package/lib/context-providers/ssm-parameters.js +59 -0
  192. package/lib/context-providers/vpcs.d.ts +11 -0
  193. package/lib/context-providers/vpcs.js +288 -0
  194. package/lib/diff.d.ts +28 -0
  195. package/lib/diff.js +165 -0
  196. package/lib/import.d.ts +182 -0
  197. package/lib/import.js +335 -0
  198. package/lib/index.d.ts +3 -0
  199. package/lib/index.js +348304 -0
  200. package/lib/index_bg.wasm +0 -0
  201. package/lib/init-hooks.d.ts +40 -0
  202. package/lib/init-hooks.js +64 -0
  203. package/lib/init-templates/.init-version.json +1 -0
  204. package/lib/init-templates/.no-packagejson-validator +0 -0
  205. package/lib/init-templates/.recommended-feature-flags.json +68 -0
  206. package/lib/init-templates/LICENSE +16 -0
  207. package/lib/init-templates/app/csharp/.template.gitignore +342 -0
  208. package/lib/init-templates/app/csharp/README.md +14 -0
  209. package/lib/init-templates/app/csharp/cdk.template.json +15 -0
  210. package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
  211. package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +13 -0
  212. package/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
  213. package/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs +44 -0
  214. package/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln +18 -0
  215. package/lib/init-templates/app/fsharp/.template.gitignore +342 -0
  216. package/lib/init-templates/app/fsharp/README.md +18 -0
  217. package/lib/init-templates/app/fsharp/cdk.template.json +14 -0
  218. package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
  219. package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +8 -0
  220. package/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
  221. package/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln +18 -0
  222. package/lib/init-templates/app/go/%name%.template.go +70 -0
  223. package/lib/init-templates/app/go/%name%_test.template.go +26 -0
  224. package/lib/init-templates/app/go/.template.gitignore +19 -0
  225. package/lib/init-templates/app/go/README.md +12 -0
  226. package/lib/init-templates/app/go/cdk.template.json +13 -0
  227. package/lib/init-templates/app/go/go.template.mod +9 -0
  228. package/lib/init-templates/app/info.json +4 -0
  229. package/lib/init-templates/app/java/.template.gitignore +13 -0
  230. package/lib/init-templates/app/java/README.md +18 -0
  231. package/lib/init-templates/app/java/cdk.json +13 -0
  232. package/lib/init-templates/app/java/pom.xml +60 -0
  233. package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +42 -0
  234. package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +24 -0
  235. package/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java +26 -0
  236. package/lib/init-templates/app/javascript/.template.gitignore +5 -0
  237. package/lib/init-templates/app/javascript/.template.npmignore +3 -0
  238. package/lib/init-templates/app/javascript/README.md +12 -0
  239. package/lib/init-templates/app/javascript/bin/%name%.template.js +21 -0
  240. package/lib/init-templates/app/javascript/cdk.template.json +15 -0
  241. package/lib/init-templates/app/javascript/jest.config.js +3 -0
  242. package/lib/init-templates/app/javascript/lib/%name%-stack.template.js +23 -0
  243. package/lib/init-templates/app/javascript/package.json +20 -0
  244. package/lib/init-templates/app/javascript/test/%name%.test.template.js +17 -0
  245. package/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +19 -0
  246. package/lib/init-templates/app/python/%name.PythonModule%/__init__.py +0 -0
  247. package/lib/init-templates/app/python/.template.gitignore +10 -0
  248. package/lib/init-templates/app/python/README.template.md +58 -0
  249. package/lib/init-templates/app/python/app.template.py +28 -0
  250. package/lib/init-templates/app/python/cdk.template.json +15 -0
  251. package/lib/init-templates/app/python/requirements-dev.txt +1 -0
  252. package/lib/init-templates/app/python/requirements.txt +2 -0
  253. package/lib/init-templates/app/python/source.bat +13 -0
  254. package/lib/init-templates/app/python/tests/__init__.py +0 -0
  255. package/lib/init-templates/app/python/tests/unit/__init__.py +0 -0
  256. package/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py +15 -0
  257. package/lib/init-templates/app/typescript/.template.gitignore +8 -0
  258. package/lib/init-templates/app/typescript/.template.npmignore +6 -0
  259. package/lib/init-templates/app/typescript/README.md +14 -0
  260. package/lib/init-templates/app/typescript/bin/%name%.template.ts +20 -0
  261. package/lib/init-templates/app/typescript/cdk.template.json +17 -0
  262. package/lib/init-templates/app/typescript/jest.config.js +8 -0
  263. package/lib/init-templates/app/typescript/lib/%name%-stack.template.ts +16 -0
  264. package/lib/init-templates/app/typescript/package.json +26 -0
  265. package/lib/init-templates/app/typescript/test/%name%.test.template.ts +17 -0
  266. package/lib/init-templates/app/typescript/tsconfig.json +31 -0
  267. package/lib/init-templates/lib/info.json +4 -0
  268. package/lib/init-templates/lib/typescript/.template.gitignore +8 -0
  269. package/lib/init-templates/lib/typescript/.template.npmignore +6 -0
  270. package/lib/init-templates/lib/typescript/README.template.md +12 -0
  271. package/lib/init-templates/lib/typescript/jest.config.js +8 -0
  272. package/lib/init-templates/lib/typescript/lib/index.template.ts +21 -0
  273. package/lib/init-templates/lib/typescript/package.json +24 -0
  274. package/lib/init-templates/lib/typescript/test/%name%.test.template.ts +18 -0
  275. package/lib/init-templates/lib/typescript/tsconfig.json +31 -0
  276. package/lib/init-templates/sample-app/csharp/.template.gitignore +342 -0
  277. package/lib/init-templates/sample-app/csharp/README.template.md +19 -0
  278. package/lib/init-templates/sample-app/csharp/cdk.template.json +15 -0
  279. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
  280. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +24 -0
  281. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
  282. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs +15 -0
  283. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln +18 -0
  284. package/lib/init-templates/sample-app/fsharp/.template.gitignore +342 -0
  285. package/lib/init-templates/sample-app/fsharp/README.template.md +20 -0
  286. package/lib/init-templates/sample-app/fsharp/cdk.template.json +14 -0
  287. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
  288. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +14 -0
  289. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
  290. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln +18 -0
  291. package/lib/init-templates/sample-app/go/%name%.template.go +73 -0
  292. package/lib/init-templates/sample-app/go/%name%_test.template.go +25 -0
  293. package/lib/init-templates/sample-app/go/.template.gitignore +19 -0
  294. package/lib/init-templates/sample-app/go/README.md +12 -0
  295. package/lib/init-templates/sample-app/go/cdk.template.json +13 -0
  296. package/lib/init-templates/sample-app/go/go.template.mod +9 -0
  297. package/lib/init-templates/sample-app/info.json +4 -0
  298. package/lib/init-templates/sample-app/java/.template.gitignore +13 -0
  299. package/lib/init-templates/sample-app/java/README.template.md +19 -0
  300. package/lib/init-templates/sample-app/java/cdk.json +13 -0
  301. package/lib/init-templates/sample-app/java/pom.xml +55 -0
  302. package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +13 -0
  303. package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +29 -0
  304. package/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java +27 -0
  305. package/lib/init-templates/sample-app/javascript/.template.gitignore +5 -0
  306. package/lib/init-templates/sample-app/javascript/.template.npmignore +3 -0
  307. package/lib/init-templates/sample-app/javascript/README.template.md +13 -0
  308. package/lib/init-templates/sample-app/javascript/bin/%name%.template.js +6 -0
  309. package/lib/init-templates/sample-app/javascript/cdk.template.json +15 -0
  310. package/lib/init-templates/sample-app/javascript/jest.config.js +3 -0
  311. package/lib/init-templates/sample-app/javascript/lib/%name%-stack.template.js +25 -0
  312. package/lib/init-templates/sample-app/javascript/package.json +20 -0
  313. package/lib/init-templates/sample-app/javascript/test/%name%.test.template.js +16 -0
  314. package/lib/init-templates/sample-app/javascript/tsconfig.json +34 -0
  315. package/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +26 -0
  316. package/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py +0 -0
  317. package/lib/init-templates/sample-app/python/.template.gitignore +22 -0
  318. package/lib/init-templates/sample-app/python/README.template.md +65 -0
  319. package/lib/init-templates/sample-app/python/app.template.py +11 -0
  320. package/lib/init-templates/sample-app/python/cdk.template.json +15 -0
  321. package/lib/init-templates/sample-app/python/requirements-dev.txt +1 -0
  322. package/lib/init-templates/sample-app/python/requirements.txt +2 -0
  323. package/lib/init-templates/sample-app/python/source.bat +13 -0
  324. package/lib/init-templates/sample-app/python/tests/__init__.py +0 -0
  325. package/lib/init-templates/sample-app/python/tests/unit/__init__.py +0 -0
  326. package/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py +21 -0
  327. package/lib/init-templates/sample-app/typescript/.template.gitignore +8 -0
  328. package/lib/init-templates/sample-app/typescript/.template.npmignore +6 -0
  329. package/lib/init-templates/sample-app/typescript/README.template.md +15 -0
  330. package/lib/init-templates/sample-app/typescript/bin/%name%.template.ts +6 -0
  331. package/lib/init-templates/sample-app/typescript/cdk.template.json +17 -0
  332. package/lib/init-templates/sample-app/typescript/jest.config.js +8 -0
  333. package/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts +19 -0
  334. package/lib/init-templates/sample-app/typescript/package.json +26 -0
  335. package/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts +17 -0
  336. package/lib/init-templates/sample-app/typescript/tsconfig.json +31 -0
  337. package/lib/init.d.ts +52 -0
  338. package/lib/init.js +430 -0
  339. package/lib/legacy-exports-source.d.ts +27 -0
  340. package/lib/legacy-exports-source.js +88 -0
  341. package/lib/legacy-exports.d.ts +10 -0
  342. package/lib/legacy-exports.js +28 -0
  343. package/lib/legacy-logging-source.d.ts +32 -0
  344. package/lib/legacy-logging-source.js +107 -0
  345. package/lib/list-stacks.d.ts +22 -0
  346. package/lib/list-stacks.js +23 -0
  347. package/lib/logging.d.ts +109 -0
  348. package/lib/logging.js +159 -0
  349. package/lib/migrator.d.ts +25 -0
  350. package/lib/migrator.js +67 -0
  351. package/lib/notices.d.ts +156 -0
  352. package/lib/notices.js +373 -0
  353. package/lib/os.d.ts +7 -0
  354. package/lib/os.js +92 -0
  355. package/lib/serialize.d.ts +27 -0
  356. package/lib/serialize.js +86 -0
  357. package/lib/toolkit/cli-io-host.d.ts +208 -0
  358. package/lib/toolkit/cli-io-host.js +282 -0
  359. package/lib/toolkit/error.d.ts +44 -0
  360. package/lib/toolkit/error.js +78 -0
  361. package/lib/tree.d.ts +31 -0
  362. package/lib/tree.js +40 -0
  363. package/lib/util/archive.d.ts +1 -0
  364. package/lib/util/archive.js +86 -0
  365. package/lib/util/arrays.d.ts +14 -0
  366. package/lib/util/arrays.js +36 -0
  367. package/lib/util/bool.d.ts +7 -0
  368. package/lib/util/bool.js +13 -0
  369. package/lib/util/bytes.d.ts +8 -0
  370. package/lib/util/bytes.js +21 -0
  371. package/lib/util/content-hash.d.ts +5 -0
  372. package/lib/util/content-hash.js +43 -0
  373. package/lib/util/directories.d.ts +23 -0
  374. package/lib/util/directories.js +57 -0
  375. package/lib/util/error.d.ts +9 -0
  376. package/lib/util/error.js +22 -0
  377. package/lib/util/index.d.ts +5 -0
  378. package/lib/util/index.js +22 -0
  379. package/lib/util/objects.d.ts +52 -0
  380. package/lib/util/objects.js +183 -0
  381. package/lib/util/parallel.d.ts +6 -0
  382. package/lib/util/parallel.js +44 -0
  383. package/lib/util/tables.d.ts +1 -0
  384. package/lib/util/tables.js +10 -0
  385. package/lib/util/type-brands.d.ts +39 -0
  386. package/lib/util/type-brands.js +38 -0
  387. package/lib/util/types.d.ts +27 -0
  388. package/lib/util/types.js +25 -0
  389. package/lib/util/validate-notification-arn.d.ts +4 -0
  390. package/lib/util/validate-notification-arn.js +10 -0
  391. package/lib/util/version-range.d.ts +2 -0
  392. package/lib/util/version-range.js +36 -0
  393. package/lib/util/work-graph-builder.d.ts +32 -0
  394. package/lib/util/work-graph-builder.js +167 -0
  395. package/lib/util/work-graph-types.d.ts +50 -0
  396. package/lib/util/work-graph-types.js +14 -0
  397. package/lib/util/work-graph.d.ts +70 -0
  398. package/lib/util/work-graph.js +344 -0
  399. package/lib/util/yaml-cfn.d.ts +15 -0
  400. package/lib/util/yaml-cfn.js +56 -0
  401. package/package.json +197 -0
  402. package/scripts/user-input-gen +2 -0
@@ -0,0 +1,153 @@
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 logging_1 = require("../../logging");
7
+ const error_1 = require("../../toolkit/error");
8
+ const error_2 = require("../../util/error");
9
+ const plugin_1 = require("../plugin/plugin");
10
+ /**
11
+ * Cache for credential providers.
12
+ *
13
+ * Given an account and an operating mode (read or write) will return an
14
+ * appropriate credential provider for credentials for the given account. The
15
+ * credential provider will be cached so that multiple AWS clients for the same
16
+ * environment will not make multiple network calls to obtain credentials.
17
+ *
18
+ * Will use default credentials if they are for the right account; otherwise,
19
+ * all loaded credential provider plugins will be tried to obtain credentials
20
+ * for the given account.
21
+ */
22
+ class CredentialPlugins {
23
+ constructor(host) {
24
+ this.cache = {};
25
+ this.host = host !== null && host !== void 0 ? host : plugin_1.PluginHost.instance;
26
+ }
27
+ async fetchCredentialsFor(awsAccountId, mode) {
28
+ const key = `${awsAccountId}-${mode}`;
29
+ if (!(key in this.cache)) {
30
+ this.cache[key] = await this.lookupCredentials(awsAccountId, mode);
31
+ }
32
+ return this.cache[key];
33
+ }
34
+ get availablePluginNames() {
35
+ return this.host.credentialProviderSources.map((s) => s.name);
36
+ }
37
+ async lookupCredentials(awsAccountId, mode) {
38
+ const triedSources = [];
39
+ // Otherwise, inspect the various credential sources we have
40
+ for (const source of this.host.credentialProviderSources) {
41
+ let available;
42
+ try {
43
+ available = await source.isAvailable();
44
+ }
45
+ catch (e) {
46
+ // This shouldn't happen, but let's guard against it anyway
47
+ (0, logging_1.warning)(`Uncaught exception in ${source.name}: ${(0, error_2.formatErrorMessage)(e)}`);
48
+ available = false;
49
+ }
50
+ if (!available) {
51
+ (0, logging_1.debug)('Credentials source %s is not available, ignoring it.', source.name);
52
+ continue;
53
+ }
54
+ triedSources.push(source);
55
+ let canProvide;
56
+ try {
57
+ canProvide = await source.canProvideCredentials(awsAccountId);
58
+ }
59
+ catch (e) {
60
+ // This shouldn't happen, but let's guard against it anyway
61
+ (0, logging_1.warning)(`Uncaught exception in ${source.name}: ${(0, error_2.formatErrorMessage)(e)}`);
62
+ canProvide = false;
63
+ }
64
+ if (!canProvide) {
65
+ continue;
66
+ }
67
+ (0, logging_1.debug)(`Using ${source.name} credentials for account ${awsAccountId}`);
68
+ return {
69
+ credentials: await v3ProviderFromPlugin(() => source.getProvider(awsAccountId, mode, {
70
+ supportsV3Providers: true,
71
+ })),
72
+ pluginName: source.name,
73
+ };
74
+ }
75
+ return undefined;
76
+ }
77
+ }
78
+ exports.CredentialPlugins = CredentialPlugins;
79
+ /**
80
+ * Take a function that calls the plugin, and turn it into an SDKv3-compatible credential provider.
81
+ *
82
+ * What we will do is the following:
83
+ *
84
+ * - Query the plugin and see what kind of result it gives us.
85
+ * - If the result is self-refreshing or doesn't need refreshing, we turn it into an SDKv3 provider
86
+ * and return it directly.
87
+ * * If the underlying return value is a provider, we will make it a caching provider
88
+ * (because we can't know if it will cache by itself or not).
89
+ * * If the underlying return value is a static credential, caching isn't relevant.
90
+ * * If the underlying return value is V2 credentials, those have caching built-in.
91
+ * - If the result is a static credential that expires, we will wrap it in an SDKv3 provider
92
+ * that will query the plugin again when the credential expires.
93
+ */
94
+ async function v3ProviderFromPlugin(producer) {
95
+ const initial = await producer();
96
+ if (isV3Provider(initial)) {
97
+ // Already a provider, make caching
98
+ return (0, provider_caching_1.makeCachingProvider)(initial);
99
+ }
100
+ else if (isV3Credentials(initial) && initial.expiration === undefined) {
101
+ // Static credentials that don't need refreshing nor caching
102
+ return () => Promise.resolve(initial);
103
+ }
104
+ else if (isV3Credentials(initial) && initial.expiration !== undefined) {
105
+ // Static credentials that do need refreshing and caching
106
+ return refreshFromPluginProvider(initial, producer);
107
+ }
108
+ else if (isV2Credentials(initial)) {
109
+ // V2 credentials that refresh and cache themselves
110
+ return v3ProviderFromV2Credentials(initial);
111
+ }
112
+ else {
113
+ throw new error_1.AuthenticationError(`Plugin returned a value that doesn't resemble AWS credentials: ${(0, util_1.inspect)(initial)}`);
114
+ }
115
+ }
116
+ /**
117
+ * Converts a V2 credential into a V3-compatible provider
118
+ */
119
+ function v3ProviderFromV2Credentials(x) {
120
+ return async () => {
121
+ var _a;
122
+ // Get will fetch or refresh as necessary
123
+ await x.getPromise();
124
+ return {
125
+ accessKeyId: x.accessKeyId,
126
+ secretAccessKey: x.secretAccessKey,
127
+ sessionToken: x.sessionToken,
128
+ expiration: (_a = x.expireTime) !== null && _a !== void 0 ? _a : undefined,
129
+ };
130
+ };
131
+ }
132
+ function refreshFromPluginProvider(current, producer) {
133
+ return async () => {
134
+ if ((0, provider_caching_1.credentialsAboutToExpire)(current)) {
135
+ const newCreds = await producer();
136
+ if (!isV3Credentials(newCreds)) {
137
+ throw new error_1.AuthenticationError(`Plugin initially returned static V3 credentials but now returned something else: ${(0, util_1.inspect)(newCreds)}`);
138
+ }
139
+ current = newCreds;
140
+ }
141
+ return current;
142
+ };
143
+ }
144
+ function isV3Provider(x) {
145
+ return typeof x === 'function';
146
+ }
147
+ function isV2Credentials(x) {
148
+ return !!(x && typeof x === 'object' && x.getPromise);
149
+ }
150
+ function isV3Credentials(x) {
151
+ return !!(x && typeof x === 'object' && x.accessKeyId && !isV2Credentials(x));
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY3JlZGVudGlhbC1wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQix5REFBbUY7QUFDbkYsMkNBQStDO0FBQy9DLCtDQUEwRDtBQUMxRCw0Q0FBc0Q7QUFFdEQsNkNBQThDO0FBRTlDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxpQkFBaUI7SUFJNUIsWUFBWSxJQUFpQjtRQUhaLFVBQUssR0FBZ0UsRUFBRSxDQUFDO1FBSXZGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksbUJBQVUsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUFvQixFQUFFLElBQVU7UUFDL0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQW9CLEVBQUUsSUFBVTtRQUM5RCxNQUFNLFlBQVksR0FBK0IsRUFBRSxDQUFDO1FBQ3BELDREQUE0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QVMsZUFBZSxDQUFDLENBQXVCO0lBQzlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlLCBGb3JSZWFkaW5nLCBGb3JXcml0aW5nLCBQbHVnaW5Qcm92aWRlclJlc3VsdCwgU0RLdjJDb21wYXRpYmxlQ3JlZGVudGlhbHMsIFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlciwgU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbHMgfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgQXdzQ3JlZGVudGlhbElkZW50aXR5LCBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciB9IGZyb20gJ0BzbWl0aHkvdHlwZXMnO1xuaW1wb3J0IHsgY3JlZGVudGlhbHNBYm91dFRvRXhwaXJlLCBtYWtlQ2FjaGluZ1Byb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlci1jYWNoaW5nJztcbmltcG9ydCB7IGRlYnVnLCB3YXJuaW5nIH0gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsL2Vycm9yJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4vbW9kZSc7XG5pbXBvcnQgeyBQbHVnaW5Ib3N0IH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbic7XG5cbi8qKlxuICogQ2FjaGUgZm9yIGNyZWRlbnRpYWwgcHJvdmlkZXJzLlxuICpcbiAqIEdpdmVuIGFuIGFjY291bnQgYW5kIGFuIG9wZXJhdGluZyBtb2RlIChyZWFkIG9yIHdyaXRlKSB3aWxsIHJldHVybiBhblxuICogYXBwcm9wcmlhdGUgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiBhY2NvdW50LiBUaGVcbiAqIGNyZWRlbnRpYWwgcHJvdmlkZXIgd2lsbCBiZSBjYWNoZWQgc28gdGhhdCBtdWx0aXBsZSBBV1MgY2xpZW50cyBmb3IgdGhlIHNhbWVcbiAqIGVudmlyb25tZW50IHdpbGwgbm90IG1ha2UgbXVsdGlwbGUgbmV0d29yayBjYWxscyB0byBvYnRhaW4gY3JlZGVudGlhbHMuXG4gKlxuICogV2lsbCB1c2UgZGVmYXVsdCBjcmVkZW50aWFscyBpZiB0aGV5IGFyZSBmb3IgdGhlIHJpZ2h0IGFjY291bnQ7IG90aGVyd2lzZSxcbiAqIGFsbCBsb2FkZWQgY3JlZGVudGlhbCBwcm92aWRlciBwbHVnaW5zIHdpbGwgYmUgdHJpZWQgdG8gb2J0YWluIGNyZWRlbnRpYWxzXG4gKiBmb3IgdGhlIGdpdmVuIGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDcmVkZW50aWFsUGx1Z2lucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IHsgW2tleTogc3RyaW5nXTogUGx1Z2luQ3JlZGVudGlhbHNGZXRjaFJlc3VsdCB8IHVuZGVmaW5lZCB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogUGx1Z2luSG9zdDtcblxuICBjb25zdHJ1Y3Rvcihob3N0PzogUGx1Z2luSG9zdCkge1xuICAgIHRoaXMuaG9zdCA9IGhvc3QgPz8gUGx1Z2luSG9zdC5pbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaENyZWRlbnRpYWxzRm9yKGF3c0FjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxQbHVnaW5DcmVkZW50aWFsc0ZldGNoUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3Qga2V5ID0gYCR7YXdzQWNjb3VudElkfS0ke21vZGV9YDtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5jYWNoZSkpIHtcbiAgICAgIHRoaXMuY2FjaGVba2V5XSA9IGF3YWl0IHRoaXMubG9va3VwQ3JlZGVudGlhbHMoYXdzQWNjb3VudElkLCBtb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXZhaWxhYmxlUGx1Z2luTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvb2t1cENyZWRlbnRpYWxzKGF3c0FjY291bnRJZDogc3RyaW5nLCBtb2RlOiBNb2RlKTogUHJvbWlzZTxQbHVnaW5DcmVkZW50aWFsc0ZldGNoUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdHJpZWRTb3VyY2VzOiBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VbXSA9IFtdO1xuICAgIC8vIE90aGVyd2lzZSwgaW5zcGVjdCB0aGUgdmFyaW91cyBjcmVkZW50aWFsIHNvdXJjZXMgd2UgaGF2ZVxuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHRoaXMuaG9zdC5jcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzKSB7XG4gICAgICBsZXQgYXZhaWxhYmxlOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXZhaWxhYmxlID0gYXdhaXQgc291cmNlLmlzQXZhaWxhYmxlKCk7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgbGV0J3MgZ3VhcmQgYWdhaW5zdCBpdCBhbnl3YXlcbiAgICAgICAgd2FybmluZyhgVW5jYXVnaHQgZXhjZXB0aW9uIGluICR7c291cmNlLm5hbWV9OiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKTtcbiAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgIGRlYnVnKCdDcmVkZW50aWFscyBzb3VyY2UgJXMgaXMgbm90IGF2YWlsYWJsZSwgaWdub3JpbmcgaXQuJywgc291cmNlLm5hbWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyaWVkU291cmNlcy5wdXNoKHNvdXJjZSk7XG4gICAgICBsZXQgY2FuUHJvdmlkZTogYm9vbGVhbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNhblByb3ZpZGUgPSBhd2FpdCBzb3VyY2UuY2FuUHJvdmlkZUNyZWRlbnRpYWxzKGF3c0FjY291bnRJZCk7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgbGV0J3MgZ3VhcmQgYWdhaW5zdCBpdCBhbnl3YXlcbiAgICAgICAgd2FybmluZyhgVW5jYXVnaHQgZXhjZXB0aW9uIGluICR7c291cmNlLm5hbWV9OiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKTtcbiAgICAgICAgY2FuUHJvdmlkZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjYW5Qcm92aWRlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZGVidWcoYFVzaW5nICR7c291cmNlLm5hbWV9IGNyZWRlbnRpYWxzIGZvciBhY2NvdW50ICR7YXdzQWNjb3VudElkfWApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkZW50aWFsczogYXdhaXQgdjNQcm92aWRlckZyb21QbHVnaW4oKCkgPT4gc291cmNlLmdldFByb3ZpZGVyKGF3c0FjY291bnRJZCwgbW9kZSBhcyBGb3JSZWFkaW5nIHwgRm9yV3JpdGluZywge1xuICAgICAgICAgIHN1cHBvcnRzVjNQcm92aWRlcnM6IHRydWUsXG4gICAgICAgIH0pKSxcbiAgICAgICAgcGx1Z2luTmFtZTogc291cmNlLm5hbWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gdHJ5aW5nIHRvIGZldGNoIGNyZWRlbnRpYWxzIGZyb20gdGhlIFBsdWdpbiBob3N0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQ3JlZGVudGlhbHNGZXRjaFJlc3VsdCB7XG4gIC8qKlxuICAgKiBTREstdjMgY29tcGF0aWJsZSBjcmVkZW50aWFsIHByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsczogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgcGx1Z2luIHRoYXQgc3VjY2Vzc2Z1bGx5IHByb3ZpZGVkIGNyZWRlbnRpYWxzXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGFrZSBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHBsdWdpbiwgYW5kIHR1cm4gaXQgaW50byBhbiBTREt2My1jb21wYXRpYmxlIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gKlxuICogV2hhdCB3ZSB3aWxsIGRvIGlzIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogLSBRdWVyeSB0aGUgcGx1Z2luIGFuZCBzZWUgd2hhdCBraW5kIG9mIHJlc3VsdCBpdCBnaXZlcyB1cy5cbiAqIC0gSWYgdGhlIHJlc3VsdCBpcyBzZWxmLXJlZnJlc2hpbmcgb3IgZG9lc24ndCBuZWVkIHJlZnJlc2hpbmcsIHdlIHR1cm4gaXQgaW50byBhbiBTREt2MyBwcm92aWRlclxuICogICBhbmQgcmV0dXJuIGl0IGRpcmVjdGx5LlxuICogICAqIElmIHRoZSB1bmRlcmx5aW5nIHJldHVybiB2YWx1ZSBpcyBhIHByb3ZpZGVyLCB3ZSB3aWxsIG1ha2UgaXQgYSBjYWNoaW5nIHByb3ZpZGVyXG4gKiAgICAgKGJlY2F1c2Ugd2UgY2FuJ3Qga25vdyBpZiBpdCB3aWxsIGNhY2hlIGJ5IGl0c2VsZiBvciBub3QpLlxuICogICAqIElmIHRoZSB1bmRlcmx5aW5nIHJldHVybiB2YWx1ZSBpcyBhIHN0YXRpYyBjcmVkZW50aWFsLCBjYWNoaW5nIGlzbid0IHJlbGV2YW50LlxuICogICAqIElmIHRoZSB1bmRlcmx5aW5nIHJldHVybiB2YWx1ZSBpcyBWMiBjcmVkZW50aWFscywgdGhvc2UgaGF2ZSBjYWNoaW5nIGJ1aWx0LWluLlxuICogLSBJZiB0aGUgcmVzdWx0IGlzIGEgc3RhdGljIGNyZWRlbnRpYWwgdGhhdCBleHBpcmVzLCB3ZSB3aWxsIHdyYXAgaXQgaW4gYW4gU0RLdjMgcHJvdmlkZXJcbiAqICAgdGhhdCB3aWxsIHF1ZXJ5IHRoZSBwbHVnaW4gYWdhaW4gd2hlbiB0aGUgY3JlZGVudGlhbCBleHBpcmVzLlxuICovXG5hc3luYyBmdW5jdGlvbiB2M1Byb3ZpZGVyRnJvbVBsdWdpbihwcm9kdWNlcjogKCkgPT4gUHJvbWlzZTxQbHVnaW5Qcm92aWRlclJlc3VsdD4pOiBQcm9taXNlPEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyPiB7XG4gIGNvbnN0IGluaXRpYWwgPSBhd2FpdCBwcm9kdWNlcigpO1xuXG4gIGlmIChpc1YzUHJvdmlkZXIoaW5pdGlhbCkpIHtcbiAgICAvLyBBbHJlYWR5IGEgcHJvdmlkZXIsIG1ha2UgY2FjaGluZ1xuICAgIHJldHVybiBtYWtlQ2FjaGluZ1Byb3ZpZGVyKGluaXRpYWwpO1xuICB9IGVsc2UgaWYgKGlzVjNDcmVkZW50aWFscyhpbml0aWFsKSAmJiBpbml0aWFsLmV4cGlyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFN0YXRpYyBjcmVkZW50aWFscyB0aGF0IGRvbid0IG5lZWQgcmVmcmVzaGluZyBub3IgY2FjaGluZ1xuICAgIHJldHVybiAoKSA9PiBQcm9taXNlLnJlc29sdmUoaW5pdGlhbCk7XG4gIH0gZWxzZSBpZiAoaXNWM0NyZWRlbnRpYWxzKGluaXRpYWwpICYmIGluaXRpYWwuZXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gU3RhdGljIGNyZWRlbnRpYWxzIHRoYXQgZG8gbmVlZCByZWZyZXNoaW5nIGFuZCBjYWNoaW5nXG4gICAgcmV0dXJuIHJlZnJlc2hGcm9tUGx1Z2luUHJvdmlkZXIoaW5pdGlhbCwgcHJvZHVjZXIpO1xuICB9IGVsc2UgaWYgKGlzVjJDcmVkZW50aWFscyhpbml0aWFsKSkge1xuICAgIC8vIFYyIGNyZWRlbnRpYWxzIHRoYXQgcmVmcmVzaCBhbmQgY2FjaGUgdGhlbXNlbHZlc1xuICAgIHJldHVybiB2M1Byb3ZpZGVyRnJvbVYyQ3JlZGVudGlhbHMoaW5pdGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoYFBsdWdpbiByZXR1cm5lZCBhIHZhbHVlIHRoYXQgZG9lc24ndCByZXNlbWJsZSBBV1MgY3JlZGVudGlhbHM6ICR7aW5zcGVjdChpbml0aWFsKX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVjIgY3JlZGVudGlhbCBpbnRvIGEgVjMtY29tcGF0aWJsZSBwcm92aWRlclxuICovXG5mdW5jdGlvbiB2M1Byb3ZpZGVyRnJvbVYyQ3JlZGVudGlhbHMoeDogU0RLdjJDb21wYXRpYmxlQ3JlZGVudGlhbHMpOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciB7XG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgLy8gR2V0IHdpbGwgZmV0Y2ggb3IgcmVmcmVzaCBhcyBuZWNlc3NhcnlcbiAgICBhd2FpdCB4LmdldFByb21pc2UoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NLZXlJZDogeC5hY2Nlc3NLZXlJZCxcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogeC5zZWNyZXRBY2Nlc3NLZXksXG4gICAgICBzZXNzaW9uVG9rZW46IHguc2Vzc2lvblRva2VuLFxuICAgICAgZXhwaXJhdGlvbjogeC5leHBpcmVUaW1lID8/IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWZyZXNoRnJvbVBsdWdpblByb3ZpZGVyKGN1cnJlbnQ6IEF3c0NyZWRlbnRpYWxJZGVudGl0eSwgcHJvZHVjZXI6ICgpID0+IFByb21pc2U8UGx1Z2luUHJvdmlkZXJSZXN1bHQ+KTogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIge1xuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjcmVkZW50aWFsc0Fib3V0VG9FeHBpcmUoY3VycmVudCkpIHtcbiAgICAgIGNvbnN0IG5ld0NyZWRzID0gYXdhaXQgcHJvZHVjZXIoKTtcbiAgICAgIGlmICghaXNWM0NyZWRlbnRpYWxzKG5ld0NyZWRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgUGx1Z2luIGluaXRpYWxseSByZXR1cm5lZCBzdGF0aWMgVjMgY3JlZGVudGlhbHMgYnV0IG5vdyByZXR1cm5lZCBzb21ldGhpbmcgZWxzZTogJHtpbnNwZWN0KG5ld0NyZWRzKX1gKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBuZXdDcmVkcztcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzVjNQcm92aWRlcih4OiBQbHVnaW5Qcm92aWRlclJlc3VsdCk6IHggaXMgU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc1YyQ3JlZGVudGlhbHMoeDogUGx1Z2luUHJvdmlkZXJSZXN1bHQpOiB4IGlzIFNES3YyQ29tcGF0aWJsZUNyZWRlbnRpYWxzIHtcbiAgcmV0dXJuICEhKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICh4IGFzIFNES3YyQ29tcGF0aWJsZUNyZWRlbnRpYWxzKS5nZXRQcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaXNWM0NyZWRlbnRpYWxzKHg6IFBsdWdpblByb3ZpZGVyUmVzdWx0KTogeCBpcyBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFscyB7XG4gIHJldHVybiAhISh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4LmFjY2Vzc0tleUlkICYmICFpc1YyQ3JlZGVudGlhbHMoeCkpO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './sdk';
2
+ export * from './sdk-provider';
3
+ export * from './sdk-logger';
@@ -0,0 +1,20 @@
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("./sdk"), exports);
18
+ __exportStar(require("./sdk-provider"), exports);
19
+ __exportStar(require("./sdk-logger"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXNCO0FBQ3RCLGlEQUErQjtBQUMvQiwrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Nkayc7XG5leHBvcnQgKiBmcm9tICcuL3Nkay1wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3Nkay1sb2dnZXInO1xuIl19
@@ -0,0 +1,13 @@
1
+ import { 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;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeCachingProvider = makeCachingProvider;
4
+ exports.credentialsAboutToExpire = credentialsAboutToExpire;
5
+ const property_provider_1 = require("@smithy/property-provider");
6
+ /**
7
+ * Wrap a credential provider in a cache
8
+ *
9
+ * Some credential providers in the SDKv3 are cached (the default Node
10
+ * chain, specifically) but most others are not.
11
+ *
12
+ * Since we want to avoid duplicate calls to `AssumeRole`, or duplicate
13
+ * MFA prompts or what have you, we are going to liberally wrap providers
14
+ * in caches which will return the cached value until it expires.
15
+ */
16
+ function makeCachingProvider(provider) {
17
+ return (0, property_provider_1.memoize)(provider, credentialsAboutToExpire, (token) => !!token.expiration);
18
+ }
19
+ function credentialsAboutToExpire(token) {
20
+ const expiryMarginSecs = 5;
21
+ // token.expiration is sometimes null
22
+ return !!token.expiration && token.expiration.getTime() - Date.now() < expiryMarginSecs * 1000;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItY2FjaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb3ZpZGVyLWNhY2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSxrREFNQztBQUVELDREQUlDO0FBekJELGlFQUFvRDtBQUdwRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxRQUF1QztJQUN6RSxPQUFPLElBQUEsMkJBQU8sRUFDWixRQUFRLEVBQ1Isd0JBQXdCLEVBQ3hCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxLQUE0QjtJQUNuRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUMzQixxQ0FBcUM7SUFDckMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDakcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lbW9pemUgfSBmcm9tICdAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyJztcbmltcG9ydCB7IEF3c0NyZWRlbnRpYWxJZGVudGl0eSwgQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcblxuLyoqXG4gKiBXcmFwIGEgY3JlZGVudGlhbCBwcm92aWRlciBpbiBhIGNhY2hlXG4gKlxuICogU29tZSBjcmVkZW50aWFsIHByb3ZpZGVycyBpbiB0aGUgU0RLdjMgYXJlIGNhY2hlZCAodGhlIGRlZmF1bHQgTm9kZVxuICogY2hhaW4sIHNwZWNpZmljYWxseSkgYnV0IG1vc3Qgb3RoZXJzIGFyZSBub3QuXG4gKlxuICogU2luY2Ugd2Ugd2FudCB0byBhdm9pZCBkdXBsaWNhdGUgY2FsbHMgdG8gYEFzc3VtZVJvbGVgLCBvciBkdXBsaWNhdGVcbiAqIE1GQSBwcm9tcHRzIG9yIHdoYXQgaGF2ZSB5b3UsIHdlIGFyZSBnb2luZyB0byBsaWJlcmFsbHkgd3JhcCBwcm92aWRlcnNcbiAqIGluIGNhY2hlcyB3aGljaCB3aWxsIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlIHVudGlsIGl0IGV4cGlyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ2FjaGluZ1Byb3ZpZGVyKHByb3ZpZGVyOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcik6IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIHtcbiAgcmV0dXJuIG1lbW9pemUoXG4gICAgcHJvdmlkZXIsXG4gICAgY3JlZGVudGlhbHNBYm91dFRvRXhwaXJlLFxuICAgICh0b2tlbikgPT4gISF0b2tlbi5leHBpcmF0aW9uLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbHNBYm91dFRvRXhwaXJlKHRva2VuOiBBd3NDcmVkZW50aWFsSWRlbnRpdHkpIHtcbiAgY29uc3QgZXhwaXJ5TWFyZ2luU2VjcyA9IDU7XG4gIC8vIHRva2VuLmV4cGlyYXRpb24gaXMgc29tZXRpbWVzIG51bGxcbiAgcmV0dXJuICEhdG9rZW4uZXhwaXJhdGlvbiAmJiB0b2tlbi5leHBpcmF0aW9uLmdldFRpbWUoKSAtIERhdGUubm93KCkgPCBleHBpcnlNYXJnaW5TZWNzICogMTAwMDtcbn1cbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { Logger } from '@smithy/types';
2
+ import type { IIoHost } from '../../toolkit/cli-io-host';
3
+ export declare class SdkToCliLogger implements Logger {
4
+ private readonly ioHost;
5
+ constructor(ioHost: IIoHost);
6
+ private notify;
7
+ trace(..._content: any[]): void;
8
+ debug(..._content: any[]): void;
9
+ /**
10
+ * Info is called mostly (exclusively?) for successful API calls
11
+ *
12
+ * Payload:
13
+ *
14
+ * (Note the input contains entire CFN templates, for example)
15
+ *
16
+ * ```
17
+ * {
18
+ * clientName: 'S3Client',
19
+ * commandName: 'GetBucketLocationCommand',
20
+ * input: {
21
+ * Bucket: '.....',
22
+ * ExpectedBucketOwner: undefined
23
+ * },
24
+ * output: { LocationConstraint: 'eu-central-1' },
25
+ * metadata: {
26
+ * httpStatusCode: 200,
27
+ * requestId: '....',
28
+ * extendedRequestId: '...',
29
+ * cfId: undefined,
30
+ * attempts: 1,
31
+ * totalRetryDelay: 0
32
+ * }
33
+ * }
34
+ * ```
35
+ */
36
+ info(...content: any[]): void;
37
+ warn(...content: any[]): void;
38
+ /**
39
+ * Error is called mostly (exclusively?) for failing API calls
40
+ *
41
+ * Payload (input would be the entire API call arguments).
42
+ *
43
+ * ```
44
+ * {
45
+ * clientName: 'STSClient',
46
+ * commandName: 'GetCallerIdentityCommand',
47
+ * input: {},
48
+ * error: AggregateError [ECONNREFUSED]:
49
+ * at internalConnectMultiple (node:net:1121:18)
50
+ * at afterConnectMultiple (node:net:1688:7) {
51
+ * code: 'ECONNREFUSED',
52
+ * '$metadata': { attempts: 3, totalRetryDelay: 600 },
53
+ * [errors]: [ [Error], [Error] ]
54
+ * },
55
+ * metadata: { attempts: 3, totalRetryDelay: 600 }
56
+ * }
57
+ * ```
58
+ */
59
+ error(...content: any[]): void;
60
+ }
61
+ /**
62
+ * This can be anything.
63
+ *
64
+ * For debug, it seems to be mostly strings.
65
+ * For info, it seems to be objects.
66
+ *
67
+ * Stringify and join without separator.
68
+ */
69
+ export declare function formatSdkLoggerContent(content: any[]): string;
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SdkToCliLogger = void 0;
4
+ exports.formatSdkLoggerContent = formatSdkLoggerContent;
5
+ const util_1 = require("util");
6
+ const serialize_1 = require("../../serialize");
7
+ class SdkToCliLogger {
8
+ constructor(ioHost) {
9
+ this.ioHost = ioHost;
10
+ }
11
+ notify(level, ...content) {
12
+ void this.ioHost.notify({
13
+ time: new Date(),
14
+ level: 'trace', // always log all SDK logs at trace level, no matter what level they are coming from the SDK
15
+ action: 'none',
16
+ code: 'CDK_SDK_I0000',
17
+ message: (0, util_1.format)('[SDK %s] %s', level, formatSdkLoggerContent(content)),
18
+ });
19
+ }
20
+ trace(..._content) {
21
+ // This is too much detail for our logs
22
+ // this.notify('trace', ...content);
23
+ }
24
+ debug(..._content) {
25
+ // This is too much detail for our logs
26
+ // this.notify('debug', ...content);
27
+ }
28
+ /**
29
+ * Info is called mostly (exclusively?) for successful API calls
30
+ *
31
+ * Payload:
32
+ *
33
+ * (Note the input contains entire CFN templates, for example)
34
+ *
35
+ * ```
36
+ * {
37
+ * clientName: 'S3Client',
38
+ * commandName: 'GetBucketLocationCommand',
39
+ * input: {
40
+ * Bucket: '.....',
41
+ * ExpectedBucketOwner: undefined
42
+ * },
43
+ * output: { LocationConstraint: 'eu-central-1' },
44
+ * metadata: {
45
+ * httpStatusCode: 200,
46
+ * requestId: '....',
47
+ * extendedRequestId: '...',
48
+ * cfId: undefined,
49
+ * attempts: 1,
50
+ * totalRetryDelay: 0
51
+ * }
52
+ * }
53
+ * ```
54
+ */
55
+ info(...content) {
56
+ this.notify('info', ...content);
57
+ }
58
+ warn(...content) {
59
+ this.notify('warn', ...content);
60
+ }
61
+ /**
62
+ * Error is called mostly (exclusively?) for failing API calls
63
+ *
64
+ * Payload (input would be the entire API call arguments).
65
+ *
66
+ * ```
67
+ * {
68
+ * clientName: 'STSClient',
69
+ * commandName: 'GetCallerIdentityCommand',
70
+ * input: {},
71
+ * error: AggregateError [ECONNREFUSED]:
72
+ * at internalConnectMultiple (node:net:1121:18)
73
+ * at afterConnectMultiple (node:net:1688:7) {
74
+ * code: 'ECONNREFUSED',
75
+ * '$metadata': { attempts: 3, totalRetryDelay: 600 },
76
+ * [errors]: [ [Error], [Error] ]
77
+ * },
78
+ * metadata: { attempts: 3, totalRetryDelay: 600 }
79
+ * }
80
+ * ```
81
+ */
82
+ error(...content) {
83
+ this.notify('error', ...content);
84
+ }
85
+ }
86
+ exports.SdkToCliLogger = SdkToCliLogger;
87
+ /**
88
+ * This can be anything.
89
+ *
90
+ * For debug, it seems to be mostly strings.
91
+ * For info, it seems to be objects.
92
+ *
93
+ * Stringify and join without separator.
94
+ */
95
+ function formatSdkLoggerContent(content) {
96
+ if (content.length === 1) {
97
+ const apiFmt = formatApiCall(content[0]);
98
+ if (apiFmt) {
99
+ return apiFmt;
100
+ }
101
+ }
102
+ return content.map((x) => typeof x === 'string' ? x : (0, util_1.inspect)(x)).join('');
103
+ }
104
+ function formatApiCall(content) {
105
+ var _a, _b, _c, _d;
106
+ if (!isSdkApiCallSuccess(content) && !isSdkApiCallError(content)) {
107
+ return undefined;
108
+ }
109
+ const service = content.clientName.replace(/Client$/, '');
110
+ const api = content.commandName.replace(/Command$/, '');
111
+ const parts = [];
112
+ if (((_b = (_a = content.metadata) === null || _a === void 0 ? void 0 : _a.attempts) !== null && _b !== void 0 ? _b : 0) > 1) {
113
+ parts.push(`[${(_c = content.metadata) === null || _c === void 0 ? void 0 : _c.attempts} attempts, ${(_d = content.metadata) === null || _d === void 0 ? void 0 : _d.totalRetryDelay}ms retry]`);
114
+ }
115
+ parts.push(`${service}.${api}(${JSON.stringify(content.input, serialize_1.replacerBufferWithInfo)})`);
116
+ if (isSdkApiCallSuccess(content)) {
117
+ parts.push('-> OK');
118
+ }
119
+ else {
120
+ parts.push(`-> ${content.error}`);
121
+ }
122
+ return parts.join(' ');
123
+ }
124
+ function isSdkApiCallSuccess(x) {
125
+ return x && typeof x === 'object' && x.commandName && x.output;
126
+ }
127
+ function isSdkApiCallError(x) {
128
+ return x && typeof x === 'object' && x.commandName && x.error;
129
+ }
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLWxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNkay1sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcUdBLHdEQVFDO0FBN0dELCtCQUF1QztBQUV2QywrQ0FBeUQ7QUFHekQsTUFBYSxjQUFjO0lBR3pCLFlBQW1CLE1BQWU7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUEwQyxFQUFFLEdBQUcsT0FBYztRQUMxRSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3RCLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtZQUNoQixLQUFLLEVBQUUsT0FBTyxFQUFFLDRGQUE0RjtZQUM1RyxNQUFNLEVBQUUsTUFBYTtZQUNyQixJQUFJLEVBQUUsZUFBZTtZQUNyQixPQUFPLEVBQUUsSUFBQSxhQUFNLEVBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN2RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUcsUUFBZTtRQUM3Qix1Q0FBdUM7UUFDdkMsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRyxRQUFlO1FBQzdCLHVDQUF1QztRQUN2QyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNJLElBQUksQ0FBQyxHQUFHLE9BQWM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sSUFBSSxDQUFDLEdBQUcsT0FBYztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSSxLQUFLLENBQUMsR0FBRyxPQUFjO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBdEZELHdDQXNGQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFjO0lBQ25ELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxjQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLE9BQVk7O0lBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFeEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksQ0FBQyxNQUFBLE1BQUEsT0FBTyxDQUFDLFFBQVEsMENBQUUsUUFBUSxtQ0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksTUFBQSxPQUFPLENBQUMsUUFBUSwwQ0FBRSxRQUFRLGNBQWMsTUFBQSxPQUFPLENBQUMsUUFBUSwwQ0FBRSxlQUFlLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsa0NBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUYsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBbUJELFNBQVMsbUJBQW1CLENBQUMsQ0FBTTtJQUNqQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLENBQU07SUFDL0IsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zcGVjdCwgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCB7IHJlcGxhY2VyQnVmZmVyV2l0aEluZm8gfSBmcm9tICcuLi8uLi9zZXJpYWxpemUnO1xuaW1wb3J0IHR5cGUgeyBJSW9Ib3N0IH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9jbGktaW8taG9zdCc7XG5cbmV4cG9ydCBjbGFzcyBTZGtUb0NsaUxvZ2dlciBpbXBsZW1lbnRzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9Ib3N0OiBJSW9Ib3N0O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hvc3Q6IElJb0hvc3QpIHtcbiAgICB0aGlzLmlvSG9zdCA9IGlvSG9zdDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5KGxldmVsOiAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJywgLi4uY29udGVudDogYW55W10pIHtcbiAgICB2b2lkIHRoaXMuaW9Ib3N0Lm5vdGlmeSh7XG4gICAgICB0aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgbGV2ZWw6ICd0cmFjZScsIC8vIGFsd2F5cyBsb2cgYWxsIFNESyBsb2dzIGF0IHRyYWNlIGxldmVsLCBubyBtYXR0ZXIgd2hhdCBsZXZlbCB0aGV5IGFyZSBjb21pbmcgZnJvbSB0aGUgU0RLXG4gICAgICBhY3Rpb246ICdub25lJyBhcyBhbnksXG4gICAgICBjb2RlOiAnQ0RLX1NES19JMDAwMCcsXG4gICAgICBtZXNzYWdlOiBmb3JtYXQoJ1tTREsgJXNdICVzJywgbGV2ZWwsIGZvcm1hdFNka0xvZ2dlckNvbnRlbnQoY29udGVudCkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRyYWNlKC4uLl9jb250ZW50OiBhbnlbXSkge1xuICAgIC8vIFRoaXMgaXMgdG9vIG11Y2ggZGV0YWlsIGZvciBvdXIgbG9nc1xuICAgIC8vIHRoaXMubm90aWZ5KCd0cmFjZScsIC4uLmNvbnRlbnQpO1xuICB9XG5cbiAgcHVibGljIGRlYnVnKC4uLl9jb250ZW50OiBhbnlbXSkge1xuICAgIC8vIFRoaXMgaXMgdG9vIG11Y2ggZGV0YWlsIGZvciBvdXIgbG9nc1xuICAgIC8vIHRoaXMubm90aWZ5KCdkZWJ1ZycsIC4uLmNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZm8gaXMgY2FsbGVkIG1vc3RseSAoZXhjbHVzaXZlbHk/KSBmb3Igc3VjY2Vzc2Z1bCBBUEkgY2FsbHNcbiAgICpcbiAgICogUGF5bG9hZDpcbiAgICpcbiAgICogKE5vdGUgdGhlIGlucHV0IGNvbnRhaW5zIGVudGlyZSBDRk4gdGVtcGxhdGVzLCBmb3IgZXhhbXBsZSlcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBjbGllbnROYW1lOiAnUzNDbGllbnQnLFxuICAgKiAgIGNvbW1hbmROYW1lOiAnR2V0QnVja2V0TG9jYXRpb25Db21tYW5kJyxcbiAgICogICBpbnB1dDoge1xuICAgKiAgICAgQnVja2V0OiAnLi4uLi4nLFxuICAgKiAgICAgRXhwZWN0ZWRCdWNrZXRPd25lcjogdW5kZWZpbmVkXG4gICAqICAgfSxcbiAgICogICBvdXRwdXQ6IHsgTG9jYXRpb25Db25zdHJhaW50OiAnZXUtY2VudHJhbC0xJyB9LFxuICAgKiAgIG1ldGFkYXRhOiB7XG4gICAqICAgICBodHRwU3RhdHVzQ29kZTogMjAwLFxuICAgKiAgICAgcmVxdWVzdElkOiAnLi4uLicsXG4gICAqICAgICBleHRlbmRlZFJlcXVlc3RJZDogJy4uLicsXG4gICAqICAgICBjZklkOiB1bmRlZmluZWQsXG4gICAqICAgICBhdHRlbXB0czogMSxcbiAgICogICAgIHRvdGFsUmV0cnlEZWxheTogMFxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBpbmZvKC4uLmNvbnRlbnQ6IGFueVtdKSB7XG4gICAgdGhpcy5ub3RpZnkoJ2luZm8nLCAuLi5jb250ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXJuKC4uLmNvbnRlbnQ6IGFueVtdKSB7XG4gICAgdGhpcy5ub3RpZnkoJ3dhcm4nLCAuLi5jb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcnJvciBpcyBjYWxsZWQgbW9zdGx5IChleGNsdXNpdmVseT8pIGZvciBmYWlsaW5nIEFQSSBjYWxsc1xuICAgKlxuICAgKiBQYXlsb2FkIChpbnB1dCB3b3VsZCBiZSB0aGUgZW50aXJlIEFQSSBjYWxsIGFyZ3VtZW50cykuXG4gICAqXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgY2xpZW50TmFtZTogJ1NUU0NsaWVudCcsXG4gICAqICAgY29tbWFuZE5hbWU6ICdHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQnLFxuICAgKiAgIGlucHV0OiB7fSxcbiAgICogICBlcnJvcjogQWdncmVnYXRlRXJyb3IgW0VDT05OUkVGVVNFRF06XG4gICAqICAgICAgIGF0IGludGVybmFsQ29ubmVjdE11bHRpcGxlIChub2RlOm5ldDoxMTIxOjE4KVxuICAgKiAgICAgICBhdCBhZnRlckNvbm5lY3RNdWx0aXBsZSAobm9kZTpuZXQ6MTY4ODo3KSB7XG4gICAqICAgICBjb2RlOiAnRUNPTk5SRUZVU0VEJyxcbiAgICogICAgICckbWV0YWRhdGEnOiB7IGF0dGVtcHRzOiAzLCB0b3RhbFJldHJ5RGVsYXk6IDYwMCB9LFxuICAgKiAgICAgW2Vycm9yc106IFsgW0Vycm9yXSwgW0Vycm9yXSBdXG4gICAqICAgfSxcbiAgICogICBtZXRhZGF0YTogeyBhdHRlbXB0czogMywgdG90YWxSZXRyeURlbGF5OiA2MDAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGVycm9yKC4uLmNvbnRlbnQ6IGFueVtdKSB7XG4gICAgdGhpcy5ub3RpZnkoJ2Vycm9yJywgLi4uY29udGVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNhbiBiZSBhbnl0aGluZy5cbiAqXG4gKiBGb3IgZGVidWcsIGl0IHNlZW1zIHRvIGJlIG1vc3RseSBzdHJpbmdzLlxuICogRm9yIGluZm8sIGl0IHNlZW1zIHRvIGJlIG9iamVjdHMuXG4gKlxuICogU3RyaW5naWZ5IGFuZCBqb2luIHdpdGhvdXQgc2VwYXJhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2RrTG9nZ2VyQ29udGVudChjb250ZW50OiBhbnlbXSkge1xuICBpZiAoY29udGVudC5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBhcGlGbXQgPSBmb3JtYXRBcGlDYWxsKGNvbnRlbnRbMF0pO1xuICAgIGlmIChhcGlGbXQpIHtcbiAgICAgIHJldHVybiBhcGlGbXQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZW50Lm1hcCgoeCkgPT4gdHlwZW9mIHggPT09ICdzdHJpbmcnID8geCA6IGluc3BlY3QoeCkpLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRBcGlDYWxsKGNvbnRlbnQ6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNTZGtBcGlDYWxsU3VjY2Vzcyhjb250ZW50KSAmJiAhaXNTZGtBcGlDYWxsRXJyb3IoY29udGVudCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZSA9IGNvbnRlbnQuY2xpZW50TmFtZS5yZXBsYWNlKC9DbGllbnQkLywgJycpO1xuICBjb25zdCBhcGkgPSBjb250ZW50LmNvbW1hbmROYW1lLnJlcGxhY2UoL0NvbW1hbmQkLywgJycpO1xuXG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGlmICgoY29udGVudC5tZXRhZGF0YT8uYXR0ZW1wdHMgPz8gMCkgPiAxKSB7XG4gICAgcGFydHMucHVzaChgWyR7Y29udGVudC5tZXRhZGF0YT8uYXR0ZW1wdHN9IGF0dGVtcHRzLCAke2NvbnRlbnQubWV0YWRhdGE/LnRvdGFsUmV0cnlEZWxheX1tcyByZXRyeV1gKTtcbiAgfVxuXG4gIHBhcnRzLnB1c2goYCR7c2VydmljZX0uJHthcGl9KCR7SlNPTi5zdHJpbmdpZnkoY29udGVudC5pbnB1dCwgcmVwbGFjZXJCdWZmZXJXaXRoSW5mbyl9KWApO1xuXG4gIGlmIChpc1Nka0FwaUNhbGxTdWNjZXNzKGNvbnRlbnQpKSB7XG4gICAgcGFydHMucHVzaCgnLT4gT0snKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJ0cy5wdXNoKGAtPiAke2NvbnRlbnQuZXJyb3J9YCk7XG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG5pbnRlcmZhY2UgU2RrQXBpQ2FsbEJhc2Uge1xuICBjbGllbnROYW1lOiBzdHJpbmc7XG4gIGNvbW1hbmROYW1lOiBzdHJpbmc7XG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWV0YWRhdGE/OiB7XG4gICAgaHR0cFN0YXR1c0NvZGU/OiBudW1iZXI7XG4gICAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGV4dGVuZGVkUmVxdWVzdElkPzogc3RyaW5nO1xuICAgIGNmSWQ/OiBzdHJpbmc7XG4gICAgYXR0ZW1wdHM/OiBudW1iZXI7XG4gICAgdG90YWxSZXRyeURlbGF5PzogbnVtYmVyO1xuICB9O1xufVxuXG50eXBlIFNka0FwaUNhbGxTdWNjZXNzID0gU2RrQXBpQ2FsbEJhc2UgJiB7IG91dHB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbnR5cGUgU2RrQXBpQ2FsbEVycm9yID0gU2RrQXBpQ2FsbEJhc2UgJiB7IGVycm9yOiBFcnJvciB9O1xuXG5mdW5jdGlvbiBpc1Nka0FwaUNhbGxTdWNjZXNzKHg6IGFueSk6IHggaXMgU2RrQXBpQ2FsbFN1Y2Nlc3Mge1xuICByZXR1cm4geCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeC5jb21tYW5kTmFtZSAmJiB4Lm91dHB1dDtcbn1cblxuZnVuY3Rpb24gaXNTZGtBcGlDYWxsRXJyb3IoeDogYW55KTogeCBpcyBTZGtBcGlDYWxsRXJyb3Ige1xuICByZXR1cm4geCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeC5jb21tYW5kTmFtZSAmJiB4LmVycm9yO1xufVxuIl19