@datadog/browser-core
Advanced tools
Comparing version 4.34.0 to 4.34.1
@@ -9,3 +9,3 @@ "use strict"; | ||
var publicApi = (0, utils_1.assign)({ | ||
version: "4.34.0", | ||
version: "4.34.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 |
import { Observable } from '../tools/observable'; | ||
export declare const enum PageExitReason { | ||
HIDDEN = "visibility_hidden", | ||
UNLOADING = "before_unload" | ||
} | ||
export declare const PageExitReason: { | ||
readonly HIDDEN: "visibility_hidden"; | ||
readonly UNLOADING: "before_unload"; | ||
readonly FROZEN: "page_frozen"; | ||
}; | ||
declare type PageExitReason = typeof PageExitReason[keyof typeof PageExitReason]; | ||
export interface PageExitEvent { | ||
@@ -10,1 +12,3 @@ reason: PageExitReason; | ||
export declare function createPageExitObservable(): Observable<PageExitEvent>; | ||
export declare function isPageExitReason(reason: string | undefined): reason is PageExitReason; | ||
export {}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createPageExitObservable = void 0; | ||
exports.isPageExitReason = exports.createPageExitObservable = exports.PageExitReason = void 0; | ||
var observable_1 = require("../tools/observable"); | ||
var utils_1 = require("../tools/utils"); | ||
var addEventListener_1 = require("./addEventListener"); | ||
exports.PageExitReason = { | ||
HIDDEN: 'visibility_hidden', | ||
UNLOADING: 'before_unload', | ||
FROZEN: 'page_frozen', | ||
}; | ||
function createPageExitObservable() { | ||
var observable = new observable_1.Observable(function () { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
var stopVisibilityChangeListener = (0, addEventListener_1.addEventListener)(document, "visibilitychange" /* VISIBILITY_CHANGE */, function () { | ||
if (document.visibilityState === 'hidden') { | ||
observable.notify({ reason: "visibility_hidden" /* HIDDEN */ }); | ||
var stopListeners = (0, addEventListener_1.addEventListeners)(window, ["visibilitychange" /* VISIBILITY_CHANGE */, "freeze" /* FREEZE */], function (event) { | ||
if (event.type === "visibilitychange" /* VISIBILITY_CHANGE */ && document.visibilityState === 'hidden') { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
observable.notify({ reason: exports.PageExitReason.HIDDEN }); | ||
} | ||
else if (event.type === "freeze" /* FREEZE */) { | ||
/** | ||
* After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api) | ||
* Allow to collect events happening between hidden and frozen state. | ||
*/ | ||
observable.notify({ reason: exports.PageExitReason.FROZEN }); | ||
} | ||
}, { capture: true }).stop; | ||
@@ -23,6 +36,6 @@ /** | ||
var stopBeforeUnloadListener = (0, addEventListener_1.addEventListener)(window, "beforeunload" /* BEFORE_UNLOAD */, function () { | ||
observable.notify({ reason: "before_unload" /* UNLOADING */ }); | ||
observable.notify({ reason: exports.PageExitReason.UNLOADING }); | ||
}).stop; | ||
return function () { | ||
stopVisibilityChangeListener(); | ||
stopListeners(); | ||
stopBeforeUnloadListener(); | ||
@@ -34,2 +47,6 @@ }; | ||
exports.createPageExitObservable = createPageExitObservable; | ||
function isPageExitReason(reason) { | ||
return (0, utils_1.includes)((0, utils_1.objectValues)(exports.PageExitReason), reason); | ||
} | ||
exports.isPageExitReason = isPageExitReason; | ||
//# sourceMappingURL=pageExitObservable.js.map |
@@ -68,3 +68,3 @@ "use strict"; | ||
var clientToken = _a.clientToken, internalAnalyticsSubdomain = _a.internalAnalyticsSubdomain; | ||
var tags = ["sdk_version:".concat("4.34.0"), "api:".concat(api)].concat(configurationTags); | ||
var tags = ["sdk_version:".concat("4.34.1"), "api:".concat(api)].concat(configurationTags); | ||
if (retry) { | ||
@@ -77,3 +77,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.34.0")), | ||
"dd-evp-origin-version=".concat(encodeURIComponent("4.34.1")), | ||
'dd-evp-origin=browser', | ||
@@ -80,0 +80,0 @@ "dd-request-id=".concat((0, utils_1.generateUUID)()), |
@@ -47,3 +47,3 @@ "use strict"; | ||
service: telemetryService, | ||
version: "4.34.0", | ||
version: "4.34.1", | ||
source: 'browser', | ||
@@ -50,0 +50,0 @@ _dd: { |
@@ -27,3 +27,3 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { initFetchObservable, FetchResolveContext, FetchStartContext, FetchContext } from './browser/fetchObservable'; | ||
export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable'; | ||
export { createPageExitObservable, PageExitEvent, PageExitReason, isPageExitReason } from './browser/pageExitObservable'; | ||
export * from './browser/addEventListener'; | ||
@@ -30,0 +30,0 @@ export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable'; |
@@ -18,3 +18,3 @@ "use strict"; | ||
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; | ||
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.isPageExitReason = exports.PageExitReason = exports.createPageExitObservable = exports.initFetchObservable = void 0; | ||
var configuration_1 = require("./domain/configuration"); | ||
@@ -99,2 +99,4 @@ Object.defineProperty(exports, "buildCookieOptions", { enumerable: true, get: function () { return configuration_1.buildCookieOptions; } }); | ||
Object.defineProperty(exports, "createPageExitObservable", { enumerable: true, get: function () { return pageExitObservable_1.createPageExitObservable; } }); | ||
Object.defineProperty(exports, "PageExitReason", { enumerable: true, get: function () { return pageExitObservable_1.PageExitReason; } }); | ||
Object.defineProperty(exports, "isPageExitReason", { enumerable: true, get: function () { return pageExitObservable_1.isPageExitReason; } }); | ||
__exportStar(require("./browser/addEventListener"), exports); | ||
@@ -101,0 +103,0 @@ var consoleObservable_1 = require("./domain/console/consoleObservable"); |
@@ -6,3 +6,3 @@ import { catchUserErrors } from '../tools/catchUserErrors'; | ||
var publicApi = assign({ | ||
version: "4.34.0", | ||
version: "4.34.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 |
import { Observable } from '../tools/observable'; | ||
export declare const enum PageExitReason { | ||
HIDDEN = "visibility_hidden", | ||
UNLOADING = "before_unload" | ||
} | ||
export declare const PageExitReason: { | ||
readonly HIDDEN: "visibility_hidden"; | ||
readonly UNLOADING: "before_unload"; | ||
readonly FROZEN: "page_frozen"; | ||
}; | ||
declare type PageExitReason = typeof PageExitReason[keyof typeof PageExitReason]; | ||
export interface PageExitEvent { | ||
@@ -10,1 +12,3 @@ reason: PageExitReason; | ||
export declare function createPageExitObservable(): Observable<PageExitEvent>; | ||
export declare function isPageExitReason(reason: string | undefined): reason is PageExitReason; | ||
export {}; |
import { Observable } from '../tools/observable'; | ||
import { addEventListener } from './addEventListener'; | ||
import { includes, objectValues } from '../tools/utils'; | ||
import { addEventListener, addEventListeners } from './addEventListener'; | ||
export var PageExitReason = { | ||
HIDDEN: 'visibility_hidden', | ||
UNLOADING: 'before_unload', | ||
FROZEN: 'page_frozen', | ||
}; | ||
export function createPageExitObservable() { | ||
var observable = new Observable(function () { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
var stopVisibilityChangeListener = addEventListener(document, "visibilitychange" /* VISIBILITY_CHANGE */, function () { | ||
if (document.visibilityState === 'hidden') { | ||
observable.notify({ reason: "visibility_hidden" /* HIDDEN */ }); | ||
var stopListeners = addEventListeners(window, ["visibilitychange" /* VISIBILITY_CHANGE */, "freeze" /* FREEZE */], function (event) { | ||
if (event.type === "visibilitychange" /* VISIBILITY_CHANGE */ && document.visibilityState === 'hidden') { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
observable.notify({ reason: PageExitReason.HIDDEN }); | ||
} | ||
else if (event.type === "freeze" /* FREEZE */) { | ||
/** | ||
* After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api) | ||
* Allow to collect events happening between hidden and frozen state. | ||
*/ | ||
observable.notify({ reason: PageExitReason.FROZEN }); | ||
} | ||
}, { capture: true }).stop; | ||
@@ -20,6 +33,6 @@ /** | ||
var stopBeforeUnloadListener = addEventListener(window, "beforeunload" /* BEFORE_UNLOAD */, function () { | ||
observable.notify({ reason: "before_unload" /* UNLOADING */ }); | ||
observable.notify({ reason: PageExitReason.UNLOADING }); | ||
}).stop; | ||
return function () { | ||
stopVisibilityChangeListener(); | ||
stopListeners(); | ||
stopBeforeUnloadListener(); | ||
@@ -30,2 +43,5 @@ }; | ||
} | ||
export function isPageExitReason(reason) { | ||
return includes(objectValues(PageExitReason), reason); | ||
} | ||
//# sourceMappingURL=pageExitObservable.js.map |
@@ -64,3 +64,3 @@ import { timeStampNow } from '../../tools/timeUtils'; | ||
var clientToken = _a.clientToken, internalAnalyticsSubdomain = _a.internalAnalyticsSubdomain; | ||
var tags = ["sdk_version:".concat("4.34.0"), "api:".concat(api)].concat(configurationTags); | ||
var tags = ["sdk_version:".concat("4.34.1"), "api:".concat(api)].concat(configurationTags); | ||
if (retry) { | ||
@@ -73,3 +73,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.34.0")), | ||
"dd-evp-origin-version=".concat(encodeURIComponent("4.34.1")), | ||
'dd-evp-origin=browser', | ||
@@ -76,0 +76,0 @@ "dd-request-id=".concat(generateUUID()), |
@@ -44,3 +44,3 @@ import { ConsoleApiName } from '../../tools/display'; | ||
service: telemetryService, | ||
version: "4.34.0", | ||
version: "4.34.1", | ||
source: 'browser', | ||
@@ -47,0 +47,0 @@ _dd: { |
@@ -27,3 +27,3 @@ export { Configuration, InitConfiguration, buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, EndpointBuilder, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { initFetchObservable, FetchResolveContext, FetchStartContext, FetchContext } from './browser/fetchObservable'; | ||
export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable'; | ||
export { createPageExitObservable, PageExitEvent, PageExitReason, isPageExitReason } from './browser/pageExitObservable'; | ||
export * from './browser/addEventListener'; | ||
@@ -30,0 +30,0 @@ export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable'; |
@@ -29,3 +29,3 @@ export { buildCookieOptions, validateAndBuildConfiguration, DefaultPrivacyLevel, isExperimentalFeatureEnabled, updateExperimentalFeatures, resetExperimentalFeatures, serializeConfiguration, } from './domain/configuration'; | ||
export { initFetchObservable } from './browser/fetchObservable'; | ||
export { createPageExitObservable } from './browser/pageExitObservable'; | ||
export { createPageExitObservable, PageExitReason, isPageExitReason } from './browser/pageExitObservable'; | ||
export * from './browser/addEventListener'; | ||
@@ -32,0 +32,0 @@ export { initConsoleObservable } from './domain/console/consoleObservable'; |
{ | ||
"name": "@datadog/browser-core", | ||
"version": "4.34.0", | ||
"version": "4.34.1", | ||
"license": "Apache-2.0", | ||
@@ -24,3 +24,3 @@ "main": "cjs/index.js", | ||
}, | ||
"gitHead": "e592cccb3f008ad1bffb649b586f6ca802c46558" | ||
"gitHead": "963c6de2a0ecd461f6926a873bf905e3185808e2" | ||
} |
@@ -32,2 +32,8 @@ import { createNewEvent, restorePageVisibility, setPageVisibility } from '../../test/specHelper' | ||
it('notifies when the page becomes frozen', () => { | ||
window.dispatchEvent(createNewEvent('freeze')) | ||
expect(onExitSpy).toHaveBeenCalledOnceWith({ reason: PageExitReason.FROZEN }) | ||
}) | ||
it('notifies multiple times', () => { | ||
@@ -34,0 +40,0 @@ window.dispatchEvent(createNewEvent('beforeunload')) |
import { Observable } from '../tools/observable' | ||
import { addEventListener, DOM_EVENT } from './addEventListener' | ||
import { includes, objectValues } from '../tools/utils' | ||
import { addEventListener, addEventListeners, DOM_EVENT } from './addEventListener' | ||
export const enum PageExitReason { | ||
HIDDEN = 'visibility_hidden', | ||
UNLOADING = 'before_unload', | ||
} | ||
export const PageExitReason = { | ||
HIDDEN: 'visibility_hidden', | ||
UNLOADING: 'before_unload', | ||
FROZEN: 'page_frozen', | ||
} as const | ||
type PageExitReason = typeof PageExitReason[keyof typeof PageExitReason] | ||
export interface PageExitEvent { | ||
@@ -15,12 +19,18 @@ reason: PageExitReason | ||
const observable = new Observable<PageExitEvent>(() => { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
const { stop: stopVisibilityChangeListener } = addEventListener( | ||
document, | ||
DOM_EVENT.VISIBILITY_CHANGE, | ||
() => { | ||
if (document.visibilityState === 'hidden') { | ||
const { stop: stopListeners } = addEventListeners( | ||
window, | ||
[DOM_EVENT.VISIBILITY_CHANGE, DOM_EVENT.FREEZE], | ||
(event) => { | ||
if (event.type === DOM_EVENT.VISIBILITY_CHANGE && document.visibilityState === 'hidden') { | ||
/** | ||
* Only event that guarantee to fire on mobile devices when the page transitions to background state | ||
* (e.g. when user switches to a different application, goes to homescreen, etc), or is being unloaded. | ||
*/ | ||
observable.notify({ reason: PageExitReason.HIDDEN }) | ||
} else if (event.type === DOM_EVENT.FREEZE) { | ||
/** | ||
* After transitioning in background a tab can be freezed to preserve resources. (cf: https://developer.chrome.com/blog/page-lifecycle-api) | ||
* Allow to collect events happening between hidden and frozen state. | ||
*/ | ||
observable.notify({ reason: PageExitReason.FROZEN }) | ||
} | ||
@@ -41,3 +51,3 @@ }, | ||
return () => { | ||
stopVisibilityChangeListener() | ||
stopListeners() | ||
stopBeforeUnloadListener() | ||
@@ -49,1 +59,5 @@ } | ||
} | ||
export function isPageExitReason(reason: string | undefined): reason is PageExitReason { | ||
return includes(objectValues(PageExitReason), reason) | ||
} |
@@ -80,3 +80,3 @@ export { | ||
export { initFetchObservable, FetchResolveContext, FetchStartContext, FetchContext } from './browser/fetchObservable' | ||
export { createPageExitObservable, PageExitEvent, PageExitReason } from './browser/pageExitObservable' | ||
export { createPageExitObservable, PageExitEvent, PageExitReason, isPageExitReason } from './browser/pageExitObservable' | ||
export * from './browser/addEventListener' | ||
@@ -83,0 +83,0 @@ export { initConsoleObservable, ConsoleLog } from './domain/console/consoleObservable' |
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
1035639
20692