UNPKG

built.io-browserify

Version:

SDK for Built.io Backend which is compatible with Browserify

114 lines (102 loc) 3.45 kB
/* User metrics sent to built.io for user based analytics. User metrics is send when ever a application is initialized or a analytics event is triggered */ var UAParser = require('ua-parser-js'); var os = require('os'); var utility = require('./utility'); var sdkVersion = require('../../package').version; var localStorage = require('../session/local_storage'); var cookie = require('../session/cookie'); var UUID_TOKEN_POSTFIX = "blt_uuid"; var UUID_TOKENS = {}; module.exports.generateUserMetrics = function(api_key, user_uid){ var uuidSize = 16 if(user_uid === "") user_uid = "anonymous" if(utility.isBrowser()){ var userAgentStr = navigator.userAgent; var result = new UAParser().setUA(userAgentStr).getResult(); var screenHeight = window.screen ? window.screen.height : "unknown"; var screenWidth = window.screen ? window.screen.width : "unknown"; var blt_device = "browser|"+result.browser.name+"|"+result.browser.version if(result.device.model){ if(result.device.model === "WebKit"){ result.device.model = "WebView" } blt_device = result.device.model+"|"+blt_device } return { blt_uuid : generateUUIDForBrowser(api_key, uuidSize), app_user_object_uid : user_uid, blt_os : result.os.name, blt_screen_width : screenWidth, blt_sdk_version : sdkVersion, blt_screen_height : screenHeight, blt_os_version : result.os.version, blt_sdk : "JavaScript", blt_device : blt_device } } else{ var osType = getOSType(); return { blt_uuid : generateUUIDForNode(api_key, uuidSize), app_user_object_uid : user_uid, blt_sdk : "JavaScript", blt_sdk_version : sdkVersion, blt_os : osType, blt_os_version : os.release(), blt_device : "nodejs" } } } module.exports.getUUIDForAPI = function(api_key) { if (utility.isBrowser()) { var UUID_TOKEN = api_key + "_" + UUID_TOKEN_POSTFIX return localStorage.get(UUID_TOKEN) || cookie.get(UUID_TOKEN) } else { return UUID_TOKENS[api_key] } } function getOSType(){ var osType = os.type(); if(osType.match(/windows/i)){ return 'windows'; }else if(osType.match(/darwin/i)){ return 'macintosh' }else{ return osType; } } function generateUUIDForBrowser(api_key, length){ var UUID_TOKEN = api_key + "_" + UUID_TOKEN_POSTFIX; var uuid = localStorage.get(UUID_TOKEN) || cookie.get(UUID_TOKEN); if(uuid){ return uuid } else{ length = length || 16 var uuid = "blt"+randomString(length*2, '0123456789abcde'); try{ localStorage.set(UUID_TOKEN, uuid) } catch(err){ console.warn("Analytics blt_uuid is stored in cookie as localStorage wasn't avaliable") cookie.set(UUID_TOKEN, uuid) } return uuid; } } function generateUUIDForNode(api_key, length){ if(UUID_TOKENS[api_key]){ return UUID_TOKENS[api_key]; }else{ length = length || 16 UUID_TOKENS[api_key] = "blt"+randomString(length*2, '0123456789abcde'); return UUID_TOKENS[api_key]; } } function randomString(length, chars) { var result = ''; for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; return result; }