push
This commit is contained in:
109
innungsapp/apps/admin/instrumentation-client.ts
Normal file
109
innungsapp/apps/admin/instrumentation-client.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
const POSTHOG_KEY = process.env.NEXT_PUBLIC_POSTHOG_KEY
|
||||
const POSTHOG_HOST = process.env.NEXT_PUBLIC_POSTHOG_HOST ?? 'https://eu.i.posthog.com'
|
||||
const COOKIE_CONSENT_KEY = 'innungsapp_cookie_consent'
|
||||
const COOKIE_CONSENT_EVENT = 'innungsapp:cookie-consent-granted'
|
||||
|
||||
export {}
|
||||
|
||||
type PostHogApi = {
|
||||
__SV?: number
|
||||
init?: (token: string, config: Record<string, unknown>) => void
|
||||
capture?: (event: string, properties?: Record<string, unknown>) => void
|
||||
opt_in_capturing?: () => void
|
||||
opt_out_capturing?: () => void
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
posthog?: PostHogApi
|
||||
__innungsappPosthogInitialized?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
function ensurePosthogSnippetLoaded() {
|
||||
const w = window as any
|
||||
if (w.posthog?.__SV) return
|
||||
|
||||
;(function loadSnippet(doc: Document, ph: any) {
|
||||
const base: any = Array.isArray(ph) ? ph : []
|
||||
if (base.__SV) return
|
||||
|
||||
w.posthog = base
|
||||
base._i = base._i || []
|
||||
|
||||
base.init = function init(token: string, config: Record<string, unknown>, name?: string) {
|
||||
const target = name ? (base[name] = base[name] || []) : base
|
||||
|
||||
const setMethod = (obj: any, method: string) => {
|
||||
obj[method] = function methodStub(...args: unknown[]) {
|
||||
obj.push([method, ...args])
|
||||
}
|
||||
}
|
||||
|
||||
const methods = [
|
||||
'capture',
|
||||
'identify',
|
||||
'alias',
|
||||
'group',
|
||||
'set_config',
|
||||
'reset',
|
||||
'register',
|
||||
'register_once',
|
||||
'unregister',
|
||||
'opt_in_capturing',
|
||||
'opt_out_capturing',
|
||||
'has_opted_in_capturing',
|
||||
'has_opted_out_capturing',
|
||||
'isFeatureEnabled',
|
||||
'reloadFeatureFlags',
|
||||
]
|
||||
|
||||
methods.forEach((method) => setMethod(target, method))
|
||||
|
||||
target.people = target.people || []
|
||||
const peopleMethods = ['set', 'set_once', 'unset', 'increment', 'append', 'union', 'track_charge', 'clear_charges', 'delete_user']
|
||||
peopleMethods.forEach((method) => setMethod(target.people, method))
|
||||
|
||||
const script = doc.createElement('script')
|
||||
script.type = 'text/javascript'
|
||||
script.async = true
|
||||
script.src = `${(config.api_host as string).replace('.i.posthog.com', '-assets.i.posthog.com')}/static/array.js`
|
||||
const firstScript = doc.getElementsByTagName('script')[0]
|
||||
if (firstScript?.parentNode) {
|
||||
firstScript.parentNode.insertBefore(script, firstScript)
|
||||
} else {
|
||||
doc.head.appendChild(script)
|
||||
}
|
||||
|
||||
base._i.push([token, config, name])
|
||||
}
|
||||
|
||||
base.__SV = 1
|
||||
})(document, w.posthog || [])
|
||||
}
|
||||
|
||||
function initPosthog() {
|
||||
if (typeof window === 'undefined' || !POSTHOG_KEY) return
|
||||
if (window.__innungsappPosthogInitialized) return
|
||||
|
||||
ensurePosthogSnippetLoaded()
|
||||
|
||||
window.posthog?.init?.(POSTHOG_KEY, {
|
||||
api_host: POSTHOG_HOST,
|
||||
defaults: '2026-01-30',
|
||||
autocapture: false,
|
||||
capture_pageview: false,
|
||||
respect_dnt: true,
|
||||
})
|
||||
|
||||
window.__innungsappPosthogInitialized = true
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined' && POSTHOG_KEY) {
|
||||
const consent = window.localStorage.getItem(COOKIE_CONSENT_KEY)
|
||||
if (consent === 'accepted') {
|
||||
initPosthog()
|
||||
}
|
||||
|
||||
window.addEventListener(COOKIE_CONSENT_EVENT, initPosthog)
|
||||
}
|
||||
Reference in New Issue
Block a user