UNPKG

@smithy/types

Version:

[![NPM version](https://img.shields.io/npm/v/@smithy/types/latest.svg)](https://www.npmjs.com/package/@smithy/types) [![NPM downloads](https://img.shields.io/npm/dm/@smithy/types.svg)](https://www.npmjs.com/package/@smithy/types)

134 lines (133 loc) 3.84 kB
import { SdkError } from "./shapes"; /** * @public */ export type RetryErrorType = /** * This is a connection level error such as a socket timeout, socket connect * error, tls negotiation timeout etc... * Typically these should never be applied for non-idempotent request types * since in this scenario, it's impossible to know whether the operation had * a side effect on the server. */ "TRANSIENT" /** * This is an error where the server explicitly told the client to back off, * such as a 429 or 503 Http error. */ | "THROTTLING" /** * This is a server error that isn't explicitly throttling but is considered * by the client to be something that should be retried. */ | "SERVER_ERROR" /** * Doesn't count against any budgets. This could be something like a 401 * challenge in Http. */ | "CLIENT_ERROR"; /** * @public */ export interface RetryErrorInfo { /** * The error thrown during the initial request, if available. */ error?: SdkError; errorType: RetryErrorType; /** * Protocol hint. This could come from Http's 'retry-after' header or * something from MQTT or any other protocol that has the ability to convey * retry info from a peer. * * The Date after which a retry should be attempted. */ retryAfterHint?: Date; } /** * @public */ export interface RetryBackoffStrategy { /** * @returns the number of milliseconds to wait before retrying an action. */ computeNextBackoffDelay(retryAttempt: number): number; } /** * @public */ export interface StandardRetryBackoffStrategy extends RetryBackoffStrategy { /** * Sets the delayBase used to compute backoff delays. * @param delayBase - */ setDelayBase(delayBase: number): void; } /** * @public */ export interface RetryStrategyOptions { backoffStrategy: RetryBackoffStrategy; maxRetriesBase: number; } /** * @public */ export interface RetryToken { /** * @returns the current count of retry. */ getRetryCount(): number; /** * @returns the number of milliseconds to wait before retrying an action. */ getRetryDelay(): number; } /** * @public */ export interface StandardRetryToken extends RetryToken { /** * @returns the cost of the last retry attempt. */ getRetryCost(): number | undefined; } /** * @public */ export interface RetryStrategyV2 { /** * Called before any retries (for the first call to the operation). It either * returns a retry token or an error upon the failure to acquire a token prior. * * tokenScope is arbitrary and out of scope for this component. However, * adding it here offers us a lot of future flexibility for outage detection. * For example, it could be "us-east-1" on a shared retry strategy, or * "us-west-2-c:dynamodb". */ acquireInitialRetryToken(retryTokenScope: string): Promise<RetryToken>; /** * After a failed operation call, this function is invoked to refresh the * retryToken returned by acquireInitialRetryToken(). This function can * either choose to allow another retry and send a new or updated token, * or reject the retry attempt and report the error either in an exception * or returning an error. */ refreshRetryTokenForRetry(tokenToRenew: RetryToken, errorInfo: RetryErrorInfo): Promise<RetryToken>; /** * Upon successful completion of the operation, this function is called * to record that the operation was successful. */ recordSuccess(token: RetryToken): void; } /** * @public */ export type ExponentialBackoffJitterType = "DEFAULT" | "NONE" | "FULL" | "DECORRELATED"; /** * @public */ export interface ExponentialBackoffStrategyOptions { jitterType: ExponentialBackoffJitterType; backoffScaleValue?: number; }