@lidofinance/analytics-matomo 0.54.1 → 0.56.0

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.
package/dist/index.cjs CHANGED
@@ -27,7 +27,6 @@ $parcel$export($ef5c629b17efc154$exports, "COOKIE_ALLOWED_MAIN_KEY", function ()
27
27
  $parcel$export($ef5c629b17efc154$exports, "META_INFO_COOKIE", function () { return $ef5c629b17efc154$export$506bf4ed084a716; });
28
28
  $parcel$export($ef5c629b17efc154$exports, "COOKIE_ALLOWED_KEYS", function () { return $ef5c629b17efc154$export$7567476bb64c3721; });
29
29
  $parcel$export($ef5c629b17efc154$exports, "matomoAvailable", function () { return $ef5c629b17efc154$export$e5ed1c22a80aba4b; });
30
- $parcel$export($ef5c629b17efc154$exports, "checkCookieAllowed", function () { return $ef5c629b17efc154$export$83c2c3def90d3b5a; });
31
30
  $parcel$export($ef5c629b17efc154$exports, "callMatomo", function () { return $ef5c629b17efc154$export$cecaccc605742066; });
32
31
  $parcel$export($ef5c629b17efc154$exports, "trackEvent", function () { return $ef5c629b17efc154$export$73d0a139caca1fee; });
33
32
  $parcel$export($ef5c629b17efc154$exports, "trackVisibleContentImpressions", function () { return $ef5c629b17efc154$export$40aa6af9e848a6e0; });
@@ -49,18 +48,9 @@ const $ef5c629b17efc154$var$getCrossDomainCookieClientSide = (key)=>{
49
48
  const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`);
50
49
  return document.cookie.match(cookieMatcher)?.[2] ?? defaultValue;
51
50
  };
52
- const $ef5c629b17efc154$export$83c2c3def90d3b5a = ()=>{
53
- if (typeof window === "undefined") return false;
54
- for (const key of $ef5c629b17efc154$export$7567476bb64c3721){
55
- const cookieValue = $ef5c629b17efc154$var$getCrossDomainCookieClientSide(key);
56
- const cookieAllowed = !!(cookieValue && cookieValue === $ef5c629b17efc154$export$69479293c4b47320);
57
- if (cookieAllowed) return cookieAllowed;
58
- }
59
- return false;
60
- };
61
51
  const $ef5c629b17efc154$export$cecaccc605742066 = (apiMethod, ...args)=>{
62
52
  if (!$ef5c629b17efc154$export$e5ed1c22a80aba4b()) (0, $8ec118068c18cb0c$export$6ec25100f86fa29d)();
63
- if (typeof window === "undefined" || !$ef5c629b17efc154$export$83c2c3def90d3b5a()) return;
53
+ if (typeof window === "undefined") return;
64
54
  const customDimensionValue = $ef5c629b17efc154$var$getCrossDomainCookieClientSide($ef5c629b17efc154$export$506bf4ed084a716) || "none";
65
55
  window?._paq?.push([
66
56
  "setCustomDimension",
@@ -83,9 +73,6 @@ const $ef5c629b17efc154$export$3e8733322718eb9 = ()=>{
83
73
  };
84
74
 
85
75
 
86
- // Need if we tried to init matomo manually without cookie,
87
- // and use it after accepting the cookie policy
88
- let $8ec118068c18cb0c$var$futureInitMatomoHost = undefined;
89
76
  const $8ec118068c18cb0c$var$injectMatomoScript = (matomoHost)=>{
90
77
  /**
91
78
  * # How to update matomo
@@ -116,18 +103,15 @@ const $8ec118068c18cb0c$var$injectMatomoScript = (matomoHost)=>{
116
103
  * 3. Add sha384 prefix
117
104
  * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
118
105
  */ integrity: [
119
- "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
106
+ "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa",
107
+ "sha384-cT0Nk8wS/smX3tvm0JOiaJhNeO5DbtYoG0ReQ6VlEE5EPNjmbcuZa1NwGwg14Hqa"
120
108
  ].join(" ")
121
109
  }));
122
110
  };
123
111
  const $8ec118068c18cb0c$export$6ec25100f86fa29d = (matomoHost, customConfig = [])=>{
124
112
  if (typeof window === "undefined") // SSR not supported!
125
113
  return;
126
- if (!(0, $ef5c629b17efc154$export$83c2c3def90d3b5a)()) {
127
- if (matomoHost) $8ec118068c18cb0c$var$futureInitMatomoHost = matomoHost;
128
- return;
129
- }
130
- const _matomoHost = $8ec118068c18cb0c$var$futureInitMatomoHost || matomoHost || window?.__env__?.matomoHost || undefined;
114
+ const _matomoHost = matomoHost || window?.__env__?.matomoHost || undefined;
131
115
  if (!_matomoHost) // Where Do I send analytics?
132
116
  return;
133
117
  if (window._paq) // window._paq has been initialized
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/analytics/matomo/src/index.ts","packages/analytics/matomo/src/init.ts","packages/analytics/matomo/src/utils.ts","packages/analytics/matomo/src/type.ts","packages/analytics/matomo/src/decoratorts.ts"],"sourcesContent":["import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n","import { getDomain, checkCookieAllowed } from './utils'\n\ndeclare global {\n interface Window {\n _paq?: undefined | [string, ...unknown[]][]\n __env__: { matomoHost: string } & Record<string | number | symbol, unknown>\n }\n}\n\n// Need if we tried to init matomo manually without cookie,\n// and use it after accepting the cookie policy\nlet futureInitMatomoHost: string | undefined = undefined\n\nconst injectMatomoScript = (matomoHost: string) => {\n /**\n * # How to update matomo\n *\n * To safely update Matomo without analytics downtime:\n *\n * 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases\n * 2. Extract matomo.js from the zip archive\n * 3. Generate integrity checksum:\n * - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * - Add 'sha384-' prefix to the generated hash\n * 4. Add the new integrity hash to the array below (keep the old one)\n * 5. Release this package and update all dependent repositories\n *\n * Notes:\n * - The script will automatically use the matching integrity hash\n * - Old integrity values can be safely removed later if desired\n * - No console errors will occur during the transition\n * - This approach ensures zero analytics downtime during updates\n */\n document.documentElement.appendChild(\n Object.assign(document.createElement('script'), {\n async: true,\n src: new URL('/matomo.js', matomoHost).href,\n crossOrigin: 'anonymous',\n /**\n * To generate checksum:\n * 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`\n * 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * 3. Add sha384 prefix\n * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes\n */\n integrity: [\n 'sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa', // Matomo v 5.2.0 && Matomo v 5.2.2\n ].join(' '),\n }),\n )\n}\n\nexport type MatomoConfig = Array<[string, ...unknown[]]>\n\nexport const initMatomo = (matomoHost?: string, customConfig: MatomoConfig = []): void => {\n if (typeof window === 'undefined') {\n // SSR not supported!\n return\n }\n\n if (!checkCookieAllowed()) {\n if (matomoHost) {\n futureInitMatomoHost = matomoHost\n }\n return\n }\n\n const _matomoHost = futureInitMatomoHost || matomoHost || window?.__env__?.matomoHost || undefined\n\n if (!_matomoHost) {\n // Where Do I send analytics?\n return\n }\n\n if (window._paq) {\n // window._paq has been initialized\n return\n }\n\n window._paq ??= []\n\n const rawConfig = [\n // These are hardcoded values and cannot be changed\n ['setTrackerUrl', new URL('/matomo.php', _matomoHost).href],\n ['requireCookieConsent', true],\n // Add subdomain prefix to page titles to separate analytics by subdomain\n ['setDocumentTitle', window.location.hostname + '/' + (document.title || '')],\n\n // These are custom settings\n ...customConfig,\n\n // These are default settings, will be overwritten if custom set\n ['trackPageView', true],\n ['enableLinkTracking', true],\n ['setSiteId', '1'],\n ['setDomains', [`*.${getDomain()}`]],\n ['enableCrossDomainLinking', true],\n ]\n\n // Map keeps order of keys\n const config = new Map()\n for (const [key, value] of rawConfig) {\n if (!config.has(key)) {\n config.set(key, value)\n }\n }\n\n window?._paq?.push(\n ...Array.from(config.entries())\n .map(([key, value]) => {\n switch (value) {\n case false:\n return false\n case true:\n case undefined:\n return [key]\n default:\n return [key, value]\n }\n })\n .filter((item): item is [string, ...unknown[]] => item !== false),\n )\n\n injectMatomoScript(_matomoHost)\n}\n","import { initMatomo } from './init'\nimport { MatomoEventType } from './type'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\nexport const META_INFO_COOKIE = 'meta-info'\n\nexport const COOKIE_ALLOWED_KEYS = [\n 'LIDO_WIDGET__COOKIES_ALLOWED', // will be deprecated soon\n COOKIE_ALLOWED_MAIN_KEY,\n]\n\nexport const matomoAvailable = (): boolean => {\n return typeof window !== 'undefined' && window._paq !== undefined\n}\n\nconst getCrossDomainCookieClientSide = (key: string): string | null => {\n const defaultValue = null\n\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`)\n return (document.cookie.match(cookieMatcher)?.[2] as string) ?? defaultValue\n}\n\nexport const checkCookieAllowed = (): boolean => {\n if (typeof window === 'undefined') {\n return false\n }\n\n for (const key of COOKIE_ALLOWED_KEYS) {\n const cookieValue = getCrossDomainCookieClientSide(key)\n const cookieAllowed = !!(cookieValue && cookieValue === COOKIE_ALLOWED_VALUE_YES)\n\n if (cookieAllowed) {\n return cookieAllowed\n }\n }\n\n return false\n}\n\nexport const callMatomo = (apiMethod: string, ...args: unknown[]): void => {\n if (!matomoAvailable()) {\n initMatomo()\n }\n\n if (typeof window === 'undefined' || !checkCookieAllowed()) {\n return\n }\n\n const customDimensionValue = getCrossDomainCookieClientSide(META_INFO_COOKIE) || 'none'\n window?._paq?.push(['setCustomDimension', 1, customDimensionValue])\n\n window?._paq?.push([apiMethod, ...args])\n}\n\nexport const trackEvent = (...event: MatomoEventType): void => {\n callMatomo('trackEvent', ...event)\n}\n\nexport const trackVisibleContentImpressions = (checkOnScroll = true, timeIntervalInMs = 750): void => {\n callMatomo('trackVisibleContentImpressions', checkOnScroll, timeIntervalInMs)\n}\n\nexport const getDomain = () => {\n return location.hostname.split('.').slice(-2).join('.')\n}\n","export type MatomoEventType = [category: string, action: string, name: string]\n","import { MatomoEventType } from './type'\nimport { callMatomo } from './utils'\n\nexport const wrapWithEventTrack = <A extends unknown[], R>(event: MatomoEventType | void, fn: (...args: A) => R) =>\n event\n ? (...args: A): R => {\n callMatomo('trackEvent', ...event)\n return fn?.(...args)\n }\n : fn\n"],"names":[],"version":3,"file":"index.cjs.map"}
1
+ {"mappings":"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","sources":["packages/analytics/matomo/src/index.ts","packages/analytics/matomo/src/init.ts","packages/analytics/matomo/src/utils.ts","packages/analytics/matomo/src/type.ts","packages/analytics/matomo/src/decoratorts.ts"],"sourcesContent":["import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n","import { getDomain } from './utils'\n\ndeclare global {\n interface Window {\n _paq?: undefined | [string, ...unknown[]][]\n __env__: { matomoHost: string } & Record<string | number | symbol, unknown>\n }\n}\n\nconst injectMatomoScript = (matomoHost: string) => {\n /**\n * # How to update matomo\n *\n * To safely update Matomo without analytics downtime:\n *\n * 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases\n * 2. Extract matomo.js from the zip archive\n * 3. Generate integrity checksum:\n * - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * - Add 'sha384-' prefix to the generated hash\n * 4. Add the new integrity hash to the array below (keep the old one)\n * 5. Release this package and update all dependent repositories\n *\n * Notes:\n * - The script will automatically use the matching integrity hash\n * - Old integrity values can be safely removed later if desired\n * - No console errors will occur during the transition\n * - This approach ensures zero analytics downtime during updates\n */\n document.documentElement.appendChild(\n Object.assign(document.createElement('script'), {\n async: true,\n src: new URL('/matomo.js', matomoHost).href,\n crossOrigin: 'anonymous',\n /**\n * To generate checksum:\n * 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`\n * 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * 3. Add sha384 prefix\n * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes\n */\n integrity: [\n 'sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa', // Matomo v 5.2.0 && Matomo v 5.2.2 with cookies (deprecated, remove after all environments migrate to the cookie-less analytics)\n 'sha384-cT0Nk8wS/smX3tvm0JOiaJhNeO5DbtYoG0ReQ6VlEE5EPNjmbcuZa1NwGwg14Hqa', // Matomo v 5.2.0 && Matomo v 5.2.2 without cookies (cookie-less analytics)\n ].join(' '),\n }),\n )\n}\n\nexport type MatomoConfig = Array<[string, ...unknown[]]>\n\nexport const initMatomo = (matomoHost?: string, customConfig: MatomoConfig = []): void => {\n if (typeof window === 'undefined') {\n // SSR not supported!\n return\n }\n\n const _matomoHost = matomoHost || window?.__env__?.matomoHost || undefined\n\n if (!_matomoHost) {\n // Where Do I send analytics?\n return\n }\n\n if (window._paq) {\n // window._paq has been initialized\n return\n }\n\n window._paq ??= []\n\n const rawConfig = [\n // These are hardcoded values and cannot be changed\n ['setTrackerUrl', new URL('/matomo.php', _matomoHost).href],\n ['requireCookieConsent', true],\n // Add subdomain prefix to page titles to separate analytics by subdomain\n ['setDocumentTitle', window.location.hostname + '/' + (document.title || '')],\n\n // These are custom settings\n ...customConfig,\n\n // These are default settings, will be overwritten if custom set\n ['trackPageView', true],\n ['enableLinkTracking', true],\n ['setSiteId', '1'],\n ['setDomains', [`*.${getDomain()}`]],\n ['enableCrossDomainLinking', true],\n ]\n\n // Map keeps order of keys\n const config = new Map()\n for (const [key, value] of rawConfig) {\n if (!config.has(key)) {\n config.set(key, value)\n }\n }\n\n window?._paq?.push(\n ...Array.from(config.entries())\n .map(([key, value]) => {\n switch (value) {\n case false:\n return false\n case true:\n case undefined:\n return [key]\n default:\n return [key, value]\n }\n })\n .filter((item): item is [string, ...unknown[]] => item !== false),\n )\n\n injectMatomoScript(_matomoHost)\n}\n","import { initMatomo } from './init'\nimport { MatomoEventType } from './type'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\nexport const META_INFO_COOKIE = 'meta-info'\n\nexport const COOKIE_ALLOWED_KEYS = [\n 'LIDO_WIDGET__COOKIES_ALLOWED', // will be deprecated soon\n COOKIE_ALLOWED_MAIN_KEY,\n]\n\nexport const matomoAvailable = (): boolean => {\n return typeof window !== 'undefined' && window._paq !== undefined\n}\n\nconst getCrossDomainCookieClientSide = (key: string): string | null => {\n const defaultValue = null\n\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`)\n return (document.cookie.match(cookieMatcher)?.[2] as string) ?? defaultValue\n}\n\nexport const callMatomo = (apiMethod: string, ...args: unknown[]): void => {\n if (!matomoAvailable()) {\n initMatomo()\n }\n\n if (typeof window === 'undefined') {\n return\n }\n\n const customDimensionValue = getCrossDomainCookieClientSide(META_INFO_COOKIE) || 'none'\n window?._paq?.push(['setCustomDimension', 1, customDimensionValue])\n\n window?._paq?.push([apiMethod, ...args])\n}\n\nexport const trackEvent = (...event: MatomoEventType): void => {\n callMatomo('trackEvent', ...event)\n}\n\nexport const trackVisibleContentImpressions = (checkOnScroll = true, timeIntervalInMs = 750): void => {\n callMatomo('trackVisibleContentImpressions', checkOnScroll, timeIntervalInMs)\n}\n\nexport const getDomain = () => {\n return location.hostname.split('.').slice(-2).join('.')\n}\n","export type MatomoEventType = [category: string, action: string, name: string]\n","import { MatomoEventType } from './type'\nimport { callMatomo } from './utils'\n\nexport const wrapWithEventTrack = <A extends unknown[], R>(event: MatomoEventType | void, fn: (...args: A) => R) =>\n event\n ? (...args: A): R => {\n callMatomo('trackEvent', ...event)\n return fn?.(...args)\n }\n : fn\n"],"names":[],"version":3,"file":"index.cjs.map"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,6 @@ export const COOKIE_ALLOWED_MAIN_KEY = "cookie-allowed";
4
4
  export const META_INFO_COOKIE = "meta-info";
5
5
  export const COOKIE_ALLOWED_KEYS: string[];
6
6
  export const matomoAvailable: () => boolean;
7
- export const checkCookieAllowed: () => boolean;
8
7
  export const callMatomo: (apiMethod: string, ...args: unknown[]) => void;
9
8
  export const trackEvent: (category: string, action: string, name: string) => void;
10
9
  export const trackVisibleContentImpressions: (checkOnScroll?: boolean, timeIntervalInMs?: number) => void;
@@ -1 +1 @@
1
- {"mappings":"AAAA,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;ACG9E,OAAO,MAAM,gCAAgC,CAAA;AAC7C,OAAO,MAAM,0CAA0C,CAAA;AACvD,OAAO,MAAM,8BAA8B,CAAA;AAE3C,OAAO,MAAM,6BAGZ,CAAA;AAED,OAAO,MAAM,uBAAsB,OAElC,CAAA;AAaD,OAAO,MAAM,0BAAyB,OAerC,CAAA;AAED,OAAO,MAAM,wBAAyB,MAAM,WAAW,OAAO,EAAE,KAAG,IAalE,CAAA;AAED,OAAO,MAAM,gEAA0C,IAEtD,CAAA;AAED,OAAO,MAAM,wFAAiF,IAE7F,CAAA;AAED,OAAO,MAAM,uBAEZ,CAAA;ACnED,QAAQ,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,CAAA;QAC3C,OAAO,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAA;KAC5E;CACF;AA6CD,2BAA2B,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;AAExD,OAAO,MAAM,0BAA2B,MAAM,kCAAoC,IAsEjF,CAAA;ACzHD,OAAO,MAAM,oDAAqD,eAAe,GAAG,IAAI,6CAMhF,CAAA","sources":["packages/analytics/matomo/src/src/type.ts","packages/analytics/matomo/src/src/utils.ts","packages/analytics/matomo/src/src/init.ts","packages/analytics/matomo/src/src/decoratorts.ts","packages/analytics/matomo/src/src/index.ts","packages/analytics/matomo/src/index.ts"],"sourcesContent":[null,null,null,null,null,"import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":"AAAA,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;ACG9E,OAAO,MAAM,gCAAgC,CAAA;AAC7C,OAAO,MAAM,0CAA0C,CAAA;AACvD,OAAO,MAAM,8BAA8B,CAAA;AAE3C,OAAO,MAAM,6BAGZ,CAAA;AAED,OAAO,MAAM,uBAAsB,OAElC,CAAA;AAaD,OAAO,MAAM,wBAAyB,MAAM,WAAW,OAAO,EAAE,KAAG,IAalE,CAAA;AAED,OAAO,MAAM,gEAA0C,IAEtD,CAAA;AAED,OAAO,MAAM,wFAAiF,IAE7F,CAAA;AAED,OAAO,MAAM,uBAEZ,CAAA;AClDD,QAAQ,MAAM,CAAC;IACb,UAAU,MAAM;QACd,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,CAAA;QAC3C,OAAO,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAA;KAC5E;CACF;AA0CD,2BAA2B,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;AAExD,OAAO,MAAM,0BAA2B,MAAM,kCAAoC,IA+DjF,CAAA;AC/GD,OAAO,MAAM,oDAAqD,eAAe,GAAG,IAAI,6CAMhF,CAAA","sources":["packages/analytics/matomo/src/src/type.ts","packages/analytics/matomo/src/src/utils.ts","packages/analytics/matomo/src/src/init.ts","packages/analytics/matomo/src/src/decoratorts.ts","packages/analytics/matomo/src/src/index.ts","packages/analytics/matomo/src/index.ts"],"sourcesContent":[null,null,null,null,null,"import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/dist/index.mjs CHANGED
@@ -11,7 +11,6 @@ $parcel$export($427566b8f1d3367d$exports, "COOKIE_ALLOWED_MAIN_KEY", function ()
11
11
  $parcel$export($427566b8f1d3367d$exports, "META_INFO_COOKIE", function () { return $427566b8f1d3367d$export$506bf4ed084a716; });
12
12
  $parcel$export($427566b8f1d3367d$exports, "COOKIE_ALLOWED_KEYS", function () { return $427566b8f1d3367d$export$7567476bb64c3721; });
13
13
  $parcel$export($427566b8f1d3367d$exports, "matomoAvailable", function () { return $427566b8f1d3367d$export$e5ed1c22a80aba4b; });
14
- $parcel$export($427566b8f1d3367d$exports, "checkCookieAllowed", function () { return $427566b8f1d3367d$export$83c2c3def90d3b5a; });
15
14
  $parcel$export($427566b8f1d3367d$exports, "callMatomo", function () { return $427566b8f1d3367d$export$cecaccc605742066; });
16
15
  $parcel$export($427566b8f1d3367d$exports, "trackEvent", function () { return $427566b8f1d3367d$export$73d0a139caca1fee; });
17
16
  $parcel$export($427566b8f1d3367d$exports, "trackVisibleContentImpressions", function () { return $427566b8f1d3367d$export$40aa6af9e848a6e0; });
@@ -33,18 +32,9 @@ const $427566b8f1d3367d$var$getCrossDomainCookieClientSide = (key)=>{
33
32
  const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`);
34
33
  return document.cookie.match(cookieMatcher)?.[2] ?? defaultValue;
35
34
  };
36
- const $427566b8f1d3367d$export$83c2c3def90d3b5a = ()=>{
37
- if (typeof window === "undefined") return false;
38
- for (const key of $427566b8f1d3367d$export$7567476bb64c3721){
39
- const cookieValue = $427566b8f1d3367d$var$getCrossDomainCookieClientSide(key);
40
- const cookieAllowed = !!(cookieValue && cookieValue === $427566b8f1d3367d$export$69479293c4b47320);
41
- if (cookieAllowed) return cookieAllowed;
42
- }
43
- return false;
44
- };
45
35
  const $427566b8f1d3367d$export$cecaccc605742066 = (apiMethod, ...args)=>{
46
36
  if (!$427566b8f1d3367d$export$e5ed1c22a80aba4b()) (0, $76adf94c93f4a7f4$export$6ec25100f86fa29d)();
47
- if (typeof window === "undefined" || !$427566b8f1d3367d$export$83c2c3def90d3b5a()) return;
37
+ if (typeof window === "undefined") return;
48
38
  const customDimensionValue = $427566b8f1d3367d$var$getCrossDomainCookieClientSide($427566b8f1d3367d$export$506bf4ed084a716) || "none";
49
39
  window?._paq?.push([
50
40
  "setCustomDimension",
@@ -67,9 +57,6 @@ const $427566b8f1d3367d$export$3e8733322718eb9 = ()=>{
67
57
  };
68
58
 
69
59
 
70
- // Need if we tried to init matomo manually without cookie,
71
- // and use it after accepting the cookie policy
72
- let $76adf94c93f4a7f4$var$futureInitMatomoHost = undefined;
73
60
  const $76adf94c93f4a7f4$var$injectMatomoScript = (matomoHost)=>{
74
61
  /**
75
62
  * # How to update matomo
@@ -100,18 +87,15 @@ const $76adf94c93f4a7f4$var$injectMatomoScript = (matomoHost)=>{
100
87
  * 3. Add sha384 prefix
101
88
  * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
102
89
  */ integrity: [
103
- "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
90
+ "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa",
91
+ "sha384-cT0Nk8wS/smX3tvm0JOiaJhNeO5DbtYoG0ReQ6VlEE5EPNjmbcuZa1NwGwg14Hqa"
104
92
  ].join(" ")
105
93
  }));
106
94
  };
107
95
  const $76adf94c93f4a7f4$export$6ec25100f86fa29d = (matomoHost, customConfig = [])=>{
108
96
  if (typeof window === "undefined") // SSR not supported!
109
97
  return;
110
- if (!(0, $427566b8f1d3367d$export$83c2c3def90d3b5a)()) {
111
- if (matomoHost) $76adf94c93f4a7f4$var$futureInitMatomoHost = matomoHost;
112
- return;
113
- }
114
- const _matomoHost = $76adf94c93f4a7f4$var$futureInitMatomoHost || matomoHost || window?.__env__?.matomoHost || undefined;
98
+ const _matomoHost = matomoHost || window?.__env__?.matomoHost || undefined;
115
99
  if (!_matomoHost) // Where Do I send analytics?
116
100
  return;
117
101
  if (window._paq) // window._paq has been initialized
@@ -199,5 +183,5 @@ const $dfa3db2a6cffa71c$export$e8f57ad64147d191 = (event, fn)=>event ? (...args)
199
183
  (0, $76adf94c93f4a7f4$export$6ec25100f86fa29d)();
200
184
 
201
185
 
202
- export {$76adf94c93f4a7f4$export$6ec25100f86fa29d as initMatomo, $dfa3db2a6cffa71c$export$e8f57ad64147d191 as wrapWithEventTrack, $427566b8f1d3367d$export$69479293c4b47320 as COOKIE_ALLOWED_VALUE_YES, $427566b8f1d3367d$export$ed61d9b9718a39c9 as COOKIE_ALLOWED_MAIN_KEY, $427566b8f1d3367d$export$506bf4ed084a716 as META_INFO_COOKIE, $427566b8f1d3367d$export$7567476bb64c3721 as COOKIE_ALLOWED_KEYS, $427566b8f1d3367d$export$e5ed1c22a80aba4b as matomoAvailable, $427566b8f1d3367d$export$83c2c3def90d3b5a as checkCookieAllowed, $427566b8f1d3367d$export$cecaccc605742066 as callMatomo, $427566b8f1d3367d$export$73d0a139caca1fee as trackEvent, $427566b8f1d3367d$export$40aa6af9e848a6e0 as trackVisibleContentImpressions, $427566b8f1d3367d$export$3e8733322718eb9 as getDomain};
186
+ export {$76adf94c93f4a7f4$export$6ec25100f86fa29d as initMatomo, $dfa3db2a6cffa71c$export$e8f57ad64147d191 as wrapWithEventTrack, $427566b8f1d3367d$export$69479293c4b47320 as COOKIE_ALLOWED_VALUE_YES, $427566b8f1d3367d$export$ed61d9b9718a39c9 as COOKIE_ALLOWED_MAIN_KEY, $427566b8f1d3367d$export$506bf4ed084a716 as META_INFO_COOKIE, $427566b8f1d3367d$export$7567476bb64c3721 as COOKIE_ALLOWED_KEYS, $427566b8f1d3367d$export$e5ed1c22a80aba4b as matomoAvailable, $427566b8f1d3367d$export$cecaccc605742066 as callMatomo, $427566b8f1d3367d$export$73d0a139caca1fee as trackEvent, $427566b8f1d3367d$export$40aa6af9e848a6e0 as trackVisibleContentImpressions, $427566b8f1d3367d$export$3e8733322718eb9 as getDomain};
203
187
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/analytics/matomo/src/index.ts","packages/analytics/matomo/src/init.ts","packages/analytics/matomo/src/utils.ts","packages/analytics/matomo/src/type.ts","packages/analytics/matomo/src/decoratorts.ts"],"sourcesContent":["import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n","import { getDomain, checkCookieAllowed } from './utils'\n\ndeclare global {\n interface Window {\n _paq?: undefined | [string, ...unknown[]][]\n __env__: { matomoHost: string } & Record<string | number | symbol, unknown>\n }\n}\n\n// Need if we tried to init matomo manually without cookie,\n// and use it after accepting the cookie policy\nlet futureInitMatomoHost: string | undefined = undefined\n\nconst injectMatomoScript = (matomoHost: string) => {\n /**\n * # How to update matomo\n *\n * To safely update Matomo without analytics downtime:\n *\n * 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases\n * 2. Extract matomo.js from the zip archive\n * 3. Generate integrity checksum:\n * - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * - Add 'sha384-' prefix to the generated hash\n * 4. Add the new integrity hash to the array below (keep the old one)\n * 5. Release this package and update all dependent repositories\n *\n * Notes:\n * - The script will automatically use the matching integrity hash\n * - Old integrity values can be safely removed later if desired\n * - No console errors will occur during the transition\n * - This approach ensures zero analytics downtime during updates\n */\n document.documentElement.appendChild(\n Object.assign(document.createElement('script'), {\n async: true,\n src: new URL('/matomo.js', matomoHost).href,\n crossOrigin: 'anonymous',\n /**\n * To generate checksum:\n * 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`\n * 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * 3. Add sha384 prefix\n * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes\n */\n integrity: [\n 'sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa', // Matomo v 5.2.0 && Matomo v 5.2.2\n ].join(' '),\n }),\n )\n}\n\nexport type MatomoConfig = Array<[string, ...unknown[]]>\n\nexport const initMatomo = (matomoHost?: string, customConfig: MatomoConfig = []): void => {\n if (typeof window === 'undefined') {\n // SSR not supported!\n return\n }\n\n if (!checkCookieAllowed()) {\n if (matomoHost) {\n futureInitMatomoHost = matomoHost\n }\n return\n }\n\n const _matomoHost = futureInitMatomoHost || matomoHost || window?.__env__?.matomoHost || undefined\n\n if (!_matomoHost) {\n // Where Do I send analytics?\n return\n }\n\n if (window._paq) {\n // window._paq has been initialized\n return\n }\n\n window._paq ??= []\n\n const rawConfig = [\n // These are hardcoded values and cannot be changed\n ['setTrackerUrl', new URL('/matomo.php', _matomoHost).href],\n ['requireCookieConsent', true],\n // Add subdomain prefix to page titles to separate analytics by subdomain\n ['setDocumentTitle', window.location.hostname + '/' + (document.title || '')],\n\n // These are custom settings\n ...customConfig,\n\n // These are default settings, will be overwritten if custom set\n ['trackPageView', true],\n ['enableLinkTracking', true],\n ['setSiteId', '1'],\n ['setDomains', [`*.${getDomain()}`]],\n ['enableCrossDomainLinking', true],\n ]\n\n // Map keeps order of keys\n const config = new Map()\n for (const [key, value] of rawConfig) {\n if (!config.has(key)) {\n config.set(key, value)\n }\n }\n\n window?._paq?.push(\n ...Array.from(config.entries())\n .map(([key, value]) => {\n switch (value) {\n case false:\n return false\n case true:\n case undefined:\n return [key]\n default:\n return [key, value]\n }\n })\n .filter((item): item is [string, ...unknown[]] => item !== false),\n )\n\n injectMatomoScript(_matomoHost)\n}\n","import { initMatomo } from './init'\nimport { MatomoEventType } from './type'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\nexport const META_INFO_COOKIE = 'meta-info'\n\nexport const COOKIE_ALLOWED_KEYS = [\n 'LIDO_WIDGET__COOKIES_ALLOWED', // will be deprecated soon\n COOKIE_ALLOWED_MAIN_KEY,\n]\n\nexport const matomoAvailable = (): boolean => {\n return typeof window !== 'undefined' && window._paq !== undefined\n}\n\nconst getCrossDomainCookieClientSide = (key: string): string | null => {\n const defaultValue = null\n\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`)\n return (document.cookie.match(cookieMatcher)?.[2] as string) ?? defaultValue\n}\n\nexport const checkCookieAllowed = (): boolean => {\n if (typeof window === 'undefined') {\n return false\n }\n\n for (const key of COOKIE_ALLOWED_KEYS) {\n const cookieValue = getCrossDomainCookieClientSide(key)\n const cookieAllowed = !!(cookieValue && cookieValue === COOKIE_ALLOWED_VALUE_YES)\n\n if (cookieAllowed) {\n return cookieAllowed\n }\n }\n\n return false\n}\n\nexport const callMatomo = (apiMethod: string, ...args: unknown[]): void => {\n if (!matomoAvailable()) {\n initMatomo()\n }\n\n if (typeof window === 'undefined' || !checkCookieAllowed()) {\n return\n }\n\n const customDimensionValue = getCrossDomainCookieClientSide(META_INFO_COOKIE) || 'none'\n window?._paq?.push(['setCustomDimension', 1, customDimensionValue])\n\n window?._paq?.push([apiMethod, ...args])\n}\n\nexport const trackEvent = (...event: MatomoEventType): void => {\n callMatomo('trackEvent', ...event)\n}\n\nexport const trackVisibleContentImpressions = (checkOnScroll = true, timeIntervalInMs = 750): void => {\n callMatomo('trackVisibleContentImpressions', checkOnScroll, timeIntervalInMs)\n}\n\nexport const getDomain = () => {\n return location.hostname.split('.').slice(-2).join('.')\n}\n","export type MatomoEventType = [category: string, action: string, name: string]\n","import { MatomoEventType } from './type'\nimport { callMatomo } from './utils'\n\nexport const wrapWithEventTrack = <A extends unknown[], R>(event: MatomoEventType | void, fn: (...args: A) => R) =>\n event\n ? (...args: A): R => {\n callMatomo('trackEvent', ...event)\n return fn?.(...args)\n }\n : fn\n"],"names":[],"version":3,"file":"index.mjs.map"}
1
+ {"mappings":"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","sources":["packages/analytics/matomo/src/index.ts","packages/analytics/matomo/src/init.ts","packages/analytics/matomo/src/utils.ts","packages/analytics/matomo/src/type.ts","packages/analytics/matomo/src/decoratorts.ts"],"sourcesContent":["import { initMatomo } from './init'\n\nexport * from './type'\nexport * from './decoratorts'\nexport * from './utils'\nexport * from './init'\n\n// Run after import\ninitMatomo()\n","import { getDomain } from './utils'\n\ndeclare global {\n interface Window {\n _paq?: undefined | [string, ...unknown[]][]\n __env__: { matomoHost: string } & Record<string | number | symbol, unknown>\n }\n}\n\nconst injectMatomoScript = (matomoHost: string) => {\n /**\n * # How to update matomo\n *\n * To safely update Matomo without analytics downtime:\n *\n * 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases\n * 2. Extract matomo.js from the zip archive\n * 3. Generate integrity checksum:\n * - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * - Add 'sha384-' prefix to the generated hash\n * 4. Add the new integrity hash to the array below (keep the old one)\n * 5. Release this package and update all dependent repositories\n *\n * Notes:\n * - The script will automatically use the matching integrity hash\n * - Old integrity values can be safely removed later if desired\n * - No console errors will occur during the transition\n * - This approach ensures zero analytics downtime during updates\n */\n document.documentElement.appendChild(\n Object.assign(document.createElement('script'), {\n async: true,\n src: new URL('/matomo.js', matomoHost).href,\n crossOrigin: 'anonymous',\n /**\n * To generate checksum:\n * 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`\n * 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`\n * 3. Add sha384 prefix\n * For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes\n */\n integrity: [\n 'sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa', // Matomo v 5.2.0 && Matomo v 5.2.2 with cookies (deprecated, remove after all environments migrate to the cookie-less analytics)\n 'sha384-cT0Nk8wS/smX3tvm0JOiaJhNeO5DbtYoG0ReQ6VlEE5EPNjmbcuZa1NwGwg14Hqa', // Matomo v 5.2.0 && Matomo v 5.2.2 without cookies (cookie-less analytics)\n ].join(' '),\n }),\n )\n}\n\nexport type MatomoConfig = Array<[string, ...unknown[]]>\n\nexport const initMatomo = (matomoHost?: string, customConfig: MatomoConfig = []): void => {\n if (typeof window === 'undefined') {\n // SSR not supported!\n return\n }\n\n const _matomoHost = matomoHost || window?.__env__?.matomoHost || undefined\n\n if (!_matomoHost) {\n // Where Do I send analytics?\n return\n }\n\n if (window._paq) {\n // window._paq has been initialized\n return\n }\n\n window._paq ??= []\n\n const rawConfig = [\n // These are hardcoded values and cannot be changed\n ['setTrackerUrl', new URL('/matomo.php', _matomoHost).href],\n ['requireCookieConsent', true],\n // Add subdomain prefix to page titles to separate analytics by subdomain\n ['setDocumentTitle', window.location.hostname + '/' + (document.title || '')],\n\n // These are custom settings\n ...customConfig,\n\n // These are default settings, will be overwritten if custom set\n ['trackPageView', true],\n ['enableLinkTracking', true],\n ['setSiteId', '1'],\n ['setDomains', [`*.${getDomain()}`]],\n ['enableCrossDomainLinking', true],\n ]\n\n // Map keeps order of keys\n const config = new Map()\n for (const [key, value] of rawConfig) {\n if (!config.has(key)) {\n config.set(key, value)\n }\n }\n\n window?._paq?.push(\n ...Array.from(config.entries())\n .map(([key, value]) => {\n switch (value) {\n case false:\n return false\n case true:\n case undefined:\n return [key]\n default:\n return [key, value]\n }\n })\n .filter((item): item is [string, ...unknown[]] => item !== false),\n )\n\n injectMatomoScript(_matomoHost)\n}\n","import { initMatomo } from './init'\nimport { MatomoEventType } from './type'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\nexport const META_INFO_COOKIE = 'meta-info'\n\nexport const COOKIE_ALLOWED_KEYS = [\n 'LIDO_WIDGET__COOKIES_ALLOWED', // will be deprecated soon\n COOKIE_ALLOWED_MAIN_KEY,\n]\n\nexport const matomoAvailable = (): boolean => {\n return typeof window !== 'undefined' && window._paq !== undefined\n}\n\nconst getCrossDomainCookieClientSide = (key: string): string | null => {\n const defaultValue = null\n\n if (typeof window === 'undefined') {\n return defaultValue\n }\n\n const cookieMatcher = new RegExp(`(^| )${key}=([^;]+)`)\n return (document.cookie.match(cookieMatcher)?.[2] as string) ?? defaultValue\n}\n\nexport const callMatomo = (apiMethod: string, ...args: unknown[]): void => {\n if (!matomoAvailable()) {\n initMatomo()\n }\n\n if (typeof window === 'undefined') {\n return\n }\n\n const customDimensionValue = getCrossDomainCookieClientSide(META_INFO_COOKIE) || 'none'\n window?._paq?.push(['setCustomDimension', 1, customDimensionValue])\n\n window?._paq?.push([apiMethod, ...args])\n}\n\nexport const trackEvent = (...event: MatomoEventType): void => {\n callMatomo('trackEvent', ...event)\n}\n\nexport const trackVisibleContentImpressions = (checkOnScroll = true, timeIntervalInMs = 750): void => {\n callMatomo('trackVisibleContentImpressions', checkOnScroll, timeIntervalInMs)\n}\n\nexport const getDomain = () => {\n return location.hostname.split('.').slice(-2).join('.')\n}\n","export type MatomoEventType = [category: string, action: string, name: string]\n","import { MatomoEventType } from './type'\nimport { callMatomo } from './utils'\n\nexport const wrapWithEventTrack = <A extends unknown[], R>(event: MatomoEventType | void, fn: (...args: A) => R) =>\n event\n ? (...args: A): R => {\n callMatomo('trackEvent', ...event)\n return fn?.(...args)\n }\n : fn\n"],"names":[],"version":3,"file":"index.mjs.map"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "url": "https://github.com/lidofinance/warehouse/issues"
8
8
  },
9
9
  "license": "MIT",
10
- "version": "0.54.1",
10
+ "version": "0.56.0",
11
11
  "files": [
12
12
  "dist"
13
13
  ],
@@ -33,7 +33,7 @@
33
33
  "test": "jest"
34
34
  },
35
35
  "devDependencies": {
36
- "@lidofinance/config-prettier": "~0.54.1",
36
+ "@lidofinance/config-prettier": "~0.56.0",
37
37
  "@types/jest": "^29.2.4",
38
38
  "jest": "^29.3.1",
39
39
  "jest-environment-jsdom": "^28.0.0",