7.7.190-stable Switch to dev

GreyCat User-Agent Library

@library("useragent", "0.0.0");

HTTP User-Agent string parser for GreyCat. Extracts browser, operating system, and device information from User-Agent headers — useful for web analytics, compatibility detection, and device-specific content delivery.

Quick Start

var ua = UserAgent::parse(
    "Mozilla/5.0 (Linux; Android 4.4.2; QMV7A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36"
);

info("Browser: ${ua.browserFamily} ${ua.browserMajor}.${ua.browserMinor}");  // Chrome 36.0
info("OS: ${ua.osFamily} ${ua.osMajor}.${ua.osMinor}.${ua.osPatch}");       // Android 4.4.2
info("Device: ${ua.deviceBrand} ${ua.deviceFamily}");                         // Generic_Android_Tablet QMV7A

API Reference

UserAgent

Parsed User-Agent information containing browser, OS, and device details.

Static Methods:

Method Returns Description
UserAgent::parse(userAgent) UserAgent Parse a User-Agent string into its components

Browser Fields:

Field Type Example Description
browserFamily String? "Chrome" Browser name
browserMajor String? "36" Major version
browserMinor String? "0" Minor version
browserPatch String? "1985" Patch version

OS Fields:

Field Type Example Description
osFamily String? "Android" Operating system name
osMajor String? "4" Major version
osMinor String? "4" Minor version
osPatch String? "2" Patch version
osPatchMinor String? null Minor patch version

Device Fields:

Field Type Example Description
deviceFamily String? "QMV7A" Device name
deviceBrand String? "Generic_Android_Tablet" Device brand or category
deviceModel String? "QMV7A" Device model identifier

All fields are nullable — values are null when the parser cannot extract them from the User-Agent string.

Examples

Parsing Different User-Agents

// Android tablet
var ua = UserAgent::parse(
    "Mozilla/5.0 (Linux; Android 4.4.2; QMV7A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36"
);
Assert::equals(ua.browserFamily, "Chrome");
Assert::equals(ua.browserMajor, "36");
Assert::equals(ua.browserMinor, "0");
Assert::equals(ua.browserPatch, "1985");
Assert::equals(ua.osFamily, "Android");
Assert::equals(ua.osMajor, "4");
Assert::equals(ua.osMinor, "4");
Assert::equals(ua.osPatch, "2");
Assert::equals(ua.osPatchMinor, null);
Assert::equals(ua.deviceFamily, "QMV7A");
Assert::equals(ua.deviceBrand, "Generic_Android_Tablet");
Assert::equals(ua.deviceModel, "QMV7A");

Web Analytics — Counting Browsers

fn trackUserAgent(raw: String, browserCounts: Map<String, int>) {
    var ua = UserAgent::parse(raw);
    var browser = ua.browserFamily ?? "Unknown";
    browserCounts.set(browser, (browserCounts.get(browser) ?? 0) + 1);
}

Device-Specific Logic

fn isMobile(raw: String): bool {
    var ua = UserAgent::parse(raw);
    var os = ua.osFamily ?? "";
    return os == "Android" || os == "iOS";
}