A quality of service wrapper to window.fetch. Handles retries, network status, and emits events that may be used in reporting or metrics.

Hierarchy (view full)

Implements

Constructors

Properties

logPrefix: string = ...

A string prefix for all log statements made by this target.

Accessors

  • get [toStringTag](): string
  • Returns string

Methods

  • Applies the given partial configuration.

    Parameters

    • newOptions: {
          retryOptions?: {
              retries?: number;
              retryAfterJitter?: (() => number);
              retryBackoff?: {
                  distribution?: (() => number);
                  exponentBase?: number;
                  interval?: number;
                  maxTime?: number;
              };
              retryFailureCutoff?: number;
              shouldRetry?: ((status: number) => boolean);
              tryBackoff?: {
                  distribution?: (() => number);
                  exponentBase?: number;
                  interval?: number;
                  maxTime?: number;
              };
          };
          timeout?: number;
      }
      • Optional ReadonlyretryOptions?: {
            retries?: number;
            retryAfterJitter?: (() => number);
            retryBackoff?: {
                distribution?: (() => number);
                exponentBase?: number;
                interval?: number;
                maxTime?: number;
            };
            retryFailureCutoff?: number;
            shouldRetry?: ((status: number) => boolean);
            tryBackoff?: {
                distribution?: (() => number);
                exponentBase?: number;
                interval?: number;
                maxTime?: number;
            };
        }

        Retry configuration.

        • Optional Readonlyretries?: number

          The maximum number of retries for a single request. Default: 1 For requests with side effects, this should be set to 0.

          "Various studies have collected data which shows that one max retry is sufficient to achieve 99.999% success. The idea is that a truly transient failure should succeed on the first retry. And if the retry fails then it is likely more than a transient failure and additional retries are exhausting resources in the system for no benefit."

        • Optional ReadonlyretryAfterJitter?: (() => number)

          If there is a retry-after header, add the returned amount of time (in seconds) to prevent clustered retry behavior.

            • (): number
            • Returns number

        • Optional ReadonlyretryBackoff?: {
              distribution?: (() => number);
              exponentBase?: number;
              interval?: number;
              maxTime?: number;
          }

          Retry backoff timing.

          • Optional Readonlydistribution?: (() => number)

            The distribution function to randomize request retry timing. This is to prevent all users from making retries at the same time.

              • (): number
              • Returns number

          • Optional ReadonlyexponentBase?: number

            pow(exponentBase, failureCount)

          • Optional Readonlyinterval?: number

            The interval in seconds, multiplied by pow(exponentBase, failureCount).

          • Optional ReadonlymaxTime?: number

            The maximum time to wait between tries, in seconds, regardless of how many consecutive failures.

        • Optional ReadonlyretryFailureCutoff?: number

          The number of consecutive failures before retries are no longer attempted, only tries.

        • Optional ReadonlyshouldRetry?: ((status: number) => boolean)

          Given the network status code, returns true if the fetch should retry.

            • (status): boolean
            • Parameters

              • status: number

              Returns boolean

        • Optional ReadonlytryBackoff?: {
              distribution?: (() => number);
              exponentBase?: number;
              interval?: number;
              maxTime?: number;
          }

          First try backoff timing.

          • Optional Readonlydistribution?: (() => number)

            The distribution function to randomize request retry timing. This is to prevent all users from making retries at the same time.

              • (): number
              • Returns number

          • Optional ReadonlyexponentBase?: number

            pow(exponentBase, failureCount)

          • Optional Readonlyinterval?: number

            The interval in seconds, multiplied by pow(exponentBase, failureCount).

          • Optional ReadonlymaxTime?: number

            The maximum time to wait between tries, in seconds, regardless of how many consecutive failures.

      • Optional Readonlytimeout?: number

        The timeout (in seconds) before the request is aborted.

    Returns void

  • Dispatches an event.

    Type Parameters

    Parameters

    • type: K

      The key of the event within EventMap

    • event: RequesterImplEventMap[K]

      If the passed event is read-only, then it may be re-used/cached. Otherwise, it should be a new event object every dispatch. If no target property is set on the event, the target will be set to this host.

    Returns void

  • Returns true if the event host has any listeners.

    Returns boolean

  • Adds an event handler for the given typed event.

    Type Parameters

    Parameters

    • type: K

      The key representing the event type to listen for.

    • handler: EventHandler<RequesterImplEventMap[K]>

      A callback to invoke when the event with the given type is dispatched.

    • Optionaloptions: SignalOptions

      Options for changing listening behavior.

    Returns Unsubscribe

    Returns a method, when invoked, removes the handler.

  • Requests a resource.

    Note: Unlike window.fetch, the returned promise is expected to reject if the response is !ok.

    Parameters

    • input: RequestInfo | Readonly<URL>
    • Optionalinit: Maybe<Readonly<Omit<RequestInit, "signal">>>
    • OptionalrequestOptions: Maybe<RequestOptions>

    Returns Promise<Response>