Skip to content

A plugin for Fastify that adds the 'request.useragent' property to get header 'user-agent' parsed data.

License

Notifications You must be signed in to change notification settings

bsnext/Fastify-Bowser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fastify-Bowser

Build & Test Node.JS Supported Fastify Supported Install Size Dependencies License

The plugin adds the "request.useragent" property, which returns the parsed data.

Tested on Fastify v4.14+ and Node.JS v19+!
https://github.com/bsnext/fastify-bowser/actions/workflows/build_n_test.yml

Why "bowser", not "ua-parser-js" or other library? Bowser it's a zero-dependency package with MIT license, unlike "ua-parser-js" under AGPL-3.0. Both of these libraries are good, but on top of that, bowser is about x4 times more faster.

Why not those package? Under hood it have a "useragent" - library with 2 dependencies. One of that is "LRU-Cache". But without cache it have a performance less than both previously mentioned libraries. Also, this library excludes parsing of user-agent until you call this property in request.

Installing:

npm install @bsnext/fastify-bowser

Usage:

import FastifyBowser from '@bsnext/fastify-bowser'; // TS
import { default as FastifyBowser } from "@bsnext/fastify-bowser"; // MJS
const { default: FastifyBowser } = require(`@bsnext/fastify-bowser`); // CJS

const server = Fastify();
await server.register(FastifyBowser, {
	// Use parsed user-agent LRU cache
	cache: boolean = false; 

 	// Cache LRU max size.
	cacheLimit?: number = 100;

	// Automatically cache purge interval in seconds.
	// Disabled by default
	cachePurgeTime?: number;
});

Example

import Fastify from 'fastify'; 
import FastifyBowser from '@bsnext/fastify-bowser';

const server = Fastify(...);
await server.register(FastifyBowser, { cache: true });

server.get(`/test`, function(request, response) {
	response.send(request.useragent);

	/* {
		browser: { name: 'Chrome', version: '129.0.0.0' },
		os: { name: 'Windows', version: 'NT 10.0', versionName: '10' },
		platform: { type: 'desktop' },
		engine: { name: 'Blink' }
	} */
})

server.listen({ port: 8080 });

About

A plugin for Fastify that adds the 'request.useragent' property to get header 'user-agent' parsed data.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published