Socket
Socket
Sign inDemoInstall

@datadog/browser-core

Package Overview
Dependencies
Maintainers
1
Versions
254
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@datadog/browser-core - npm Package Compare versions

Comparing version 4.26.0 to 4.28.0

cjs/browser/addEventListener.d.ts

2

cjs/boot/init.js

@@ -9,3 +9,3 @@ "use strict";

var publicApi = (0, utils_1.assign)({
version: "4.26.0",
version: "4.28.0",
// 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

import { Observable } from '../tools/observable';
import type { Duration, ClocksState } from '../tools/timeUtils';
import type { ClocksState } from '../tools/timeUtils';
interface FetchContextBase {

@@ -16,3 +16,2 @@ method: string;

status: number;
resolveDuration?: Duration;
response?: Response;

@@ -19,0 +18,0 @@ responseType?: string;

@@ -59,3 +59,2 @@ "use strict";

context.state = 'resolve';
context.resolveDuration = (0, timeUtils_1.elapsed)(startContext.startClocks.timeStamp, (0, timeUtils_1.timeStampNow)());
if ('stack' in response || response instanceof Error) {

@@ -62,0 +61,0 @@ context.status = 0;

@@ -5,3 +5,3 @@ "use strict";

var observable_1 = require("../tools/observable");
var utils_1 = require("../tools/utils");
var addEventListener_1 = require("./addEventListener");
function createPageExitObservable() {

@@ -13,3 +13,3 @@ var observable = new observable_1.Observable(function () {

*/
var stopVisibilityChangeListener = (0, utils_1.addEventListener)(document, "visibilitychange" /* VISIBILITY_CHANGE */, function () {
var stopVisibilityChangeListener = (0, addEventListener_1.addEventListener)(document, "visibilitychange" /* VISIBILITY_CHANGE */, function () {
if (document.visibilityState === 'hidden') {

@@ -24,3 +24,3 @@ observable.notify({ reason: "visibility_hidden" /* HIDDEN */ });

*/
var stopBeforeUnloadListener = (0, utils_1.addEventListener)(window, "beforeunload" /* BEFORE_UNLOAD */, function () {
var stopBeforeUnloadListener = (0, addEventListener_1.addEventListener)(window, "beforeunload" /* BEFORE_UNLOAD */, function () {
observable.notify({ reason: "before_unload" /* UNLOADING */ });

@@ -27,0 +27,0 @@ }).stop;

@@ -29,2 +29,3 @@ import type { CookieOptions } from '../../browser/cookie';

datacenter?: string;
internalAnalyticsSubdomain?: string;
telemetryConfigurationSampleRate?: number;

@@ -31,0 +32,0 @@ }

@@ -19,6 +19,4 @@ "use strict";

function createEndpointBuilder(initConfiguration, endpointType, configurationTags) {
var _a = initConfiguration.site, site = _a === void 0 ? intakeSites_1.INTAKE_SITE_US1 : _a, clientToken = initConfiguration.clientToken;
var domainParts = site.split('.');
var extension = domainParts.pop();
var host = "".concat(exports.ENDPOINTS[endpointType], ".browser-intake-").concat(domainParts.join('-'), ".").concat(extension);
var clientToken = initConfiguration.clientToken;
var host = buildEndpointHost(initConfiguration, endpointType);
var baseUrl = "https://".concat(host, "/api/v2/").concat(INTAKE_TRACKS[endpointType]);

@@ -28,3 +26,3 @@ var proxyUrl = initConfiguration.proxyUrl && (0, urlPolyfill_1.normalizeUrl)(initConfiguration.proxyUrl);

build: function (api, retry) {
var tags = ["sdk_version:".concat("4.26.0"), "api:".concat(api)].concat(configurationTags);
var tags = ["sdk_version:".concat("4.28.0"), "api:".concat(api)].concat(configurationTags);
if (retry) {

@@ -36,3 +34,3 @@ tags.push("retry_count:".concat(retry.count), "retry_after:".concat(retry.lastFailureStatus));

"&dd-api-key=".concat(clientToken) +
"&dd-evp-origin-version=".concat(encodeURIComponent("4.26.0")) +
"&dd-evp-origin-version=".concat(encodeURIComponent("4.28.0")) +
'&dd-evp-origin=browser' +

@@ -53,2 +51,11 @@ "&dd-request-id=".concat((0, utils_1.generateUUID)());

exports.createEndpointBuilder = createEndpointBuilder;
function buildEndpointHost(initConfiguration, endpointType) {
var _a = initConfiguration.site, site = _a === void 0 ? intakeSites_1.INTAKE_SITE_US1 : _a, internalAnalyticsSubdomain = initConfiguration.internalAnalyticsSubdomain;
if (internalAnalyticsSubdomain && site === intakeSites_1.INTAKE_SITE_US1) {
return "".concat(internalAnalyticsSubdomain, ".").concat(intakeSites_1.INTAKE_SITE_US1);
}
var domainParts = site.split('.');
var extension = domainParts.pop();
return "".concat(exports.ENDPOINTS[endpointType], ".browser-intake-").concat(domainParts.join('-'), ".").concat(extension);
}
//# sourceMappingURL=endpointBuilder.js.map

@@ -8,2 +8,3 @@ "use strict";

var utils_1 = require("../../tools/utils");
var addEventListener_1 = require("../../browser/addEventListener");
exports.RawReportType = {

@@ -52,3 +53,3 @@ intervention: 'intervention',

});
var stop = (0, utils_1.addEventListener)(document, "securitypolicyviolation" /* SECURITY_POLICY_VIOLATION */, handleCspViolation).stop;
var stop = (0, addEventListener_1.addEventListener)(document, "securitypolicyviolation" /* SECURITY_POLICY_VIOLATION */, handleCspViolation).stop;
return stop;

@@ -55,0 +56,0 @@ });

@@ -31,2 +31,3 @@ "use strict";

var monitor_1 = require("../../tools/monitor");
var addEventListener_1 = require("../../browser/addEventListener");
var oldCookiesMigration_1 = require("./oldCookiesMigration");

@@ -73,3 +74,3 @@ var sessionStore_1 = require("./sessionStore");

function trackActivity(expandOrRenewSession) {
var stop = utils.addEventListeners(window, ["click" /* CLICK */, "touchstart" /* TOUCH_START */, "keydown" /* KEY_DOWN */, "scroll" /* SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;
var stop = (0, addEventListener_1.addEventListeners)(window, ["click" /* CLICK */, "touchstart" /* TOUCH_START */, "keydown" /* KEY_DOWN */, "scroll" /* SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;
stopCallbacks.push(stop);

@@ -83,3 +84,3 @@ }

});
var stop = utils.addEventListener(document, "visibilitychange" /* VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;
var stop = (0, addEventListener_1.addEventListener)(document, "visibilitychange" /* VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;
stopCallbacks.push(stop);

@@ -86,0 +87,0 @@ var visibilityCheckInterval = setInterval(expandSessionWhenVisible, exports.VISIBILITY_CHECK_DELAY);

@@ -12,2 +12,3 @@ "use strict";

var monitor_1 = require("../../tools/monitor");
var sendToExtension_1 = require("../../tools/sendToExtension");
var rawTelemetryEvent_types_1 = require("./rawTelemetryEvent.types");

@@ -29,5 +30,7 @@ var ALLOWED_FRAME_URLS = [

telemetryConfiguration.telemetryEnabled && (0, utils_1.performDraw)(configuration.telemetryConfigurationSampleRate);
onRawTelemetryEventCollected = function (event) {
onRawTelemetryEventCollected = function (rawEvent) {
if (!(0, utils_1.includes)(TELEMETRY_EXCLUDED_SITES, configuration.site) && telemetryConfiguration.telemetryEnabled) {
observable.notify(toTelemetryEvent(telemetryService, event));
var event_1 = toTelemetryEvent(telemetryService, rawEvent);
observable.notify(event_1);
(0, sendToExtension_1.sendToExtension)('telemetry', event_1);
}

@@ -45,3 +48,3 @@ };

service: telemetryService,
version: "4.26.0",
version: "4.28.0",
source: 'browser',

@@ -48,0 +51,0 @@ _dd: {

@@ -18,2 +18,4 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration';

export * from './tools/browserDetection';
export { sendToExtension } from './tools/sendToExtension';
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue';
export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod';

@@ -26,2 +28,3 @@ export { ErrorSource, ErrorHandling, computeRawError, createHandlingStack, RawError, RawErrorCause, ErrorWithCause, toStackTraceString, getFileFromStackTraceString, } from './tools/error';

export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable';
export * from './browser/addEventListener';
export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable';

@@ -28,0 +31,0 @@ export { BoundedBuffer } from './tools/boundedBuffer';

@@ -17,4 +17,4 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.initConsoleObservable = exports.createPageExitObservable = 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.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 = void 0;
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;
var configuration_1 = require("./domain/configuration");

@@ -71,2 +71,6 @@ Object.defineProperty(exports, "buildCookieOptions", { enumerable: true, get: function () { return configuration_1.buildCookieOptions; } });

__exportStar(require("./tools/browserDetection"), exports);
var sendToExtension_1 = require("./tools/sendToExtension");
Object.defineProperty(exports, "sendToExtension", { enumerable: true, get: function () { return sendToExtension_1.sendToExtension; } });
var getZoneJsOriginalValue_1 = require("./tools/getZoneJsOriginalValue");
Object.defineProperty(exports, "getZoneJsOriginalValue", { enumerable: true, get: function () { return getZoneJsOriginalValue_1.getZoneJsOriginalValue; } });
var instrumentMethod_1 = require("./tools/instrumentMethod");

@@ -94,2 +98,3 @@ Object.defineProperty(exports, "instrumentMethod", { enumerable: true, get: function () { return instrumentMethod_1.instrumentMethod; } });

Object.defineProperty(exports, "createPageExitObservable", { enumerable: true, get: function () { return pageExitObservable_1.createPageExitObservable; } });
__exportStar(require("./browser/addEventListener"), exports);
var consoleObservable_1 = require("./domain/console/consoleObservable");

@@ -96,0 +101,0 @@ Object.defineProperty(exports, "initConsoleObservable", { enumerable: true, get: function () { return consoleObservable_1.initConsoleObservable; } });

@@ -8,34 +8,2 @@ export declare const ONE_SECOND = 1000;

export declare const ONE_MEBI_BYTE: number;
export declare const enum DOM_EVENT {
BEFORE_UNLOAD = "beforeunload",
CLICK = "click",
DBL_CLICK = "dblclick",
KEY_DOWN = "keydown",
LOAD = "load",
POP_STATE = "popstate",
SCROLL = "scroll",
TOUCH_START = "touchstart",
TOUCH_END = "touchend",
TOUCH_MOVE = "touchmove",
VISIBILITY_CHANGE = "visibilitychange",
DOM_CONTENT_LOADED = "DOMContentLoaded",
POINTER_DOWN = "pointerdown",
POINTER_UP = "pointerup",
POINTER_CANCEL = "pointercancel",
HASH_CHANGE = "hashchange",
PAGE_HIDE = "pagehide",
MOUSE_DOWN = "mousedown",
MOUSE_UP = "mouseup",
MOUSE_MOVE = "mousemove",
FOCUS = "focus",
BLUR = "blur",
CONTEXT_MENU = "contextmenu",
RESIZE = "resize",
CHANGE = "change",
INPUT = "input",
PLAY = "play",
PAUSE = "pause",
SECURITY_POLICY_VIOLATION = "securitypolicyviolation",
SELECTION_CHANGE = "selectionchange"
}
export declare const enum ResourceType {

@@ -126,49 +94,2 @@ DOCUMENT = "document",

export declare function safeTruncate(candidate: string, length: number, suffix?: string): string;
export interface EventEmitter {
addEventListener(event: DOM_EVENT, listener: (event: Event) => void, options?: boolean | {
capture?: boolean;
passive?: boolean;
}): void;
removeEventListener(event: DOM_EVENT, listener: (event: Event) => void, options?: boolean | {
capture?: boolean;
passive?: boolean;
}): void;
}
interface AddEventListenerOptions {
once?: boolean;
capture?: boolean;
passive?: boolean;
}
/**
* Add an event listener to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*/
export declare function addEventListener<E extends Event>(emitter: EventEmitter, event: DOM_EVENT, listener: (event: E) => void, options?: AddEventListenerOptions): {
stop: () => void;
};
/**
* Add event listeners to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*
* * with `once: true`, the listener will be called at most once, even if different events are listened
*/
export declare function addEventListeners<E extends Event>(emitter: EventEmitter, events: DOM_EVENT[], listener: (event: E) => void, { once, capture, passive }?: {
once?: boolean;
capture?: boolean;
passive?: boolean;
}): {
stop: () => void;
};
export declare function elementMatches(element: Element & {

@@ -175,0 +96,0 @@ msMatchesSelector?(selector: string): boolean;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cssEscape = exports.matchList = exports.removeDuplicates = exports.requestIdleCallback = exports.combine = exports.deepClone = exports.mergeInto = exports.getType = exports.runOnReadyState = exports.elementMatches = exports.addEventListeners = exports.addEventListener = 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;
exports.cssEscape = exports.matchList = 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");
var display_1 = require("./display");

@@ -287,44 +288,2 @@ var monitor_1 = require("./monitor");

exports.safeTruncate = safeTruncate;
/**
* Add an event listener to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*/
function addEventListener(emitter, event, listener, options) {
return addEventListeners(emitter, [event], listener, options);
}
exports.addEventListener = addEventListener;
/**
* Add event listeners to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*
* * with `once: true`, the listener will be called at most once, even if different events are listened
*/
function addEventListeners(emitter, events, listener, _a) {
var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive;
var wrappedListener = (0, monitor_1.monitor)(once
? function (event) {
stop();
listener(event);
}
: listener);
var options = passive ? { capture: capture, passive: passive } : capture;
events.forEach(function (event) { return emitter.addEventListener(event, wrappedListener, options); });
var stop = function () { return events.forEach(function (event) { return emitter.removeEventListener(event, wrappedListener, options); }); };
return {
stop: stop,
};
}
exports.addEventListeners = addEventListeners;
function elementMatches(element, selector) {

@@ -347,3 +306,3 @@ if (element.matches) {

var eventName = expectedReadyState === 'complete' ? "load" /* LOAD */ : "DOMContentLoaded" /* DOM_CONTENT_LOADED */;
addEventListener(window, eventName, callback, { once: true });
(0, addEventListener_1.addEventListener)(window, eventName, callback, { once: true });
}

@@ -350,0 +309,0 @@ }

@@ -6,3 +6,3 @@ import { catchUserErrors } from '../tools/catchUserErrors';

var publicApi = assign({
version: "4.26.0",
version: "4.28.0",
// 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

import { Observable } from '../tools/observable';
import type { Duration, ClocksState } from '../tools/timeUtils';
import type { ClocksState } from '../tools/timeUtils';
interface FetchContextBase {

@@ -16,3 +16,2 @@ method: string;

status: number;
resolveDuration?: Duration;
response?: Response;

@@ -19,0 +18,0 @@ responseType?: string;

import { instrumentMethod } from '../tools/instrumentMethod';
import { callMonitored, monitor } from '../tools/monitor';
import { Observable } from '../tools/observable';
import { elapsed, clocksNow, timeStampNow } from '../tools/timeUtils';
import { clocksNow } from '../tools/timeUtils';
import { normalizeUrl } from '../tools/urlPolyfill';

@@ -55,3 +55,2 @@ var fetchObservable;

context.state = 'resolve';
context.resolveDuration = elapsed(startContext.startClocks.timeStamp, timeStampNow());
if ('stack' in response || response instanceof Error) {

@@ -58,0 +57,0 @@ context.status = 0;

import { Observable } from '../tools/observable';
import { addEventListener } from '../tools/utils';
import { addEventListener } from './addEventListener';
export function createPageExitObservable() {

@@ -4,0 +4,0 @@ var observable = new Observable(function () {

@@ -29,2 +29,3 @@ import type { CookieOptions } from '../../browser/cookie';

datacenter?: string;
internalAnalyticsSubdomain?: string;
telemetryConfigurationSampleRate?: number;

@@ -31,0 +32,0 @@ }

@@ -16,6 +16,4 @@ import { timeStampNow } from '../../tools/timeUtils';

export function createEndpointBuilder(initConfiguration, endpointType, configurationTags) {
var _a = initConfiguration.site, site = _a === void 0 ? INTAKE_SITE_US1 : _a, clientToken = initConfiguration.clientToken;
var domainParts = site.split('.');
var extension = domainParts.pop();
var host = "".concat(ENDPOINTS[endpointType], ".browser-intake-").concat(domainParts.join('-'), ".").concat(extension);
var clientToken = initConfiguration.clientToken;
var host = buildEndpointHost(initConfiguration, endpointType);
var baseUrl = "https://".concat(host, "/api/v2/").concat(INTAKE_TRACKS[endpointType]);

@@ -25,3 +23,3 @@ var proxyUrl = initConfiguration.proxyUrl && normalizeUrl(initConfiguration.proxyUrl);

build: function (api, retry) {
var tags = ["sdk_version:".concat("4.26.0"), "api:".concat(api)].concat(configurationTags);
var tags = ["sdk_version:".concat("4.28.0"), "api:".concat(api)].concat(configurationTags);
if (retry) {

@@ -33,3 +31,3 @@ tags.push("retry_count:".concat(retry.count), "retry_after:".concat(retry.lastFailureStatus));

"&dd-api-key=".concat(clientToken) +
"&dd-evp-origin-version=".concat(encodeURIComponent("4.26.0")) +
"&dd-evp-origin-version=".concat(encodeURIComponent("4.28.0")) +
'&dd-evp-origin=browser' +

@@ -49,2 +47,11 @@ "&dd-request-id=".concat(generateUUID());

}
function buildEndpointHost(initConfiguration, endpointType) {
var _a = initConfiguration.site, site = _a === void 0 ? INTAKE_SITE_US1 : _a, internalAnalyticsSubdomain = initConfiguration.internalAnalyticsSubdomain;
if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {
return "".concat(internalAnalyticsSubdomain, ".").concat(INTAKE_SITE_US1);
}
var domainParts = site.split('.');
var extension = domainParts.pop();
return "".concat(ENDPOINTS[endpointType], ".browser-intake-").concat(domainParts.join('-'), ".").concat(extension);
}
//# sourceMappingURL=endpointBuilder.js.map
import { toStackTraceString } from '../../tools/error';
import { monitor } from '../../tools/monitor';
import { mergeObservables, Observable } from '../../tools/observable';
import { includes, addEventListener, safeTruncate } from '../../tools/utils';
import { includes, safeTruncate } from '../../tools/utils';
import { addEventListener } from '../../browser/addEventListener';
export var RawReportType = {

@@ -6,0 +7,0 @@ intervention: 'intervention',

@@ -5,2 +5,3 @@ import * as utils from '../../tools/utils';

import { monitor } from '../../tools/monitor';
import { addEventListener, addEventListeners } from '../../browser/addEventListener';
import { tryOldCookiesMigration } from './oldCookiesMigration';

@@ -45,3 +46,3 @@ import { startSessionStore } from './sessionStore';

function trackActivity(expandOrRenewSession) {
var stop = utils.addEventListeners(window, ["click" /* CLICK */, "touchstart" /* TOUCH_START */, "keydown" /* KEY_DOWN */, "scroll" /* SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;
var stop = addEventListeners(window, ["click" /* CLICK */, "touchstart" /* TOUCH_START */, "keydown" /* KEY_DOWN */, "scroll" /* SCROLL */], expandOrRenewSession, { capture: true, passive: true }).stop;
stopCallbacks.push(stop);

@@ -55,3 +56,3 @@ }

});
var stop = utils.addEventListener(document, "visibilitychange" /* VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;
var stop = addEventListener(document, "visibilitychange" /* VISIBILITY_CHANGE */, expandSessionWhenVisible).stop;
stopCallbacks.push(stop);

@@ -58,0 +59,0 @@ var visibilityCheckInterval = setInterval(expandSessionWhenVisible, VISIBILITY_CHECK_DELAY);

@@ -9,2 +9,3 @@ import { ConsoleApiName } from '../../tools/display';

import { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor';
import { sendToExtension } from '../../tools/sendToExtension';
import { TelemetryType } from './rawTelemetryEvent.types';

@@ -26,5 +27,7 @@ var ALLOWED_FRAME_URLS = [

telemetryConfiguration.telemetryEnabled && performDraw(configuration.telemetryConfigurationSampleRate);
onRawTelemetryEventCollected = function (event) {
onRawTelemetryEventCollected = function (rawEvent) {
if (!includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && telemetryConfiguration.telemetryEnabled) {
observable.notify(toTelemetryEvent(telemetryService, event));
var event_1 = toTelemetryEvent(telemetryService, rawEvent);
observable.notify(event_1);
sendToExtension('telemetry', event_1);
}

@@ -42,3 +45,3 @@ };

service: telemetryService,
version: "4.26.0",
version: "4.28.0",
source: 'browser',

@@ -45,0 +48,0 @@ _dd: {

@@ -18,2 +18,4 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration';

export * from './tools/browserDetection';
export { sendToExtension } from './tools/sendToExtension';
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue';
export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod';

@@ -26,2 +28,3 @@ export { ErrorSource, ErrorHandling, computeRawError, createHandlingStack, RawError, RawErrorCause, ErrorWithCause, toStackTraceString, getFileFromStackTraceString, } from './tools/error';

export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable';
export * from './browser/addEventListener';
export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable';

@@ -28,0 +31,0 @@ export { BoundedBuffer } from './tools/boundedBuffer';

@@ -21,2 +21,4 @@ export { buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration';

export * from './tools/browserDetection';
export { sendToExtension } from './tools/sendToExtension';
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue';
export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod';

@@ -28,2 +30,3 @@ export { ErrorSource, computeRawError, createHandlingStack, toStackTraceString, getFileFromStackTraceString, } from './tools/error';

export { createPageExitObservable } from './browser/pageExitObservable';
export * from './browser/addEventListener';
export { initConsoleObservable } from './domain/console/consoleObservable';

@@ -30,0 +33,0 @@ export { BoundedBuffer } from './tools/boundedBuffer';

@@ -8,34 +8,2 @@ export declare const ONE_SECOND = 1000;

export declare const ONE_MEBI_BYTE: number;
export declare const enum DOM_EVENT {
BEFORE_UNLOAD = "beforeunload",
CLICK = "click",
DBL_CLICK = "dblclick",
KEY_DOWN = "keydown",
LOAD = "load",
POP_STATE = "popstate",
SCROLL = "scroll",
TOUCH_START = "touchstart",
TOUCH_END = "touchend",
TOUCH_MOVE = "touchmove",
VISIBILITY_CHANGE = "visibilitychange",
DOM_CONTENT_LOADED = "DOMContentLoaded",
POINTER_DOWN = "pointerdown",
POINTER_UP = "pointerup",
POINTER_CANCEL = "pointercancel",
HASH_CHANGE = "hashchange",
PAGE_HIDE = "pagehide",
MOUSE_DOWN = "mousedown",
MOUSE_UP = "mouseup",
MOUSE_MOVE = "mousemove",
FOCUS = "focus",
BLUR = "blur",
CONTEXT_MENU = "contextmenu",
RESIZE = "resize",
CHANGE = "change",
INPUT = "input",
PLAY = "play",
PAUSE = "pause",
SECURITY_POLICY_VIOLATION = "securitypolicyviolation",
SELECTION_CHANGE = "selectionchange"
}
export declare const enum ResourceType {

@@ -126,49 +94,2 @@ DOCUMENT = "document",

export declare function safeTruncate(candidate: string, length: number, suffix?: string): string;
export interface EventEmitter {
addEventListener(event: DOM_EVENT, listener: (event: Event) => void, options?: boolean | {
capture?: boolean;
passive?: boolean;
}): void;
removeEventListener(event: DOM_EVENT, listener: (event: Event) => void, options?: boolean | {
capture?: boolean;
passive?: boolean;
}): void;
}
interface AddEventListenerOptions {
once?: boolean;
capture?: boolean;
passive?: boolean;
}
/**
* Add an event listener to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*/
export declare function addEventListener<E extends Event>(emitter: EventEmitter, event: DOM_EVENT, listener: (event: E) => void, options?: AddEventListenerOptions): {
stop: () => void;
};
/**
* Add event listeners to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*
* * with `once: true`, the listener will be called at most once, even if different events are listened
*/
export declare function addEventListeners<E extends Event>(emitter: EventEmitter, events: DOM_EVENT[], listener: (event: E) => void, { once, capture, passive }?: {
once?: boolean;
capture?: boolean;
passive?: boolean;
}): {
stop: () => void;
};
export declare function elementMatches(element: Element & {

@@ -175,0 +96,0 @@ msMatchesSelector?(selector: string): boolean;

@@ -0,1 +1,2 @@

import { addEventListener } from '../browser/addEventListener';
import { display } from './display';

@@ -258,42 +259,2 @@ import { monitor } from './monitor';

}
/**
* Add an event listener to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*/
export function addEventListener(emitter, event, listener, options) {
return addEventListeners(emitter, [event], listener, options);
}
/**
* Add event listeners to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*
* * with `once: true`, the listener will be called at most once, even if different events are listened
*/
export function addEventListeners(emitter, events, listener, _a) {
var _b = _a === void 0 ? {} : _a, once = _b.once, capture = _b.capture, passive = _b.passive;
var wrappedListener = monitor(once
? function (event) {
stop();
listener(event);
}
: listener);
var options = passive ? { capture: capture, passive: passive } : capture;
events.forEach(function (event) { return emitter.addEventListener(event, wrappedListener, options); });
var stop = function () { return events.forEach(function (event) { return emitter.removeEventListener(event, wrappedListener, options); }); };
return {
stop: stop,
};
}
export function elementMatches(element, selector) {

@@ -300,0 +261,0 @@ if (element.matches) {

{
"name": "@datadog/browser-core",
"version": "4.26.0",
"version": "4.28.0",
"license": "Apache-2.0",

@@ -24,3 +24,3 @@ "main": "cjs/index.js",

},
"gitHead": "d00b17d0484fee1a1e880987aa314a113dff0da6"
"gitHead": "4bfb514cfa622a2bd99de4a0665156eda47fcbb1"
}
import { instrumentMethod } from '../tools/instrumentMethod'
import { callMonitored, monitor } from '../tools/monitor'
import { Observable } from '../tools/observable'
import type { Duration, ClocksState } from '../tools/timeUtils'
import { elapsed, clocksNow, timeStampNow } from '../tools/timeUtils'
import type { ClocksState } from '../tools/timeUtils'
import { clocksNow } from '../tools/timeUtils'
import { normalizeUrl } from '../tools/urlPolyfill'

@@ -23,3 +23,2 @@

status: number
resolveDuration?: Duration
response?: Response

@@ -100,3 +99,2 @@ responseType?: string

context.state = 'resolve'
context.resolveDuration = elapsed(startContext.startClocks.timeStamp, timeStampNow())
if ('stack' in response || response instanceof Error) {

@@ -103,0 +101,0 @@ context.status = 0

import { Observable } from '../tools/observable'
import { addEventListener, DOM_EVENT } from '../tools/utils'
import { addEventListener, DOM_EVENT } from './addEventListener'

@@ -4,0 +4,0 @@ export const enum PageExitReason {

@@ -46,2 +46,4 @@ import type { CookieOptions } from '../../browser/cookie'

datacenter?: string
internalAnalyticsSubdomain?: string
telemetryConfigurationSampleRate?: number

@@ -48,0 +50,0 @@ }

@@ -32,7 +32,5 @@ import type { RetryInfo } from '../../transport'

) {
const { site = INTAKE_SITE_US1, clientToken } = initConfiguration
const { clientToken } = initConfiguration
const domainParts = site.split('.')
const extension = domainParts.pop()
const host = `${ENDPOINTS[endpointType]}.browser-intake-${domainParts.join('-')}.${extension!}`
const host = buildEndpointHost(initConfiguration, endpointType)
const baseUrl = `https://${host}/api/v2/${INTAKE_TRACKS[endpointType]}`

@@ -68,1 +66,13 @@ const proxyUrl = initConfiguration.proxyUrl && normalizeUrl(initConfiguration.proxyUrl)

}
function buildEndpointHost(initConfiguration: InitConfiguration, endpointType: EndpointType) {
const { site = INTAKE_SITE_US1, internalAnalyticsSubdomain } = initConfiguration
if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {
return `${internalAnalyticsSubdomain}.${INTAKE_SITE_US1}`
}
const domainParts = site.split('.')
const extension = domainParts.pop()
return `${ENDPOINTS[endpointType]}.browser-intake-${domainParts.join('-')}.${extension!}`
}

@@ -5,3 +5,3 @@ import { computeTransportConfiguration } from './transportConfiguration'

const clientToken = 'some_client_token'
const internalAnalyticsSubdomain = 'ia-rum-intake'
describe('site', () => {

@@ -21,2 +21,21 @@ it('should use US site by default', () => {

describe('internalAnalyticsSubdomain', () => {
it('should use internal analytics subdomain value when set for datadoghq.com site', () => {
const configuration = computeTransportConfiguration({
clientToken,
internalAnalyticsSubdomain,
})
expect(configuration.rumEndpointBuilder.build('xhr')).toContain(internalAnalyticsSubdomain)
})
it('should not use internal analytics subdomain value when set for other sites', () => {
const configuration = computeTransportConfiguration({
clientToken,
site: 'foo.bar',
internalAnalyticsSubdomain,
})
expect(configuration.rumEndpointBuilder.build('xhr')).not.toContain(internalAnalyticsSubdomain)
})
})
describe('sdk_version, env, version and service', () => {

@@ -63,2 +82,10 @@ it('should not modify the logs and rum endpoints tags when not defined', () => {

it('should detect internal analytics intake request for datadoghq.com site', () => {
const configuration = computeTransportConfiguration({
clientToken,
internalAnalyticsSubdomain,
})
expect(configuration.isIntakeUrl(`https://${internalAnalyticsSubdomain}.datadoghq.com/api/v2/rum?xxx`)).toBe(true)
})
it('should not detect non intake request', () => {

@@ -100,2 +127,3 @@ const configuration = computeTransportConfiguration({ clientToken })

replica: { clientToken },
internalAnalyticsSubdomain,
})

@@ -107,5 +135,9 @@

expect(configuration.isIntakeUrl('https://rum.browser-intake-datadoghq.com/api/v2/rum?xxx')).toBe(true)
expect(configuration.isIntakeUrl('https://logs.browser-intake-datadoghq.com/api/v2/logs?xxx')).toBe(true)
expect(configuration.isIntakeUrl('https://session-replay.browser-intake-datadoghq.com/api/v2/replay?xxx')).toBe(
expect(configuration.isIntakeUrl(`https://${internalAnalyticsSubdomain}.datadoghq.com/api/v2/rum?xxx`)).toBe(
true
)
expect(configuration.isIntakeUrl(`https://${internalAnalyticsSubdomain}.datadoghq.com/api/v2/logs?xxx`)).toBe(
true
)
expect(configuration.isIntakeUrl(`https://${internalAnalyticsSubdomain}.datadoghq.com/api/v2/replay?xxx`)).toBe(
false

@@ -112,0 +144,0 @@ )

import { toStackTraceString } from '../../tools/error'
import { monitor } from '../../tools/monitor'
import { mergeObservables, Observable } from '../../tools/observable'
import { DOM_EVENT, includes, addEventListener, safeTruncate } from '../../tools/utils'
import { includes, safeTruncate } from '../../tools/utils'
import { addEventListener, DOM_EVENT } from '../../browser/addEventListener'
import type { Report, BrowserWindow, ReportType } from './browser.types'

@@ -6,0 +7,0 @@

@@ -5,5 +5,6 @@ import type { CookieOptions } from '../../browser/cookie'

import { mockClock, restorePageVisibility, setPageVisibility, createNewEvent } from '../../../test/specHelper'
import { ONE_HOUR, DOM_EVENT, ONE_SECOND } from '../../tools/utils'
import { ONE_HOUR, ONE_SECOND } from '../../tools/utils'
import type { RelativeTime } from '../../tools/timeUtils'
import { isIE } from '../../tools/browserDetection'
import { DOM_EVENT } from '../../browser/addEventListener'
import type { SessionManager } from './sessionManager'

@@ -10,0 +11,0 @@ import { startSessionManager, stopSessionManager, VISIBILITY_CHECK_DELAY } from './sessionManager'

@@ -9,2 +9,3 @@ import type { CookieOptions } from '../../browser/cookie'

import { monitor } from '../../tools/monitor'
import { DOM_EVENT, addEventListener, addEventListeners } from '../../browser/addEventListener'
import { tryOldCookiesMigration } from './oldCookiesMigration'

@@ -74,5 +75,5 @@ import { startSessionStore } from './sessionStore'

function trackActivity(expandOrRenewSession: () => void) {
const { stop } = utils.addEventListeners(
const { stop } = addEventListeners(
window,
[utils.DOM_EVENT.CLICK, utils.DOM_EVENT.TOUCH_START, utils.DOM_EVENT.KEY_DOWN, utils.DOM_EVENT.SCROLL],
[DOM_EVENT.CLICK, DOM_EVENT.TOUCH_START, DOM_EVENT.KEY_DOWN, DOM_EVENT.SCROLL],
expandOrRenewSession,

@@ -91,3 +92,3 @@ { capture: true, passive: true }

const { stop } = utils.addEventListener(document, utils.DOM_EVENT.VISIBILITY_CHANGE, expandSessionWhenVisible)
const { stop } = addEventListener(document, DOM_EVENT.VISIBILITY_CHANGE, expandSessionWhenVisible)
stopCallbacks.push(stop)

@@ -94,0 +95,0 @@

@@ -12,2 +12,3 @@ import type { Context } from '../../tools/context'

import { displayIfDebugEnabled, startMonitorErrorCollection } from '../../tools/monitor'
import { sendToExtension } from '../../tools/sendToExtension'
import type { TelemetryEvent } from './telemetryEvent.types'

@@ -56,5 +57,7 @@ import type { RawTelemetryConfiguration, RawTelemetryEvent } from './rawTelemetryEvent.types'

onRawTelemetryEventCollected = (event: RawTelemetryEvent) => {
onRawTelemetryEventCollected = (rawEvent: RawTelemetryEvent) => {
if (!includes(TELEMETRY_EXCLUDED_SITES, configuration.site) && telemetryConfiguration.telemetryEnabled) {
observable.notify(toTelemetryEvent(telemetryService, event))
const event = toTelemetryEvent(telemetryService, rawEvent)
observable.notify(event)
sendToExtension('telemetry', event)
}

@@ -61,0 +64,0 @@ }

@@ -60,2 +60,4 @@ export {

export * from './tools/browserDetection'
export { sendToExtension } from './tools/sendToExtension'
export { getZoneJsOriginalValue } from './tools/getZoneJsOriginalValue'
export { instrumentMethod, instrumentMethodAndCallOriginal, instrumentSetter } from './tools/instrumentMethod'

@@ -78,2 +80,3 @@ export {

export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable'
export * from './browser/addEventListener'
export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable'

@@ -80,0 +83,0 @@ export { BoundedBuffer } from './tools/boundedBuffer'

@@ -0,1 +1,2 @@

import { DOM_EVENT, addEventListener } from '../browser/addEventListener'
import { display } from './display'

@@ -12,35 +13,2 @@ import { monitor } from './monitor'

export const enum DOM_EVENT {
BEFORE_UNLOAD = 'beforeunload',
CLICK = 'click',
DBL_CLICK = 'dblclick',
KEY_DOWN = 'keydown',
LOAD = 'load',
POP_STATE = 'popstate',
SCROLL = 'scroll',
TOUCH_START = 'touchstart',
TOUCH_END = 'touchend',
TOUCH_MOVE = 'touchmove',
VISIBILITY_CHANGE = 'visibilitychange',
DOM_CONTENT_LOADED = 'DOMContentLoaded',
POINTER_DOWN = 'pointerdown',
POINTER_UP = 'pointerup',
POINTER_CANCEL = 'pointercancel',
HASH_CHANGE = 'hashchange',
PAGE_HIDE = 'pagehide',
MOUSE_DOWN = 'mousedown',
MOUSE_UP = 'mouseup',
MOUSE_MOVE = 'mousemove',
FOCUS = 'focus',
BLUR = 'blur',
CONTEXT_MENU = 'contextmenu',
RESIZE = 'resize',
CHANGE = 'change',
INPUT = 'input',
PLAY = 'play',
PAUSE = 'pause',
SECURITY_POLICY_VIOLATION = 'securitypolicyviolation',
SELECTION_CHANGE = 'selectionchange',
}
export const enum ResourceType {

@@ -361,76 +329,2 @@ DOCUMENT = 'document',

export interface EventEmitter {
addEventListener(
event: DOM_EVENT,
listener: (event: Event) => void,
options?: boolean | { capture?: boolean; passive?: boolean }
): void
removeEventListener(
event: DOM_EVENT,
listener: (event: Event) => void,
options?: boolean | { capture?: boolean; passive?: boolean }
): void
}
interface AddEventListenerOptions {
once?: boolean
capture?: boolean
passive?: boolean
}
/**
* Add an event listener to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*/
export function addEventListener<E extends Event>(
emitter: EventEmitter,
event: DOM_EVENT,
listener: (event: E) => void,
options?: AddEventListenerOptions
) {
return addEventListeners(emitter, [event], listener, options)
}
/**
* Add event listeners to an event emitter object (Window, Element, mock object...). This provides
* a few conveniences compared to using `element.addEventListener` directly:
*
* * supports IE11 by: using an option object only if needed and emulating the `once` option
*
* * wraps the listener with a `monitor` function
*
* * returns a `stop` function to remove the listener
*
* * with `once: true`, the listener will be called at most once, even if different events are listened
*/
export function addEventListeners<E extends Event>(
emitter: EventEmitter,
events: DOM_EVENT[],
listener: (event: E) => void,
{ once, capture, passive }: { once?: boolean; capture?: boolean; passive?: boolean } = {}
) {
const wrappedListener = monitor(
once
? (event: Event) => {
stop()
listener(event as E)
}
: (listener as (event: Event) => void)
)
const options = passive ? { capture, passive } : capture
events.forEach((event) => emitter.addEventListener(event, wrappedListener, options))
const stop = () => events.forEach((event) => emitter.removeEventListener(event, wrappedListener, options))
return {
stop,
}
}
export function elementMatches(element: Element & { msMatchesSelector?(selector: string): boolean }, selector: string) {

@@ -437,0 +331,0 @@ if (element.matches) {

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

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc