From ea8324648a1f04e81ece60989bcf56871dc859e7 Mon Sep 17 00:00:00 2001 From: Yoann Moinet Date: Thu, 27 Feb 2025 10:02:39 +0100 Subject: [PATCH 1/2] Add RUM's plugin documentation --- README.md | 85 +++++++++++++++++++++++ packages/plugins/rum/README.md | 119 +++++++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 packages/plugins/rum/README.md diff --git a/README.md b/README.md index b45759973..a9ccca807 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ To interact with Datadog directly from your builds. - [Error Tracking](#error-tracking-----) - [Metrics](#metrics-----) - [Output](#output-----) + - [RUM](#rum-----) - [Contributing](#contributing) - [License](#license) @@ -123,6 +124,38 @@ Follow the specific documentation for each bundler: timestamp?: number; filters?: ((metric: Metric) => Metric | null)[]; }; + rum?: { + enable?: boolean; + sdk?: { + actionNameAttribute?: string; + allowedTracingUrls?: string[]; + allowUntrustedEvents?: boolean; + applicationId: string; + clientToken?: string; + compressIntakeRequests?: boolean; + defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow'; + enablePrivacyForActionName?: boolean; + env?: string; + excludedActivityUrls?: string[]; + proxy?: string; + service?: string; + sessionReplaySampleRate?: number; + sessionSampleRate?: number; + silentMultipleInit?: boolean; + site?: string; + startSessionReplayRecordingManually?: boolean; + storeContextsAcrossPages?: boolean; + telemetrySampleRate?: number; + traceSampleRate?: number; + trackingConsent?: 'granted' | 'not_granted'; + trackLongTasks?: boolean; + trackResources?: boolean; + trackUserInteractions?: boolean; + trackViewsManually?: boolean; + version?: string; + workerUrl?: string; + }; + }; output?: { enable?: boolean; path?: string; @@ -365,6 +398,58 @@ datadogWebpackPlugin({ }); ``` + + +### RUM ESBuild Rollup Rspack Vite Webpack + +> [!NOTE] +> This feature is in **beta** and may misbehave in edgiest cases. +> +> Interact with Real User Monitoring (RUM) directly from your build system. + +#### [📝 Full documentation ➡️](/packages/plugins/rum#readme) + +
+ +Configuration + +```typescript +datadogWebpackPlugin({ + rum?: { + enable?: boolean, + sdk?: { + actionNameAttribute?: string, + allowedTracingUrls?: string[], + allowUntrustedEvents?: boolean, + applicationId: string, + clientToken?: string, + compressIntakeRequests?: boolean, + defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow', + enablePrivacyForActionName?: boolean, + env?: string, + excludedActivityUrls?: string[], + proxy?: string, + service?: string, + sessionReplaySampleRate?: number, + sessionSampleRate?: number, + silentMultipleInit?: boolean, + site?: string, + startSessionReplayRecordingManually?: boolean, + storeContextsAcrossPages?: boolean, + telemetrySampleRate?: number, + traceSampleRate?: number, + trackingConsent?: 'granted' | 'not_granted', + trackLongTasks?: boolean, + trackResources?: boolean, + trackUserInteractions?: boolean, + trackViewsManually?: boolean, + version?: string, + workerUrl?: string, + }, + } +}); +``` +
diff --git a/packages/plugins/rum/README.md b/packages/plugins/rum/README.md new file mode 100644 index 000000000..f724209b9 --- /dev/null +++ b/packages/plugins/rum/README.md @@ -0,0 +1,119 @@ +# RUM Plugin + +> [!NOTE] +> This feature is in **beta** and may misbehave in edgiest cases. + +Interact with Real User Monitoring (RUM) directly from your build system. + + + +## Table of content + + + + +- [Configuration](#configuration) +- [Browser SDK Injection](#browser-sdk-injection) + - [Using global `DD_RUM`](#using-global-ddrum) + - [rum.sdk.applicationId](#rumsdkapplicationid) + - [rum.sdk.clientToken](#rumsdkclienttoken) + + +## Configuration + +
+Full configuration + +```ts +rum?: { // BETA, the feature may misbehave in edgiest cases. + disabled?: boolean; + sdk?: { + actionNameAttribute?: string; + allowedTracingUrls?: string[]; + allowUntrustedEvents?: boolean; + applicationId: string; + clientToken?: string; + compressIntakeRequests?: boolean; + defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow'; + enablePrivacyForActionName?: boolean; + env?: string; + excludedActivityUrls?: string[]; + proxy?: string; + service?: string; + sessionReplaySampleRate?: number; + sessionSampleRate?: number; + silentMultipleInit?: boolean; + site?: string; + startSessionReplayRecordingManually?: boolean; + storeContextsAcrossPages?: boolean; + telemetrySampleRate?: number; + traceSampleRate?: number; + trackingConsent?: 'granted' | 'not_granted'; + trackLongTasks?: boolean; + trackResources?: boolean; + trackUserInteractions?: boolean; + trackViewsManually?: boolean; + version?: string; + workerUrl?: string; + }; +} +``` + +
+ +**Minimal configuration**: + +```ts +rum: { + sdk: { + applicationId: 'your_application_id', + } +} +``` + +## Browser SDK Injection + +Automatically inject the RUM SDK v6 into your application and initialize it. + +Full documentation can be found in the [Datadog documentation](https://docs.datadoghq.com/real_user_monitoring/browser/setup/client?tab=rum#configuration). + +### Using global `DD_RUM` + +You can use [the global `DD_RUM` object](https://docs.datadoghq.com/real_user_monitoring/browser/advanced_configuration/?tab=cdnasync) to interact with the RUM SDK. + +> [!NOTE] +> You don't need to use `DD_RUM.onReady()` to wrap your code, +> the plugin makes sure the SDK is loaded before executing your code. + +```ts +import type { RumTypes: { RumPublicApi } } from '@datadog/webpack-plugin'; +declare global { + type DD_RUM = RumPublicApi; +} +``` + +You can also configure `eslint` to recognize the global `DD_RUM` object: + +```json +{ + "globals": { + "DD_RUM": "readonly" + } +} +``` + +### rum.sdk.applicationId + +> required + +The RUM application ID. [Create a new application if necessary](https://app.datadoghq.com/rum/list/create). + +### rum.sdk.clientToken + +> optional, will be fetched if missing + +A [Datadog client token](https://docs.datadoghq.com/account_management/api-app-keys/#client-tokens). + +> [!NOTE] +> If not provided, the plugin will attempt to fetch the client token using the API. +> You need to provide both `auth.apiKey` and `auth.appKey` with the `rum_apps_read` permission. From 98dd691c0f625e6652386311be60d03f7f6bc64c Mon Sep 17 00:00:00 2001 From: Yoann Moinet Date: Thu, 14 May 2026 16:48:40 -0400 Subject: [PATCH 2/2] Update RUM plugin docs and remove @datadog/browser-rum dependency from types - Remove hideFromRootReadme so the plugin appears in root README automatically - Trim sdk options in docs to only applicationId/clientToken with link to full docs - Remove @datadog/browser-rum import from plugin source types; replace with explicit type definitions to avoid requiring users to install the SDK package - Add browser-rum-types.d.ts with inlined RumInitConfiguration and DatadogRum types (generated via dts-bundle-generator) so users get proper TS typings - Export DatadogRum and RumInitConfiguration from the plugin's types API - Add TypeScript global declaration example to README using RumTypes['DatadogRum'] Co-Authored-By: Claude Sonnet 4.6 --- README.md | 68 ++++------------------------ packages/plugins/rum/README.md | 39 ++++------------ packages/plugins/rum/package.json | 1 - packages/plugins/rum/src/index.ts | 1 - packages/plugins/rum/src/validate.ts | 3 +- 5 files changed, 21 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index a9ccca807..8566c9a31 100644 --- a/README.md +++ b/README.md @@ -124,38 +124,6 @@ Follow the specific documentation for each bundler: timestamp?: number; filters?: ((metric: Metric) => Metric | null)[]; }; - rum?: { - enable?: boolean; - sdk?: { - actionNameAttribute?: string; - allowedTracingUrls?: string[]; - allowUntrustedEvents?: boolean; - applicationId: string; - clientToken?: string; - compressIntakeRequests?: boolean; - defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow'; - enablePrivacyForActionName?: boolean; - env?: string; - excludedActivityUrls?: string[]; - proxy?: string; - service?: string; - sessionReplaySampleRate?: number; - sessionSampleRate?: number; - silentMultipleInit?: boolean; - site?: string; - startSessionReplayRecordingManually?: boolean; - storeContextsAcrossPages?: boolean; - telemetrySampleRate?: number; - traceSampleRate?: number; - trackingConsent?: 'granted' | 'not_granted'; - trackLongTasks?: boolean; - trackResources?: boolean; - trackUserInteractions?: boolean; - trackViewsManually?: boolean; - version?: string; - workerUrl?: string; - }; - }; output?: { enable?: boolean; path?: string; @@ -170,6 +138,14 @@ Follow the specific documentation for each bundler: warnings?: boolean | string; }; }; + rum?: { + enable?: boolean; + sdk?: { + applicationId: string; + clientToken?: string; + // [...] See https://docs.datadoghq.com/real_user_monitoring/browser/setup/client?tab=rum#configuration for all options. + }; + }; } ``` @@ -404,7 +380,7 @@ datadogWebpackPlugin({ > [!NOTE] > This feature is in **beta** and may misbehave in edgiest cases. -> +>
> Interact with Real User Monitoring (RUM) directly from your build system. #### [📝 Full documentation ➡️](/packages/plugins/rum#readme) @@ -418,33 +394,9 @@ datadogWebpackPlugin({ rum?: { enable?: boolean, sdk?: { - actionNameAttribute?: string, - allowedTracingUrls?: string[], - allowUntrustedEvents?: boolean, applicationId: string, clientToken?: string, - compressIntakeRequests?: boolean, - defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow', - enablePrivacyForActionName?: boolean, - env?: string, - excludedActivityUrls?: string[], - proxy?: string, - service?: string, - sessionReplaySampleRate?: number, - sessionSampleRate?: number, - silentMultipleInit?: boolean, - site?: string, - startSessionReplayRecordingManually?: boolean, - storeContextsAcrossPages?: boolean, - telemetrySampleRate?: number, - traceSampleRate?: number, - trackingConsent?: 'granted' | 'not_granted', - trackLongTasks?: boolean, - trackResources?: boolean, - trackUserInteractions?: boolean, - trackViewsManually?: boolean, - version?: string, - workerUrl?: string, + // [...] See https://docs.datadoghq.com/real_user_monitoring/browser/setup/client?tab=rum#configuration for all options. }, } }); diff --git a/packages/plugins/rum/README.md b/packages/plugins/rum/README.md index f724209b9..dc141d9c9 100644 --- a/packages/plugins/rum/README.md +++ b/packages/plugins/rum/README.md @@ -25,36 +25,12 @@ Interact with Real User Monitoring (RUM) directly from your build system. Full configuration ```ts -rum?: { // BETA, the feature may misbehave in edgiest cases. - disabled?: boolean; +rum?: { + enable?: boolean; sdk?: { - actionNameAttribute?: string; - allowedTracingUrls?: string[]; - allowUntrustedEvents?: boolean; applicationId: string; clientToken?: string; - compressIntakeRequests?: boolean; - defaultPrivacyLevel?: 'mask' | 'mask-user-input' | 'allow'; - enablePrivacyForActionName?: boolean; - env?: string; - excludedActivityUrls?: string[]; - proxy?: string; - service?: string; - sessionReplaySampleRate?: number; - sessionSampleRate?: number; - silentMultipleInit?: boolean; - site?: string; - startSessionReplayRecordingManually?: boolean; - storeContextsAcrossPages?: boolean; - telemetrySampleRate?: number; - traceSampleRate?: number; - trackingConsent?: 'granted' | 'not_granted'; - trackLongTasks?: boolean; - trackResources?: boolean; - trackUserInteractions?: boolean; - trackViewsManually?: boolean; - version?: string; - workerUrl?: string; + // [...] See https://docs.datadoghq.com/real_user_monitoring/browser/setup/client?tab=rum#configuration for all options. }; } ``` @@ -85,10 +61,15 @@ You can use [the global `DD_RUM` object](https://docs.datadoghq.com/real_user_mo > You don't need to use `DD_RUM.onReady()` to wrap your code, > the plugin makes sure the SDK is loaded before executing your code. +For TypeScript projects, you can declare the global type using the types bundled with the plugin: + ```ts -import type { RumTypes: { RumPublicApi } } from '@datadog/webpack-plugin'; +import type { RumTypes } from '@datadog/webpack-plugin'; // or rollup-plugin, vite-plugin, etc. + declare global { - type DD_RUM = RumPublicApi; + interface Window { + DD_RUM?: RumTypes['RumPublicApi']; + } } ``` diff --git a/packages/plugins/rum/package.json b/packages/plugins/rum/package.json index 21937f9f8..6f95f5a87 100644 --- a/packages/plugins/rum/package.json +++ b/packages/plugins/rum/package.json @@ -12,7 +12,6 @@ "directory": "packages/plugins/rum" }, "buildPlugin": { - "hideFromRootReadme": true, "inlinedLibraries": [ "@datadog/browser-core", "@datadog/browser-rum-core" diff --git a/packages/plugins/rum/src/index.ts b/packages/plugins/rum/src/index.ts index 5803130aa..51a568302 100644 --- a/packages/plugins/rum/src/index.ts +++ b/packages/plugins/rum/src/index.ts @@ -21,7 +21,6 @@ export const helpers = { }; export type types = { - // Add the types you'd like to expose here. RumOptions: RumOptions; RumPublicApi: RumPublicApi; RumInitConfiguration: RumInitConfiguration; diff --git a/packages/plugins/rum/src/validate.ts b/packages/plugins/rum/src/validate.ts index 3fe8a8603..15032cb1a 100644 --- a/packages/plugins/rum/src/validate.ts +++ b/packages/plugins/rum/src/validate.ts @@ -2,7 +2,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2019-Present Datadog, Inc. -import type { Site } from '@datadog/browser-rum'; import type { Logger, Options, OptionsWithDefaults } from '@dd/core/types'; import chalk from 'chalk'; @@ -109,7 +108,7 @@ export const validateSDKOptions = ( sessionReplaySampleRate: 0, sessionSampleRate: 100, silentMultipleInit: false, - site: (options.auth.site as Site) || 'datadoghq.com', + site: options.auth.site || 'datadoghq.com', startSessionReplayRecordingManually: false, storeContextsAcrossPages: false, telemetrySampleRate: 20,