Datadog Sink
The Datadog sink sends session data as a custom RUM action using your existing @datadog/browser-rum client. WriteTrack doesn’t bundle the Datadog SDK — you provide your initialized client.
Prerequisites
Section titled “Prerequisites”You need @datadog/browser-rum v3.0.0 or later already initialized in your application.
npm i @datadog/browser-rumpnpm add @datadog/browser-rumyarn add @datadog/browser-rumbun add @datadog/browser-rumimport { WriteTrack, datadog } from 'writetrack';import { datadogRum } from '@datadog/browser-rum';
// Initialize Datadog RUM (your existing setup)datadogRum.init({ applicationId: '...', clientToken: '...', site: 'datadoghq.com',});
const tracker = new WriteTrack({ target: textarea, userId: 'u_abc123',});
tracker.pipe( datadog({ client: datadogRum, }));
tracker.start();Options
Section titled “Options”| Option | Type | Default | Description |
|---|---|---|---|
client | DatadogClient | — | Initialized Datadog RUM client Required |
actionName | string | 'writetrack_session' | Custom action name |
tags | Record<string, string> | {} | Extra tags to include in the action context |
Data Mapping
Section titled “Data Mapping”The sink calls client.addAction(actionName, context) with the following context:
| Context Field | Source | Description |
|---|---|---|
duration | metadata.duration | Session duration in ms |
keystrokeCount | session.events.length | Total keystroke events |
qualityLevel | quality.qualityLevel | POOR / FAIR / GOOD / EXCELLENT |
targetElement | metadata.targetElement | Element type (e.g. textarea) |
schemaVersion | version | Schema version |
userId | metadata.userId | User ID (if provided) |
contentId | metadata.contentId | Content ID (if provided) |
custom | metadata.custom | Custom metadata (if provided) |
Any tags you pass in options are merged into the context object.
Examples
Section titled “Examples”With Custom Action Name and Tags
Section titled “With Custom Action Name and Tags”tracker.pipe( datadog({ client: datadogRum, actionName: 'typing_session_captured', tags: { team: 'content-integrity', env: 'production', }, }));Querying in Datadog
Section titled “Querying in Datadog”Once data flows, you can find sessions in the Datadog RUM Explorer:
- Action name:
writetrack_session(or your custom name) - Filter by quality:
@context.qualityLevel:EXCELLENT - Filter by user:
@context.userId:u_abc123
Error Handling
Section titled “Error Handling”tracker.on('pipe:error', (err, sink) => { console.error('Datadog sink failed:', err);});The Datadog addAction call is synchronous under the hood. If the client throws, the error is caught and emitted as a pipe:error event without affecting other sinks.