@aws-amplify/core 5.3.2-unstable.ffe65ea.1 → 5.4.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 (507) hide show
  1. package/internals/aws-client-utils/package.json +8 -0
  2. package/internals/aws-clients/pinpoint/package.json +8 -0
  3. package/lib/Amplify.js +18 -3
  4. package/lib/AwsClients/CognitoIdentity/base.d.ts +28 -0
  5. package/lib/AwsClients/CognitoIdentity/base.js +109 -0
  6. package/lib/AwsClients/CognitoIdentity/getCredentialsForIdentity.d.ts +12 -0
  7. package/lib/AwsClients/CognitoIdentity/getCredentialsForIdentity.js +82 -0
  8. package/lib/AwsClients/CognitoIdentity/getId.d.ts +12 -0
  9. package/lib/AwsClients/CognitoIdentity/getId.js +72 -0
  10. package/lib/AwsClients/CognitoIdentity/index.d.ts +2 -0
  11. package/lib/AwsClients/CognitoIdentity/index.js +9 -0
  12. package/lib/AwsClients/CognitoIdentity/types.d.ts +153 -0
  13. package/lib/AwsClients/CognitoIdentity/types.js +4 -0
  14. package/lib/AwsClients/Pinpoint/base.d.ts +17 -0
  15. package/lib/AwsClients/Pinpoint/base.js +39 -0
  16. package/lib/AwsClients/Pinpoint/getInAppMessages.d.ts +13 -0
  17. package/lib/AwsClients/Pinpoint/getInAppMessages.js +77 -0
  18. package/lib/AwsClients/Pinpoint/index.d.ts +4 -0
  19. package/lib/AwsClients/Pinpoint/index.js +11 -0
  20. package/lib/AwsClients/Pinpoint/putEvents.d.ts +13 -0
  21. package/lib/AwsClients/Pinpoint/putEvents.js +78 -0
  22. package/lib/AwsClients/Pinpoint/types.d.ts +836 -0
  23. package/lib/AwsClients/Pinpoint/types.js +5 -0
  24. package/lib/AwsClients/Pinpoint/updateEndpoint.d.ts +13 -0
  25. package/lib/AwsClients/Pinpoint/updateEndpoint.js +81 -0
  26. package/lib/ClientDevice/android.js +3 -2
  27. package/lib/ClientDevice/browser.js +1 -1
  28. package/lib/ClientDevice/index.js +3 -3
  29. package/lib/ClientDevice/ios.js +3 -2
  30. package/lib/ClientDevice/reactnative.js +3 -3
  31. package/lib/Credentials.js +176 -113
  32. package/lib/Errors.js +1 -1
  33. package/lib/Hub.d.ts +4 -4
  34. package/lib/Hub.js +47 -12
  35. package/lib/I18n/I18n.js +13 -3
  36. package/lib/I18n/index.js +1 -1
  37. package/lib/I18n/types.js +1 -1
  38. package/lib/JS.js +29 -17
  39. package/lib/Logger/ConsoleLogger.js +51 -17
  40. package/lib/Logger/index.js +3 -3
  41. package/lib/Logger/logger-interface.js +0 -1
  42. package/lib/OAuthHelper/FacebookOAuth.js +41 -6
  43. package/lib/OAuthHelper/GoogleOAuth.js +41 -6
  44. package/lib/OAuthHelper/index.js +1 -1
  45. package/lib/Platform/index.js +8 -7
  46. package/lib/Platform/version.d.ts +1 -1
  47. package/lib/Platform/version.js +2 -2
  48. package/lib/Providers/AWSCloudWatchProvider.js +104 -44
  49. package/lib/Providers/index.js +2 -2
  50. package/lib/RNComponents/index.js +2 -2
  51. package/lib/RNComponents/reactnative.js +7 -5
  52. package/lib/ServiceWorker/ServiceWorker.js +11 -11
  53. package/lib/ServiceWorker/index.js +2 -2
  54. package/lib/Signer.js +17 -7
  55. package/lib/StorageHelper/index.js +1 -1
  56. package/lib/StorageHelper/reactnative.js +5 -3
  57. package/lib/UniversalStorage/index.d.ts +2 -2
  58. package/lib/UniversalStorage/index.js +24 -6
  59. package/lib/Util/BackgroundProcessManager.js +84 -23
  60. package/lib/Util/Constants.js +1 -1
  61. package/lib/Util/DateUtils.js +18 -3
  62. package/lib/Util/Mutex.js +0 -1
  63. package/lib/Util/Reachability.d.ts +1 -1
  64. package/lib/Util/Reachability.js +18 -6
  65. package/lib/Util/Reachability.native.d.ts +1 -1
  66. package/lib/Util/Reachability.native.js +4 -3
  67. package/lib/Util/Retry.js +103 -26
  68. package/lib/Util/StringUtils.js +1 -1
  69. package/lib/Util/index.js +24 -21
  70. package/lib/clients/endpoints/getDnsSuffix.d.ts +11 -0
  71. package/lib/clients/endpoints/getDnsSuffix.js +49 -0
  72. package/lib/clients/endpoints/index.d.ts +1 -0
  73. package/lib/clients/endpoints/index.js +7 -0
  74. package/lib/clients/endpoints/partitions.d.ts +33 -0
  75. package/lib/clients/endpoints/partitions.js +41 -0
  76. package/lib/clients/handlers/authenticated.d.ts +5 -0
  77. package/lib/clients/handlers/authenticated.js +15 -0
  78. package/lib/clients/handlers/fetch.d.ts +4 -0
  79. package/lib/clients/handlers/fetch.js +123 -0
  80. package/lib/clients/handlers/unauthenticated.d.ts +4 -0
  81. package/lib/clients/handlers/unauthenticated.js +10 -0
  82. package/lib/clients/index.d.ts +8 -0
  83. package/lib/clients/index.js +37 -0
  84. package/lib/clients/internal/composeServiceApi.d.ts +8 -0
  85. package/lib/clients/internal/composeServiceApi.js +75 -0
  86. package/lib/clients/internal/composeTransferHandler.d.ts +29 -0
  87. package/lib/clients/internal/composeTransferHandler.js +26 -0
  88. package/lib/clients/middleware/retry/defaultRetryDecider.d.ts +6 -0
  89. package/lib/clients/middleware/retry/defaultRetryDecider.js +101 -0
  90. package/lib/clients/middleware/retry/index.d.ts +3 -0
  91. package/lib/clients/middleware/retry/index.js +11 -0
  92. package/lib/clients/middleware/retry/jitteredBackoff.d.ts +2 -0
  93. package/lib/clients/middleware/retry/jitteredBackoff.js +16 -0
  94. package/lib/clients/middleware/retry/middleware.d.ts +40 -0
  95. package/lib/clients/middleware/retry/middleware.js +143 -0
  96. package/lib/clients/middleware/signing/index.d.ts +1 -0
  97. package/lib/clients/middleware/signing/index.js +7 -0
  98. package/lib/clients/middleware/signing/middleware.d.ts +13 -0
  99. package/lib/clients/middleware/signing/middleware.js +101 -0
  100. package/lib/clients/middleware/signing/signer/signatureV4/constants.js +1 -1
  101. package/lib/clients/middleware/signing/signer/signatureV4/index.js +4 -4
  102. package/lib/clients/middleware/signing/signer/signatureV4/index.native.js +4 -4
  103. package/lib/clients/middleware/signing/signer/signatureV4/presignUrl.js +46 -8
  104. package/lib/clients/middleware/signing/signer/signatureV4/signRequest.js +22 -11
  105. package/lib/clients/middleware/signing/signer/signatureV4/types/index.js +0 -1
  106. package/lib/clients/middleware/signing/signer/signatureV4/types/signer.js +0 -1
  107. package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.d.ts +3 -2
  108. package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js +7 -5
  109. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.d.ts +2 -1
  110. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js +23 -7
  111. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js +24 -8
  112. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js +8 -7
  113. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js +3 -2
  114. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js +3 -2
  115. package/lib/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js +3 -2
  116. package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.d.ts +2 -1
  117. package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js +4 -3
  118. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignature.js +7 -6
  119. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.d.ts +2 -1
  120. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js +3 -2
  121. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js +8 -7
  122. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js +5 -4
  123. package/lib/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js +3 -2
  124. package/lib/clients/middleware/signing/utils/extendedEncodeURIComponent.d.ts +10 -0
  125. package/lib/clients/middleware/signing/utils/extendedEncodeURIComponent.js +23 -0
  126. package/lib/clients/middleware/signing/utils/getSkewCorrectedDate.d.ts +10 -0
  127. package/lib/clients/middleware/signing/utils/getSkewCorrectedDate.js +18 -0
  128. package/lib/clients/middleware/signing/utils/getUpdatedSystemClockOffset.d.ts +9 -0
  129. package/lib/clients/middleware/signing/utils/getUpdatedSystemClockOffset.js +21 -0
  130. package/lib/clients/middleware/signing/utils/isClockSkewed.d.ts +11 -0
  131. package/lib/clients/middleware/signing/utils/isClockSkewed.js +23 -0
  132. package/lib/clients/middleware/userAgent/index.d.ts +1 -0
  133. package/lib/clients/middleware/userAgent/index.js +7 -0
  134. package/lib/clients/middleware/userAgent/middleware.d.ts +13 -0
  135. package/lib/clients/middleware/userAgent/middleware.js +77 -0
  136. package/lib/clients/serde/index.d.ts +2 -0
  137. package/lib/clients/serde/index.js +10 -0
  138. package/lib/clients/serde/json.d.ts +12 -0
  139. package/lib/clients/serde/json.js +115 -0
  140. package/lib/clients/serde/responseInfo.d.ts +3 -0
  141. package/lib/clients/serde/responseInfo.js +23 -0
  142. package/lib/clients/types/aws.d.ts +18 -1
  143. package/lib/clients/types/aws.js +0 -1
  144. package/lib/clients/types/core.d.ts +22 -0
  145. package/lib/clients/types/core.js +0 -1
  146. package/lib/clients/types/http.d.ts +8 -4
  147. package/lib/clients/types/http.js +0 -1
  148. package/lib/clients/types/index.d.ts +3 -2
  149. package/lib/clients/types/index.js +0 -1
  150. package/lib/clients/utils/isClockSkewError.d.ts +9 -0
  151. package/lib/clients/utils/isClockSkewError.js +27 -0
  152. package/lib/constants.js +1 -1
  153. package/lib/index.js +61 -60
  154. package/lib/parseAWSExports.js +15 -4
  155. package/lib/tsconfig.tsbuildinfo +1 -0
  156. package/lib/types/index.js +15 -1
  157. package/lib/types/types.d.ts +1 -1
  158. package/lib/types/types.js +0 -1
  159. package/lib-esm/Amplify.js +16 -2
  160. package/lib-esm/AwsClients/CognitoIdentity/base.d.ts +28 -0
  161. package/lib-esm/AwsClients/CognitoIdentity/base.js +104 -0
  162. package/lib-esm/AwsClients/CognitoIdentity/getCredentialsForIdentity.d.ts +12 -0
  163. package/lib-esm/AwsClients/CognitoIdentity/getCredentialsForIdentity.js +79 -0
  164. package/lib-esm/AwsClients/CognitoIdentity/getId.d.ts +12 -0
  165. package/lib-esm/AwsClients/CognitoIdentity/getId.js +69 -0
  166. package/lib-esm/AwsClients/CognitoIdentity/index.d.ts +2 -0
  167. package/lib-esm/AwsClients/CognitoIdentity/index.js +4 -0
  168. package/lib-esm/AwsClients/CognitoIdentity/types.d.ts +153 -0
  169. package/lib-esm/AwsClients/CognitoIdentity/types.js +3 -0
  170. package/lib-esm/AwsClients/Pinpoint/base.d.ts +17 -0
  171. package/lib-esm/AwsClients/Pinpoint/base.js +35 -0
  172. package/lib-esm/AwsClients/Pinpoint/getInAppMessages.d.ts +13 -0
  173. package/lib-esm/AwsClients/Pinpoint/getInAppMessages.js +74 -0
  174. package/lib-esm/AwsClients/Pinpoint/index.d.ts +4 -0
  175. package/lib-esm/AwsClients/Pinpoint/index.js +5 -0
  176. package/lib-esm/AwsClients/Pinpoint/putEvents.d.ts +13 -0
  177. package/lib-esm/AwsClients/Pinpoint/putEvents.js +75 -0
  178. package/lib-esm/AwsClients/Pinpoint/types.d.ts +836 -0
  179. package/lib-esm/AwsClients/Pinpoint/types.js +4 -0
  180. package/lib-esm/AwsClients/Pinpoint/updateEndpoint.d.ts +13 -0
  181. package/lib-esm/AwsClients/Pinpoint/updateEndpoint.js +78 -0
  182. package/lib-esm/ClientDevice/android.js +0 -1
  183. package/lib-esm/ClientDevice/browser.js +0 -1
  184. package/lib-esm/ClientDevice/index.js +0 -1
  185. package/lib-esm/ClientDevice/ios.js +0 -1
  186. package/lib-esm/ClientDevice/reactnative.js +0 -1
  187. package/lib-esm/Credentials.js +149 -87
  188. package/lib-esm/Errors.js +0 -1
  189. package/lib-esm/Hub.d.ts +4 -4
  190. package/lib-esm/Hub.js +43 -9
  191. package/lib-esm/I18n/I18n.js +11 -2
  192. package/lib-esm/I18n/index.js +0 -1
  193. package/lib-esm/I18n/types.js +0 -1
  194. package/lib-esm/JS.js +0 -1
  195. package/lib-esm/Logger/ConsoleLogger.js +49 -16
  196. package/lib-esm/Logger/index.js +0 -1
  197. package/lib-esm/Logger/logger-interface.js +1 -1
  198. package/lib-esm/OAuthHelper/FacebookOAuth.js +36 -2
  199. package/lib-esm/OAuthHelper/GoogleOAuth.js +36 -2
  200. package/lib-esm/OAuthHelper/index.js +0 -1
  201. package/lib-esm/Platform/index.js +5 -6
  202. package/lib-esm/Platform/version.d.ts +1 -1
  203. package/lib-esm/Platform/version.js +1 -2
  204. package/lib-esm/Providers/AWSCloudWatchProvider.js +75 -16
  205. package/lib-esm/Providers/index.js +0 -1
  206. package/lib-esm/RNComponents/index.js +0 -1
  207. package/lib-esm/RNComponents/reactnative.js +0 -1
  208. package/lib-esm/ServiceWorker/ServiceWorker.js +9 -10
  209. package/lib-esm/ServiceWorker/index.js +0 -1
  210. package/lib-esm/Signer.js +11 -2
  211. package/lib-esm/StorageHelper/index.js +0 -1
  212. package/lib-esm/StorageHelper/reactnative.js +0 -1
  213. package/lib-esm/UniversalStorage/index.d.ts +2 -2
  214. package/lib-esm/UniversalStorage/index.js +17 -3
  215. package/lib-esm/Util/BackgroundProcessManager.js +74 -14
  216. package/lib-esm/Util/Constants.js +0 -1
  217. package/lib-esm/Util/DateUtils.js +16 -2
  218. package/lib-esm/Util/Mutex.js +0 -1
  219. package/lib-esm/Util/Reachability.d.ts +1 -1
  220. package/lib-esm/Util/Reachability.js +11 -2
  221. package/lib-esm/Util/Reachability.native.d.ts +1 -1
  222. package/lib-esm/Util/Reachability.native.js +0 -1
  223. package/lib-esm/Util/Retry.js +92 -18
  224. package/lib-esm/Util/StringUtils.js +0 -1
  225. package/lib-esm/Util/index.js +0 -1
  226. package/lib-esm/clients/endpoints/getDnsSuffix.d.ts +11 -0
  227. package/lib-esm/clients/endpoints/getDnsSuffix.js +45 -0
  228. package/lib-esm/clients/endpoints/index.d.ts +1 -0
  229. package/lib-esm/clients/endpoints/index.js +3 -0
  230. package/lib-esm/clients/endpoints/partitions.d.ts +33 -0
  231. package/lib-esm/clients/endpoints/partitions.js +38 -0
  232. package/lib-esm/clients/handlers/authenticated.d.ts +5 -0
  233. package/lib-esm/clients/handlers/authenticated.js +12 -0
  234. package/lib-esm/clients/handlers/fetch.d.ts +4 -0
  235. package/lib-esm/clients/handlers/fetch.js +119 -0
  236. package/lib-esm/clients/handlers/unauthenticated.d.ts +4 -0
  237. package/lib-esm/clients/handlers/unauthenticated.js +7 -0
  238. package/lib-esm/clients/index.d.ts +8 -0
  239. package/lib-esm/clients/index.js +10 -0
  240. package/lib-esm/clients/internal/composeServiceApi.d.ts +8 -0
  241. package/lib-esm/clients/internal/composeServiceApi.js +71 -0
  242. package/lib-esm/clients/internal/composeTransferHandler.d.ts +29 -0
  243. package/lib-esm/clients/internal/composeTransferHandler.js +22 -0
  244. package/lib-esm/clients/middleware/retry/defaultRetryDecider.d.ts +6 -0
  245. package/lib-esm/clients/middleware/retry/defaultRetryDecider.js +97 -0
  246. package/lib-esm/clients/middleware/retry/index.d.ts +3 -0
  247. package/lib-esm/clients/middleware/retry/index.js +5 -0
  248. package/lib-esm/clients/middleware/retry/jitteredBackoff.d.ts +2 -0
  249. package/lib-esm/clients/middleware/retry/jitteredBackoff.js +12 -0
  250. package/lib-esm/clients/middleware/retry/middleware.d.ts +40 -0
  251. package/lib-esm/clients/middleware/retry/middleware.js +138 -0
  252. package/lib-esm/clients/middleware/signing/index.d.ts +1 -0
  253. package/lib-esm/clients/middleware/signing/index.js +3 -0
  254. package/lib-esm/clients/middleware/signing/middleware.d.ts +13 -0
  255. package/lib-esm/clients/middleware/signing/middleware.js +97 -0
  256. package/lib-esm/clients/middleware/signing/signer/signatureV4/constants.js +0 -1
  257. package/lib-esm/clients/middleware/signing/signer/signatureV4/index.js +0 -1
  258. package/lib-esm/clients/middleware/signing/signer/signatureV4/index.native.js +0 -1
  259. package/lib-esm/clients/middleware/signing/signer/signatureV4/presignUrl.js +39 -3
  260. package/lib-esm/clients/middleware/signing/signer/signatureV4/signRequest.js +15 -6
  261. package/lib-esm/clients/middleware/signing/signer/signatureV4/types/index.js +1 -1
  262. package/lib-esm/clients/middleware/signing/signer/signatureV4/types/signer.js +1 -1
  263. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.d.ts +3 -2
  264. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js +0 -1
  265. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.d.ts +2 -1
  266. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js +20 -6
  267. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js +18 -4
  268. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js +0 -1
  269. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js +0 -1
  270. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js +1 -2
  271. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js +0 -1
  272. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.d.ts +2 -1
  273. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js +0 -1
  274. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignature.js +0 -1
  275. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.d.ts +2 -1
  276. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js +0 -1
  277. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js +1 -2
  278. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js +0 -1
  279. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js +0 -1
  280. package/lib-esm/clients/middleware/signing/utils/extendedEncodeURIComponent.d.ts +10 -0
  281. package/lib-esm/clients/middleware/signing/utils/extendedEncodeURIComponent.js +19 -0
  282. package/lib-esm/clients/middleware/signing/utils/getSkewCorrectedDate.d.ts +10 -0
  283. package/lib-esm/clients/middleware/signing/utils/getSkewCorrectedDate.js +14 -0
  284. package/lib-esm/clients/middleware/signing/utils/getUpdatedSystemClockOffset.d.ts +9 -0
  285. package/lib-esm/clients/middleware/signing/utils/getUpdatedSystemClockOffset.js +17 -0
  286. package/lib-esm/clients/middleware/signing/utils/isClockSkewed.d.ts +11 -0
  287. package/lib-esm/clients/middleware/signing/utils/isClockSkewed.js +19 -0
  288. package/lib-esm/clients/middleware/userAgent/index.d.ts +1 -0
  289. package/lib-esm/clients/middleware/userAgent/index.js +3 -0
  290. package/lib-esm/clients/middleware/userAgent/middleware.d.ts +13 -0
  291. package/lib-esm/clients/middleware/userAgent/middleware.js +73 -0
  292. package/lib-esm/clients/serde/index.d.ts +2 -0
  293. package/lib-esm/clients/serde/index.js +4 -0
  294. package/lib-esm/clients/serde/json.d.ts +12 -0
  295. package/lib-esm/clients/serde/json.js +110 -0
  296. package/lib-esm/clients/serde/responseInfo.d.ts +3 -0
  297. package/lib-esm/clients/serde/responseInfo.js +19 -0
  298. package/lib-esm/clients/types/aws.d.ts +18 -1
  299. package/lib-esm/clients/types/aws.js +1 -1
  300. package/lib-esm/clients/types/core.d.ts +22 -0
  301. package/lib-esm/clients/types/core.js +1 -1
  302. package/lib-esm/clients/types/http.d.ts +8 -4
  303. package/lib-esm/clients/types/http.js +1 -1
  304. package/lib-esm/clients/types/index.d.ts +3 -2
  305. package/lib-esm/clients/types/index.js +1 -1
  306. package/lib-esm/clients/utils/isClockSkewError.d.ts +9 -0
  307. package/lib-esm/clients/utils/isClockSkewError.js +23 -0
  308. package/lib-esm/constants.js +0 -1
  309. package/lib-esm/index.js +0 -1
  310. package/lib-esm/parseAWSExports.js +11 -2
  311. package/lib-esm/tsconfig.tsbuildinfo +1 -0
  312. package/lib-esm/types/index.js +1 -1
  313. package/lib-esm/types/types.d.ts +1 -1
  314. package/lib-esm/types/types.js +1 -1
  315. package/package.json +56 -22
  316. package/src/AwsClients/CognitoIdentity/base.ts +88 -0
  317. package/src/AwsClients/CognitoIdentity/getCredentialsForIdentity.ts +67 -0
  318. package/src/AwsClients/CognitoIdentity/getId.ts +58 -0
  319. package/src/AwsClients/CognitoIdentity/index.ts +9 -0
  320. package/src/AwsClients/CognitoIdentity/types.ts +159 -0
  321. package/src/AwsClients/Pinpoint/base.ts +41 -0
  322. package/src/AwsClients/Pinpoint/getInAppMessages.ts +56 -0
  323. package/src/AwsClients/Pinpoint/index.ts +15 -0
  324. package/src/AwsClients/Pinpoint/putEvents.ts +55 -0
  325. package/src/AwsClients/Pinpoint/types.ts +844 -0
  326. package/src/AwsClients/Pinpoint/updateEndpoint.ts +60 -0
  327. package/src/Credentials.ts +75 -100
  328. package/src/OAuthHelper/FacebookOAuth.ts +1 -1
  329. package/src/OAuthHelper/GoogleOAuth.ts +1 -1
  330. package/src/Platform/version.ts +1 -1
  331. package/src/StorageHelper/reactnative.ts +1 -1
  332. package/src/clients/endpoints/getDnsSuffix.ts +25 -0
  333. package/src/clients/endpoints/index.ts +4 -0
  334. package/src/clients/endpoints/partitions.ts +40 -0
  335. package/src/clients/handlers/authenticated.ts +19 -0
  336. package/src/clients/handlers/fetch.ts +75 -0
  337. package/src/clients/handlers/unauthenticated.ts +14 -0
  338. package/src/clients/index.ts +15 -0
  339. package/src/clients/internal/composeServiceApi.ts +50 -0
  340. package/src/clients/internal/composeTransferHandler.ts +89 -0
  341. package/src/clients/middleware/retry/defaultRetryDecider.ts +54 -0
  342. package/src/clients/middleware/retry/index.ts +6 -0
  343. package/src/clients/middleware/retry/jitteredBackoff.ts +16 -0
  344. package/src/clients/middleware/retry/middleware.ts +133 -0
  345. package/src/clients/middleware/signing/index.ts +4 -0
  346. package/src/clients/middleware/signing/middleware.ts +65 -0
  347. package/src/clients/middleware/signing/utils/extendedEncodeURIComponent.ts +21 -0
  348. package/src/clients/middleware/signing/utils/getSkewCorrectedDate.ts +14 -0
  349. package/src/clients/middleware/signing/utils/getUpdatedSystemClockOffset.ts +22 -0
  350. package/src/clients/middleware/signing/utils/isClockSkewed.ts +26 -0
  351. package/src/clients/middleware/userAgent/index.ts +4 -0
  352. package/src/clients/middleware/userAgent/middleware.ts +41 -0
  353. package/src/clients/serde/index.ts +5 -0
  354. package/src/clients/serde/json.ts +51 -0
  355. package/src/clients/serde/responseInfo.ts +20 -0
  356. package/src/clients/types/aws.ts +21 -0
  357. package/src/clients/types/core.ts +40 -0
  358. package/src/clients/types/http.ts +12 -2
  359. package/src/clients/types/index.ts +22 -2
  360. package/src/clients/utils/isClockSkewError.ts +24 -0
  361. package/lib/.tsbuildinfo +0 -3
  362. package/lib/Amplify.js.map +0 -1
  363. package/lib/ClientDevice/android.js.map +0 -1
  364. package/lib/ClientDevice/browser.js.map +0 -1
  365. package/lib/ClientDevice/index.js.map +0 -1
  366. package/lib/ClientDevice/ios.js.map +0 -1
  367. package/lib/ClientDevice/reactnative.js.map +0 -1
  368. package/lib/Credentials.js.map +0 -1
  369. package/lib/Errors.js.map +0 -1
  370. package/lib/Hub.js.map +0 -1
  371. package/lib/I18n/I18n.js.map +0 -1
  372. package/lib/I18n/index.js.map +0 -1
  373. package/lib/I18n/types.js.map +0 -1
  374. package/lib/JS.js.map +0 -1
  375. package/lib/Logger/ConsoleLogger.js.map +0 -1
  376. package/lib/Logger/index.js.map +0 -1
  377. package/lib/Logger/logger-interface.js.map +0 -1
  378. package/lib/OAuthHelper/FacebookOAuth.js.map +0 -1
  379. package/lib/OAuthHelper/GoogleOAuth.js.map +0 -1
  380. package/lib/OAuthHelper/index.js.map +0 -1
  381. package/lib/Platform/index.js.map +0 -1
  382. package/lib/Platform/version.js.map +0 -1
  383. package/lib/Providers/AWSCloudWatchProvider.js.map +0 -1
  384. package/lib/Providers/index.js.map +0 -1
  385. package/lib/RNComponents/index.js.map +0 -1
  386. package/lib/RNComponents/reactnative.js.map +0 -1
  387. package/lib/ServiceWorker/ServiceWorker.js.map +0 -1
  388. package/lib/ServiceWorker/index.js.map +0 -1
  389. package/lib/Signer.js.map +0 -1
  390. package/lib/StorageHelper/index.js.map +0 -1
  391. package/lib/StorageHelper/reactnative.js.map +0 -1
  392. package/lib/UniversalStorage/index.js.map +0 -1
  393. package/lib/Util/BackgroundProcessManager.js.map +0 -1
  394. package/lib/Util/CognitoIdentityClient.d.ts +0 -14
  395. package/lib/Util/CognitoIdentityClient.js +0 -31
  396. package/lib/Util/CognitoIdentityClient.js.map +0 -1
  397. package/lib/Util/Constants.js.map +0 -1
  398. package/lib/Util/DateUtils.js.map +0 -1
  399. package/lib/Util/Mutex.js.map +0 -1
  400. package/lib/Util/Reachability.js.map +0 -1
  401. package/lib/Util/Reachability.native.js.map +0 -1
  402. package/lib/Util/Retry.js.map +0 -1
  403. package/lib/Util/StringUtils.js.map +0 -1
  404. package/lib/Util/index.js.map +0 -1
  405. package/lib/clients/middleware/signing/signer/signatureV4/constants.js.map +0 -1
  406. package/lib/clients/middleware/signing/signer/signatureV4/index.js.map +0 -1
  407. package/lib/clients/middleware/signing/signer/signatureV4/index.native.js.map +0 -1
  408. package/lib/clients/middleware/signing/signer/signatureV4/presignUrl.js.map +0 -1
  409. package/lib/clients/middleware/signing/signer/signatureV4/signRequest.js.map +0 -1
  410. package/lib/clients/middleware/signing/signer/signatureV4/types/index.js.map +0 -1
  411. package/lib/clients/middleware/signing/signer/signatureV4/types/signer.js.map +0 -1
  412. package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js.map +0 -1
  413. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js.map +0 -1
  414. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js.map +0 -1
  415. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js.map +0 -1
  416. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js.map +0 -1
  417. package/lib/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js.map +0 -1
  418. package/lib/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js.map +0 -1
  419. package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js.map +0 -1
  420. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignature.js.map +0 -1
  421. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js.map +0 -1
  422. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js.map +0 -1
  423. package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js.map +0 -1
  424. package/lib/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js.map +0 -1
  425. package/lib/clients/types/aws.js.map +0 -1
  426. package/lib/clients/types/core.js.map +0 -1
  427. package/lib/clients/types/http.js.map +0 -1
  428. package/lib/clients/types/index.js.map +0 -1
  429. package/lib/constants.js.map +0 -1
  430. package/lib/index.js.map +0 -1
  431. package/lib/parseAWSExports.js.map +0 -1
  432. package/lib/types/index.js.map +0 -1
  433. package/lib/types/types.js.map +0 -1
  434. package/lib-esm/.tsbuildinfo +0 -3
  435. package/lib-esm/Amplify.js.map +0 -1
  436. package/lib-esm/ClientDevice/android.js.map +0 -1
  437. package/lib-esm/ClientDevice/browser.js.map +0 -1
  438. package/lib-esm/ClientDevice/index.js.map +0 -1
  439. package/lib-esm/ClientDevice/ios.js.map +0 -1
  440. package/lib-esm/ClientDevice/reactnative.js.map +0 -1
  441. package/lib-esm/Credentials.js.map +0 -1
  442. package/lib-esm/Errors.js.map +0 -1
  443. package/lib-esm/Hub.js.map +0 -1
  444. package/lib-esm/I18n/I18n.js.map +0 -1
  445. package/lib-esm/I18n/index.js.map +0 -1
  446. package/lib-esm/I18n/types.js.map +0 -1
  447. package/lib-esm/JS.js.map +0 -1
  448. package/lib-esm/Logger/ConsoleLogger.js.map +0 -1
  449. package/lib-esm/Logger/index.js.map +0 -1
  450. package/lib-esm/Logger/logger-interface.js.map +0 -1
  451. package/lib-esm/OAuthHelper/FacebookOAuth.js.map +0 -1
  452. package/lib-esm/OAuthHelper/GoogleOAuth.js.map +0 -1
  453. package/lib-esm/OAuthHelper/index.js.map +0 -1
  454. package/lib-esm/Platform/index.js.map +0 -1
  455. package/lib-esm/Platform/version.js.map +0 -1
  456. package/lib-esm/Providers/AWSCloudWatchProvider.js.map +0 -1
  457. package/lib-esm/Providers/index.js.map +0 -1
  458. package/lib-esm/RNComponents/index.js.map +0 -1
  459. package/lib-esm/RNComponents/reactnative.js.map +0 -1
  460. package/lib-esm/ServiceWorker/ServiceWorker.js.map +0 -1
  461. package/lib-esm/ServiceWorker/index.js.map +0 -1
  462. package/lib-esm/Signer.js.map +0 -1
  463. package/lib-esm/StorageHelper/index.js.map +0 -1
  464. package/lib-esm/StorageHelper/reactnative.js.map +0 -1
  465. package/lib-esm/UniversalStorage/index.js.map +0 -1
  466. package/lib-esm/Util/BackgroundProcessManager.js.map +0 -1
  467. package/lib-esm/Util/CognitoIdentityClient.d.ts +0 -14
  468. package/lib-esm/Util/CognitoIdentityClient.js +0 -27
  469. package/lib-esm/Util/CognitoIdentityClient.js.map +0 -1
  470. package/lib-esm/Util/Constants.js.map +0 -1
  471. package/lib-esm/Util/DateUtils.js.map +0 -1
  472. package/lib-esm/Util/Mutex.js.map +0 -1
  473. package/lib-esm/Util/Reachability.js.map +0 -1
  474. package/lib-esm/Util/Reachability.native.js.map +0 -1
  475. package/lib-esm/Util/Retry.js.map +0 -1
  476. package/lib-esm/Util/StringUtils.js.map +0 -1
  477. package/lib-esm/Util/index.js.map +0 -1
  478. package/lib-esm/clients/middleware/signing/signer/signatureV4/constants.js.map +0 -1
  479. package/lib-esm/clients/middleware/signing/signer/signatureV4/index.js.map +0 -1
  480. package/lib-esm/clients/middleware/signing/signer/signatureV4/index.native.js.map +0 -1
  481. package/lib-esm/clients/middleware/signing/signer/signatureV4/presignUrl.js.map +0 -1
  482. package/lib-esm/clients/middleware/signing/signer/signatureV4/signRequest.js.map +0 -1
  483. package/lib-esm/clients/middleware/signing/signer/signatureV4/types/index.js.map +0 -1
  484. package/lib-esm/clients/middleware/signing/signer/signatureV4/types/signer.js.map +0 -1
  485. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js.map +0 -1
  486. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js.map +0 -1
  487. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js.map +0 -1
  488. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js.map +0 -1
  489. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js.map +0 -1
  490. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js.map +0 -1
  491. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js.map +0 -1
  492. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js.map +0 -1
  493. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignature.js.map +0 -1
  494. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js.map +0 -1
  495. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js.map +0 -1
  496. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js.map +0 -1
  497. package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js.map +0 -1
  498. package/lib-esm/clients/types/aws.js.map +0 -1
  499. package/lib-esm/clients/types/core.js.map +0 -1
  500. package/lib-esm/clients/types/http.js.map +0 -1
  501. package/lib-esm/clients/types/index.js.map +0 -1
  502. package/lib-esm/constants.js.map +0 -1
  503. package/lib-esm/index.js.map +0 -1
  504. package/lib-esm/parseAWSExports.js.map +0 -1
  505. package/lib-esm/types/index.js.map +0 -1
  506. package/lib-esm/types/types.js.map +0 -1
  507. package/src/Util/CognitoIdentityClient.ts +0 -48
