takt

Référence API

Surface publique du package @vskstudio/takt-core (intégration npm). Côté snippet, seule la fonction track est exposée. Voir la section Global window.takt en bas de page.

init(options)

Crée et stocke l’instance partagée, puis (par défaut) câble la navigation SPA et émet le pageview initial. À appeler une seule fois au démarrage. Retourne l’instance Analytics. init() est idempotent : un nouvel appel dispose proprement les écouteurs de l’instance précédente avant d’en recréer une.

function init(options?: {
  domain?: string
  endpoint?: string          // défaut: https://taktlytics.com/api/event
  scriptOrigin?: string      // origine dont dériver {origin}/api/event
  respectDnt?: boolean       // défaut: true
  excludeLocalhost?: boolean // défaut: true
  exclude?: string[]         // préfixes de chemin jamais suivis (borné au segment)
  enabled?: boolean          // défaut: true
  debug?: boolean            // défaut: false
  sampleRate?: number        // défaut: 1
  trackQuery?: boolean       // défaut: false (query + hash strippés)
  queryParams?: string[]     // allowlist de paramètres à conserver
  scrubUrl?: (url: string) => string // page, referrer, url des liens sortants et téléchargements
  redactRoutes?: string[]    // motifs de routes envoyés à la place du chemin réel
  redactUndecodablePaths?: boolean // vrai : chemin illisible masqué quand une route existe
  routeTemplates?: boolean   // défaut: false (chaque page envoyée en gabarit)
  routeTemplate?: () => string | null | undefined // gabarit de la route courante
  auto?: boolean             // défaut: true (pageview auto + SPA)
  outbound?: boolean         // défaut: false
  files?: boolean            // défaut: false
  fileExtensions?: string[]  // extensions suivies si files=true
  notFound?: boolean         // défaut: false (event 404 sur les pages d'erreur)
  tagged?: boolean           // défaut: false (events custom depuis data-takt-event)
}): Analytics
OptionTypeDéfautRôle
domainstringlocation.hostnameIdentifiant du site
endpointstringhttps://taktlytics.com/api/eventURL d’ingestion, qui l’emporte sur scriptOrigin
scriptOriginstringhttps://taktlytics.comOrigine first-party dont dériver {origin}/api/event
respectDntbooleantrueRespecte Do Not Track et Global Privacy Control
excludeLocalhostbooleantrueIgnore localhost / IP privées
excludestring[]aucunPréfixes de chemin jamais suivis, ex. ['/app','/account'] (borné au segment)
enabledbooleantrueCoupe tout envoi quand false
debugbooleanfalseTrace chaque event dans la console
sampleRatenumber1Échantillonnage (0 à 1) des events envoyés
trackQuerybooleanfalseConserve la query string telle quelle
queryParamsstring[]aucunParamètres de query à garder (allowlist)
scrubUrl(url) => urlaucunFonction de nettoyage d’URL sur mesure, appliquée aussi au url des events Outbound Link: Click et File Download
redactRoutesstring[]aucunMotifs de routes sensibles : un chemin qui correspond part sous la forme du motif, ex. /verify/abc123 → /verify/[token] (depuis 0.10.0)
redactUndecodablePathsbooleantrueChemin illisible (échappement % mal formé, UTF-8 invalide) : /[redacted] dès qu’une route est configurée ; false le compare aux routes comme les autres, voir Chemins illisibles (depuis 0.12.0)
routeTemplatesbooleanfalseEnvoie chaque page sous la forme de son gabarit de route ; exige routeTemplate (depuis 0.10.0)
routeTemplate() => string \| nullaucunRenvoie le gabarit de la route courante (/blog/[slug], /users/:id), lu quand routeTemplates est actif (depuis 0.10.0)
autobooleantruePageview initial + suivi SPA
outboundbooleanfalseSuit les liens sortants
filesbooleanfalseSuit les téléchargements
fileExtensionsstring[]pdf, zip, dmg, xlsx, csv, doc, docx, ppt, pptx, rar, 7z, gz, mp3, mp4, wav, avi, mov, exe, apk, mkv, txtExtensions de fichiers suivies
notFoundbooleanfalseÉmet un event 404 sur les pages d’erreur (snippet : data-auto="404")
taggedbooleanfalseEvents custom depuis les éléments [data-takt-event] (snippet : data-auto="tagged")
Par défaut, la query string et le hash sont strippés de toutes les URLs (page, referrer, liens sortants) avant l'envoi : un token ou un e-mail dans ?.../#... n'atteint jamais l'analytics. trackQuery conserve la query entière, queryParams n'en garde qu'une allowlist, scrubUrl remplace toute la logique. Ta fonction reçoit aussi la propriété url des events Outbound Link: Click et File Download (origine et chemin), pour masquer un identifiant glissé dans le chemin d'un lien sortant ou d'un fichier.

