Files
e-ticket/assets/app.js
Serreau Jovann 6438afadbf Add first-party analytics tracker with encrypted transmissions
Core system:
- AnalyticsUniqId entity (visitor identity with device/os/browser parsing)
- AnalyticsEvent entity (page views linked to visitor)
- POST /t endpoint with AES-256-GCM encrypted payloads
- HMAC-SHA256 visitor hash for anti-tampering
- Async processing via Messenger
- JS module: auto page_view tracking, setAuth for logged users
- Encryption key shared via data-k attribute on body
- setAuth only triggers when cookie consent is accepted
- Clean CSP: remove old tracker domains (Cloudflare, Umami)

100% first-party, no cookies, invisible to adblockers, RGPD-friendly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:07 +01:00

41 lines
1.4 KiB
JavaScript

import "./app.scss"
import { initMobileMenu } from "./modules/mobile-menu.js"
import { initTabs } from "./modules/tabs.js"
import { registerEditor } from "./modules/editor.js"
import { initCookieConsent } from "./modules/cookie-consent.js"
import { initEventMap } from "./modules/event-map.js"
import { initCopyUrl } from "./modules/copy-url.js"
import { initSortable } from "./modules/sortable.js"
import { initBilletDesigner } from "./modules/billet-designer.js"
import { initCommissionCalculator } from "./modules/commission-calculator.js"
import { initCart } from "./modules/cart.js"
import { initStripePayment } from "./modules/stripe-payment.js"
import { initShare } from "./modules/share.js"
import { initApiEnvSwitcher } from "./modules/api-env-switcher.js"
import { initAnalytics } from "./modules/analytics.js"
document.addEventListener('DOMContentLoaded', () => {
initMobileMenu()
initTabs()
registerEditor()
initCookieConsent()
initCopyUrl()
initEventMap()
initSortable()
initBilletDesigner()
initCommissionCalculator()
initCart()
initStripePayment()
initShare()
initApiEnvSwitcher()
initAnalytics()
document.querySelectorAll('[data-confirm]').forEach(form => {
form.addEventListener('submit', (e) => {
if (!globalThis.confirm(form.dataset.confirm)) {
e.preventDefault()
}
})
})
})