diff --git a/package-lock.json b/package-lock.json index 7a67136fd5..adc0688bd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "echarts": "^5.4.3", "logrocket": "^5.0.1", "nanoid": "^4.0.2", + "plausible-tracker": "^0.3.8", "pretty-bytes": "^6.1.1", "prismjs": "^1.29.0", "svelte-confetti": "^1.3.0", @@ -7246,6 +7247,14 @@ "pathe": "^1.1.0" } }, + "node_modules/plausible-tracker": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/plausible-tracker/-/plausible-tracker-0.3.8.tgz", + "integrity": "sha512-lmOWYQ7s9KOUJ1R+YTOR3HrjdbxIS2Z4de0P/Jx2dQPteznJl2eX3tXxKClpvbfyGP59B5bbhW8ftN59HbbFSg==", + "engines": { + "node": ">=10" + } + }, "node_modules/playwright": { "version": "1.38.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", diff --git a/package.json b/package.json index 776c9f173f..f98d98fd94 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "echarts": "^5.4.3", "logrocket": "^5.0.1", "nanoid": "^4.0.2", + "plausible-tracker": "^0.3.8", "pretty-bytes": "^6.1.1", "prismjs": "^1.29.0", "svelte-confetti": "^1.3.0", diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index a94c30b3a5..2b87134f8a 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -1,26 +1,58 @@ +import Analytics, { type AnalyticsPlugin } from 'analytics'; +import googleAnalytics from '@analytics/google-analytics'; +import googleTagManager from '@analytics/google-tag-manager'; +import Plausible from 'plausible-tracker'; +import { get } from 'svelte/store'; import { page } from '$app/stores'; import { user } from '$lib/stores/user'; import { ENV, MODE, VARS, isCloud } from '$lib/system'; -import googleAnalytics from '@analytics/google-analytics'; import { AppwriteException } from '@appwrite.io/console'; -import googleTagManager from '@analytics/google-tag-manager'; -import Analytics from 'analytics'; -import { get } from 'svelte/store'; +import { browser } from '$app/environment'; + +function plausible(domain: string): AnalyticsPlugin { + const instance = Plausible({ + domain + }); + return { + name: 'analytics-plugin-plausible', + page: ({ payload }) => { + instance.trackPageview({ + url: payload.properties.path, + referrer: payload.properties.referrer, + deviceWidth: payload.properties.width + }); + }, + track: ({ payload }) => { + instance.trackEvent( + payload.event, + { + props: payload.properties + }, + { + url: payload.properties.path, + deviceWidth: payload.properties.width + } + ); + }, + loaded: () => true + }; +} const analytics = Analytics({ app: 'appwrite', - plugins: [ - googleAnalytics({ - measurementIds: [VARS.GOOGLE_ANALYTICS || 'G-R4YJ9JN8L4'] - }), - ...(isCloud + plugins: + isCloud && browser ? [ + plausible('cloud.appwrite.io'), googleTagManager({ containerId: [VARS.GOOGLE_TAG || 'GTM-P3T9TBV'] }) ] - : []) - ] + : [ + googleAnalytics({ + measurementIds: [VARS.GOOGLE_ANALYTICS || 'G-R4YJ9JN8L4'] + }) + ] }); export function trackEvent(name: string, data: object = null): void {