@servicevic-oss/cdk-cleanup-certificate-validation-records 1.3.19 → 1.3.21

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 (46) hide show
  1. package/.jsii +5 -5
  2. package/lib/index.js +2 -2
  3. package/node_modules/@aws-sdk/client-acm/package.json +8 -8
  4. package/node_modules/@aws-sdk/client-route-53/package.json +10 -10
  5. package/node_modules/@aws-sdk/core/package.json +6 -6
  6. package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
  7. package/node_modules/@aws-sdk/credential-provider-http/package.json +7 -7
  8. package/node_modules/@aws-sdk/credential-provider-ini/package.json +13 -13
  9. package/node_modules/@aws-sdk/credential-provider-login/package.json +6 -6
  10. package/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +12 -1
  11. package/node_modules/@aws-sdk/credential-provider-node/dist-es/runtime/memoize-chain.js +12 -1
  12. package/node_modules/@aws-sdk/credential-provider-node/package.json +11 -11
  13. package/node_modules/@aws-sdk/credential-provider-process/package.json +5 -5
  14. package/node_modules/@aws-sdk/credential-provider-sso/package.json +7 -7
  15. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +6 -6
  16. package/node_modules/@aws-sdk/middleware-sdk-route53/package.json +3 -3
  17. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  18. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  19. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  20. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  21. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  22. package/node_modules/@aws-sdk/nested-clients/package.json +8 -8
  23. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +4 -4
  24. package/node_modules/@aws-sdk/token-providers/package.json +6 -6
  25. package/node_modules/@aws-sdk/types/package.json +2 -2
  26. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  27. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +39 -22
  28. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +39 -22
  29. package/node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/configurations.js +19 -6
  30. package/node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/retryMiddleware.js +4 -5
  31. package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/constants.js +1 -1
  32. package/node_modules/@smithy/core/dist-es/submodules/retry/util-retry/ConfiguredRetryStrategy.js +4 -5
  33. package/node_modules/@smithy/core/dist-es/submodules/retry/util-retry/DefaultRetryToken.js +3 -0
  34. package/node_modules/@smithy/core/dist-es/submodules/retry/util-retry/StandardRetryStrategy.js +9 -5
  35. package/node_modules/@smithy/core/dist-types/submodules/retry/middleware-retry/configurations.d.ts +4 -1
  36. package/node_modules/@smithy/core/dist-types/submodules/retry/util-retry/ConfiguredRetryStrategy.d.ts +1 -2
  37. package/node_modules/@smithy/core/dist-types/submodules/retry/util-retry/DefaultRetryToken.d.ts +3 -0
  38. package/node_modules/@smithy/core/dist-types/submodules/retry/util-retry/StandardRetryStrategy.d.ts +1 -1
  39. package/node_modules/@smithy/core/package.json +2 -2
  40. package/node_modules/@smithy/credential-provider-imds/package.json +3 -3
  41. package/node_modules/@smithy/fetch-http-handler/package.json +4 -4
  42. package/node_modules/@smithy/node-http-handler/package.json +4 -4
  43. package/node_modules/@smithy/signature-v4/package.json +3 -3
  44. package/node_modules/@smithy/types/dist-types/retry.d.ts +25 -0
  45. package/node_modules/@smithy/types/package.json +1 -1
  46. package/package.json +5 -5
@@ -33,7 +33,7 @@ const THROTTLING_ERROR_CODES = [
33
33
  const TRANSIENT_ERROR_CODES = ["TimeoutError", "RequestTimeout", "RequestTimeoutException"];
34
34
  const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];
35
35
  const NODEJS_TIMEOUT_ERROR_CODES = ["ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT"];
36
- const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND"];
36
+ const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND", "EAI_AGAIN"];
37
37
 
38
38
  const isRetryableByTrait = (error) => error?.$retryable !== undefined;
39
39
  const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);
@@ -184,9 +184,6 @@ function bindRetryMiddleware(isStreamingPayload) {
184
184
  retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);
185
185
  }
