From 82ff1b878e7c45bec60eb938667d29021f57b2b7 Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 3 Nov 2024 12:14:11 +0100 Subject: [PATCH] Add PostHog Analytics --- apps/readest-app/package.json | 1 + apps/readest-app/src-tauri/tauri.conf.json | 5 ++-- apps/readest-app/src/app/layout.tsx | 13 ++++++---- apps/readest-app/src/context/PHContext.tsx | 14 +++++++++++ pnpm-lock.yaml | 28 ++++++++++++++++++++++ 5 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 apps/readest-app/src/context/PHContext.tsx diff --git a/apps/readest-app/package.json b/apps/readest-app/package.json index 23dcc26b..abda1948 100644 --- a/apps/readest-app/package.json +++ b/apps/readest-app/package.json @@ -28,6 +28,7 @@ "foliate-js": "workspace:*", "js-md5": "^0.8.3", "next": "15.0.1", + "posthog-js": "^1.180.1", "react": "18.3.1", "react-dom": "18.3.1", "react-icons": "^5.3.0", diff --git a/apps/readest-app/src-tauri/tauri.conf.json b/apps/readest-app/src-tauri/tauri.conf.json index 3689ab3f..34177b79 100644 --- a/apps/readest-app/src-tauri/tauri.conf.json +++ b/apps/readest-app/src-tauri/tauri.conf.json @@ -26,10 +26,11 @@ ], "security": { "csp": { - "default-src": "'self' 'unsafe-inline' blob: customprotocol: asset: http://asset.localhost ipc: http://ipc.localhost", + "default-src": "'self' 'unsafe-inline' blob: customprotocol: asset: http://asset.localhost ipc: http://ipc.localhost https://*.sentry.io https://*.posthog.com", "img-src": "'self' blob: data: asset: http://asset.localhost", "style-src": "'self' 'unsafe-inline' blob: asset: http://asset.localhost", - "frame-src": "'self' blob: asset: http://asset.localhost" + "frame-src": "'self' blob: asset: http://asset.localhost", + "script-src": "'self' 'unsafe-inline' 'unsafe-eval' blob: asset: http://asset.localhost https://*.sentry.io https://*.posthog.com" }, "assetProtocol": { "enable": true, diff --git a/apps/readest-app/src/app/layout.tsx b/apps/readest-app/src/app/layout.tsx index e6a0c7b3..5d70a2e8 100644 --- a/apps/readest-app/src/app/layout.tsx +++ b/apps/readest-app/src/app/layout.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import type { Metadata } from 'next'; import { AuthProvider } from '@/context/AuthContext'; import { EnvProvider } from '@/context/EnvContext'; +import { CSPostHogProvider } from '@/context/PHContext'; import './globals.css'; export const metadata: Metadata = { @@ -15,11 +16,13 @@ export default function RootLayout({ children }: { children: React.ReactNode }) - - - {children} - - + + + + {children} + + + ); } diff --git a/apps/readest-app/src/context/PHContext.tsx b/apps/readest-app/src/context/PHContext.tsx new file mode 100644 index 00000000..b6a42a08 --- /dev/null +++ b/apps/readest-app/src/context/PHContext.tsx @@ -0,0 +1,14 @@ +'use client'; +import { ReactNode } from 'react'; +import posthog from 'posthog-js'; +import { PostHogProvider } from 'posthog-js/react'; + +if (typeof window !== 'undefined' && process.env['NEXT_PUBLIC_POSTHOG_KEY']) { + posthog.init(process.env['NEXT_PUBLIC_POSTHOG_KEY'], { + api_host: process.env['NEXT_PUBLIC_POSTHOG_HOST'], + person_profiles: 'always', + }); +} +export const CSPostHogProvider = ({ children }: { children: ReactNode }) => { + return {children}; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1fa9536e..efd16d46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,6 +71,9 @@ importers: next: specifier: 15.0.1 version: 15.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + posthog-js: + specifier: ^1.180.1 + version: 1.180.1 react: specifier: 18.3.1 version: 18.3.1 @@ -1787,6 +1790,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2736,6 +2742,12 @@ packages: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} + posthog-js@1.180.1: + resolution: {integrity: sha512-LV65maVrpqkAh0wu32YvU7FpCSEjg6o+sZFYCs1+6tnEa9VvXuz8J6ReLiyRpJABI4j1qX/PB2jaVY5tDbLalQ==} + + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3348,6 +3360,9 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -5523,6 +5538,8 @@ snapshots: dependencies: reusify: 1.0.4 + fflate@0.4.8: {} + fflate@0.8.2: {} file-entry-cache@8.0.0: @@ -6479,6 +6496,15 @@ snapshots: picocolors: 1.1.0 source-map-js: 1.2.1 + posthog-js@1.180.1: + dependencies: + core-js: 3.38.1 + fflate: 0.4.8 + preact: 10.24.3 + web-vitals: 4.2.4 + + preact@10.24.3: {} + prelude-ls@1.2.1: {} preserve@0.2.0: {} @@ -7175,6 +7201,8 @@ snapshots: v8-compile-cache-lib@3.0.1: optional: true + web-vitals@4.2.4: {} + webidl-conversions@3.0.1: optional: true