Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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.1",
"@mantine/hooks": "9.3.1",
"@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