Skip to content

Commit d0505a6

Browse files
feat: add networkTracking plugin to analytics-browser
1 parent 1ec17e6 commit d0505a6

File tree

5 files changed

+29
-0
lines changed

5 files changed

+29
-0
lines changed

packages/analytics-browser/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
4646
},
4747
"dependencies": {
48+
"@amplitude/plugin-network-capture-browser": "^1.0.0",
4849
"@amplitude/analytics-core": "^2.11.0",
4950
"@amplitude/analytics-remote-config": "^0.4.0",
5051
"@amplitude/plugin-autocapture-browser": "^1.2.0",

packages/analytics-browser/src/browser-client.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ import {
2626
getAttributionTrackingConfig,
2727
getPageViewTrackingConfig,
2828
getElementInteractionsConfig,
29+
getNetworkTrackingConfig,
2930
isAttributionTrackingEnabled,
3031
isSessionTrackingEnabled,
3132
isFileDownloadTrackingEnabled,
3233
isFormInteractionTrackingEnabled,
3334
isElementInteractionsEnabled,
3435
isPageViewTrackingEnabled,
36+
isNetworkTrackingEnabled,
3537
} from './default-tracking';
3638
import { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';
3739
import { Context } from './plugins/context';
@@ -44,6 +46,7 @@ import { detNotify } from './det-notification';
4446
import { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';
4547
import { createBrowserJoinedConfigGenerator } from './config/joined-config';
4648
import { autocapturePlugin } from '@amplitude/plugin-autocapture-browser';
49+
import { plugin as networkCapturePlugin } from '@amplitude/plugin-network-capture-browser';
4750
import { WebAttribution } from './attribution/web-attribution';
4851

4952
/**
@@ -154,6 +157,11 @@ export class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {
154157
await this.add(autocapturePlugin(getElementInteractionsConfig(this.config))).promise;
155158
}
156159

160+
if (isNetworkTrackingEnabled(this.config.defaultTracking)) {
161+
this.config.loggerProvider.debug('Adding network tracking plugin');
162+
await this.add(networkCapturePlugin(getNetworkTrackingConfig(this.config))).promise;
163+
}
164+
157165
this.initializing = false;
158166

159167
// Step 6: Run queued dispatch functions

packages/analytics-browser/src/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
TrackingOptions,
2525
AutocaptureOptions,
2626
CookieOptions,
27+
NetworkTrackingOptions,
2728
} from '@amplitude/analytics-core';
2829

2930
import { LocalStorage } from './storage/local-storage';
@@ -92,6 +93,7 @@ export class BrowserConfig extends Config implements IBrowserConfig {
9293
userId?: string,
9394
pageCounter?: number,
9495
debugLogsEnabled?: boolean,
96+
public networkTrackingOptions?: NetworkTrackingOptions,
9597
) {
9698
super({ apiKey, storageProvider, transportProvider: createTransport(transport) });
9799
this._cookieStorage = cookieStorage;
@@ -104,6 +106,7 @@ export class BrowserConfig extends Config implements IBrowserConfig {
104106
this.userId = userId;
105107
this.debugLogsEnabled = debugLogsEnabled;
106108
this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : this.logLevel);
109+
this.networkTrackingOptions = networkTrackingOptions;
107110
}
108111

109112
get cookieStorage() {
@@ -303,6 +306,7 @@ export const useBrowserConfig = async (
303306
userId,
304307
pageCounter,
305308
debugLogsEnabled,
309+
options.networkTrackingOptions,
306310
);
307311

308312
if (!(await browserConfig.storageProvider.isEnabled())) {

packages/analytics-browser/src/default-tracking.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
BrowserOptions,
77
AutocaptureOptions,
88
AttributionOptions,
9+
NetworkTrackingOptions,
910
} from '@amplitude/analytics-core';
1011

1112
/**
@@ -39,6 +40,9 @@ export const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | bool
3940
export const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>
4041
isTrackingEnabled(autocapture, 'sessions');
4142

43+
export const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>
44+
isTrackingEnabled(autocapture, 'networkTracking');
45+
4246
/**
4347
* Returns true if
4448
* 1. autocapture === true
@@ -72,6 +76,13 @@ export const getElementInteractionsConfig = (config: BrowserOptions): ElementInt
7276
return undefined;
7377
};
7478

79+
export const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {
80+
if (isNetworkTrackingEnabled(config.autocapture) && config.networkTrackingOptions) {
81+
return config.networkTrackingOptions;
82+
}
83+
return;
84+
};
85+
7586
export const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {
7687
let trackOn: PageTrackingTrackOn | undefined = () => false;
7788
let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;

packages/analytics-core/src/types/browser-config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ export interface AutocaptureOptions {
159159
* @defaultValue `false`
160160
*/
161161
elementInteractions?: boolean | ElementInteractionsOptions;
162+
/**
163+
* Enables/disables network request tracking.
164+
* @defaultValue `false`
165+
*/
166+
networkTracking?: boolean;
162167
}
163168

164169
export interface TrackingOptions {

0 commit comments

Comments
 (0)