UNPKG

@100mslive/hms-video-store

Version:

@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow

80 lines (69 loc) 2.45 kB
import { ENV, isNode, parsedUserAgent } from './support'; import { isPresent } from './validations'; import { DomainCategory } from '../analytics/AnalyticsEventDomains'; import { domainCategory } from '../analytics/domain-analytics'; import { HMSFrameworkInfo } from '../interfaces'; const sdk_version = require('../../package.json').version; type UserAgent = { os: string; os_version: string; sdk: 'web'; sdk_version: string; env: 'debug' | 'prod'; domain: DomainCategory; is_prebuilt: boolean; device_model?: string; framework?: HMSFrameworkInfo['type'] | 'node'; framework_version?: HMSFrameworkInfo['version']; framework_sdk_version?: HMSFrameworkInfo['sdkVersion']; }; export function createUserAgent(sdkEnv: ENV = ENV.PROD, frameworkInfo?: HMSFrameworkInfo): string { const sdk = 'web'; const env = domainCategory !== DomainCategory.LOCAL && sdkEnv === ENV.PROD ? 'prod' : 'debug'; if (isNode) { return convertObjectToString({ os: 'web_nodejs', os_version: process.version, sdk, sdk_version, env, domain: domainCategory, is_prebuilt: !!frameworkInfo?.isPrebuilt, framework: 'node', framework_version: process.version, framework_sdk_version: frameworkInfo?.sdkVersion, }); } const parsedOs = parsedUserAgent.getOS(); const parsedDevice = parsedUserAgent.getDevice(); const parsedBrowser = parsedUserAgent.getBrowser(); const os = replaceSpaces(`web_${parsedOs.name}`); const os_version = parsedOs.version || ''; const browser = replaceSpaces(`${parsedBrowser.name}_${parsedBrowser.version}`); let device_model = browser; if (parsedDevice.type) { const deviceVendor = replaceSpaces(`${parsedDevice.vendor}_${parsedDevice.type}`); device_model = `${deviceVendor}/${browser}`; } return convertObjectToString({ os, os_version, sdk, sdk_version, device_model, env, domain: domainCategory, is_prebuilt: !!frameworkInfo?.isPrebuilt, framework: frameworkInfo?.type, framework_version: frameworkInfo?.version, framework_sdk_version: frameworkInfo?.sdkVersion, }); } function replaceSpaces(s: string) { return s.replace(/ /g, '_'); } const convertObjectToString = (object: UserAgent, delimiter = ',') => Object.keys(object) .filter(key => isPresent(object[key as keyof UserAgent])) .map(key => `${key}:${object[key as keyof UserAgent]}`) .join(delimiter);