← All @molecule/* packages · App templates
@molecule/api-http-axiosProvider bond · http · API (Node) · v1.0.1 · Apache-2.0
Axios HTTP client provider for molecule.dev.
npm install @molecule/api-http-axiosnpm · Source on GitHub · Implements @molecule/api-http
@molecule/api-http-axios is a provider bond on the API (Node) side: it implements the http core interface (@molecule/api-http) with a concrete vendor or library behind it.
Your code calls the core; you wire this provider once at startup. Swapping vendors later is one line in that wiring, not a rewrite.
import { setClient } from '@molecule/api-http'
import { createClient } from '@molecule/api-http-axios'
const client = createClient({ baseURL: 'https://api.example.com', timeout: 5000 })
client.addRequestInterceptor?.((req) => ({
...req,
headers: { ...req.headers, 'X-Request-Id': crypto.randomUUID() },
}))
setClient(client)Works with: @molecule/api-http
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Axios HTTP client provider for molecule.dev.
Implements the @molecule/api-http HttpClient contract with axios,
adding the optional capabilities the core's built-in fetch client lacks:
request/response/error interceptors, create(defaults) for derived
clients, and pre-configured instances via
createClient({ baseURL, timeout, headers }) (or a custom axios
instance). Errors are normalized to HttpError — axios internals never
leak to callers.
import { setClient } from '@molecule/api-http'
import { createClient } from '@molecule/api-http-axios'
const client = createClient({ baseURL: 'https://api.example.com', timeout: 5000 })
client.addRequestInterceptor?.((req) => ({
...req,
headers: { ...req.headers, 'X-Request-Id': crypto.randomUUID() },
}))
setClient(client)
provider
npm install @molecule/api-http-axios @molecule/api-http axios
AxiosClientOptionsOptions for creating an Axios client.
interface AxiosClientOptions extends HttpRequestOptions {
/**
* Axios instance to use (if not provided, a new one is created).
*/
instance?: AxiosInstance
}
HttpClientHTTP client interface that all HTTP bond packages must implement.
Provides methods for each HTTP verb plus optional interceptors and client factory support.
interface HttpClient {
/**
* Makes an HTTP request.
*/
request<T = unknown>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>>
/**
* Makes a GET request.
*/
get<T = unknown>(
url: string,
options?: Omit<HttpRequestOptions, 'method' | 'body'>,
): Promise<HttpResponse<T>>
/**
* Makes a POST request.
*/
post<T = unknown>(
url: string,
body?: unknown,
options?: Omit<HttpRequestOptions, 'method' | 'body'>,
): Promise<HttpResponse<T>>
/**
* Makes a PUT request.
*/
put<T = unknown>(
url: string,
body?: unknown,
options?: Omit<HttpRequestOptions, 'method' | 'body'>,
): Promise<HttpResponse<T>>
/**
* Makes a PATCH request.
*/
patch<T = unknown>(
url: string,
body?: unknown,
options?: Omit<HttpRequestOptions, 'method' | 'body'>,
): Promise<HttpResponse<T>>
/**
* Makes a DELETE request.
*/
delete<T = unknown>(
url: string,
options?: Omit<HttpRequestOptions, 'method'>,
): Promise<HttpResponse<T>>
/**
* Creates a new client with the given defaults.
*/
create?(defaults: HttpRequestOptions): HttpClient
/**
* Adds a request interceptor.
*/
addRequestInterceptor?(interceptor: RequestInterceptor): () => void
/**
* Adds a response interceptor.
*/
addResponseInterceptor?(interceptor: ResponseInterceptor): () => void
/**
* Adds an error interceptor.
*/
addErrorInterceptor?(interceptor: ErrorInterceptor): () => void
}
HttpErrorHTTP error.
interface HttpError extends Error {
/**
* Response (if available).
*/
response?: HttpResponse
/**
* Request options.
*/
request: HttpRequestOptions & {
url: string
}
/**
* Error code (e.g., 'ECONNREFUSED', 'ETIMEDOUT').
*/
code?: string
/**
* Whether the request was aborted.
*/
isAborted?: boolean
/**
* Whether the request timed out.
*/
isTimeout?: boolean
}
HttpRequestOptionsHTTP request options.
interface HttpRequestOptions {
/**
* HTTP method.
*/
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'
/**
* Request headers.
*/
headers?: Record<string, string>
/**
* Request body (will be JSON-stringified if object).
*/
body?: unknown
/**
* Query parameters.
*/
params?: Record<string, string | number | boolean | undefined>
/**
* Request timeout in milliseconds.
*/
timeout?: number
/**
* Base URL to prepend to the request URL.
*/
baseURL?: string
/**
* Whether to include credentials (cookies) in the request.
*/
credentials?: 'omit' | 'same-origin' | 'include'
/**
* Response type.
*/
responseType?: 'json' | 'text' | 'blob' | 'arraybuffer'
/**
* Signal for aborting the request.
*/
signal?: AbortSignal
/**
* Custom options passed to the underlying client.
*/
[key: string]: unknown
}
HttpResponseHTTP response.
interface HttpResponse<T = unknown> {
/**
* Response status code.
*/
status: number
/**
* Response status text.
*/
statusText: string
/**
* Response headers.
*/
headers: Record<string, string>
/**
* Response body.
*/
data: T
/**
* Original request options.
*/
request: HttpRequestOptions & {
url: string
}
}
ErrorInterceptorCallback invoked when an HTTP request fails, allowing error transformation or logging before re-throwing.
type ErrorInterceptor = (error: HttpError) => HttpError | Promise<HttpError>
RequestInterceptorFunction that transforms an outgoing HTTP request before it is sent (e.g. add auth headers).
type RequestInterceptor = (
options: HttpRequestOptions & {
url: string
},
) =>
| (HttpRequestOptions & {
url: string
})
| Promise<
HttpRequestOptions & {
url: string
}
>
ResponseInterceptorFunction that transforms an incoming HTTP response before it is returned (e.g. unwrap data).
type ResponseInterceptor<T = unknown> = (
response: HttpResponse<T>,
) => HttpResponse<T> | Promise<HttpResponse<T>>
createClient(options)Creates an Axios-backed HTTP client that implements the HttpClient interface.
Supports request/response/error interceptors and per-request configuration.
function createClient(options?: AxiosClientOptions): HttpClient
options — Axios client options (baseURL, timeout, headers, or a pre-configured instance).Returns: An HttpClient backed by Axios.
sanitizeRequestOptions(requestOptions)Returns a shallow copy of request options with secret-bearing fields
redacted. The request body (which for an OAuth token exchange contains
client_secret/code/refresh_token) is replaced with a placeholder, and
any authorization header (Basic client_secret or Bearer access token) is
masked. This is applied before attaching the request to an HttpError so a
caught/logged error can never emit a credential to logs (CWE-532). The
success path (toHttpResponse from client.request) is unaffected, so
legitimate consumers of response.request still see the full options.
function sanitizeRequestOptions(
requestOptions: HttpRequestOptions & { url: string },
): HttpRequestOptions & { url: string }
requestOptions — The original request options.Returns: A redacted copy safe to attach to an error destined for logs.
toHttpError(error, requestOptions)Converts axios error to HttpError.
function toHttpError(
error: AxiosError,
requestOptions: HttpRequestOptions & { url: string },
): HttpError
error — The error.requestOptions — The request options.Returns: The transformed result.
toHttpResponse(response, requestOptions)Converts axios response to HttpResponse.
function toHttpResponse(
response: AxiosResponse<T, any, {}, any>,
requestOptions: HttpRequestOptions & { url: string },
): HttpResponse<T>
response — The response object.requestOptions — The request options.Returns: The transformed result.
clientThe default Axios HTTP client instance with default configuration.
const client: HttpClient
providerAlias for the client (for consistency with other providers).
const provider: HttpClient
axiosImplements @molecule/api-http interface.
Setup function to register this provider with the core interface:
import { setClient } from '@molecule/api-http'
import { provider } from '@molecule/api-http-axios'
export function setupHttpAxios(): void {
setClient(provider)
}
Peer dependencies:
@molecule/api-http ^1.0.1@molecule/api-http
axios
This category wires via setClient() from @molecule/api-http — NOT
setProvider. Without any bond the core already falls back to a built-in
fetch client; bond this package only when you need interceptors,
create(), or per-instance defaults.
The exported provider (alias client) is a shared default instance
created with no options — interceptors added to it apply process-wide.
Prefer createClient() for scoped/per-service instances.