186
186
  catch (refreshError) {
187
- if (typeof refreshError.$backoff === "number") {
188
- await cooldown(refreshError.$backoff);
189
- }
190
187
  if (!lastError.$metadata) {
191
188
  lastError.$metadata = {};
192
189
  }
@@ -196,8 +193,10 @@ function bindRetryMiddleware(isStreamingPayload) {
196
193
  }
197
194
  attempts = retryToken.getRetryCount();
198
195
  const delay = retryToken.getRetryDelay();
199
- totalRetryDelay += delay;
200
- await cooldown(delay);
196
+ totalRetryDelay += (retryToken?.$retryLog?.acquisitionDelay ?? 0) + delay;
197
+ if (delay > 0) {
198
+ await cooldown(delay);
199
+ }
201
200
  }
202
201
  }
203
202
  }
@@ -398,6 +397,9 @@ class DefaultRetryToken {
398
397
  count;
399
398
  cost;
400
399
  longPoll;
400
+ $retryLog = {
401
+ acquisitionDelay: 0,
402
+ };
401
403
  constructor(delay, count, cost, longPoll) {
402
404
  this.delay = delay;
403
405
  this.count = count;
@@ -433,8 +435,8 @@ const refusal = {
433
435
  };
434
436
  let StandardRetryStrategy$1 = class StandardRetryStrategy {
435
437
  mode = exports.RETRY_MODES.STANDARD;
436
- capacity = INITIAL_RETRY_TOKENS;
437
438
  retryBackoffStrategy;
439
+ capacity = INITIAL_RETRY_TOKENS;
438
440
  maxAttemptsProvider;
439
441
  baseDelay;
440
442
  constructor(arg1) {
@@ -470,14 +472,18 @@ let StandardRetryStrategy$1 = class StandardRetryStrategy {
470
472
  retryDelay = Math.max(delayFromErrorType, Math.min(errorInfo.retryAfterHint.getTime() - Date.now(), delayFromErrorType + 5_000));
471
473
  }
472
474
  if (!shouldRetry) {
473
- throw Object.assign(new Error("No retry token available"), {
474
- $backoff: Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0,
475
- });
475
+ const longPollBackoff = Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0;
476
+ if (longPollBackoff > 0) {
477
+ await new Promise((r) => setTimeout(r, longPollBackoff));
478
+ }
476
479
  }
477
480
  else {
478
481
  const capacityCost = this.getCapacityCost(errorType);
479
482
  this.capacity -= capacityCost;
480
- return new DefaultRetryToken(retryDelay, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
483
+ const nextToken = new DefaultRetryToken(0, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
484
+ await new Promise((r) => setTimeout(r, retryDelay));
485
+ nextToken.$retryLog.acquisitionDelay = retryDelay;
486
+ return nextToken;
481
487
  }
482
488
  }
483
489
  throw new Error("No retry token available");
@@ -559,11 +565,10 @@ class ConfiguredRetryStrategy extends StandardRetryStrategy$1 {
559
565
  else {
560
566
  this.computeNextBackoffDelay = computeNextBackoffDelay;
561
567
  }
562
- }
563
- async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
564
- const token = await super.refreshRetryTokenForRetry(tokenToRenew, errorInfo);
565
- token.getRetryDelay = () => this.computeNextBackoffDelay(token.getRetryCount());
566
- return token;
568
+ this.retryBackoffStrategy.computeNextBackoffDelay = (completedAttempt) => {
569
+ const nextAttempt = completedAttempt + 1;
570
+ return this.computeNextBackoffDelay(nextAttempt);
571
+ };
567
572
  }
568
573
  }
569
574
 
@@ -710,17 +715,29 @@ class AdaptiveRetryStrategy extends StandardRetryStrategy {
710
715
  }
711
716
  }
712
717
 
713
- const resolveRetryConfig = (input) => {
718
+ const resolveRetryConfig = (input, defaults) => {
714
719
  const { retryStrategy, retryMode } = input;
715
- const maxAttempts = client.normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);
720
+ const { defaultMaxAttempts = DEFAULT_MAX_ATTEMPTS, defaultBaseDelay = Retry.delay() } = defaults ?? {};
721
+ const maxAttemptsProvider = client.normalizeProvider(input.maxAttempts ?? defaultMaxAttempts);
716
722
  let controller = retryStrategy
717
723
  ? Promise.resolve(retryStrategy)
718
724
  : undefined;
719
- const getDefault = async () => (await client.normalizeProvider(retryMode)()) === exports.RETRY_MODES.ADAPTIVE
720
- ? new AdaptiveRetryStrategy$1(maxAttempts)
721
- : new StandardRetryStrategy$1(maxAttempts);
725
+ const getDefault = async () => {
726
+ const maxAttempts = await maxAttemptsProvider();
727
+ const adaptive = (await client.normalizeProvider(retryMode)()) === exports.RETRY_MODES.ADAPTIVE;
728
+ if (adaptive) {
729
+ return new AdaptiveRetryStrategy$1(maxAttemptsProvider, {
730
+ maxAttempts,
731
+ baseDelay: defaultBaseDelay,
732
+ });
733
+ }
734
+ return new StandardRetryStrategy$1({
735
+ maxAttempts,
736
+ baseDelay: defaultBaseDelay,
737
+ });
738
+ };
722
739
  return Object.assign(input, {
723
- maxAttempts,
740
+ maxAttempts: maxAttemptsProvider,
724
741
  retryStrategy: () => (controller ??= getDefault()),
725
742
  });
726
743
  };
@@ -35,7 +35,7 @@ const THROTTLING_ERROR_CODES = [
35
35
  const TRANSIENT_ERROR_CODES = ["TimeoutError", "RequestTimeout", "RequestTimeoutException"];
36
36
  const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];
37
37
  const NODEJS_TIMEOUT_ERROR_CODES = ["ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT"];
38
- const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND"];
38
+ const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND", "EAI_AGAIN"];
39
39
 
40
40
  const isRetryableByTrait = (error) => error?.$retryable !== undefined;
41
41
  const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);
@@ -186,9 +186,6 @@ function bindRetryMiddleware(isStreamingPayload) {
186
186
  retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);
187
187
  }
