fair-analytics-client-api
Version:
The Fair Analytics client API
1 lines • 10.2 kB
Source Map (JSON)
{"version":3,"file":"fair-analytics-client-api.umd.min.js","sources":["../index.js","../node_modules/unfetch/dist/unfetch.es.js","../node_modules/isomorphic-unfetch/browser.js","../node_modules/cuid/dist/browser-cuid.js"],"sourcesContent":["import fetch from 'isomorphic-unfetch'\nimport cuid from 'cuid'\n\nfunction checkStatus (res) {\n if (res.ok) {\n return res\n } else {\n let err = new Error(res.statusText)\n err.response = res\n return Promise.reject(err)\n }\n}\n\nexport default function fairAnalytics ({ url } = {}) {\n if (!url) {\n throw new Error(\n 'You must provide the \"url\" of your Fair Analytics instance'\n )\n }\n let anonymousSessionId = 'NA'\n const localStorageKey = '__fa__'\n\n try {\n const faConf = window.localStorage.getItem(localStorageKey)\n if (faConf && faConf.anonymousSessionId) {\n anonymousSessionId = faConf.anonymousSessionId\n } else {\n try {\n const faConf = {\n anonymousSessionId: cuid()\n }\n window.localStorage.setItem(localStorageKey, faConf)\n anonymousSessionId = faConf.anonymousSessionId\n } catch (e) {\n console.warn(\n 'Error while setting anonymousSessionId \"NA\" will be used',\n e\n )\n }\n }\n } catch (e) {\n console.warn('Error while setting anonymousSessionId, \"NA\" will be used', e)\n }\n\n const send = (opts = {}) => {\n if (!opts.event) {\n return Promise.reject(new Error('You must provide the \"event\" parameter'))\n }\n opts.anonymousSessionId = anonymousSessionId\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(opts)\n }).then(checkStatus)\n }\n\n return { send }\n}\n","var index = typeof fetch=='function' ? fetch : function(url, options) {\n\toptions = options || {};\n\treturn new Promise( function (resolve, reject) {\n\t\tvar request = new XMLHttpRequest();\n\n\t\trequest.open(options.method || 'get', url);\n\n\t\tfor (var i in options.headers) {\n\t\t\trequest.setRequestHeader(i, options.headers[i]);\n\t\t}\n\n\t\trequest.withCredentials = options.credentials=='include';\n\n\t\trequest.onload = function () {\n\t\t\tresolve(response());\n\t\t};\n\n\t\trequest.onerror = reject;\n\n\t\trequest.send(options.body);\n\n\t\tfunction response() {\n\t\t\tvar keys = [],\n\t\t\t\tall = [],\n\t\t\t\theaders = {},\n\t\t\t\theader;\n\n\t\t\trequest.getAllResponseHeaders().replace(/^(.*?):\\s*([\\s\\S]*?)$/gm, function (m, key, value) {\n\t\t\t\tkeys.push(key = key.toLowerCase());\n\t\t\t\tall.push([key, value]);\n\t\t\t\theader = headers[key];\n\t\t\t\theaders[key] = header ? (header + \",\" + value) : value;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tok: (request.status/200|0) == 1,\t\t// 200-399\n\t\t\t\tstatus: request.status,\n\t\t\t\tstatusText: request.statusText,\n\t\t\t\turl: request.responseURL,\n\t\t\t\tclone: response,\n\t\t\t\ttext: function () { return Promise.resolve(request.responseText); },\n\t\t\t\tjson: function () { return Promise.resolve(request.responseText).then(JSON.parse); },\n\t\t\t\txml: function () { return Promise.resolve(request.responseXML); },\n\t\t\t\tblob: function () { return Promise.resolve(new Blob([request.response])); },\n\t\t\t\theaders: {\n\t\t\t\t\tkeys: function () { return keys; },\n\t\t\t\t\tentries: function () { return all; },\n\t\t\t\t\tget: function (n) { return headers[n.toLowerCase()]; },\n\t\t\t\t\thas: function (n) { return n.toLowerCase() in headers; }\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n};\n\nexport default index;\n//# sourceMappingURL=unfetch.es.js.map\n","module.exports = window.fetch = require('unfetch');\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\n/*global window, navigator, document, require, process, module */\n(function (app) {\n 'use strict';\n var namespace = 'cuid',\n c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize),\n\n pad = function pad(num, size) {\n var s = \"000000000\" + num;\n return s.substr(s.length-size);\n },\n\n randomBlock = function randomBlock() {\n return pad((Math.random() *\n discreteValues << 0)\n .toString(base), blockSize);\n },\n\n safeCounter = function () {\n c = (c < discreteValues) ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n },\n\n api = function cuid() {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter,\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n fingerprint = api.fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n counter = pad(safeCounter().toString(base), blockSize);\n\n return (letter + timestamp + counter + fingerprint + random);\n };\n\n api.slug = function slug() {\n var date = new Date().getTime().toString(36),\n counter,\n print = api.fingerprint().slice(0,1) +\n api.fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n counter = safeCounter().toString(36).slice(-4);\n\n return date.slice(-2) +\n counter + print + random;\n };\n\n api.globalCount = function globalCount() {\n // We want to cache the results of this\n var cache = (function calc() {\n var i,\n count = 0;\n\n for (i in window) {\n count++;\n }\n\n return count;\n }());\n\n api.globalCount = function () { return cache; };\n return cache;\n };\n\n api.fingerprint = function browserPrint() {\n return pad((navigator.mimeTypes.length +\n navigator.userAgent.length).toString(36) +\n api.globalCount().toString(36), 4);\n };\n\n // don't change anything from here down.\n if (app.register) {\n app.register(namespace, api);\n } else if (typeof module !== 'undefined') {\n module.exports = api;\n } else {\n app[namespace] = api;\n }\n\n}(this.applitude || this));\n"],"names":["checkStatus","res","ok","err","Error","statusText","response","Promise","reject","fairAnalytics","url","anonymousSessionId","faConf","window","localStorage","getItem","cuid","setItem","e","warn","send","opts","event","fetch","JSON","stringify","then","index","options","resolve","header","keys","all","headers","request","getAllResponseHeaders","replace","m","key","value","push","toLowerCase","status","responseURL","clone","text","responseText","json","parse","xml","responseXML","blob","Blob","entries","get","n","has","XMLHttpRequest","open","method","i","setRequestHeader","withCredentials","credentials","onload","onerror","body","require$$0","app","c","discreteValues","Math","pow","pad","num","size","s","substr","length","randomBlock","random","toString","safeCounter","api","counter","timestamp","Date","getTime","fingerprint","slug","date","print","slice","globalCount","cache","count","navigator","mimeTypes","userAgent","register","module","this","applitude"],"mappings":"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"}