@loggerjs/browser API
Generated from packages/browser/dist/**/*.d.ts. Source report: api-reports/loggerjs-browser.api.md.
broadcast-channel-transport.d.ts
ts
import { type LogEvent, type LoggerLevel, type Transport } from "@loggerjs/core";
export interface BrowserBroadcastChannelLike {
postMessage: (message: unknown) => void;
close?: () => void;
}
export type BrowserBroadcastChannelFactory = (channelName: string) => BrowserBroadcastChannelLike;
export interface BrowserBroadcastChannelEventMessage {
type: "loggerjs.event";
source: string;
event: LogEvent;
}
export interface BrowserBroadcastChannelBatchMessage {
type: "loggerjs.batch";
source: string;
events: readonly LogEvent[];
}
export type BrowserBroadcastChannelMessage = BrowserBroadcastChannelEventMessage | BrowserBroadcastChannelBatchMessage;
export interface BrowserBroadcastChannelMapContext {
channelName: string;
source: string;
}
export interface BrowserBroadcastChannelErrorDetail {
operation: "create-channel" | "post-message" | "close-channel" | "on-error";
droppedEvents: number;
}
export interface BrowserBroadcastChannelTransportOptions {
channelName: string;
name?: string;
source?: string;
minLevel?: LoggerLevel;
channelFactory?: BrowserBroadcastChannelFactory;
closeChannelOnClose?: boolean;
mapEvent?: (event: LogEvent, context: BrowserBroadcastChannelMapContext) => unknown;
mapBatch?: (events: readonly LogEvent[], context: BrowserBroadcastChannelMapContext) => unknown;
onError?: (error: unknown, detail: BrowserBroadcastChannelErrorDetail) => void;
}
export declare function browserBroadcastChannelTransport(options: BrowserBroadcastChannelTransportOptions): Transport;console-integration.d.ts
ts
import { type Integration } from "@loggerjs/core";
type ConsoleLevel = "debug" | "info" | "log" | "trace" | "warn" | "error";
export interface CaptureConsoleOptions {
levels?: ConsoleLevel[];
preserveConsole?: boolean;
captureArguments?: boolean;
maxCapturesPerSecond?: number;
}
export declare function captureConsoleIntegration(options?: CaptureConsoleOptions): Integration;
export {};context-propagation-integration.d.ts
ts
import { type Baggage, type Integration, type TraceContext } from "@loggerjs/core";
export type BrowserContextActionEventName = "change" | "click" | "input" | "keydown" | "submit";
export interface BrowserContextEventTargetLike {
addEventListener: typeof globalThis.addEventListener;
removeEventListener: typeof globalThis.removeEventListener;
}
export interface BrowserContextPropagationOptions {
sessionId?: string | (() => string | undefined);
requestId?: () => string | undefined;
trace?: TraceContext | (() => TraceContext | undefined);
traceparent?: string | (() => string | undefined);
baggage?: Baggage | string | (() => Baggage | string | undefined);
actionEvents?: readonly BrowserContextActionEventName[];
actionTtlMs?: number;
root?: BrowserContextEventTargetLike;
clock?: () => number;
idFactory?: () => string;
}
export declare function browserContextPropagationIntegration(options?: BrowserContextPropagationOptions): Integration;error-integration.d.ts
ts
import { type Integration } from "@loggerjs/core";
export interface CaptureBrowserErrorsOptions {
captureWindowError?: boolean;
captureUnhandledRejection?: boolean;
captureResourceErrors?: boolean;
captureSecurityPolicyViolation?: boolean;
scriptErrorDedupeWindowMs?: number;
}
export declare function captureBrowserErrorsIntegration(options?: CaptureBrowserErrorsOptions): Integration;fetch-integration.d.ts
ts
import { type Integration } from "@loggerjs/core";
export interface CaptureFetchOptions {
minStatus?: number;
captureRequestHeaders?: readonly string[];
captureResponseHeaders?: readonly string[];
captureAll?: boolean;
captureSuccessful?: boolean;
sampleRate?: number;
random?: () => number;
sanitizeUrl?: (url: string) => string;
}
export declare function captureFetchIntegration(options?: CaptureFetchOptions): Integration;framework-error-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export type BrowserFrameworkName = "angular" | "react" | "solid" | "svelte" | "vue" | string;
export interface BrowserFrameworkErrorInfo {
framework?: BrowserFrameworkName;
componentName?: string;
componentStack?: string;
info?: unknown;
props?: Record<string, unknown>;
[key: string]: unknown;
}
export interface CaptureFrameworkErrorsOptions {
name?: string;
framework?: BrowserFrameworkName;
level?: LoggerLevel;
maxPending?: number;
infoMaxDepth?: number;
getMessage?: (error: unknown, info: BrowserFrameworkErrorInfo) => string;
}
export interface BrowserFrameworkErrorIntegration extends Integration {
capture: (error: unknown, info?: BrowserFrameworkErrorInfo | string) => void;
reactComponentDidCatch: (error: unknown, errorInfo?: {
componentStack?: string;
}) => void;
vueErrorHandler: (error: unknown, instance?: unknown, info?: string) => void;
solidErrorHandler: (error: unknown) => void;
svelteErrorHandler: (error: unknown, info?: BrowserFrameworkErrorInfo | string) => void;
}
export declare function captureFrameworkErrorsIntegration(options?: CaptureFrameworkErrorsOptions): BrowserFrameworkErrorIntegration;framework-router-integrations.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export interface FrameworkRouterIntegrationOptions {
level?: LoggerLevel;
sanitizeUrl?: (url: string) => string;
includeState?: boolean;
}
export interface NextRouterLike {
asPath?: string;
events?: {
on?: (event: string, listener: (url: string) => void) => void;
off?: (event: string, listener: (url: string) => void) => void;
};
}
export interface ReactRouterHistoryLike {
location?: unknown;
listen?: (listener: (update: unknown) => void) => void | (() => void);
}
export interface VueRouterLike {
currentRoute?: unknown;
afterEach?: (listener: (to: unknown, from: unknown) => void) => void | (() => void);
}
export interface NextRouterIntegrationOptions extends FrameworkRouterIntegrationOptions {
router: NextRouterLike;
}
export interface ReactRouterIntegrationOptions extends FrameworkRouterIntegrationOptions {
history: ReactRouterHistoryLike;
}
export interface VueRouterIntegrationOptions extends FrameworkRouterIntegrationOptions {
router: VueRouterLike;
framework?: "vue-router" | "nuxt";
}
export declare function nextRouterIntegration(options: NextRouterIntegrationOptions): Integration;
export declare function reactRouterIntegration(options: ReactRouterIntegrationOptions): Integration;
export declare function vueRouterIntegration(options: VueRouterIntegrationOptions): Integration;
export declare function nuxtRouterIntegration(options: Omit<VueRouterIntegrationOptions, "framework">): Integration;http-capture-utils.d.ts
ts
export declare function nowMs(): number;
export declare function durationMs(started: number): number;
export declare function sanitizeHttpUrl(rawUrl: string, sanitizer?: (url: string) => string): string;
export declare function pickAllowedHeaders(headers: Headers | undefined, allowList: readonly string[] | undefined): Record<string, string> | undefined;
export declare function headersFromInit(headers: HeadersInit | undefined): Headers | undefined;
export declare function shouldSample(sampleRate: number, random: () => number): boolean;http-transport.d.ts
ts
import { type Codec, type LogEvent, type LoggerLevel, type PayloadTransform, type Transport } from "@loggerjs/core";
export type BrowserHttpDropPolicy = "drop-oldest" | "drop-newest";
export interface BrowserHttpOfflineEntry {
id: string;
url: string;
method: "POST" | "PUT";
headers: Record<string, string>;
body: string | Uint8Array;
credentials?: RequestCredentials;
keepalive: boolean;
createdAt: number;
}
export interface BrowserHttpOfflineQueue {
enqueue: (entry: BrowserHttpOfflineEntry) => void | Promise<void>;
replay: (send: (entry: BrowserHttpOfflineEntry) => Promise<void>) => void | Promise<void>;
}
export interface MemoryBrowserHttpOfflineQueueOptions {
maxEntries?: number;
dropPolicy?: BrowserHttpDropPolicy;
onDrop?: (entry: BrowserHttpOfflineEntry, reason: string) => void;
}
export interface BrowserHttpTransportOptions {
url: string;
name?: string;
method?: "POST" | "PUT";
headers?: Record<string, string>;
credentials?: RequestCredentials;
keepalive?: boolean;
codec?: Codec<string | Uint8Array>;
minLevel?: LoggerLevel;
maxBatchSize?: number;
flushIntervalMs?: number;
maxQueueSize?: number;
dropPolicy?: BrowserHttpDropPolicy;
useBeaconOnPageHide?: boolean;
beaconMaxBytes?: number;
offlineQueue?: BrowserHttpOfflineQueue;
offlineReplayMaxRetries?: number;
offlineReplayBaseDelayMs?: number;
offlineReplayMaxDelayMs?: number;
random?: () => number;
fetchFn?: typeof fetch;
transformPayload?: PayloadTransform | readonly PayloadTransform[];
onDrop?: (event: LogEvent, reason: string) => void;
}
export declare function memoryBrowserHttpOfflineQueue(options?: MemoryBrowserHttpOfflineQueueOptions): BrowserHttpOfflineQueue & {
size: () => number;
};
export declare function browserHttpTransport(options: BrowserHttpTransportOptions): Transport;index.d.ts
ts
export * from "@loggerjs/core";
export * from "./broadcast-channel-transport.js";
export * from "./http-transport.js";
export * from "./payload-transforms.js";
export * from "./service-worker-transport.js";
export * from "./websocket-transport.js";
export * from "./indexeddb-offline-queue.js";
export * from "./indexeddb-transport.js";
export * from "./offline-first-transport.js";
export * from "./zip-export.js";
export * from "./console-integration.js";
export * from "./context-propagation-integration.js";
export * from "./error-integration.js";
export * from "./fetch-integration.js";
export * from "./xhr-integration.js";
export * from "./framework-error-integration.js";
export * from "./framework-router-integrations.js";
export * from "./reporting-integration.js";
export * from "./router-integration.js";
export * from "./runtime-host-integration.js";
export * from "./service-worker-integration.js";
export * from "./user-action-integration.js";
export * from "./websocket-integration.js";
export * from "./web-vitals-integration.js";
export * from "./performance-integration.js";
export * from "./page-lifecycle.js";indexeddb-offline-queue.d.ts
ts
import type { BrowserHttpDropPolicy, BrowserHttpOfflineEntry, BrowserHttpOfflineQueue } from "./http-transport.js";
export interface IndexedDbBrowserHttpOfflineQueueOptions {
dbName?: string;
storeName?: string;
maxEntries?: number;
dropPolicy?: BrowserHttpDropPolicy;
indexedDB?: IDBFactory;
onDrop?: (entry: BrowserHttpOfflineEntry, reason: string) => void;
}
export interface IndexedDbBrowserHttpOfflineQueue extends BrowserHttpOfflineQueue {
size: () => Promise<number>;
clear: () => Promise<void>;
close: () => void;
}
export declare function indexedDbBrowserHttpOfflineQueue(options?: IndexedDbBrowserHttpOfflineQueueOptions): IndexedDbBrowserHttpOfflineQueue;indexeddb-transport.d.ts
ts
import { type Codec, type LogEvent, type LoggerLevel, type Transport } from "@loggerjs/core";
import type { BrowserHttpDropPolicy } from "./http-transport.js";
export interface IndexedDbLogEntry {
id: string;
sessionId?: string;
seq: number;
createdAt: number;
level: number;
levelName: string;
logger: string;
type?: string;
byteLength: number;
payload: string | Uint8Array;
}
export interface IndexedDbTransportQueryOptions {
from?: number;
to?: number;
sessionId?: string;
minLevel?: LoggerLevel;
logger?: string;
type?: string;
limit?: number;
order?: "asc" | "desc";
}
export type IndexedDbTransportDurability = "default" | "strict" | "relaxed";
export type IndexedDbStorageBucketDurability = "strict" | "relaxed";
export interface IndexedDbTransportSessionOptions {
id?: string;
getId?: (event: LogEvent) => string | undefined;
contextKey?: string;
}
export type IndexedDbTransportSession = string | false | IndexedDbTransportSessionOptions;
export interface IndexedDbLogSession {
sessionId: string;
firstSeen: number;
lastSeen: number;
count: number;
byteLength: number;
}
export interface IndexedDbTransportSessionQueryOptions {
limit?: number;
order?: "asc" | "desc";
}
export interface IndexedDbLocalStorageSpillOptions {
namespace?: string;
maxEntries?: number;
maxBytes?: number;
maxOriginBytes?: number;
minLevel?: LoggerLevel;
drainOnCreate?: boolean;
spillOnPageHide?: boolean;
storage?: Storage;
onDrop?: (event: LogEvent, reason: string) => void;
}
export interface IndexedDbTransportStats {
bufferDepth: number;
maxBufferDepth: number;
pendingFlush: boolean;
enqueued: number;
persisted: number;
dropped: number;
droppedByReason: Record<string, number>;
persistedDropped: number;
persistedDroppedByReason: Record<string, number>;
flushes: number;
flushErrors: number;
lastFlushBatchSize: number;
lastFlushDurationMs: number;
prunes: number;
pruneFallbacks: number;
lastPruneDurationMs: number;
queries: number;
queryFallbacks: number;
lastQueryDurationMs: number;
databaseOpenCount: number;
storageBucketFallbacks: number;
transactionOptionFallbacks: number;
errors: number;
errorsByOperation: Record<string, number>;
localStorageSpillWrites: number;
localStorageSpillEntries: number;
localStorageSpillDrains: number;
localStorageSpillDrainedEntries: number;
localStorageSpillDropped: number;
localStorageSpillDroppedByReason: Record<string, number>;
localStorageSpillErrors: number;
localStorageSpillErrorsByOperation: Record<string, number>;
}
export interface IndexedDbTransportOptions {
name?: string;
dbName?: string;
storeName?: string;
maxEntries?: number;
maxBytes?: number;
ttlMs?: number;
batchSize?: number;
flushIntervalMs?: number;
maxBufferSize?: number;
dropPolicy?: BrowserHttpDropPolicy;
flushOnPageHide?: boolean;
codec?: Codec<string | Uint8Array>;
minLevel?: LoggerLevel;
durability?: IndexedDbTransportDurability;
storageBucketName?: string;
storageBucketPersisted?: boolean;
storageBucketDurability?: IndexedDbStorageBucketDurability;
session?: IndexedDbTransportSession;
localStorageSpill?: false | IndexedDbLocalStorageSpillOptions;
indexedDB?: IDBFactory;
onDrop?: (event: LogEvent, reason: string) => void;
onPersistedDrop?: (entry: IndexedDbLogEntry, reason: string) => void;
}
export interface IndexedDbTransport extends Transport {
count: () => Promise<number>;
clear: () => Promise<void>;
remove: (ids: string | readonly string[]) => Promise<void>;
query: (options?: IndexedDbTransportQueryOptions) => AsyncIterable<LogEvent>;
sessions: (options?: IndexedDbTransportSessionQueryOptions) => Promise<IndexedDbLogSession[]>;
stats: () => IndexedDbTransportStats;
}
export declare function indexedDbTransport(options?: IndexedDbTransportOptions): IndexedDbTransport;offline-first-transport.d.ts
ts
import { type LogEvent, type LoggerLevel, type RetryTransportOptions, type Transport, type TransportContext } from "@loggerjs/core";
import { type IndexedDbTransportOptions, type IndexedDbTransportQueryOptions } from "./indexeddb-transport.js";
export interface OfflineFirstQueue {
log: (event: LogEvent, context: TransportContext) => void | Promise<void>;
flush?: () => void | Promise<void>;
query: (options?: IndexedDbTransportQueryOptions) => AsyncIterable<LogEvent>;
remove: (ids: string | readonly string[]) => Promise<void>;
count?: () => Promise<number>;
clear?: () => Promise<void>;
close?: () => void | Promise<void>;
}
export interface OfflineFirstTransportOptions {
name?: string;
minLevel?: LoggerLevel;
queue?: OfflineFirstQueue;
queueOptions?: IndexedDbTransportOptions;
replayBatchSize?: number;
replayOnOnline?: boolean;
online?: () => boolean;
retry?: RetryTransportOptions;
onQueued?: (event: LogEvent, error?: unknown) => void;
onReplayed?: (events: readonly LogEvent[]) => void;
}
export interface OfflineFirstTransport extends Transport {
replay: () => Promise<void>;
queuedCount: () => Promise<number | undefined>;
clearQueue: () => Promise<void>;
queue: OfflineFirstQueue;
}
export declare function offlineFirstTransport(remote: Transport, options?: OfflineFirstTransportOptions): OfflineFirstTransport;page-lifecycle.d.ts
ts
import type { Integration } from "@loggerjs/core";
export interface PageLifecycleOptions {
flushOnPageHide?: boolean;
flushOnHidden?: boolean;
coalesceMs?: number;
}
export declare function pageLifecycleIntegration(options?: PageLifecycleOptions): Integration;payload-transforms.d.ts
ts
import { type PayloadTransform, type PayloadTransformContext } from "@loggerjs/core";
export type BrowserCompressionFormat = "gzip" | "deflate";
export interface BrowserCompressionPayloadTransformOptions {
format?: BrowserCompressionFormat;
headers?: Record<string, string>;
compress?: (payload: Uint8Array, context: PayloadTransformContext & {
format: BrowserCompressionFormat;
}) => Uint8Array | Promise<Uint8Array>;
streamFactory?: (format: BrowserCompressionFormat) => CompressionStream;
}
export declare function browserCompressionPayloadTransform(options?: BrowserCompressionPayloadTransformOptions): PayloadTransform;performance-integration.d.ts
ts
import type { Integration, LoggerLevel } from "@loggerjs/core";
export type BrowserPerformanceEntryType = "element" | "event" | "longtask" | "mark" | "measure" | "navigation" | "paint" | "resource" | string;
export interface BrowserPerformanceEntryPayload {
name: string;
entryType: string;
startTime: number;
duration: number;
initiatorType?: string;
nextHopProtocol?: string;
renderBlockingStatus?: string;
responseStatus?: number;
transferSize?: number;
encodedBodySize?: number;
decodedBodySize?: number;
workerStart?: number;
redirectStart?: number;
redirectEnd?: number;
fetchStart?: number;
domainLookupStart?: number;
domainLookupEnd?: number;
connectStart?: number;
connectEnd?: number;
requestStart?: number;
responseStart?: number;
responseEnd?: number;
detail?: unknown;
}
export interface CapturePerformanceOptions {
entryTypes?: readonly BrowserPerformanceEntryType[];
level?: LoggerLevel | ((entry: BrowserPerformanceEntryPayload) => LoggerLevel);
buffered?: boolean;
emitExisting?: boolean;
maxEntries?: number;
minDurationMs?: number | Partial<Record<string, number>>;
sampleRate?: number;
random?: () => number;
captureDetail?: boolean;
sanitizeName?: (name: string, entryType: string) => string;
ignore?: (entry: BrowserPerformanceEntryPayload) => boolean;
PerformanceObserver?: typeof PerformanceObserver;
performance?: Pick<Performance, "getEntriesByType">;
}
export declare function normalizeBrowserPerformanceEntry(entry: PerformanceEntry, options?: Pick<CapturePerformanceOptions, "captureDetail" | "sanitizeName">): BrowserPerformanceEntryPayload;
export declare function capturePerformanceIntegration(options?: CapturePerformanceOptions): Integration;reporting-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export interface BrowserReportLike {
type?: string;
url?: string;
body?: unknown;
toJSON?: () => unknown;
}
export interface BrowserReportingObserverLike {
observe: () => void;
disconnect: () => void;
takeRecords?: () => BrowserReportLike[];
}
export interface BrowserReportingObserverConstructor {
new (callback: (reports: BrowserReportLike[], observer: BrowserReportingObserverLike) => void, options?: {
buffered?: boolean;
types?: readonly string[];
}): BrowserReportingObserverLike;
}
export interface BrowserReportPayload {
type: string;
url?: string;
body?: unknown;
}
export interface BrowserCspViolationPayload {
type: "securitypolicyviolation";
blockedURI?: string;
documentURI?: string;
effectiveDirective?: string;
violatedDirective?: string;
disposition?: string;
sourceFile?: string;
lineNumber?: number;
columnNumber?: number;
statusCode?: number;
sample?: string;
}
export interface CaptureReportingOptions {
captureSecurityPolicyViolation?: boolean;
captureReportingObserver?: boolean;
reportTypes?: readonly string[];
level?: LoggerLevel | ((report: BrowserReportPayload | BrowserCspViolationPayload) => LoggerLevel);
buffered?: boolean;
sanitizeUrl?: (url: string) => string;
ReportingObserver?: BrowserReportingObserverConstructor;
addEventListener?: typeof globalThis.addEventListener;
removeEventListener?: typeof globalThis.removeEventListener;
}
export declare function captureReportingIntegration(options?: CaptureReportingOptions): Integration;router-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export interface BrowserHistoryLike {
state?: unknown;
pushState?: (data: unknown, unused: string, url?: string | URL | null) => unknown;
replaceState?: (data: unknown, unused: string, url?: string | URL | null) => unknown;
}
export interface BrowserLocationLike {
href?: string;
pathname?: string;
search?: string;
hash?: string;
}
export type BrowserRouteTrigger = "initial" | "pushState" | "replaceState" | "popstate" | "hashchange";
export type BrowserRouteUrlMode = "path" | "href";
export interface BrowserRouteChangePayload {
trigger: BrowserRouteTrigger;
from?: string;
to: string;
state?: unknown;
}
export interface CaptureRouterOptions {
level?: LoggerLevel;
captureInitial?: boolean;
includeState?: boolean;
stateMaxDepth?: number;
urlMode?: BrowserRouteUrlMode;
sanitizeUrl?: (url: string) => string;
history?: BrowserHistoryLike;
location?: BrowserLocationLike;
addEventListener?: typeof globalThis.addEventListener;
removeEventListener?: typeof globalThis.removeEventListener;
}
export declare function captureRouterIntegration(options?: CaptureRouterOptions): Integration;runtime-host-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export interface BrowserExtensionEventLike<TListener extends (...args: never[]) => unknown> {
addListener?: (listener: TListener) => void;
removeListener?: (listener: TListener) => void;
}
export interface BrowserExtensionRuntimeLike {
id?: string;
getManifest?: () => {
name?: string;
version?: string;
};
onMessage?: BrowserExtensionEventLike<(message: unknown, sender?: BrowserExtensionMessageSenderLike) => unknown>;
onInstalled?: BrowserExtensionEventLike<(details: unknown) => void>;
}
export interface BrowserExtensionMessageSenderLike {
id?: string;
origin?: string;
url?: string;
tab?: {
id?: number;
url?: string;
};
}
export interface ElectronIpcRendererLike {
on?: (channel: string, listener: (...args: unknown[]) => void) => unknown;
off?: (channel: string, listener: (...args: unknown[]) => void) => unknown;
removeListener?: (channel: string, listener: (...args: unknown[]) => void) => unknown;
send?: (channel: string, ...args: unknown[]) => void;
invoke?: (channel: string, ...args: unknown[]) => Promise<unknown>;
}
export interface CaptureRuntimeHostOptions {
level?: LoggerLevel;
captureExtensionMessages?: boolean;
captureExtensionInstalled?: boolean;
captureExtensionMessageData?: boolean;
captureElectronMessages?: boolean;
captureElectronSend?: boolean;
captureElectronInvoke?: boolean;
captureElectronMessageData?: boolean;
electronChannels?: readonly string[];
extensionRuntime?: BrowserExtensionRuntimeLike;
ipcRenderer?: ElectronIpcRendererLike;
sanitizeUrl?: (url: string) => string;
}
export declare function captureRuntimeHostIntegration(options?: CaptureRuntimeHostOptions): Integration;service-worker-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
export interface BrowserServiceWorkerControllerLike {
scriptURL?: string;
state?: string;
}
export interface BrowserServiceWorkerContainerEventsLike {
controller?: BrowserServiceWorkerControllerLike | null;
addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;
removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;
}
export interface BrowserServiceWorkerMessagePayload {
dataType: string;
byteLength?: number;
data?: unknown;
origin?: string;
lastEventId?: string;
}
export interface CaptureServiceWorkerOptions {
level?: LoggerLevel;
captureControllerChange?: boolean;
captureMessages?: boolean;
captureMessageErrors?: boolean;
captureMessageData?: boolean;
serviceWorker?: BrowserServiceWorkerContainerEventsLike;
sanitizeUrl?: (url: string) => string;
}
export declare function captureServiceWorkerIntegration(options?: CaptureServiceWorkerOptions): Integration;service-worker-transport.d.ts
ts
import { type LogEvent, type LoggerLevel, type Transport } from "@loggerjs/core";
export type BrowserServiceWorkerDropPolicy = "drop-oldest" | "drop-newest";
export type BrowserServiceWorkerTarget = "controller" | "ready";
export interface BrowserServiceWorkerLike {
postMessage: (message: unknown, transfer?: Transferable[] | StructuredSerializeOptions) => void;
}
export interface BrowserServiceWorkerRegistrationLike {
active?: BrowserServiceWorkerLike | null;
waiting?: BrowserServiceWorkerLike | null;
installing?: BrowserServiceWorkerLike | null;
}
export interface BrowserServiceWorkerContainerLike {
controller?: BrowserServiceWorkerLike | null;
ready?: Promise<BrowserServiceWorkerRegistrationLike>;
}
export interface BrowserServiceWorkerEventMessage {
type: "loggerjs.event";
source: string;
event: LogEvent;
}
export interface BrowserServiceWorkerBatchMessage {
type: "loggerjs.batch";
source: string;
events: readonly LogEvent[];
}
export type BrowserServiceWorkerMessage = BrowserServiceWorkerEventMessage | BrowserServiceWorkerBatchMessage;
export interface BrowserServiceWorkerMapContext {
source: string;
target: BrowserServiceWorkerTarget;
}
export interface BrowserServiceWorkerTransportOptions {
name?: string;
minLevel?: LoggerLevel;
source?: string;
target?: BrowserServiceWorkerTarget;
serviceWorker?: BrowserServiceWorkerContainerLike;
maxQueueSize?: number;
dropPolicy?: BrowserServiceWorkerDropPolicy;
transfer?: (message: unknown) => Transferable[] | StructuredSerializeOptions | undefined;
mapEvent?: (event: LogEvent, context: BrowserServiceWorkerMapContext) => unknown;
mapBatch?: (events: readonly LogEvent[], context: BrowserServiceWorkerMapContext) => unknown;
onDrop?: (event: LogEvent, reason: string) => void;
onError?: (error: unknown, detail: {
operation: string;
droppedEvents: number;
}) => void;
}
export declare function browserServiceWorkerTransport(options?: BrowserServiceWorkerTransportOptions): Transport & {
queueSize: () => number;
};user-action-integration.d.ts
ts
import type { Integration, LoggerLevel } from "@loggerjs/core";
export type BrowserUserActionEventName = "change" | "click" | "dblclick" | "input" | "keydown" | "submit";
export interface BrowserUserActionTarget {
tagName?: string;
id?: string;
name?: string;
role?: string;
type?: string;
href?: string;
label?: string;
text?: string;
value?: string;
}
export interface BrowserUserActionPayload {
type: BrowserUserActionEventName | string;
target: BrowserUserActionTarget;
}
export interface BrowserEventTargetLike {
addEventListener: typeof globalThis.addEventListener;
removeEventListener: typeof globalThis.removeEventListener;
}
export interface CaptureUserActionsOptions {
events?: readonly BrowserUserActionEventName[];
level?: LoggerLevel;
listenerCapture?: boolean;
throttleMs?: number;
captureText?: boolean;
captureValue?: boolean;
maxTextLength?: number;
labelAttributes?: readonly string[];
root?: BrowserEventTargetLike;
clock?: () => number;
sanitize?: (value: string, field: keyof BrowserUserActionTarget) => string;
ignore?: (event: Event, target: BrowserUserActionTarget) => boolean;
}
export declare function captureUserActionsIntegration(options?: CaptureUserActionsOptions): Integration;web-vitals-integration.d.ts
ts
import type { Integration, LoggerLevel } from "@loggerjs/core";
export type WebVitalName = "CLS" | "FCP" | "INP" | "LCP" | "TTFB";
export type WebVitalRating = "good" | "needs-improvement" | "poor";
export interface WebVitalMetric {
name: WebVitalName;
value: number;
delta: number;
rating: WebVitalRating;
id: string;
final: boolean;
}
export interface CaptureWebVitalsOptions {
metrics?: readonly WebVitalName[];
level?: LoggerLevel;
reportAllChanges?: boolean;
flushOnHidden?: boolean;
PerformanceObserver?: typeof PerformanceObserver;
performance?: Pick<Performance, "getEntriesByName" | "getEntriesByType">;
addEventListener?: typeof globalThis.addEventListener;
removeEventListener?: typeof globalThis.removeEventListener;
}
export declare function captureWebVitalsIntegration(options?: CaptureWebVitalsOptions): Integration;websocket-integration.d.ts
ts
import { type Integration, type LoggerLevel } from "@loggerjs/core";
type BrowserWebSocketSendPayload = Parameters<WebSocket["send"]>[0];
export interface BrowserCapturedWebSocketLike {
url?: string;
send?: (data: BrowserWebSocketSendPayload) => void;
close?: (code?: number, reason?: string) => void;
addEventListener?: (type: string, listener: EventListenerOrEventListenerObject) => void;
removeEventListener?: (type: string, listener: EventListenerOrEventListenerObject) => void;
}
export interface BrowserCapturedWebSocketConstructor {
new (url: string | URL, protocols?: string | string[]): BrowserCapturedWebSocketLike;
prototype?: unknown;
CONNECTING?: number;
OPEN?: number;
CLOSING?: number;
CLOSED?: number;
}
export type BrowserWebSocketDirection = "incoming" | "outgoing";
export interface BrowserWebSocketMessagePayload {
direction: BrowserWebSocketDirection;
dataType: string;
byteLength?: number;
data?: unknown;
}
export interface CaptureWebSocketOptions {
level?: LoggerLevel;
captureConnect?: boolean;
captureOpen?: boolean;
captureClose?: boolean;
captureError?: boolean;
captureMessages?: boolean;
captureSentMessages?: boolean;
captureMessageData?: boolean;
sampleRate?: number;
random?: () => number;
sanitizeUrl?: (url: string) => string;
WebSocket?: BrowserCapturedWebSocketConstructor;
}
export declare function captureWebSocketIntegration(options?: CaptureWebSocketOptions): Integration;
export {};websocket-transport.d.ts
ts
import { type Codec, type LogEvent, type LoggerLevel, type Transport } from "@loggerjs/core";
export type BrowserWebSocketDropPolicy = "drop-oldest" | "drop-newest";
export type BrowserWebSocketPayload = string | Uint8Array;
export type BrowserWebSocketEventType = "close" | "error" | "open";
type BrowserWebSocketSendPayload = Parameters<WebSocket["send"]>[0];
export interface BrowserWebSocketLike {
readonly readyState: number;
send: (data: BrowserWebSocketSendPayload) => void;
close: (code?: number, reason?: string) => void;
addEventListener: (type: BrowserWebSocketEventType, listener: (event: Event) => void) => void;
removeEventListener: (type: BrowserWebSocketEventType, listener: (event: Event) => void) => void;
}
export type BrowserWebSocketFactory = (url: string, protocols?: string | string[]) => BrowserWebSocketLike;
export interface BrowserWebSocketErrorDetail {
operation: "close-socket" | "create-socket" | "send" | "socket-error" | "on-error";
droppedEvents: number;
}
export interface BrowserWebSocketTransportOptions {
url: string;
name?: string;
protocols?: string | string[];
minLevel?: LoggerLevel;
codec?: Codec<BrowserWebSocketPayload>;
maxQueueSize?: number;
dropPolicy?: BrowserWebSocketDropPolicy;
webSocketFactory?: BrowserWebSocketFactory;
closeCode?: number;
closeReason?: string;
onDrop?: (event: LogEvent, reason: string) => void;
onError?: (error: unknown, detail: BrowserWebSocketErrorDetail) => void;
}
export interface BrowserWebSocketTransport extends Transport {
queueSize: () => number;
}
export declare function browserWebSocketTransport(options: BrowserWebSocketTransportOptions): BrowserWebSocketTransport;
export {};xhr-integration.d.ts
ts
import type { Integration } from "@loggerjs/core";
export interface CaptureXHROptions {
minStatus?: number;
captureAll?: boolean;
captureSuccessful?: boolean;
sampleRate?: number;
random?: () => number;
sanitizeUrl?: (url: string) => string;
}
export declare function captureXHRIntegration(options?: CaptureXHROptions): Integration;zip-export.d.ts
ts
import { type LogEvent, type SafeStringifyOptions } from "@loggerjs/core";
import type { IndexedDbTransportQueryOptions } from "./indexeddb-transport.js";
export type LogZipExportFormat = "ndjson" | "json";
export interface ZipExportFile {
name: string;
content: string | Uint8Array | ArrayBuffer;
lastModified?: number;
}
export interface LogZipBlobOptions {
lastModified?: number;
type?: string;
}
export interface LogZipExportQuerySource {
query: (options?: IndexedDbTransportQueryOptions) => AsyncIterable<LogEvent>;
}
export type LogZipExportSource = AsyncIterable<LogEvent> | LogZipExportQuerySource;
export interface LogZipExportManifest {
schema: "loggerjs.log-export.v1";
createdAt: string;
source?: string;
format: LogZipExportFormat;
logFileName: string;
logCount: number;
skippedCount: number;
query?: IndexedDbTransportQueryOptions;
timeRange?: {
from: number;
to: number;
};
recentLogFileName?: string;
sessionCount?: number;
sessions?: LogZipExportSessionManifest[];
}
export interface LogZipExportSessionManifest {
sessionId: string;
logFileName: string;
logCount: number;
timeRange?: {
from: number;
to: number;
};
}
export interface LogZipExportSessionOptions {
contextKey?: string;
directory?: string;
fallbackSessionId?: string;
logFileName?: string;
}
export interface LogZipExportRecentOptions {
logFileName?: string;
maxEvents?: number;
}
export interface LogZipExportOptions {
query?: IndexedDbTransportQueryOptions;
format?: LogZipExportFormat;
logFileName?: string;
includeManifest?: boolean;
manifestFileName?: string;
source?: string;
createdAt?: number;
maxEvents?: number;
stringify?: SafeStringifyOptions;
serializeEvent?: (event: LogEvent) => string;
mapEvent?: (event: LogEvent) => LogEvent | false | null | undefined;
groupBySession?: boolean | LogZipExportSessionOptions;
includeRecent?: boolean | LogZipExportRecentOptions;
}
export interface DownloadBlobOptions {
filename?: string;
document?: Document;
url?: Pick<typeof URL, "createObjectURL" | "revokeObjectURL">;
revokeDelayMs?: number;
}
export declare function createLogZipBlob(files: readonly ZipExportFile[], options?: LogZipBlobOptions): Blob;
export declare function exportLogsToZip(source: LogZipExportSource, options?: LogZipExportOptions): Promise<Blob>;
export declare function downloadBlob(blob: Blob, filenameOrOptions?: string | DownloadBlobOptions): string;