https://github.com/shgysk8zer0/node-http
A JavaScript library that provides various utilities for working with HTTP
https://github.com/shgysk8zer0/node-http
form-data http-error http-status node
Last synced: about 1 year ago
JSON representation
A JavaScript library that provides various utilities for working with HTTP
- Host: GitHub
- URL: https://github.com/shgysk8zer0/node-http
- Owner: shgysk8zer0
- License: mit
- Created: 2023-09-19T20:17:21.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-02-20T18:22:06.000Z (about 1 year ago)
- Last Synced: 2025-02-23T17:44:20.055Z (about 1 year ago)
- Topics: form-data, http-error, http-status, node
- Language: JavaScript
- Homepage: https://npmjs.com/package/@shgysk8zer0/http
- Size: 313 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# `@shgysk8zer0/http`
A JavaScript library that provides various utilities for working with HTTP
[](https://github.com/shgysk8zer0/http/actions/workflows/codeql-analysis.yml)


[](https://github.com/shgysk8zer0/node-http/blob/master/LICENSE)
[](https://github.com/shgysk8zer0/node-http/commits/master)
[](https://github.com/shgysk8zer0/node-http/releases)
[](https://github.com/sponsors/shgysk8zer0)
[](https://www.npmjs.com/package/@shgysk8zer0/http)


[](https://www.npmjs.com/package/@shgysk8zer0/http)
[](https://github.com/shgysk8zer0)


[](https://twitter.com/shgysk8zer0)
[](https://liberapay.com/shgysk8zer0/donate "Donate using Liberapay")
- - -
- [Code of Conduct](./.github/CODE_OF_CONDUCT.md)
- [Contributing](./.github/CONTRIBUTING.md)
# 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](https://github.com/shgysk8zer0/node-http/issues/2)
> 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
```bash
npm i @shgysk8zer0/http
```
### NPM Imports
```js
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 `import`s
This package is available on [unpkg.com](https://unpkg.com/browse/@shgys8zer0/http/) 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.
```js
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
```js
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 });
}
}
}
```