@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.
Files changed (147) hide show
  1. package/README.md +1 -1
  2. package/cjs/boot/displayAlreadyInitializedError.d.ts +1 -1
  3. package/cjs/boot/init.d.ts +1 -1
  4. package/cjs/browser/cookie.d.ts +10 -0
  5. package/cjs/browser/cookie.js +13 -0
  6. package/cjs/browser/cookie.js.map +1 -1
  7. package/cjs/domain/configuration/configuration.js +4 -4
  8. package/cjs/domain/configuration/configuration.js.map +1 -1
  9. package/cjs/domain/configuration/endpointBuilder.js +16 -24
  10. package/cjs/domain/configuration/endpointBuilder.js.map +1 -1
  11. package/cjs/domain/configuration/transportConfiguration.js +5 -15
  12. package/cjs/domain/configuration/transportConfiguration.js.map +1 -1
  13. package/cjs/domain/intakeSites.d.ts +1 -7
  14. package/cjs/domain/intakeSites.js +2 -8
  15. package/cjs/domain/intakeSites.js.map +1 -1
  16. package/cjs/domain/session/oldCookiesMigration.d.ts +1 -1
  17. package/cjs/domain/session/oldCookiesMigration.js +1 -1
  18. package/cjs/domain/session/sessionManager.d.ts +1 -0
  19. package/cjs/domain/session/sessionManager.js +24 -6
  20. package/cjs/domain/session/sessionManager.js.map +1 -1
  21. package/cjs/domain/session/sessionState.js +2 -8
  22. package/cjs/domain/session/sessionState.js.map +1 -1
  23. package/cjs/domain/session/sessionStore.d.ts +1 -1
  24. package/cjs/domain/session/sessionStore.js +5 -1
  25. package/cjs/domain/session/sessionStore.js.map +1 -1
  26. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +5 -1
  27. package/cjs/domain/session/storeStrategies/sessionInCookie.js +52 -3
  28. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
  29. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +2 -0
  30. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +1 -0
  31. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
  32. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +1 -1
  33. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +1 -1
  34. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +6 -6
  35. package/cjs/domain/synthetics/syntheticsWorkerValues.js +6 -6
  36. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
  37. package/cjs/domain/tags.js +6 -5
  38. package/cjs/domain/tags.js.map +1 -1
  39. package/cjs/domain/telemetry/telemetry.js +4 -5
  40. package/cjs/domain/telemetry/telemetry.js.map +1 -1
  41. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +1 -1
  42. package/cjs/index.d.ts +1 -1
  43. package/cjs/index.js +3 -2
  44. package/cjs/index.js.map +1 -1
  45. package/cjs/tools/display.js +1 -1
  46. package/cjs/tools/display.js.map +1 -1
  47. package/cjs/tools/experimentalFeatures.d.ts +2 -1
  48. package/cjs/tools/experimentalFeatures.js +1 -0
  49. package/cjs/tools/experimentalFeatures.js.map +1 -1
  50. package/cjs/tools/utils/browserDetection.d.ts +2 -0
  51. package/cjs/tools/utils/browserDetection.js +138 -0
  52. package/cjs/tools/utils/browserDetection.js.map +1 -1
  53. package/cjs/tools/utils/stringUtils.d.ts +15 -0
  54. package/cjs/tools/utils/stringUtils.js +36 -0
  55. package/cjs/tools/utils/stringUtils.js.map +1 -1
  56. package/cjs/transport/httpRequest.d.ts +1 -0
  57. package/cjs/transport/httpRequest.js +26 -4
  58. package/cjs/transport/httpRequest.js.map +1 -1
  59. package/cjs/transport/index.d.ts +1 -1
  60. package/cjs/transport/index.js +2 -1
  61. package/cjs/transport/index.js.map +1 -1
  62. package/esm/boot/displayAlreadyInitializedError.d.ts +1 -1
  63. package/esm/boot/init.d.ts +1 -1
  64. package/esm/browser/cookie.d.ts +10 -0
  65. package/esm/browser/cookie.js +13 -1
  66. package/esm/browser/cookie.js.map +1 -1
  67. package/esm/domain/configuration/configuration.js +5 -5
  68. package/esm/domain/configuration/configuration.js.map +1 -1
  69. package/esm/domain/configuration/endpointBuilder.js +16 -24
  70. package/esm/domain/configuration/endpointBuilder.js.map +1 -1
  71. package/esm/domain/configuration/transportConfiguration.js +6 -16
  72. package/esm/domain/configuration/transportConfiguration.js.map +1 -1
  73. package/esm/domain/intakeSites.d.ts +1 -7
  74. package/esm/domain/intakeSites.js +1 -7
  75. package/esm/domain/intakeSites.js.map +1 -1
  76. package/esm/domain/session/oldCookiesMigration.d.ts +1 -1
  77. package/esm/domain/session/oldCookiesMigration.js +1 -1
  78. package/esm/domain/session/sessionManager.d.ts +1 -0
  79. package/esm/domain/session/sessionManager.js +25 -7
  80. package/esm/domain/session/sessionManager.js.map +1 -1
  81. package/esm/domain/session/sessionState.js +2 -8
  82. package/esm/domain/session/sessionState.js.map +1 -1
  83. package/esm/domain/session/sessionStore.d.ts +1 -1
  84. package/esm/domain/session/sessionStore.js +5 -1
  85. package/esm/domain/session/sessionStore.js.map +1 -1
  86. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +5 -1
  87. package/esm/domain/session/storeStrategies/sessionInCookie.js +53 -4
  88. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
  89. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +2 -0
  90. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +1 -1
  91. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
  92. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +1 -1
  93. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +1 -1
  94. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +6 -6
  95. package/esm/domain/synthetics/syntheticsWorkerValues.js +6 -6
  96. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
  97. package/esm/domain/tags.js +6 -5
  98. package/esm/domain/tags.js.map +1 -1
  99. package/esm/domain/telemetry/telemetry.js +4 -5
  100. package/esm/domain/telemetry/telemetry.js.map +1 -1
  101. package/esm/domain/telemetry/telemetryEvent.types.d.ts +1 -1
  102. package/esm/index.d.ts +1 -1
  103. package/esm/index.js +1 -1
  104. package/esm/index.js.map +1 -1
  105. package/esm/tools/display.js +1 -1
  106. package/esm/tools/display.js.map +1 -1
  107. package/esm/tools/experimentalFeatures.d.ts +2 -1
  108. package/esm/tools/experimentalFeatures.js +1 -0
  109. package/esm/tools/experimentalFeatures.js.map +1 -1
  110. package/esm/tools/utils/browserDetection.d.ts +2 -0
  111. package/esm/tools/utils/browserDetection.js +136 -0
  112. package/esm/tools/utils/browserDetection.js.map +1 -1
  113. package/esm/tools/utils/stringUtils.d.ts +15 -0
  114. package/esm/tools/utils/stringUtils.js +35 -0
  115. package/esm/tools/utils/stringUtils.js.map +1 -1
  116. package/esm/transport/httpRequest.d.ts +1 -0
  117. package/esm/transport/httpRequest.js +25 -4
  118. package/esm/transport/httpRequest.js.map +1 -1
  119. package/esm/transport/index.d.ts +1 -1
  120. package/esm/transport/index.js +1 -1
  121. package/esm/transport/index.js.map +1 -1
  122. package/package.json +4 -6
  123. package/src/boot/displayAlreadyInitializedError.ts +1 -1
  124. package/src/boot/init.ts +1 -1
  125. package/src/browser/cookie.ts +19 -1
  126. package/src/domain/configuration/configuration.ts +4 -4
  127. package/src/domain/configuration/endpointBuilder.ts +17 -27
  128. package/src/domain/configuration/transportConfiguration.ts +6 -18
  129. package/src/domain/intakeSites.ts +2 -17
  130. package/src/domain/session/oldCookiesMigration.ts +1 -1
  131. package/src/domain/session/sessionManager.ts +28 -7
  132. package/src/domain/session/sessionState.ts +2 -7
  133. package/src/domain/session/sessionStore.ts +6 -2
  134. package/src/domain/session/storeStrategies/sessionInCookie.ts +66 -4
  135. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +1 -1
  136. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +1 -1
  137. package/src/domain/synthetics/syntheticsWorkerValues.ts +9 -9
  138. package/src/domain/tags.ts +6 -6
  139. package/src/domain/telemetry/telemetry.ts +5 -5
  140. package/src/domain/telemetry/telemetryEvent.types.ts +1 -1
  141. package/src/index.ts +1 -0
  142. package/src/tools/display.ts +1 -1
  143. package/src/tools/experimentalFeatures.ts +1 -0
  144. package/src/tools/utils/browserDetection.ts +146 -0
  145. package/src/tools/utils/stringUtils.ts +34 -0
  146. package/src/transport/httpRequest.ts +31 -5
  147. package/src/transport/index.ts +1 -1
