Source: agent.ts

import { AgentInfo } from "./types";
import { hasUserAgentData } from "./utils";
import { getClientHintsAgent } from "./userAgentData";
import { getLegacyAgent } from "./userAgent";

/**
 * @namespace eg.agent
 */

/**
* Extracts accuate browser and operating system information from the user agent string or client hints.
* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.
* @function eg.agent#getAccurateAgent
* @param - Callback function to get the accuate agent <ko>정확한 에이전트를 가져오기 위한 callback 함수</ko>
* @return - get the accuate agent promise. If Promise are not supported, null is returned. <ko> 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. </ko>
* @example
import { getAccurateAgent } from "@egjs/agent";
// eg.agent.getAccurateAgent()
getAccurateAgent().then(agent => {
   const { os, browser, isMobile } = agent;
});
getAccurateAgent(agent => {
    const { os, browser, isMobile } = agent;
});
*/
export function getAccurateAgent(callback?: (result: AgentInfo) => void): Promise<AgentInfo> | null {
    if (hasUserAgentData()) {
        return navigator.userAgentData.getHighEntropyValues([
            "architecture",
            "model",
            "platform",
            "platformVersion",
            "uaFullVersion",
            "fullVersionList",
        ]).then(info => {
            const agentInfo = getClientHintsAgent(info);

            callback && callback(agentInfo);
            return agentInfo;
        });
    }
    callback && callback(agent());
    if (typeof Promise === "undefined" || !Promise) {
        return null;
    }
    return Promise.resolve(agent());
}



/**
 * Extracts browser and operating system information from the user agent string.
 * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.
 * @function eg.agent#agent
 * @param - user agent string to parse <ko>파싱할 유저에이전트 문자열</ko>
 * @return - agent Info <ko> 에이전트 정보 </ko>
 * @example
import agent from "@egjs/agent";
// eg.agent();
const { os, browser, isMobile } = agent();
 */
function agent(userAgent?: string): AgentInfo {
    if (typeof userAgent === "undefined" && hasUserAgentData()) {
        return getClientHintsAgent();
    } else {
        return getLegacyAgent(userAgent);
    }
}
export { getLegacyAgent };

export default agent;

export * from "./types";
comments powered by Disqus