@lidofinance/analytics-matomo 0.49.0 → 0.51.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 +23 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +23 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -80,33 +80,24 @@ const $ef5c629b17efc154$export$3e8733322718eb9 = ()=>{
|
|
|
80
80
|
let $8ec118068c18cb0c$var$futureInitMatomoHost = undefined;
|
|
81
81
|
const $8ec118068c18cb0c$var$injectMatomoScript = (matomoHost)=>{
|
|
82
82
|
/**
|
|
83
|
-
* # How to
|
|
83
|
+
* # How to update matomo
|
|
84
84
|
*
|
|
85
|
-
*
|
|
86
|
-
* you can just update this package & apps:
|
|
85
|
+
* To safely update Matomo without analytics downtime:
|
|
87
86
|
*
|
|
88
|
-
* 1.
|
|
89
|
-
* 2.
|
|
90
|
-
* 3.
|
|
91
|
-
*
|
|
87
|
+
* 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases
|
|
88
|
+
* 2. Extract matomo.js from the zip archive
|
|
89
|
+
* 3. Generate integrity checksum:
|
|
90
|
+
* - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
91
|
+
* - Add 'sha384-' prefix to the generated hash
|
|
92
|
+
* 4. Add the new integrity hash to the array below (keep the old one)
|
|
93
|
+
* 5. Release this package and update all dependent repositories
|
|
92
94
|
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
|
|
99
|
-
* 2. Keep old integrity and insert new one
|
|
100
|
-
* 3. Release package & update all apps
|
|
101
|
-
* 4. Update matomo
|
|
102
|
-
* 5. Delete block with old checksum
|
|
103
|
-
* 6. Release package & update all apps
|
|
104
|
-
*
|
|
105
|
-
* This will only create these errors in developer console, so only Sentry may be alarmed:
|
|
106
|
-
* > Failed to find a valid digest in the 'integrity' attribute for resource $URL with computed
|
|
107
|
-
* > SHA-384 integrity '$SHA'. The resource has been blocked.
|
|
108
|
-
*/ // Matomo v 5.0.1
|
|
109
|
-
document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
95
|
+
* Notes:
|
|
96
|
+
* - The script will automatically use the matching integrity hash
|
|
97
|
+
* - Old integrity values can be safely removed later if desired
|
|
98
|
+
* - No console errors will occur during the transition
|
|
99
|
+
* - This approach ensures zero analytics downtime during updates
|
|
100
|
+
*/ document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
110
101
|
async: true,
|
|
111
102
|
src: new URL("/matomo.js", matomoHost).href,
|
|
112
103
|
crossOrigin: "anonymous",
|
|
@@ -116,20 +107,9 @@ const $8ec118068c18cb0c$var$injectMatomoScript = (matomoHost)=>{
|
|
|
116
107
|
* 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
117
108
|
* 3. Add sha384 prefix
|
|
118
109
|
* For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
|
|
119
|
-
*/ integrity:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
123
|
-
async: true,
|
|
124
|
-
src: new URL("/matomo.js", matomoHost).href,
|
|
125
|
-
crossOrigin: "anonymous",
|
|
126
|
-
/**
|
|
127
|
-
* To generate checksum:
|
|
128
|
-
* 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`
|
|
129
|
-
* 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
130
|
-
* 3. Add sha384 prefix
|
|
131
|
-
* For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
|
|
132
|
-
*/ integrity: "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
|
|
110
|
+
*/ integrity: [
|
|
111
|
+
"sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
|
|
112
|
+
].join(" ")
|
|
133
113
|
}));
|
|
134
114
|
};
|
|
135
115
|
const $8ec118068c18cb0c$export$6ec25100f86fa29d = (matomoHost, customConfig = [])=>{
|
|
@@ -155,6 +135,11 @@ const $8ec118068c18cb0c$export$6ec25100f86fa29d = (matomoHost, customConfig = []
|
|
|
155
135
|
"requireCookieConsent",
|
|
156
136
|
true
|
|
157
137
|
],
|
|
138
|
+
// Add subdomain prefix to page titles to separate analytics by subdomain
|
|
139
|
+
[
|
|
140
|
+
"setDocumentTitle",
|
|
141
|
+
window.location.hostname + "/" + (document.title || "")
|
|
142
|
+
],
|
|
158
143
|
// These are custom settings
|
|
159
144
|
...customConfig,
|
|
160
145
|
// These are default settings, will be overwritten if custom set
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEGO,MAAM,4CAA2B;AACjC,MAAM,4CAA0B;AAEhC,MAAM,4CAAsB;IACjC;IACA;CACD;AAEM,MAAM,4CAAkB;IAC7B,OAAO,OAAO,WAAW,eAAe,OAAO,SAAS;AAC1D;AAEA,MAAM,uDAAiC,CAAC;IACtC,MAAM,eAAe;IAErB,IAAI,OAAO,WAAW,aACpB,OAAO;IAGT,MAAM,gBAAgB,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC;IACtD,OAAO,AAAC,SAAS,OAAO,MAAM,gBAAgB,CAAC,EAAE,IAAe;AAClE;AAEO,MAAM,4CAAqB;IAChC,IAAI,OAAO,WAAW,aACpB,OAAO;IAGT,KAAK,MAAM,OAAO,0CAAqB;QACrC,MAAM,cAAc,qDAA+B;QACnD,MAAM,gBAAgB,CAAC,CAAE,CAAA,eAAe,gBAAgB,yCAAuB;QAE/E,IAAI,eACF,OAAO;IAEX;IAEA,OAAO;AACT;AAEO,MAAM,4CAAa,CAAC,WAAmB,GAAG;IAC/C,IAAI,CAAC,6CACH,CAAA,GAAA,yCAAS;IAGX,IAAI,OAAO,WAAW,eAAe,CAAC,6CACpC;IAGF,QAAQ,MAAM,KAAK;QAAC;WAAc;KAAK;AACzC;AAEO,MAAM,4CAAa,CAAC,GAAG;IAC5B,0CAAW,iBAAiB;AAC9B;AAEO,MAAM,4CAAiC,CAAC,gBAAgB,IAAI,EAAE,mBAAmB,GAAG;IACzF,0CAAW,kCAAkC,eAAe;AAC9D;AAEO,MAAM,2CAAY;IACvB,OAAO,SAAS,SAAS,MAAM,KAAK,MAAM,IAAI,KAAK;AACrD;;;ADxDA,2DAA2D;AAC3D,+CAA+C;AAC/C,IAAI,6CAA2C;AAE/C,MAAM,2CAAqB,CAAC;IAC1B
|
|
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 { MatomoEventType } from './type'\nimport { initMatomo } from './init'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\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 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.map
CHANGED
|
@@ -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;AAEvD,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,IAUlE,CAAA;AAED,OAAO,MAAM,gEAA0C,IAEtD,CAAA;AAED,OAAO,MAAM,wFAAiF,IAE7F,CAAA;AAED,OAAO,MAAM,uBAEZ,CAAA;AC/DD,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;
|
|
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;AAEvD,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,IAUlE,CAAA;AAED,OAAO,MAAM,gEAA0C,IAEtD,CAAA;AAED,OAAO,MAAM,wFAAiF,IAE7F,CAAA;AAED,OAAO,MAAM,uBAEZ,CAAA;AC/DD,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"}
|
package/dist/index.mjs
CHANGED
|
@@ -64,33 +64,24 @@ const $427566b8f1d3367d$export$3e8733322718eb9 = ()=>{
|
|
|
64
64
|
let $76adf94c93f4a7f4$var$futureInitMatomoHost = undefined;
|
|
65
65
|
const $76adf94c93f4a7f4$var$injectMatomoScript = (matomoHost)=>{
|
|
66
66
|
/**
|
|
67
|
-
* # How to
|
|
67
|
+
* # How to update matomo
|
|
68
68
|
*
|
|
69
|
-
*
|
|
70
|
-
* you can just update this package & apps:
|
|
69
|
+
* To safely update Matomo without analytics downtime:
|
|
71
70
|
*
|
|
72
|
-
* 1.
|
|
73
|
-
* 2.
|
|
74
|
-
* 3.
|
|
75
|
-
*
|
|
71
|
+
* 1. Download the new Matomo version zip from https://github.com/matomo-org/matomo/releases
|
|
72
|
+
* 2. Extract matomo.js from the zip archive
|
|
73
|
+
* 3. Generate integrity checksum:
|
|
74
|
+
* - Run: `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
75
|
+
* - Add 'sha384-' prefix to the generated hash
|
|
76
|
+
* 4. Add the new integrity hash to the array below (keep the old one)
|
|
77
|
+
* 5. Release this package and update all dependent repositories
|
|
76
78
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
|
|
83
|
-
* 2. Keep old integrity and insert new one
|
|
84
|
-
* 3. Release package & update all apps
|
|
85
|
-
* 4. Update matomo
|
|
86
|
-
* 5. Delete block with old checksum
|
|
87
|
-
* 6. Release package & update all apps
|
|
88
|
-
*
|
|
89
|
-
* This will only create these errors in developer console, so only Sentry may be alarmed:
|
|
90
|
-
* > Failed to find a valid digest in the 'integrity' attribute for resource $URL with computed
|
|
91
|
-
* > SHA-384 integrity '$SHA'. The resource has been blocked.
|
|
92
|
-
*/ // Matomo v 5.0.1
|
|
93
|
-
document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
79
|
+
* Notes:
|
|
80
|
+
* - The script will automatically use the matching integrity hash
|
|
81
|
+
* - Old integrity values can be safely removed later if desired
|
|
82
|
+
* - No console errors will occur during the transition
|
|
83
|
+
* - This approach ensures zero analytics downtime during updates
|
|
84
|
+
*/ document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
94
85
|
async: true,
|
|
95
86
|
src: new URL("/matomo.js", matomoHost).href,
|
|
96
87
|
crossOrigin: "anonymous",
|
|
@@ -100,20 +91,9 @@ const $76adf94c93f4a7f4$var$injectMatomoScript = (matomoHost)=>{
|
|
|
100
91
|
* 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
101
92
|
* 3. Add sha384 prefix
|
|
102
93
|
* For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
|
|
103
|
-
*/ integrity:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
document.documentElement.appendChild(Object.assign(document.createElement("script"), {
|
|
107
|
-
async: true,
|
|
108
|
-
src: new URL("/matomo.js", matomoHost).href,
|
|
109
|
-
crossOrigin: "anonymous",
|
|
110
|
-
/**
|
|
111
|
-
* To generate checksum:
|
|
112
|
-
* 1. Download matomo.js via `curl -O https://matomo.lido.fi/matomo.js`
|
|
113
|
-
* 2. Calculate checkusm via `cat matomo.js | openssl dgst -sha384 -binary | openssl base64 -A`
|
|
114
|
-
* 3. Add sha384 prefix
|
|
115
|
-
* For other options see https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity#tools_for_generating_sri_hashes
|
|
116
|
-
*/ integrity: "sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
|
|
94
|
+
*/ integrity: [
|
|
95
|
+
"sha384-zEaC37u+jplyCMnmF4H7LxCC9kIFKvwV32PWyiLIIIUVOrm1W8+ljIA2kUa/cTHa"
|
|
96
|
+
].join(" ")
|
|
117
97
|
}));
|
|
118
98
|
};
|
|
119
99
|
const $76adf94c93f4a7f4$export$6ec25100f86fa29d = (matomoHost, customConfig = [])=>{
|
|
@@ -139,6 +119,11 @@ const $76adf94c93f4a7f4$export$6ec25100f86fa29d = (matomoHost, customConfig = []
|
|
|
139
119
|
"requireCookieConsent",
|
|
140
120
|
true
|
|
141
121
|
],
|
|
122
|
+
// Add subdomain prefix to page titles to separate analytics by subdomain
|
|
123
|
+
[
|
|
124
|
+
"setDocumentTitle",
|
|
125
|
+
window.location.hostname + "/" + (document.title || "")
|
|
126
|
+
],
|
|
142
127
|
// These are custom settings
|
|
143
128
|
...customConfig,
|
|
144
129
|
// These are default settings, will be overwritten if custom set
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;AEGO,MAAM,4CAA2B;AACjC,MAAM,4CAA0B;AAEhC,MAAM,4CAAsB;IACjC;IACA;CACD;AAEM,MAAM,4CAAkB;IAC7B,OAAO,OAAO,WAAW,eAAe,OAAO,SAAS;AAC1D;AAEA,MAAM,uDAAiC,CAAC;IACtC,MAAM,eAAe;IAErB,IAAI,OAAO,WAAW,aACpB,OAAO;IAGT,MAAM,gBAAgB,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC;IACtD,OAAO,AAAC,SAAS,OAAO,MAAM,gBAAgB,CAAC,EAAE,IAAe;AAClE;AAEO,MAAM,4CAAqB;IAChC,IAAI,OAAO,WAAW,aACpB,OAAO;IAGT,KAAK,MAAM,OAAO,0CAAqB;QACrC,MAAM,cAAc,qDAA+B;QACnD,MAAM,gBAAgB,CAAC,CAAE,CAAA,eAAe,gBAAgB,yCAAuB;QAE/E,IAAI,eACF,OAAO;IAEX;IAEA,OAAO;AACT;AAEO,MAAM,4CAAa,CAAC,WAAmB,GAAG;IAC/C,IAAI,CAAC,6CACH,CAAA,GAAA,yCAAS;IAGX,IAAI,OAAO,WAAW,eAAe,CAAC,6CACpC;IAGF,QAAQ,MAAM,KAAK;QAAC;WAAc;KAAK;AACzC;AAEO,MAAM,4CAAa,CAAC,GAAG;IAC5B,0CAAW,iBAAiB;AAC9B;AAEO,MAAM,4CAAiC,CAAC,gBAAgB,IAAI,EAAE,mBAAmB,GAAG;IACzF,0CAAW,kCAAkC,eAAe;AAC9D;AAEO,MAAM,2CAAY;IACvB,OAAO,SAAS,SAAS,MAAM,KAAK,MAAM,IAAI,KAAK;AACrD;;;ADxDA,2DAA2D;AAC3D,+CAA+C;AAC/C,IAAI,6CAA2C;AAE/C,MAAM,2CAAqB,CAAC;IAC1B
|
|
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 { MatomoEventType } from './type'\nimport { initMatomo } from './init'\n\nexport const COOKIE_ALLOWED_VALUE_YES = 'yes'\nexport const COOKIE_ALLOWED_MAIN_KEY = 'cookie-allowed'\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 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.
|
|
10
|
+
"version": "0.51.0",
|
|
11
11
|
"files": [
|
|
12
12
|
"dist"
|
|
13
13
|
],
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@lidofinance/config-prettier": "~0.
|
|
37
|
+
"@lidofinance/config-prettier": "~0.51.0",
|
|
38
38
|
"@types/jest": "^29.2.4",
|
|
39
39
|
"jest": "^29.3.1",
|
|
40
40
|
"jest-environment-jsdom": "^28.0.0",
|