@crimson-education/browser-logger 4.1.4 → 5.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -29
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +22 -41
- package/lib/index.js.map +1 -1
- package/lib/logger/consoleTransport.d.ts +1 -1
- package/lib/logger/consoleTransport.d.ts.map +1 -1
- package/lib/logger/consoleTransport.js +16 -22
- package/lib/logger/consoleTransport.js.map +1 -1
- package/lib/logger/datadogTransport.d.ts +1 -1
- package/lib/logger/datadogTransport.d.ts.map +1 -1
- package/lib/logger/datadogTransport.js +4 -8
- package/lib/logger/datadogTransport.js.map +1 -1
- package/lib/logger/index.js +29 -49
- package/lib/logger/index.js.map +1 -1
- package/lib/logger/index.test.js +16 -18
- package/lib/logger/index.test.js.map +1 -1
- package/lib/logger/utils.js +4 -9
- package/lib/logger/utils.js.map +1 -1
- package/lib/reporters/amplifyReporter.d.ts +4 -4
- package/lib/reporters/amplifyReporter.d.ts.map +1 -1
- package/lib/reporters/amplifyReporter.js +210 -133
- package/lib/reporters/amplifyReporter.js.map +1 -1
- package/lib/reporters/amplifyReporter.test.js +9 -12
- package/lib/reporters/amplifyReporter.test.js.map +1 -1
- package/lib/reporters/datadogReporter.d.ts +1 -1
- package/lib/reporters/datadogReporter.d.ts.map +1 -1
- package/lib/reporters/datadogReporter.js +118 -48
- package/lib/reporters/datadogReporter.js.map +1 -1
- package/lib/reporters/gtmReporter.d.ts +1 -1
- package/lib/reporters/gtmReporter.d.ts.map +1 -1
- package/lib/reporters/gtmReporter.js +1 -5
- package/lib/reporters/gtmReporter.js.map +1 -1
- package/lib/reporters/index.js +46 -71
- package/lib/reporters/index.js.map +1 -1
- package/lib/reporters/logReporter.js +24 -34
- package/lib/reporters/logReporter.js.map +1 -1
- package/lib/types/index.js +2 -18
- package/lib/types/index.js.map +1 -1
- package/lib/types/logger.d.ts +3 -3
- package/lib/types/logger.d.ts.map +1 -1
- package/lib/types/logger.js +2 -5
- package/lib/types/logger.js.map +1 -1
- package/lib/types/reporter.d.ts +6 -6
- package/lib/types/reporter.d.ts.map +1 -1
- package/lib/types/reporter.js +1 -2
- package/lib/utils.js +1 -5
- package/lib/utils.js.map +1 -1
- package/lib/utils.test.js +2 -4
- package/lib/utils.test.js.map +1 -1
- package/package.json +14 -16
- package/src/reporters/amplifyReporter.ts +233 -138
- package/src/reporters/datadogReporter.ts +107 -19
|
@@ -1,41 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const amplifyReporter_1 = require("./amplifyReporter");
|
|
1
|
+
import { asAttributeMap } from './amplifyReporter';
|
|
4
2
|
describe('amplifyReporter', () => {
|
|
5
3
|
it('should convert all attribute values to arrays of strings', () => {
|
|
6
4
|
const testMetadata = { a: 'a', d: ['e', 'f'] };
|
|
7
|
-
const attributeMap =
|
|
5
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
8
6
|
expect(attributeMap.a).toEqual(['a']);
|
|
9
7
|
expect(attributeMap.d).toEqual(['e', 'f']);
|
|
10
8
|
});
|
|
11
9
|
it('should handle undefined / null attributes', () => {
|
|
12
10
|
const testMetadata = { a: null, d: undefined };
|
|
13
|
-
const attributeMap =
|
|
11
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
14
12
|
expect(attributeMap.a).toBeNull();
|
|
15
13
|
expect(attributeMap.d).toBeNull();
|
|
16
14
|
});
|
|
17
15
|
it('should flatten hierarchies', () => {
|
|
18
16
|
const testMetadata = { foo: { bar: 'baz' } };
|
|
19
|
-
const attributeMap =
|
|
17
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
20
18
|
expect(attributeMap['foo.bar']).toEqual(['baz']);
|
|
21
19
|
});
|
|
22
20
|
it('should stringify non-string array members', () => {
|
|
23
|
-
var _a;
|
|
24
21
|
const testMetadata = { foo: 5, bar: [{ baz: 'maz' }] };
|
|
25
|
-
const attributeMap =
|
|
22
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
26
23
|
expect(attributeMap.foo).toEqual(['5']);
|
|
27
|
-
expect(typeof
|
|
24
|
+
expect(typeof attributeMap.bar?.[0]).toEqual('string');
|
|
28
25
|
});
|
|
29
26
|
it('should truncate attribute names', () => {
|
|
30
27
|
const testMetadata = { thisIsAVeryVeryLongAttributeNameThatNeedsToBeTruncated: 5 };
|
|
31
|
-
const attributeMap =
|
|
28
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
32
29
|
expect(attributeMap.___VeryVeryLongAttributeNameThatNeedsToBeTruncated).toEqual(['5']);
|
|
33
30
|
});
|
|
34
31
|
it('should truncate attribute values', () => {
|
|
35
32
|
const testMetadata = {
|
|
36
33
|
a: 'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifulDataToPinpoint',
|
|
37
34
|
};
|
|
38
|
-
const attributeMap =
|
|
35
|
+
const attributeMap = asAttributeMap(testMetadata);
|
|
39
36
|
expect(attributeMap.a).toEqual([
|
|
40
37
|
'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifu',
|
|
41
38
|
]);
|
|
@@ -44,7 +41,7 @@ describe('amplifyReporter', () => {
|
|
|
44
41
|
const testMetadata = {
|
|
45
42
|
a: '5',
|
|
46
43
|
};
|
|
47
|
-
const attributeMap =
|
|
44
|
+
const attributeMap = asAttributeMap(testMetadata, false);
|
|
48
45
|
expect(attributeMap.a).toEqual('5');
|
|
49
46
|
});
|
|
50
47
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amplifyReporter.test.js","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"amplifyReporter.test.js","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,7 +100,7 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
|
|
|
100
100
|
/**
|
|
101
101
|
* A list of request origins used to inject tracing headers, to be able to connect RUM and backend tracing.
|
|
102
102
|
*/
|
|
103
|
-
|
|
103
|
+
allowedTrackingOrigins?: (string | RegExp)[];
|
|
104
104
|
/**
|
|
105
105
|
* Enables action tracking for user interactions. This enables the Heatmap tab within Datadog
|
|
106
106
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datadogReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/datadogReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMT,WAAW,EACX,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAA4B,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAc,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,EAAE,yBAAyB,EAAoB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"datadogReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/datadogReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMT,WAAW,EACX,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAA4B,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAc,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,EAAE,yBAAyB,EAAoB,MAAM,4BAA4B,CAAC;AA2FzF,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAEvC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEhD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;IACnD;;OAEG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAErD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;OAEG;IACH,sBAAsB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC7C;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;CACtC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAmI3F"}
|
|
@@ -1,66 +1,138 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { datadogLogs, HandlerType } from '@datadog/browser-logs';
|
|
2
|
+
import { datadogRum } from '@datadog/browser-rum';
|
|
3
|
+
import { logTransports } from '../logger';
|
|
4
|
+
import { datadogTransport } from '../logger/datadogTransport';
|
|
5
|
+
// User frustration detection for Datadog Gen2
|
|
6
|
+
class DatadogFrustrationDetector {
|
|
7
|
+
config;
|
|
8
|
+
frustrationEvents = [];
|
|
9
|
+
FRUSTRATION_THRESHOLD = 3; // Number of events to trigger frustration
|
|
10
|
+
FRUSTRATION_WINDOW = 5000; // Time window in ms
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
if (config.trackFrustrations) {
|
|
14
|
+
this.setupFrustrationDetection();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
setupFrustrationDetection() {
|
|
18
|
+
// Track rapid clicks (potential frustration)
|
|
19
|
+
let clickCount = 0;
|
|
20
|
+
let lastClickTime = 0;
|
|
21
|
+
document.addEventListener('click', (event) => {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
if (now - lastClickTime < 1000) {
|
|
24
|
+
// Rapid clicks within 1 second
|
|
25
|
+
clickCount++;
|
|
26
|
+
if (clickCount >= 3) {
|
|
27
|
+
this.recordFrustrationEvent('rapid_clicks', event);
|
|
28
|
+
clickCount = 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
clickCount = 1;
|
|
33
|
+
}
|
|
34
|
+
lastClickTime = now;
|
|
35
|
+
});
|
|
36
|
+
// Track form errors (potential frustration)
|
|
37
|
+
document.addEventListener('invalid', (event) => {
|
|
38
|
+
this.recordFrustrationEvent('form_validation_error', event);
|
|
39
|
+
});
|
|
40
|
+
// Track 404 errors (potential frustration)
|
|
41
|
+
window.addEventListener('error', (event) => {
|
|
42
|
+
if (event.message.includes('404') || event.message.includes('Not Found')) {
|
|
43
|
+
this.recordFrustrationEvent('page_not_found', event);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// Track network errors (potential frustration)
|
|
47
|
+
window.addEventListener('unhandledrejection', (event) => {
|
|
48
|
+
if (event.reason && typeof event.reason === 'object' && 'status' in event.reason) {
|
|
49
|
+
const status = event.reason.status;
|
|
50
|
+
if (status >= 400) {
|
|
51
|
+
this.recordFrustrationEvent('network_error', event);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
recordFrustrationEvent(type, originalEvent) {
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
this.frustrationEvents.push({ type, timestamp: now });
|
|
59
|
+
// Clean old events outside the window
|
|
60
|
+
this.frustrationEvents = this.frustrationEvents.filter((event) => now - event.timestamp < this.FRUSTRATION_WINDOW);
|
|
61
|
+
// Check if we have enough events to trigger frustration
|
|
62
|
+
if (this.frustrationEvents.length >= this.FRUSTRATION_THRESHOLD) {
|
|
63
|
+
this.triggerFrustrationDetection();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
triggerFrustrationDetection() {
|
|
67
|
+
const frustrationData = {
|
|
68
|
+
frustrationType: 'user_frustration_detected',
|
|
69
|
+
frustrationEvents: this.frustrationEvents.map((e) => e.type),
|
|
70
|
+
frustrationCount: this.frustrationEvents.length,
|
|
71
|
+
pageUrl: window.location.href,
|
|
72
|
+
timestamp: new Date().toISOString(),
|
|
73
|
+
};
|
|
74
|
+
// Send frustration event to Datadog
|
|
75
|
+
if (typeof datadogRum !== 'undefined') {
|
|
76
|
+
datadogRum.addAction('User Frustration Detected', frustrationData);
|
|
77
|
+
}
|
|
78
|
+
// Clear events after reporting
|
|
79
|
+
this.frustrationEvents = [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function datadogReporter(info, config) {
|
|
10
83
|
const isLocalhost = window.location.hostname === 'localhost';
|
|
11
84
|
// Don't forward error logs by default, do enable the log transport by default
|
|
12
85
|
// forwardErrorsToLogs incorrectly is called forwardConsoleLogs, this is for backwards compatibility
|
|
13
|
-
const forwardErrorsToLogs =
|
|
86
|
+
const forwardErrorsToLogs = config.forwardConsoleLogs ?? false;
|
|
14
87
|
const enableLogTransport = config.logTransport !== false;
|
|
15
88
|
// Only init datadog logs if something is using it.
|
|
16
89
|
if (forwardErrorsToLogs !== true && enableLogTransport !== true) {
|
|
17
|
-
|
|
90
|
+
datadogLogs.init({
|
|
18
91
|
site: config.site,
|
|
19
|
-
proxyUrl: config.proxyUrl,
|
|
20
92
|
clientToken: config.clientToken,
|
|
21
93
|
service: info.service,
|
|
22
94
|
env: info.environment,
|
|
23
|
-
version:
|
|
24
|
-
|
|
95
|
+
version: config.version ?? info.version,
|
|
96
|
+
// Note: sampleRate is not available in newer Datadog versions
|
|
25
97
|
beforeSend: config.beforeLogsSend,
|
|
26
|
-
useSecureSessionCookie:
|
|
27
|
-
|
|
98
|
+
useSecureSessionCookie: config.useSecureSessionCookie ?? !isLocalhost,
|
|
99
|
+
// Note: useCrossSiteSessionCookie is not available in newer Datadog versions
|
|
28
100
|
trackSessionAcrossSubdomains: config.trackSessionAcrossSubdomains,
|
|
29
101
|
forwardErrorsToLogs,
|
|
102
|
+
allowedTrackingOrigins: config.allowedTrackingOrigins,
|
|
30
103
|
});
|
|
31
|
-
|
|
104
|
+
datadogLogs.logger.setHandler(HandlerType.http);
|
|
32
105
|
}
|
|
33
106
|
// Add the datadog log transport
|
|
34
107
|
if (enableLogTransport) {
|
|
35
|
-
|
|
108
|
+
logTransports.push(datadogTransport(typeof config.logTransport === 'boolean' ? {} : config.logTransport));
|
|
36
109
|
}
|
|
37
|
-
|
|
110
|
+
datadogRum.init({
|
|
38
111
|
enableExperimentalFeatures: ['feature_flags'],
|
|
39
112
|
site: config.site,
|
|
40
|
-
proxyUrl: config.proxyUrl,
|
|
41
113
|
clientToken: config.clientToken,
|
|
42
114
|
applicationId: config.applicationId,
|
|
43
115
|
service: info.service,
|
|
44
116
|
env: info.environment,
|
|
45
|
-
version:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
useSecureSessionCookie:
|
|
49
|
-
|
|
117
|
+
version: config.version ?? info.version,
|
|
118
|
+
// Note: sampleRate is not available in newer Datadog versions
|
|
119
|
+
// Note: replaySampleRate is not available in newer Datadog versions
|
|
120
|
+
useSecureSessionCookie: config.useSecureSessionCookie ?? !isLocalhost,
|
|
121
|
+
// Note: useCrossSiteSessionCookie is not available in newer Datadog versions
|
|
50
122
|
trackSessionAcrossSubdomains: config.trackSessionAcrossSubdomains,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
trackViewsManually: (_q = config.trackViewsManually) !== null && _q !== void 0 ? _q : false,
|
|
54
|
-
actionNameAttribute: (_r = config.actionNameAttribute) !== null && _r !== void 0 ? _r : 'data-analytics-name',
|
|
123
|
+
trackViewsManually: config.trackViewsManually ?? false,
|
|
124
|
+
actionNameAttribute: config.actionNameAttribute ?? 'data-analytics-name',
|
|
55
125
|
beforeSend: config.beforeSend,
|
|
56
|
-
defaultPrivacyLevel:
|
|
57
|
-
|
|
58
|
-
trackUserInteractions:
|
|
126
|
+
defaultPrivacyLevel: config.defaultPrivacyLevel ?? 'mask-user-input',
|
|
127
|
+
allowedTrackingOrigins: config.allowedTrackingOrigins,
|
|
128
|
+
trackUserInteractions: config.trackUserInteractions ?? false,
|
|
59
129
|
excludedActivityUrls: config.excludedActivityUrls,
|
|
60
130
|
});
|
|
131
|
+
// Initialize frustration detector
|
|
132
|
+
// const frustrationDetector = new DatadogFrustrationDetector(config);
|
|
61
133
|
const reporter = {
|
|
62
134
|
trackEvent: function (event) {
|
|
63
|
-
|
|
135
|
+
datadogRum.addAction(event.message, {
|
|
64
136
|
level: event.level,
|
|
65
137
|
...event.metadata,
|
|
66
138
|
...event.tags,
|
|
@@ -68,7 +140,7 @@ function datadogReporter(info, config) {
|
|
|
68
140
|
});
|
|
69
141
|
},
|
|
70
142
|
addBreadcrumb: function (breadcrumb) {
|
|
71
|
-
|
|
143
|
+
datadogRum.addAction(breadcrumb.message, {
|
|
72
144
|
...breadcrumb.metadata,
|
|
73
145
|
category: breadcrumb.category,
|
|
74
146
|
});
|
|
@@ -76,30 +148,29 @@ function datadogReporter(info, config) {
|
|
|
76
148
|
addMetadata: function (metadata) {
|
|
77
149
|
for (const [key, value] of Object.entries(metadata)) {
|
|
78
150
|
if (value !== null) {
|
|
79
|
-
|
|
151
|
+
datadogRum.setGlobalContextProperty(key, value);
|
|
80
152
|
// Note, this will add duplicate context data in logs.
|
|
81
153
|
// But this is valuable for logs ingested outside of the browser logger.
|
|
82
|
-
|
|
154
|
+
datadogLogs.setGlobalContextProperty(key, value);
|
|
83
155
|
}
|
|
84
156
|
else {
|
|
85
|
-
|
|
157
|
+
datadogRum.removeGlobalContextProperty(key);
|
|
86
158
|
// But this is valuable for logs ingested outside of the browser logger.
|
|
87
|
-
|
|
159
|
+
datadogLogs.removeGlobalContextProperty(key);
|
|
88
160
|
}
|
|
89
161
|
}
|
|
90
162
|
},
|
|
91
163
|
setUser: function (user) {
|
|
92
|
-
var _a;
|
|
93
164
|
if (user) {
|
|
94
|
-
|
|
165
|
+
datadogRum.setUser({
|
|
95
166
|
...user,
|
|
96
167
|
id: user.id,
|
|
97
168
|
email: user.email,
|
|
98
|
-
name:
|
|
169
|
+
name: user.name ?? user.email,
|
|
99
170
|
});
|
|
100
171
|
}
|
|
101
172
|
else {
|
|
102
|
-
|
|
173
|
+
datadogRum.setUser({});
|
|
103
174
|
}
|
|
104
175
|
},
|
|
105
176
|
setRouteName: function (routeName) {
|
|
@@ -107,26 +178,25 @@ function datadogReporter(info, config) {
|
|
|
107
178
|
},
|
|
108
179
|
setPageName: function (pageName) {
|
|
109
180
|
if (config.trackViewsManually) {
|
|
110
|
-
|
|
181
|
+
datadogRum.startView(pageName);
|
|
111
182
|
}
|
|
112
183
|
else {
|
|
113
184
|
reporter.addMetadata({ pageName });
|
|
114
185
|
}
|
|
115
186
|
},
|
|
116
187
|
reportError: function (error, metadata) {
|
|
117
|
-
|
|
188
|
+
datadogRum.addError(error, metadata);
|
|
118
189
|
},
|
|
119
190
|
reportFeatureFlag: function (flag) {
|
|
120
|
-
|
|
191
|
+
datadogRum.addFeatureFlagEvaluation(flag.name, flag.value);
|
|
121
192
|
},
|
|
122
193
|
recordSession: function () {
|
|
123
|
-
|
|
194
|
+
datadogRum.startSessionReplayRecording();
|
|
124
195
|
},
|
|
125
196
|
recordSessionStop: function () {
|
|
126
|
-
|
|
197
|
+
datadogRum.stopSessionReplayRecording();
|
|
127
198
|
},
|
|
128
199
|
};
|
|
129
200
|
return reporter;
|
|
130
201
|
}
|
|
131
|
-
exports.datadogReporter = datadogReporter;
|
|
132
202
|
//# sourceMappingURL=datadogReporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datadogReporter.js","sourceRoot":"","sources":["../../src/reporters/datadogReporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"datadogReporter.js","sourceRoot":"","sources":["../../src/reporters/datadogReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtmReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/gtmReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKT,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,
|
|
1
|
+
{"version":3,"file":"gtmReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/gtmReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKT,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEnD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;KACnC;CACF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAuDnF"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.gtmReporter = void 0;
|
|
4
|
-
function gtmReporter(info, config) {
|
|
1
|
+
export function gtmReporter(info, config) {
|
|
5
2
|
let loadedDataLayer = !!window.dataLayer;
|
|
6
3
|
const baseMetadata = {
|
|
7
4
|
service: info.service,
|
|
@@ -53,5 +50,4 @@ function gtmReporter(info, config) {
|
|
|
53
50
|
}
|
|
54
51
|
return reporter;
|
|
55
52
|
}
|
|
56
|
-
exports.gtmReporter = gtmReporter;
|
|
57
53
|
//# sourceMappingURL=gtmReporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtmReporter.js","sourceRoot":"","sources":["../../src/reporters/gtmReporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gtmReporter.js","sourceRoot":"","sources":["../../src/reporters/gtmReporter.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,WAAW,CAAC,IAAiB,EAAE,MAAyB;IACtE,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACzC,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;IAEF,MAAM,QAAQ,GAAc;QAC1B,GAAG,MAAM;QACT,WAAW,EAAE,UAAU,QAAkB;YACvC,IAAI,MAAM,CAAC,SAAS,EAAE;gBACpB,wDAAwD;gBACxD,IAAI,CAAC,eAAe,EAAE;oBACpB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACpC,eAAe,GAAG,IAAI,CAAC;iBACxB;gBAED,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;QACH,CAAC;QACD,UAAU,EAAE,UAAU,KAAoB;YACxC,QAAQ,CAAC,WAAW,CAAC;gBACnB,GAAG,KAAK,CAAC,QAAQ;gBACjB,GAAG,KAAK,CAAC,IAAI;gBACb,GAAG,KAAK,CAAC,OAAO;gBAChB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;QACD,aAAa,EAAE,UAAU,UAA8B;YACrD,QAAQ,CAAC,WAAW,CAAC;gBACnB,GAAG,UAAU,CAAC,QAAQ;gBACtB,KAAK,EAAE,UAAU,CAAC,OAAO;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,UAAU,IAAuB;YACxC,IAAI,IAAI,EAAE;gBACR,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAChC;QACH,CAAC;QACD,YAAY,EAAE,UAAU,SAAiB;YACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,WAAW,EAAE,UAAU,QAAgB;YACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;IAEF,IAAI,eAAe,EAAE;QACnB,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KACpC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|