Skip to main content

nel-middleware

deno land deno doc GitHub release (latest by date) codecov GitHub

test NPM

HTTP network error logging(NEL) middleware.

Compliant with W3C, Network Error Logging.

Middleware

For a definition of Universal HTTP middleware, see the http-middleware project.

Usage

Middleware adds the NEL header to the response.

import {
  type Handler,
  nel,
} from "https://deno.land/x/nel_middleware@$VERSION/mod.ts";
import { assert } from "https://deno.land/std/testing/asserts.ts";

declare const request: Request;
declare const handler: Handler;

const middleware = nel({ report_to: "default", max_age: 86400 });
const response = await middleware(request, handler);

assert(response.headers.has("nel"));

yield:

NEL: {"report_to":"default","max_age":86400}

Policy

Specifying NEL policy is mandatory.

Name Type Required Description
max_age number NEL policy lifetime.
report_to string - Endpoint group to which the report will be sent.
include_subdomains boolean - Whether to enable origin subdomains.
success_fraction number - Sampling rate for successful network requests.
failure_fraction number - Sampling rate for failed network requests.
request_headers string[] - Request header field to be included in the report.
response_headers string[] - Response header field to be included in the report.

Serialization error

If serialization fails, an error may be thrown.

Cases that throw an error are as follows:

  • max_age is not non-negative integer
  • success_fraction and failure_fraction is not unit interval
import { nel } from "https://deno.land/x/nel_middleware@$VERSION/middleware.ts";
import { assertThrows } from "https://deno.land/std/testing/asserts.ts";

assertThrows(() => nel({ max_age: NaN }));
assertThrows(() => nel({ max_age: 0, success_fraction: 1.1 }));
assertThrows(() => nel({ max_age: 0, failure_fraction: -1 }));

Conditions

Middleware will execute if all of the following conditions are met:

  • NEL header does not exist in response

Effects

Middleware may make changes to the following elements of the HTTP message.

  • HTTP Headers
    • NEL

API

All APIs can be found in the deno doc.

License

Copyright © 2023-present httpland.

Released under the MIT license