Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions developer-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"@datadog/browser-logs": "workspace:*",
"@datadog/browser-rum": "workspace:*",
"@datadog/browser-rum-core": "workspace:*",
"@datadog/js-core": "workspace:*",
"@mantine/core": "9.3.2",
"@mantine/hooks": "9.3.2",
"@tabler/icons-react": "3.44.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { EndpointBuilder } from '@datadog/browser-core'
import { createEndpointBuilder } from '../../../../../../packages/browser-core/src/domain/configuration'
import type { EndpointBuilder } from '@datadog/js-core/transport'
import { createEndpointBuilder } from '@datadog/js-core/transport'
import { copy } from '../../../copy'
import type { SdkInfos } from '../../../hooks/useSdkInfos'
import type { SdkEvent } from '../../../sdkEvent'
Expand Down Expand Up @@ -89,6 +89,6 @@ export function getIntakeUrlForEvent(sdkInfos: SdkInfos, event: SdkEvent) {
}

return builder
.build('manual', { data: 'a', bytesCount: 1 })
.build('manual', {})
.replace(/dd-evp-origin-version=[^&]+/g, `dd-evp-origin-version=${encodeURIComponent(version)}`)
}
1 change: 1 addition & 0 deletions eslint-local-rules/disallowSideEffects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const packagesWithoutSideEffect = new Set([
'@datadog/js-core/time',
'@datadog/js-core/util',
'@datadog/js-core/monitor',
'@datadog/js-core/transport',
'@datadog/browser-core',
'@datadog/browser-rum-core',
'@datadog/browser-rum-react/internal',
Expand Down
2 changes: 1 addition & 1 deletion eslint-local-rules/disallowUrlConstructorPatchValues.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export default RuleCreator.withoutDocs({
},
schema: [],
messages: {
patchedUrlConstructor: 'This value might be patched. Use `buildUrl` from @datadog/browser-core instead',
patchedUrlConstructor: 'This value might be patched. Use `buildUrl` from @datadog/js-core/util instead',
},
type: 'suggestion',
},
Expand Down
2 changes: 1 addition & 1 deletion eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const MONITOR_UNTIL_COMMENT_EXPIRED_LEVEL =
const PACKAGES_NO_RESTRICTED_SYNTAX_RULES = [
{
selector: 'Identifier[name="globalThis"]',
message: 'Use `globalObject` from @datadog/browser-core instead of `globalThis`.',
message: 'Use `globalObject` from @datadog/js-core/util instead of `globalThis`.',
},
]

Expand Down
3 changes: 2 additions & 1 deletion packages/browser-core/src/browser/addEventListener.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import type { CookieStore, CookieStoreEventMap } from '@datadog/js-core/util'
import { monitor } from '../tools/monitor'
import { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'
import { noop } from '../tools/utils/functionUtils'
import type { CookieStore, CookieStoreEventMap, VisualViewport, VisualViewportEventMap } from './browser.types'
import type { VisualViewport, VisualViewportEventMap } from './browser.types'

export type TrustableEvent<E extends Event = Event> = E & { __ddIsTrusted?: boolean }

Expand Down
144 changes: 0 additions & 144 deletions packages/browser-core/src/browser/browser.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,147 +50,3 @@ export interface WeakRefConstructor {

new <T extends object>(target: T): WeakRef<T>
}

export interface CookieStoreItem {
name: string
value: string
domain?: string
path?: string
expires?: number
secure?: boolean
sameSite?: 'strict' | 'lax' | 'none'
partitioned?: boolean
}

export interface CookieStore extends EventTarget {
get(name: string): Promise<CookieStoreItem | null>
getAll(name?: string): Promise<CookieStoreItem[]>
set(options: {
name: string
value: string
expires?: number | Date
domain?: string
path?: string
secure?: boolean
sameSite?: 'strict' | 'lax' | 'none'
partitioned?: boolean
}): Promise<void>
delete(options: { name: string; domain?: string; path?: string; partitioned?: boolean }): Promise<void>
}

export interface CookieStoreEventMap {
change: CookieChangeEvent
}

export interface CookieChangeItem {
name: string
value: string | undefined
}

export type CookieChangeEvent = Event & {
changed: CookieChangeItem[]
deleted: CookieChangeItem[]
}

export type NetworkInterface = 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown'
export type EffectiveType = 'slow-2g' | '2g' | '3g' | '4g'

export interface BrowserNavigator extends Navigator {
connection?: NetworkInformation
}

export interface NetworkInformation {
type?: NetworkInterface
effectiveType?: EffectiveType
saveData: boolean
}

// Types for the JS Self-Profiling API
// https://wicg.github.io/js-self-profiling/

export interface ProfilerFrame {
/** A function instance name. */
readonly name: string
/** Index in the trace.resources array. */
readonly resourceId?: number
/** 1-based index of the line. */
readonly line?: number
/** 1-based index of the column. */
readonly column?: number
}

export interface ProfilerStack {
/** Index in the trace.stacks array. */
readonly parentId?: number
/** Index in the trace.frames array. */
readonly frameId: number
}

export interface ProfilerSample {
/** High resolution time relative to the profiling session's time origin. */
readonly timestamp: number
/** Index in the trace.stacks array. */
readonly stackId?: number
}

export type ProfilerResource = string

export interface ProfilerTrace {
/** An array of profiler resources. */
readonly resources: ProfilerResource[]
/** An array of profiler frames. */
readonly frames: ProfilerFrame[]
/** An array of profiler stacks. */
readonly stacks: ProfilerStack[]
/** An array of profiler samples. */
readonly samples: ProfilerSample[]
}

export interface ProfilerInitOptions {
/** Sample interval in ms. */
readonly sampleInterval: number
/** Max buffer size in number of samples. */
readonly maxBufferSize: number
}

export interface ProfilerConstructor {
new (options: ProfilerInitOptions): Profiler
}

export interface Profiler extends EventTarget {
/** Sample interval in ms. */
readonly sampleInterval: number
/** True if profiler is stopped. */
readonly stopped: boolean

stop(): Promise<ProfilerTrace>

addEventListener<K extends keyof ProfilerEventMap>(
type: K,
listener: (ev: ProfilerEventMap[K]) => any,
options?: boolean | AddEventListenerOptions
): void
addEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | AddEventListenerOptions
): void
removeEventListener<K extends keyof ProfilerEventMap>(
type: K,
listener: (ev: ProfilerEventMap[K]) => any,
options?: boolean | EventListenerOptions
): void
removeEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | EventListenerOptions
): void
}

interface ProfilerEventMap {
samplebufferfull: SampleBufferFullEvent
}

export interface SampleBufferFullEvent extends Event {
readonly target: Profiler
}
3 changes: 1 addition & 2 deletions packages/browser-core/src/browser/cookie.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { ONE_SECOND } from '@datadog/js-core/time'
import { buildUrl, globalObject } from '@datadog/js-core/util'
import {
findAllCommaSeparatedValues,
findCommaSeparatedValue,
findCommaSeparatedValues,
generateUUID,
} from '../tools/utils/stringUtils'
import { buildUrl } from '../tools/utils/urlPolyfill'
import { globalObject } from '../tools/globalObject'

export interface CookieOptions {
secure?: boolean
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-core/src/browser/cookieAccess.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ONE_MINUTE, dateNow } from '@datadog/js-core/time'
import { globalObject } from '@datadog/js-core/util'
import type { Clock } from '../../test'
import { collectAsyncCalls, mockClock, registerCleanupTask, replaceMockable } from '../../test'
import { display } from '../tools/display'
import { globalObject } from '../tools/globalObject'
import { detectVersion, isChromium } from '../tools/utils/browserDetection'
import type { CookieOptions } from './cookie'
import { deleteCookie, getCookie, setCookie } from './cookie'
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-core/src/browser/cookieAccess.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { ONE_MINUTE, ONE_SECOND, dateNow } from '@datadog/js-core/time'
import { globalObject } from '@datadog/js-core/util'
import { setInterval, clearInterval } from '../tools/timer'
import { Observable } from '../tools/observable'
import { mockable } from '../tools/mockable'
import { display } from '../tools/display'
import { generateUUID } from '../tools/utils/stringUtils'
import { addTelemetryDebug } from '../domain/telemetry'
import { globalObject } from '../tools/globalObject'
import { addEventListener, DOM_EVENT, isEventSupported } from './addEventListener'
import { getCookies, setCookie } from './cookie'
import type { CookieOptions } from './cookie'
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-core/src/browser/fetch.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { globalObject } from '@datadog/js-core/util'
import { getZoneJsOriginalValue } from '../tools/getZoneJsOriginalValue'
import { globalObject } from '../tools/globalObject'

/**
* Make a fetch request using the native implementation, bypassing Zone.js patching.
Expand Down
5 changes: 2 additions & 3 deletions packages/browser-core/src/browser/fetchObservable.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import type { ClocksState } from '@datadog/js-core/time'
import { clocksNow } from '@datadog/js-core/time'
import { normalizeUrl, globalObject } from '@datadog/js-core/util'
import type { GlobalObject } from '@datadog/js-core/util'
import type { InstrumentedMethodCall } from '../tools/instrumentMethod'
import { instrumentMethod } from '../tools/instrumentMethod'
import { monitorError } from '../tools/monitor'
import { Observable } from '../tools/observable'
import { normalizeUrl } from '../tools/utils/urlPolyfill'
import type { GlobalObject } from '../tools/globalObject'
import { globalObject } from '../tools/globalObject'
import { readBytesFromStream } from '../tools/readBytesFromStream'
import { tryToClone } from '../tools/utils/responseUtils'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { globalObject } from '@datadog/js-core/util'
import { Observable } from '../tools/observable'
import { objectValues } from '../tools/utils/polyfills'
import { globalObject } from '../tools/globalObject'
import { addEventListeners, addEventListener, DOM_EVENT } from './addEventListener'

export const PageExitReason = {
Expand Down
3 changes: 1 addition & 2 deletions packages/browser-core/src/browser/xhrObservable.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { elapsed, timeStampNow, clocksNow } from '@datadog/js-core/time'
import type { Duration, ClocksState } from '@datadog/js-core/time'
import { normalizeUrl, globalObject } from '@datadog/js-core/util'
import type { InstrumentedMethodCall } from '../tools/instrumentMethod'
import { instrumentMethod } from '../tools/instrumentMethod'
import { Observable } from '../tools/observable'
import { normalizeUrl } from '../tools/utils/urlPolyfill'
import { globalObject } from '../tools/globalObject'
import { addEventListener } from './addEventListener'

export interface XhrOpenContext {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { globalObject } from '@datadog/js-core/util'
import { display } from '../tools/display'
import { globalObject } from '../tools/globalObject'
import { matchList } from '../tools/matchOption'
import { mockable } from '../tools/mockable'
import type { InitConfiguration } from './configuration'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { ProxyFn, Site } from '@datadog/js-core/transport'
import { INTAKE_SITE_US1 } from '@datadog/js-core/transport'
import { catchUserErrors } from '../../tools/catchUserErrors'
import { DOCS_ORIGIN, MORE_DETAILS, display } from '../../tools/display'
import type { RawTelemetryConfiguration } from '../telemetry'
Expand All @@ -9,8 +11,6 @@ import { TrackingConsent } from '../trackingConsent'
import type { SessionPersistence } from '../session/sessionConstants'
import type { MatchOption } from '../../tools/matchOption'
import { isAllowedTrackingOrigins } from '../allowedTrackingOrigins'
import { INTAKE_SITE_US1 } from '../intakeSites'
import type { Site } from '../intakeSites'

/**
* Default privacy level for the browser SDK.
Expand Down Expand Up @@ -267,12 +267,6 @@ export interface InitConfiguration {
// for this option.
type GenericBeforeSendCallback = (event: any, context?: any) => unknown

/**
* path: /api/vX/product
* parameters: xxx=yyy&zzz=aaa
*/
export type ProxyFn = (options: { path: string; parameters: string; subdomain?: string }) => string

/**
* @internal
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Payload } from '../../transport'
import type { EndpointPayload } from '@datadog/js-core/transport'
import { buildEndpointUrl, createEndpointBuilder, createReplicaEndpointBuilder } from '@datadog/js-core/transport'
import type { InitConfiguration } from './configuration'
import { validateAndBuildConfiguration } from './configuration'
import { buildEndpointUrl, createEndpointBuilder, createReplicaEndpointBuilder } from './endpointBuilder'

const DEFAULT_PAYLOAD = {} as Payload
const DEFAULT_PAYLOAD = {} as EndpointPayload

describe('endpointBuilder', () => {
const clientToken = 'some_client_token'
Expand Down
4 changes: 1 addition & 3 deletions packages/browser-core/src/domain/configuration/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export type { Configuration, InitConfiguration, ProxyFn } from './configuration'
export type { Configuration, InitConfiguration } from './configuration'
export {
DefaultPrivacyLevel,
TraceContextInjection,
Expand All @@ -7,5 +7,3 @@ export {
serializeConfiguration,
buildCookieOptions,
} from './configuration'
export type { EndpointBuilder, TrackType } from './endpointBuilder'
export { createEndpointBuilder, createReplicaEndpointBuilder, buildEndpointUrl } from './endpointBuilder'
14 changes: 7 additions & 7 deletions packages/browser-core/src/domain/connectivity/connectivity.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import type { EffectiveType, NetworkInterface } from '../../browser/browser.types'
import { globalObject } from '../../tools/globalObject'
import type { NetworkEffectiveType, NetworkInterface } from '@datadog/js-core/util'
import { globalObject } from '@datadog/js-core/util'

export interface Connectivity {
status: 'connected' | 'not_connected'
interfaces?: NetworkInterface[]
effective_type?: EffectiveType
effective_type?: NetworkEffectiveType
[key: string]: unknown
}

export function getConnectivity(): Connectivity {
const navigator = globalObject.navigator
const { navigator } = globalObject

return {
status: navigator.onLine ? 'connected' : 'not_connected',
interfaces: navigator.connection?.type ? [navigator.connection.type] : undefined,
effective_type: navigator.connection?.effectiveType,
status: navigator?.onLine ? 'connected' : 'not_connected',
interfaces: navigator?.connection?.type ? [navigator.connection.type] : undefined,
effective_type: navigator?.connection?.effectiveType,
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { clocksNow } from '@datadog/js-core/time'
import { globalObject } from '@datadog/js-core/util'
import { instrumentMethod } from '../../tools/instrumentMethod'
import { Observable } from '../../tools/observable'
import type { StackTrace } from '../../tools/stackTrace/computeStackTrace'
import { computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace'
import { globalObject } from '../../tools/globalObject'
import { DOM_EVENT, isEventSupported } from '../../browser/addEventListener'
import { noop } from '../../tools/utils/functionUtils'
import { computeRawError, isError } from './error'
Expand Down
2 changes: 1 addition & 1 deletion packages/browser-core/src/domain/intakeSites.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { isIntakeUrl } from './intakeSites'
import { isIntakeUrl } from '@datadog/js-core/transport'

describe('intakeSites', () => {
const clientToken = 'some_client_token'
Expand Down
Loading
Loading