188
188
  catch (refreshError) {
189
- if (typeof refreshError.$backoff === "number") {
190
- await cooldown(refreshError.$backoff);
191
- }
192
189
  if (!lastError.$metadata) {
193
190
  lastError.$metadata = {};
194
191
  }
@@ -198,8 +195,10 @@ function bindRetryMiddleware(isStreamingPayload) {
198
195
  }
199
196
  attempts = retryToken.getRetryCount();
200
197
  const delay = retryToken.getRetryDelay();
201
- totalRetryDelay += delay;
202
- await cooldown(delay);
198
+ totalRetryDelay += (retryToken?.$retryLog?.acquisitionDelay ?? 0) + delay;
199
+ if (delay > 0) {
200
+ await cooldown(delay);
201
+ }
203
202
  }
204
203
  }
205
204
  }
@@ -400,6 +399,9 @@ class DefaultRetryToken {
400
399
  count;
401
400
  cost;
402
401
  longPoll;
402
+ $retryLog = {
403
+ acquisitionDelay: 0,
404
+ };
403
405
  constructor(delay, count, cost, longPoll) {
404
406
  this.delay = delay;
405
407
  this.count = count;
@@ -435,8 +437,8 @@ const refusal = {
435
437
  };
436
438
  let StandardRetryStrategy$1 = class StandardRetryStrategy {
437
439
  mode = exports.RETRY_MODES.STANDARD;
438
- capacity = INITIAL_RETRY_TOKENS;
439
440
  retryBackoffStrategy;
441
+ capacity = INITIAL_RETRY_TOKENS;
440
442
  maxAttemptsProvider;
441
443
  baseDelay;
442
444
  constructor(arg1) {
@@ -472,14 +474,18 @@ let StandardRetryStrategy$1 = class StandardRetryStrategy {
472
474
  retryDelay = Math.max(delayFromErrorType, Math.min(errorInfo.retryAfterHint.getTime() - Date.now(), delayFromErrorType + 5_000));
473
475
  }
474
476
  if (!shouldRetry) {
475
- throw Object.assign(new Error("No retry token available"), {
476
- $backoff: Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0,
477
- });
477
+ const longPollBackoff = Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0;
478
+ if (longPollBackoff > 0) {
479
+ await new Promise((r) => setTimeout(r, longPollBackoff));
480
+ }
478
481
  }
479
482
  else {
480
483
  const capacityCost = this.getCapacityCost(errorType);
481
484
  this.capacity -= capacityCost;
482
- return new DefaultRetryToken(retryDelay, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
485
+ const nextToken = new DefaultRetryToken(0, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
486
+ await new Promise((r) => setTimeout(r, retryDelay));
487
+ nextToken.$retryLog.acquisitionDelay = retryDelay;
488
+ return nextToken;
483
489
  }
484
490
  }
485
491
  throw new Error("No retry token available");
@@ -561,11 +567,10 @@ class ConfiguredRetryStrategy extends StandardRetryStrategy$1 {
561
567
  else {
562
568
  this.computeNextBackoffDelay = computeNextBackoffDelay;
563
569
  }
564
- }
565
- async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
566
- const token = await super.refreshRetryTokenForRetry(tokenToRenew, errorInfo);
567
- token.getRetryDelay = () => this.computeNextBackoffDelay(token.getRetryCount());
568
- return token;
570
+ this.retryBackoffStrategy.computeNextBackoffDelay = (completedAttempt) => {
571
+ const nextAttempt = completedAttempt + 1;
572
+ return this.computeNextBackoffDelay(nextAttempt);
573
+ };
569
574
  }
570
575
  }
571
576
 
@@ -737,17 +742,29 @@ const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {
737
742
  },
738
743
  default: DEFAULT_MAX_ATTEMPTS,
739
744
  };
740
- const resolveRetryConfig = (input) => {
745
+ const resolveRetryConfig = (input, defaults) => {
741
746
  const { retryStrategy, retryMode } = input;
742
- const maxAttempts = client.normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);
747
+ const { defaultMaxAttempts = DEFAULT_MAX_ATTEMPTS, defaultBaseDelay = Retry.delay() } = defaults ?? {};
748
+ const maxAttemptsProvider = client.normalizeProvider(input.maxAttempts ?? defaultMaxAttempts);
743
749
  let controller = retryStrategy
744
750
  ? Promise.resolve(retryStrategy)
745
751
  : undefined;
746
- const getDefault = async () => (await client.normalizeProvider(retryMode)()) === exports.RETRY_MODES.ADAPTIVE
747
- ? new AdaptiveRetryStrategy$1(maxAttempts)
748
- : new StandardRetryStrategy$1(maxAttempts);
752
+ const getDefault = async () => {
753
+ const maxAttempts = await maxAttemptsProvider();
754
+ const adaptive = (await client.normalizeProvider(retryMode)()) === exports.RETRY_MODES.ADAPTIVE;
755
+ if (adaptive) {
756
+ return new AdaptiveRetryStrategy$1(maxAttemptsProvider, {
757
+ maxAttempts,
758
+ baseDelay: defaultBaseDelay,
759
+ });
760
+ }
761
+ return new StandardRetryStrategy$1({
762
+ maxAttempts,
763
+ baseDelay: defaultBaseDelay,
764
+ });
765
+ };
749
766
  return Object.assign(input, {
750
- maxAttempts,
767
+ maxAttempts: maxAttemptsProvider,
751
768
  retryStrategy: () => (controller ??= getDefault()),
752
769
  });
753
770
  };
@@ -2,6 +2,7 @@ import { normalizeProvider } from "@smithy/core/client";
2
2
  import { AdaptiveRetryStrategy } from "../util-retry/AdaptiveRetryStrategy";
3
3
  import { StandardRetryStrategy } from "../util-retry/StandardRetryStrategy";
4
4
  import { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE, RETRY_MODES } from "../util-retry/config";
5
+ import { Retry } from "../util-retry/retries-2026-config";
5
6
  export const ENV_MAX_ATTEMPTS = "AWS_MAX_ATTEMPTS";
6
7
  export const CONFIG_MAX_ATTEMPTS = "max_attempts";
7
8
  export const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {
@@ -27,17 +28,29 @@ export const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {
27
28
  },
28
29
  default: DEFAULT_MAX_ATTEMPTS,
29
30
  };
30
- export const resolveRetryConfig = (input) => {
31
+ export const resolveRetryConfig = (input, defaults) => {
31
32
  const { retryStrategy, retryMode } = input;
32
- const maxAttempts = normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);
33
+ const { defaultMaxAttempts = DEFAULT_MAX_ATTEMPTS, defaultBaseDelay = Retry.delay() } = defaults ?? {};
34
+ const maxAttemptsProvider = normalizeProvider(input.maxAttempts ?? defaultMaxAttempts);
33
35
  let controller = retryStrategy
34
36
  ? Promise.resolve(retryStrategy)
35
37
  : undefined;
36
- const getDefault = async () => (await normalizeProvider(retryMode)()) === RETRY_MODES.ADAPTIVE
37
- ? new AdaptiveRetryStrategy(maxAttempts)
38
- : new StandardRetryStrategy(maxAttempts);
38
+ const getDefault = async () => {
39
+ const maxAttempts = await maxAttemptsProvider();
40
+ const adaptive = (await normalizeProvider(retryMode)()) === RETRY_MODES.ADAPTIVE;
41
+ if (adaptive) {
42
+ return new AdaptiveRetryStrategy(maxAttemptsProvider, {
43
+ maxAttempts,
44
+ baseDelay: defaultBaseDelay,
45
+ });
46
+ }
47
+ return new StandardRetryStrategy({
48
+ maxAttempts,
49
+ baseDelay: defaultBaseDelay,
50
+ });
51
+ };
39
52
  return Object.assign(input, {
40
- maxAttempts,
53
+ maxAttempts: maxAttemptsProvider,
41
54
  retryStrategy: () => (controller ??= getDefault()),
42
55
  });
43
56
  };
@@ -42,9 +42,6 @@ export function bindRetryMiddleware(isStreamingPayload) {
42
42
  retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);
43
43
  }
44
44
  catch (refreshError) {
45
- if (typeof refreshError.$backoff === "number") {
46
- await cooldown(refreshError.$backoff);
47
- }
48
45
  if (!lastError.$metadata) {
49
46
  lastError.$metadata = {};
50
47
  }
@@ -54,8 +51,10 @@ export function bindRetryMiddleware(isStreamingPayload) {
54
51
  }
55
52
  attempts = retryToken.getRetryCount();
56
53
  const delay = retryToken.getRetryDelay();
57
- totalRetryDelay += delay;
58
- await cooldown(delay);
54
+ totalRetryDelay += (retryToken?.$retryLog?.acquisitionDelay ?? 0) + delay;
55
+ if (delay > 0) {
56
+ await cooldown(delay);
57
+ }
59
58
  }
60
59
  }
