journey-footprints
Version:
Lightweight tracking library for capturing session and UTM data.
443 lines (316 loc) • 12.6 kB
Markdown
# JourneyFootprints.js
> English | [Português](#português) | [Español](#español)
## English
Lightweight JavaScript tracker focused on capturing session and UTM data. It runs in browsers and can be consumed via CDN or installed through npm, pnpm or yarn.
### Features
- Capture `sessionId`, `user` and language
- Read UTM parameters from the URL or accept them explicitly
- Send events to a configurable endpoint
- Tiny footprint and framework agnostic
- **Auto-collect browser, OS, device, screen and viewport info**
- **Auto-collect referrer, page title, and timezone**
- **Auto-capture ad click IDs (gclid, fbclid, msclkid, etc.)**
### Installation
```bash
npm install journey-footprints
# or
pnpm add journey-footprints
# or
yarn add journey-footprints
```
#### CDN
```html
<script src="https://unpkg.com/journey-footprints/dist/index.global.js"></script>
<script>
const tracker = JourneyFootprints.createFootprints({ user: '42' });
tracker.track('page_view');
</script>
```
### Usage
#### React
```jsx
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints({ user: '42' });
tracker.track('page_view');
```
#### Vue (Composition API)
Use the tracker inside Vue's Composition API by creating it within a `<script setup>` block and tracking events on a lifecycle hook:
```vue
<script setup>
import { createFootprints } from 'journey-footprints';
import { onMounted } from 'vue';
const tracker = createFootprints();
onMounted(() => {
tracker.track('page_view');
});
</script>
```
#### Svelte
```svelte
<script>
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints();
tracker.track('page_view');
</script>
```
### API
```ts
createFootprints(options?: {
endpoint?: string;
sessionId?: string | null;
user?: string;
utmSource?: string;
utmMedium?: string;
utmCampaign?: string;
utmTerm?: string;
utmContent?: string;
language?: string;
})
```
Returns a tracker with methods:
- `track(event, data?)` – send an event
- `setUser(user)`
- `setSessionId(sessionId)`
- `getSessionId()`
Language defaults to the browser language when not provided.
### Auto-collected data
Each `track()` call automatically includes:
| Field | Description |
|-------|-------------|
| `eventTime` | ISO 8601 timestamp |
| `page` | Current pathname + search |
| `referrer` | Document referrer |
| `title` | Page title |
| `browser` | Name and version (Chrome, Firefox, Edge, Safari) |
| `os` | Name and version (Windows, macOS, Linux, Android, iOS) |
| `device` | Type (desktop/mobile/tablet), brand and model |
| `screen` | Width, height and device pixel ratio |
| `viewport` | Inner width and height |
| `timezoneOffset` | Minutes from UTC |
| `clids` | Ad click IDs from URL (gclid, fbclid, msclkid, ttclid, li_fat_id, twclid, dclid) |
### Event list
Common events you can track include:
**Analytics & Tracking:** `first_visit`, `session_start`, `user_engagement`, `page_view`, `page_redirect`, `view_search_results`, `health_check`
**E-commerce:** `add_payment_info`, `add_shipping_info`, `add_to_cart`, `add_to_wishlist`, `begin_checkout`, `purchase`, `refund`, `remove_from_cart`, `select_item`, `select_promotion`, `view_cart`, `view_item`, `view_item_list`, `view_promotion`
**Leads & Conversions:** `generate_lead`, `lead`, `qualify_lead`, `disqualify_lead`, `working_lead`, `close_convert_lead`, `close_unconvert_lead`, `emailCapture`
**User Actions:** `login`, `logout`, `sign_up`, `apply_job`, `contact`, `register_event`, `email_view`, `chat`, `video_call`, `audio_call`, `image_upload`
**UI Interactions:** `click`, `button_click`, `scroll`, `form_submission`, `input_focus`, `modal_open`, `lightbox_open`, `tooltip_click`, `file_download`
**Media:** `video_play`, `video_start`, `video_progress`, `video_complete`
**Learning:** `tutorial_begin`, `tutorial_complete`
**Ads:** `ad_view`, `ad_click`
**DevOps:** `deploy`, `custom_event`
### Testing with fake data
```bash
npm test
```
The tests use a fake `fetch` implementation to validate event delivery without relying on a real server.
---
## Português
Biblioteca JavaScript leve focada na captura de dados de sessão e parâmetros UTM. Ela roda no navegador e pode ser consumida via CDN ou instalada com npm, pnpm ou yarn.
### Recursos
- Captura `sessionId`, `user` e idioma
- Lê parâmetros UTM da URL ou os aceita explicitamente
- Envia eventos para um endpoint configurável
- Pequeno e agnóstico de framework
- **Coleta automática de browser, OS, dispositivo, tela e viewport**
- **Coleta automática de referrer, título da página e timezone**
- **Captura automática de IDs de clique de anúncios (gclid, fbclid, msclkid, etc.)**
### Instalação
```bash
npm install journey-footprints
# ou
pnpm add journey-footprints
# ou
yarn add journey-footprints
```
#### CDN
```html
<script src="https://unpkg.com/journey-footprints/dist/index.global.js"></script>
<script>
const tracker = JourneyFootprints.createFootprints({ user: '42' });
tracker.track('page_view');
</script>
```
## Uso
### React
```jsx
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints({ user: '42' });
tracker.track('page_view');
```
### Vue (API de Composição)
Use o tracker com a API de Composição do Vue criando-o dentro de um bloco `<script setup>` e rastreando eventos em um hook de ciclo de vida:
```vue
<script setup>
import { createFootprints } from 'journey-footprints';
import { onMounted } from 'vue';
const tracker = createFootprints();
onMounted(() => {
tracker.track('page_view');
});
</script>
```
### Svelte
```svelte
<script>
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints();
tracker.track('page_view');
</script>
```
## API
```ts
createFootprints(options?: {
endpoint?: string;
sessionId?: string | null;
user?: string;
utmSource?: string;
utmMedium?: string;
utmCampaign?: string;
utmTerm?: string;
utmContent?: string;
language?: string;
})
```
Retorna um rastreador com métodos:
- `track(event, data?)` – envia um evento
- `setUser(user)`
- `setSessionId(sessionId)`
- `getSessionId()`
O idioma padrão é o do navegador quando não informado.
### Dados coletados automaticamente
Cada chamada `track()` inclui automaticamente:
| Campo | Descrição |
|-------|-----------|
| `eventTime` | Timestamp ISO 8601 |
| `page` | Pathname + search atual |
| `referrer` | Referrer do documento |
| `title` | Título da página |
| `browser` | Nome e versão (Chrome, Firefox, Edge, Safari) |
| `os` | Nome e versão (Windows, macOS, Linux, Android, iOS) |
| `device` | Tipo (desktop/mobile/tablet), marca e modelo |
| `screen` | Largura, altura e device pixel ratio |
| `viewport` | Largura e altura interna |
| `timezoneOffset` | Minutos em relação ao UTC |
| `clids` | IDs de clique de anúncios da URL (gclid, fbclid, msclkid, ttclid, li_fat_id, twclid, dclid) |
### Eventos
Eventos comuns que você pode rastrear incluem:
**Analytics & Rastreamento:** `first_visit`, `session_start`, `user_engagement`, `page_view`, `page_redirect`, `view_search_results`, `health_check`
**E-commerce:** `add_payment_info`, `add_shipping_info`, `add_to_cart`, `add_to_wishlist`, `begin_checkout`, `purchase`, `refund`, `remove_from_cart`, `select_item`, `select_promotion`, `view_cart`, `view_item`, `view_item_list`, `view_promotion`
**Leads & Conversões:** `generate_lead`, `lead`, `qualify_lead`, `disqualify_lead`, `working_lead`, `close_convert_lead`, `close_unconvert_lead`, `emailCapture`
**Ações do Usuário:** `login`, `logout`, `sign_up`, `apply_job`, `contact`, `register_event`, `email_view`, `chat`, `video_call`, `audio_call`, `image_upload`
**Interações de UI:** `click`, `button_click`, `scroll`, `form_submission`, `input_focus`, `modal_open`, `lightbox_open`, `tooltip_click`, `file_download`
**Mídia:** `video_play`, `video_start`, `video_progress`, `video_complete`
**Aprendizado:** `tutorial_begin`, `tutorial_complete`
**Anúncios:** `ad_view`, `ad_click`
**DevOps:** `deploy`, `custom_event`
## Testes com dados fictícios
```bash
npm test
```
Os testes utilizam uma implementação fictícia de `fetch` para validar o envio de eventos sem depender de um servidor real.
---
## Español
Rastreador ligero de JavaScript enfocado en capturar datos de sesión y parámetros UTM. Funciona en navegadores y puede consumirse mediante CDN o instalarse con npm, pnpm o yarn.
### Características
- Captura `sessionId`, `user` e idioma
- Lee parámetros UTM de la URL o los acepta explícitamente
- Envía eventos a un endpoint configurable
- Huella pequeña y agnóstico del framework
- **Recopilación automática de navegador, SO, dispositivo, pantalla y viewport**
- **Recopilación automática de referrer, título de página y zona horaria**
- **Captura automática de IDs de clic de anuncios (gclid, fbclid, msclkid, etc.)**
### Instalación
```bash
npm install journey-footprints
# o
pnpm add journey-footprints
# o
yarn add journey-footprints
```
#### CDN
```html
<script src="https://unpkg.com/journey-footprints/dist/index.global.js"></script>
<script>
const tracker = JourneyFootprints.createFootprints({ user: '42' });
tracker.track('page_view');
</script>
```
### Uso
#### React
```jsx
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints({ user: '42' });
tracker.track('page_view');
```
#### Vue (API de composición)
Utiliza el tracker con la API de composición de Vue creándolo dentro de un bloque `<script setup>` y registrando eventos en un hook de ciclo de vida:
```vue
<script setup>
import { createFootprints } from 'journey-footprints';
import { onMounted } from 'vue';
const tracker = createFootprints();
onMounted(() => {
tracker.track('page_view');
});
</script>
```
#### Svelte
```svelte
<script>
import { createFootprints } from 'journey-footprints';
const tracker = createFootprints();
tracker.track('page_view');
</script>
```
### API
```ts
createFootprints(options?: {
endpoint?: string;
sessionId?: string | null;
user?: string;
utmSource?: string;
utmMedium?: string;
utmCampaign?: string;
utmTerm?: string;
utmContent?: string;
language?: string;
})
```
Devuelve un rastreador con métodos:
- `track(event, data?)` – envía un evento
- `setUser(user)`
- `setSessionId(sessionId)`
- `getSessionId()`
El idioma predeterminado es el del navegador cuando no se proporciona.
### Datos recopilados automáticamente
Cada llamada a `track()` incluye automáticamente:
| Campo | Descripción |
|-------|-------------|
| `eventTime` | Marca de tiempo ISO 8601 |
| `page` | Pathname + search actual |
| `referrer` | Referrer del documento |
| `title` | Título de la página |
| `browser` | Nombre y versión (Chrome, Firefox, Edge, Safari) |
| `os` | Nombre y versión (Windows, macOS, Linux, Android, iOS) |
| `device` | Tipo (desktop/mobile/tablet), marca y modelo |
| `screen` | Ancho, alto y device pixel ratio |
| `viewport` | Ancho y alto interno |
| `timezoneOffset` | Minutos respecto a UTC |
| `clids` | IDs de clic de anuncios de la URL (gclid, fbclid, msclkid, ttclid, li_fat_id, twclid, dclid) |
### Eventos
Eventos comunes que se pueden rastrear incluyen:
**Analytics & Seguimiento:** `first_visit`, `session_start`, `user_engagement`, `page_view`, `page_redirect`, `view_search_results`, `health_check`
**E-commerce:** `add_payment_info`, `add_shipping_info`, `add_to_cart`, `add_to_wishlist`, `begin_checkout`, `purchase`, `refund`, `remove_from_cart`, `select_item`, `select_promotion`, `view_cart`, `view_item`, `view_item_list`, `view_promotion`
**Leads & Conversiones:** `generate_lead`, `lead`, `qualify_lead`, `disqualify_lead`, `working_lead`, `close_convert_lead`, `close_unconvert_lead`, `emailCapture`
**Acciones del Usuario:** `login`, `logout`, `sign_up`, `apply_job`, `contact`, `register_event`, `email_view`, `chat`, `video_call`, `audio_call`, `image_upload`
**Interacciones de UI:** `click`, `button_click`, `scroll`, `form_submission`, `input_focus`, `modal_open`, `lightbox_open`, `tooltip_click`, `file_download`
**Medios:** `video_play`, `video_start`, `video_progress`, `video_complete`
**Aprendizaje:** `tutorial_begin`, `tutorial_complete`
**Anuncios:** `ad_view`, `ad_click`
**DevOps:** `deploy`, `custom_event`
### Pruebas con datos ficticios
```bash
npm test
```
Las pruebas utilizan una implementación ficticia de `fetch` para validar el envío de eventos sin depender de un servidor real.