HTTP status codes constants and utilities for TypeScript.

Based on IETF RFCs including RFC 7231 (HTTP/1.1), RFC 6585 (Additional Status Codes), RFC 4918 (WebDAV), RFC 7538 (Permanent Redirect), RFC 8470 (Early Hints), and RFC 7725 (Legal Obstacles).
# bun
bun add resp-codes
# npm
npm add resp-codes
# pnpm
pnpm add resp-codes
# yarn
yarn add resp-codes
# deno
deno add npm:resp-codes
import { OK, NOT_FOUND, getPhrase } from 'resp-codes'
// Constants
new Response('Success', { status: OK }) // 200
new Response('Not Found', { status: NOT_FOUND }) // 404
// Reason phrases
getPhrase(200) // "OK"
getPhrase(404) // "Not Found"
// Type guards
import { isSuccessful, isError } from 'resp-codes'
isSuccessful(200) // true
isError(404) // true
| Constant |
Value |
Phrase |
CONTINUE |
100 |
Continue |
SWITCHING_PROTOCOLS |
101 |
Switching Protocols |
PROCESSING |
102 |
Processing (deprecated) |
EARLY_HINTS |
103 |
Early Hints |
| Constant |
Value |
Phrase |
OK |
200 |
OK |
CREATED |
201 |
Created |
ACCEPTED |
202 |
Accepted |
NON_AUTHORITATIVE_INFORMATION |
203 |
Non-Authoritative Information |
NO_CONTENT |
204 |
No Content |
RESET_CONTENT |
205 |
Reset Content |
PARTIAL_CONTENT |
206 |
Partial Content |
MULTI_STATUS |
207 |
Multi-Status |
ALREADY_REPORTED |
208 |
Already Reported |
IM_USED |
226 |
IM Used |
| Constant |
Value |
Phrase |
MULTIPLE_CHOICES |
300 |
Multiple Choices |
MOVED_PERMANENTLY |
301 |
Moved Permanently |
FOUND |
302 |
Found |
SEE_OTHER |
303 |
See Other |
NOT_MODIFIED |
304 |
Not Modified |
USE_PROXY |
305 |
Use Proxy (deprecated) |
UNUSED |
306 |
(Unused) |
TEMPORARY_REDIRECT |
307 |
Temporary Redirect |
PERMANENT_REDIRECT |
308 |
Permanent Redirect |
| Constant |
Value |
Phrase |
BAD_REQUEST |
400 |
Bad Request |
UNAUTHORIZED |
401 |
Unauthorized |
PAYMENT_REQUIRED |
402 |
Payment Required |
FORBIDDEN |
403 |
Forbidden |
NOT_FOUND |
404 |
Not Found |
METHOD_NOT_ALLOWED |
405 |
Method Not Allowed |
NOT_ACCEPTABLE |
406 |
Not Acceptable |
PROXY_AUTHENTICATION_REQUIRED |
407 |
Proxy Authentication Required |
REQUEST_TIMEOUT |
408 |
Request Timeout |
CONFLICT |
409 |
Conflict |
GONE |
410 |
Gone |
LENGTH_REQUIRED |
411 |
Length Required |
PRECONDITION_FAILED |
412 |
Precondition Failed |
CONTENT_TOO_LARGE |
413 |
Content Too Large |
URI_TOO_LONG |
414 |
URI Too Long |
UNSUPPORTED_MEDIA_TYPE |
415 |
Unsupported Media Type |
RANGE_NOT_SATISFIABLE |
416 |
Range Not Satisfiable |
EXPECTATION_FAILED |
417 |
Expectation Failed |
IM_A_TEAPOT |
418 |
I'm a teapot |
MISDIRECTED_REQUEST |
421 |
Misdirected Request |
UNPROCESSABLE_CONTENT |
422 |
Unprocessable Content |
LOCKED |
423 |
Locked |
FAILED_DEPENDENCY |
424 |
Failed Dependency |
TOO_EARLY |
425 |
Too Early |
UPGRADE_REQUIRED |
426 |
Upgrade Required |
PRECONDITION_REQUIRED |
428 |
Precondition Required |
TOO_MANY_REQUESTS |
429 |
Too Many Requests |
REQUEST_HEADER_FIELDS_TOO_LARGE |
431 |
Request Header Fields Too Large |
UNAVAILABLE_FOR_LEGAL_REASONS |
451 |
Unavailable For Legal Reasons |
| Constant |
Value |
Phrase |
INTERNAL_SERVER_ERROR |
500 |
Internal Server Error |
NOT_IMPLEMENTED |
501 |
Not Implemented |
BAD_GATEWAY |
502 |
Bad Gateway |
SERVICE_UNAVAILABLE |
503 |
Service Unavailable |
GATEWAY_TIMEOUT |
504 |
Gateway Timeout |
HTTP_VERSION_NOT_SUPPORTED |
505 |
HTTP Version Not Supported |
VARIANT_ALSO_NEGOTIATES |
506 |
Variant Also Negotiates |
INSUFFICIENT_STORAGE |
507 |
Insufficient Storage |
LOOP_DETECTED |
508 |
Loop Detected |
NOT_EXTENDED |
510 |
Not Extended |
NETWORK_AUTHENTICATION_REQUIRED |
511 |
Network Authentication Required |
| Function |
Returns |
getPhrase(code) |
Reason phrase string (e.g. "OK") |
getStatusInfo(code) |
{ code, phrase, category, description, deprecated } |
getStatusLine(code) |
Status line (e.g. "200 OK") |
getCategory(code) |
Category name ("Informational", "Successful", "Redirection", "Client Error", "Server Error") |
getDescription(code) |
Full description string |
isInformational(code) |
true if 1xx |
isSuccessful(code) |
true if 2xx |
isRedirection(code) |
true if 3xx |
isClientError(code) |
true if 4xx |
isServerError(code) |
true if 5xx |
isError(code) |
true if 4xx or 5xx |
isValid(code) |
true if 100-599 |
isDeprecated(code) |
true if deprecated (102, 305, 306) |
preservesMethod(code) |
true if 307 or 308 |
isCacheable(code) |
true if cacheable status code |
import { informational, successful, redirection, clientError, serverError, all } from 'resp-codes'
informational // [100, 101, 102, 103]
successful // [200, 201, 202, 203, 204, 205, 206, 207, 208, 226]
redirection // [300, 301, 302, 303, 304, 305, 306, 307, 308]
clientError // [400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 428, 429, 431, 451]
serverError // [500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511]
all // [100, 101, ... 511]
Individual phrase constants for tree-shaking:
import {
PHRASE_OK, // "OK"
PHRASE_NOT_FOUND, // "Not Found"
PHRASE_UNAUTHORIZED, // "Unauthorized"
// ... and more
} from 'resp-codes'
MIT