Headers

Set default headers for all requests, or provide an async function that resolves headers before each call. Per-call headers can override client-level defaults.

Static Headers

ts
const rpc = createRpcClient({
  baseUrl: '/api',
  headers: {
    Authorization: 'Bearer my-token',
    'X-App-Version': '1.0.0',
  },
});

Async Headers

Pass an async function to resolve headers dynamically — useful for refreshing auth tokens.

ts
// Async headers — called before every request
const rpc = createRpcClient({
  baseUrl: '/api',
  headers: async () => ({
    Authorization: `Bearer ${await getToken()}`,
  }),
});

Per-Call Headers

Override headers for a single call via CallOptions.

ts
// Override or add headers for a single call
const result = await rpc.query('secret', input, {
  headers: { Authorization: 'Bearer one-time-token' },
});

Merge Order

Per-call headers are merged on top of client headers. Same-key per-call headers win.

ts
// Merge order: client headers → per-call headers
// Per-call headers override client headers with the same key.
const rpc = createRpcClient({
  baseUrl: '/api',
  headers: { Authorization: 'Bearer default', 'X-App': 'myapp' },
});

// This call sends: Authorization: "Bearer override", X-App: "myapp"
await rpc.query('secret', input, {
  headers: { Authorization: 'Bearer override' },
});

Try it

The secret endpoint requires a Bearer token. Try with and without it.

visit GitHub to learn more about metaxy