@datadog/browser-core
Advanced tools
Comparing version 4.29.0 to 4.29.1
@@ -9,3 +9,3 @@ "use strict"; | ||
var publicApi = (0, utils_1.assign)({ | ||
version: "4.29.0", | ||
version: "4.29.1", | ||
// This API method is intentionally not monitored, since the only thing executed is the | ||
@@ -12,0 +12,0 @@ // user-provided 'callback'. All SDK usages executed in the callback should be monitored, and |
@@ -66,2 +66,3 @@ export declare const enum DOM_EVENT { | ||
}; | ||
export declare function resetUntrustedEventsCount(): void; | ||
export {}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.addEventListeners = exports.addEventListener = void 0; | ||
exports.resetUntrustedEventsCount = exports.addEventListeners = exports.addEventListener = void 0; | ||
var monitor_1 = require("../tools/monitor"); | ||
var getZoneJsOriginalValue_1 = require("../tools/getZoneJsOriginalValue"); | ||
var telemetry_1 = require("../domain/telemetry"); | ||
/** | ||
@@ -34,8 +35,9 @@ * Add an event listener to an event target object (Window, Element, mock object...). This provides | ||
var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive; | ||
var wrappedListener = (0, monitor_1.monitor)(once | ||
? function (event) { | ||
var wrappedListener = (0, monitor_1.monitor)(function (event) { | ||
if (once) { | ||
stop(); | ||
listener(event); | ||
} | ||
: listener); | ||
reportUntrustedEvent(event); | ||
listener(event); | ||
}); | ||
var options = passive ? { capture: capture, passive: passive } : capture; | ||
@@ -53,2 +55,15 @@ var add = (0, getZoneJsOriginalValue_1.getZoneJsOriginalValue)(eventTarget, 'addEventListener'); | ||
exports.addEventListeners = addEventListeners; | ||
var reportedUntrustedEventTypes = new Set(); | ||
function reportUntrustedEvent(event) { | ||
var eventType = event.type; | ||
if (event.isTrusted || window.jasmine || reportedUntrustedEventTypes.has(eventType)) { | ||
return; | ||
} | ||
reportedUntrustedEventTypes.add(eventType); | ||
(0, telemetry_1.addTelemetryDebug)('Untrusted event', { event_type: eventType }); | ||
} | ||
function resetUntrustedEventsCount() { | ||
reportedUntrustedEventTypes.clear(); | ||
} | ||
exports.resetUntrustedEventsCount = resetUntrustedEventsCount; | ||
//# sourceMappingURL=addEventListener.js.map |
@@ -25,16 +25,21 @@ "use strict"; | ||
build: function (api, retry) { | ||
var tags = ["sdk_version:".concat("4.29.0"), "api:".concat(api)].concat(configurationTags); | ||
var tags = ["sdk_version:".concat("4.29.1"), "api:".concat(api)].concat(configurationTags); | ||
if (retry) { | ||
tags.push("retry_count:".concat(retry.count), "retry_after:".concat(retry.lastFailureStatus)); | ||
} | ||
var parameters = 'ddsource=browser' + | ||
"&ddtags=".concat(encodeURIComponent(tags.join(','))) + | ||
"&dd-api-key=".concat(clientToken) + | ||
"&dd-evp-origin-version=".concat(encodeURIComponent("4.29.0")) + | ||
'&dd-evp-origin=browser' + | ||
"&dd-request-id=".concat((0, utils_1.generateUUID)()); | ||
var parameters = [ | ||
'ddsource=browser', | ||
"ddtags=".concat(encodeURIComponent(tags.join(','))), | ||
"dd-api-key=".concat(clientToken), | ||
"dd-evp-origin-version=".concat(encodeURIComponent("4.29.1")), | ||
'dd-evp-origin=browser', | ||
"dd-request-id=".concat((0, utils_1.generateUUID)()), | ||
]; | ||
if (endpointType === 'rum') { | ||
parameters += "&batch_time=".concat((0, timeUtils_1.timeStampNow)()); | ||
parameters.push("batch_time=".concat((0, timeUtils_1.timeStampNow)())); | ||
} | ||
var endpointUrl = "".concat(baseUrl, "?").concat(parameters); | ||
if (initConfiguration.internalAnalyticsSubdomain) { | ||
parameters.reverse(); | ||
} | ||
var endpointUrl = "".concat(baseUrl, "?").concat(parameters.join('&')); | ||
return proxyUrl ? "".concat(proxyUrl, "?ddforward=").concat(encodeURIComponent(endpointUrl)) : endpointUrl; | ||
@@ -41,0 +46,0 @@ }, |
@@ -46,3 +46,3 @@ "use strict"; | ||
service: telemetryService, | ||
version: "4.29.0", | ||
version: "4.29.1", | ||
source: 'browser', | ||
@@ -49,0 +49,0 @@ _dd: { |
@@ -19,2 +19,3 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { sendToExtension } from './tools/sendToExtension'; | ||
export { runOnReadyState } from './tools/runOnReadyState'; | ||
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue'; | ||
@@ -21,0 +22,0 @@ export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod'; |
@@ -17,4 +17,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.initFetchObservable = exports.initXhrObservable = exports.COOKIE_ACCESS_DELAY = exports.deleteCookie = exports.setCookie = exports.getCookie = exports.areCookiesAuthorized = exports.getFileFromStackTraceString = exports.toStackTraceString = exports.createHandlingStack = exports.computeRawError = exports.ErrorSource = exports.instrumentSetter = exports.instrumentMethodAndCallOriginal = exports.instrumentMethod = exports.getZoneJsOriginalValue = exports.sendToExtension = exports.startBatchWithReplica = exports.getEventBridge = exports.canUseEventBridge = exports.Batch = exports.createHttpRequest = exports.SESSION_TIME_OUT_DELAY = exports.stopSessionManager = exports.startSessionManager = exports.Observable = exports.setDebugMode = exports.callMonitored = exports.monitor = exports.monitored = exports.addTelemetryConfiguration = exports.isTelemetryReplicationAllowed = exports.resetTelemetry = exports.startFakeTelemetry = exports.addTelemetryError = exports.addTelemetryDebug = exports.startTelemetry = exports.RawReportType = exports.initReportObservable = exports.makePublicApi = exports.defineGlobal = exports.computeStackTrace = exports.trackRuntimeError = exports.serializeConfiguration = exports.resetExperimentalFeatures = exports.updateExperimentalFeatures = exports.isExperimentalFeatureEnabled = exports.DefaultPrivacyLevel = exports.validateAndBuildConfiguration = exports.buildCookieOptions = void 0; | ||
exports.sanitizeUser = exports.checkUser = exports.getSyntheticsResultId = exports.getSyntheticsTestId = exports.willSyntheticsInjectRum = exports.SESSION_COOKIE_NAME = exports.readBytesFromStream = exports.CLEAR_OLD_CONTEXTS_INTERVAL = exports.ContextHistory = exports.limitModification = exports.createContextManager = exports.catchUserErrors = exports.BoundedBuffer = exports.initConsoleObservable = exports.createPageExitObservable = void 0; | ||
exports.initXhrObservable = exports.COOKIE_ACCESS_DELAY = exports.deleteCookie = exports.setCookie = exports.getCookie = exports.areCookiesAuthorized = exports.getFileFromStackTraceString = exports.toStackTraceString = exports.createHandlingStack = exports.computeRawError = exports.ErrorSource = exports.instrumentSetter = exports.instrumentMethodAndCallOriginal = exports.instrumentMethod = exports.getZoneJsOriginalValue = exports.runOnReadyState = exports.sendToExtension = exports.startBatchWithReplica = exports.getEventBridge = exports.canUseEventBridge = exports.Batch = exports.createHttpRequest = exports.SESSION_TIME_OUT_DELAY = exports.stopSessionManager = exports.startSessionManager = exports.Observable = exports.setDebugMode = exports.callMonitored = exports.monitor = exports.monitored = exports.addTelemetryConfiguration = exports.isTelemetryReplicationAllowed = exports.resetTelemetry = exports.startFakeTelemetry = exports.addTelemetryError = exports.addTelemetryDebug = exports.startTelemetry = exports.RawReportType = exports.initReportObservable = exports.makePublicApi = exports.defineGlobal = exports.computeStackTrace = exports.trackRuntimeError = exports.serializeConfiguration = exports.resetExperimentalFeatures = exports.updateExperimentalFeatures = exports.isExperimentalFeatureEnabled = exports.DefaultPrivacyLevel = exports.validateAndBuildConfiguration = exports.buildCookieOptions = void 0; | ||
exports.sanitizeUser = exports.checkUser = exports.getSyntheticsResultId = exports.getSyntheticsTestId = exports.willSyntheticsInjectRum = exports.SESSION_COOKIE_NAME = exports.readBytesFromStream = exports.CLEAR_OLD_CONTEXTS_INTERVAL = exports.ContextHistory = exports.limitModification = exports.createContextManager = exports.catchUserErrors = exports.BoundedBuffer = exports.initConsoleObservable = exports.createPageExitObservable = exports.initFetchObservable = void 0; | ||
var configuration_1 = require("./domain/configuration"); | ||
@@ -73,2 +73,4 @@ Object.defineProperty(exports, "buildCookieOptions", { enumerable: true, get: function () { return configuration_1.buildCookieOptions; } }); | ||
Object.defineProperty(exports, "sendToExtension", { enumerable: true, get: function () { return sendToExtension_1.sendToExtension; } }); | ||
var runOnReadyState_1 = require("./tools/runOnReadyState"); | ||
Object.defineProperty(exports, "runOnReadyState", { enumerable: true, get: function () { return runOnReadyState_1.runOnReadyState; } }); | ||
var getZoneJsOriginalValue_1 = require("./tools/getZoneJsOriginalValue"); | ||
@@ -75,0 +77,0 @@ Object.defineProperty(exports, "getZoneJsOriginalValue", { enumerable: true, get: function () { return getZoneJsOriginalValue_1.getZoneJsOriginalValue; } }); |
@@ -22,4 +22,5 @@ "use strict"; | ||
} | ||
if (options.collectStreamBody) | ||
if (options.collectStreamBody) { | ||
chunks.push(result.value); | ||
} | ||
readBytesCount += result.value.length; | ||
@@ -26,0 +27,0 @@ if (readBytesCount > options.bytesLimit) { |
@@ -96,3 +96,2 @@ export declare const ONE_SECOND = 1000; | ||
}, selector: string): boolean; | ||
export declare function runOnReadyState(expectedReadyState: 'complete' | 'interactive', callback: () => void): void; | ||
/** | ||
@@ -99,0 +98,0 @@ * Similar to `typeof`, but distinguish plain objects from `null` and arrays |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.cssEscape = exports.matchList = exports.isMatchOption = exports.removeDuplicates = exports.requestIdleCallback = exports.combine = exports.deepClone = exports.mergeInto = exports.getType = exports.runOnReadyState = exports.elementMatches = exports.safeTruncate = exports.findCommaSeparatedValue = exports.getLinkElementOrigin = exports.getLocationOrigin = exports.getGlobalObject = exports.endsWith = exports.startsWith = exports.mapValues = exports.isEmptyObject = exports.objectEntries = exports.objectHasValue = exports.objectValues = exports.isNumber = exports.isPercentage = exports.findLast = exports.find = exports.arrayFrom = exports.includes = exports.jsonStringify = exports.noop = exports.round = exports.performDraw = exports.generateUUID = exports.shallowClone = exports.assign = exports.throttle = exports.ONE_MEBI_BYTE = exports.ONE_KIBI_BYTE = exports.ONE_YEAR = exports.ONE_DAY = exports.ONE_HOUR = exports.ONE_MINUTE = exports.ONE_SECOND = void 0; | ||
var addEventListener_1 = require("../browser/addEventListener"); | ||
exports.cssEscape = exports.matchList = exports.isMatchOption = exports.removeDuplicates = exports.requestIdleCallback = exports.combine = exports.deepClone = exports.mergeInto = exports.getType = exports.elementMatches = exports.safeTruncate = exports.findCommaSeparatedValue = exports.getLinkElementOrigin = exports.getLocationOrigin = exports.getGlobalObject = exports.endsWith = exports.startsWith = exports.mapValues = exports.isEmptyObject = exports.objectEntries = exports.objectHasValue = exports.objectValues = exports.isNumber = exports.isPercentage = exports.findLast = exports.find = exports.arrayFrom = exports.includes = exports.jsonStringify = exports.noop = exports.round = exports.performDraw = exports.generateUUID = exports.shallowClone = exports.assign = exports.throttle = exports.ONE_MEBI_BYTE = exports.ONE_KIBI_BYTE = exports.ONE_YEAR = exports.ONE_DAY = exports.ONE_HOUR = exports.ONE_MINUTE = exports.ONE_SECOND = void 0; | ||
var display_1 = require("./display"); | ||
@@ -283,4 +282,5 @@ var monitor_1 = require("./monitor"); | ||
var correctedLength = isLastCharSurrogatePair ? length + 1 : length; | ||
if (candidate.length <= correctedLength) | ||
if (candidate.length <= correctedLength) { | ||
return candidate; | ||
} | ||
return "".concat(candidate.slice(0, correctedLength)).concat(suffix); | ||
@@ -300,12 +300,2 @@ } | ||
exports.elementMatches = elementMatches; | ||
function runOnReadyState(expectedReadyState, callback) { | ||
if (document.readyState === expectedReadyState || document.readyState === 'complete') { | ||
callback(); | ||
} | ||
else { | ||
var eventName = expectedReadyState === 'complete' ? "load" /* LOAD */ : "DOMContentLoaded" /* DOM_CONTENT_LOADED */; | ||
(0, addEventListener_1.addEventListener)(window, eventName, callback, { once: true }); | ||
} | ||
} | ||
exports.runOnReadyState = runOnReadyState; | ||
/** | ||
@@ -312,0 +302,0 @@ * Similar to `typeof`, but distinguish plain objects from `null` and arrays |
@@ -6,3 +6,3 @@ import { catchUserErrors } from '../tools/catchUserErrors'; | ||
var publicApi = assign({ | ||
version: "4.29.0", | ||
version: "4.29.1", | ||
// This API method is intentionally not monitored, since the only thing executed is the | ||
@@ -9,0 +9,0 @@ // user-provided 'callback'. All SDK usages executed in the callback should be monitored, and |
@@ -66,2 +66,3 @@ export declare const enum DOM_EVENT { | ||
}; | ||
export declare function resetUntrustedEventsCount(): void; | ||
export {}; |
import { monitor } from '../tools/monitor'; | ||
import { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'; | ||
import { addTelemetryDebug } from '../domain/telemetry'; | ||
/** | ||
@@ -30,8 +31,9 @@ * Add an event listener to an event target object (Window, Element, mock object...). This provides | ||
var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive; | ||
var wrappedListener = monitor(once | ||
? function (event) { | ||
var wrappedListener = monitor(function (event) { | ||
if (once) { | ||
stop(); | ||
listener(event); | ||
} | ||
: listener); | ||
reportUntrustedEvent(event); | ||
listener(event); | ||
}); | ||
var options = passive ? { capture: capture, passive: passive } : capture; | ||
@@ -48,2 +50,14 @@ var add = getZoneJsOriginalValue(eventTarget, 'addEventListener'); | ||
} | ||
var reportedUntrustedEventTypes = new Set(); | ||
function reportUntrustedEvent(event) { | ||
var eventType = event.type; | ||
if (event.isTrusted || window.jasmine || reportedUntrustedEventTypes.has(eventType)) { | ||
return; | ||
} | ||
reportedUntrustedEventTypes.add(eventType); | ||
addTelemetryDebug('Untrusted event', { event_type: eventType }); | ||
} | ||
export function resetUntrustedEventsCount() { | ||
reportedUntrustedEventTypes.clear(); | ||
} | ||
//# sourceMappingURL=addEventListener.js.map |
@@ -22,16 +22,21 @@ import { timeStampNow } from '../../tools/timeUtils'; | ||
build: function (api, retry) { | ||
var tags = ["sdk_version:".concat("4.29.0"), "api:".concat(api)].concat(configurationTags); | ||
var tags = ["sdk_version:".concat("4.29.1"), "api:".concat(api)].concat(configurationTags); | ||
if (retry) { | ||
tags.push("retry_count:".concat(retry.count), "retry_after:".concat(retry.lastFailureStatus)); | ||
} | ||
var parameters = 'ddsource=browser' + | ||
"&ddtags=".concat(encodeURIComponent(tags.join(','))) + | ||
"&dd-api-key=".concat(clientToken) + | ||
"&dd-evp-origin-version=".concat(encodeURIComponent("4.29.0")) + | ||
'&dd-evp-origin=browser' + | ||
"&dd-request-id=".concat(generateUUID()); | ||
var parameters = [ | ||
'ddsource=browser', | ||
"ddtags=".concat(encodeURIComponent(tags.join(','))), | ||
"dd-api-key=".concat(clientToken), | ||
"dd-evp-origin-version=".concat(encodeURIComponent("4.29.1")), | ||
'dd-evp-origin=browser', | ||
"dd-request-id=".concat(generateUUID()), | ||
]; | ||
if (endpointType === 'rum') { | ||
parameters += "&batch_time=".concat(timeStampNow()); | ||
parameters.push("batch_time=".concat(timeStampNow())); | ||
} | ||
var endpointUrl = "".concat(baseUrl, "?").concat(parameters); | ||
if (initConfiguration.internalAnalyticsSubdomain) { | ||
parameters.reverse(); | ||
} | ||
var endpointUrl = "".concat(baseUrl, "?").concat(parameters.join('&')); | ||
return proxyUrl ? "".concat(proxyUrl, "?ddforward=").concat(encodeURIComponent(endpointUrl)) : endpointUrl; | ||
@@ -38,0 +43,0 @@ }, |
@@ -43,3 +43,3 @@ import { ConsoleApiName } from '../../tools/display'; | ||
service: telemetryService, | ||
version: "4.29.0", | ||
version: "4.29.1", | ||
source: 'browser', | ||
@@ -46,0 +46,0 @@ _dd: { |
@@ -19,2 +19,3 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { sendToExtension } from './tools/sendToExtension'; | ||
export { runOnReadyState } from './tools/runOnReadyState'; | ||
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue'; | ||
@@ -21,0 +22,0 @@ export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod'; |
@@ -22,2 +22,3 @@ export { buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { sendToExtension } from './tools/sendToExtension'; | ||
export { runOnReadyState } from './tools/runOnReadyState'; | ||
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue'; | ||
@@ -24,0 +25,0 @@ export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod'; |
@@ -19,4 +19,5 @@ import { monitor } from './monitor'; | ||
} | ||
if (options.collectStreamBody) | ||
if (options.collectStreamBody) { | ||
chunks.push(result.value); | ||
} | ||
readBytesCount += result.value.length; | ||
@@ -23,0 +24,0 @@ if (readBytesCount > options.bytesLimit) { |
@@ -96,3 +96,2 @@ export declare const ONE_SECOND = 1000; | ||
}, selector: string): boolean; | ||
export declare function runOnReadyState(expectedReadyState: 'complete' | 'interactive', callback: () => void): void; | ||
/** | ||
@@ -99,0 +98,0 @@ * Similar to `typeof`, but distinguish plain objects from `null` and arrays |
@@ -1,2 +0,1 @@ | ||
import { addEventListener } from '../browser/addEventListener'; | ||
import { display } from './display'; | ||
@@ -255,4 +254,5 @@ import { monitor } from './monitor'; | ||
var correctedLength = isLastCharSurrogatePair ? length + 1 : length; | ||
if (candidate.length <= correctedLength) | ||
if (candidate.length <= correctedLength) { | ||
return candidate; | ||
} | ||
return "".concat(candidate.slice(0, correctedLength)).concat(suffix); | ||
@@ -270,11 +270,2 @@ } | ||
} | ||
export function runOnReadyState(expectedReadyState, callback) { | ||
if (document.readyState === expectedReadyState || document.readyState === 'complete') { | ||
callback(); | ||
} | ||
else { | ||
var eventName = expectedReadyState === 'complete' ? "load" /* LOAD */ : "DOMContentLoaded" /* DOM_CONTENT_LOADED */; | ||
addEventListener(window, eventName, callback, { once: true }); | ||
} | ||
} | ||
/** | ||
@@ -281,0 +272,0 @@ * Similar to `typeof`, but distinguish plain objects from `null` and arrays |
{ | ||
"name": "@datadog/browser-core", | ||
"version": "4.29.0", | ||
"version": "4.29.1", | ||
"license": "Apache-2.0", | ||
@@ -24,3 +24,3 @@ "main": "cjs/index.js", | ||
}, | ||
"gitHead": "8983972b924a04cbd3084d569673d8e1eaaf3d06" | ||
"gitHead": "14b6b0d10999b8ab3b85c113da4e0399cb064295" | ||
} |
@@ -0,7 +1,55 @@ | ||
import { createNewEvent } from '../../test/specHelper' | ||
import { stubZoneJs } from '../../test/stubZoneJs' | ||
import type { RawTelemetryEvent } from '../domain/telemetry' | ||
import { resetTelemetry, startFakeTelemetry } from '../domain/telemetry' | ||
import { noop } from '../tools/utils' | ||
import { addEventListener, DOM_EVENT } from './addEventListener' | ||
import { addEventListener, DOM_EVENT, resetUntrustedEventsCount } from './addEventListener' | ||
describe('addEventListener', () => { | ||
describe('untrusted events reporting', () => { | ||
let originalJasmine: typeof jasmine | ||
let telemetryEvents: RawTelemetryEvent[] | ||
let eventTarget: EventTarget | ||
beforeEach(() => { | ||
eventTarget = document.createElement('div') | ||
originalJasmine = window.jasmine | ||
delete (window as any).jasmine | ||
telemetryEvents = startFakeTelemetry() | ||
}) | ||
afterEach(() => { | ||
window.jasmine = originalJasmine | ||
resetTelemetry() | ||
resetUntrustedEventsCount() | ||
}) | ||
it('sends a telemetry debug log when an untrusted event is dispatched', () => { | ||
addEventListener(eventTarget, DOM_EVENT.CLICK, noop) | ||
eventTarget.dispatchEvent(createNewEvent(DOM_EVENT.CLICK)) | ||
expect(telemetryEvents).toEqual([ | ||
{ | ||
message: 'Untrusted event', | ||
status: 'debug', | ||
type: 'log', | ||
event_type: 'click', | ||
}, | ||
]) | ||
}) | ||
it('only reports the first untrusted event of each type', () => { | ||
addEventListener(eventTarget, DOM_EVENT.CLICK, noop) | ||
addEventListener(eventTarget, DOM_EVENT.MOUSE_UP, noop) | ||
eventTarget.dispatchEvent(createNewEvent(DOM_EVENT.CLICK)) | ||
eventTarget.dispatchEvent(createNewEvent(DOM_EVENT.CLICK)) | ||
eventTarget.dispatchEvent(createNewEvent(DOM_EVENT.MOUSE_UP)) | ||
expect(telemetryEvents.length).toBe(2) | ||
}) | ||
}) | ||
describe('Zone.js support', () => { | ||
@@ -8,0 +56,0 @@ let zoneJsStub: ReturnType<typeof stubZoneJs> |
import { monitor } from '../tools/monitor' | ||
import { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue' | ||
import { addTelemetryDebug } from '../domain/telemetry' | ||
@@ -80,10 +81,9 @@ export const enum DOM_EVENT { | ||
) { | ||
const wrappedListener = monitor( | ||
once | ||
? (event: Event) => { | ||
stop() | ||
listener(event as E) | ||
} | ||
: (listener as (event: Event) => void) | ||
) | ||
const wrappedListener = monitor((event: Event) => { | ||
if (once) { | ||
stop() | ||
} | ||
reportUntrustedEvent(event) | ||
listener(event as E) | ||
}) | ||
@@ -104,1 +104,18 @@ const options = passive ? { capture, passive } : capture | ||
} | ||
const reportedUntrustedEventTypes = new Set<string>() | ||
function reportUntrustedEvent(event: Event) { | ||
const eventType = event.type | ||
if (event.isTrusted || (window as any).jasmine || reportedUntrustedEventTypes.has(eventType)) { | ||
return | ||
} | ||
reportedUntrustedEventTypes.add(eventType) | ||
addTelemetryDebug('Untrusted event', { event_type: eventType }) | ||
} | ||
export function resetUntrustedEventsCount() { | ||
reportedUntrustedEventTypes.clear() | ||
} |
@@ -29,2 +29,10 @@ import type { BuildEnvWindow } from '../../../test/specHelper' | ||
}) | ||
it('should not start with ddsource for internal analytics mode', () => { | ||
const url = createEndpointBuilder({ ...initConfiguration, internalAnalyticsSubdomain: 'foo' }, 'rum', []).build( | ||
'xhr' | ||
) | ||
expect(url).not.toContain('/rum?ddsource') | ||
expect(url).toContain('ddsource=browser') | ||
}) | ||
}) | ||
@@ -31,0 +39,0 @@ |
@@ -44,14 +44,18 @@ import type { RetryInfo } from '../../transport' | ||
} | ||
let parameters = | ||
'ddsource=browser' + | ||
`&ddtags=${encodeURIComponent(tags.join(','))}` + | ||
`&dd-api-key=${clientToken}` + | ||
`&dd-evp-origin-version=${encodeURIComponent(__BUILD_ENV__SDK_VERSION__)}` + | ||
'&dd-evp-origin=browser' + | ||
`&dd-request-id=${generateUUID()}` | ||
const parameters = [ | ||
'ddsource=browser', | ||
`ddtags=${encodeURIComponent(tags.join(','))}`, | ||
`dd-api-key=${clientToken}`, | ||
`dd-evp-origin-version=${encodeURIComponent(__BUILD_ENV__SDK_VERSION__)}`, | ||
'dd-evp-origin=browser', | ||
`dd-request-id=${generateUUID()}`, | ||
] | ||
if (endpointType === 'rum') { | ||
parameters += `&batch_time=${timeStampNow()}` | ||
parameters.push(`batch_time=${timeStampNow()}`) | ||
} | ||
const endpointUrl = `${baseUrl}?${parameters}` | ||
if (initConfiguration.internalAnalyticsSubdomain) { | ||
parameters.reverse() | ||
} | ||
const endpointUrl = `${baseUrl}?${parameters.join('&')}` | ||
@@ -58,0 +62,0 @@ return proxyUrl ? `${proxyUrl}?ddforward=${encodeURIComponent(endpointUrl)}` : endpointUrl |
@@ -61,2 +61,3 @@ export { | ||
export { sendToExtension } from './tools/sendToExtension' | ||
export { runOnReadyState } from './tools/runOnReadyState' | ||
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue' | ||
@@ -63,0 +64,0 @@ export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod' |
@@ -32,3 +32,5 @@ import { monitor } from './monitor' | ||
if (options.collectStreamBody) chunks.push(result.value) | ||
if (options.collectStreamBody) { | ||
chunks.push(result.value) | ||
} | ||
readBytesCount += result.value.length | ||
@@ -35,0 +37,0 @@ |
@@ -1,2 +0,1 @@ | ||
import { DOM_EVENT, addEventListener } from '../browser/addEventListener' | ||
import { display } from './display' | ||
@@ -323,3 +322,5 @@ import { monitor } from './monitor' | ||
if (candidate.length <= correctedLength) return candidate | ||
if (candidate.length <= correctedLength) { | ||
return candidate | ||
} | ||
@@ -340,11 +341,2 @@ return `${candidate.slice(0, correctedLength)}${suffix}` | ||
export function runOnReadyState(expectedReadyState: 'complete' | 'interactive', callback: () => void) { | ||
if (document.readyState === expectedReadyState || document.readyState === 'complete') { | ||
callback() | ||
} else { | ||
const eventName = expectedReadyState === 'complete' ? DOM_EVENT.LOAD : DOM_EVENT.DOM_CONTENT_LOADED | ||
addEventListener(window, eventName, callback, { once: true }) | ||
} | ||
} | ||
/** | ||
@@ -351,0 +343,0 @@ * Similar to `typeof`, but distinguish plain objects from `null` and arrays |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1015467
471
20313