@@ -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,sBAAsB,CAAA;AAErC,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"}
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,mBAKX;AALD,WAAY,mBAAmB;IAC7B,sEAA+C,CAAA;IAC/C,0FAAmE,CAAA;IACnE,0EAAmD,CAAA;IACnD,kFAA2D,CAAA;AAC7D,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;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"}
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":"AAOA,MAAM,UAAU,UAAU;IACxB,OAAO,mBAAmB,EAAE,6BAAqB,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,mBAAmB,EAAE,2BAAmB,CAAA;AACjD,CAAC;AAED,IAAI,YAAiC,CAAA;AACrC,SAAS,mBAAmB;IAC1B,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,aAAa,CAAC,gBAAwB,MAAM;;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IACnD,IAAK,aAAqB,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,gCAAuB;IACzB,CAAC;IAED;IACE,sFAAsF;IACtF,0FAA0F;IAC1F,6CAA6C;IAC7C,CAAA,MAAA,aAAa,CAAC,SAAS,CAAC,MAAM,0CAAE,OAAO,CAAC,OAAO,CAAC,MAAK,CAAC;QACtD,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACjE,CAAC;QACD,8BAAqB;IACvB,CAAC;IAED,6BAAoB;AACtB,CAAC"}
1
+ {"version":3,"file":"browserDetection.js","sourceRoot":"","sources":["../../../src/tools/utils/browserDetection.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,8BAA8B;AAC9B,cAAc;AACd,YAAY;AACZ,WAAW;AACX,IAAI;AACJ,EAAE;AACF,iCAAiC;AACjC,sDAAsD;AACtD,IAAI;AACJ,EAAE;AACF,+BAA+B;AAC/B,oDAAoD;AACpD,IAAI;AACJ,EAAE;AACF,wCAAwC;AACxC,mCAAmC;AACnC,4DAA4D;AAC5D,IAAI;AACJ,EAAE;AACF,6BAA6B;AAC7B,kEAAkE;AAClE,wDAAwD;AACxD,6EAA6E;AAC7E,8BAA8B;AAC9B,MAAM;AACN,EAAE;AACF,SAAS;AACT,6FAA6F;AAC7F,iGAAiG;AACjG,oDAAoD;AACpD,gEAAgE;AAChE,wEAAwE;AACxE,QAAQ;AACR,4BAA4B;AAC5B,MAAM;AACN,EAAE;AACF,yBAAyB;AACzB,IAAI;AACJ,EAAE;AACF,MAAM;AACN,yDAAyD;AACzD,iEAAiE;AACjE,MAAM;AACN,mDAAmD;AACnD,mFAAmF;AACnF,6GAA6G;AAC7G,IAAI;AACJ,EAAE;AACF,6BAA6B;AAC7B,sFAAsF;AACtF,8DAA8D;AAC9D,+DAA+D;AAC/D,8BAA8B;AAC9B,gCAAgC;AAChC,MAAM;AACN,EAAE;AACF,sCAAsC;AACtC,yCAAyC;AACzC,IAAI;AACJ,EAAE;AACF,sEAAsE;AACtE,EAAE;AACF,6BAA6B;AAC7B,iDAAiD;AACjD,EAAE;AACF,2BAA2B;AAC3B,qBAAqB;AACrB,MAAM;AACN,gDAAgD;AAChD,8CAA8C;AAC9C,8CAA8C;AAC9C,gDAAgD;AAChD,EAAE;AACF,mBAAmB;AACnB,IAAI;AACJ,EAAE;AACF,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,yBAAyB;AACzB,wCAAwC;AACxC,uBAAuB;AACvB,MAAM;AACN,EAAE;AACF,wDAAwD;AACxD,SAAS;AACT,iEAAiE;AACjE,2EAA2E;AAC3E,QAAQ;AACR,sBAAsB;AACtB,MAAM;AACN,EAAE;AACF,uCAAuC;AACvC,4GAA4G;AAC5G,wBAAwB;AACxB,sCAAsC;AACtC,sBAAsB;AACtB,QAAQ;AACR,EAAE;AACF,yBAAyB;AACzB,oEAAoE;AACpE,uBAAuB;AACvB,QAAQ;AACR,EAAE;AACF,0EAA0E;AAC1E,gFAAgF;AAChF,wCAAwC;AACxC,uBAAuB;AACvB,QAAQ;AACR,EAAE;AACF,kCAAkC;AAClC,sBAAsB;AACtB,MAAM;AACN,EAAE;AACF,0BAA0B;AAC1B,mBAAmB;AACnB,IAAI;AAGJ,uIAAuI;AACvI,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AASxC,MAAM,UAAU,UAAU;IACxB,OAAO,mBAAmB,EAAE,6BAAqB,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,mBAAmB,EAAE,2BAAmB,CAAA;AACjD,CAAC;AAED,IAAI,YAAiC,CAAA;AACrC,SAAS,mBAAmB;IAC1B,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,YAAY,GAAG,aAAa,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,aAAa,CAAC,gBAAwB,MAAM;;IAC1D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IACnD,IAAK,aAAqB,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,gCAAuB;IACzB,CAAC;IAED;IACE,sFAAsF;IACtF,0FAA0F;IAC1F,6CAA6C;IAC7C,CAAA,MAAA,aAAa,CAAC,SAAS,CAAC,MAAM,0CAAE,OAAO,CAAC,OAAO,CAAC,MAAK,CAAC;QACtD,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EACjE,CAAC;QACD,8BAAqB;IACvB,CAAC;IAED,6BAAoB;AACtB,CAAC;AAED;;;GAGG;AACH,IAAI,wBAA4C,CAAA;AAEhD,MAAM,UAAU,sBAAsB,CAAC,gBAAwB,MAAM;IACnE,OAAO,CACL,wBAAwB,aAAxB,wBAAwB,cAAxB,wBAAwB,GACxB,CAAC,wBAAwB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC,CACtE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,gBAAwB,MAAM;IACtE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAA;IAC5C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAEjC,4CAA4C;IAC5C,kEAAkE;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAA;AACjD,CAAC"}
@@ -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
- fetch(fetchUrl, { method: 'POST', body: payload.data, keepalive: true, mode: 'cors' })
53
- .then(monitor((response) => onResponse === null || onResponse === void 0 ? void 0 : onResponse({ status: response.status, type: response.type })))
54
- .catch(monitor(() => fetchStrategy(endpointBuilder, payload, onResponse)));
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
- fetch(fetchUrl, { method: 'POST', body: payload.data, mode: 'cors' })
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":"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"}
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,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AA2D9E,IAAI,WAA+B,CAAA;AAEnC,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,WAAW,GAAG,IAAI,CAAA;AACpB,CAAC;AAED,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;QAClE,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAE7C,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;aAC5F,IAAI,CAAC,OAAO,CAAC,CAAC,QAAkB,EAAE,EAAE;YACnC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAChE,CAAC,CAAC,CAAC;aACF,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;YACnD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,eAAgC,EAChC,OAAgB,EAChB,UAAsC;IAEtC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAE7C,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;SAC3E,IAAI,CAAC,OAAO,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACrG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,oBAAoB;IAC3B,gGAAgG;IAChG,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,IAAI,WAAW,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,MAAM,OAAO,GAAgB,EAAE,CAAA;IAE/B,+CAA+C;IAC/C,+DAA+D;IAC/D,IAAI,WAAW,IAAI,GAAG,EAAG,CAAC;QACxB,OAAO,CAAC,gBAAgB,CAAC,GAAG,sBAAsB,EAAE,CAAA;IACtD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -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';
@@ -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;AAEjD,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"}
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",
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: 'DD_RUM' | 'DD_LOGS', initConfiguration: InitConfiguration) {
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.DD_RUM.onReady()` callback. This ensures the code only gets executed once the SDK is properly loaded.
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
  */
@@ -1,6 +1,11 @@
1
1
  import { display } from '../tools/display'
2
2
  import { ONE_MINUTE, ONE_SECOND } from '../tools/utils/timeUtils'
3
- import { findCommaSeparatedValue, findCommaSeparatedValues, generateUUID } from '../tools/utils/stringUtils'
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 isDatadogSite(site: unknown) {
346
- if (site && typeof site === 'string' && !/(datadog|ddog|datad0g|dd0g)/.test(site)) {
347
- display.error(`Site should be a valid Datadog site. ${MORE_DETAILS} ${DOCS_ORIGIN}/getting_started/site/.`)
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
- !isDatadogSite(initConfiguration.site) ||
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
- import { INTAKE_SITE_FED_STAGING, INTAKE_SITE_US1, PCI_INTAKE_HOST_US1 } from '../intakeSites'
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}?ddforward=${encodeURIComponent(`${path}?${parameters}`)}`
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 = INTAKE_SITE_US1, internalAnalyticsSubdomain } = initConfiguration
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
- const domainParts = site.split('.')
79
- const extension = domainParts.pop()
80
- return `browser-intake-${domainParts.join('-')}.${extension!}`
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
- `ddsource=${source}`,
96
- `dd-api-key=${clientToken}`,
97
- `dd-evp-origin-version=${encodeURIComponent(__BUILD_ENV__SDK_VERSION__)}`,
98
- 'dd-evp-origin=browser',
99
- `dd-request-id=${generateUUID()}`,
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(`dd-evp-encoding=${encoding}`)
93
+ parameters.push(`md-evp-encoding=${encoding}`)
104
94
  }
105
95
 
106
96
  if (trackType === 'rum') {
107
- parameters.push(`batch_time=${timeStampNow()}`, `_dd.api=${api}`)
97
+ parameters.push(`batch_time=${timeStampNow()}`, `_md.api=${api}`)
108
98
 
109
99
  if (retry) {
110
- parameters.push(`_dd.retry_count=${retry.count}`, `_dd.retry_after=${retry.lastFailureStatus}`)
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 { INTAKE_SITE_US1, INTAKE_URL_PARAMETERS } from '../intakeSites'
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 || INTAKE_SITE_US1
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
- if (!initConfiguration.replica) {
58
- return
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 {