[ua-helpers] Fix type error

This commit is contained in:
Faisal Salman 2023-09-04 12:28:11 +07:00
parent 05a98aceda
commit 647e115a1e
4 changed files with 50 additions and 55 deletions

View File

@ -1,13 +1,13 @@
{
"title": "User-Agent Helpers",
"name": "@ua-parser-js/user-agent-helpers",
"version": "0.0.1",
"version": "0.0.2",
"author": "Faisal Salman <f@faisalman.com>",
"description": "A collection of utility methods for working with user-agent",
"main": "user-agent-helpers.js",
"module": "user-agent-helpers.mjs",
"scripts": {
"test": "mocha ../../test/mocha-test-helpers"
"test": "mocha ./test/*"
},
"repository": {
"type": "git",

View File

@ -64,4 +64,14 @@ import { unfreezeUA } from '@ua-parser-js/user-agent-helpers';
unfreezeUA()
.then(newUA => console.log(newUA));
// 'Mozilla/5.0 (Windows NT 11.0; ARM) AppleWebKit/537.36 (KHTML, like Gecko) New Browser/110.1.2.3 Chromium/110.1.2.3 Safari/537.36'
/*
// Alternatively:
const ua = navigator.userAgent;
const ch = await navigator.userAgentData.getHighEntropyValues();
const newUA = await unfreezeUA(ua, ch);
// Server environment:
const newUA = await unfreezeUA(req.headers);
*/
```

View File

@ -1,4 +1,4 @@
const { isFrozenUA, unfreezeUA } = require('@ua-parser-js/user-agent-helpers');
const { isFrozenUA, unfreezeUA } = require('../user-agent-helpers');
const { UAClientHints } = require('@ua-parser-js/ua-client-hints');
const assert = require('assert');
@ -35,7 +35,8 @@ describe('isFrozenUA()', () => {
});
});
const headers = {
const req = {
headers : {
'sec-ch-ua' : '"Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"',
'sec-ch-ua-full-version-list' : '"Chromium";v="93.0.1.2", "Google Chrome";v="93.0.1.2", " Not;A Brand";v="99.0.1.2"',
'sec-ch-ua-arch' : '"arm"',
@ -45,58 +46,11 @@ const headers = {
'sec-ch-ua-platform' : '"Linux"',
'sec-ch-ua-platform-version' : '"13"',
'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
};
}};
describe('unfreezeUA()', () => {
it('returns an unfreezed user-agent using real data from client hints HTTP headers (sec-ch-ua)', async () => {
const unfreezed = await unfreezeUA(headers);
const unfreezed = await unfreezeUA(req.headers);
assert.strictEqual(unfreezed, 'Mozilla/5.0 (X11; Linux arm64) AppleWebKit/537.36 (KHTML, like Gecko) Chromium/93.0.1.2 Chrome/93.0.1.2 Safari/537.36');
});
});
describe('Parse CH Headers', () => {
it('parse client hints HTTP headers (sec-ch-ua) into a client hints-like JavaScript object', () => {
assert.deepEqual(new UAClientHints().setUAData(headers).getUAData(['architecture', 'bitness']), {
"architecture": "arm",
"bitness": "64"
});
assert.deepEqual(new UAClientHints().setUAData(headers).getUAData(), {
"architecture": "arm",
"bitness": "64",
"brands": [
{
"brand": "Chromium",
"version": "93"
},
{
"brand": "Google Chrome",
"version": "93"
},
{
"brand": "Not;A Brand",
"version": "99"
}
],
"fullVersionList": [
{
"brand": "Chromium",
"version": "93.0.1.2"
},
{
"brand": "Google Chrome",
"version": "93.0.1.2"
},
{
"brand": "Not;A Brand",
"version": "99.0.1.2"
}
],
"formFactor": null,
"mobile": true,
"model": "Pixel 99",
"platform": "Linux",
"platformVersion": "13",
"wow64": null
});
});
});

View File

@ -1,4 +1,35 @@
export type UABrowser = {
brand: string | null,
version: string | null
};
export type UADataType = boolean | string | Array<UABrowser> | null;
export type UADataField =
'brands' |
'mobile' |
'platform' |
'architecture' |
'bitness' |
'formFactor' |
'fullVersionList' |
'model' |
'platformVersion' |
'wow64';
export type HeaderType = 'sf-boolean' | 'sf-string' | 'sf-list';
export type HeaderField =
'sec-ch-ua-arch' |
'sec-ch-ua-bitness' |
'sec-ch-ua' |
'sec-ch-ua-form-factor' |
'sec-ch-ua-full-version-list' |
'sec-ch-ua-mobile' |
'sec-ch-ua-model' |
'sec-ch-ua-platform' |
'sec-ch-ua-platform-version' |
'sec-ch-ua-wow64';
export function isFrozenUA(ua: string): boolean;
export function unfreezeUA(): Promise<string>;
export function unfreezeUA(ua: string, ch: ClientHintsJSHighEntropy): Promise<string>;
export function unfreezeUA(headers: ClientHintsHTTPHeaders): Promise<string>;
export function unfreezeUA(ua: string, ch: Record<UADataField, UADataType>): Promise<string>;
export function unfreezeUA(headers: Record<HeaderField, HeaderType>): Promise<string>;