built.io-browserify
Version:
SDK for Built.io Backend which is compatible with Browserify
114 lines (102 loc) • 3.45 kB
JavaScript
/*
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;
}