Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@shgysk8zer0/http

shgysk8zer092MIT1.0.5

A JavaScript library that provides various utilities for working with HTTP

http, http-status, http-error, http-cookie, node-http

readme

@shgysk8zer0/http

A JavaScript library that provides various utilities for working with HTTP

CodeQL Node CI Lint Code Base

GitHub license GitHub last commit GitHub release GitHub Sponsors

npm node-current npm bundle size gzipped npm

GitHub followers GitHub forks GitHub stars Twitter Follow

Donate using Liberapay


Key Features

  • Exported constants for common HTTP status codes, such as ok for 200.
  • An extended HTTPError class that inherits from Error.
  • Useful polyfills, including an extended File object (derived from Blob) and URL.canParse() for URL validation.
  • A set of constants for commonly used Content-Types (from @shgysk8zer0/consts).
  • A versatile openLink() function compatible with various JavaScript environments.
  • A Cookie class for working with HTTP cookies, enabling easy cookie creation and management.

[!WARNING] Parsing of form data uses regex which has been reported as vulnerable to ReDoS attacks. parseMultipartFormData() is deprecated and will be removed in an upcoming release. Instead, in node > 18 you can use new Request(body, { headers }).formData().

Installation

NPM Installation

npm i @shgysk8zer0/http

NPM Imports

import { HTTPError } from 'shgysk8zer0/http@shgysk8zer0/http/error.js';
import { NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR } from 'shgysk8zer0/http@shgysk8zer0/http/status.js';
import { JSON } from 'shgysk8zer0/http@shgysk8zer0/http/types.js';
import { Cookie } from 'shgysk8zer0/http@shgysk8zer0/http/cookie.js';

Alternative imports

This package is available on unpkg.com as a collection of modules, making it easily accessible for browser-based projects. It is designed to be versatile and is not limited to a specific Node.js environment, ensuring compatibility across various platforms.

import { HTTPError } from 'https://unpkg.com/@shgysk8zer0/http/error.js';
import { NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR } from 'https://unpkg.com/@shgysk8zer0/http/status.js';
import { JSON } from 'https://unpkg.com/@shgysk8zer0/http/types.js';
import { Cookie } from 'https://unpkg.com/@shgysk8zer0/http/cookie.js';

Example Code

export async function handler() {
  try {
    const error = new HTTPError('Not implemented.', {
      status: NOT_IMPLEMENTED,
      cause: new Error('I have not done this yet...'),
    });

    throw err;
  } catch (err) {
    if (err instanceof HTTPError) { // Error has an HTTP status & message for use by client
      return Response.json(error, {
        status: error.status,
        headers: new Headers({
          'Content-Type': JSON,
          'Set-Cookie': new Cookie('uid', crypto.randomUUID(), {
            domain: 'example.com',
            path: '/foo',
            maxAge: 86_400_000,
            sameSite: 'Strict',
            httpOnly: true,
            partitioned: true,
          })
        }),
      });  
    } else { // It is not an HTTPError and may contain sensitive into
      return Response.json({
        error: {
          messsage: 'Something broke :(',
          status: INTERNAL_SERVER_ERROR,
        }
      }, { status: INTERNAL_SERVER_ERROR });
    }
  }  
}

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[v1.0.5] - 2023-10-01

Fixed

  • Fixed exports

[v1.0.4] - 2023-10-01

Changed

  • Update @shgysk8zer0/consts
  • Mark all used @shgysk8zer0/consts as external

[v1.0.3] - 2023-09-29

Added

  • Add HTTPError.toResponse() method
  • Add functions to get status codes and file/mime types

Changed

  • Update @shgysk8zer0/consts

[v1.0.2] - 2023-09-25

Added

  • Install and use @shgysk8zer0/consts
  • Export all modules as CommonJS in /cjs/

Fixed

  • Fix imports in package.json to work with @shgysk8zer0/http/module as well as @shgysk8zer0/http/module.js

[v1.0.1] - 2023-09-24

Deprecated

  • Deprecated parseMultipartFormData() due to ReDoS issue

[v1.0.0] - 2023-09-22

Initial Release