Skip to content

Authentication

Zlient provides a flexible authentication system that runs before the request is sent.

Built-in Providers

Bearer Token

Use BearerTokenAuth for standard generic OAuth2/JWT flows. It supports async token retrieval (e.g., refreshing a token from a state manager or cookie).

typescript
import { BearerTokenAuth } from 'zlient';

const auth = new BearerTokenAuth(async () => {
  // Logic to get your current token
  const session = await getSession();
  return session?.accessToken;
});

client.setAuth(auth);

API Key

Use ApiKeyAuth for static keys, either in headers or query params.

typescript
import { ApiKeyAuth } from 'zlient';

// Header: x-api-key: secret
const headerAuth = new ApiKeyAuth({ 
  header: 'x-api-key', 
  value: 'secret' 
});

// Query: ?api_key=secret
const queryAuth = new ApiKeyAuth({ 
  query: 'api_key', 
  value: 'secret' 
});

Custom Providers

You can implement the AuthProvider interface to build complex auth logic (e.g., signing requests, rotating specialized headers).

typescript
import { AuthProvider, AuthContext } from 'zlient';

class MyCustomAuth implements AuthProvider {
  async apply({ init }: AuthContext) {
    // Modify headers directly
    const timestamp = Date.now().toString();
    const signature = await signRequest(init, timestamp);
    
    // Zlient guarantees init.headers interacts safely, 
    // but for complex logic, you might want to normalize it first.
    if (!init.headers) init.headers = {};
    
    // cast to record if you know it's safe, 
    // OR use the safe handling shown in the migration guide.
    (init.headers as any)['X-Signature'] = signature;
  }
}

Released under the MIT License.