@coralogix/browser
Version:
Official Coralogix SDK for browsers
401 lines (400 loc) • 13.9 kB
TypeScript
import { Attributes, TextMapPropagator } from '@opentelemetry/api';
import { CoralogixDomainsApiUrlMap } from './constants';
import { CoralogixLogSeverity } from './types-external';
import { ErrorSource } from './instrumentations/CoralogixErrorInstrumentation';
import { FetchSource } from './instrumentations/network/CoralogixFetchInstrumentation';
import { XHRSource } from './instrumentations/network/CoralogixXhrInstrumentation';
import { LogSource } from './instrumentations/CoralogixCustomLogInstrumentation';
import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
import { CoralogixUserInteractionInstrumentationConfig } from './instrumentations/user-interaction/CoralogixUserInteractionInstrumentation';
import { Metric } from 'web-vitals/attribution';
import { CoralogixWebVitalsInstrumentationConfig } from './instrumentations/instrumentation.model';
import { SessionConfig, SessionRecordingConfig } from './session/session.model';
import { CoralogixInternalEvent } from './instrumentations/CoralogixInternalInstrumentation';
import { SnapshotContext } from './snapshot/snapshot.model';
import { MetricWithAttribution } from 'web-vitals';
import { MemoryUsageContext } from './instrumentations/memory-usage';
import { MFEMetadata } from './mfe/mfe.types';
import { UrlBasedLabelProvider } from './label-providers/url-based-label-provider';
import { CustomTracer, CustomTracerIgnoredInstruments } from './custom-spans';
import { TraceExporterData } from './traces-exporter/traces-exporter.types';
export interface CxStackFrame extends Partial<MFEMetadata> {
fileName?: string;
columnNumber?: number;
lineNumber?: number;
functionName?: string;
isShell?: boolean;
}
export interface GlobalTTIHandler {
e: PerformanceEntryList;
o?: PerformanceObserver;
}
export interface CoralogixWindow {
__tti: GlobalTTIHandler;
CoralogixRum: CoralogixOtelWebType;
}
export declare enum CoralogixEventType {
ERROR = "error",
NETWORK_REQUEST = "network-request",
LOG = "log",
USER_INTERACTION = "user-interaction",
WEB_VITALS = "web-vitals",
LONG_TASK = "longtask",
RESOURCES = "resources",
INTERNAL = "internal",
DOM = "dom",
CUSTOM_MEASUREMENT = "custom-measurement",
MEMORY_USAGE = "memory-usage",
SCREENSHOT = "screenshot",
CUSTOM_SPAN = "custom-span",
WORKER = "web-worker"
}
export declare enum PerformanceTypes {
Resource = "resource",
LongTask = "longtask",
Navigation = "navigation",
SoftNavigation = "soft-navigation"
}
export type CustomMeasurementData = number;
export type WebVitalsRating = 'good' | 'needs-improvement' | 'poor';
export type CoralogixDomain = keyof typeof CoralogixDomainsApiUrlMap;
export type CoralogixRumLabels = Record<string, any>;
export interface UserContextConfig {
user_id: string;
user_name: string;
user_email?: string;
user_metadata?: {
[key: string]: any;
};
}
export interface CustomTargetElement extends HTMLElement {
type: string;
value: string;
}
export interface ScreenshotContext {
id: string;
description?: string;
}
export interface ApplicationContextConfig {
application: string;
version: string;
}
export interface TraceHeaderConfiguration {
enabled: boolean;
options?: {
propagateTraceHeaderCorsUrls?: Array<string | RegExp>;
allowedTracingUrls?: Array<string | RegExp>;
propagateAwsXrayTraceHeader?: boolean;
propagateB3TraceHeader?: {
singleHeader?: boolean;
multiHeader?: boolean;
};
propagateCustomTraceHeader?: TextMapPropagator;
};
}
export interface CoralogixOtelWebOptionsInstrumentations {
errors?: boolean;
fetch?: boolean;
xhr?: boolean;
custom?: boolean;
long_tasks?: boolean;
resources?: boolean;
interactions?: boolean | CoralogixUserInteractionInstrumentationConfig;
web_vitals?: boolean | CoralogixWebVitalsInstrumentationConfig;
}
interface SendLog {
log: (severity: CoralogixLogSeverity, message: string, data?: any, labels?: CoralogixRumLabels) => void;
debug: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
verbose: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
info: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
warn: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
error: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
critical: (message: string, data?: any, labels?: CoralogixRumLabels) => void;
}
export type UrlBlueprinter = (url: string) => string;
export interface UrlBlueprinters {
pageUrlBlueprinters?: UrlBlueprinter[];
networkUrlBlueprinters?: UrlBlueprinter[];
}
export interface MemoryUsageConfig {
enabled: boolean;
interval?: number;
}
export type BeforeSendResult = EditableCxRumEvent | null | undefined;
export interface NetworkExtraConfig {
url: string | RegExp;
reqHeaders?: string[];
resHeaders?: string[];
collectReqPayload?: boolean;
collectResPayload?: boolean;
}
export interface CoralogixBrowserSdkConfig {
public_key?: string;
application: string;
coralogixDomain: CoralogixDomain;
version: string;
user_context?: UserContextConfig;
debug?: boolean;
labels?: CoralogixRumLabels;
ignoreUrls?: Array<string | RegExp>;
ignoreErrors?: Array<string | RegExp>;
instrumentations?: CoralogixOtelWebOptionsInstrumentations;
traceParentInHeader?: TraceHeaderConfiguration;
environment?: string;
stringifyCustomLogData?: boolean;
urlBlueprinters?: UrlBlueprinters;
sessionRecordingConfig?: SessionRecordingConfig;
sessionConfig?: SessionConfig;
labelProviders?: Array<LabelProvider>;
sessionSampleRate?: number;
maskInputTypes?: InputType[];
maskClass?: string | RegExp;
beforeSend?: (event: EditableCxRumEvent) => BeforeSendResult;
proxyUrl?: string;
ignoreProxyUrlParams?: boolean;
collectIPData?: boolean;
trackSoftNavigations?: boolean;
memoryUsageConfig?: MemoryUsageConfig;
networkExtraConfig?: NetworkExtraConfig[];
supportMfe?: boolean;
workerSupport?: boolean;
tracesExporter?: (data: TraceExporterData) => void;
}
export interface CoralogixOtelWebType extends SendLog {
init: (options: CoralogixBrowserSdkConfig) => void;
shutdown: () => void;
setLabels: (labels: CoralogixRumLabels) => void;
getLabels: () => CoralogixRumLabels;
setUserContext: (userContext: UserContextConfig) => void;
setApplicationContext: (applicationContext: ApplicationContextConfig) => void;
captureError: (error: Error, customData?: unknown, labels?: CoralogixRumLabels) => void;
sendCustomMeasurement: (name: string, value: CustomMeasurementData) => void;
addTiming: (name: string, duration?: number) => void;
measureUserAgentSpecificMemory: () => void;
getUserContext: () => UserContextConfig | undefined;
getSessionId: () => string | undefined;
stopSessionRecording: () => void;
startSessionRecording: () => void;
screenshot: (description?: string) => string | undefined;
startTimeMeasure: (name: string, labels?: CoralogixRumLabels) => void;
endTimeMeasure: (name: string) => void;
getCustomTracer: (ignoredList?: {
ignoredInstruments: CustomTracerIgnoredInstruments[];
}) => CustomTracer | undefined;
readonly isInited: boolean;
}
export interface ErrorContext {
error_type?: string;
error_message?: string;
error_custom_data?: unknown;
original_stacktrace?: CxStackFrame[];
}
export interface LogContext {
message: string;
data?: any;
}
export interface InternalContext {
event: CoralogixInternalEvent;
data?: any;
}
export interface NetworkRequestContext {
method: string;
status_code: number;
url: string;
url_blueprint: string;
fragments: string;
host: string;
schema: string;
status_text: string;
response_content_length: string;
duration: number;
source: EventSource;
request_headers?: Map<string, string>;
response_headers?: Map<string, string>;
response_payload?: string;
request_payload?: string;
}
export interface InteractionContext {
target_element: string;
target_element_inner_text: string;
target_element_type: string;
event_name: string;
element_id: string;
element_classes: string;
}
export interface LongTaskContext extends Omit<PerformanceEntry, 'toJSON'> {
id: string;
}
export interface WebVitalsContext extends Metric {
attribution?: MetricWithAttribution;
}
export interface ResourceContext extends Omit<PerformanceResourceTiming, 'toJSON'> {
responseStatus?: number;
deliveryType?: string;
firstInterimResponseStart?: number;
renderBlockingStatus?: string;
fragments: string;
}
export interface CustomMeasurementContext {
name: string;
value: CustomMeasurementData;
}
export interface EventTypeContext {
error_context?: ErrorContext;
log_context?: LogContext;
internal_context?: InternalContext;
network_request_context?: NetworkRequestContext;
interaction_context?: InteractionContext;
web_vitals_context?: WebVitalsContext;
longtask_context?: LongTaskContext;
resource_context?: ResourceContext;
snapshot_context?: SnapshotContext;
custom_measurement_context?: CustomMeasurementContext;
screenshot_context?: ScreenshotContext;
memory_usage_context?: MemoryUsageContext;
}
export interface UserMetadata {
user_id: string;
user_name?: string;
user_email?: string;
user_metadata?: {
[key: string]: any;
};
}
export interface SessionContext extends UserMetadata {
session_id: string;
session_creation_date: number;
prev_session?: {
session_id: string;
session_creation_date: number;
hasRecording: boolean;
hasScreenshot: boolean;
};
user_agent: string;
browser?: Browser;
browserVersion: string;
os: OS;
osVersion: string;
device: Device;
hasRecording: boolean;
hasScreenshot: boolean;
hasError?: boolean;
onlyWithErrorMode: boolean;
}
export type EventSource = ErrorSource | FetchSource | XHRSource | LogSource;
export interface EventContext {
type: CoralogixEventType;
source: EventSource;
severity: CoralogixLogSeverity;
}
interface SpanContext {
readonly spanId: string;
readonly traceId: string;
sessionId: string;
}
interface OtelResource {
attributes: Attributes;
}
interface InstrumentationData {
otelSpan: Partial<ReadableSpan> & SpanContext;
otelResource: OtelResource;
}
interface VersionMetaData {
app_name: string;
app_version: string;
}
export interface PageContext {
page_url: string;
page_url_blueprint: string;
page_fragments: string;
referrer: string;
}
export interface CxRumEvent extends EventTypeContext {
browser_sdk: {
version: string;
};
platform: 'browser';
version_metadata: VersionMetaData;
session_context: SessionContext;
page_context: PageContext;
event_context: EventContext;
isNavigationEvent: boolean;
labels: CoralogixRumLabels;
spanId?: string;
traceId?: string;
parentSpanId?: string;
environment: string;
timestamp: number;
isSnapshotEvent?: boolean;
screenshot_context?: ScreenshotContext;
screenshotId?: string;
fingerPrint: string;
}
export interface CxSpan {
version_metadata: VersionMetaData;
applicationName: string;
subsystemName: string;
timestamp: number;
severity: CoralogixLogSeverity;
isErrorWithStacktrace: boolean;
instrumentation_data?: InstrumentationData;
text: {
cx_rum: CxRumEvent;
};
}
export interface Session {
sessionId: string;
sessionCreationDate: number;
sessionExpirationDate: number;
}
export interface PrevSession extends Session {
hasRecording: boolean;
hasScreenshot: boolean;
}
export declare enum OtelNetworkAttrs {
METHOD = "http.method",
URL = "http.url",
STATUS_CODE = "http.status_code",
HOST = "http.host",
SCHEME = "http.scheme",
STATUS_TEXT = "http.status_text",
RESPONSE_CONTENT_LENGTH = "http.response_content_length"
}
export type Browser = 'Chrome' | 'Edge' | 'Firefox' | 'Safari' | 'Opera' | 'IE' | 'Unknown';
export type OS = 'Windows' | 'MacOS' | 'Linux' | 'iOS' | 'Android' | 'Tizen' | 'webOS' | 'Unknown';
export type Device = 'Mobile' | 'Tablet' | 'Desktop' | 'Smart-TV' | 'Unknown';
export type UserAgentData = {
browser: Browser;
browserVersion: string;
os: OS;
osVersion: string;
device: Device;
};
export type EventName = keyof HTMLElementEventMap;
export interface PatternReplacement {
pattern: RegExp;
replacement: string;
}
export declare enum UrlType {
PAGE = "page",
NETWORK_REQUEST = "network_request"
}
export type LabelProviderLabels = Record<string, string | undefined>;
export interface GenericLabelProvider {
urlType?: UrlType;
providerFunc: (url: string, event: CxRumEvent) => LabelProviderLabels;
}
export type LabelProvider = UrlBasedLabelProvider | GenericLabelProvider;
export type InputType = 'button' | 'checkbox' | 'color' | 'date' | 'datetime-local' | 'email' | 'file' | 'hidden' | 'image' | 'month' | 'number' | 'password' | 'radio' | 'range' | 'reset' | 'search' | 'submit' | 'tel' | 'text' | 'time' | 'url' | 'week';
export interface EditableCxRumEvent extends Omit<CxRumEvent, 'session_context' | 'browser_sdk' | 'timestamp'> {
session_context: Pick<SessionContext, keyof UserMetadata>;
}
interface BrowserCompatibility {
name: Browser;
minVersion: number;
}
export interface InstrumentationCompatibility {
browsers: BrowserCompatibility[];
warningText: string;
}
export {};