61
60
  }
@@ -25,4 +25,4 @@ export const THROTTLING_ERROR_CODES = [
25
25
  export const TRANSIENT_ERROR_CODES = ["TimeoutError", "RequestTimeout", "RequestTimeoutException"];
26
26
  export const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];
27
27
  export const NODEJS_TIMEOUT_ERROR_CODES = ["ECONNRESET", "ECONNREFUSED", "EPIPE", "ETIMEDOUT"];
28
- export const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND"];
28
+ export const NODEJS_NETWORK_ERROR_CODES = ["EHOSTUNREACH", "ENETUNREACH", "ENOTFOUND", "EAI_AGAIN"];
@@ -10,10 +10,9 @@ export class ConfiguredRetryStrategy extends StandardRetryStrategy {
10
10
  else {
11
11
  this.computeNextBackoffDelay = computeNextBackoffDelay;
12
12
  }
13
- }
14
- async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
15
- const token = await super.refreshRetryTokenForRetry(tokenToRenew, errorInfo);
16
- token.getRetryDelay = () => this.computeNextBackoffDelay(token.getRetryCount());
17
- return token;
13
+ this.retryBackoffStrategy.computeNextBackoffDelay = (completedAttempt) => {
14
+ const nextAttempt = completedAttempt + 1;
15
+ return this.computeNextBackoffDelay(nextAttempt);
16
+ };
18
17
  }
