npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

ts-http-lib

v1.0.1

Published

A flexible TypeScript HTTP client library that provides a unified interface for various HTTP client providers

Downloads

6

Readme

ts-http-lib

A flexible TypeScript HTTP client library that provides a unified interface for working with various HTTP client providers.

GitHub Repository npm version

Features

  • 🔄 Multi-provider Support: Seamlessly switch between popular HTTP client providers:
  • 🏗️ Factory Pattern: Simple client creation with a factory method to abstract implementation details
  • 🛡️ Type Safety: Full TypeScript support with accurate type definitions
  • Schema Validation: Optional Zod schema validation for API responses
  • 🔍 Interceptors: Register request and response interceptors
  • 🏭 Singleton Pattern: Efficient instance management with singleton pattern implementation

Installation

# Using npm
npm install ts-http-lib

# Using yarn
yarn add ts-http-lib

# Using pnpm
pnpm add ts-http-lib

Usage

Basic Example

import { createHttpClient } from 'ts-http-lib';

// Create a client with your preferred provider using the Factory pattern
const axiosClient = createHttpClient('axios');
const fetchClient = createHttpClient('fetch');
const kyClient = createHttpClient('ky');
const superagentClient = createHttpClient('superagent');

// Make HTTP requests
(async () => {
  try {
    // GET request
    const response = await axiosClient.get('https://api.example.com/data');
    console.log(response.data);
    
    // POST request with data
    const createResponse = await axiosClient.post(
      'https://api.example.com/items',
      { name: 'New Item', value: 42 }
    );
    console.log(createResponse.data);
  } catch (error) {
    console.error('API request failed:', error);
  }
})();

Using Response Validation with Zod

import { createHttpClient } from 'ts-http-lib';
import { z } from 'zod';

const userClient = createHttpClient('axios');

// Define a schema for your data
const UserSchema = z.object({
  id: z.number(),
  name: z.string(),
  email: z.string().email(),
});

// Fetch with validation
const getUser = async (id: number) => {
  const response = await userClient.get(
    `https://api.example.com/users/${id}`,
    {},  // optional request config
    UserSchema  // Zod schema for validation
  );
  
  return response.data;
};

Using Interceptors

import { createHttpClient } from 'ts-http-lib';

const client = createHttpClient('axios');

// Add authentication to all requests
client.registerRequestInterceptors([
  (config) => {
    config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
    return config;
  }
]);

// Handle errors or modify responses
client.registerResponseInterceptors([
  (response) => {
    // Process successful responses
    return response;
  },
  (error) => {
    // Handle errors globally
    if (error.response?.status === 401) {
      // Redirect to login or refresh token
    }
    return Promise.reject(error);
  }
]);

API Reference

createHttpClient(provider)

Factory method that creates a new HTTP client instance with the specified provider. The factory pattern is used to abstract the creation logic and provide a simple interface for obtaining client instances.

| Parameter | Type | Description | |-----------|------|-------------| | provider | 'axios' | 'fetch' | 'ky' | 'superagent' | The HTTP client provider to use |

Returns an instance of the specified HTTP client with the following methods:

  • get(url, config?, zodSchema?)
  • post(url, data, config?, zodSchema?)
  • put(url, data, config?, zodSchema?)
  • delete(url, config?, zodSchema?)
  • registerRequestInterceptors(interceptors)
  • registerResponseInterceptors(interceptors)

Development

# Install dependencies
pnpm install

# Run tests
pnpm test

# Generate test coverage
pnpm coverage

# Build the library
pnpm build

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Repository

You can find the source code on GitHub: https://github.com/AmirhosseinSrv/ts-http-lib

License

MIT