@crimson-education/browser-logger 5.0.1 → 5.0.3
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 +72 -94
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +23 -46
- 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/datadogReporter.d.ts +13 -1
- package/lib/reporters/datadogReporter.d.ts.map +1 -1
- package/lib/reporters/datadogReporter.js +122 -49
- 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/reporters/posthogReporter.d.ts +1 -1
- package/lib/reporters/posthogReporter.d.ts.map +1 -1
- package/lib/reporters/posthogReporter.js +46 -55
- package/lib/reporters/posthogReporter.js.map +1 -1
- package/lib/reporters/posthogReporter.test.js +21 -23
- package/lib/reporters/posthogReporter.test.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 -12
- 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 +16 -16
- package/src/index.ts +0 -6
- package/src/reporters/datadogReporter.ts +133 -22
- package/src/reporters/posthogReporter.test.ts +6 -1
- package/src/reporters/posthogReporter.ts +6 -1
- package/src/types/reporter.ts +0 -7
- package/lib/reporters/amplifyReporter.d.ts +0 -86
- package/lib/reporters/amplifyReporter.d.ts.map +0 -1
- package/lib/reporters/amplifyReporter.js +0 -225
- package/lib/reporters/amplifyReporter.js.map +0 -1
- package/lib/reporters/amplifyReporter.test.d.ts +0 -2
- package/lib/reporters/amplifyReporter.test.d.ts.map +0 -1
- package/lib/reporters/amplifyReporter.test.js +0 -51
- package/lib/reporters/amplifyReporter.test.js.map +0 -1
- package/src/reporters/amplifyReporter.test.ts +0 -61
- package/src/reporters/amplifyReporter.ts +0 -344
package/lib/logger/index.js
CHANGED
|
@@ -1,52 +1,33 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.logger = exports.createLogger = exports.setLogLevel = exports.globalLogLevel = exports.logTransports = exports.globalMetadata = void 0;
|
|
18
1
|
/* eslint-disable prefer-rest-params */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
import { LogLevel } from '../types';
|
|
3
|
+
import { filterReporterMetadata } from '../utils';
|
|
4
|
+
import { consoleTransport } from './consoleTransport';
|
|
5
|
+
import { getLogMessage, isAboveLevel } from './utils';
|
|
6
|
+
export * from './consoleTransport';
|
|
7
|
+
export * from './datadogTransport';
|
|
8
|
+
export const globalMetadata = {};
|
|
9
|
+
export const logTransports = [consoleTransport()];
|
|
10
|
+
export let globalLogLevel;
|
|
27
11
|
/**
|
|
28
12
|
* Sets the global log level.
|
|
29
13
|
*/
|
|
30
|
-
function setLogLevel(level) {
|
|
31
|
-
|
|
14
|
+
export function setLogLevel(level) {
|
|
15
|
+
globalLogLevel = level ?? undefined;
|
|
32
16
|
}
|
|
33
|
-
exports.setLogLevel = setLogLevel;
|
|
34
17
|
/**
|
|
35
18
|
* Creates a Logger Instance.
|
|
36
19
|
*/
|
|
37
|
-
function createLogger(options = {}) {
|
|
38
|
-
|
|
39
|
-
const rootMetadata = (_a = options.metadata) !== null && _a !== void 0 ? _a : {};
|
|
20
|
+
export function createLogger(options = {}) {
|
|
21
|
+
const rootMetadata = options.metadata ?? {};
|
|
40
22
|
const logger = {
|
|
41
23
|
// impl loosely based on Winston Logger's dynamic log function
|
|
42
24
|
// https://github.com/winstonjs/winston/blob/master/lib/winston/logger.js
|
|
43
25
|
log() {
|
|
44
|
-
var _a, _b;
|
|
45
26
|
let logInfo;
|
|
46
27
|
// Optimize for the hotpath of logging JSON literals
|
|
47
28
|
if (arguments.length === 1) {
|
|
48
29
|
logInfo = {
|
|
49
|
-
level:
|
|
30
|
+
level: LogLevel.Info,
|
|
50
31
|
...arguments[0],
|
|
51
32
|
};
|
|
52
33
|
}
|
|
@@ -56,7 +37,7 @@ function createLogger(options = {}) {
|
|
|
56
37
|
if (message && typeof message === 'object') {
|
|
57
38
|
logInfo = {
|
|
58
39
|
...message,
|
|
59
|
-
level:
|
|
40
|
+
level: message.level ?? level,
|
|
60
41
|
};
|
|
61
42
|
}
|
|
62
43
|
else {
|
|
@@ -77,7 +58,7 @@ function createLogger(options = {}) {
|
|
|
77
58
|
message,
|
|
78
59
|
};
|
|
79
60
|
if (meta.message) {
|
|
80
|
-
logInfo.message = `${
|
|
61
|
+
logInfo.message = `${getLogMessage(logInfo.message)} ${getLogMessage(meta.message)}`;
|
|
81
62
|
}
|
|
82
63
|
if (meta.stack) {
|
|
83
64
|
logInfo.stack = meta.stack;
|
|
@@ -92,27 +73,27 @@ function createLogger(options = {}) {
|
|
|
92
73
|
}
|
|
93
74
|
}
|
|
94
75
|
// Check if we should log this message
|
|
95
|
-
const minLevel =
|
|
96
|
-
if (minLevel && !
|
|
76
|
+
const minLevel = globalLogLevel ?? options.logLevel;
|
|
77
|
+
if (minLevel && !isAboveLevel(logInfo.level, minLevel)) {
|
|
97
78
|
return logger;
|
|
98
79
|
}
|
|
99
80
|
// Add timestamp and root metadata.
|
|
100
81
|
// Ensure there is a message property.
|
|
101
82
|
logInfo = {
|
|
102
|
-
...
|
|
83
|
+
...globalMetadata,
|
|
103
84
|
...rootMetadata,
|
|
104
85
|
timestamp: new Date().toISOString(),
|
|
105
86
|
...logInfo,
|
|
106
|
-
message:
|
|
87
|
+
message: logInfo.message ?? '',
|
|
107
88
|
};
|
|
108
|
-
for (const transport of
|
|
89
|
+
for (const transport of logTransports) {
|
|
109
90
|
if (transport.logLevel) {
|
|
110
|
-
if (!
|
|
91
|
+
if (!isAboveLevel(logInfo.level, transport.logLevel)) {
|
|
111
92
|
continue;
|
|
112
93
|
}
|
|
113
94
|
}
|
|
114
95
|
transport.log({
|
|
115
|
-
...
|
|
96
|
+
...filterReporterMetadata(logInfo, transport),
|
|
116
97
|
// These would break the transport if excluded.
|
|
117
98
|
level: logInfo.level,
|
|
118
99
|
message: logInfo.message,
|
|
@@ -130,19 +111,18 @@ function createLogger(options = {}) {
|
|
|
130
111
|
logger: this,
|
|
131
112
|
done: ({ message, level, metadata } = {}) => {
|
|
132
113
|
const duration = new Date().getTime() - start.getTime();
|
|
133
|
-
logger.log(level
|
|
114
|
+
logger.log(level ?? LogLevel.Info, message ?? 'Timer Completed', { duration, ...(metadata ?? {}) });
|
|
134
115
|
return true;
|
|
135
116
|
},
|
|
136
117
|
};
|
|
137
118
|
},
|
|
138
119
|
// Forward the log levels into the log function, essentially shortcuts.
|
|
139
|
-
debug: (...args) => logger.log(
|
|
140
|
-
info: (...args) => logger.log(
|
|
141
|
-
warn: (...args) => logger.log(
|
|
142
|
-
error: (...args) => logger.log(
|
|
120
|
+
debug: (...args) => logger.log(LogLevel.Debug, ...args),
|
|
121
|
+
info: (...args) => logger.log(LogLevel.Info, ...args),
|
|
122
|
+
warn: (...args) => logger.log(LogLevel.Warn, ...args),
|
|
123
|
+
error: (...args) => logger.log(LogLevel.Error, ...args),
|
|
143
124
|
};
|
|
144
125
|
return logger;
|
|
145
126
|
}
|
|
146
|
-
|
|
147
|
-
exports.logger = createLogger();
|
|
127
|
+
export const logger = createLogger();
|
|
148
128
|
//# sourceMappingURL=index.js.map
|
package/lib/logger/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAyC,QAAQ,EAAqC,MAAM,UAAU,CAAC;AAC9G,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtD,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAa,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAEnE,MAAM,CAAC,IAAI,cAAoC,CAAC;AAChD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAsB;IAChD,cAAc,GAAG,KAAK,IAAI,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAyB,EAAE;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE5C,MAAM,MAAM,GAAY;QACtB,8DAA8D;QAC9D,yEAAyE;QACzE,GAAG;YACD,IAAI,OAAsB,CAAC;YAE3B,oDAAoD;YACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO,GAAG;oBACR,KAAK,EAAE,QAAQ,CAAC,IAAI;oBACpB,GAAG,SAAS,CAAC,CAAC,CAAC;iBAChB,CAAC;aACH;YACD,mDAAmD;iBAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBAC1C,OAAO,GAAG;wBACR,GAAG,OAAO;wBACV,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;qBAC9B,CAAC;iBACH;qBAAM;oBACL,OAAO,GAAG;wBACR,KAAK;wBACL,OAAO;qBACR,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEzD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;oBAC7C,OAAO,GAAG;wBACR,GAAG,IAAI;wBACP,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACrB,OAAO;qBACR,CAAC;oBAEF,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,OAAO,CAAC,OAAO,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;qBACtF;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE;wBACd,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;qBAC5B;iBACF;qBAAM;oBACL,OAAO,GAAG;wBACR,KAAK;wBACL,KAAK;wBACL,OAAO;qBACR,CAAC;iBACH;aACF;YAED,sCAAsC;YACtC,MAAM,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC;YACpD,IAAI,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;gBACtD,OAAO,MAAM,CAAC;aACf;YAED,mCAAmC;YACnC,sCAAsC;YACtC,OAAO,GAAG;gBACR,GAAG,cAAc;gBACjB,GAAG,YAAY;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,OAAO;gBACV,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;aAC/B,CAAC;YAEF,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;gBACrC,IAAI,SAAS,CAAC,QAAQ,EAAE;oBACtB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;wBACpD,SAAS;qBACV;iBACF;gBACD,SAAS,CAAC,GAAG,CAAC;oBACZ,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC;oBAC7C,+CAA+C;oBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;aACJ;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,QAAkB;YACtB,OAAO,YAAY,CAAC,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,UAAU;YACR,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YAEzB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;oBAC1C,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;oBACxD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,iBAAiB,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpG,OAAO,IAAI,CAAC;gBACd,CAAC;aACF,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;QACvD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;QACrD,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;KACxD,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC"}
|
package/lib/logger/index.test.js
CHANGED
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const reporters_1 = require("../reporters");
|
|
6
|
-
const types_1 = require("../types");
|
|
1
|
+
import { createLogger, setLogLevel as setGlobalLogLevel, logTransports, consoleTransport } from '.';
|
|
2
|
+
import { init } from '..';
|
|
3
|
+
import { addMetadata, setUser } from '../reporters';
|
|
4
|
+
import { LogLevel } from '../types';
|
|
7
5
|
// This isn't actually asserting anything.
|
|
8
6
|
// But it ensures that the logs look correct, and no errors get thrown.
|
|
9
7
|
describe('logger', () => {
|
|
10
|
-
const logger =
|
|
8
|
+
const logger = createLogger({
|
|
11
9
|
metadata: {
|
|
12
10
|
service: 'test',
|
|
13
11
|
},
|
|
14
12
|
});
|
|
15
13
|
// Manually set the log transports.
|
|
16
|
-
|
|
17
|
-
const transport =
|
|
14
|
+
logTransports.length = 0;
|
|
15
|
+
const transport = consoleTransport({
|
|
18
16
|
// So we can see everything.
|
|
19
17
|
ignoreMetadataPatterns: [],
|
|
20
18
|
});
|
|
21
|
-
|
|
19
|
+
logTransports.push(transport);
|
|
22
20
|
it('should log', async () => {
|
|
23
21
|
logger.log({
|
|
24
22
|
level: 'info',
|
|
25
23
|
message: 'data',
|
|
26
24
|
});
|
|
27
25
|
logger.log({ data: 'obj' });
|
|
28
|
-
logger.log(
|
|
29
|
-
logger.log(
|
|
30
|
-
|
|
26
|
+
logger.log(LogLevel.Debug, 'level, message', { data: 'obj' });
|
|
27
|
+
logger.log(LogLevel.Debug, 'level, message, metadata', { data: 'obj' });
|
|
28
|
+
init({
|
|
31
29
|
service: 'test-service',
|
|
32
30
|
environment: 'test',
|
|
33
31
|
version: 'no-version',
|
|
@@ -41,17 +39,17 @@ describe('logger', () => {
|
|
|
41
39
|
const timer = logger.startTimer();
|
|
42
40
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
43
41
|
timer.done({ message: 'timer done', metadata: { id: 1 } });
|
|
44
|
-
(
|
|
45
|
-
|
|
42
|
+
setGlobalLogLevel(LogLevel.Info);
|
|
43
|
+
addMetadata({ global: 'metadata' });
|
|
46
44
|
logger.debug('You should not see this');
|
|
47
45
|
logger.info('You should see this with { global: "metadata" }');
|
|
48
|
-
(
|
|
49
|
-
|
|
46
|
+
setGlobalLogLevel(null);
|
|
47
|
+
setUser({
|
|
50
48
|
id: '123',
|
|
51
49
|
email: 'test@example.com',
|
|
52
50
|
});
|
|
53
51
|
logger.debug('debug call, user metadata');
|
|
54
|
-
transport.logLevel =
|
|
52
|
+
transport.logLevel = LogLevel.Info;
|
|
55
53
|
logger.debug('You should not see this');
|
|
56
54
|
logger.info('You should see this');
|
|
57
55
|
transport.logLevel = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/logger/index.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/logger/index.test.ts"],"names":[],"mappings":"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"}
|
package/lib/logger/utils.js
CHANGED
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLogMessage = exports.isAboveLevel = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
1
|
+
import { LogLevel } from '../types';
|
|
5
2
|
/**
|
|
6
3
|
* Checks if a log level is above the global log level.
|
|
7
4
|
* @param level The log level to check
|
|
8
5
|
* @param checkLevel THe log level to check against
|
|
9
6
|
* @returns Is above the checkLevel?
|
|
10
7
|
*/
|
|
11
|
-
function isAboveLevel(level, checkLevel) {
|
|
12
|
-
const levels = [
|
|
8
|
+
export function isAboveLevel(level, checkLevel) {
|
|
9
|
+
const levels = [LogLevel.Debug, LogLevel.Info, LogLevel.Warn, LogLevel.Error];
|
|
13
10
|
return levels.indexOf(level) >= levels.indexOf(checkLevel);
|
|
14
11
|
}
|
|
15
|
-
exports.isAboveLevel = isAboveLevel;
|
|
16
12
|
/**
|
|
17
13
|
* Ensures a message output is a string.
|
|
18
14
|
* @param message The message to assert is/convert to a string
|
|
19
15
|
* @returns The message as a string
|
|
20
16
|
*/
|
|
21
|
-
function getLogMessage(message) {
|
|
17
|
+
export function getLogMessage(message) {
|
|
22
18
|
if (typeof message === 'string') {
|
|
23
19
|
return message;
|
|
24
20
|
}
|
|
@@ -28,5 +24,4 @@ function getLogMessage(message) {
|
|
|
28
24
|
}
|
|
29
25
|
return String(message);
|
|
30
26
|
}
|
|
31
|
-
exports.getLogMessage = getLogMessage;
|
|
32
27
|
//# sourceMappingURL=utils.js.map
|
package/lib/logger/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/logger/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/logger/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAe,EAAE,UAAoB;IAChE,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAY;IACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,OAAO,CAAC;KAChB;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE;QACnD,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC7B;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -23,11 +23,14 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
|
|
|
23
23
|
* @deprecated Prefer using the dedicated `logSampleRate`, `rumSampleRate`, and `replaySampleRate` options.
|
|
24
24
|
*/
|
|
25
25
|
sampleRate?: number;
|
|
26
|
+
sessionSampleRate?: number;
|
|
27
|
+
sessionReplaySampleRate?: number;
|
|
26
28
|
/**
|
|
27
29
|
* Sampling rate for browser log collection. Defaults to 100, meaning every log message is sent to Datadog.
|
|
28
30
|
*/
|
|
29
31
|
logSampleRate?: number;
|
|
30
32
|
/**
|
|
33
|
+
* @deprecated Prefer using `sessionSampleRate`.
|
|
31
34
|
* Sampling rate for RUM session collection. Defaults to 100, meaning every browser session is tracked.
|
|
32
35
|
*
|
|
33
36
|
* RUM can be used to track things like core web vitals.
|
|
@@ -36,6 +39,7 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
|
|
|
36
39
|
*/
|
|
37
40
|
rumSampleRate?: number;
|
|
38
41
|
/**
|
|
42
|
+
* @deprecated Prefer using `sessionReplaySampleRate`.
|
|
39
43
|
* Applied after the RUM sample rate, and controls the percentage of sessions tracked as Browser RUM & Session Replay.
|
|
40
44
|
* It defaults to 100, so every session is tracked as Browser RUM & Session Replay by default.
|
|
41
45
|
*
|
|
@@ -47,10 +51,17 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
|
|
|
47
51
|
*/
|
|
48
52
|
useSecureSessionCookie?: boolean;
|
|
49
53
|
/**
|
|
54
|
+
* @deprecated Prefer using `usePartitionedCrossSiteSessionCookie`.
|
|
50
55
|
* Use a secure cross-site session cookie.
|
|
51
56
|
* This allows the RUM Browser SDK to run when the site is loaded from another one (iframe). Implies `useSecureSessionCookie`
|
|
52
57
|
*/
|
|
53
58
|
useCrossSiteSessionCookie?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Use a partitioned secure cross-site session cookie. This allows the RUM Browser SDK to run when the site is loaded from another one (iframe). Implies `useSecureSessionCookie`.
|
|
61
|
+
* Important: If you are using the RUM and Logs Browser SDKs, this option must be configured with identical values
|
|
62
|
+
* @default false
|
|
63
|
+
*/
|
|
64
|
+
usePartitionedCrossSiteSessionCookie?: boolean;
|
|
54
65
|
/**
|
|
55
66
|
* Preserve the session across subdomains for the same site.
|
|
56
67
|
*/
|
|
@@ -100,7 +111,8 @@ export interface DatadogReporterConfig extends ReporterConfigBase {
|
|
|
100
111
|
/**
|
|
101
112
|
* A list of request origins used to inject tracing headers, to be able to connect RUM and backend tracing.
|
|
102
113
|
*/
|
|
103
|
-
|
|
114
|
+
allowedTrackingOrigins?: (string | RegExp)[];
|
|
115
|
+
allowedTracingUrls?: (string | RegExp)[];
|
|
104
116
|
/**
|
|
105
117
|
* Enables action tracking for user interactions. This enables the Heatmap tab within Datadog
|
|
106
118
|
*/
|
|
@@ -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;IAEpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;OAIG;IACH,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAE/C;;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,kBAAkB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACzC;;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,CAuI3F"}
|
|
@@ -1,66 +1,141 @@
|
|
|
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', () => {
|
|
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');
|
|
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', () => {
|
|
38
|
+
this.recordFrustrationEvent('form_validation_error');
|
|
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');
|
|
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');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
recordFrustrationEvent(type) {
|
|
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
|
-
if (forwardErrorsToLogs
|
|
17
|
-
|
|
89
|
+
if (forwardErrorsToLogs === true || enableLogTransport === true) {
|
|
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
|
-
sampleRate: (_d = (_c = config.logSampleRate) !== null && _c !== void 0 ? _c : config.sampleRate) !== null && _d !== void 0 ? _d : 100,
|
|
95
|
+
version: config.version ?? info.version,
|
|
25
96
|
beforeSend: config.beforeLogsSend,
|
|
26
|
-
|
|
27
|
-
|
|
97
|
+
usePartitionedCrossSiteSessionCookie: config.usePartitionedCrossSiteSessionCookie,
|
|
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
|
-
|
|
49
|
-
|
|
117
|
+
version: config.version ?? info.version,
|
|
118
|
+
usePartitionedCrossSiteSessionCookie: config.usePartitionedCrossSiteSessionCookie,
|
|
119
|
+
// Use correct Datadog v6 SDK options
|
|
120
|
+
sessionSampleRate: config.sessionSampleRate ?? config.rumSampleRate ?? config.sampleRate ?? 100,
|
|
121
|
+
sessionReplaySampleRate: config.sessionReplaySampleRate ?? config.replaySampleRate ?? 100,
|
|
122
|
+
// Track interactions (Note: trackFrustrations is not available in Datadog v6)
|
|
123
|
+
trackUserInteractions: config.trackUserInteractions ?? config.trackInteractions ?? false,
|
|
124
|
+
useSecureSessionCookie: config.useSecureSessionCookie ?? !isLocalhost,
|
|
125
|
+
// Note: useCrossSiteSessionCookie is not available in newer Datadog versions
|
|
50
126
|
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',
|
|
127
|
+
trackViewsManually: config.trackViewsManually ?? false,
|
|
128
|
+
actionNameAttribute: config.actionNameAttribute ?? 'data-analytics-name',
|
|
55
129
|
beforeSend: config.beforeSend,
|
|
56
|
-
defaultPrivacyLevel:
|
|
57
|
-
|
|
58
|
-
trackUserInteractions: (_t = config.trackUserInteractions) !== null && _t !== void 0 ? _t : false,
|
|
130
|
+
defaultPrivacyLevel: config.defaultPrivacyLevel ?? 'mask-user-input',
|
|
131
|
+
allowedTracingUrls: config.allowedTracingUrls ?? config.allowedTrackingOrigins,
|
|
59
132
|
excludedActivityUrls: config.excludedActivityUrls,
|
|
60
133
|
});
|
|
134
|
+
// Initialize frustration detector
|
|
135
|
+
new DatadogFrustrationDetector(config);
|
|
61
136
|
const reporter = {
|
|
62
137
|
trackEvent: function (event) {
|
|
63
|
-
|
|
138
|
+
datadogRum.addAction(event.message, {
|
|
64
139
|
level: event.level,
|
|
65
140
|
...event.metadata,
|
|
66
141
|
...event.tags,
|
|
@@ -68,7 +143,7 @@ function datadogReporter(info, config) {
|
|
|
68
143
|
});
|
|
69
144
|
},
|
|
70
145
|
addBreadcrumb: function (breadcrumb) {
|
|
71
|
-
|
|
146
|
+
datadogRum.addAction(breadcrumb.message, {
|
|
72
147
|
...breadcrumb.metadata,
|
|
73
148
|
category: breadcrumb.category,
|
|
74
149
|
});
|
|
@@ -76,30 +151,29 @@ function datadogReporter(info, config) {
|
|
|
76
151
|
addMetadata: function (metadata) {
|
|
77
152
|
for (const [key, value] of Object.entries(metadata)) {
|
|
78
153
|
if (value !== null) {
|
|
79
|
-
|
|
154
|
+
datadogRum.setGlobalContextProperty(key, value);
|
|
80
155
|
// Note, this will add duplicate context data in logs.
|
|
81
156
|
// But this is valuable for logs ingested outside of the browser logger.
|
|
82
|
-
|
|
157
|
+
datadogLogs.setGlobalContextProperty(key, value);
|
|
83
158
|
}
|
|
84
159
|
else {
|
|
85
|
-
|
|
160
|
+
datadogRum.removeGlobalContextProperty(key);
|
|
86
161
|
// But this is valuable for logs ingested outside of the browser logger.
|
|
87
|
-
|
|
162
|
+
datadogLogs.removeGlobalContextProperty(key);
|
|
88
163
|
}
|
|
89
164
|
}
|
|
90
165
|
},
|
|
91
166
|
setUser: function (user) {
|
|
92
|
-
var _a;
|
|
93
167
|
if (user) {
|
|
94
|
-
|
|
168
|
+
datadogRum.setUser({
|
|
95
169
|
...user,
|
|
96
170
|
id: user.id,
|
|
97
171
|
email: user.email,
|
|
98
|
-
name:
|
|
172
|
+
name: user.name ?? user.email,
|
|
99
173
|
});
|
|
100
174
|
}
|
|
101
175
|
else {
|
|
102
|
-
|
|
176
|
+
datadogRum.setUser({});
|
|
103
177
|
}
|
|
104
178
|
},
|
|
105
179
|
setRouteName: function (routeName) {
|
|
@@ -107,26 +181,25 @@ function datadogReporter(info, config) {
|
|
|
107
181
|
},
|
|
108
182
|
setPageName: function (pageName) {
|
|
109
183
|
if (config.trackViewsManually) {
|
|
110
|
-
|
|
184
|
+
datadogRum.startView(pageName);
|
|
111
185
|
}
|
|
112
186
|
else {
|
|
113
187
|
reporter.addMetadata({ pageName });
|
|
114
188
|
}
|
|
115
189
|
},
|
|
116
190
|
reportError: function (error, metadata) {
|
|
117
|
-
|
|
191
|
+
datadogRum.addError(error, metadata);
|
|
118
192
|
},
|
|
119
193
|
reportFeatureFlag: function (flag) {
|
|
120
|
-
|
|
194
|
+
datadogRum.addFeatureFlagEvaluation(flag.name, flag.value);
|
|
121
195
|
},
|
|
122
196
|
recordSession: function () {
|
|
123
|
-
|
|
197
|
+
datadogRum.startSessionReplayRecording();
|
|
124
198
|
},
|
|
125
199
|
recordSessionStop: function () {
|
|
126
|
-
|
|
200
|
+
datadogRum.stopSessionReplayRecording();
|
|
127
201
|
},
|
|
128
202
|
};
|
|
129
203
|
return reporter;
|
|
130
204
|
}
|
|
131
|
-
exports.datadogReporter = datadogReporter;
|
|
132
205
|
//# sourceMappingURL=datadogReporter.js.map
|