@@ -0,0 +1,89 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import {
5
+ Middleware,
6
+ MiddlewareHandler,
7
+ TransferHandler,
8
+ Request as RequestBase,
9
+ Response as ResponseBase,
10
+ } from '../types';
11
+
12
+ /**
13
+ * Compose a transfer handler with a core transfer handler and a list of middleware.
14
+ * @param coreHandler Core transfer handler
15
+ * @param middleware List of middleware
16
+ * @returns A transfer handler whose option type is the union of the core
17
+ * transfer handler's option type and the middleware's option type.
18
+ * @internal
19
+ */
20
+ export const composeTransferHandler =
21
+ <
22
+ MiddlewareOptionsArr extends any[] = [],
23
+ Request extends RequestBase = RequestBase,
24
+ Response extends ResponseBase = ResponseBase,
25
+ CoreHandler extends TransferHandler<
26
+ Request,
27
+ Response,
28
+ any
29
+ > = TransferHandler<Request, Response, {}>
30
+ >(
31
+ coreHandler: CoreHandler,
32
+ middleware: OptionToMiddleware<Request, Response, MiddlewareOptionsArr>
33
+ ) =>
34
+ (
35
+ request: Request,
36
+ options: MergeNoConflictKeys<
37
+ [...MiddlewareOptionsArr, InferOptionTypeFromTransferHandler<CoreHandler>]
38
+ >
39
+ ) => {
40
+ const context = {};
41
+ let composedHandler: MiddlewareHandler<Request, Response> = (
42
+ request: Request
43
+ ) => coreHandler(request, options);
44
+ for (let i = middleware.length - 1; i >= 0; i--) {
45
+ const m = middleware[i];
46
+ const resolvedMiddleware = m(options);
47
+ composedHandler = resolvedMiddleware(composedHandler, context);
48
+ }
49
+ return composedHandler(request);
50
+ };
51
+
52
+ /**
53
+ * Type to convert a middleware option type to a middleware type with the given
54
+ * option type.
55
+ */
56
+ type OptionToMiddleware<
57
+ Request extends RequestBase,
58
+ Response extends ResponseBase,
59
+ Options extends any[]
60
+ > = Options extends []
61
+ ? []
62
+ : Options extends [infer LastOption]
63
+ ? [Middleware<Request, Response, LastOption>]
64
+ : Options extends [infer FirstOption, ...infer RestOptions]
65
+ ? [
66
+ Middleware<Request, Response, FirstOption>,
67
+ ...OptionToMiddleware<Request, Response, RestOptions>
68
+ ]
69
+ : never;
70
+
71
+ /**
72
+ * Type to intersect multiple types if they have no conflict keys.
73
+ */
74
+ type MergeNoConflictKeys<Options extends any[]> = Options extends [
75
+ infer OnlyOption
76
+ ]
77
+ ? OnlyOption
78
+ : Options extends [infer FirstOption, infer SecondOption]
79
+ ? FirstOption & SecondOption
80
+ : Options extends [infer FirstOption, ...infer RestOptions]
81
+ ? FirstOption & MergeNoConflictKeys<RestOptions>
82
+ : never;
83
+
84
+ /**
85
+ * Type to infer the option type of a transfer handler type.
86
+ */
87
+ type InferOptionTypeFromTransferHandler<
88
+ T extends TransferHandler<any, any, any>
89
+ > = Parameters<T>[1];
@@ -0,0 +1,54 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { HttpResponse, ErrorParser } from '../../types';
5
+ import { isClockSkewError } from '../../utils/isClockSkewError';
6
+
7
+ /**
8
+ * Get retry decider function
9
+ * @param errorParser Function to load JavaScript error from HTTP response
10
+ */
11
+ export const getRetryDecider =
12
+ (errorParser: ErrorParser) =>
13
+ async (response?: HttpResponse, error?: Error): Promise<boolean> => {
14
+ const { name: errorCode } = error ?? (await errorParser(response)) ?? {};
15
+ const statusCode = response?.statusCode;
16
+ return (
17
+ isConnectionError(error) ||
18
+ isThrottlingError(statusCode, errorCode) ||
19
+ isClockSkewError(errorCode) ||
20
+ isServerSideError(statusCode, errorCode)
21
+ );
22
+ };
23
+
24
+ // reference: https://github.com/aws/aws-sdk-js-v3/blob/ab0e7be36e7e7f8a0c04834357aaad643c7912c3/packages/service-error-classification/src/constants.ts#L22-L37
25
+ const THROTTLING_ERROR_CODES = [
26
+ 'BandwidthLimitExceeded',
27
+ 'EC2ThrottledException',
28
+ 'LimitExceededException',
29
+ 'PriorRequestNotComplete',
30
+ 'ProvisionedThroughputExceededException',
31
+ 'RequestLimitExceeded',
32
+ 'RequestThrottled',
33
+ 'RequestThrottledException',
34
+ 'SlowDown',
35
+ 'ThrottledException',
36
+ 'Throttling',
37
+ 'ThrottlingException',
38
+ 'TooManyRequestsException',
39
+ ];
40
+
41
+ const TIMEOUT_ERROR_CODES = [
42
+ 'TimeoutError',
43
+ 'RequestTimeout',
44
+ 'RequestTimeoutException',
45
+ ];
46
+
47
+ const isThrottlingError = (statusCode?: number, errorCode?: string) =>
48
+ statusCode === 429 || THROTTLING_ERROR_CODES.includes(errorCode);
49
+
50
+ const isConnectionError = (error?: Error) => error?.name === 'Network error';
51
+
52
+ const isServerSideError = (statusCode?: number, errorCode?: string) =>
53
+ [500, 502, 503, 504].includes(statusCode) ||
54
+ TIMEOUT_ERROR_CODES.includes(errorCode);
@@ -0,0 +1,6 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { RetryOptions, retryMiddleware } from './middleware';
5
+ export { jitteredBackoff } from './jitteredBackoff';
6
+ export { getRetryDecider } from './defaultRetryDecider';
@@ -0,0 +1,16 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import type { RetryOptions } from './middleware';
5
+ // TODO: [v6] The separate retry utility is used by Data packages now and will replaced by retry middleware.
6
+ import { jitteredBackoff as jitteredBackoffUtil } from '../../../Util/Retry';
7
+
8
+ const DEFAULT_MAX_DELAY_MS = 5 * 60 * 1000;
9
+
10
+ export const jitteredBackoff: RetryOptions['computeDelay'] = attempt => {
11
+ const delayFunction = jitteredBackoffUtil(DEFAULT_MAX_DELAY_MS);
12
+ const delay = delayFunction(attempt);
13
+ // The delayFunction returns false when the delay is greater than the max delay(5 mins).
14
+ // In this case, the retry middleware will delay 5 mins instead, as a ceiling of the delay.
15
+ return delay === false ? DEFAULT_MAX_DELAY_MS : delay;
16
+ };
@@ -0,0 +1,133 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { MetadataBearer } from '@aws-sdk/types';
5
+ import {
6
+ MiddlewareContext,
7
+ MiddlewareHandler,
8
+ Request,
9
+ Response,
10
+ } from '../../types/core';
11
+
12
+ const DEFAULT_RETRY_ATTEMPTS = 3;
13
+
14
+ /**
15
+ * Configuration of the retry middleware
16
+ */
17
+ export interface RetryOptions<TResponse = Response> {
18
+ /**
19
+ * Function to decide if the request should be retried.
20
+ *
21
+ * @param response Optional response of the request.
22
+ * @param error Optional error thrown from previous attempts.
23
+ * @returns True if the request should be retried.
24
+ */
25
+ retryDecider: (response?: TResponse, error?: unknown) => Promise<boolean>;
26
+ /**
27
+ * Function to compute the delay in milliseconds before the next retry based
28
+ * on the number of attempts.
29
+ * @param attempt Current number of attempts, including the first attempt.
30
+ * @returns Delay in milliseconds.
31
+ */
32
+ computeDelay: (attempt: number) => number;
33
+ /**
34
+ * Maximum number of retry attempts, starting from 1. Defaults to 3.
35
+ */
36
+ maxAttempts?: number;
37
+ /**
38
+ * Optional AbortSignal to abort the retry attempts.
39
+ */
40
+ abortSignal?: AbortSignal;
41
+ }
42
+
43
+ /**
44
+ * Retry middleware
45
+ */
46
+ export const retryMiddleware = <TInput = Request, TOutput = Response>({
47
+ maxAttempts = DEFAULT_RETRY_ATTEMPTS,
48
+ retryDecider,
49
+ computeDelay,
50
+ abortSignal,
51
+ }: RetryOptions<TOutput>) => {
52
+ if (maxAttempts < 1) {
53
+ throw new Error('maxAttempts must be greater than 0');
54
+ }
55
+ return (
56
+ next: MiddlewareHandler<TInput, TOutput>,
57
+ context: MiddlewareContext
58
+ ) =>
59
+ async function retryMiddleware(request: TInput) {
60
+ let error: Error;
61
+ let attemptsCount = context.attemptsCount ?? 0;
62
+ let response: TOutput;
63
+ while (!abortSignal?.aborted && attemptsCount < maxAttempts) {
64
+ error = undefined;
65
+ response = undefined;
66
+ try {
67
+ response = await next(request);
68
+ } catch (e) {
69
+ error = e;
70
+ }
71
+ // context.attemptsCount may be updated after calling next handler which may retry the request by itself.
72
+ attemptsCount =
73
+ context.attemptsCount > attemptsCount
74
+ ? context.attemptsCount
75
+ : attemptsCount + 1;
76
+ context.attemptsCount = attemptsCount;
77
+ if (await retryDecider(response, error)) {
78
+ if (!abortSignal?.aborted && attemptsCount < maxAttempts) {
79
+ // prevent sleep for last attempt or cancelled request;
80
+ const delay = computeDelay(attemptsCount);
81
+ await cancellableSleep(delay, abortSignal);
82
+ }
83
+ continue;
84
+ } else if (response) {
85
+ updateMetadataAttempts(response, attemptsCount);
86
+ return response;
87
+ } else {
88
+ updateMetadataAttempts(error, attemptsCount);
89
+ throw error;
90
+ }
91
+ }
92
+ throw abortSignal?.aborted
93
+ ? new Error('Request aborted')
94
+ : error ?? new Error('Retry attempts exhausted');
95
+ };
96
+ };
97
+
98
+ const cancellableSleep = (timeoutMs: number, abortSignal?: AbortSignal) => {
99
+ if (abortSignal?.aborted) {
100
+ return Promise.resolve();
101
+ }
102
+ let timeoutId;
103
+ let sleepPromiseResolveFn;
104
+ const sleepPromise = new Promise<void>(resolve => {
105
+ sleepPromiseResolveFn = resolve;
106
+ timeoutId = setTimeout(resolve, timeoutMs);
107
+ });
108
+ abortSignal?.addEventListener('abort', function cancelSleep(event) {
109
+ clearTimeout(timeoutId);
110
+ abortSignal?.removeEventListener('abort', cancelSleep);
111
+ sleepPromiseResolveFn();
112
+ });
113
+ return sleepPromise;
114
+ };
115
+
116
+ /**
117
+ * Check if the response is a contains `$metadata` property.
118
+ *
119
+ * @internal Amplify internal use only
120
+ */
121
+ export const isMetadataBearer = (
122
+ response: unknown
123
+ ): response is MetadataBearer => typeof response?.['$metadata'] === 'object';
124
+
125
+ const updateMetadataAttempts = (
126
+ nextHandlerOutput: Object,
127
+ attempts: number
128
+ ) => {
129
+ if (isMetadataBearer(nextHandlerOutput)) {
130
+ nextHandlerOutput.$metadata.attempts = attempts;
131
+ }
132
+ nextHandlerOutput['$metadata'] = { attempts };
133
+ };
@@ -0,0 +1,4 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { signingMiddleware, SigningOptions } from './middleware';
@@ -0,0 +1,65 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import {
5
+ Credentials,
6
+ HttpRequest,
7
+ HttpResponse,
8
+ MiddlewareHandler,
9
+ } from '../../types';
10
+ import { isClockSkewError } from '../../utils/isClockSkewError';
11
+ import { signRequest } from './signer/signatureV4';
12
+ import { getSkewCorrectedDate } from './utils/getSkewCorrectedDate';
13
+ import { getUpdatedSystemClockOffset } from './utils/getUpdatedSystemClockOffset';
14
+
15
+ /**
16
+ * Configuration of the signing middleware
17
+ */
18
+ export interface SigningOptions {
19
+ credentials: Credentials;
20
+ region: string;
21
+ service: string;
22
+ }
23
+
24
+ /**
25
+ * Middleware that SigV4 signs request with AWS credentials, and correct system clock offset.
26
+ */
27
+ export const signingMiddleware = ({
28
+ credentials,
29
+ region,
30
+ service,
31
+ }: SigningOptions) => {
32
+ let currentSystemClockOffset;
33
+ return (next: MiddlewareHandler<HttpRequest, HttpResponse>) =>
34
+ async function signingMiddleware(request: HttpRequest) {
35
+ currentSystemClockOffset = currentSystemClockOffset ?? 0;
36
+ const signRequestOptions = {
37
+ credentials,
38
+ signingDate: getSkewCorrectedDate(currentSystemClockOffset),
39
+ signingRegion: region,
40
+ signingService: service,
41
+ };
42
+ const signedRequest = await signRequest(request, signRequestOptions);
43
+ try {
44
+ const response = await next(signedRequest);
45
+ return response;
46
+ } catch (error) {
47
+ const dateString = shouldUseServerTime(error)
48
+ ? error.ServerTime
49
+ : getDateHeader(error.$response);
50
+ if (dateString) {
51
+ currentSystemClockOffset = getUpdatedSystemClockOffset(
52
+ Date.parse(dateString),
53
+ currentSystemClockOffset
54
+ );
55
+ }
56
+ throw error;
57
+ }
58
+ };
59
+ };
60
+
61
+ const shouldUseServerTime = ({ ServerTime, Code }: any): boolean =>
62
+ ServerTime && isClockSkewError(Code);
63
+
64
+ const getDateHeader = ({ headers }: any = {}): string | undefined =>
65
+ headers?.date ?? headers?.Date;
@@ -0,0 +1,21 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * Wraps encodeURIComponent to encode additional characters to fully adhere to RFC 3986.
6
+ * @see https://github.com/aws/aws-sdk-js-v3/blob/86b432c464150069678b25ff88d57c2ca26e75a2/packages/smithy-client/src/extended-encode-uri-component.ts#L7
7
+ *
8
+ * @param uri URI string to encode
9
+ * @returns RFC 3986 encoded string
10
+ *
11
+ * @internal
12
+ */
13
+ export const extendedEncodeURIComponent = (uri: string): string => {
14
+ // Match characters normally not encoded by `encodeURIComponent`
15
+ const extendedCharacters = /[!'()*]/g;
16
+
17
+ return encodeURIComponent(uri).replace(extendedCharacters, hexEncode);
18
+ };
19
+
20
+ const hexEncode = (c: string) =>
21
+ `%${c.charCodeAt(0).toString(16).toUpperCase()}`;
@@ -0,0 +1,14 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * Returns a `Date` that is corrected for clock skew.
6
+ *
7
+ * @param systemClockOffset The offset of the system clock in milliseconds.
8
+ *
9
+ * @returns `Date` representing the current time adjusted by the system clock offset.
10
+ *
11
+ * @internal
12
+ */
13
+ export const getSkewCorrectedDate = (systemClockOffset: number): Date =>
14
+ new Date(Date.now() + systemClockOffset);
@@ -0,0 +1,22 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { isClockSkewed } from './isClockSkewed';
5
+
6
+ /**
7
+ * Returns the difference between clock time and the current system time if clock is skewed.
8
+ *
9
+ * @param clockTimeInMilliseconds Clock time in milliseconds.
10
+ * @param currentSystemClockOffset Current system clock offset in milliseconds.
11
+ *
12
+ * @internal
13
+ */
14
+ export const getUpdatedSystemClockOffset = (
15
+ clockTimeInMilliseconds: number,
16
+ currentSystemClockOffset: number
17
+ ): number => {
18
+ if (isClockSkewed(clockTimeInMilliseconds, currentSystemClockOffset)) {
19
+ return clockTimeInMilliseconds - Date.now();
20
+ }
21
+ return currentSystemClockOffset;
22
+ };
@@ -0,0 +1,26 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { getSkewCorrectedDate } from './getSkewCorrectedDate';
5
+
6
+ // 5 mins in milliseconds. Ref: https://github.com/aws/aws-sdk-js-v3/blob/6c0f44fab30a1bb2134af47362a31332abc3666b/packages/middleware-signing/src/utils/isClockSkewed.ts#L10
7
+ const SKEW_WINDOW = 5 * 60 * 1000;
8
+
9
+ /**
10
+ * Checks if the provided date is within the skew window of 5 minutes.
11
+ *
12
+ * @param clockTimeInMilliseconds Time to check for skew in milliseconds.
13
+ * @param clockOffsetInMilliseconds Offset to check clock against in milliseconds.
14
+ *
15
+ * @returns True if skewed. False otherwise.
16
+ *
17
+ * @internal
18
+ */
19
+ export const isClockSkewed = (
20
+ clockTimeInMilliseconds: number,
21
+ clockOffsetInMilliseconds: number
22
+ ): boolean =>
23
+ Math.abs(
24
+ getSkewCorrectedDate(clockOffsetInMilliseconds).getTime() -
25
+ clockTimeInMilliseconds
26
+ ) >= SKEW_WINDOW;
@@ -0,0 +1,4 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { userAgentMiddleware, UserAgentOptions } from './middleware';
@@ -0,0 +1,41 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { HttpRequest, HttpResponse } from '../../types/http';
5
+ import { Middleware } from '../../types/core';
6
+
7
+ export interface UserAgentOptions {
8
+ userAgentHeader?: string;
9
+ userAgentValue?: string;
10
+ }
11
+
12
+ /**
13
+ * Middleware injects user agent string to specified header(default to 'x-amz-user-agent'),
14
+ * if the header is not set already.
15
+ *
16
+ * TODO: incorporate new user agent design
17
+ */
18
+ export const userAgentMiddleware: Middleware<
19
+ HttpRequest,
20
+ HttpResponse,
21
+ UserAgentOptions
22
+ > =
23
+ ({
24
+ userAgentHeader = 'x-amz-user-agent',
25
+ userAgentValue = '',
26
+ }: UserAgentOptions) =>
27
+ next => {
28
+ return async function userAgentMiddleware(request) {
29
+ if (userAgentValue.trim().length === 0) {
30
+ const result = await next(request);
31
+ return result;
32
+ } else {
33
+ const headerName = userAgentHeader.toLowerCase();
34
+ request.headers[headerName] = request.headers[headerName]
35
+ ? `${request.headers[headerName]} ${userAgentValue}`
36
+ : userAgentValue;
37
+ const response = await next(request);
38
+ return response;
39
+ }
40
+ };
41
+ };
@@ -0,0 +1,5 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { parseMetadata } from './responseInfo';
5
+ export { parseJsonBody, parseJsonError } from './json';
@@ -0,0 +1,51 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ErrorParser, HttpResponse } from '../types';
5
+ import { parseMetadata } from './responseInfo';
6
+
7
+ /**
8
+ * Utility functions for serializing and deserializing of JSON protocol in general(including: REST-JSON, JSON-RPC, etc.)
9
+ */
10
+
11
+ /**
12
+ * Error parser for AWS JSON protocol.
13
+ */
14
+ export const parseJsonError: ErrorParser = async (response?: HttpResponse) => {
15
+ if (!response || response.statusCode < 300) {
16
+ return;
17
+ }
18
+ const body = await parseJsonBody(response);
19
+ const sanitizeErrorCode = (rawValue: string | number): string => {
20
+ const [cleanValue] = rawValue.toString().split(/[\,\:]+/);
21
+ if (cleanValue.includes('#')) {
22
+ return cleanValue.split('#')[1];
23
+ }
24
+ return cleanValue;
25
+ };
26
+ const code = sanitizeErrorCode(
27
+ response.headers['x-amzn-errortype'] ??
28
+ body.code ??
29
+ body.__type ??
30
+ 'UnknownError'
31
+ );
32
+ const message = body.message ?? body.Message ?? 'Unknown error';
33
+ const error = new Error(message);
34
+ return Object.assign(error, {
35
+ name: code,
36
+ $metadata: parseMetadata(response),
37
+ });
38
+ };
39
+
40
+ /**
41
+ * Parse JSON response body to JavaScript object.
42
+ */
43
+ export const parseJsonBody = async (response: HttpResponse): Promise<any> => {
44
+ if (!response.body) {
45
+ throw new Error('Missing response payload');
46
+ }
47
+ const output = await response.body.json();
48
+ return Object.assign(output, {
49
+ $metadata: parseMetadata(response),
50
+ });
51
+ };
@@ -0,0 +1,20 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { ResponseMetadata } from '@aws-sdk/types';
5
+ import { isMetadataBearer } from '../middleware/retry/middleware';
6
+ import { HttpResponse } from '../types/http';
7
+
8
+ export const parseMetadata = (response: HttpResponse): ResponseMetadata => {
9
+ const { headers, statusCode } = response;
10
+ return {
11
+ ...(isMetadataBearer(response) ? response.$metadata : {}),
12
+ httpStatusCode: statusCode,
13
+ requestId:
14
+ headers['x-amzn-requestid'] ??
15
+ headers['x-amzn-request-id'] ??
16
+ headers['x-amz-request-id'],
17
+ extendedRequestId: headers['x-amz-id-2'],
18
+ cfId: headers['x-amz-cf-id'],
19
+ };
20
+ };
@@ -1,6 +1,27 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import { Endpoint } from './core';
5
+ import { HttpResponse } from './http';
6
+
4
7
  export type { Credentials } from '@aws-sdk/types';
