Spoosh
Plugins

Throttle

Limit request frequency

The throttle plugin limits how often a request can be made. Extra requests immediately return cached data instead of hitting the network.

Installation

npm install @spoosh/plugin-throttle

Usage

import { Spoosh } from "@spoosh/core";
import { throttlePlugin } from "@spoosh/plugin-throttle";

const spoosh = new Spoosh<ApiSchema, Error>("/api").use([throttlePlugin()]);

// Max 1 request per second - extras return cached data
data = injectRead((api) => api("expensive").GET(), { throttle: 1000 });

Options

Per-Request Options

OptionTypeDescription
throttlenumberMax 1 request per X milliseconds. Extra requests return cached data.

Throttle vs Debounce

ThrottleDebounce
First requestExecutes immediatelyWaits for delay
Extra requestsReturns cached dataResets the delay timer
Use caseRate-limiting expensive endpointsWaiting for input to stop

How It Works

The throttle plugin runs with priority 100, meaning it executes last in the middleware chain. This ensures it blocks all requests (including force fetches and retries) that exceed the throttle limit.

You can register plugins in any order - the priority system handles execution order automatically:

import { Spoosh } from "@spoosh/core";

const spoosh = new Spoosh<ApiSchema, Error>("/api").use([
  cachePlugin({ staleTime: 5000 }),
  throttlePlugin(), // Executes last due to priority: 100
  retryPlugin(),
  invalidationPlugin(),
]);

On this page