LoggingAPIProviderclass

new LoggingAPIProvider<P, R>(source: APIProvider<P, R>, onRequest: Callback<[Request]> = logRequest, onResponse: Callback<[Response, Request]> = logRequestResponse, onError: Callback<[reason: unknown, Request]> = logRequestError)
ParamType
sourceAPIProvider<P, R>
The source provider whose fetches are logged. required
onRequestCallback<[Request]>
Called to log each outgoing request. Defaults to logRequest
onResponseCallback<[Response, Request]>
Called to log each response. Defaults to logRequestResponse
onErrorCallback<[reason: unknown, Request]>
Called to log each error. Defaults to logRequestError
Return
LoggingAPIProvider<P, R>
Provider that logs fetches to the console to keep useful request/response logs in production.

Provider that logs fetches to the console to keep useful request/response logs in production.

  • Defaults to logging requests, responses, and errors via the log utilities; each can be overridden.

A wrapping provider that logs requests, responses, and errors. LoggingAPIProvider is production-safe — it logs concise lines rather than full bodies (use DebugAPIProvider for verbose development output).

The constructor takes the source provider plus three optional callbacks — onRequest, onResponse, onError — each defaulting to a console-based logger.

Usage

ts
import { ClientAPIProvider, LoggingAPIProvider } from "shelving/api"

// Default console logging.
const provider = new LoggingAPIProvider(
  new ClientAPIProvider({ url: "https://api.example.com" })
)

// Or route logs into your own logger.
const custom = new LoggingAPIProvider(
  new ClientAPIProvider({ url: "https://api.example.com" }),
  (request) => logger.info("api request", request.url),
  (response, request) => logger.info("api response", request.url, response.status),
  (reason, request) => logger.error("api error", request.url, reason),
)

Examples

const api = new LoggingAPIProvider(source);
 await api.fetch(request); // logs request and response