5
8
 
6
9
  export type SourceData = string | ArrayBuffer | ArrayBufferView;
10
+
11
+ /**
12
+ * Basic option type for endpoint resolvers. It contains region only.
13
+ */
14
+ export type EndpointResolverOptions = { region: string };
15
+
16
+ export interface ServiceClientOptions {
17
+ region: string;
18
+ endpointResolver: (options: EndpointResolverOptions) => Endpoint;
19
+ }
20
+
21
+ /**
22
+ * parse errors from given response. If no error code is found, return undefined.
23
+ * This function is protocol-specific (e.g. JSON, XML, etc.)
24
+ */
25
+ export type ErrorParser = (
26
+ response?: HttpResponse
27
+ ) => Promise<Error | undefined>;
@@ -12,6 +12,46 @@ export interface Request {
12
12
  export interface Response {
13
13
  body: unknown;
14
14
  }
15
+
16
+ export interface TransferHandler<
17
+ Input extends Request,
18
+ Output extends Response,
19
+ TransferOptions
20
+ > {
21
+ (request: Input, options: TransferOptions): Promise<Output>;
22
+ }
23
+
24
+ /**
25
+ * A slimmed down version of the AWS SDK v3 middleware handler, only handling instantiated requests
26
+ */
27
+ export type MiddlewareHandler<Input, Output> = (
28
+ request: Input
29
+ ) => Promise<Output>;
30
+
31
+ /**
32
+ * The context object to store states across the middleware chain.
33
+ */
34
+ export type MiddlewareContext = {
35
+ /**
36
+ * The number of times the request has been attempted. This is set by retry middleware
37
+ */
38
+ attemptsCount?: number;
39
+ };
40
+
41
+ type ConfiguredMiddleware<Input extends Request, Output extends Response> = (
42
+ next: MiddlewareHandler<Input, Output>,
43
+ context: MiddlewareContext
44
+ ) => MiddlewareHandler<Input, Output>;
45
+
46
+ /**
47
+ * A slimmed down version of the AWS SDK v3 middleware, only handling tasks after Serde.
48
+ */
49
+ export type Middleware<
50
+ Input extends Request,
51
+ Output extends Response,
52
+ MiddlewareOptions
53
+ > = (options: MiddlewareOptions) => ConfiguredMiddleware<Input, Output>;
54
+
15
55
  export interface Endpoint {
16
56
  url: URL;
17
57
  }