@grafana/faro-core 1.19.0 → 2.0.0-beta-2
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/dist/bundle/faro-core.iife.js +1 -1
- package/dist/bundle/types/api/apiTestHelpers.d.ts +2 -0
- package/dist/bundle/types/api/events/initialize.d.ts +4 -6
- package/dist/bundle/types/api/exceptions/initialize.d.ts +4 -6
- package/dist/bundle/types/api/index.d.ts +2 -3
- package/dist/bundle/types/api/initialize.d.ts +1 -3
- package/dist/bundle/types/api/logs/initialize.d.ts +4 -6
- package/dist/bundle/types/api/measurements/initialize.d.ts +4 -6
- package/dist/bundle/types/api/meta/initialize.d.ts +1 -5
- package/dist/bundle/types/api/types.d.ts +3 -44
- package/dist/bundle/types/api/userActions/const.d.ts +6 -0
- package/dist/bundle/types/api/userActions/index.d.ts +3 -0
- package/dist/bundle/types/api/userActions/initialize.d.ts +10 -0
- package/dist/bundle/types/api/userActions/types.d.ts +45 -0
- package/dist/bundle/types/api/userActions/userAction.d.ts +41 -0
- package/dist/bundle/types/index.d.ts +2 -2
- package/dist/bundle/types/semantic.d.ts +0 -14
- package/dist/bundle/types/testUtils/mockTransport.d.ts +1 -1
- package/dist/bundle/types/version.d.ts +1 -1
- package/dist/cjs/api/apiTestHelpers.js +5 -1
- package/dist/cjs/api/apiTestHelpers.js.map +1 -1
- package/dist/cjs/api/events/initialize.js +4 -5
- package/dist/cjs/api/events/initialize.js.map +1 -1
- package/dist/cjs/api/exceptions/initialize.js +6 -7
- package/dist/cjs/api/exceptions/initialize.js.map +1 -1
- package/dist/cjs/api/index.js +5 -8
- package/dist/cjs/api/index.js.map +1 -1
- package/dist/cjs/api/initialize.js +8 -8
- package/dist/cjs/api/initialize.js.map +1 -1
- package/dist/cjs/api/logs/initialize.js +6 -7
- package/dist/cjs/api/logs/initialize.js.map +1 -1
- package/dist/cjs/api/measurements/initialize.js +4 -5
- package/dist/cjs/api/measurements/initialize.js.map +1 -1
- package/dist/cjs/api/meta/initialize.js.map +1 -1
- package/dist/cjs/api/types.js.map +1 -1
- package/dist/cjs/api/userActions/const.js +11 -0
- package/dist/cjs/api/userActions/const.js.map +1 -0
- package/dist/cjs/api/userActions/index.js +11 -0
- package/dist/cjs/api/userActions/index.js.map +1 -0
- package/dist/cjs/api/userActions/initialize.js +57 -0
- package/dist/cjs/api/userActions/initialize.js.map +1 -0
- package/dist/cjs/api/userActions/types.js +11 -0
- package/dist/cjs/api/userActions/types.js.map +1 -0
- package/dist/cjs/api/userActions/userAction.js +165 -0
- package/dist/cjs/api/userActions/userAction.js.map +1 -0
- package/dist/cjs/index.js +5 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/semantic.js +1 -15
- package/dist/cjs/semantic.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/api/apiTestHelpers.js +4 -0
- package/dist/esm/api/apiTestHelpers.js.map +1 -1
- package/dist/esm/api/events/initialize.js +4 -5
- package/dist/esm/api/events/initialize.js.map +1 -1
- package/dist/esm/api/exceptions/initialize.js +4 -5
- package/dist/esm/api/exceptions/initialize.js.map +1 -1
- package/dist/esm/api/index.js +1 -2
- package/dist/esm/api/index.js.map +1 -1
- package/dist/esm/api/initialize.js +8 -7
- package/dist/esm/api/initialize.js.map +1 -1
- package/dist/esm/api/logs/initialize.js +4 -5
- package/dist/esm/api/logs/initialize.js.map +1 -1
- package/dist/esm/api/measurements/initialize.js +4 -5
- package/dist/esm/api/measurements/initialize.js.map +1 -1
- package/dist/esm/api/meta/initialize.js.map +1 -1
- package/dist/esm/api/types.js.map +1 -1
- package/dist/esm/api/userActions/const.js +8 -0
- package/dist/esm/api/userActions/const.js.map +1 -0
- package/dist/esm/api/userActions/index.js +4 -0
- package/dist/esm/api/userActions/index.js.map +1 -0
- package/dist/esm/api/userActions/initialize.js +50 -0
- package/dist/esm/api/userActions/initialize.js.map +1 -0
- package/dist/esm/api/userActions/types.js +10 -0
- package/dist/esm/api/userActions/types.js.map +1 -0
- package/dist/esm/api/userActions/userAction.js +132 -0
- package/dist/esm/api/userActions/userAction.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/semantic.js +0 -14
- package/dist/esm/semantic.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/spec/core/src/api/apiTestHelpers.js +5 -1
- package/dist/spec/core/src/api/apiTestHelpers.js.map +1 -1
- package/dist/spec/core/src/api/events/initialize.js +4 -5
- package/dist/spec/core/src/api/events/initialize.js.map +1 -1
- package/dist/spec/core/src/api/events/initialize.test.js +11 -33
- package/dist/spec/core/src/api/events/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/exceptions/initialize.js +6 -7
- package/dist/spec/core/src/api/exceptions/initialize.js.map +1 -1
- package/dist/spec/core/src/api/exceptions/initialize.test.js +24 -52
- package/dist/spec/core/src/api/exceptions/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/index.js +5 -8
- package/dist/spec/core/src/api/index.js.map +1 -1
- package/dist/spec/core/src/api/initialize.js +8 -8
- package/dist/spec/core/src/api/initialize.js.map +1 -1
- package/dist/spec/core/src/api/initialize.test.js +0 -50
- package/dist/spec/core/src/api/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/logs/initialize.js +6 -7
- package/dist/spec/core/src/api/logs/initialize.js.map +1 -1
- package/dist/spec/core/src/api/logs/initialize.test.js +12 -73
- package/dist/spec/core/src/api/logs/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/measurements/initialize.js +4 -5
- package/dist/spec/core/src/api/measurements/initialize.js.map +1 -1
- package/dist/spec/core/src/api/measurements/initialize.test.js +10 -72
- package/dist/spec/core/src/api/measurements/initialize.test.js.map +1 -1
- package/dist/spec/core/src/api/meta/initialize.js.map +1 -1
- package/dist/spec/core/src/api/types.js.map +1 -1
- package/dist/spec/core/src/api/userActions/const.js +11 -0
- package/dist/spec/core/src/api/userActions/const.js.map +1 -0
- package/dist/spec/core/src/api/userActions/index.js +11 -0
- package/dist/spec/core/src/api/userActions/index.js.map +1 -0
- package/dist/spec/core/src/api/userActions/initialize.js +57 -0
- package/dist/spec/core/src/api/userActions/initialize.js.map +1 -0
- package/dist/spec/core/src/api/userActions/initialize.test.js +62 -0
- package/dist/spec/core/src/api/userActions/initialize.test.js.map +1 -0
- package/dist/spec/core/src/api/userActions/types.js +11 -0
- package/dist/spec/core/src/api/userActions/types.js.map +1 -0
- package/dist/spec/core/src/api/userActions/userAction.js +165 -0
- package/dist/spec/core/src/api/userActions/userAction.js.map +1 -0
- package/dist/spec/core/src/api/userActions/userAction.test.js +75 -0
- package/dist/spec/core/src/api/userActions/userAction.test.js.map +1 -0
- package/dist/spec/core/src/index.js +5 -7
- package/dist/spec/core/src/index.js.map +1 -1
- package/dist/spec/core/src/semantic.js +1 -15
- package/dist/spec/core/src/semantic.js.map +1 -1
- package/dist/spec/core/src/version.js +1 -1
- package/dist/spec/core/src/version.js.map +1 -1
- package/dist/types/api/apiTestHelpers.d.ts +2 -0
- package/dist/types/api/events/initialize.d.ts +4 -6
- package/dist/types/api/exceptions/initialize.d.ts +4 -6
- package/dist/types/api/index.d.ts +2 -3
- package/dist/types/api/initialize.d.ts +1 -3
- package/dist/types/api/logs/initialize.d.ts +4 -6
- package/dist/types/api/measurements/initialize.d.ts +4 -6
- package/dist/types/api/meta/initialize.d.ts +1 -5
- package/dist/types/api/types.d.ts +3 -44
- package/dist/types/api/userActions/const.d.ts +6 -0
- package/dist/types/api/userActions/index.d.ts +3 -0
- package/dist/types/api/userActions/initialize.d.ts +10 -0
- package/dist/types/api/userActions/types.d.ts +45 -0
- package/dist/types/api/userActions/userAction.d.ts +41 -0
- package/dist/types/core/src/api/apiTestHelpers.d.ts +2 -0
- package/dist/types/core/src/api/events/initialize.d.ts +4 -6
- package/dist/types/core/src/api/exceptions/initialize.d.ts +4 -6
- package/dist/types/core/src/api/index.d.ts +2 -3
- package/dist/types/core/src/api/initialize.d.ts +1 -3
- package/dist/types/core/src/api/logs/initialize.d.ts +4 -6
- package/dist/types/core/src/api/measurements/initialize.d.ts +4 -6
- package/dist/types/core/src/api/meta/initialize.d.ts +1 -5
- package/dist/types/core/src/api/types.d.ts +3 -44
- package/dist/types/core/src/api/userActions/const.d.ts +6 -0
- package/dist/types/core/src/api/userActions/index.d.ts +3 -0
- package/dist/types/core/src/api/userActions/initialize.d.ts +10 -0
- package/dist/types/core/src/api/userActions/types.d.ts +45 -0
- package/dist/types/core/src/api/userActions/userAction.d.ts +41 -0
- package/dist/types/core/src/api/userActions/userAction.test.d.ts +1 -0
- package/dist/types/core/src/index.d.ts +2 -2
- package/dist/types/core/src/semantic.d.ts +0 -14
- package/dist/types/core/src/testUtils/mockTransport.d.ts +1 -1
- package/dist/types/core/src/version.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/semantic.d.ts +0 -14
- package/dist/types/testUtils/mockTransport.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +3 -3
- package/dist/bundle/types/api/const.d.ts +0 -4
- package/dist/bundle/types/api/userActionLifecycleHandler.d.ts +0 -13
- package/dist/cjs/api/const.js +0 -8
- package/dist/cjs/api/const.js.map +0 -1
- package/dist/cjs/api/userActionLifecycleHandler.js +0 -58
- package/dist/cjs/api/userActionLifecycleHandler.js.map +0 -1
- package/dist/esm/api/const.js +0 -5
- package/dist/esm/api/const.js.map +0 -1
- package/dist/esm/api/userActionLifecycleHandler.js +0 -43
- package/dist/esm/api/userActionLifecycleHandler.js.map +0 -1
- package/dist/spec/core/src/api/const.js +0 -8
- package/dist/spec/core/src/api/const.js.map +0 -1
- package/dist/spec/core/src/api/userActionLifecycleHandler.js +0 -58
- package/dist/spec/core/src/api/userActionLifecycleHandler.js.map +0 -1
- package/dist/spec/core/src/api/userActionLifecycleHandler.test.js +0 -169
- package/dist/spec/core/src/api/userActionLifecycleHandler.test.js.map +0 -1
- package/dist/types/api/const.d.ts +0 -4
- package/dist/types/api/userActionLifecycleHandler.d.ts +0 -13
- package/dist/types/core/src/api/const.d.ts +0 -4
- package/dist/types/core/src/api/userActionLifecycleHandler.d.ts +0 -13
- /package/dist/types/core/src/api/{userActionLifecycleHandler.test.d.ts → userActions/initialize.test.d.ts} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
var initialize_1 = require("../../initialize");
|
|
4
7
|
var testUtils_1 = require("../../testUtils");
|
|
5
8
|
var transports_1 = require("../../transports");
|
|
6
|
-
var utils_1 = require("../../utils");
|
|
7
9
|
var apiTestHelpers_1 = require("../apiTestHelpers");
|
|
8
|
-
var
|
|
9
|
-
var ItemBuffer_1 = require("../ItemBuffer");
|
|
10
|
+
var userAction_1 = __importDefault(require("../userActions/userAction"));
|
|
10
11
|
var initialize_2 = require("./initialize");
|
|
11
12
|
describe('api.exceptions', function () {
|
|
12
13
|
function createAPI(_a) {
|
|
@@ -189,17 +190,11 @@ describe('api.exceptions', function () {
|
|
|
189
190
|
});
|
|
190
191
|
it('Adds error cause to error context', function () {
|
|
191
192
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
192
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
193
193
|
var error = new Error('test', { cause: 'foo' });
|
|
194
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
195
194
|
var error2 = new Error('test2', { cause: [1, 3] });
|
|
196
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
197
195
|
var error3 = new Error('test3', { cause: { a: 'b' } });
|
|
198
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
199
196
|
var error4 = new Error('test4', { cause: new Error('original error') });
|
|
200
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
201
197
|
var error5 = new Error('test5', { cause: null });
|
|
202
|
-
// @ts-expect-error cause is missing in TS type Error
|
|
203
198
|
var error6 = new Error('test6', { cause: undefined });
|
|
204
199
|
var error7 = new Error('test6');
|
|
205
200
|
api.pushError(error);
|
|
@@ -273,50 +268,27 @@ describe('api.exceptions', function () {
|
|
|
273
268
|
expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).value).toEqual(typeErrorMsg);
|
|
274
269
|
});
|
|
275
270
|
});
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
var api = (0, initialize_2.initializeExceptionsAPI)({
|
|
290
|
-
unpatchedConsole: console,
|
|
291
|
-
internalLogger: internalLogger,
|
|
292
|
-
config: config,
|
|
293
|
-
metas: apiTestHelpers_1.mockMetas,
|
|
294
|
-
transports: apiTestHelpers_1.mockTransports,
|
|
295
|
-
tracesApi: apiTestHelpers_1.mockTracesApi,
|
|
296
|
-
actionBuffer: actionBuffer,
|
|
297
|
-
getMessage: getMessage,
|
|
298
|
-
});
|
|
299
|
-
api.pushError(new Error('test error'));
|
|
300
|
-
expect(actionBuffer.size()).toBe(1);
|
|
301
|
-
message = {
|
|
302
|
-
type: const_1.USER_ACTION_END,
|
|
303
|
-
name: 'testAction',
|
|
304
|
-
id: 'parent-id',
|
|
305
|
-
startTime: (0, utils_1.dateNow)(),
|
|
306
|
-
endTime: (0, utils_1.dateNow)(),
|
|
307
|
-
duration: 0,
|
|
308
|
-
eventType: 'click',
|
|
309
|
-
};
|
|
310
|
-
api.pushError(new Error('test error 2'));
|
|
311
|
-
expect(actionBuffer.size()).toBe(1);
|
|
312
|
-
message = {
|
|
313
|
-
type: const_1.USER_ACTION_CANCEL,
|
|
314
|
-
name: 'testAction',
|
|
315
|
-
parentId: 'parent-id',
|
|
316
|
-
};
|
|
317
|
-
api.pushError(new Error('test error 3'));
|
|
318
|
-
expect(actionBuffer.size()).toBe(1);
|
|
271
|
+
});
|
|
272
|
+
describe('User action', function () {
|
|
273
|
+
it('buffers the error if a user action is in progress', function () {
|
|
274
|
+
var internalLogger = testUtils_1.mockInternalLogger;
|
|
275
|
+
var config = (0, testUtils_1.mockConfig)();
|
|
276
|
+
var api = (0, initialize_2.initializeExceptionsAPI)({
|
|
277
|
+
unpatchedConsole: console,
|
|
278
|
+
internalLogger: internalLogger,
|
|
279
|
+
config: config,
|
|
280
|
+
metas: apiTestHelpers_1.mockMetas,
|
|
281
|
+
transports: apiTestHelpers_1.mockTransports,
|
|
282
|
+
tracesApi: apiTestHelpers_1.mockTracesApi,
|
|
283
|
+
userActionsApi: apiTestHelpers_1.mockUserActionsApi,
|
|
319
284
|
});
|
|
285
|
+
apiTestHelpers_1.mockUserActionsApi.getActiveUserAction.mockReturnValueOnce(new userAction_1.default({
|
|
286
|
+
name: 'test',
|
|
287
|
+
trigger: 'foo',
|
|
288
|
+
transports: apiTestHelpers_1.mockTransports,
|
|
289
|
+
}));
|
|
290
|
+
api.pushError(new Error('test'));
|
|
291
|
+
expect(apiTestHelpers_1.mockTransports.execute).not.toHaveBeenCalled();
|
|
320
292
|
});
|
|
321
293
|
});
|
|
322
294
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/exceptions/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport { TransportItem, TransportItemType } from '../../transports';\nimport { dateNow } from '../../utils';\nimport { mockMetas, mockTracesApi, mockTransports } from '../apiTestHelpers';\nimport { USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_START } from '../const';\nimport { ItemBuffer } from '../ItemBuffer';\nimport type { API, APIEvent, ApiMessageBusMessages } from '../types';\n\nimport { initializeExceptionsAPI } from './initialize';\nimport type { ExceptionEvent, ExceptionEventExtended, ExceptionStackFrame, PushErrorOptions } from './types';\n\ndescribe('api.exceptions', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushError', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n it('error with overrides', () => {\n const frames: ExceptionStackFrame[] = [\n {\n filename: 'foo.js',\n function: 'FooFn',\n colno: 4,\n lineno: 23,\n },\n {\n filename: 'bar.js',\n function: 'BarFn',\n colno: 6,\n lineno: 52,\n },\n ];\n\n const additionalContext = {\n message: 'React error boundary',\n componentStackTrace: 'componentStackTrace',\n };\n\n api.pushError(new Error('test exception'), {\n stackFrames: frames,\n type: 'TestError',\n context: additionalContext,\n });\n\n expect(transport.items).toHaveLength(1);\n\n const payload = transport.items[0];\n expect(payload?.payload).toBeTruthy();\n expect(payload?.type).toEqual(TransportItemType.EXCEPTION);\n\n const evt = payload?.payload as ExceptionEvent;\n expect(evt.type).toEqual('TestError');\n expect(evt.value).toEqual('test exception');\n expect(evt.stacktrace).toEqual({ frames });\n expect(evt.context).toEqual(additionalContext);\n });\n\n it('error without overrides', () => {\n const err = new Error('test');\n api.pushError(err);\n expect(transport.items).toHaveLength(1);\n\n const payload = transport.items[0];\n expect(payload?.meta.app?.name).toEqual('test');\n expect(payload?.payload).toBeTruthy();\n expect(payload?.type).toEqual(TransportItemType.EXCEPTION);\n\n const evt = payload?.payload as ExceptionEvent;\n expect(evt.type).toEqual('Error');\n expect(evt.value).toEqual('test');\n expect(evt.timestamp).toBeTruthy();\n\n const stacktrace = evt.stacktrace;\n expect(stacktrace).toBeTruthy();\n expect(stacktrace?.frames.length).toBeGreaterThan(3);\n expect(stacktrace?.frames[0]?.filename).toEqual('Error: test');\n });\n\n it('does not stringify empty context', () => {\n api.pushError(new Error('test'));\n api.pushError(new Error('test2'), {\n context: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<ExceptionEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<ExceptionEvent>).payload.context).toBeUndefined();\n });\n\n it('add the original error to the payload', () => {\n const transport = new MockTransport();\n const config = mockConfig({\n transports: [transport],\n preserveOriginalError: true,\n });\n\n const { api } = initializeFaro(config);\n\n const error = new Error('test');\n api.pushError(error, { originalError: error });\n\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEventExtended).originalError).toEqual(error);\n });\n\n describe('Filtering', () => {\n it('filters the same event', () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with same message and different stacktrace\", () => {\n const error1 = new Error('test');\n const error2 = new Error('test');\n\n api.pushError(error1);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with other message and same stacktrace\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.message = 'test2';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and same stacktrace but different type\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.name = 'Another Type';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters an event and doesn't filter the next different one\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.name = 'Another Type';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error, {\n skipDedupe: true,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message, same stacktrace, same type but different context\", () => {\n const error = new Error('test');\n\n api.pushError(error, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushErrorOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const error = new Error('test');\n\n api.pushError(error, { spanContext });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushEvent('test', undefined, undefined, { timestampOverwriteMs: 123 });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('Adds error cause to error context', () => {\n // @ts-expect-error cause is missing in TS type Error\n const error = new Error('test', { cause: 'foo' });\n // @ts-expect-error cause is missing in TS type Error\n const error2 = new Error('test2', { cause: [1, 3] });\n // @ts-expect-error cause is missing in TS type Error\n const error3 = new Error('test3', { cause: { a: 'b' } });\n // @ts-expect-error cause is missing in TS type Error\n const error4 = new Error('test4', { cause: new Error('original error') });\n // @ts-expect-error cause is missing in TS type Error\n const error5 = new Error('test5', { cause: null });\n // @ts-expect-error cause is missing in TS type Error\n const error6 = new Error('test6', { cause: undefined });\n const error7 = new Error('test6');\n\n api.pushError(error);\n api.pushError(error2);\n api.pushError(error3);\n api.pushError(error4);\n api.pushError(error5);\n api.pushError(error6);\n api.pushError(error7);\n\n expect(transport.items).toHaveLength(7);\n\n expect((transport.items[0]?.payload as ExceptionEvent)?.context).toEqual({ cause: 'foo' });\n expect((transport.items[1]?.payload as ExceptionEvent)?.context).toEqual({ cause: '[1,3]' });\n expect((transport.items[2]?.payload as ExceptionEvent)?.context).toEqual({ cause: '{\"a\":\"b\"}' });\n expect((transport.items[3]?.payload as ExceptionEvent)?.context).toEqual({ cause: 'Error: original error' });\n expect((transport.items[4]?.payload as ExceptionEvent)?.context).toBeUndefined();\n expect((transport.items[5]?.payload as ExceptionEvent)?.context).toBeUndefined();\n expect((transport.items[6]?.payload as ExceptionEvent)?.context).toBeUndefined();\n });\n\n it('stringifies all values added to the context', () => {\n api.pushError(new Error('Error with context'), {\n context: {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n },\n });\n\n const context = (transport.items[0]?.payload as ExceptionEvent)?.context;\n expect(context).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n\n Object.values(context ?? {}).forEach((value) => {\n expect(typeof value).toBe('string');\n });\n });\n });\n\n describe('config.ignoreErrors', () => {\n it('will filter out errors by string or regex', () => {\n const transport = new MockTransport();\n\n const { api } = initializeFaro(\n mockConfig({\n transports: [transport],\n ignoreErrors: ['Error: ResizeObserver', /FetchError[:\\s\\w\\/]*pwc/, 'chrome-extension://mock-extension-id'],\n })\n );\n\n api.pushError(new Error('Error: ResizeObserver loop limit exceeded'));\n api.pushError(new Error('FetchError: 404 \\n Instantiating https://pwc.grafana.net/public/react-router-dom'));\n api.pushError(new Error('FetchError: 404 \\n Instantiating https://pwc.grafana.net/public/@emotion/css'));\n\n const typeErrorMsg = 'TypeError: _.viz is undefined';\n api.pushError(new Error(typeErrorMsg));\n\n const mockErrorWithStacktrace = new Error('Mock error for testing');\n mockErrorWithStacktrace.name = 'MockError';\n mockErrorWithStacktrace.stack = `MockError: Mock error for testing\n at mockFunction (chrome-extension://mock-extension-id/mock-file.js:10:15)\n at anotherFunction (chrome-extension://mock-extension-id/mock-file.js:20:5)\n at Object.<anonymous> (chrome-extension://mock-extension-id/mock-file.js:30:3)`;\n api.pushError(mockErrorWithStacktrace);\n\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).value).toEqual(typeErrorMsg);\n });\n });\n\n describe('User action', () => {\n it('buffers the error if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const actionBuffer = new ItemBuffer<TransportItem<APIEvent>>();\n\n let message: ApiMessageBusMessages | undefined;\n\n const getMessage = () => message;\n\n message = {\n type: USER_ACTION_START,\n name: 'testAction',\n startTime: Date.now(),\n parentId: 'parent-id',\n };\n const api = initializeExceptionsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n actionBuffer,\n getMessage,\n });\n\n api.pushError(new Error('test error'));\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_END,\n name: 'testAction',\n id: 'parent-id',\n startTime: dateNow(),\n endTime: dateNow(),\n duration: 0,\n eventType: 'click',\n };\n\n api.pushError(new Error('test error 2'));\n expect(actionBuffer.size()).toBe(1);\n\n message = {\n type: USER_ACTION_CANCEL,\n name: 'testAction',\n parentId: 'parent-id',\n };\n\n api.pushError(new Error('test error 3'));\n expect(actionBuffer.size()).toBe(1);\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../../src/api/exceptions/initialize.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { initializeFaro } from '../../initialize';\nimport { mockConfig, mockInternalLogger, MockTransport } from '../../testUtils';\nimport { TransportItem, TransportItemType } from '../../transports';\nimport { mockMetas, mockTracesApi, mockTransports, mockUserActionsApi } from '../apiTestHelpers';\nimport type { API } from '../types';\nimport UserAction from '../userActions/userAction';\n\nimport { initializeExceptionsAPI } from './initialize';\nimport type { ExceptionEvent, ExceptionEventExtended, ExceptionStackFrame, PushErrorOptions } from './types';\n\ndescribe('api.exceptions', () => {\n function createAPI({ dedupe }: { dedupe: boolean } = { dedupe: true }): [API, MockTransport] {\n const transport = new MockTransport();\n const config = mockConfig({\n dedupe,\n transports: [transport],\n });\n\n const { api } = initializeFaro(config);\n\n return [api, transport];\n }\n\n describe('pushError', () => {\n let api: API;\n let transport: MockTransport;\n\n beforeEach(() => {\n [api, transport] = createAPI();\n });\n\n it('error with overrides', () => {\n const frames: ExceptionStackFrame[] = [\n {\n filename: 'foo.js',\n function: 'FooFn',\n colno: 4,\n lineno: 23,\n },\n {\n filename: 'bar.js',\n function: 'BarFn',\n colno: 6,\n lineno: 52,\n },\n ];\n\n const additionalContext = {\n message: 'React error boundary',\n componentStackTrace: 'componentStackTrace',\n };\n\n api.pushError(new Error('test exception'), {\n stackFrames: frames,\n type: 'TestError',\n context: additionalContext,\n });\n\n expect(transport.items).toHaveLength(1);\n\n const payload = transport.items[0];\n expect(payload?.payload).toBeTruthy();\n expect(payload?.type).toEqual(TransportItemType.EXCEPTION);\n\n const evt = payload?.payload as ExceptionEvent;\n expect(evt.type).toEqual('TestError');\n expect(evt.value).toEqual('test exception');\n expect(evt.stacktrace).toEqual({ frames });\n expect(evt.context).toEqual(additionalContext);\n });\n\n it('error without overrides', () => {\n const err = new Error('test');\n api.pushError(err);\n expect(transport.items).toHaveLength(1);\n\n const payload = transport.items[0];\n expect(payload?.meta.app?.name).toEqual('test');\n expect(payload?.payload).toBeTruthy();\n expect(payload?.type).toEqual(TransportItemType.EXCEPTION);\n\n const evt = payload?.payload as ExceptionEvent;\n expect(evt.type).toEqual('Error');\n expect(evt.value).toEqual('test');\n expect(evt.timestamp).toBeTruthy();\n\n const stacktrace = evt.stacktrace;\n expect(stacktrace).toBeTruthy();\n expect(stacktrace?.frames.length).toBeGreaterThan(3);\n expect(stacktrace?.frames[0]?.filename).toEqual('Error: test');\n });\n\n it('does not stringify empty context', () => {\n api.pushError(new Error('test'));\n api.pushError(new Error('test2'), {\n context: {},\n });\n expect(transport.items).toHaveLength(2);\n expect((transport.items[0] as TransportItem<ExceptionEvent>).payload.context).toBeUndefined();\n expect((transport.items[0] as TransportItem<ExceptionEvent>).payload.context).toBeUndefined();\n });\n\n it('add the original error to the payload', () => {\n const transport = new MockTransport();\n const config = mockConfig({\n transports: [transport],\n preserveOriginalError: true,\n });\n\n const { api } = initializeFaro(config);\n\n const error = new Error('test');\n api.pushError(error, { originalError: error });\n\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEventExtended).originalError).toEqual(error);\n });\n\n describe('Filtering', () => {\n it('filters the same event', () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n });\n\n it(\"doesn't filter events with same message and different stacktrace\", () => {\n const error1 = new Error('test');\n const error2 = new Error('test');\n\n api.pushError(error1);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error2);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with other message and same stacktrace\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.message = 'test2';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message and same stacktrace but different type\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.name = 'Another Type';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"filters an event and doesn't filter the next different one\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n error.name = 'Another Type';\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when dedupe is false\", () => {\n [api, transport] = createAPI({ dedupe: false });\n\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error);\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter when skipDedupe is true\", () => {\n const error = new Error('test');\n\n api.pushError(error);\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error, {\n skipDedupe: true,\n });\n expect(transport.items).toHaveLength(2);\n });\n\n it(\"doesn't filter events with same message, same stacktrace, same type but different context\", () => {\n const error = new Error('test');\n\n api.pushError(error, { context: { foo: 'bar' } });\n expect(transport.items).toHaveLength(1);\n\n api.pushError(error, { context: { bar: 'baz' } });\n expect(transport.items).toHaveLength(2);\n });\n\n it('uses traceId and spanId from custom context', () => {\n const spanContext: PushErrorOptions['spanContext'] = {\n traceId: 'my-trace-id',\n spanId: 'my-span-id',\n };\n\n const error = new Error('test');\n\n api.pushError(error, { spanContext });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).trace).toStrictEqual({\n trace_id: 'my-trace-id',\n span_id: 'my-span-id',\n });\n });\n\n it('Sets the timestamp to the provided custom timestamp', () => {\n api.pushEvent('test', undefined, undefined, { timestampOverwriteMs: 123 });\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).timestamp).toBe('1970-01-01T00:00:00.123Z');\n });\n\n it('Adds error cause to error context', () => {\n const error = new Error('test', { cause: 'foo' });\n const error2 = new Error('test2', { cause: [1, 3] });\n const error3 = new Error('test3', { cause: { a: 'b' } });\n const error4 = new Error('test4', { cause: new Error('original error') });\n const error5 = new Error('test5', { cause: null });\n const error6 = new Error('test6', { cause: undefined });\n const error7 = new Error('test6');\n\n api.pushError(error);\n api.pushError(error2);\n api.pushError(error3);\n api.pushError(error4);\n api.pushError(error5);\n api.pushError(error6);\n api.pushError(error7);\n\n expect(transport.items).toHaveLength(7);\n\n expect((transport.items[0]?.payload as ExceptionEvent)?.context).toEqual({ cause: 'foo' });\n expect((transport.items[1]?.payload as ExceptionEvent)?.context).toEqual({ cause: '[1,3]' });\n expect((transport.items[2]?.payload as ExceptionEvent)?.context).toEqual({ cause: '{\"a\":\"b\"}' });\n expect((transport.items[3]?.payload as ExceptionEvent)?.context).toEqual({ cause: 'Error: original error' });\n expect((transport.items[4]?.payload as ExceptionEvent)?.context).toBeUndefined();\n expect((transport.items[5]?.payload as ExceptionEvent)?.context).toBeUndefined();\n expect((transport.items[6]?.payload as ExceptionEvent)?.context).toBeUndefined();\n });\n\n it('stringifies all values added to the context', () => {\n api.pushError(new Error('Error with context'), {\n context: {\n // @ts-expect-error\n a: 1,\n b: 'foo',\n // @ts-expect-error\n c: true,\n // @ts-expect-error\n d: { e: 'bar' },\n // @ts-expect-error\n g: null,\n // @ts-expect-error\n h: undefined,\n // @ts-expect-error\n i: [1, 2, 3],\n },\n });\n\n const context = (transport.items[0]?.payload as ExceptionEvent)?.context;\n expect(context).toStrictEqual({\n a: '1',\n b: 'foo',\n c: 'true',\n d: '{\"e\":\"bar\"}',\n g: 'null',\n h: 'undefined',\n i: '[1,2,3]',\n });\n\n Object.values(context ?? {}).forEach((value) => {\n expect(typeof value).toBe('string');\n });\n });\n });\n\n describe('config.ignoreErrors', () => {\n it('will filter out errors by string or regex', () => {\n const transport = new MockTransport();\n\n const { api } = initializeFaro(\n mockConfig({\n transports: [transport],\n ignoreErrors: ['Error: ResizeObserver', /FetchError[:\\s\\w\\/]*pwc/, 'chrome-extension://mock-extension-id'],\n })\n );\n\n api.pushError(new Error('Error: ResizeObserver loop limit exceeded'));\n api.pushError(new Error('FetchError: 404 \\n Instantiating https://pwc.grafana.net/public/react-router-dom'));\n api.pushError(new Error('FetchError: 404 \\n Instantiating https://pwc.grafana.net/public/@emotion/css'));\n\n const typeErrorMsg = 'TypeError: _.viz is undefined';\n api.pushError(new Error(typeErrorMsg));\n\n const mockErrorWithStacktrace = new Error('Mock error for testing');\n mockErrorWithStacktrace.name = 'MockError';\n mockErrorWithStacktrace.stack = `MockError: Mock error for testing\n at mockFunction (chrome-extension://mock-extension-id/mock-file.js:10:15)\n at anotherFunction (chrome-extension://mock-extension-id/mock-file.js:20:5)\n at Object.<anonymous> (chrome-extension://mock-extension-id/mock-file.js:30:3)`;\n api.pushError(mockErrorWithStacktrace);\n\n expect(transport.items).toHaveLength(1);\n expect((transport.items[0]?.payload as ExceptionEvent).value).toEqual(typeErrorMsg);\n });\n });\n });\n\n describe('User action', () => {\n it('buffers the error if a user action is in progress', () => {\n const internalLogger = mockInternalLogger;\n const config = mockConfig();\n\n const api = initializeExceptionsAPI({\n unpatchedConsole: console,\n internalLogger,\n config,\n metas: mockMetas,\n transports: mockTransports,\n tracesApi: mockTracesApi,\n userActionsApi: mockUserActionsApi,\n });\n\n (mockUserActionsApi.getActiveUserAction as jest.Mock).mockReturnValueOnce(\n new UserAction({\n name: 'test',\n trigger: 'foo',\n transports: mockTransports,\n })\n );\n api.pushError(new Error('test'));\n expect(mockTransports.execute).not.toHaveBeenCalled();\n });\n });\n});\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.userActionsMessageBus = exports.UserActionState = exports.UserActionSeverity = exports.defaultLogArgsSerializer = exports.defaultErrorArgsSerializer = exports.defaultExceptionType = exports.initializeAPI = void 0;
|
|
4
4
|
var initialize_1 = require("./initialize");
|
|
5
5
|
Object.defineProperty(exports, "initializeAPI", { enumerable: true, get: function () { return initialize_1.initializeAPI; } });
|
|
6
6
|
var exceptions_1 = require("./exceptions");
|
|
@@ -8,11 +8,8 @@ Object.defineProperty(exports, "defaultExceptionType", { enumerable: true, get:
|
|
|
8
8
|
Object.defineProperty(exports, "defaultErrorArgsSerializer", { enumerable: true, get: function () { return exceptions_1.defaultErrorArgsSerializer; } });
|
|
9
9
|
var logs_1 = require("./logs");
|
|
10
10
|
Object.defineProperty(exports, "defaultLogArgsSerializer", { enumerable: true, get: function () { return logs_1.defaultLogArgsSerializer; } });
|
|
11
|
-
var
|
|
12
|
-
Object.defineProperty(exports, "
|
|
13
|
-
|
|
14
|
-
Object.defineProperty(exports, "
|
|
15
|
-
Object.defineProperty(exports, "USER_ACTION_END", { enumerable: true, get: function () { return const_1.USER_ACTION_END; } });
|
|
16
|
-
Object.defineProperty(exports, "USER_ACTION_START", { enumerable: true, get: function () { return const_1.USER_ACTION_START; } });
|
|
17
|
-
Object.defineProperty(exports, "USER_ACTION_HALT", { enumerable: true, get: function () { return const_1.USER_ACTION_HALT; } });
|
|
11
|
+
var userActions_1 = require("./userActions");
|
|
12
|
+
Object.defineProperty(exports, "UserActionSeverity", { enumerable: true, get: function () { return userActions_1.UserActionSeverity; } });
|
|
13
|
+
Object.defineProperty(exports, "UserActionState", { enumerable: true, get: function () { return userActions_1.UserActionState; } });
|
|
14
|
+
Object.defineProperty(exports, "userActionsMessageBus", { enumerable: true, get: function () { return userActions_1.userActionsMessageBus; } });
|
|
18
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/index.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAApC,2GAAA,aAAa,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/index.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAApC,2GAAA,aAAa,OAAA;AAKtB,2CAAgF;AAAvE,kHAAA,oBAAoB,OAAA;AAAE,wHAAA,0BAA0B,OAAA;AAYzD,+BAAkD;AAAzC,gHAAA,wBAAwB,OAAA;AAOjC,6CAMuB;AALrB,iHAAA,kBAAkB,OAAA;AAClB,8GAAA,eAAe,OAAA;AAGf,oHAAA,qBAAqB,OAAA","sourcesContent":["export { initializeAPI } from './initialize';\nexport type { API, APIEvent, UserAction } from './types';\n\nexport type { EventAttributes, EventEvent, EventsAPI, PushEventOptions } from './events';\n\nexport { defaultExceptionType, defaultErrorArgsSerializer } from './exceptions';\nexport type {\n ExceptionEvent,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n PushErrorOptions,\n Stacktrace,\n StacktraceParser,\n ExceptionEventExtended,\n} from './exceptions';\n\nexport { defaultLogArgsSerializer } from './logs';\nexport type { LogContext, LogEvent, LogArgsSerializer, LogsAPI, PushLogOptions } from './logs';\n\nexport type { MeasurementEvent, MeasurementsAPI, PushMeasurementOptions } from './measurements';\n\nexport type { MetaAPI } from './meta';\n\nexport {\n UserActionSeverity,\n UserActionState,\n type UserActionInterface,\n type UserActionsAPI,\n userActionsMessageBus,\n} from './userActions';\n\nexport type { OTELApi, TraceContext, TraceEvent, TracesAPI } from './traces';\n"]}
|
|
@@ -11,31 +11,31 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.apiMessageBus = void 0;
|
|
15
14
|
exports.initializeAPI = initializeAPI;
|
|
16
|
-
var utils_1 = require("../utils");
|
|
17
15
|
var events_1 = require("./events");
|
|
18
16
|
var exceptions_1 = require("./exceptions");
|
|
19
17
|
var logs_1 = require("./logs");
|
|
20
18
|
var measurements_1 = require("./measurements");
|
|
21
19
|
var meta_1 = require("./meta");
|
|
22
20
|
var traces_1 = require("./traces");
|
|
23
|
-
var
|
|
24
|
-
exports.apiMessageBus = new utils_1.Observable();
|
|
21
|
+
var userActions_1 = require("./userActions");
|
|
25
22
|
function initializeAPI(unpatchedConsole, internalLogger, config, metas, transports) {
|
|
26
23
|
internalLogger.debug('Initializing API');
|
|
27
|
-
var
|
|
24
|
+
var userActionsApi = (0, userActions_1.initializeUserActionsAPI)({
|
|
25
|
+
transports: transports,
|
|
26
|
+
config: config,
|
|
27
|
+
internalLogger: internalLogger,
|
|
28
|
+
});
|
|
28
29
|
var tracesApi = (0, traces_1.initializeTracesAPI)(unpatchedConsole, internalLogger, config, metas, transports);
|
|
29
30
|
var props = {
|
|
30
31
|
unpatchedConsole: unpatchedConsole,
|
|
31
32
|
internalLogger: internalLogger,
|
|
33
|
+
userActionsApi: userActionsApi,
|
|
32
34
|
config: config,
|
|
33
35
|
metas: metas,
|
|
34
36
|
transports: transports,
|
|
35
37
|
tracesApi: tracesApi,
|
|
36
|
-
actionBuffer: actionBuffer,
|
|
37
|
-
getMessage: getMessage,
|
|
38
38
|
};
|
|
39
|
-
return __assign(__assign(__assign(__assign(__assign(__assign({}, tracesApi), (0, exceptions_1.initializeExceptionsAPI)(props)), (0, meta_1.initializeMetaAPI)(props)), (0, logs_1.initializeLogsAPI)(props)), (0, measurements_1.initializeMeasurementsAPI)(props)), (0, events_1.initializeEventsAPI)(props));
|
|
39
|
+
return __assign(__assign(__assign(__assign(__assign(__assign(__assign({}, tracesApi), (0, exceptions_1.initializeExceptionsAPI)(props)), (0, meta_1.initializeMetaAPI)(props)), (0, logs_1.initializeLogsAPI)(props)), (0, measurements_1.initializeMeasurementsAPI)(props)), (0, events_1.initializeEventsAPI)(props)), userActionsApi);
|
|
40
40
|
}
|
|
41
41
|
//# sourceMappingURL=initialize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/api/initialize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/api/initialize.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAeA,sCAoCC;AA7CD,mCAA+C;AAC/C,2CAAuD;AACvD,+BAA2C;AAC3C,+CAA2D;AAC3D,+BAA2C;AAC3C,mCAA+C;AAE/C,6CAAyD;AAEzD,SAAgB,aAAa,CAC3B,gBAAkC,EAClC,cAA8B,EAC9B,MAAc,EACd,KAAY,EACZ,UAAsB;IAEtB,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEzC,IAAM,cAAc,GAAG,IAAA,sCAAwB,EAAC;QAC9C,UAAU,YAAA;QACV,MAAM,QAAA;QACN,cAAc,gBAAA;KACf,CAAC,CAAC;IAEH,IAAM,SAAS,GAAG,IAAA,4BAAmB,EAAC,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEnG,IAAM,KAAK,GAAG;QACZ,gBAAgB,kBAAA;QAChB,cAAc,gBAAA;QACd,cAAc,gBAAA;QACd,MAAM,QAAA;QACN,KAAK,OAAA;QACL,UAAU,YAAA;QACV,SAAS,WAAA;KACV,CAAC;IAEF,0EACK,SAAS,GACT,IAAA,oCAAuB,EAAC,KAAK,CAAC,GAC9B,IAAA,wBAAiB,EAAC,KAAK,CAAC,GACxB,IAAA,wBAAiB,EAAC,KAAK,CAAC,GACxB,IAAA,wCAAyB,EAAC,KAAK,CAAC,GAChC,IAAA,4BAAmB,EAAC,KAAK,CAAC,GAC1B,cAAc,EACjB;AACJ,CAAC","sourcesContent":["import type { Config } from '../config';\nimport type { InternalLogger } from '../internalLogger';\nimport type { Metas } from '../metas';\nimport type { Transports } from '../transports';\nimport type { UnpatchedConsole } from '../unpatchedConsole';\n\nimport { initializeEventsAPI } from './events';\nimport { initializeExceptionsAPI } from './exceptions';\nimport { initializeLogsAPI } from './logs';\nimport { initializeMeasurementsAPI } from './measurements';\nimport { initializeMetaAPI } from './meta';\nimport { initializeTracesAPI } from './traces';\nimport type { API } from './types';\nimport { initializeUserActionsAPI } from './userActions';\n\nexport function initializeAPI(\n unpatchedConsole: UnpatchedConsole,\n internalLogger: InternalLogger,\n config: Config,\n metas: Metas,\n transports: Transports\n): API {\n internalLogger.debug('Initializing API');\n\n const userActionsApi = initializeUserActionsAPI({\n transports,\n config,\n internalLogger,\n });\n\n const tracesApi = initializeTracesAPI(unpatchedConsole, internalLogger, config, metas, transports);\n\n const props = {\n unpatchedConsole,\n internalLogger,\n userActionsApi,\n config,\n metas,\n transports,\n tracesApi,\n };\n\n return {\n ...tracesApi,\n ...initializeExceptionsAPI(props),\n ...initializeMetaAPI(props),\n ...initializeLogsAPI(props),\n ...initializeMeasurementsAPI(props),\n ...initializeEventsAPI(props),\n ...userActionsApi,\n };\n}\n"]}
|
|
@@ -1,45 +1,9 @@
|
|
|
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
var __1 = require("..");
|
|
37
3
|
var testUtils_1 = require("../testUtils");
|
|
38
4
|
var initialize_1 = require("../unpatchedConsole/initialize");
|
|
39
5
|
var apiTestHelpers_1 = require("./apiTestHelpers");
|
|
40
6
|
var initialize_2 = require("./initialize");
|
|
41
|
-
var ItemBuffer_1 = require("./ItemBuffer");
|
|
42
|
-
var createUserActionLifecycleHandlerModule = __importStar(require("./userActionLifecycleHandler"));
|
|
43
7
|
describe('initialize', function () {
|
|
44
8
|
it('should initialize the API', function () {
|
|
45
9
|
var api = (0, initialize_2.initializeAPI)(initialize_1.unpatchedConsole, testUtils_1.mockInternalLogger, (0, testUtils_1.mockConfig)(), apiTestHelpers_1.mockMetas, apiTestHelpers_1.mockTransports);
|
|
@@ -65,19 +29,5 @@ describe('initialize', function () {
|
|
|
65
29
|
expect(api).toHaveProperty('setPage');
|
|
66
30
|
expect(api).toHaveProperty('setView');
|
|
67
31
|
});
|
|
68
|
-
it('Exports the apiMessageBus observable', function () {
|
|
69
|
-
expect(initialize_2.apiMessageBus).toBeInstanceOf(__1.Observable);
|
|
70
|
-
});
|
|
71
|
-
it('creates a user action lifecycle handler', function () {
|
|
72
|
-
var mockUserActionLifecycleHandler = jest.fn(function () { return ({
|
|
73
|
-
actionBuffer: new ItemBuffer_1.ItemBuffer(),
|
|
74
|
-
getMessage: jest.fn(),
|
|
75
|
-
}); });
|
|
76
|
-
jest
|
|
77
|
-
.spyOn(createUserActionLifecycleHandlerModule, 'createUserActionLifecycleHandler')
|
|
78
|
-
.mockImplementationOnce(mockUserActionLifecycleHandler);
|
|
79
|
-
(0, initialize_2.initializeAPI)(initialize_1.unpatchedConsole, testUtils_1.mockInternalLogger, (0, testUtils_1.mockConfig)(), apiTestHelpers_1.mockMetas, apiTestHelpers_1.mockTransports);
|
|
80
|
-
expect(mockUserActionLifecycleHandler).toHaveBeenCalled();
|
|
81
|
-
});
|
|
82
32
|
});
|
|
83
33
|
//# sourceMappingURL=initialize.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../src/api/initialize.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initialize.test.js","sourceRoot":"","sources":["../../../../../src/api/initialize.test.ts"],"names":[],"mappings":";;AAAA,0CAA8D;AAC9D,6DAAkE;AAElE,mDAA6D;AAC7D,2CAA6C;AAE7C,QAAQ,CAAC,YAAY,EAAE;IACrB,EAAE,CAAC,2BAA2B,EAAE;QAC9B,IAAM,GAAG,GAAG,IAAA,0BAAa,EAAC,6BAAgB,EAAE,8BAAkB,EAAE,IAAA,sBAAU,GAAE,EAAE,0BAAS,EAAE,+BAAc,CAAC,CAAC;QAEzG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { mockConfig, mockInternalLogger } from '../testUtils';\nimport { unpatchedConsole } from '../unpatchedConsole/initialize';\n\nimport { mockMetas, mockTransports } from './apiTestHelpers';\nimport { initializeAPI } from './initialize';\n\ndescribe('initialize', () => {\n it('should initialize the API', () => {\n const api = initializeAPI(unpatchedConsole, mockInternalLogger, mockConfig(), mockMetas, mockTransports);\n\n expect(api).toBeDefined();\n expect(api).toHaveProperty('pushError');\n expect(api).toHaveProperty('pushLog');\n expect(api).toHaveProperty('pushMeasurement');\n expect(api).toHaveProperty('pushTraces');\n expect(api).toHaveProperty('pushEvent');\n expect(api).toHaveProperty('changeStacktraceParser');\n expect(api).toHaveProperty('getOTEL');\n expect(api).toHaveProperty('getPage');\n expect(api).toHaveProperty('getSession');\n expect(api).toHaveProperty('getStacktraceParser');\n expect(api).toHaveProperty('getTraceContext');\n expect(api).toHaveProperty('getView');\n expect(api).toHaveProperty('initOTEL');\n expect(api).toHaveProperty('isOTELInitialized');\n expect(api).toHaveProperty('resetSession');\n expect(api).toHaveProperty('resetUser');\n expect(api).toHaveProperty('setSession');\n expect(api).toHaveProperty('setUser');\n expect(api).toHaveProperty('setPage');\n expect(api).toHaveProperty('setView');\n });\n});\n"]}
|
|
@@ -4,14 +4,13 @@ exports.initializeLogsAPI = initializeLogsAPI;
|
|
|
4
4
|
var transports_1 = require("../../transports");
|
|
5
5
|
var utils_1 = require("../../utils");
|
|
6
6
|
var date_1 = require("../../utils/date");
|
|
7
|
-
var const_1 = require("
|
|
8
|
-
var const_2 = require("./const");
|
|
7
|
+
var const_1 = require("./const");
|
|
9
8
|
function initializeLogsAPI(_a) {
|
|
10
9
|
var _b;
|
|
11
|
-
var internalLogger = _a.internalLogger, config = _a.config, metas = _a.metas, transports = _a.transports, tracesApi = _a.tracesApi,
|
|
10
|
+
var internalLogger = _a.internalLogger, config = _a.config, metas = _a.metas, transports = _a.transports, tracesApi = _a.tracesApi, userActionsApi = _a.userActionsApi;
|
|
12
11
|
internalLogger.debug('Initializing logs API');
|
|
13
12
|
var lastPayload = null;
|
|
14
|
-
var logArgsSerializer = (_b = config.logArgsSerializer) !== null && _b !== void 0 ? _b :
|
|
13
|
+
var logArgsSerializer = (_b = config.logArgsSerializer) !== null && _b !== void 0 ? _b : const_1.defaultLogArgsSerializer;
|
|
15
14
|
var pushLog = function (args, _a) {
|
|
16
15
|
var _b = _a === void 0 ? {} : _a, context = _b.context, level = _b.level, skipDedupe = _b.skipDedupe, spanContext = _b.spanContext, timestampOverwriteMs = _b.timestampOverwriteMs;
|
|
17
16
|
try {
|
|
@@ -43,9 +42,9 @@ function initializeLogsAPI(_a) {
|
|
|
43
42
|
}
|
|
44
43
|
lastPayload = testingPayload;
|
|
45
44
|
internalLogger.debug('Pushing log\n', item);
|
|
46
|
-
var
|
|
47
|
-
if (
|
|
48
|
-
|
|
45
|
+
var activeUserAction = userActionsApi.getActiveUserAction();
|
|
46
|
+
if (activeUserAction) {
|
|
47
|
+
activeUserAction.addItem(item);
|
|
49
48
|
}
|
|
50
49
|
else {
|
|
51
50
|
transports.execute(item);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/logs/initialize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../../src/api/logs/initialize.ts"],"names":[],"mappings":";;AAcA,8CA4EC;AAvFD,+CAAqD;AAGrD,qCAAsH;AACtH,yCAAwD;AAIxD,iCAAmD;AAGnD,SAAgB,iBAAiB,CAAC,EAejC;;QAdC,cAAc,oBAAA,EACd,MAAM,YAAA,EACN,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,cAAc,oBAAA;IAUd,cAAc,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAE9C,IAAI,WAAW,GAA2D,IAAI,CAAC;IAE/E,IAAM,iBAAiB,GAAG,MAAA,MAAM,CAAC,iBAAiB,mCAAI,gCAAwB,CAAC;IAE/E,IAAM,OAAO,GAAuB,UAClC,IAAI,EACJ,EAAsE;YAAtE,qBAAoE,EAAE,KAAA,EAApE,OAAO,aAAA,EAAE,KAAK,WAAA,EAAE,UAAU,gBAAA,EAAE,WAAW,iBAAA,EAAE,oBAAoB,0BAAA;QAE/D,IAAI,CAAC;YACH,IAAM,GAAG,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;YAE3C,IAAM,IAAI,GAA4B;gBACpC,IAAI,EAAE,8BAAiB,CAAC,GAAG;gBAC3B,OAAO,EAAE;oBACP,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;oBAChC,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,uBAAe;oBAC/B,OAAO,EAAE,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;oBACvC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAmB,GAAE;oBACpG,KAAK,EAAE,WAAW;wBAChB,CAAC,CAAC;4BACE,QAAQ,EAAE,WAAW,CAAC,OAAO;4BAC7B,OAAO,EAAE,WAAW,CAAC,MAAM;yBAC5B;wBACH,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;iBAChC;gBACD,IAAI,EAAE,KAAK,CAAC,KAAK;aAClB,CAAC;YAEF,IAAM,cAAc,GAAG;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;aAC9B,CAAC;YAEF,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAA,cAAM,EAAC,WAAW,CAAC,IAAI,IAAA,iBAAS,EAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;gBACnG,cAAc,CAAC,KAAK,CAAC,4DAA4D,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjG,OAAO;YACT,CAAC;YAED,WAAW,GAAG,cAAc,CAAC;YAE7B,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAE5C,IAAM,gBAAgB,GAAG,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAC9D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC","sourcesContent":["import type { Config } from '../../config';\nimport type { InternalLogger } from '../../internalLogger';\nimport type { Metas } from '../../metas';\nimport { TransportItemType } from '../../transports';\nimport type { TransportItem, Transports } from '../../transports';\nimport type { UnpatchedConsole } from '../../unpatchedConsole';\nimport { deepEqual, defaultLogLevel, getCurrentTimestamp, isEmpty, isNull, stringifyObjectValues } from '../../utils';\nimport { timestampToIsoString } from '../../utils/date';\nimport type { TracesAPI } from '../traces';\nimport type { UserActionsAPI } from '../userActions';\n\nimport { defaultLogArgsSerializer } from './const';\nimport type { LogEvent, LogsAPI } from './types';\n\nexport function initializeLogsAPI({\n internalLogger,\n config,\n metas,\n transports,\n tracesApi,\n userActionsApi,\n}: {\n unpatchedConsole: UnpatchedConsole;\n internalLogger: InternalLogger;\n config: Config;\n metas: Metas;\n transports: Transports;\n tracesApi: TracesAPI;\n userActionsApi: UserActionsAPI;\n}): LogsAPI {\n internalLogger.debug('Initializing logs API');\n\n let lastPayload: Pick<LogEvent, 'message' | 'level' | 'context'> | null = null;\n\n const logArgsSerializer = config.logArgsSerializer ?? defaultLogArgsSerializer;\n\n const pushLog: LogsAPI['pushLog'] = (\n args,\n { context, level, skipDedupe, spanContext, timestampOverwriteMs } = {}\n ) => {\n try {\n const ctx = stringifyObjectValues(context);\n\n const item: TransportItem<LogEvent> = {\n type: TransportItemType.LOG,\n payload: {\n message: logArgsSerializer(args),\n level: level ?? defaultLogLevel,\n context: isEmpty(ctx) ? undefined : ctx,\n timestamp: timestampOverwriteMs ? timestampToIsoString(timestampOverwriteMs) : getCurrentTimestamp(),\n trace: spanContext\n ? {\n trace_id: spanContext.traceId,\n span_id: spanContext.spanId,\n }\n : tracesApi.getTraceContext(),\n },\n meta: metas.value,\n };\n\n const testingPayload = {\n message: item.payload.message,\n level: item.payload.level,\n context: item.payload.context,\n };\n\n if (!skipDedupe && config.dedupe && !isNull(lastPayload) && deepEqual(testingPayload, lastPayload)) {\n internalLogger.debug('Skipping log push because it is the same as the last one\\n', item.payload);\n\n return;\n }\n\n lastPayload = testingPayload;\n\n internalLogger.debug('Pushing log\\n', item);\n\n const activeUserAction = userActionsApi.getActiveUserAction();\n if (activeUserAction) {\n activeUserAction.addItem(item);\n } else {\n transports.execute(item);\n }\n } catch (err) {\n internalLogger.error('Error pushing log\\n', err);\n }\n };\n\n return {\n pushLog,\n };\n}\n"]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
var initialize_1 = require("../../initialize");
|
|
4
7
|
var testUtils_1 = require("../../testUtils");
|
|
5
8
|
var utils_1 = require("../../utils");
|
|
6
9
|
var apiTestHelpers_1 = require("../apiTestHelpers");
|
|
7
|
-
var
|
|
8
|
-
var ItemBuffer_1 = require("../ItemBuffer");
|
|
10
|
+
var userAction_1 = __importDefault(require("../userActions/userAction"));
|
|
9
11
|
var initialize_2 = require("./initialize");
|
|
10
12
|
describe('api.logs', function () {
|
|
11
13
|
function createAPI(_a) {
|
|
@@ -157,13 +159,9 @@ describe('api.logs', function () {
|
|
|
157
159
|
});
|
|
158
160
|
});
|
|
159
161
|
describe('User action', function () {
|
|
160
|
-
it('buffers the
|
|
162
|
+
it('buffers the log if a user action is in progress', function () {
|
|
161
163
|
var internalLogger = testUtils_1.mockInternalLogger;
|
|
162
164
|
var config = (0, testUtils_1.mockConfig)();
|
|
163
|
-
var actionBuffer = new ItemBuffer_1.ItemBuffer();
|
|
164
|
-
var message;
|
|
165
|
-
var getMessage = function () { return message; };
|
|
166
|
-
message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };
|
|
167
165
|
var api = (0, initialize_2.initializeLogsAPI)({
|
|
168
166
|
unpatchedConsole: console,
|
|
169
167
|
internalLogger: internalLogger,
|
|
@@ -171,74 +169,15 @@ describe('api.logs', function () {
|
|
|
171
169
|
metas: apiTestHelpers_1.mockMetas,
|
|
172
170
|
transports: apiTestHelpers_1.mockTransports,
|
|
173
171
|
tracesApi: apiTestHelpers_1.mockTracesApi,
|
|
174
|
-
|
|
175
|
-
getMessage: getMessage,
|
|
172
|
+
userActionsApi: apiTestHelpers_1.mockUserActionsApi,
|
|
176
173
|
});
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
type: 'user-action-end',
|
|
181
|
-
name: 'testAction',
|
|
182
|
-
id: 'parent-id',
|
|
183
|
-
startTime: (0, utils_1.dateNow)(),
|
|
184
|
-
endTime: (0, utils_1.dateNow)(),
|
|
185
|
-
duration: 0,
|
|
186
|
-
eventType: 'click',
|
|
187
|
-
};
|
|
188
|
-
api.pushLog(['test-2']);
|
|
189
|
-
expect(actionBuffer.size()).toBe(1);
|
|
190
|
-
message = {
|
|
191
|
-
type: 'user-action-cancel',
|
|
192
|
-
name: 'testAction',
|
|
193
|
-
parentId: 'parent-id',
|
|
194
|
-
};
|
|
195
|
-
api.pushLog(['test-3']);
|
|
196
|
-
expect(actionBuffer.size()).toBe(1);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe('User action', function () {
|
|
200
|
-
it('buffers the item if a user action is in progress', function () {
|
|
201
|
-
var internalLogger = testUtils_1.mockInternalLogger;
|
|
202
|
-
var config = (0, testUtils_1.mockConfig)();
|
|
203
|
-
var actionBuffer = new ItemBuffer_1.ItemBuffer();
|
|
204
|
-
var message;
|
|
205
|
-
var getMessage = function () { return message; };
|
|
206
|
-
message = {
|
|
207
|
-
type: const_1.USER_ACTION_START,
|
|
208
|
-
name: 'testAction',
|
|
209
|
-
startTime: Date.now(),
|
|
210
|
-
parentId: 'parent-id',
|
|
211
|
-
};
|
|
212
|
-
var api = (0, initialize_2.initializeLogsAPI)({
|
|
213
|
-
unpatchedConsole: console,
|
|
214
|
-
internalLogger: internalLogger,
|
|
215
|
-
config: config,
|
|
216
|
-
metas: apiTestHelpers_1.mockMetas,
|
|
174
|
+
apiTestHelpers_1.mockUserActionsApi.getActiveUserAction.mockReturnValueOnce(new userAction_1.default({
|
|
175
|
+
name: 'test',
|
|
176
|
+
trigger: 'foo',
|
|
217
177
|
transports: apiTestHelpers_1.mockTransports,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
});
|
|
222
|
-
api.pushLog(['test']);
|
|
223
|
-
expect(actionBuffer.size()).toBe(1);
|
|
224
|
-
message = {
|
|
225
|
-
type: const_1.USER_ACTION_END,
|
|
226
|
-
name: 'testAction',
|
|
227
|
-
id: 'parent-id',
|
|
228
|
-
startTime: (0, utils_1.dateNow)(),
|
|
229
|
-
endTime: (0, utils_1.dateNow)(),
|
|
230
|
-
duration: 0,
|
|
231
|
-
eventType: 'click',
|
|
232
|
-
};
|
|
233
|
-
api.pushLog(['test-2']);
|
|
234
|
-
expect(actionBuffer.size()).toBe(1);
|
|
235
|
-
message = {
|
|
236
|
-
type: const_1.USER_ACTION_CANCEL,
|
|
237
|
-
name: 'testAction',
|
|
238
|
-
parentId: 'parent-id',
|
|
239
|
-
};
|
|
240
|
-
api.pushLog(['test-3']);
|
|
241
|
-
expect(actionBuffer.size()).toBe(1);
|
|
178
|
+
}));
|
|
179
|
+
api.pushLog(['This is a log']);
|
|
180
|
+
expect(apiTestHelpers_1.mockTransports.execute).not.toHaveBeenCalled();
|
|
242
181
|
});
|
|
243
182
|
});
|
|
244
183
|
});
|