{"version":3,"file":"js/global-111024c69976e6a8c9ae.js","mappings":"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","sources":["webpack://StravaModern/./app/javascript/globalLibraries.js","webpack://StravaModern/./app/javascript/utils/devUtils.js","webpack://StravaModern/./app/javascript/utils/public-service-env.js","webpack://StravaModern/./app/javascript/utils/sentry.helper.js","webpack://StravaModern/./app/javascript/utils/sentry.js"],"sourcesContent":["// This file is deprecated and only used to move node_modules accessed in the\n// sprockets asset pipeline to webpack entry points\n// adding random string to force recompile:\n// A998D3152224818D225A880A9B627F1FB4484DD7E408EACA1B243326ED4AA01B\n\n// importing jquery using script-loader to mimic adding jQuery via a script tag\n/* eslint-disable no-unused-vars,import/extensions */\nimport 'jquery/dist/jquery.min.js';\nimport 'leaflet/dist/leaflet.js';\nimport 'dexie/dist/dexie.min.js';\nimport 'intersection-observer/intersection-observer.js';\nimport '@strava/clio/dist/strava_analytics.min.js';\nimport '@strava/autotrack/autotrack.js';\nimport 'dropzone/dist/dropzone.js';\nimport 'blueimp-load-image/js/load-image.all.min.js';\nimport 'dropzone/dist/min/dropzone.min.css';\n\nimport { setPublicServiceEnv } from './utils/public-service-env';\nimport { devLog } from './utils/devUtils';\n\n// Expose method on global scope that sets public keys that are commonly passed\n// to 3rd party libs or tooling.\nif (window.stravaPublicServiceEnv === undefined) {\n window.stravaPublicServiceEnv = setPublicServiceEnv;\n}\n\ndevLog('loading global libraries');\n","/**\n * dev utils to make local development easier (dynamically-imported mock data,\n * dev-only console logs, etc.)\n */\n\nexport const isDev = () => {\n return process.env.NODE_ENV === 'development';\n};\n\nexport const isTest = () => process.env.NODE_ENV === 'test';\n\nexport const devLog = (string) => {\n if (isDev() || window?.StravaDevTools?.enabled) {\n // eslint-disable-next-line no-console\n console.log(string);\n }\n};\n\nexport const timeout = (ms) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport default { isDev, devLog, timeout };\n","// Object containing no secret key value pairs that are expected to be seen and\n// used in the browser. This keys are commonly passed to 3rd party libs or tooling.\n//\n// Data that gets set to this object is set in the following file:\n// app/views/common/_react_public_service_env.haml\n//\n// Do not set values directly into this object here as that is not intended use\nconst publicServiceEnv = {};\n\n/**\n * Sets data to an object and freezes it on the initial call.\n * @param {Object} envData Object containing key value pairs that are not nested objects\n */\nfunction setPublicServiceEnv(envData) {\n // Only update the object if it's empty as we do not want to allow any updated\n // after the initial call to this method\n if (Object.keys(publicServiceEnv).length === 0) {\n const keys = Object.keys(envData);\n\n if (keys.length > 0) {\n keys.forEach((value) => {\n publicServiceEnv[value] = envData[value];\n });\n\n // Freeze object so that it can not be updated or changed\n Object.freeze(publicServiceEnv);\n }\n }\n}\n\nexport { publicServiceEnv, setPublicServiceEnv };\n","const BROWSER_EXTENSION = '-extension://';\nconst ANONYMOUS = '';\n\n// see https://github.com/thomaschampagne/elevate/blob/fc5772a12327c0d5015fb0fec64aba1cec6756c7/webextension/scripts/processors/activities-synchronize.ts\nconst ELEVATE_APP_CONSOLE_LOGS = [\n 'Fast sync mode enabled',\n 'A previous sync exists on',\n 'local and remote activities count matches',\n 'Mismatch found between local and remote activities. Syncing first page only.',\n 'Activities fetched in group',\n ', raw activities length: ',\n 'PagesRidden] Resolving with ',\n 'clearSyncCache requested',\n 'Group handled count: ',\n 'Updating synced activities to extension local storage.',\n 'Activities fetched in group'\n];\n\nexport const hasExtensionReferenceInHintErrorStack = (hint) =>\n hint?.originalException?.stack?.includes(BROWSER_EXTENSION);\n\nexport const hasExtensionReferenceInBreadCrumbs = (event) =>\n !!event?.breadcrumbs?.find((entry) => {\n return (\n entry.data?.url?.includes(BROWSER_EXTENSION) ||\n ELEVATE_APP_CONSOLE_LOGS.includes(entry.message)\n );\n });\n\nexport const hasExtensionReferenceInEventErrorStack = (event) => {\n return !!event?.exception?.values?.find((entry) => {\n return !!entry.stacktrace?.frames?.find(\n (frame) =>\n frame?.filename?.includes(BROWSER_EXTENSION) ||\n frame?.abs_path?.includes(BROWSER_EXTENSION) ||\n frame?.filename?.includes(ANONYMOUS) ||\n frame?.abs_path?.includes(ANONYMOUS)\n );\n });\n};\n\nexport default {\n hasExtensionReferenceInHintErrorStack,\n hasExtensionReferenceInBreadCrumbs,\n hasExtensionReferenceInEventErrorStack\n};\n","import * as Sentry from '@sentry/browser';\nimport { BrowserTracing } from '@sentry/tracing';\nimport { isDev } from './devUtils';\nimport {\n hasExtensionReferenceInBreadCrumbs,\n hasExtensionReferenceInHintErrorStack,\n hasExtensionReferenceInEventErrorStack\n} from './sentry.helper';\n\n// List of pages that have the same pathname but different variants controlled with\n// search params. Pages added to this list will have the search param added to the name\n// during tracing (performance tracking)\nconst PAGES_WITH_VARIANTS = ['/onboarding/continue', '/'];\n\nif (!window.StravaSentryDsn) {\n window.StravaSentryDsn = {};\n}\nif (!window.StravaSentryDsn.deferred) {\n window.StravaSentryDsn.deferred = {};\n const promise = new Promise(\n function _(resolve, reject) {\n this.doResolve = resolve;\n this.doReject = reject;\n }.bind(window.StravaSentryDsn.deferred)\n );\n window.StravaSentryDsn.deferred.then = promise.then.bind(promise);\n}\n\nconst { enabled, environment, release, userId, dsn, sampleRate, debug } =\n window.StravaSentry || {};\n\nwindow.StravaSentryDsn.deferred.doResolve(dsn);\n\nwindow.StravaSentryDsn.deferred.then((_dsn) => {\n // configure sentry_frontend.yml to enable sentry on local\n if (enabled) {\n Sentry.init({\n dsn: _dsn,\n maxBreadcrumbs: 50,\n integrations: [\n new BrowserTracing({\n tracingOrigins: [\n 'https://www.staging.strava.com',\n 'https://www.strava.com',\n 'localhost',\n /^\\//\n ],\n beforeNavigate: (context) => {\n const { pathname, search } = window.location;\n const includeSearchParam = PAGES_WITH_VARIANTS.includes(pathname);\n return {\n ...context,\n name: includeSearchParam ? pathname.concat(search) : pathname\n };\n }\n })\n ],\n denyUrls: [\n // Chrome extensions\n /extensions\\//i,\n /^chrome:\\/\\//i\n ],\n tracesSampleRate: sampleRate,\n debug,\n attachStacktrace: true,\n release,\n initialScope: {\n user: { id: userId }\n },\n environment,\n beforeSend: (event, hint) => {\n if (\n hasExtensionReferenceInHintErrorStack(hint) ||\n hasExtensionReferenceInBreadCrumbs(event) ||\n hasExtensionReferenceInEventErrorStack(event) ||\n hint?.originalException === 'Timeout' // google-recaptcha flakiness\n ) {\n return null;\n }\n return event;\n }\n });\n }\n});\n\nexport const logError = (err) => {\n if (isDev()) {\n // eslint-disable-next-line no-console\n console.error('logError :::', err);\n return;\n }\n Sentry.captureException(err);\n};\n\nexport const logMessage = (message) => {\n if (isDev()) {\n // eslint-disable-next-line no-console\n console.log('logMessage :::', message);\n return;\n }\n Sentry.captureMessage(message);\n};\n\nexport default { logError, logMessage };\n"],"names":["undefined","window","stravaPublicServiceEnv","setPublicServiceEnv","devLog","isDev","process","string","StravaDevTools","enabled","console","log","timeout","ms","Promise","resolve","setTimeout","publicServiceEnv","envData","Object","keys","length","forEach","value","freeze","BROWSER_EXTENSION","ANONYMOUS","ELEVATE_APP_CONSOLE_LOGS","hasExtensionReferenceInHintErrorStack","hint","originalException","stack","includes","hasExtensionReferenceInBreadCrumbs","event","breadcrumbs","find","entry","data","url","message","hasExtensionReferenceInEventErrorStack","exception","values","stacktrace","frames","frame","filename","abs_path","PAGES_WITH_VARIANTS","StravaSentryDsn","deferred","promise","reject","this","doResolve","doReject","bind","then","StravaSentry","environment","release","userId","dsn","sampleRate","debug","_dsn","Sentry","maxBreadcrumbs","integrations","BrowserTracing","tracingOrigins","beforeNavigate","context","location","pathname","search","includeSearchParam","name","concat","denyUrls","tracesSampleRate","attachStacktrace","initialScope","user","id","beforeSend","logError","err","error","logMessage"],"sourceRoot":""}