Le chemin, lui, part en clair. redactRoutes remplace le chemin des routes listées par leur motif (page, referrer interne, liens sortants et téléchargements, events 404). routeTemplates envoie toutes les pages en gabarit via le résolveur routeTemplate, que les wrappers de framework fournissent ; sur un site public, il fusionne tous les articles en une ligne. Quand le résolveur ne renvoie rien, redactRoutes s’applique quand même. Détails et syntaxe des motifs dans Masquage de routes.

init({ domain: 'exemple.fr', redactRoutes: ['/verify/[token]', '/reset/:code'] })
Avec le snippet CDN, l'init est faite pour toi à partir des attributs data-*, dont data-script-origin, data-endpoint, data-enabled, data-respect-dnt, data-sample-rate, data-track-query et data-query-params. Les captures automatiques (outbound, files, tagged, notFound, fileExtensions) demandent le bundle takt.auto.js et passent par data-auto / data-downloads-ext. Seuls auto, debug, scrubUrl, exclude, redactRoutes, routeTemplates et routeTemplate restent réservés à npm.

track(name, options)

Émet un événement. Le nom pageview est réservé (utilise pageview()). Le type public de track() n’accepte que props :

function track(name: string, options?: { props?: Record<string, string> }): void

track('Signup', { props: { plan: 'pro' } })

Les valeurs de props sont des chaînes (les non-chaînes sont converties) ; une valeur vide ('', null, undefined) est ignorée. Les props sont plafonnées à 30 clés, clés ≤ 64 caractères, valeurs ≤ 1024 caractères ; au-delà, l’event part quand même et un avertissement console est émis une fois.

Pour attacher du revenue, passe par l’instance retournée par init() (dont la méthode track accepte revenue, avec un montant en chaîne). Le montant doit matcher \d+(\.\d{1,2})? et la devise être un code de 3 lettres, sinon le revenue est abandonné (avec avertissement) :

const takt = init({ domain: 'exemple.fr' })

takt.track('Purchase', {
  props: { plan: 'pro' },
  revenue: { amount: '29', currency: 'EUR' }
})

Le format exact envoyé sur le réseau est décrit dans Events & payload.

pageview()

Émet manuellement une page vue. Rarement nécessaire : init() suit déjà la navigation côté client : pushState, replaceState, popstate et hashchange déclenchent tous un pageview automatique.

function pageview(): void

optOut() / optIn() / isOptedOut()

Pilotent le consentement par visiteur. Le choix est persisté dans localStorage (takt_ignore).

function optOut(): void        // pose takt_ignore='1', aucun event envoyé
function optIn(): void         // retire le drapeau, reprend le tracking
function isOptedOut(): boolean // true si le visiteur a refusé la mesure

Ces trois fonctions n’ont besoin d’aucune instance : elles marchent avant init() (une bannière de consentement rendue en premier), et toute instance créée ensuite respecte le choix. Côté serveur, sans localStorage, elles ne font rien et isOptedOut() renvoie false. L’instance retournée par init() ou createTakt() expose les mêmes méthodes optOut(), optIn() et isOptedOut(), branchées sur le même état.

Voir Vie privée pour l’ordre exact des garde-fous.

Global window.takt

Côté snippet, seule la fonction track est exposée sur le global. Elle accepte props et revenue (montant en chaîne) :

window.takt('Signup', { props: { plan: 'pro' } })
window.takt('Purchase', { revenue: { amount: '29', currency: 'EUR' } })
Le global n'expose pas optOut/optIn/pageview. Côté snippet, l'opt-out se pilote directement via localStorage (clé takt_ignore), voir Vie privée. Le pageview, lui, est automatique (initial + navigation SPA).