TypeScript icon, indicating that this package has built-in type declarations

0.0.24 • Public • Published

HTTP Request Factory

GitHub release   

Check the API Docs here

A wrapper for the Fetch API to simplify handling of HTTP requests.

Works in:

  • the web browser natively
  • in Deno (via
  • in Node.js from v17.5 (with the --experimental-fetch flag set before v18).

It provides a method-chain interface to setup request and configuration-driven API handling.

Browser compatibility

The library uses


yarn add http-request-factory

# or

npm i http-request-factory

Basic Usage

// node / bundlers
import { HTTPRequestFactory } from 'http-request-factory';
// deno
import {HTTPRequestFactory} from '';

const factory = new HTTPRequestFactory()

const data = await factory
    .withQueryParam('color', 'blue')
    .withHeader('x-my-app-key', myenv.APP_KEY)
//data will be the actual response body

Using an API

It's possible to define a group of endpoints that live at the same base URL by creating an API configuration:

import {APIConfig} from 'http-request-factory';

const apis : APIConfig[] = [{
        name : 'aws',
        baseURL : '',
        endpoints : {
            'get-products' : {
                target : '/get-products',
                method : 'GET' //optional defaults to GET
    }, {
        name : 'my-api'
        baseURL : '',
        meta : {
            poweredBy : 'me'
        endpoints : {
            'get-product-info' : {
                target : '/product/{{productId}}',


export default apis;

The APIs can then be attached to the request factory using factory.withAPIConfig() and requests can be created using factory.createAPIRequest(apiName, endpointName)

It's possible to conditionally configure requests based using factory.when((request:HTTPRequest) => boolean).<any-configuration-method>()

API information is appended to its endpoints' meta dictionary.

When a passed value in configuration methods is a function, its value will be resolved just before executing the fetch request.

import { HTTPRequestFactory } from 'http-request-factory';
import apis from './api-config.ts'

export default new HTTPRequestFactory()
    .when((request) => { //set a condition for the next settings
        request.meta.api?.name === 'aws'
        'x-aws-api-key' : myenv.AWS_API_KEY,
        'authorization' : () => `Bearer ${sessionModel.awsAccessToken}`
    .always() //resets the condition
    .withHeader('x-powered-by', (request) => request.meta.poweredBy);

Endpoint target paths can contain params in the form of {{paramName}} that can be substituted using request.withURLParam(paramName, value). Useful, for instance, to wrap REST APIs.

import requestFactory from './request-factory.ts';

const awsData = await requestFactory
    .createAPIRequest('aws', 'get-products')

const myAPIData = await requestFactory
    .createAPIRequest('my-api', 'get-product-info')
    .withURLParam('productID', 123)


The test suite is written in Vitest and requires Deno





Package Sidebar


npm i http-request-factory

Weekly Downloads






Unpacked Size

704 kB

Total Files


Last publish


  • aekidna