import 'isomorphic-fetch' import { Event, TracktorConfig } from './interfaces' import rfc3339 from './rfc3339' /** * The list of Google bots: https://support.google.com/webmasters/answer/1061943?hl=en * * @param {String} userAgent * @return {Date} */ export const isCrawler = (userAgent = ''): boolean => { const crawlerList = [ 'bingbot', 'slurp', 'msnbot', 'java', 'xget', 'wget', 'curl', 'spider', 'googlebot', 'googlebot-mobile', 'apis-google', 'mediapartners-google', 'adsbot-google-mobile', 'adsbot-google', 'googlebot-image', 'googlebot-news', 'googlebot-video', 'adsbot-google-mobile-apps', ] return crawlerList.some(crawlerName => userAgent.toLowerCase().includes(crawlerName)) } /** * @param {Number} months months to extend the date * @return {Date} */ export const addMonthToDate = (months: number): Date => { const newDate = new Date() newDate.setMonth(newDate.getMonth() + Number(months)) return new Date(newDate) } /** * Format the object into a Tracktor event * @param {String} name Event name * @param {Number} version Event version * @param {Object} payload Event payload */ export const getEventObject = (name: string, version: number, payload: object): Event => ({ name, version, payload, created_at_client_local: rfc3339(), }) export const tracktorConfig: Partial = { emit_frequency: 2000, event_max_count: 20, event_max_size: 2500, request_max_size: 10000, retries_frequency: 6500, retries_max: 5, onSendFailure: () => {}, } export const httpRequest = (url, opts): Promise<{ ok: boolean }> => { if (navigator.sendBeacon !== undefined) { navigator.sendBeacon(url, opts.body) return Promise.resolve({ ok: true }) } else { return fetch(url, opts) } }