Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
negotiator
Advanced tools
The negotiator npm package is a content negotiation library used to parse and match HTTP headers for various content types. It allows servers to select the best representation of a resource based on the client's capabilities and preferences, as expressed through HTTP headers.
Content-Type Negotiation
This feature allows the server to determine the best media type to respond with, based on the client's 'Accept' HTTP header.
const Negotiator = require('negotiator');
const availableMediaTypes = ['text/html', 'application/json'];
const negotiator = new Negotiator(request);
const bestMediaType = negotiator.mediaType(availableMediaTypes);
Language Negotiation
This feature enables the server to select the best language for the response content based on the client's 'Accept-Language' HTTP header.
const Negotiator = require('negotiator');
const availableLanguages = ['en', 'es', 'fr'];
const negotiator = new Negotiator(request);
const bestLanguage = negotiator.language(availableLanguages);
Encoding Negotiation
This feature allows the server to choose the best encoding for the response based on the client's 'Accept-Encoding' HTTP header.
const Negotiator = require('negotiator');
const availableEncodings = ['gzip', 'deflate'];
const negotiator = new Negotiator(request);
const bestEncoding = negotiator.encoding(availableEncodings);
Charset Negotiation
This feature allows the server to determine the best charset for the response content based on the client's 'Accept-Charset' HTTP header.
const Negotiator = require('negotiator');
const availableCharsets = ['utf-8', 'iso-8859-1'];
const negotiator = new Negotiator(request);
const bestCharset = negotiator.charset(availableCharsets);
The 'accepts' npm package is similar to 'negotiator' in that it also provides content negotiation capabilities. It is built on top of 'negotiator' and provides a higher-level API for handling 'Accept', 'Accept-Encoding', 'Accept-Language', and 'Accept-Charset' headers.
An HTTP content negotiator for node.js written in javascript.
Negotiator = require('negotiator')
availableMediaTypes = ['text/html', 'text/plain', 'application/json']
// The negotiator constructor receives a request object
negotiator = new Negotiator(request)
// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'
negotiator.preferredMediaTypes()
// -> ['text/html', 'image/jpeg', 'application/*']
negotiator.preferredMediaTypes(availableMediaTypes)
// -> ['text/html', 'application/json']
negotiator.preferredMediaType(availableMediaTypes)
// -> 'text/html'
You can check a working example at examples/accept.js
.
preferredMediaTypes(availableMediaTypes)
:
Returns an array of preferred media types ordered by priority from a list of available media types.
preferredMediaType(availableMediaType)
:
Returns the top preferred media type from a list of available media types.
Negotiator = require('negotiator')
negotiator = new Negotiator(request)
availableLanguages = 'en', 'es', 'fr'
// Let's say Accept-Language header is 'en;q=0.8, es, pt'
negotiator.preferredLanguages()
// -> ['es', 'pt', 'en']
negotiator.preferredLanguages(availableLanguages)
// -> ['es', 'en']
language = negotiator.preferredLanguage(availableLanguages)
// -> 'es'
You can check a working example at examples/language.js
.
preferredLanguages(availableLanguages)
:
Returns an array of preferred languages ordered by priority from a list of available languages.
preferredLanguage(availableLanguages)
:
Returns the top preferred language from a list of available languages.
Negotiator = require('negotiator')
availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']
negotiator = new Negotiator(request)
// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'
negotiator.preferredCharsets()
// -> ['utf-8', 'iso-8859-1', 'utf-7']
negotiator.preferredCharsets(availableCharsets)
// -> ['utf-8', 'iso-8859-1']
negotiator.preferredCharset(availableCharsets)
// -> 'utf-8'
You can check a working example at examples/charset.js
.
preferredCharsets(availableCharsets)
:
Returns an array of preferred charsets ordered by priority from a list of available charsets.
preferredCharset(availableCharsets)
:
Returns the top preferred charset from a list of available charsets.
Negotiator = require('negotiator').Negotiator
availableEncodings = ['identity', 'gzip']
negotiator = new Negotiator(request)
// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'
negotiator.preferredEncodings()
// -> ['gzip', 'identity', 'compress']
negotiator.preferredEncodings(availableEncodings)
// -> ['gzip', 'identity']
negotiator.preferredEncoding(availableEncodings)
// -> 'gzip'
You can check a working example at examples/encoding.js
.
preferredEncodings(availableEncodings)
:
Returns an array of preferred encodings ordered by priority from a list of available encodings.
preferredEncoding(availableEncodings)
:
Returns the top preferred encoding from a list of available encodings.
MIT
FAQs
HTTP content negotiation
The npm package negotiator receives a total of 35,917,958 weekly downloads. As such, negotiator popularity was classified as popular.
We found that negotiator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.