From 647e115a1eff4aa65a60079ed18969bd23e67ffa Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Mon, 4 Sep 2023 12:28:11 +0700 Subject: [PATCH] [ua-helpers] Fix type error --- src/user-agent-helpers/package.json | 4 +- src/user-agent-helpers/readme.md | 10 ++++ .../user-agent-helpers/test/index.js | 56 ++----------------- .../user-agent-helpers.d.ts | 35 +++++++++++- 4 files changed, 50 insertions(+), 55 deletions(-) rename test/mocha-test-helpers.js => src/user-agent-helpers/test/index.js (62%) diff --git a/src/user-agent-helpers/package.json b/src/user-agent-helpers/package.json index aef3208..ba57308 100644 --- a/src/user-agent-helpers/package.json +++ b/src/user-agent-helpers/package.json @@ -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 ", "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", diff --git a/src/user-agent-helpers/readme.md b/src/user-agent-helpers/readme.md index b2eefd2..4720707 100644 --- a/src/user-agent-helpers/readme.md +++ b/src/user-agent-helpers/readme.md @@ -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); +*/ ``` \ No newline at end of file diff --git a/test/mocha-test-helpers.js b/src/user-agent-helpers/test/index.js similarity index 62% rename from test/mocha-test-helpers.js rename to src/user-agent-helpers/test/index.js index 2c0b39f..4cea954 100644 --- a/test/mocha-test-helpers.js +++ b/src/user-agent-helpers/test/index.js @@ -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 - }); - }); }); \ No newline at end of file diff --git a/src/user-agent-helpers/user-agent-helpers.d.ts b/src/user-agent-helpers/user-agent-helpers.d.ts index ae63f9f..d77af20 100644 --- a/src/user-agent-helpers/user-agent-helpers.d.ts +++ b/src/user-agent-helpers/user-agent-helpers.d.ts @@ -1,4 +1,35 @@ +export type UABrowser = { + brand: string | null, + version: string | null +}; + +export type UADataType = boolean | string | Array | 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; -export function unfreezeUA(ua: string, ch: ClientHintsJSHighEntropy): Promise; -export function unfreezeUA(headers: ClientHintsHTTPHeaders): Promise; \ No newline at end of file +export function unfreezeUA(ua: string, ch: Record): Promise; +export function unfreezeUA(headers: Record): Promise; \ No newline at end of file