@pratham.raval/browser-core 6.22.3 → 6.22.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cjs/boot/displayAlreadyInitializedError.d.ts +1 -1
- package/cjs/boot/init.d.ts +1 -1
- package/cjs/browser/cookie.d.ts +10 -0
- package/cjs/browser/cookie.js +13 -0
- package/cjs/browser/cookie.js.map +1 -1
- package/cjs/domain/configuration/configuration.js +4 -4
- package/cjs/domain/configuration/configuration.js.map +1 -1
- package/cjs/domain/configuration/endpointBuilder.js +16 -24
- package/cjs/domain/configuration/endpointBuilder.js.map +1 -1
- package/cjs/domain/configuration/transportConfiguration.js +5 -15
- package/cjs/domain/configuration/transportConfiguration.js.map +1 -1
- package/cjs/domain/intakeSites.d.ts +1 -7
- package/cjs/domain/intakeSites.js +2 -8
- package/cjs/domain/intakeSites.js.map +1 -1
- package/cjs/domain/session/oldCookiesMigration.d.ts +1 -1
- package/cjs/domain/session/oldCookiesMigration.js +1 -1
- package/cjs/domain/session/sessionManager.d.ts +1 -0
- package/cjs/domain/session/sessionManager.js +24 -6
- package/cjs/domain/session/sessionManager.js.map +1 -1
- package/cjs/domain/session/sessionState.js +2 -8
- package/cjs/domain/session/sessionState.js.map +1 -1
- package/cjs/domain/session/sessionStore.d.ts +1 -1
- package/cjs/domain/session/sessionStore.js +5 -1
- package/cjs/domain/session/sessionStore.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +5 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +52 -3
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +2 -0
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +1 -0
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +1 -1
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +1 -1
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +6 -6
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +6 -6
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
- package/cjs/domain/tags.js +6 -5
- package/cjs/domain/tags.js.map +1 -1
- package/cjs/domain/telemetry/telemetry.js +4 -5
- package/cjs/domain/telemetry/telemetry.js.map +1 -1
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +3 -2
- package/cjs/index.js.map +1 -1
- package/cjs/tools/display.js +1 -1
- package/cjs/tools/display.js.map +1 -1
- package/cjs/tools/experimentalFeatures.d.ts +2 -1
- package/cjs/tools/experimentalFeatures.js +1 -0
- package/cjs/tools/experimentalFeatures.js.map +1 -1
- package/cjs/tools/utils/browserDetection.d.ts +2 -0
- package/cjs/tools/utils/browserDetection.js +138 -0
- package/cjs/tools/utils/browserDetection.js.map +1 -1
- package/cjs/tools/utils/stringUtils.d.ts +15 -0
- package/cjs/tools/utils/stringUtils.js +36 -0
- package/cjs/tools/utils/stringUtils.js.map +1 -1
- package/cjs/transport/httpRequest.d.ts +1 -0
- package/cjs/transport/httpRequest.js +26 -4
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/index.d.ts +1 -1
- package/cjs/transport/index.js +2 -1
- package/cjs/transport/index.js.map +1 -1
- package/esm/boot/displayAlreadyInitializedError.d.ts +1 -1
- package/esm/boot/init.d.ts +1 -1
- package/esm/browser/cookie.d.ts +10 -0
- package/esm/browser/cookie.js +13 -1
- package/esm/browser/cookie.js.map +1 -1
- package/esm/domain/configuration/configuration.js +5 -5
- package/esm/domain/configuration/configuration.js.map +1 -1
- package/esm/domain/configuration/endpointBuilder.js +16 -24
- package/esm/domain/configuration/endpointBuilder.js.map +1 -1
- package/esm/domain/configuration/transportConfiguration.js +6 -16
- package/esm/domain/configuration/transportConfiguration.js.map +1 -1
- package/esm/domain/intakeSites.d.ts +1 -7
- package/esm/domain/intakeSites.js +1 -7
- package/esm/domain/intakeSites.js.map +1 -1
- package/esm/domain/session/oldCookiesMigration.d.ts +1 -1
- package/esm/domain/session/oldCookiesMigration.js +1 -1
- package/esm/domain/session/sessionManager.d.ts +1 -0
- package/esm/domain/session/sessionManager.js +25 -7
- package/esm/domain/session/sessionManager.js.map +1 -1
- package/esm/domain/session/sessionState.js +2 -8
- package/esm/domain/session/sessionState.js.map +1 -1
- package/esm/domain/session/sessionStore.d.ts +1 -1
- package/esm/domain/session/sessionStore.js +5 -1
- package/esm/domain/session/sessionStore.js.map +1 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +5 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.js +53 -4
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +2 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +1 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +1 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +1 -1
- package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +6 -6
- package/esm/domain/synthetics/syntheticsWorkerValues.js +6 -6
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
- package/esm/domain/tags.js +6 -5
- package/esm/domain/tags.js.map +1 -1
- package/esm/domain/telemetry/telemetry.js +4 -5
- package/esm/domain/telemetry/telemetry.js.map +1 -1
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/tools/display.js +1 -1
- package/esm/tools/display.js.map +1 -1
- package/esm/tools/experimentalFeatures.d.ts +2 -1
- package/esm/tools/experimentalFeatures.js +1 -0
- package/esm/tools/experimentalFeatures.js.map +1 -1
- package/esm/tools/utils/browserDetection.d.ts +2 -0
- package/esm/tools/utils/browserDetection.js +136 -0
- package/esm/tools/utils/browserDetection.js.map +1 -1
- package/esm/tools/utils/stringUtils.d.ts +15 -0
- package/esm/tools/utils/stringUtils.js +35 -0
- package/esm/tools/utils/stringUtils.js.map +1 -1
- package/esm/transport/httpRequest.d.ts +1 -0
- package/esm/transport/httpRequest.js +25 -4
- package/esm/transport/httpRequest.js.map +1 -1
- package/esm/transport/index.d.ts +1 -1
- package/esm/transport/index.js +1 -1
- package/esm/transport/index.js.map +1 -1
- package/package.json +4 -6
- package/src/boot/displayAlreadyInitializedError.ts +1 -1
- package/src/boot/init.ts +1 -1
- package/src/browser/cookie.ts +19 -1
- package/src/domain/configuration/configuration.ts +4 -4
- package/src/domain/configuration/endpointBuilder.ts +17 -27
- package/src/domain/configuration/transportConfiguration.ts +6 -18
- package/src/domain/intakeSites.ts +2 -17
- package/src/domain/session/oldCookiesMigration.ts +1 -1
- package/src/domain/session/sessionManager.ts +28 -7
- package/src/domain/session/sessionState.ts +2 -7
- package/src/domain/session/sessionStore.ts +6 -2
- package/src/domain/session/storeStrategies/sessionInCookie.ts +66 -4
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +1 -1
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +1 -1
- package/src/domain/synthetics/syntheticsWorkerValues.ts +9 -9
- package/src/domain/tags.ts +6 -6
- package/src/domain/telemetry/telemetry.ts +5 -5
- package/src/domain/telemetry/telemetryEvent.types.ts +1 -1
- package/src/index.ts +1 -0
- package/src/tools/display.ts +1 -1
- package/src/tools/experimentalFeatures.ts +1 -0
- package/src/tools/utils/browserDetection.ts +146 -0
- package/src/tools/utils/stringUtils.ts +34 -0
- package/src/transport/httpRequest.ts +31 -5
- package/src/transport/index.ts +1 -1
package/esm/tools/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/tools/display.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACN,CAAA;AAYV;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAA;AAEpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAa,CAAA;AACnD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IAC3C,sBAAsB,CAAC,IAAsB,CAAC,GAAG,aAAa,CAAC,IAAsB,CAAC,CAAA;AACxF,CAAC,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/tools/display.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACN,CAAA;AAYV;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAA;AAEpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAa,CAAA;AACnD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;IAC3C,sBAAsB,CAAC,IAAsB,CAAC,GAAG,aAAa,CAAC,IAAsB,CAAC,CAAA;AACxF,CAAC,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,uBAAuB,CAAA;AAEtC,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/D,GAAG,EAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IAC3D,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IAC7D,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IAC7D,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;CAChE,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,4BAA4B,CAAA;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,WAAW,+CAA+C,CAAA;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAA"}
|
|
@@ -11,7 +11,8 @@ export declare enum ExperimentalFeature {
|
|
|
11
11
|
TRACK_INTAKE_REQUESTS = "track_intake_requests",
|
|
12
12
|
USE_TREE_WALKER_FOR_ACTION_NAME = "use_tree_walker_for_action_name",
|
|
13
13
|
FEATURE_OPERATION_VITAL = "feature_operation_vital",
|
|
14
|
-
SHORT_SESSION_INVESTIGATION = "short_session_investigation"
|
|
14
|
+
SHORT_SESSION_INVESTIGATION = "short_session_investigation",
|
|
15
|
+
ENCODE_COOKIE_OPTIONS = "encode_cookie_options"
|
|
15
16
|
}
|
|
16
17
|
export declare function initFeatureFlags(enableExperimentalFeatures: string[] | undefined): void;
|
|
17
18
|
export declare function addExperimentalFeatures(enabledFeatures: ExperimentalFeature[]): void;
|
|
@@ -17,6 +17,7 @@ export var ExperimentalFeature;
|
|
|
17
17
|
ExperimentalFeature["USE_TREE_WALKER_FOR_ACTION_NAME"] = "use_tree_walker_for_action_name";
|
|
18
18
|
ExperimentalFeature["FEATURE_OPERATION_VITAL"] = "feature_operation_vital";
|
|
19
19
|
ExperimentalFeature["SHORT_SESSION_INVESTIGATION"] = "short_session_investigation";
|
|
20
|
+
ExperimentalFeature["ENCODE_COOKIE_OPTIONS"] = "encode_cookie_options";
|
|
20
21
|
})(ExperimentalFeature || (ExperimentalFeature = {}));
|
|
21
22
|
const enabledExperimentalFeatures = new Set();
|
|
22
23
|
export function initFeatureFlags(enableExperimentalFeatures) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experimentalFeatures.js","sourceRoot":"","sources":["../../src/tools/experimentalFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oGAAoG;AACpG,qCAAqC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,gDAAgD;AAChD,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"experimentalFeatures.js","sourceRoot":"","sources":["../../src/tools/experimentalFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oGAAoG;AACpG,qCAAqC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,gDAAgD;AAChD,MAAM,CAAN,IAAY,mBAMX;AAND,WAAY,mBAAmB;IAC7B,sEAA+C,CAAA;IAC/C,0FAAmE,CAAA;IACnE,0EAAmD,CAAA;IACnD,kFAA2D,CAAA;IAC3D,sEAA+C,CAAA;AACjD,CAAC,EANW,mBAAmB,KAAnB,mBAAmB,QAM9B;AAED,MAAM,2BAA2B,GAA6B,IAAI,GAAG,EAAE,CAAA;AAEvE,MAAM,UAAU,gBAAgB,CAAC,0BAAgD;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC9C,uBAAuB,CACrB,0BAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,EAA+B,EAAE,CACtE,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAC1C,CACF,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,eAAsC;IAC5E,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,WAAgC;IAC3E,OAAO,2BAA2B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,2BAA2B,CAAC,KAAK,EAAE,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,2BAA2B,CAAA;AACpC,CAAC"}
|
|
@@ -6,3 +6,5 @@ export declare const enum Browser {
|
|
|
6
6
|
export declare function isChromium(): boolean;
|
|
7
7
|
export declare function isSafari(): boolean;
|
|
8
8
|
export declare function detectBrowser(browserWindow?: Window): Browser;
|
|
9
|
+
export declare function getDetailedBrowserName(browserWindow?: Window): string;
|
|
10
|
+
export declare function detectDetailedBrowserName(browserWindow?: Window): string;
|
|
@@ -1,3 +1,123 @@
|
|
|
1
|
+
// // Exported only for tests
|
|
2
|
+
// export const enum Browser {
|
|
3
|
+
// CHROMIUM,
|
|
4
|
+
// SAFARI,
|
|
5
|
+
// OTHER,
|
|
6
|
+
// }
|
|
7
|
+
//
|
|
8
|
+
// export function isChromium() {
|
|
9
|
+
// return detectBrowserCached() === Browser.CHROMIUM
|
|
10
|
+
// }
|
|
11
|
+
//
|
|
12
|
+
// export function isSafari() {
|
|
13
|
+
// return detectBrowserCached() === Browser.SAFARI
|
|
14
|
+
// }
|
|
15
|
+
//
|
|
16
|
+
// let browserCache: Browser | undefined
|
|
17
|
+
// function detectBrowserCached() {
|
|
18
|
+
// return browserCache ?? (browserCache = detectBrowser())
|
|
19
|
+
// }
|
|
20
|
+
//
|
|
21
|
+
// // Exported only for tests
|
|
22
|
+
// export function detectBrowser(browserWindow: Window = window) {
|
|
23
|
+
// const userAgent = browserWindow.navigator.userAgent
|
|
24
|
+
// if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
25
|
+
// return Browser.CHROMIUM
|
|
26
|
+
// }
|
|
27
|
+
//
|
|
28
|
+
// if (
|
|
29
|
+
// // navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
30
|
+
// // "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
31
|
+
// // useragent test as a semi-working fallback.
|
|
32
|
+
// browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
33
|
+
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
34
|
+
// ) {
|
|
35
|
+
// return Browser.SAFARI
|
|
36
|
+
// }
|
|
37
|
+
//
|
|
38
|
+
// return Browser.OTHER
|
|
39
|
+
// }
|
|
40
|
+
//
|
|
41
|
+
// /**
|
|
42
|
+
// * Get detailed browser name for X-Browser-Name header
|
|
43
|
+
// * Returns one of: Chrome, Firefox, Edge, Opera, Safari, other
|
|
44
|
+
// */
|
|
45
|
+
// let detailedBrowserNameCache: string | undefined
|
|
46
|
+
// export function getDetailedBrowserName(browserWindow: Window = window): string {
|
|
47
|
+
// return detailedBrowserNameCache ?? (detailedBrowserNameCache = detectDetailedBrowserName(browserWindow))
|
|
48
|
+
// }
|
|
49
|
+
//
|
|
50
|
+
// // Exported only for tests
|
|
51
|
+
// export function detectDetailedBrowserName(browserWindow: Window = window): string {
|
|
52
|
+
// // Try Client Hints API first for more accurate detection
|
|
53
|
+
// const clientHintsBrowser = parseClientHints(browserWindow)
|
|
54
|
+
// if (clientHintsBrowser) {
|
|
55
|
+
// return clientHintsBrowser
|
|
56
|
+
// }
|
|
57
|
+
//
|
|
58
|
+
// // Fallback to user agent parsing
|
|
59
|
+
// return parseUserAgent(browserWindow)
|
|
60
|
+
// }
|
|
61
|
+
//
|
|
62
|
+
// function parseClientHints(browserWindow: Window = window): string {
|
|
63
|
+
//
|
|
64
|
+
// // fallback to userAgent
|
|
65
|
+
// const ua = browserWindow.navigator.userAgent
|
|
66
|
+
//
|
|
67
|
+
// if (/edg/i.test(ua)) {
|
|
68
|
+
// return 'Edge';
|
|
69
|
+
// }
|
|
70
|
+
// if (/opr|opera/i.test(ua)) {return 'Opera'}
|
|
71
|
+
// if (/chrome/i.test(ua)) {return 'Chrome'}
|
|
72
|
+
// if (/safari/i.test(ua)) {return 'Safari'}
|
|
73
|
+
// if (/firefox/i.test(ua)) {return 'Firefox'}
|
|
74
|
+
//
|
|
75
|
+
// return 'other'
|
|
76
|
+
// }
|
|
77
|
+
//
|
|
78
|
+
// function parseUserAgent(browserWindow: Window = window): string {
|
|
79
|
+
// const userAgent = browserWindow.navigator.userAgent
|
|
80
|
+
//
|
|
81
|
+
// // Firefox detection
|
|
82
|
+
// if (/Firefox\//i.test(userAgent)) {
|
|
83
|
+
// return 'Firefox'
|
|
84
|
+
// }
|
|
85
|
+
//
|
|
86
|
+
// // Safari detection (must come before Chrome check)
|
|
87
|
+
// if (
|
|
88
|
+
// (browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
89
|
+
// (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent)))
|
|
90
|
+
// ) {
|
|
91
|
+
// return 'Safari'
|
|
92
|
+
// }
|
|
93
|
+
//
|
|
94
|
+
// // Chrome-based browsers detection
|
|
95
|
+
// if (/Chrome\//i.test(userAgent) || (browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
96
|
+
// // Edge detection
|
|
97
|
+
// if (/Edg\//i.test(userAgent)) {
|
|
98
|
+
// return 'Edge'
|
|
99
|
+
// }
|
|
100
|
+
//
|
|
101
|
+
// // Opera detection
|
|
102
|
+
// if (/OPR\//i.test(userAgent) || /Opera\//i.test(userAgent)) {
|
|
103
|
+
// return 'Opera'
|
|
104
|
+
// }
|
|
105
|
+
//
|
|
106
|
+
// // Brave detection (fallback - Brave shows as Chrome in user agent)
|
|
107
|
+
// // Note: This is less reliable than Client Hints, but better than nothing
|
|
108
|
+
// if (/Brave\//i.test(userAgent)) {
|
|
109
|
+
// return 'other'
|
|
110
|
+
// }
|
|
111
|
+
//
|
|
112
|
+
// // Default Chrome detection
|
|
113
|
+
// return 'Chrome'
|
|
114
|
+
// }
|
|
115
|
+
//
|
|
116
|
+
// // All other browsers
|
|
117
|
+
// return 'other'
|
|
118
|
+
// }
|
|
119
|
+
// eslint-disable-next-line import/no-extraneous-dependencies, local-rules/disallow-side-effects, local-rules/enforce-prod-deps-imports
|
|
120
|
+
import { UAParser } from 'ua-parser-js';
|
|
1
121
|
export function isChromium() {
|
|
2
122
|
return detectBrowserCached() === 0 /* Browser.CHROMIUM */;
|
|
3
123
|
}
|
|
@@ -25,4 +145,20 @@ export function detectBrowser(browserWindow = window) {
|
|
|
25
145
|
}
|
|
26
146
|
return 2 /* Browser.OTHER */;
|
|
27
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Get detailed browser name for X-Browser-Name header
|
|
150
|
+
* Uses ua-parser-js for accurate browser detection
|
|
151
|
+
*/
|
|
152
|
+
let detailedBrowserNameCache;
|
|
153
|
+
export function getDetailedBrowserName(browserWindow = window) {
|
|
154
|
+
return (detailedBrowserNameCache !== null && detailedBrowserNameCache !== void 0 ? detailedBrowserNameCache : (detailedBrowserNameCache = detectDetailedBrowserName(browserWindow)));
|
|
155
|
+
}
|
|
156
|
+
export function detectDetailedBrowserName(browserWindow = window) {
|
|
157
|
+
const ua = browserWindow.navigator.userAgent;
|
|
158
|
+
const parser = new UAParser(ua);
|
|
159
|
+
const result = parser.getResult();
|
|
160
|
+
// Return the browser name from ua-parser-js
|
|
161
|
+
// If browser name is undefined or empty, return 'Unknown Browser'
|
|
162
|
+
return result.browser.name || 'Unknown Browser';
|
|
163
|
+
}
|
|
28
164
|
//# sourceMappingURL=browserDetection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
* from https://gist.github.com/jed/982883
|
|
4
4
|
*/
|
|
5
5
|
export declare function generateUUID(placeholder?: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the value of the key with the given name
|
|
8
|
+
* If there are multiple values with the same key, returns the first one
|
|
9
|
+
*/
|
|
6
10
|
export declare function findCommaSeparatedValue(rawString: string, name: string): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Returns a map of all the values with the given key
|
|
13
|
+
* If there are multiple values with the same key, returns all the values
|
|
14
|
+
*/
|
|
15
|
+
export declare function findAllCommaSeparatedValues(rawString: string): Map<string, string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Returns a map of the values with the given key
|
|
18
|
+
* ⚠️ If there are multiple values with the same key, returns the LAST one
|
|
19
|
+
*
|
|
20
|
+
* @deprecated use `findAllCommaSeparatedValues()` instead
|
|
21
|
+
*/
|
|
7
22
|
export declare function findCommaSeparatedValues(rawString: string): Map<string, string>;
|
|
8
23
|
export declare function safeTruncate(candidate: string, length: number, suffix?: string): string;
|
|
@@ -9,6 +9,10 @@ export function generateUUID(placeholder) {
|
|
|
9
9
|
: `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateUUID);
|
|
10
10
|
}
|
|
11
11
|
const COMMA_SEPARATED_KEY_VALUE = /([\w-]+)\s*=\s*([^;]+)/g;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the value of the key with the given name
|
|
14
|
+
* If there are multiple values with the same key, returns the first one
|
|
15
|
+
*/
|
|
12
16
|
export function findCommaSeparatedValue(rawString, name) {
|
|
13
17
|
COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;
|
|
14
18
|
while (true) {
|
|
@@ -23,6 +27,37 @@ export function findCommaSeparatedValue(rawString, name) {
|
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns a map of all the values with the given key
|
|
32
|
+
* If there are multiple values with the same key, returns all the values
|
|
33
|
+
*/
|
|
34
|
+
export function findAllCommaSeparatedValues(rawString) {
|
|
35
|
+
const result = new Map();
|
|
36
|
+
COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;
|
|
37
|
+
while (true) {
|
|
38
|
+
const match = COMMA_SEPARATED_KEY_VALUE.exec(rawString);
|
|
39
|
+
if (match) {
|
|
40
|
+
const key = match[1];
|
|
41
|
+
const value = match[2];
|
|
42
|
+
if (result.has(key)) {
|
|
43
|
+
result.get(key).push(value);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
result.set(key, [value]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns a map of the values with the given key
|
|
57
|
+
* ⚠️ If there are multiple values with the same key, returns the LAST one
|
|
58
|
+
*
|
|
59
|
+
* @deprecated use `findAllCommaSeparatedValues()` instead
|
|
60
|
+
*/
|
|
26
61
|
export function findCommaSeparatedValues(rawString) {
|
|
27
62
|
const result = new Map();
|
|
28
63
|
COMMA_SEPARATED_KEY_VALUE.lastIndex = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringUtils.js","sourceRoot":"","sources":["../../../src/tools/utils/stringUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAoB;IAC/C,OAAO,WAAW;QAChB,CAAC,CAAC,uCAAuC;YACvC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,yBAAyB,GAAG,yBAAyB,CAAA;AAE3D,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,IAAY;IACrE,yBAAyB,CAAC,SAAS,GAAG,CAAC,CAAA;IACvC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,yBAAyB,CAAC,SAAS,GAAG,CAAC,CAAA;IACvC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,MAAc,EAAE,MAAM,GAAG,EAAE;IACzE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjD,MAAM,uBAAuB,GAAG,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAA;IACxE,MAAM,eAAe,GAAG,uBAAuB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAErE,IAAI,SAAS,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;QACxC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,MAAM,EAAE,CAAA;AAC1D,CAAC"}
|
|
1
|
+
{"version":3,"file":"stringUtils.js","sourceRoot":"","sources":["../../../src/tools/utils/stringUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ export interface RetryInfo {
|
|
|
46
46
|
count: number;
|
|
47
47
|
lastFailureStatus: number;
|
|
48
48
|
}
|
|
49
|
+
export declare function setCurrentSite(site: string | undefined): void;
|
|
49
50
|
export declare function createHttpRequest<Body extends Payload = Payload>(endpointBuilders: EndpointBuilder[], bytesLimit: number, reportError: (error: RawError) => void): HttpRequest<Body>;
|
|
50
51
|
export declare function fetchKeepAliveStrategy(endpointBuilder: EndpointBuilder, bytesLimit: number, payload: Payload, onResponse?: (r: HttpResponse) => void): void;
|
|
51
52
|
export declare function fetchStrategy(endpointBuilder: EndpointBuilder, payload: Payload, onResponse?: (r: HttpResponse) => void): void;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { monitor, monitorError } from '../tools/monitor';
|
|
2
2
|
import { Observable } from '../tools/observable';
|
|
3
|
+
import { getDetailedBrowserName } from '../tools/utils/browserDetection';
|
|
3
4
|
import { newRetryState, sendWithRetryStrategy } from './sendWithRetryStrategy';
|
|
5
|
+
let currentSite;
|
|
6
|
+
export function setCurrentSite(site) {
|
|
7
|
+
currentSite = site;
|
|
8
|
+
}
|
|
4
9
|
export function createHttpRequest(endpointBuilders, bytesLimit, reportError) {
|
|
5
10
|
const observable = new Observable();
|
|
6
11
|
const retryState = newRetryState();
|
|
@@ -49,9 +54,15 @@ export function fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onR
|
|
|
49
54
|
const canUseKeepAlive = isKeepAliveSupported() && payload.bytesCount < bytesLimit;
|
|
50
55
|
if (canUseKeepAlive) {
|
|
51
56
|
const fetchUrl = endpointBuilder.build('fetch-keepalive', payload);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
.
|
|
57
|
+
const headers = buildRequestHeaders(fetchUrl);
|
|
58
|
+
fetch(fetchUrl, { method: 'POST', body: payload.data, keepalive: true, mode: 'cors', headers })
|
|
59
|
+
.then(monitor((response) => {
|
|
60
|
+
onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: response.status, type: response.type });
|
|
61
|
+
}))
|
|
62
|
+
.catch(monitor((error) => {
|
|
63
|
+
fetchStrategy(endpointBuilder, payload, onResponse);
|
|
64
|
+
onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: 0 });
|
|
65
|
+
}));
|
|
55
66
|
}
|
|
56
67
|
else {
|
|
57
68
|
fetchStrategy(endpointBuilder, payload, onResponse);
|
|
@@ -59,7 +70,8 @@ export function fetchKeepAliveStrategy(endpointBuilder, bytesLimit, payload, onR
|
|
|
59
70
|
}
|
|
60
71
|
export function fetchStrategy(endpointBuilder, payload, onResponse) {
|
|
61
72
|
const fetchUrl = endpointBuilder.build('fetch', payload);
|
|
62
|
-
|
|
73
|
+
const headers = buildRequestHeaders(fetchUrl);
|
|
74
|
+
fetch(fetchUrl, { method: 'POST', body: payload.data, mode: 'cors', headers })
|
|
63
75
|
.then(monitor((response) => onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: response.status, type: response.type })))
|
|
64
76
|
.catch(monitor(() => onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: 0 })));
|
|
65
77
|
}
|
|
@@ -72,4 +84,13 @@ function isKeepAliveSupported() {
|
|
|
72
84
|
return false;
|
|
73
85
|
}
|
|
74
86
|
}
|
|
87
|
+
function buildRequestHeaders(url) {
|
|
88
|
+
const headers = {};
|
|
89
|
+
// dynamically match your RUM SDK endpoint host
|
|
90
|
+
// "site" comes from init() call, so this automatically adjusts
|
|
91
|
+
if (currentSite && url) {
|
|
92
|
+
headers['X-Browser-Name'] = getDetailedBrowserName();
|
|
93
|
+
}
|
|
94
|
+
return headers;
|
|
95
|
+
}
|
|
75
96
|
//# sourceMappingURL=httpRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpRequest.js","sourceRoot":"","sources":["../../src/transport/httpRequest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AA2D9E,MAAM,UAAU,iBAAiB,CAC/B,gBAAmC,EACnC,UAAkB,EAClB,WAAsC;IAEtC,MAAM,UAAU,GAAG,IAAI,UAAU,EAA0B,CAAA;IAC3D,MAAM,UAAU,GAAG,aAAa,EAAQ,CAAA;IAExC,OAAO;QACL,UAAU;QACV,IAAI,EAAE,CAAC,OAAa,EAAE,EAAE;YACtB,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,qBAAqB,CACnB,OAAO,EACP,UAAU,EACV,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,EACjG,eAAe,CAAC,SAAS,EACzB,WAAW,EACX,UAAU,CACX,CAAA;YACH,CAAC;QACH,CAAC;QACD;;;WAGG;QACH,UAAU,EAAE,CAAC,OAAa,EAAE,EAAE;YAC5B,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,kBAAkB,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,eAAgC,EAAE,UAAkB,EAAE,OAAgB;IAChG,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9E,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YAE9D,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAM;YACR,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iBAAiB,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED,IAAI,sBAAsB,GAAG,KAAK,CAAA;AAElC,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,IAAI,CAAA;QAC7B,YAAY,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,eAAgC,EAChC,UAAkB,EAClB,OAAgB,EAChB,UAAsC;IAEtC,MAAM,eAAe,GAAG,oBAAoB,EAAE,IAAI,OAAO,CAAC,UAAU,GAAG,UAAU,CAAA;IAEjF,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"httpRequest.js","sourceRoot":"","sources":["../../src/transport/httpRequest.ts"],"names":[],"mappings":"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"}
|
package/esm/transport/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { BandwidthStats, HttpRequest, HttpRequestEvent, Payload, RetryInfo } from './httpRequest';
|
|
2
|
-
export { createHttpRequest } from './httpRequest';
|
|
2
|
+
export { createHttpRequest, setCurrentSite } from './httpRequest';
|
|
3
3
|
export type { BrowserWindowWithEventBridge, DatadogEventBridge } from './eventBridge';
|
|
4
4
|
export { canUseEventBridge, bridgeSupports, getEventBridge, BridgeCapability } from './eventBridge';
|
|
5
5
|
export { createBatch } from './batch';
|
package/esm/transport/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createHttpRequest } from './httpRequest';
|
|
1
|
+
export { createHttpRequest, setCurrentSite } from './httpRequest';
|
|
2
2
|
export { canUseEventBridge, bridgeSupports, getEventBridge } from './eventBridge';
|
|
3
3
|
export { createBatch } from './batch';
|
|
4
4
|
export { createFlushController } from './flushController';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,eAAe,CAAA;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pratham.raval/browser-core",
|
|
3
|
-
"version": "6.22.
|
|
3
|
+
"version": "6.22.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -13,11 +13,6 @@
|
|
|
13
13
|
"build:esm": "rm -rf esm && tsc -p tsconfig.esm.json && yarn replace-build-env esm",
|
|
14
14
|
"replace-build-env": "node ../../scripts/build/replace-build-env.ts"
|
|
15
15
|
},
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "https://github.com/DataDog/browser-sdk.git",
|
|
19
|
-
"directory": "packages/core"
|
|
20
|
-
},
|
|
21
16
|
"devDependencies": {
|
|
22
17
|
"@types/pako": "2.0.4",
|
|
23
18
|
"pako": "2.1.0"
|
|
@@ -27,5 +22,8 @@
|
|
|
27
22
|
},
|
|
28
23
|
"publishConfig": {
|
|
29
24
|
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"ua-parser-js": "2.0.8"
|
|
30
28
|
}
|
|
31
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { InitConfiguration } from '../domain/configuration'
|
|
2
2
|
import { display } from '../tools/display'
|
|
3
3
|
|
|
4
|
-
export function displayAlreadyInitializedError(sdkName: '
|
|
4
|
+
export function displayAlreadyInitializedError(sdkName: 'MD_RUM' | 'MD_LOGS', initConfiguration: InitConfiguration) {
|
|
5
5
|
if (!initConfiguration.silentMultipleInit) {
|
|
6
6
|
display.error(`${sdkName} is already initialized.`)
|
|
7
7
|
}
|
package/src/boot/init.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface PublicApi {
|
|
|
12
12
|
version: string
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* For CDN async setup: Early RUM API calls must be wrapped in the `window.
|
|
15
|
+
* For CDN async setup: Early RUM API calls must be wrapped in the `window.MD_RUM.onReady()` callback. This ensures the code only gets executed once the SDK is properly loaded.
|
|
16
16
|
*
|
|
17
17
|
* See [CDN async setup](https://docs.datadoghq.com/real_user_monitoring/browser/#cdn-async) for further information.
|
|
18
18
|
*/
|
package/src/browser/cookie.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { display } from '../tools/display'
|
|
2
2
|
import { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils'
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
findAllCommaSeparatedValues,
|
|
5
|
+
findCommaSeparatedValue,
|
|
6
|
+
findCommaSeparatedValues,
|
|
7
|
+
generateUUID,
|
|
8
|
+
} from '../tools/utils/stringUtils'
|
|
4
9
|
import { buildUrl } from '../tools/utils/urlPolyfill'
|
|
5
10
|
|
|
6
11
|
export interface CookieOptions {
|
|
@@ -21,15 +26,28 @@ export function setCookie(name: string, value: string, expireDelay: number = 0,
|
|
|
21
26
|
document.cookie = `${name}=${value};${expires};path=/;samesite=${sameSite}${domain}${secure}${partitioned}`
|
|
22
27
|
}
|
|
23
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Returns the value of the cookie with the given name
|
|
31
|
+
* If there are multiple cookies with the same name, returns the first one
|
|
32
|
+
*/
|
|
24
33
|
export function getCookie(name: string) {
|
|
25
34
|
return findCommaSeparatedValue(document.cookie, name)
|
|
26
35
|
}
|
|
27
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Returns all the values of the cookies with the given name
|
|
39
|
+
*/
|
|
40
|
+
export function getCookies(name: string): string[] {
|
|
41
|
+
return findAllCommaSeparatedValues(document.cookie).get(name) || []
|
|
42
|
+
}
|
|
43
|
+
|
|
28
44
|
let initCookieParsed: Map<string, string> | undefined
|
|
29
45
|
|
|
30
46
|
/**
|
|
31
47
|
* Returns a cached value of the cookie. Use this during SDK initialization (and whenever possible)
|
|
32
48
|
* to avoid accessing document.cookie multiple times.
|
|
49
|
+
*
|
|
50
|
+
* ⚠️ If there are multiple cookies with the same name, returns the LAST one (unlike `getCookie()`)
|
|
33
51
|
*/
|
|
34
52
|
export function getInitCookie(name: string) {
|
|
35
53
|
if (!initCookieParsed) {
|
|
@@ -342,9 +342,9 @@ function isString(tag: unknown, tagName: string): tag is string | undefined | nu
|
|
|
342
342
|
return true
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
function
|
|
346
|
-
if (site && typeof site
|
|
347
|
-
display.error(
|
|
345
|
+
function isValidSite(site: unknown) {
|
|
346
|
+
if (site !== undefined && site !== null && typeof site !== 'string') {
|
|
347
|
+
display.error('Site must be a non-null string')
|
|
348
348
|
return false
|
|
349
349
|
}
|
|
350
350
|
return true
|
|
@@ -376,7 +376,7 @@ export function validateAndBuildConfiguration(
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
if (
|
|
379
|
-
!
|
|
379
|
+
!isValidSite(initConfiguration.site) ||
|
|
380
380
|
!isSampleRate(initConfiguration.sessionSampleRate, 'Session') ||
|
|
381
381
|
!isSampleRate(initConfiguration.telemetrySampleRate, 'Telemetry') ||
|
|
382
382
|
!isSampleRate(initConfiguration.telemetryConfigurationSampleRate, 'Telemetry Configuration') ||
|
|
@@ -2,7 +2,7 @@ import type { Payload } from '../../transport'
|
|
|
2
2
|
import { timeStampNow } from '../../tools/utils/timeUtils'
|
|
3
3
|
import { normalizeUrl } from '../../tools/utils/urlPolyfill'
|
|
4
4
|
import { generateUUID } from '../../tools/utils/stringUtils'
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
import type { InitConfiguration } from './configuration'
|
|
7
7
|
|
|
8
8
|
// replaced at build time
|
|
@@ -48,36 +48,26 @@ function createEndpointUrlWithParametersBuilder(
|
|
|
48
48
|
const proxy = initConfiguration.proxy
|
|
49
49
|
if (typeof proxy === 'string') {
|
|
50
50
|
const normalizedProxyUrl = normalizeUrl(proxy)
|
|
51
|
-
return (parameters) => `${normalizedProxyUrl}?
|
|
51
|
+
return (parameters) => `${normalizedProxyUrl}?mdforward=${encodeURIComponent(`${path}?${parameters}`)}`
|
|
52
52
|
}
|
|
53
53
|
if (typeof proxy === 'function') {
|
|
54
54
|
return (parameters) => proxy({ path, parameters })
|
|
55
55
|
}
|
|
56
56
|
const host = buildEndpointHost(trackType, initConfiguration)
|
|
57
|
-
return (parameters) => `https://${host}${path}?${parameters}`
|
|
57
|
+
// return (parameters) => `https://${host}${path}?${parameters}`
|
|
58
|
+
return (parameters) => `${host}${path}?${parameters}`
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
export function buildEndpointHost(
|
|
61
62
|
trackType: TrackType,
|
|
62
63
|
initConfiguration: InitConfiguration & { usePciIntake?: boolean }
|
|
63
64
|
) {
|
|
64
|
-
const { site =
|
|
65
|
-
|
|
66
|
-
if (trackType === 'logs' && initConfiguration.usePciIntake && site === INTAKE_SITE_US1) {
|
|
67
|
-
return PCI_INTAKE_HOST_US1
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (internalAnalyticsSubdomain && site === INTAKE_SITE_US1) {
|
|
71
|
-
return `${internalAnalyticsSubdomain}.${INTAKE_SITE_US1}`
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (site === INTAKE_SITE_FED_STAGING) {
|
|
75
|
-
return `http-intake.logs.${site}`
|
|
76
|
-
}
|
|
65
|
+
const { site = 'localhost' } = initConfiguration
|
|
77
66
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
67
|
+
// Use the site directly as the host
|
|
68
|
+
// If site includes a port, use it as-is
|
|
69
|
+
// If no port is specified, the default HTTPS port 443 will be used automatically
|
|
70
|
+
return site
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
/**
|
|
@@ -92,22 +82,22 @@ function buildEndpointParameters(
|
|
|
92
82
|
extraParameters: string[] = []
|
|
93
83
|
) {
|
|
94
84
|
const parameters = [
|
|
95
|
-
`
|
|
96
|
-
`
|
|
97
|
-
`
|
|
98
|
-
'
|
|
99
|
-
`
|
|
85
|
+
`mdsource=${source}`,
|
|
86
|
+
`md-api-key=${clientToken}`,
|
|
87
|
+
`md-evp-origin-version=${encodeURIComponent(__BUILD_ENV__SDK_VERSION__)}`,
|
|
88
|
+
'md-evp-origin=browser',
|
|
89
|
+
`md-request-id=${generateUUID()}`,
|
|
100
90
|
].concat(extraParameters)
|
|
101
91
|
|
|
102
92
|
if (encoding) {
|
|
103
|
-
parameters.push(`
|
|
93
|
+
parameters.push(`md-evp-encoding=${encoding}`)
|
|
104
94
|
}
|
|
105
95
|
|
|
106
96
|
if (trackType === 'rum') {
|
|
107
|
-
parameters.push(`batch_time=${timeStampNow()}`, `
|
|
97
|
+
parameters.push(`batch_time=${timeStampNow()}`, `_md.api=${api}`)
|
|
108
98
|
|
|
109
99
|
if (retry) {
|
|
110
|
-
parameters.push(`
|
|
100
|
+
parameters.push(`_md.retry_count=${retry.count}`, `_md.retry_after=${retry.lastFailureStatus}`)
|
|
111
101
|
}
|
|
112
102
|
}
|
|
113
103
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Site } from '../intakeSites'
|
|
2
|
-
import {
|
|
2
|
+
import { INTAKE_URL_PARAMETERS } from '../intakeSites'
|
|
3
3
|
import type { InitConfiguration } from './configuration'
|
|
4
4
|
import type { EndpointBuilder } from './endpointBuilder'
|
|
5
5
|
import { createEndpointBuilder } from './endpointBuilder'
|
|
@@ -22,7 +22,7 @@ export interface ReplicaConfiguration {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export function computeTransportConfiguration(initConfiguration: InitConfiguration): TransportConfiguration {
|
|
25
|
-
const site = initConfiguration.site ||
|
|
25
|
+
const site = initConfiguration.site || 'localhost'
|
|
26
26
|
const source = validateSource(initConfiguration.source)
|
|
27
27
|
|
|
28
28
|
const endpointBuilders = computeEndpointBuilders({ ...initConfiguration, site, source })
|
|
@@ -54,22 +54,10 @@ function computeEndpointBuilders(initConfiguration: InitConfiguration) {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
function computeReplicaConfiguration(initConfiguration: InitConfiguration): ReplicaConfiguration | undefined {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const replicaConfiguration: InitConfiguration = {
|
|
62
|
-
...initConfiguration,
|
|
63
|
-
site: INTAKE_SITE_US1,
|
|
64
|
-
clientToken: initConfiguration.replica.clientToken,
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return {
|
|
68
|
-
logsEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'logs'),
|
|
69
|
-
rumEndpointBuilder: createEndpointBuilder(replicaConfiguration, 'rum', [
|
|
70
|
-
`application.id=${initConfiguration.replica.applicationId}`,
|
|
71
|
-
]),
|
|
72
|
-
}
|
|
57
|
+
// Disable replica configuration for custom endpoints to avoid duplicate requests
|
|
58
|
+
// The replica feature was designed for Datadog's internal use and causes unwanted duplicates
|
|
59
|
+
// when using custom endpoints
|
|
60
|
+
return undefined
|
|
73
61
|
}
|
|
74
62
|
|
|
75
63
|
export function isIntakeUrl(url: string): boolean {
|