problem-response
v1.0.0
Published
RFC 9457 Problem Details for HTTP APIs — framework-agnostic, TypeScript-first error responses
Maintainers
Readme
problem-response
RFC 9457 Problem Details for HTTP APIs — framework-agnostic, TypeScript-first error responses
Install
npm install problem-responseUsage
import {ProblemDetail, toResponse, notFound, badRequest} from 'problem-response';
// Using factory functions
const problem = notFound('The requested user was not found.');
console.log(problem.toJSON());
// => {type: 'about:blank', title: 'Not Found', status: 404, detail: 'The requested user was not found.'}
// Using the constructor directly
const detailed = new ProblemDetail({
type: 'https://api.example.com/problems/out-of-credit',
title: 'You do not have enough credit.',
status: 403,
detail: 'Your current balance is 30, but that costs 50.',
instance: '/account/12345/msgs/abc',
balance: 30,
accounts: ['/account/12345', '/account/67890'],
});
// Convert to HTTP response
const response = toResponse(detailed);
// => {status: 403, headers: {'content-type': 'application/problem+json'}, body: '...'}API
new ProblemDetail(options)
Creates a new ProblemDetail instance that extends Error.
options
Type: object
type
Type: string
Default: 'about:blank'
A URI reference that identifies the problem type.
title
Type: string
A short, human-readable summary of the problem type. Defaults to the standard title for the given status code.
status
Type: number (required)
The HTTP status code for this problem.
detail
Type: string
A human-readable explanation specific to this occurrence of the problem.
instance
Type: string
A URI reference that identifies the specific occurrence of the problem.
Extension members
Any additional properties are treated as extension members per RFC 9457.
.toJSON()
Returns an RFC 9457 compliant plain object.
toResponse(problem)
Returns an HTTP response object with status, headers, and body.
isProblemDetail(value)
Type guard that returns true if the value is a ProblemDetail instance.
Factory functions
badRequest(detail?, extensions?)— status 400unauthorized(detail?, extensions?)— status 401forbidden(detail?, extensions?)— status 403notFound(detail?, extensions?)— status 404conflict(detail?, extensions?)— status 409unprocessableEntity(detail?, extensions?)— status 422internalServerError(detail?, extensions?)— status 500
Related
- RFC 9457 — Problem Details for HTTP APIs
License
MIT
