@junobuild/analytics 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/services/analytics.services.ts", "../../../../node_modules/nanoid/url-alphabet/index.js", "../../../../node_modules/nanoid/index.browser.js", "../../src/utils/analytics.utils.ts", "../../src/utils/date.utils.ts", "../../src/utils/log.utils.ts", "../../src/services/performance.services.ts", "../../src/utils/window.env.utils.ts"],
4
- "sourcesContent": ["import {assertNonNullish} from '@dfinity/utils';\nimport {\n initTrackPageViews,\n initTrackPerformance,\n initWorker,\n setPageView,\n startTracking,\n stopTracking\n} from './services/analytics.services';\nimport type {Environment, UserEnvironment} from './types/env';\nimport {envContainer, envOrbiterId, envSatelliteId} from './utils/window.env.utils';\n\nexport {trackEvent, trackPageView} from './services/analytics.services';\nexport type * from './types/env';\n\nconst parseEnv = (userEnv?: UserEnvironment): Environment => {\n const satelliteId = userEnv?.satelliteId ?? envSatelliteId();\n\n assertNonNullish(\n satelliteId,\n 'Satellite ID is not configured. Orbiter cannot be initialized without a target Satellite.'\n );\n\n const orbiterId = userEnv?.orbiterId ?? envOrbiterId();\n\n assertNonNullish(\n orbiterId,\n 'Orbiter ID is not configured. The analytics cannot be initialized without an Orbiter.'\n );\n\n const container = userEnv?.container ?? envContainer();\n\n return {\n orbiterId,\n satelliteId,\n container,\n worker: userEnv?.worker,\n options: userEnv?.options\n };\n};\n\n/**\n * Initializes the Juno Analytics.\n * @param {UserEnvironment} [userEnv] - The optional user environment configuration. If no environment is provided, the variables injected by the Vite or NextJS plugins will be used.\n * @returns {Promise<() => void>} A promise that resolves to a cleanup function that stops tracking and cleans up resources.\n */\nexport const initOrbiter = async (userEnv?: UserEnvironment): Promise<() => void> => {\n // Save first page as soon as possible\n await setPageView();\n\n const env = parseEnv(userEnv);\n\n const {cleanup: workerCleanup} = initWorker(env);\n\n const {cleanup: pushHistoryCleanup} = initTrackPageViews();\n\n await initTrackPerformance(env);\n\n // Starting tracking will instantly sync the first page and the data from previous sessions that have not been synced yet\n startTracking();\n\n return () => {\n stopTracking();\n workerCleanup();\n pushHistoryCleanup();\n };\n};\n", "import {assertNonNullish, nonNullish, toNullable} from '@dfinity/utils';\nimport {isBrowser} from '@junobuild/utils';\nimport {nanoid} from 'nanoid';\nimport type {Environment, EnvironmentWorker} from '../types/env';\nimport type {IdbPageView} from '../types/idb';\nimport type {PostMessageInitEnvData} from '../types/post-message';\nimport type {TrackEvent} from '../types/track';\nimport {timestamp, userAgent} from '../utils/analytics.utils';\nimport {warningWorkerNotInitialized} from '../utils/log.utils';\nimport {startPerformance} from './performance.services';\n\nconst initSessionId = (): string | undefined => {\n // I faced this issue when I used the library in Docusaurus which does not implement the crypto API when server-side rendering.\n // https://github.com/ai/nanoid/issues?q=crypto+not+defined\n if (typeof crypto === 'undefined') {\n return undefined;\n }\n\n return nanoid();\n};\n\nconst sessionId = initSessionId();\n\nlet worker: Worker | undefined;\n\nexport const initWorker = (env: Environment): {cleanup: () => void} => {\n const {path}: EnvironmentWorker = env.worker ?? {};\n const workerUrl = path ?? './workers/analytics.worker.js';\n\n worker = new Worker(workerUrl);\n\n const consoleWarn = () =>\n console.warn('Unable to connect to the analytics web worker. Have you deployed it?');\n\n worker?.addEventListener('error', consoleWarn, false);\n\n initWorkerEnvironment(env);\n\n return {\n cleanup() {\n worker?.removeEventListener('error', consoleWarn, false);\n }\n };\n};\n\nexport const initTrackPageViews = (): {cleanup: () => void} => {\n const trackPages = async () => await trackPageView();\n\n let pushStateProxy: typeof history.pushState | null = new Proxy(history.pushState, {\n // eslint-disable-next-line local-rules/prefer-object-params\n apply: async (\n target,\n thisArg,\n argArray: [data: unknown, unused: string, url?: string | URL | null | undefined]\n ) => {\n target.apply(thisArg, argArray);\n await trackPages();\n }\n });\n\n history.pushState = pushStateProxy;\n\n addEventListener('popstate', trackPages, {passive: true});\n\n return {\n cleanup() {\n pushStateProxy = null;\n removeEventListener('popstate', trackPages, false);\n }\n };\n};\n\nconst SESSION_ID_UNDEFINED_MSG = 'No session ID initialized.';\n\nexport const setPageView = async () => {\n if (!isBrowser()) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n\n const {\n title,\n location: {href},\n referrer\n } = document;\n const {innerWidth, innerHeight} = window;\n const {timeZone} = Intl.DateTimeFormat().resolvedOptions();\n\n const data: IdbPageView = {\n title,\n href,\n referrer: toNullable(nonNullish(referrer) && referrer !== '' ? referrer : undefined),\n device: {\n inner_width: innerWidth,\n inner_height: innerHeight\n },\n time_zone: timeZone,\n session_id: sessionId,\n ...userAgent(),\n ...timestamp()\n };\n\n const idb = await import('./idb.services');\n await idb.setPageView({\n key: nanoid(),\n view: data\n });\n};\n\nexport const initTrackPerformance = async ({options}: Environment) => {\n if (!isBrowser()) {\n return;\n }\n\n if (options?.performance === false) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n\n await startPerformance(sessionId);\n};\n\n/**\n * Tracks a page view in Juno Analytics.\n * @returns {Promise<void>} A promise that resolves when the page view is tracked.\n */\nexport const trackPageView = async (): Promise<void> => {\n warningWorkerNotInitialized(worker);\n\n await setPageView();\n\n worker?.postMessage({msg: 'junoTrackPageView'});\n};\n\n/**\n * Tracks a custom event in Juno Analytics.\n * @param {TrackEvent} data - The event details.\n * @returns {Promise<void>} A promise that resolves when the event is tracked.\n */\nexport const trackEvent = async (data: TrackEvent): Promise<void> => {\n if (!isBrowser()) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n warningWorkerNotInitialized(worker);\n\n const idb = await import('./idb.services');\n await idb.setTrackEvent({\n key: nanoid(),\n track: {...data, session_id: sessionId, ...userAgent(), ...timestamp()}\n });\n\n worker?.postMessage({msg: 'junoTrackEvent'});\n};\n\nexport const initWorkerEnvironment = (env: PostMessageInitEnvData) => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoInitEnvironment', data: env});\n};\n\nexport const startTracking = () => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoStartTrackTimer'});\n};\n\nexport const stopTracking = () => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoStopTracker'});\n};\n", "export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n", "import {toNullable} from '@dfinity/utils';\nimport {nowInBigIntNanoSeconds} from './date.utils';\n\nexport const timestamp = (): {\n collected_at: bigint;\n updated_at: [] | [bigint];\n version: [] | [bigint];\n} => ({\n collected_at: nowInBigIntNanoSeconds(),\n updated_at: [],\n version: []\n});\n\nexport const userAgent = (): {user_agent: [] | [string]} => {\n const {userAgent} = navigator;\n return {user_agent: toNullable(userAgent)};\n};\n", "export const nowInBigIntNanoSeconds = (): bigint => BigInt(Date.now()) * BigInt(1e6);\n", "import {isNullish} from '@dfinity/utils';\n\nconst WORKER_UNDEFINED_MSG = 'Analytics worker not initialized. Did you call `initOrbiter`?';\n\nexport const warningWorkerNotInitialized = <T>(value: T) => {\n if (isNullish(value)) {\n console.warn(WORKER_UNDEFINED_MSG);\n }\n};\n", "import {toNullable} from '@dfinity/utils';\nimport {nanoid} from 'nanoid';\nimport type {Metric} from 'web-vitals';\nimport type {\n NavigationType,\n PerformanceMetricName,\n WebVitalsMetric\n} from '../../declarations/orbiter/orbiter.did';\nimport type {IdbPerformanceMetric} from '../types/idb';\nimport {timestamp, userAgent} from '../utils/analytics.utils';\n\ntype SessionMetric = Omit<Metric, 'navigationType'> &\n Partial<Pick<Metric, 'navigationType'>> & {sessionId: string};\n\nexport const startPerformance = async (sessionId: string) => {\n const {onCLS, onFCP, onINP, onLCP, onTTFB} = await import('web-vitals');\n\n const setMetric = (metric: Metric) => {\n (async () => {\n await setPerformanceMetric({...metric, sessionId});\n })();\n };\n\n onCLS(setMetric);\n onFCP(setMetric);\n onINP(setMetric);\n onLCP(setMetric);\n onTTFB(setMetric);\n};\n\nconst setPerformanceMetric = async (metric: SessionMetric) => {\n const data = mapPerformanceMetric(metric);\n\n if (data === 'unknown') {\n console.warn('Performance metric ignored. Unknown metric name.', metric);\n return;\n }\n\n if (data === 'deprecated') {\n return;\n }\n\n const idb = await import('./idb.services');\n await idb.setPerformanceMetric({\n key: nanoid(),\n view: data\n });\n};\n\nconst mapPerformanceMetric = ({\n sessionId,\n name: metricName,\n value,\n delta,\n id,\n navigationType\n}: SessionMetric): IdbPerformanceMetric | 'deprecated' | 'unknown' => {\n const mapMetricName = (): PerformanceMetricName | 'deprecated' | 'unknown' => {\n switch (metricName) {\n case 'CLS':\n return {CLS: null};\n case 'FCP':\n return {FCP: null};\n case 'INP':\n return {INP: null};\n case 'LCP':\n return {LCP: null};\n case 'TTFB':\n return {TTFB: null};\n case 'FID':\n return 'deprecated';\n default:\n return 'unknown';\n }\n };\n\n const metric_name = mapMetricName();\n\n if (metric_name === 'unknown' || metric_name === 'deprecated') {\n return metric_name;\n }\n\n const mapNavigationType = (): NavigationType | undefined => {\n switch (navigationType) {\n case 'navigate':\n return {Navigate: null};\n case 'restore':\n return {Restore: null};\n case 'reload':\n return {Reload: null};\n case 'back-forward':\n return {BackForward: null};\n case 'back-forward-cache':\n return {BackForwardCache: null};\n case 'prerender':\n return {Prerender: null};\n default:\n return undefined;\n }\n };\n\n const data: WebVitalsMetric = {\n value,\n delta,\n id,\n navigation_type: toNullable(mapNavigationType())\n };\n\n const {\n location: {href}\n } = document;\n\n const {updated_at: _, ...timestampRest} = timestamp();\n\n const metric: IdbPerformanceMetric = {\n href,\n metric_name,\n session_id: sessionId,\n data: {\n WebVitalsMetric: data\n },\n ...userAgent(),\n ...timestampRest\n };\n\n return metric;\n};\n", "// TODO: duplicated because those should not be bundled in web worker. We can avoid this by transforming utils into a library of modules.\ninterface ImportMeta {\n env: Record<string, string> | undefined;\n}\n\nexport const envSatelliteId = (): string | undefined => {\n const viteEnvSatelliteId = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_SATELLITE_ID ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_SATELLITE_ID)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_SATELLITE_ID ?? viteEnvSatelliteId())\n : viteEnvSatelliteId();\n};\n\nexport const envOrbiterId = (): string | undefined => {\n const viteEnvOrbiterId = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_ORBITER_ID ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_ORBITER_ID)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_ORBITER_ID ?? viteEnvOrbiterId())\n : viteEnvOrbiterId();\n};\n\nexport const envContainer = (): string | undefined => {\n const viteEnvContainer = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_CONTAINER ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_CONTAINER)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_CONTAINER ?? viteEnvContainer())\n : viteEnvContainer();\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {assertNonNullish} from '@dfinity/utils';\nimport {\n initTrackPageViews,\n initTrackPerformance,\n initWorker,\n setPageView,\n startTracking,\n stopTracking\n} from './services/analytics.services';\nimport type {Environment, UserEnvironment} from './types/env';\nimport {envContainer, envOrbiterId, envSatelliteId} from './utils/window.env.utils';\n\nexport {trackEvent, trackPageView} from './services/analytics.services';\nexport type * from './types/env';\n\nconst parseEnv = (userEnv?: UserEnvironment): Environment => {\n const satelliteId = userEnv?.satelliteId ?? envSatelliteId();\n\n assertNonNullish(\n satelliteId,\n 'Satellite ID is not configured. Orbiter cannot be initialized without a target Satellite.'\n );\n\n const orbiterId = userEnv?.orbiterId ?? envOrbiterId();\n\n assertNonNullish(\n orbiterId,\n 'Orbiter ID is not configured. The analytics cannot be initialized without an Orbiter.'\n );\n\n const container = userEnv?.container ?? envContainer();\n\n return {\n orbiterId,\n satelliteId,\n container,\n worker: userEnv?.worker,\n options: userEnv?.options\n };\n};\n\n/**\n * Initializes the Juno Analytics.\n * @param {UserEnvironment} [userEnv] - The optional user environment configuration. If no environment is provided, the variables injected by the Vite or NextJS plugins will be used.\n * @returns {Promise<() => void>} A promise that resolves to a cleanup function that stops tracking and cleans up resources.\n */\nexport const initOrbiter = async (userEnv?: UserEnvironment): Promise<() => void> => {\n // Save first page as soon as possible\n await setPageView();\n\n const env = parseEnv(userEnv);\n\n const {cleanup: workerCleanup} = initWorker(env);\n\n const {cleanup: pushHistoryCleanup} = initTrackPageViews();\n\n await initTrackPerformance(env);\n\n // Starting tracking will instantly sync the first page and the data from previous sessions that have not been synced yet\n startTracking();\n\n return () => {\n stopTracking();\n workerCleanup();\n pushHistoryCleanup();\n };\n};\n", "import {assertNonNullish, nonNullish, toNullable} from '@dfinity/utils';\nimport {isBrowser} from '@junobuild/utils';\nimport {nanoid} from 'nanoid';\nimport type {Environment, EnvironmentWorker} from '../types/env';\nimport type {IdbPageView} from '../types/idb';\nimport type {PostMessageInitEnvData} from '../types/post-message';\nimport type {TrackEvent} from '../types/track';\nimport {timestamp, userAgent} from '../utils/analytics.utils';\nimport {warningWorkerNotInitialized} from '../utils/log.utils';\nimport {startPerformance} from './performance.services';\n\nconst initSessionId = (): string | undefined => {\n // I faced this issue when I used the library in Docusaurus which does not implement the crypto API when server-side rendering.\n // https://github.com/ai/nanoid/issues?q=crypto+not+defined\n if (typeof crypto === 'undefined') {\n return undefined;\n }\n\n return nanoid();\n};\n\nconst sessionId = initSessionId();\n\nlet worker: Worker | undefined;\n\nexport const initWorker = (env: Environment): {cleanup: () => void} => {\n const {path}: EnvironmentWorker = env.worker ?? {};\n const workerUrl = path ?? './workers/analytics.worker.js';\n\n worker = new Worker(workerUrl);\n\n const consoleWarn = () =>\n console.warn('Unable to connect to the analytics web worker. Have you deployed it?');\n\n worker?.addEventListener('error', consoleWarn, false);\n\n initWorkerEnvironment(env);\n\n return {\n cleanup() {\n worker?.removeEventListener('error', consoleWarn, false);\n }\n };\n};\n\nexport const initTrackPageViews = (): {cleanup: () => void} => {\n const trackPages = async () => await trackPageView();\n\n let pushStateProxy: typeof history.pushState | null = new Proxy(history.pushState, {\n // eslint-disable-next-line local-rules/prefer-object-params\n apply: async (\n target,\n thisArg,\n argArray: [data: unknown, unused: string, url?: string | URL | null | undefined]\n ) => {\n target.apply(thisArg, argArray);\n await trackPages();\n }\n });\n\n history.pushState = pushStateProxy;\n\n addEventListener('popstate', trackPages, {passive: true});\n\n return {\n cleanup() {\n pushStateProxy = null;\n removeEventListener('popstate', trackPages, false);\n }\n };\n};\n\nconst SESSION_ID_UNDEFINED_MSG = 'No session ID initialized.';\n\nexport const setPageView = async () => {\n if (!isBrowser()) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n\n const {\n title,\n location: {href},\n referrer\n } = document;\n const {innerWidth, innerHeight} = window;\n const {timeZone} = Intl.DateTimeFormat().resolvedOptions();\n\n const data: IdbPageView = {\n title,\n href,\n referrer: toNullable(nonNullish(referrer) && referrer !== '' ? referrer : undefined),\n device: {\n inner_width: innerWidth,\n inner_height: innerHeight\n },\n time_zone: timeZone,\n session_id: sessionId,\n ...userAgent(),\n ...timestamp()\n };\n\n const idb = await import('./idb.services');\n await idb.setPageView({\n key: nanoid(),\n view: data\n });\n};\n\nexport const initTrackPerformance = async ({options}: Environment) => {\n if (!isBrowser()) {\n return;\n }\n\n if (options?.performance === false) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n\n await startPerformance(sessionId);\n};\n\n/**\n * Tracks a page view in Juno Analytics.\n * @returns {Promise<void>} A promise that resolves when the page view is tracked.\n */\nexport const trackPageView = async (): Promise<void> => {\n warningWorkerNotInitialized(worker);\n\n await setPageView();\n\n worker?.postMessage({msg: 'junoTrackPageView'});\n};\n\n/**\n * Tracks a custom event in Juno Analytics.\n * @param {TrackEvent} data - The event details.\n * @returns {Promise<void>} A promise that resolves when the event is tracked.\n */\nexport const trackEvent = async (data: TrackEvent): Promise<void> => {\n if (!isBrowser()) {\n return;\n }\n\n assertNonNullish(sessionId, SESSION_ID_UNDEFINED_MSG);\n warningWorkerNotInitialized(worker);\n\n const idb = await import('./idb.services');\n await idb.setTrackEvent({\n key: nanoid(),\n track: {...data, session_id: sessionId, ...userAgent(), ...timestamp()}\n });\n\n worker?.postMessage({msg: 'junoTrackEvent'});\n};\n\nexport const initWorkerEnvironment = (env: PostMessageInitEnvData) => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoInitEnvironment', data: env});\n};\n\nexport const startTracking = () => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoStartTrackTimer'});\n};\n\nexport const stopTracking = () => {\n warningWorkerNotInitialized(worker);\n\n worker?.postMessage({msg: 'junoStopTracker'});\n};\n", "export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n", "import {toNullable} from '@dfinity/utils';\nimport {nowInBigIntNanoSeconds} from './date.utils';\n\nexport const timestamp = (): {\n collected_at: bigint;\n updated_at: [] | [bigint];\n version: [] | [bigint];\n} => ({\n collected_at: nowInBigIntNanoSeconds(),\n updated_at: [],\n version: []\n});\n\nexport const userAgent = (): {user_agent: [] | [string]} => {\n const {userAgent} = navigator;\n return {user_agent: toNullable(userAgent)};\n};\n", "export const nowInBigIntNanoSeconds = (): bigint => BigInt(Date.now()) * BigInt(1e6);\n", "import {isNullish} from '@dfinity/utils';\n\nconst WORKER_UNDEFINED_MSG = 'Analytics worker not initialized. Did you call `initOrbiter`?';\n\nexport const warningWorkerNotInitialized = <T>(value: T) => {\n if (isNullish(value)) {\n console.warn(WORKER_UNDEFINED_MSG);\n }\n};\n", "import {toNullable} from '@dfinity/utils';\nimport {nanoid} from 'nanoid';\nimport type {Metric} from 'web-vitals';\nimport type {\n NavigationType,\n PerformanceMetricName,\n WebVitalsMetric\n} from '../../declarations/orbiter/orbiter.did';\nimport type {IdbPerformanceMetric} from '../types/idb';\nimport {timestamp, userAgent} from '../utils/analytics.utils';\n\ntype SessionMetric = Omit<Metric, 'navigationType'> &\n Partial<Pick<Metric, 'navigationType'>> & {sessionId: string};\n\nexport const startPerformance = async (sessionId: string) => {\n const {onCLS, onFCP, onINP, onLCP, onTTFB} = await import('web-vitals');\n\n const setMetric = (metric: Metric) => {\n (async () => {\n await setPerformanceMetric({...metric, sessionId});\n })();\n };\n\n onCLS(setMetric);\n onFCP(setMetric);\n onINP(setMetric);\n onLCP(setMetric);\n onTTFB(setMetric);\n};\n\nconst setPerformanceMetric = async (metric: SessionMetric) => {\n const data = mapPerformanceMetric(metric);\n\n if (data === 'unknown') {\n console.warn('Performance metric ignored. Unknown metric name.', metric);\n return;\n }\n\n if (data === 'deprecated') {\n return;\n }\n\n const idb = await import('./idb.services');\n await idb.setPerformanceMetric({\n key: nanoid(),\n view: data\n });\n};\n\nconst mapPerformanceMetric = ({\n sessionId,\n name: metricName,\n value,\n delta,\n id,\n navigationType\n}: SessionMetric): IdbPerformanceMetric | 'deprecated' | 'unknown' => {\n const mapMetricName = (): PerformanceMetricName | 'deprecated' | 'unknown' => {\n switch (metricName) {\n case 'CLS':\n return {CLS: null};\n case 'FCP':\n return {FCP: null};\n case 'INP':\n return {INP: null};\n case 'LCP':\n return {LCP: null};\n case 'TTFB':\n return {TTFB: null};\n case 'FID':\n return 'deprecated';\n default:\n return 'unknown';\n }\n };\n\n const metric_name = mapMetricName();\n\n if (metric_name === 'unknown' || metric_name === 'deprecated') {\n return metric_name;\n }\n\n const mapNavigationType = (): NavigationType | undefined => {\n switch (navigationType) {\n case 'navigate':\n return {Navigate: null};\n case 'restore':\n return {Restore: null};\n case 'reload':\n return {Reload: null};\n case 'back-forward':\n return {BackForward: null};\n case 'back-forward-cache':\n return {BackForwardCache: null};\n case 'prerender':\n return {Prerender: null};\n default:\n return undefined;\n }\n };\n\n const data: WebVitalsMetric = {\n value,\n delta,\n id,\n navigation_type: toNullable(mapNavigationType())\n };\n\n const {\n location: {href}\n } = document;\n\n const {updated_at: _, ...timestampRest} = timestamp();\n\n const metric: IdbPerformanceMetric = {\n href,\n metric_name,\n session_id: sessionId,\n data: {\n WebVitalsMetric: data\n },\n ...userAgent(),\n ...timestampRest\n };\n\n return metric;\n};\n", "// TODO: duplicated because those should not be bundled in web worker. We can avoid this by transforming utils into a library of modules.\ninterface ImportMeta {\n env: Record<string, string> | undefined;\n}\n\nexport const envSatelliteId = (): string | undefined => {\n const viteEnvSatelliteId = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_SATELLITE_ID ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_SATELLITE_ID)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_SATELLITE_ID ?? viteEnvSatelliteId())\n : viteEnvSatelliteId();\n};\n\nexport const envOrbiterId = (): string | undefined => {\n const viteEnvOrbiterId = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_ORBITER_ID ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_ORBITER_ID)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_ORBITER_ID ?? viteEnvOrbiterId())\n : viteEnvOrbiterId();\n};\n\nexport const envContainer = (): string | undefined => {\n const viteEnvContainer = (): string | undefined =>\n typeof import.meta !== 'undefined' &&\n typeof (import.meta as unknown as ImportMeta).env !== 'undefined'\n ? ((import.meta as unknown as ImportMeta).env?.VITE_CONTAINER ??\n (import.meta as unknown as ImportMeta).env?.PUBLIC_CONTAINER)\n : undefined;\n\n return typeof process !== 'undefined'\n ? (process.env?.NEXT_PUBLIC_CONTAINER ?? viteEnvContainer())\n : viteEnvContainer();\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["assertNonNullish", "assertNonNullish", "nonNullish", "toNullable", "isBrowser", "urlAlphabet", "nanoid", "size", "id", "bytes", "urlAlphabet", "toNullable", "nowInBigIntNanoSeconds", "timestamp", "nowInBigIntNanoSeconds", "userAgent", "toNullable", "isNullish", "WORKER_UNDEFINED_MSG", "warningWorkerNotInitialized", "value", "toNullable", "startPerformance", "sessionId", "onCLS", "onFCP", "onINP", "onLCP", "onTTFB", "setMetric", "metric", "setPerformanceMetric", "data", "mapPerformanceMetric", "nanoid", "metricName", "value", "delta", "id", "navigationType", "metric_name", "toNullable", "href", "_", "timestampRest", "timestamp", "userAgent", "initSessionId", "nanoid", "sessionId", "worker", "initWorker", "env", "path", "workerUrl", "consoleWarn", "initWorkerEnvironment", "initTrackPageViews", "trackPages", "trackPageView", "pushStateProxy", "target", "thisArg", "argArray", "SESSION_ID_UNDEFINED_MSG", "setPageView", "isBrowser", "assertNonNullish", "title", "href", "referrer", "innerWidth", "innerHeight", "timeZone", "data", "toNullable", "nonNullish", "userAgent", "timestamp", "initTrackPerformance", "options", "startPerformance", "warningWorkerNotInitialized", "trackEvent", "startTracking", "stopTracking", "envSatelliteId", "viteEnvSatelliteId", "envOrbiterId", "viteEnvOrbiterId", "envContainer", "viteEnvContainer", "parseEnv", "userEnv", "satelliteId", "envSatelliteId", "assertNonNullish", "orbiterId", "envOrbiterId", "container", "envContainer", "initOrbiter", "setPageView", "env", "workerCleanup", "initWorker", "pushHistoryCleanup", "initTrackPageViews", "initTrackPerformance", "startTracking", "stopTracking"]
7
7
  }