19
18
  }
@@ -4,6 +4,9 @@ export class DefaultRetryToken {
4
4
  count;
5
5
  cost;
6
6
  longPoll;
7
+ $retryLog = {
8
+ acquisitionDelay: 0,
9
+ };
7
10
  constructor(delay, count, cost, longPoll) {
8
11
  this.delay = delay;
9
12
  this.count = count;
@@ -10,8 +10,8 @@ const refusal = {
10
10
  };
11
11
  export class StandardRetryStrategy {
12
12
  mode = RETRY_MODES.STANDARD;
13
- capacity = INITIAL_RETRY_TOKENS;
14
13
  retryBackoffStrategy;
14
+ capacity = INITIAL_RETRY_TOKENS;
15
15
  maxAttemptsProvider;
16
16
  baseDelay;
17
17
  constructor(arg1) {
@@ -47,14 +47,18 @@ export class StandardRetryStrategy {
47
47
  retryDelay = Math.max(delayFromErrorType, Math.min(errorInfo.retryAfterHint.getTime() - Date.now(), delayFromErrorType + 5_000));
48
48
  }
49
49
  if (!shouldRetry) {
50
- throw Object.assign(new Error("No retry token available"), {
51
- $backoff: Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0,
52
- });
50
+ const longPollBackoff = Retry.v2026 && retryCode === refusal.capacity && isLongPoll ? retryDelay : 0;
51
+ if (longPollBackoff > 0) {
52
+ await new Promise((r) => setTimeout(r, longPollBackoff));
53
+ }
53
54
  }
54
55
  else {
55
56
  const capacityCost = this.getCapacityCost(errorType);
56
57
  this.capacity -= capacityCost;
57
- return new DefaultRetryToken(retryDelay, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
58
+ const nextToken = new DefaultRetryToken(0, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);
59
+ await new Promise((r) => setTimeout(r, retryDelay));
60
+ nextToken.$retryLog.acquisitionDelay = retryDelay;
61
+ return nextToken;
58
62
  }
59
63
  }
60
64
  throw new Error("No retry token available");
@@ -53,7 +53,10 @@ export interface RetryResolvedConfig {
53
53
  /**
54
54
  * @internal
55
55
  */
56
- export declare const resolveRetryConfig: <T>(input: T & PreviouslyResolved & RetryInputConfig) => T & RetryResolvedConfig;
56
+ export declare const resolveRetryConfig: <T>(input: T & PreviouslyResolved & RetryInputConfig, defaults?: {
57
+ defaultMaxAttempts?: number;
58
+ defaultBaseDelay?: number;
59
+ }) => T & RetryResolvedConfig;
57
60
  /**
58
61
  * @internal
59
62
  */
@@ -1,4 +1,4 @@
1
- import type { Provider, RetryBackoffStrategy, RetryErrorInfo, RetryStrategyV2, StandardRetryToken } from "@smithy/types";
1
+ import type { Provider, RetryBackoffStrategy, RetryStrategyV2 } from "@smithy/types";
2
2
  import { StandardRetryStrategy } from "./StandardRetryStrategy";
3
3
  /**
4
4
  * This extension of the StandardRetryStrategy allows customizing the
@@ -28,5 +28,4 @@ export declare class ConfiguredRetryStrategy extends StandardRetryStrategy imple
28
28
  * ```
29
29
  */
30
30
  constructor(maxAttempts: number | Provider<number>, computeNextBackoffDelay?: number | RetryBackoffStrategy["computeNextBackoffDelay"]);
31
- refreshRetryTokenForRetry(tokenToRenew: StandardRetryToken, errorInfo: RetryErrorInfo): Promise<StandardRetryToken>;
32
31
  }
@@ -7,6 +7,9 @@ export declare class DefaultRetryToken implements StandardRetryToken {
7
7
  private readonly count;
8
8
  private readonly cost;
9
9
  private readonly longPoll;
10
+ $retryLog: {
11
+ acquisitionDelay: number;
12
+ };
10
13
  constructor(delay: number, count: number, cost: number | undefined, longPoll: boolean);
11
14
  getRetryCount(): number;
12
15
  getRetryDelay(): number;
@@ -21,8 +21,8 @@ export type StandardRetryStrategyOptions = {
21
21
  */
22
22
  export declare class StandardRetryStrategy implements RetryStrategyV2 {
23
23
  readonly mode: string;
24
+ protected readonly retryBackoffStrategy: StandardRetryBackoffStrategy;
24
25
  private capacity;
25
- private readonly retryBackoffStrategy;
26
26
  private readonly maxAttemptsProvider;
27
27
  private readonly baseDelay;
28
28
  constructor(maxAttempts: number);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/core",
3
- "version": "3.24.5",
3
+ "version": "3.24.6",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
6
  "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline core",
@@ -169,7 +169,7 @@
169
169
  "sideEffects": false,
170
170
  "dependencies": {
171
171
  "@aws-crypto/crc32": "5.2.0",
172
- "@smithy/types": "^4.14.2",
172
+ "@smithy/types": "^4.14.3",
173
173
  "tslib": "^2.6.2"
174
174
  },
175
175
  "engines": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/credential-provider-imds",
3
- "version": "4.3.6",
3
+ "version": "4.3.7",
4
4
  "description": "AWS credential provider that sources credentials from the EC2 instance metadata service and ECS container metadata service",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
@@ -27,8 +27,8 @@
27
27
  "license": "Apache-2.0",
28
28
  "sideEffects": false,
29
29
  "dependencies": {
30
- "@smithy/core": "^3.24.5",
31
- "@smithy/types": "^4.14.2",
30
+ "@smithy/core": "^3.24.6",
31
+ "@smithy/types": "^4.14.3",
32
32
  "tslib": "^2.6.2"
33
33
  },
34
34
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/fetch-http-handler",
3
- "version": "5.4.5",
3
+ "version": "5.4.6",
4
4
  "description": "Provides a way to make requests",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
@@ -27,12 +27,12 @@
27
27
  "module": "./dist-es/index.js",
28
28
  "types": "./dist-types/index.d.ts",
29
29
  "dependencies": {
30
- "@smithy/core": "^3.24.5",
31
- "@smithy/types": "^4.14.2",
30
+ "@smithy/core": "^3.24.6",
31
+ "@smithy/types": "^4.14.3",
32
32
  "tslib": "^2.6.2"
33
33
  },
34
34
  "devDependencies": {
35
- "@smithy/abort-controller": "^4.2.15",
35
+ "@smithy/abort-controller": "^4.2.16",
36
36
  "concurrently": "7.0.0",
37
37
  "downlevel-dts": "0.10.1",
38
38
  "premove": "4.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/node-http-handler",
3
- "version": "4.7.5",
3
+ "version": "4.7.6",
4
4
  "description": "Provides a way to make requests",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
@@ -26,12 +26,12 @@
26
26
  "module": "./dist-es/index.js",
27
27
  "types": "./dist-types/index.d.ts",
28
28
  "dependencies": {
29
- "@smithy/core": "^3.24.5",
30
- "@smithy/types": "^4.14.2",
29
+ "@smithy/core": "^3.24.6",
30
+ "@smithy/types": "^4.14.3",
31
31
  "tslib": "^2.6.2"
32
32
  },
33
33
  "devDependencies": {
34
- "@smithy/abort-controller": "^4.2.15",
34
+ "@smithy/abort-controller": "^4.2.16",
35
35
  "@types/node": "^18.11.9",
36
36
  "concurrently": "7.0.0",
37
37
  "downlevel-dts": "0.10.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/signature-v4",
3
- "version": "5.4.5",
3
+ "version": "5.4.6",
4
4
  "description": "A standalone implementation of the AWS Signature V4 request signing algorithm",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
@@ -25,8 +25,8 @@
25
25
  "license": "Apache-2.0",
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@smithy/core": "^3.24.5",
29
- "@smithy/types": "^4.14.2",
28
+ "@smithy/core": "^3.24.6",
29
+ "@smithy/types": "^4.14.3",
30
30
  "tslib": "^2.6.2"
31
31
  },
32
32
  "devDependencies": {
@@ -75,10 +75,24 @@ export interface RetryStrategyOptions {
75
75
  */
76
76
  export interface RetryToken {
77
77
  /**
78
+ * Starts at 0 for the initial request, which is not a "retry" by definition.
79
+ * 1 indicates the first retry.
80
+ *
78
81
  * @returns the current count of retry.
79
82
  */
80
83
  getRetryCount(): number;
81
84
  /**
85
+ * RetryStrategies implemented by `@smithy/core` will return tokens with a
86
+ * delay of zero.
87
+ *
88
+ * This is because the RetryStrategy token acquisition methods took over the
89
+ * task of idling for the delay period. If a user-implemented retry token
90
+ * contains a delay, the default Smithy retry middleware will still honor it.
91
+ *
92
+ * That is to say, you may either sleep within the RetryStrategy methods for acquiring
93
+ * the token, OR return a token with a retry delay that will cause the retry middleware
94
+ * to sleep.
95
+ *
82
96
  * @returns the number of milliseconds to wait before retrying an action.
83
97
  */
84
98
  getRetryDelay(): number;
@@ -86,6 +100,14 @@ export interface RetryToken {
86
100
  * @returns whether the operation which generated this token is long polling.
87
101
  */
88
102
  isLongPoll?(): boolean;
103
+ /**
104
+ * Delays that have already been executed by the time the token
105
+ * is accessible. This is needed for the token handler to understand what has happened.
106
+ * @internal
107
+ */
108
+ $retryLog?: {
109
+ acquisitionDelay?: number;
110
+ };
89
111
  }
90
112
  /**
91
113
  * @public
@@ -116,6 +138,9 @@ export interface RetryStrategyV2 {
116
138
  * either choose to allow another retry and send a new or updated token,
117
139
  * or reject the retry attempt and report the error either in an exception
118
140
  * or returning an error.
141
+ *
142
+ * This method should either delay internally and return a token with 0 delay, OR
143
+ * do not sleep and return a token with the desired delay duration.
119
144
  */
120
145
  refreshRetryTokenForRetry(tokenToRenew: RetryToken, errorInfo: RetryErrorInfo): Promise<RetryToken>;
121
146
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/types",
3
- "version": "4.14.2",
3
+ "version": "4.14.3",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
6
  "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline types",
package/package.json CHANGED
@@ -48,9 +48,9 @@
48
48
  "jest": "^29.7.0",
49
49
  "jest-junit": "^17",
50
50
  "jsii": "~5.9.0",
51
- "jsii-diff": "^1.132.0",
51
+ "jsii-diff": "^1.133.0",
52
52
  "jsii-docgen": "^10.5.0",
53
- "jsii-pacmak": "^1.132.0",
53
+ "jsii-pacmak": "^1.133.0",
54
54
  "jsii-rosetta": "~5.9.0",
55
55
  "projen": "^0.99.70",
56
56
  "ts-jest": "^29.4.11",
@@ -62,8 +62,8 @@
62
62
  "constructs": "^10.5.1"
63
63
  },
64
64
  "dependencies": {
65
- "@aws-sdk/client-acm": "^3.1057.0",
66
- "@aws-sdk/client-route-53": "^3.1057.0",
65
+ "@aws-sdk/client-acm": "^3.1059.0",
66
+ "@aws-sdk/client-route-53": "^3.1059.0",
67
67
  "@types/aws-lambda": "^8.10.161",
68
68
  "async-await-retry": "^2.1.0"
69
69
  },
@@ -90,7 +90,7 @@
90
90
  "publishConfig": {
91
91
  "access": "public"
92
92
  },
93
- "version": "1.3.19",
93
+ "version": "1.3.21",
94
94
  "jest": {
95
95
  "coverageProvider": "v8",
96
96
  "testMatch": [