UNPKG

@algolia/algolia-browser-telemetry

Version:

<p align="center"> <img src="https://github.com/algolia/algolia-browser-telemetry/blob/master/doc/netinfo.blog.png?raw=true" height="380px"/> </p> <br/> <br/>

3 lines (2 loc) 9.2 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@algolia/requester-browser-xhr")):"function"==typeof define&&define.amd?define(["exports","@algolia/requester-browser-xhr"],t):t((e=e||self)["@algolia/algolia-browser-telemetry"]={},e.requesterBrowserXhr)}(this,(function(e,t){"use strict";function n(){return"undefined"!=typeof window}var r,o=n(),i=o?window:void 0,u=o?document:void 0,a=null==i?void 0:i.navigator;function c(e){return e.split("?")[0]}function s(e,t){void 0===t&&(t=2);var n=Math.pow(10,t);return Math.round(e*n)/n}function l(e){var t;null===(t=i.Promise)||void 0===t||t.resolve().then(e)}function f(){return null!==(e=-1!==(null==i||null===(t=i.Promise)||void 0===t||null===(n=t.toString())||void 0===n?void 0:n.indexOf("[native code]")))&&void 0!==e&&e?l:null!==(r=-1!==(null==i||null===(o=i.MutationObserver)||void 0===o||null===(u=o.toString())||void 0===u?void 0:u.indexOf("[native code]")))&&void 0!==r&&r?function(){if(!i.MutationObserver)return function(e){return e()};var e=[],t=new i.MutationObserver((function(){e.forEach((function(e){return e()})),e=[]})),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(t){e.push(t),n.data=String(1)}}():function(e){return e()};var e,t,n,r,o,u}!function(e){e[e.memory=.1]="memory",e[e.threads=.2]="threads",e[e.network=.35]="network",e[e.saveData=.35]="saveData"}(r||(r={}));var d=f();function v(e){var t;return-1!==(null!==(t=null==e?void 0:e.toString())&&void 0!==t?t:"").indexOf("[native code]")}var p=v(null==i?void 0:i.requestIdleCallback)?i.requestIdleCallback:function(e){return null==i?void 0:i.setTimeout(e,0)};function y(){return!("object"!=typeof i.safari||!i.safari.pushNotification)}function h(e){if(!e.capacity||"number"!=typeof e.capacity)throw new Error("IdleQueue requires capacity number initializer");if(!e.onFlush||"function"!=typeof e.onFlush)throw new Error("IdleQueue requires onFlush function initializer");var t=[],n=[];function r(){var r=t.shift();r&&(n.push(r()),n.length>=e.capacity&&o())}function o(){if(n.length){for(var t=[];n.length>0;){var r=n.shift();r&&t.push(r)}d((function(){return e.onFlush(t)}))}}function a(){for(;t.length;){var e=t.shift();e&&n.push(e())}o()}function c(){"hidden"===u.visibilityState&&a()}return u.addEventListener("visibilitychange",c,!0),y()&&i.addEventListener("beforeunload",a,!0),{size:function(){return t.length},enqueue:function(e){t.push(e),"hidden"===u.visibilityState?d(r):p(r)},destroy:function(){u.removeEventListener("visibilitychange",c),y()&&i.removeEventListener("beforeunload",a),a()},results:n}}var m="https://telemetry.algolia.com/1/collector";function g(e){return null!==(t="function"==typeof(null==i||null===(n=i.navigator)||void 0===n?void 0:n.sendBeacon))&&void 0!==t&&t?i.navigator.sendBeacon(m,JSON.stringify(e)):-1!==(null!==(r=null===(o=i.fetch)||void 0===o?void 0:o.toString())&&void 0!==r?r:"").indexOf("[native code]")?(function(e){i.fetch(m,{method:"POST",body:JSON.stringify(e),keepalive:!0})}(e),!0):(function(e){var t=new i.XMLHttpRequest;t.open("POST",m),t.setRequestHeader("Content-Type","application/json;charset=UTF-8"),t.withCredentials=!0,t.send(JSON.stringify(e))}(e),!1);var t,n,r,o}function w(e){return g({o:i.location.hostname||null,e:e})}function b(e){return g({o:i.location.hostname||null,d:e})}function q(e){return!(!function(e){return("xmlhttprequest"===e.initiatorType||"fetch"===e.initiatorType)&&-1!==e.name.indexOf("algolia")}(e)||!/\/\/\w+-(dsn|[1-3]).algolia\.?net/.test(e.name)&&!function(e){return/\/\/([d|t|s|c][0-9]+)-\w+(-[0-9])?.algolia\.?net/.test(e)}(e.name))}function T(e,t,n){var r={r:c(e.url),sc:t.status,m:t.content,to:t.isTimedOut?1:0,ts:(new Date).toISOString()};return(null==n?void 0:n.appid)&&(r.a=n.appid),r}function O(e){return"number"==typeof e&&e>0}var S={collect:0,probe:[]};e.default=function(e){if(void 0===e&&(e={}),!n())return console.warn("\n 🚨Telemetry is not supported in non browser environments.🚨\n\n Please use a requester that is compliant with the environment you are running your application in.\n\n The value of window object was: "+i+"\n\n "),{send:function(){return Promise.resolve()},destroy:function(){return null}};var o,u=e.requester||t.createBrowserXhrRequester(),l=[],f={},d={send:function(e){return f[e.url.toLowerCase()]={appid:(t=e,r=t.headers["x-algolia-application-id"],r||((n=t.url.toLowerCase()).split("?x-algolia-application-id=")[1]||n.split("&x-algolia-application-id=")[1]||"").split("&")[0]||void 0)},u.send(e).then((function(t){return(t.status>=400||0===t.status||t.isTimedOut)&&(o?o.error(e,t):l.push({request:e,response:t})),t}));var t,n,r},destroy:function(){o&&o.destroy()}};return function(e,t){var n=encodeURI("https://telemetry.algolia.com/1/settings?"+(e?"applications="+e.join(","):""));if("function"!=typeof i.fetch){var r=new i.XMLHttpRequest;r.overrideMimeType("application/json"),r.withCredentials=!0,r.open("GET",n,!0),r.onload=function(){try{t(JSON.parse(r.responseText))}catch(e){t(S)}},r.onerror=function(){t(S)},r.send()}else i.fetch(n,{mode:"cors",credentials:"include"}).then((function(e){return e.ok?e.json():S})).then((function(e){return t(e)})).catch((function(){return t(S)}))}(e.applications,(function(t){Math.random()>t.collect||(o=function(e){var t,n;if(void 0===e&&(e={}),void 0!==e.errorQueueCapacity&&!O(e.errorQueueCapacity))throw new Error('Invalid error queue capacity "'+e.errorQueueCapacity+'", queue capacity needs to be of type number.');if(void 0!==e.telemetryQueueCapacity&&!O(e.telemetryQueueCapacity))throw new Error('Invalid telemetry queue capacity "'+e.telemetryQueueCapacity+'", queue capacity needs to be of type number.');var o,u,l,f,d,v=e.getRequestDetails?e.getRequestDetails:function(e){},p=e.reporter||{error:w,telemetry:b},y=h({capacity:e.errorQueueCapacity||4,onFlush:p.error}),m=h({capacity:e.telemetryQueueCapacity||10,onFlush:p.telemetry}),g=(o=function(e){m.enqueue((function(){return function(e,t){var n,r={r:c(e.name),d:e.domainLookupEnd&&e.domainLookupStart?s(e.domainLookupEnd-e.domainLookupStart,0):0,t:e.requestStart&&e.responseEnd?s(e.responseEnd-e.requestStart,0):0,sz:e.transferSize?s((n=e.transferSize,n/1024),2):0,ts:(new Date).toISOString()};return t&&t.appid&&(r.a=t.appid),e.name.indexOf("probe=1")>-1&&(r.p=1),r}(e,v(e.name))}))},-1!==(null===(l=null!==(f=null==(u=i.PerformanceObserver)?void 0:u.toString())&&void 0!==f?f:"")||void 0===l?void 0:l.indexOf("[native code]"))&&-1!==(null!==(d=null==u?void 0:u.supportedEntryTypes)&&void 0!==d?d:[]).indexOf("resource")?function(e){return new i.PerformanceObserver((function(t){t.getEntriesByType("resource").filter((function(e){return q(e)})).forEach((function(t){return e(t)}))}))}(o):function(e){var t=0,n={},r=function(){var t,r;(null!==(t="function"==typeof(null===(r=i.performance)||void 0===r?void 0:r.getEntriesByType))&&void 0!==t&&t?i.performance.getEntriesByType("resource").filter((function(e){return q(e)})):[]).filter((function(e){return!n[e.startTime]})).forEach((function(t){n[t.startTime]=t,e(t)}))};return{observe:function(){r(),t=setInterval(r,2e3)},takeRecords:function(){var e=Object.values(n);return n={},e},disconnect:function(){t&&(n={},i.clearInterval(t))}}}(o));return g.observe({entryTypes:["resource"]}),(null===(t=e)||void 0===t||null===(n=t.settings)||void 0===n?void 0:n.probe)&&e.settings.probe.length>0&&function(e,t){var n,o,u,c,s,l,f=(l=0,(null==a?void 0:a.hardwareConcurrency)&&(null==a?void 0:a.hardwareConcurrency)<=4&&(l+=r.threads),(null==a?void 0:a.deviceMemory)&&a.deviceMemory<=4&&(l+=r.memory),(null==a||null===(u=a.connection)||void 0===u?void 0:u.effectiveType)&&["slow-2g","2g","3g"].indexOf(null==a||null===(s=a.connection)||void 0===s?void 0:s.effectiveType)>-1&&(l+=r.network),(null==a||null===(c=a.connection)||void 0===c?void 0:c.saveData)&&(l+=r.saveData),l>=.3?3e3:1e3),d=!1,v=null!==(n=null==e?void 0:e.slice(0))&&void 0!==n?n:[];function p(){var e=v.shift();e&&!d&&function(e,t,n){var r=e.indexOf("?")>-1?e+"&probe=1":e+"?probe=1";if("function"!=typeof i.fetch){var o=new i.XMLHttpRequest;o.open("GET",r,!0),o.onerror=function(){n(r,{content:o.statusText||"Network request failed",status:o.status,isTimedOut:!1})},o.send()}else i.fetch(r,{method:"GET",mode:"cors"}).then((function(e){if(!e.ok)throw e;return e.json()})).then((function(e){e&&t(r)})).catch((function(e){n(r,{content:e.statusText||"Network request failed",status:e.status,isTimedOut:!1})}))}(e,h,(function(e,t){(function(e,t){y.enqueue((function(){return T({url:e},t)}))})(e,t),h()}))}function h(){o=setTimeout(p,f)}return{start:function(){d=!1,h()},stop:function(){return o&&i.clearTimeout(o),d=!0}}}(e.settings.probe).start(),{error:function(e,t){return y.enqueue((function(){return T(e,t,v(e.url))}))},destroy:function(){y.destroy(),m.destroy(),g.disconnect()}}}({reporter:e.reporter,telemetryQueueCapacity:e.telemetryQueueCapacity,errorQueueCapacity:e.errorQueueCapacity,settings:t,getRequestDetails:function(e){return f[e.toLowerCase()]}}),l.forEach((function(e){o.error(e.request,e.response)})),l=[])})),d},Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=algolia-browser-telemetry.umd.production.min.js.map