var version="2.17.3"; function extractAdditionalParams(params) { return params.reduce(function (ref, param) { var events = ref.events; var additionalParams = ref.additionalParams; // Real events all have `index` as a mandatory parameter, which we // can rely on to distinguish them from additional parameters if ("index" in param) { return { additionalParams: additionalParams, events: events.concat( [param]) }; } return { events: events, additionalParams: param }; }, { events: [], additionalParams: undefined }); } var supportsCookies = function () { try { return Boolean(navigator.cookieEnabled); } catch (e) { return false; } }; var supportsNodeHttpModule = function () { try { /* eslint-disable @typescript-eslint/no-var-requires */ var ref = require("http"); var nodeHttpRequest = ref.request; var ref$1 = require("https"); var nodeHttpsRequest = ref$1.request; /* eslint-enable */ return Boolean(nodeHttpRequest) && Boolean(nodeHttpsRequest); } catch (e) { return false; } }; var supportsNativeFetch = function () { try { return fetch !== undefined; } catch (e) { return false; } }; /** * A utility class for safely interacting with localStorage. */ var LocalStorage = function LocalStorage () {}; LocalStorage.get = function get (key) { var _a; var val = (_a = this.store) === null || _a === void 0 ? void 0 : _a.getItem(key); if (!val) { return null; } try { return JSON.parse(val); } catch (_b) { return null; } }; /** * Safely set a value in localStorage. * If the storage is full, this method will catch the error and log a warning. * * @param key - String value of the key. * @param value - Any value to store. */ LocalStorage.set = function set (key, value) { var _a; try { (_a = this.store) === null || _a === void 0 ? void 0 : _a.setItem(key, JSON.stringify(value)); } catch (_b) { // eslint-disable-next-line no-console console.error(("Unable to set " + key + " in localStorage, storage may be full.")); } }; /** * Remove a value from localStorage. * * @param key - String value of the key. */ LocalStorage.remove = function remove (key) { var _a; (_a = this.store) === null || _a === void 0 ? void 0 : _a.removeItem(key); }; LocalStorage.store = ensureLocalStorage(); function ensureLocalStorage() { try { var testKey = "__test_localStorage__"; globalThis.localStorage.setItem(testKey, testKey); globalThis.localStorage.removeItem(testKey); return globalThis.localStorage; } catch (_a) { return undefined; } } var STORE = "AlgoliaObjectQueryCache"; var LIMIT = 5000; // 1 entry is typically no more than 100 bytes, so this is ~500kB worth of data - most browsers allow at least 5MB per origin var FREE = 1000; function getCache() { var _a; return (_a = LocalStorage.get(STORE)) !== null && _a !== void 0 ? _a : {}; } function setCache(objectQueryMap) { LocalStorage.set(STORE, limited(objectQueryMap)); } function limited(objectQueryMap) { return Object.keys(objectQueryMap).length > LIMIT ? purgeOldest(objectQueryMap) : objectQueryMap; } function purgeOldest(objectQueryMap) { var sorted = Object.entries(objectQueryMap).sort(function (ref, ref$1) { var aTimestamp = ref[1][1]; var bTimestamp = ref$1[1][1]; return bTimestamp - aTimestamp; }); var newObjectQueryMap = sorted .slice(0, sorted.length - FREE - 1) .reduce(function (acc, ref) { var obj; var key = ref[0]; var value = ref[1]; return (Object.assign(Object.assign({}, acc), ( obj = {}, obj[key] = value, obj ))); }, {}); return newObjectQueryMap; } function makeKey(index, objectID) { return (index + "_" + objectID); } function storeQueryForObject(index, objectID, queryID) { var objectQueryMap = getCache(); objectQueryMap[makeKey(index, objectID)] = [queryID, Date.now()]; setCache(objectQueryMap); } function getQueryForObject(index, objectID) { return getCache()[makeKey(index, objectID)]; } function removeQueryForObjects(index, objectIDs) { var objectQueryMap = getCache(); objectIDs.forEach(function (objectID) { delete objectQueryMap[makeKey(index, objectID)]; }); setCache(objectQueryMap); } // use theses type checking helpers to avoid mistyping "undefind", I mean "undfined" var isUndefined = function (value) { return typeof value === "undefined"; }; var isNumber = function (value) { return typeof value === "number"; }; /* eslint-disable @typescript-eslint/ban-types */ var isFunction = function (value) { return typeof value === "function"; }; /* eslint-enable */ var isPromise = function (value) { return typeof (value === null || value === void 0 ? void 0 : value.then) === "function"; }; function getFunctionalInterface(instance) { return function (functionName) { var functionArguments = [], len = arguments.length - 1; while ( len-- > 0 ) functionArguments[ len ] = arguments[ len + 1 ]; if (functionName && isFunction(instance[functionName])) { // @ts-expect-error return instance[functionName].apply(instance, functionArguments); } // eslint-disable-next-line no-console console.warn(("The method `" + functionName + "` doesn't exist.")); return undefined; }; } var DEFAULT_ALGOLIA_AGENTS = [ ("insights-js (" + version + ")"), ("insights-js-" + ("node-esm") + " (" + version + ")") ]; function addAlgoliaAgent(algoliaAgent) { if (this._ua.indexOf(algoliaAgent) === -1) { this._ua.push(algoliaAgent); } } function getVersion(callback) { if (isFunction(callback)) { callback(this.version); } return this.version; } /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ /* global Reflect, Promise */ function __rest(s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) { t[p] = s[p]; } } if (s != null && typeof Object.getOwnPropertySymbols === "function") { for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) { t[p[i]] = s[p[i]]; } } } return t; } function addQueryId(events) { return events.map(function (event) { var _a; if (!isValidEventForQueryIdLookup(event)) { return event; } var objectIDsWithInferredQueryID = []; var updatedObjectData = (_a = event.objectIDs) === null || _a === void 0 ? void 0 : _a.map(function (objectID, i) { var _a, _b; var objectData = (_a = event.objectData) === null || _a === void 0 ? void 0 : _a[i]; if (objectData === null || objectData === void 0 ? void 0 : objectData.queryID) { return objectData; } var ref = (_b = getQueryForObject(event.index, objectID)) !== null && _b !== void 0 ? _b : []; var queryID = ref[0]; if (queryID) { objectIDsWithInferredQueryID.push(objectID); } return Object.assign(Object.assign({}, objectData), { queryID: queryID }); }); if (objectIDsWithInferredQueryID.length === 0) { return event; } return Object.assign(Object.assign({}, event), { objectData: updatedObjectData, objectIDsWithInferredQueryID: objectIDsWithInferredQueryID }); }); } function isValidEventForQueryIdLookup(event) { return !event.queryID && event.eventType === "conversion"; } function makeSendEvents(requestFn) { return function sendEvents(eventData, additionalParams) { var this$1$1 = this; var _a, _b; if (this._userHasOptedOut) { return Promise.resolve(false); } var hasCredentials = (!isUndefined(this._apiKey) && !isUndefined(this._appId)) || (((_a = additionalParams === null || additionalParams === void 0 ? void 0 : additionalParams.headers) === null || _a === void 0 ? void 0 : _a["X-Algolia-Application-Id"]) && ((_b = additionalParams === null || additionalParams === void 0 ? void 0 : additionalParams.headers) === null || _b === void 0 ? void 0 : _b["X-Algolia-API-Key"])); if (!hasCredentials) { throw new Error("Before calling any methods on the analytics, you first need to call the 'init' function with appId and apiKey parameters or provide custom credentials in additional parameters."); } if (!this._userToken && this._anonymousUserToken) { this.setAnonymousUserToken(true); } var events = ((additionalParams === null || additionalParams === void 0 ? void 0 : additionalParams.inferQueryID) ? addQueryId(eventData) : eventData).map(function (data) { var _a, _b; var filters = data.filters; var rest = __rest(data, ["filters"]); var payload = Object.assign(Object.assign({}, rest), { userToken: (_a = data === null || data === void 0 ? void 0 : data.userToken) !== null && _a !== void 0 ? _a : this$1$1._userToken, authenticatedUserToken: (_b = data === null || data === void 0 ? void 0 : data.authenticatedUserToken) !== null && _b !== void 0 ? _b : this$1$1._authenticatedUserToken }); if (!isUndefined(filters)) { payload.filters = filters.map(encodeURIComponent); } return payload; }); if (events.length === 0) { return Promise.resolve(false); } var send = sendRequest(requestFn, this._ua, this._endpointOrigin, events, this._appId, this._apiKey, additionalParams === null || additionalParams === void 0 ? void 0 : additionalParams.headers); return isPromise(send) ? send.then(purgePurchased(events)) : send; }; } function purgePurchased(events) { return function (sent) { if (sent) { events .filter(function (ref) { var eventType = ref.eventType; var eventSubtype = ref.eventSubtype; var objectIDs = ref.objectIDs; return eventType === "conversion" && eventSubtype === "purchase" && (objectIDs === null || objectIDs === void 0 ? void 0 : objectIDs.length); }) .forEach(function (ref) { var index = ref.index; var objectIDs = ref.objectIDs; return removeQueryForObjects(index, objectIDs); }); } return sent; }; } // eslint-disable-next-line max-params function sendRequest(requestFn, userAgents, endpointOrigin, events, appId, apiKey, additionalHeaders) { if ( additionalHeaders === void 0 ) additionalHeaders = {}; var providedAppId = additionalHeaders["X-Algolia-Application-Id"]; var providedApiKey = additionalHeaders["X-Algolia-API-Key"]; var restHeaders = __rest(additionalHeaders, ["X-Algolia-Application-Id", "X-Algolia-API-Key"]); // Auth query var headers = Object.assign({ "X-Algolia-Application-Id": providedAppId !== null && providedAppId !== void 0 ? providedAppId : appId, "X-Algolia-API-Key": providedApiKey !== null && providedApiKey !== void 0 ? providedApiKey : apiKey, "X-Algolia-Agent": encodeURIComponent(userAgents.join("; ")) }, restHeaders); var queryParameters = Object.keys(headers) .map(function (key) { return (key + "=" + (headers[key])); }) .join("&"); var reportingURL = endpointOrigin + "/1/events?" + queryParameters; return requestFn(reportingURL, { events: events }); } /** * Create UUID according to * https://www.ietf.org/rfc/rfc4122.txt. * * @returns Generated UUID. */ function createUUID() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { /* eslint-disable no-bitwise */ var r = (Math.random() * 16) | 0; var v = c === "x" ? r : (r & 0x3) | 0x8; /* eslint-enable */ return v.toString(16); }); } var COOKIE_KEY = "_ALGOLIA"; var MONTH = 30 * 24 * 60 * 60 * 1000; var setCookie = function (name, value, duration) { var d = new Date(); d.setTime(d.getTime() + duration); var expires = "expires=" + (d.toUTCString()); document.cookie = name + "=" + value + ";" + expires + ";path=/"; }; var getCookie = function (name) { var prefix = name + "="; var ca = document.cookie.split(";"); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === " ") { c = c.substring(1); } if (c.indexOf(prefix) === 0) { return c.substring(prefix.length, c.length); } } return ""; }; function checkIfAnonymousToken(token) { if (typeof token === "number") { return false; } return token.indexOf("anonymous-") === 0; } function saveTokenAsCookie() { var foundToken = getCookie(COOKIE_KEY); if (this._userToken && (!foundToken || foundToken === "" || foundToken.indexOf("anonymous-") !== 0)) { setCookie(COOKIE_KEY, this._userToken, this._cookieDuration); } } function setAnonymousUserToken(inMemory) { if ( inMemory === void 0 ) inMemory = false; if (inMemory) { this.setUserToken(("anonymous-" + (createUUID()))); return; } if (!supportsCookies()) { return; } var foundToken = getCookie(COOKIE_KEY); if (!foundToken || foundToken === "" || foundToken.indexOf("anonymous-") !== 0) { var savedUserToken = this.setUserToken(("anonymous-" + (createUUID()))); setCookie(COOKIE_KEY, savedUserToken, this._cookieDuration); } else { this.setUserToken(foundToken); } } function setUserToken(userToken) { this._userToken = userToken; if (isFunction(this._onUserTokenChangeCallback)) { this._onUserTokenChangeCallback(this._userToken); } return this._userToken; } function getUserToken(options, callback) { if (isFunction(callback)) { callback(null, this._userToken); } return this._userToken; } function onUserTokenChange(callback, options) { this._onUserTokenChangeCallback = callback; if (options && options.immediate && isFunction(this._onUserTokenChangeCallback)) { this._onUserTokenChangeCallback(this._userToken); } } function setAuthenticatedUserToken(authenticatedUserToken) { this._authenticatedUserToken = authenticatedUserToken; if (isFunction(this._onAuthenticatedUserTokenChangeCallback)) { this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken); } return this._authenticatedUserToken; } function getAuthenticatedUserToken(options, callback) { if (isFunction(callback)) { callback(null, this._authenticatedUserToken); } return this._authenticatedUserToken; } function onAuthenticatedUserTokenChange(callback, options) { this._onAuthenticatedUserTokenChangeCallback = callback; if (options && options.immediate && isFunction(this._onAuthenticatedUserTokenChangeCallback)) { this._onAuthenticatedUserTokenChangeCallback(this._authenticatedUserToken); } } function addEventType(eventType, params) { return params.map(function (event) { return (Object.assign({ eventType: eventType }, event)); }); } function addEventTypeAndSubtype(eventType, eventSubtype, params) { return params.map(function (event) { return (Object.assign({ eventType: eventType, eventSubtype: eventSubtype }, event)); }); } function clickedObjectIDsAfterSearch() { var this$1$1 = this; var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; events.forEach(function (ref) { var index = ref.index; var queryID = ref.queryID; var objectIDs = ref.objectIDs; return objectIDs.forEach(function (objectID) { return !this$1$1._userHasOptedOut && storeQueryForObject(index, objectID, queryID); }); }); return this.sendEvents(addEventType("click", events), additionalParams); } function clickedObjectIDs() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("click", events), additionalParams); } function clickedFilters() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("click", events), additionalParams); } function convertedObjectIDsAfterSearch() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("conversion", events), additionalParams); } function addedToCartObjectIDsAfterSearch() { var this$1$1 = this; var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; events.forEach(function (ref) { var index = ref.index; var queryID = ref.queryID; var objectIDs = ref.objectIDs; var objectData = ref.objectData; return objectIDs.forEach(function (objectID, i) { var _a, _b; var objQueryID = (_b = (_a = objectData === null || objectData === void 0 ? void 0 : objectData[i]) === null || _a === void 0 ? void 0 : _a.queryID) !== null && _b !== void 0 ? _b : queryID; if (!this$1$1._userHasOptedOut && objQueryID) { storeQueryForObject(index, objectID, objQueryID); } }); }); return this.sendEvents(addEventTypeAndSubtype("conversion", "addToCart", events), additionalParams); } function purchasedObjectIDsAfterSearch() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventTypeAndSubtype("conversion", "purchase", events), additionalParams); } function convertedObjectIDs() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("conversion", events), additionalParams); } function addedToCartObjectIDs() { var this$1$1 = this; var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; events.forEach(function (ref) { var index = ref.index; var objectIDs = ref.objectIDs; var objectData = ref.objectData; return objectIDs.forEach(function (objectID, i) { var _a; var queryID = (_a = objectData === null || objectData === void 0 ? void 0 : objectData[i]) === null || _a === void 0 ? void 0 : _a.queryID; if (!this$1$1._userHasOptedOut && queryID) { storeQueryForObject(index, objectID, queryID); } }); }); return this.sendEvents(addEventTypeAndSubtype("conversion", "addToCart", events), additionalParams); } function purchasedObjectIDs() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventTypeAndSubtype("conversion", "purchase", events), additionalParams); } function convertedFilters() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("conversion", events), additionalParams); } var SUPPORTED_REGIONS = ["de", "us"]; /** * Binds credentials and settings to class. * * @param options - InitParams. */ function init(options) { if ( options === void 0 ) options = {}; var _a, _b; if (!isUndefined(options.region) && SUPPORTED_REGIONS.indexOf(options.region) === -1) { throw new Error(("optional region is incorrect, please provide either one of: " + (SUPPORTED_REGIONS.join(", ")) + ".")); } if (!isUndefined(options.cookieDuration) && (!isNumber(options.cookieDuration) || !isFinite(options.cookieDuration) || Math.floor(options.cookieDuration) !== options.cookieDuration)) { throw new Error("optional cookieDuration is incorrect, expected an integer."); } /* eslint-enable */ setOptions(this, options, { _userHasOptedOut: Boolean(options.userHasOptedOut), _region: options.region, _host: options.host, _anonymousUserToken: (_a = options.anonymousUserToken) !== null && _a !== void 0 ? _a : true, _useCookie: (_b = options.useCookie) !== null && _b !== void 0 ? _b : false, _cookieDuration: options.cookieDuration || 6 * MONTH }); this._endpointOrigin = this._host || (this._region ? ("https://insights." + (this._region) + ".algolia.io") : "https://insights.algolia.io"); // user agent this._ua = [].concat( DEFAULT_ALGOLIA_AGENTS ); if (options.authenticatedUserToken) { this.setAuthenticatedUserToken(options.authenticatedUserToken); } if (options.userToken) { this.setUserToken(options.userToken); } else if (!this._userToken && !this._userHasOptedOut && this._useCookie) { this.setAnonymousUserToken(); } else if (checkIfTokenNeedsToBeSaved(this)) { this.saveTokenAsCookie(); } } function setOptions(target, _a, defaultValues) { var partial = _a.partial; var options = __rest(_a, ["partial"]); if (!partial) { Object.assign(target, defaultValues); } Object.assign(target, Object.keys(options).reduce(function (acc, key) { var obj; return (Object.assign(Object.assign({}, acc), ( obj = {}, obj[("_" + key)] = options[key], obj ))); }, {})); } function checkIfTokenNeedsToBeSaved(target) { if (target._userToken === undefined) { return false; } return (checkIfAnonymousToken(target._userToken) && target._useCookie && !target._userHasOptedOut); } function viewedObjectIDs() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("view", events), additionalParams); } function viewedFilters() { var params = [], len = arguments.length; while ( len-- ) params[ len ] = arguments[ len ]; var ref = extractAdditionalParams(params); var events = ref.events; var additionalParams = ref.additionalParams; return this.sendEvents(addEventType("view", events), additionalParams); } /** * AlgoliaAnalytics class. */ var AlgoliaAnalytics = function AlgoliaAnalytics(ref) { var requestFn = ref.requestFn; this._endpointOrigin = "https://insights.algolia.io"; this._anonymousUserToken = true; this._userHasOptedOut = false; this._useCookie = false; this._cookieDuration = 6 * MONTH; // user agent this._ua = []; this.version = version; this.sendEvents = makeSendEvents(requestFn).bind(this); this.init = init.bind(this); this.addAlgoliaAgent = addAlgoliaAgent.bind(this); this.saveTokenAsCookie = saveTokenAsCookie.bind(this); this.setUserToken = setUserToken.bind(this); this.setAnonymousUserToken = setAnonymousUserToken.bind(this); this.getUserToken = getUserToken.bind(this); this.onUserTokenChange = onUserTokenChange.bind(this); this.setAuthenticatedUserToken = setAuthenticatedUserToken.bind(this); this.getAuthenticatedUserToken = getAuthenticatedUserToken.bind(this); this.onAuthenticatedUserTokenChange = onAuthenticatedUserTokenChange.bind(this); this.clickedObjectIDsAfterSearch = clickedObjectIDsAfterSearch.bind(this); this.clickedObjectIDs = clickedObjectIDs.bind(this); this.clickedFilters = clickedFilters.bind(this); this.convertedObjectIDsAfterSearch = convertedObjectIDsAfterSearch.bind(this); this.purchasedObjectIDsAfterSearch = purchasedObjectIDsAfterSearch.bind(this); this.addedToCartObjectIDsAfterSearch = addedToCartObjectIDsAfterSearch.bind(this); this.convertedObjectIDs = convertedObjectIDs.bind(this); this.addedToCartObjectIDs = addedToCartObjectIDs.bind(this); this.purchasedObjectIDs = purchasedObjectIDs.bind(this); this.convertedFilters = convertedFilters.bind(this); this.viewedObjectIDs = viewedObjectIDs.bind(this); this.viewedFilters = viewedFilters.bind(this); this.getVersion = getVersion.bind(this); }; function createInsightsClient(requestFn) { var aa = getFunctionalInterface(new AlgoliaAnalytics({ requestFn: requestFn })); if (typeof window === "object") { if (!window.AlgoliaAnalyticsObject) { var pointer; do { pointer = createUUID(); } while (window[pointer] !== undefined); window.AlgoliaAnalyticsObject = pointer; window[window.AlgoliaAnalyticsObject] = aa; } } aa.version = version; return aa; } /** * Processes queue that might have been set before * the script was actually loaded and reassigns * class over globalObject variable to execute commands * instead of putting them to the queue. */ function processQueue(globalObject) { // Set pointer which allows renaming of the script var pointer = globalObject.AlgoliaAnalyticsObject; if (pointer) { var _aa = getFunctionalInterface(this); // `aa` is the user facing function, which is defined in the install snippet. // - before library is initialized `aa` fills a queue // - after library is initialized `aa` calls `_aa` var aa = globalObject[pointer]; aa.queue = aa.queue || []; var queue = aa.queue; // Loop queue and execute functions in the queue queue.forEach(function (args) { var ref = [].slice.call(args); var functionName = ref[0]; var functionArguments = ref.slice(1); _aa.apply(void 0, [ functionName ].concat( functionArguments )); }); /* eslint-disable no-warning-comments */ // FIXME: Reassigning the pointer is a bad idea (cf: https://github.com/algolia/search-insights.js/issues/127) // to remove this without any breaking change, we redefine the Array.prototype.push method on the queue array. // for next major version, use a custom method instead of push. /* eslint-enable */ // @ts-expect-error (otherwise typescript won't let you change the signature) queue.push = function (args) { var ref = [].slice.call(args); var functionName = ref[0]; var functionArguments = ref.slice(1); _aa.apply(void 0, [ functionName ].concat( functionArguments )); }; } } var requestWithNodeHttpModule = function (url, data) { return new Promise(function (resolve, reject) { var serializedData = JSON.stringify(data); /* eslint-disable @typescript-eslint/no-var-requires */ var ref = require("url").parse(url); var protocol = ref.protocol; var host = ref.host; var path = ref.path; /* eslint-enable */ var options = { protocol: protocol, host: host, path: path, method: "POST", headers: { "Content-Type": "application/json", "Content-Length": serializedData.length } }; var ref$1 = url.startsWith("https://") ? require("https") : require("http"); var request = ref$1.request; var req = request(options, function (ref) { var statusCode = ref.statusCode; if (statusCode === 200) { resolve(true); } else { resolve(false); } }); req.on("error", function (error) { /* eslint-disable no-console */ console.error(error); /* eslint-enable */ reject(error); }); req.on("timeout", function () { return resolve(false); }); req.write(serializedData); req.end(); }); }; var requestWithNativeFetch = function (url, data) { return new Promise(function (resolve, reject) { fetch(url, { method: "POST", body: JSON.stringify(data), headers: { "Content-Type": "application/json" } }) .then(function (response) { resolve(response.status === 200); }) .catch(function (e) { reject(e); }); }); }; function getRequesterForNode() { if (supportsNodeHttpModule()) { return requestWithNodeHttpModule; } if (supportsNativeFetch()) { return requestWithNativeFetch; } throw new Error("Could not find a supported HTTP request client in this environment."); } var entryNode = createInsightsClient(getRequesterForNode()); export { AlgoliaAnalytics, LocalStorage, createInsightsClient, entryNode as default, getFunctionalInterface, getRequesterForNode, processQueue };