UNPKG

@dynatrace/dtrum-api-types

Version:

Typescript types for the Dynatrace RUM JavaScript dtrum.* API

564 lines (542 loc) 27.4 kB
/** * Signature of the function passed as callback in {@link DtrumApi.addLeaveActionListener} * * @param actionId the ID for which the leave is called * @param stoptime start resp. endtime of the action * @param isRootAction true if the action with the provided ID is a root action */ export interface ActionLeaveListener { (actionId: number, stoptime: number, isRootAction: boolean): void; } /** * Signature of the function passed as callback in {@link DtrumApi.addEnterActionListener} * * @param actionId the ID for which the enter is called * @param starttime start resp. endtime of the action * @param isRootAction true if the action with the provided ID is a root action * @param [element] the element which resulted in the initiation of the event */ export interface ActionEnterListener { (actionId: number, starttime: number, isRootAction: boolean, element?: EventTarget | string): void; } /** * Signature of new the view to start. * * @param name New view name. Usually it matches the location.pathname or location.hash * @param group New view group. It is recommended to contain the dynamic placeholders of the view name. * For example, if the view name is "/books/123", view group should be "books/:bookId" or similar. * If null or undefined is passed in, the dynatrace server will calculate the group based on the name. */ export interface APIPage { name: string; group?: string; } export type PageLeaveListener = (unloadRunning: boolean) => void; export type AllowedMapTypes = Date | string | number; // this is used for dtrum doc // eslint-disable-next-line @typescript-eslint/naming-convention -- dtrum is fine here export type dtrum = DtrumApi; export interface Property<S> { value: S; public?: boolean; } export interface PropertyMap<S extends AllowedMapTypes> { [key: string]: Property<S> | S; } export interface FailedProperty { key: string; reason: string; } export interface SuccessfulProperty { key: string; value: AllowedMapTypes; } export interface PropertiesSendingReport { failedProperties: FailedProperty[]; sentProperties: SuccessfulProperty[]; info: string; } export interface PropertyObject { javaLong?: PropertyMap<number>; date?: PropertyMap<Date>; shortString?: PropertyMap<string>; javaDouble?: PropertyMap<number>; } export interface DtRumUserInput { target: EventTarget | string | undefined; name: string; info: string; title: string; } /** * Defines the type of resources for the summary */ export const enum ResourceSummaryTypes { /** Stylesheet resource (e.g. .css) */ CSS = "c", /** Custom resource */ CUSTOM = "y", /** Image resource (e.g. .jpg, .png) */ IMAGES = "i", /** Undefined resource */ OTHER = "o", /** Script resource (e.g. .js) */ SCRIPTS = "s" } /** * Provides information about call results to actionName. */ export const enum ActionNameResult { /** Action naming was successful with the provided name */ SUCCESS = 0, /** The action with the provided ID was not found, or there was no currently active action */ ACTION_NOT_FOUND = 1, /** The provided action name was not of type string */ INVALID_ACTION_NAME = 2, /** The provided action ID was provided, not of type number */ INVALID_ACTION_ID = 3 } export interface MetaData { /** * An internally used id * * @hidden */ id: string; /** * Specifies where the metadata is collected from: * * CSS Selector * * JavaScript Variable * * Cookie * * Query String * * JavaScript Function */ type: string; /** * How the metadata can be retrieved(cookie name, css selector, javascript variable name, ...) */ expression: string; /** * The current value for the given expression */ value: string | null; /** * Shows information about captured value */ info?: string; } export interface DtrumApi { /** * Enables/disables automatic action detection. Use when you want to instrument your application only manually. * * @see {@link enterAction} * @see {@link leaveAction} * @param enabled Whether automatic action detection should be enabled or disabled */ setAutomaticActionDetection(enabled: boolean): void; /** * Tells the RUM monitoring code to not automatically detect the load end event. * The load end event must be set explicitly via {@link signalLoadEnd}. * Needs to be called immediately after the RUM monitoring code is injected! * */ setLoadEndManually(): void; /** * Signals that the page has finished loading. * Use in combination with {@link setLoadEndManually} to define your own load end times. * * @see {@link setLoadEndManually} */ signalLoadEnd(): void; /** * Report the HTTP status code and a custom message for the response of the current page. * For example, use to mark your 404 pages that respond with a HTTP status code of 200. * Needs to be called before the onload event of the page has finished, otherwise the information will be discarded. * * @param responseCode Sets the HTTP status code * @param message An additional informational message * @returns false if the values were incorrect or the function has been called too late, true otherwise */ markAsErrorPage(responseCode: number, message: string): boolean; /** * Reports the HTTP status code and an additional message for the response of the current XHR action. * For example, use when the HTTP status code of your XHR response returns 200, while the result returned * by the server indicates a failed request. * Needs to be called before the XHR action is finished and all listeners have been invoked. * * @param responseCode The response code of the current XHR action * @param message An additional informational message * @param parentActionId The optional ID of the action to mark as failed. If it is not present, * the currently open action is used. * @returns false if the values were incorrect or the function has been called too late, true otherwise */ markXHRFailed(responseCode: number, message: string, parentActionId?: number): boolean; /** * Forces beacon sending to make sure actions aren't lost. * For example, use before a window unload event by adding a {@link addPageLeavingListener}. * * @see {@link addPageLeavingListener} * @param forceSync DEPRECATED: not used anymore and has no effect if provided. * @param sendPreview Force sending of preview beacons which haven't been closed yet. * @param killUnfinished Kills unfinished actions and sends them immediately. Handle with care, actions might be inaccurate. */ sendBeacon(forceSync: boolean, sendPreview: boolean, killUnfinished: boolean): void; /** * Enters a new custom action. Use to set the load start event for a new custom action. * Needs to be called before {@link leaveAction}, which closes the custom action. * * @see {@link leaveAction} * @param actionName Name of the action * @param actionType DEPRECATED: not used any more and has no effect if provided * @param startTime Timestamp in milliseconds. if null, current time is used. * @param sourceUrl Source url for the action * @returns ID of the created action or 0 if action was not created. */ enterAction(actionName: string, actionType?: string, startTime?: number, sourceUrl?: string): number; /** * Attaches a listener that gets called while entering an action <br /> * Remove the listener if not needed or make sure to filter actions if using {@link addActionProperties}, * to prevent sending the same action property for every action. * Use to hook into automatic action creation event to influence related concepts like * action naming or action properties. * * @see {@link removeEnterActionListener} * @see {@link actionName} * @see {@link addActionProperties} * @param listener A function that will be called when entering a new action */ addEnterActionListener(listener: ActionEnterListener): void; /** * Removes a previously attached listener that detects the enter action event * * @param listener The reference to the listener that needs to be removed */ removeEnterActionListener(listener: ActionEnterListener): void; /** * Leaves an action that has previously been created by an enterAction call. * Use to set the load end event for a custom action and to complete its creation. * Needs to be called after {@link enterAction}. * * @see {@link enterAction} * @param actionId ID of the action to leave. must be the value returned by enterAction * @param stopTime Timestamp in milliseconds. * Note that, when providing a stop time, it will force stop the action and prevent visually complete from extending it. * @param startTime Optional start time in milliseconds (necessary if start time should be modified). * Note that, when providing a start time, it mustn't be longer than an hour in the past, otherwise the * RUM monitoring code will ignore it. */ "leaveAction"(actionId: number, stopTime?: number, startTime?: number): void; /** * Attaches a listener that gets called when leaving an action <br /> * Remove the listener if not needed or make sure to filter actions if using {@link addActionProperties}, * to prevent sending the same action property for every action. * Use to hook into the out of the box action closing event. * * @see {@link removeLeaveActionListener} * @see {@link addActionProperties} * @param listener A function that will be called when leaving an action */ addLeaveActionListener(listener: ActionLeaveListener): void; /** * Removes a previously attached listener that detects the leave action event * * @param listener A leave action listener to be removed */ removeLeaveActionListener(listener: ActionLeaveListener): void; /** * Adds custom {@link https://www.dynatrace.com/support/help/shortlink/user-session-properties | action properties} * to the currently active action. <br /> * Only accepts valid java long, java double (as a string representation), Date objects, and * short strings with a maximum length of 100 characters. <br /> * Action properties must be defined first under Application settings and use a lower case key. * * @see {@link sendSessionProperties} * @param parentActionId ID of the action. * @param javaLong JSON object containing key value pairs of valid numbers. <br /> Value should be between * range -9223372036854776000 & 9223372036854776000 * @param date JSON object containing key value pairs of JavaScript Date objects.<br /> Value should be JavaScript Date object * @param shortString JSON object containing key value pairs of strings.<br /> Value character count should be less * than 100 characters * @param javaDouble JSON object containing key value pairs of valid floating point numbers.<br /> * Value should be between range -1.7976931348623157e+308 & 1.7976931348623157e+308 * * Each key value pair must be defined in the following format 'key: { value: value<AllowedMapTypes>, public?: boolean }' * Public property is optional and if not declared as true values will be sent as masked(dT_pv) in doNotTrack mode * * @returns Status report about properties that were passed to the function. * It contains data about failed properties with the failure reason. * Contains data about properties that were sent successfully and a general message with information about total failed properties. */ addActionProperties( parentActionId: number, javaLong?: PropertyMap<number>, date?: PropertyMap<Date>, shortString?: PropertyMap<string>, javaDouble?: PropertyMap<number> ): PropertiesSendingReport | undefined; /** * Reports an error object to Dynatrace. Use when you catch errors in your own application code * but you also want to propagate them to Dynatrace instead of logging them yourself. * If errors are handled by your own application code it will stop the error from being handled * by the global JavaScript {@link https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror | onerror event handler}, * which is used by Dynatrace to automatically capture JavaScritp errors. * * @param error The error to be reported. Any browser error object is supported and if the error doesn't * have a stacktrace the RUM JavaScipt monitoring code will attempt to generate one. * Alternatively create your own object that has the following properties set: 'message', * 'file', 'line', 'column', and 'stack'. The 'message' property must be provided; all other values are optional. * @param parentActionId parent action id. if not passed or null, error is added to current action */ reportError(error: Error | string, parentActionId?: number): void; /** * Sets the {@link https://www.dynatrace.com/support/help/shortlink/user-tagging#user-tagging-via-javascript-api | user tag}. * Use to identify individual users across different browsers, devices, and user sessions. * * @param value The name of the user. For example, use a name, userid, or your user's email address. */ identifyUser(value: string): void; /** * Adds a listener that is called when the user is leaving the page, but before the RUM monitoring beacon is sent * Use when you want to hook into the unload of the page. * * @param listener A function that will be called in case the user leaves the page */ addPageLeavingListener(listener: PageLeaveListener): void; /** * Indicates the start of a user input. User inputs must always be stopped by calling {@link endUserInput}. * If an XHR call or a page load happens, the RUM monitoring code checks if a user input is active. If so, that user input is * set to have triggered the user action. * Use when a user input is not automatically detected by the RUM monitoring code. * * @see {@link endUserInput} * @param domNode DOM node which triggered the action (button, etc) or a string is used for determining its caption * @param type Type of action: 'click', 'keypress', 'scroll',... * @param addInfo Additional info for user input such as key, mouse button, etc ('F5', 'RETURN',...) * @param validTime How long this userInput should be valid(in ms) * @returns An object containing all the information about the userInput */ beginUserInput(domNode: HTMLElement | string, type: string, addInfo?: string, validTime?: number): DtRumUserInput; /** * Ends a user input. * * @param userInputObject The user input object returned by {@link beginUserInput} */ endUserInput(userInputObject: DtRumUserInput): void; /** * Extends or initiates actions. * Use when you want to extend an active Load or XHR action by another unlinked XHR call (i.e., action). * This is particularly useful when the XHR call in question is asynchronous in nature * and therefore can't automatically be correlated to an action, which otherwise * would lead to the action being closed too early and inaccurate metrics measurements (e.g., user action duration). * Needs to be called before {@link leaveXhrAction}. * * @see {@link leaveXhrAction} * @param type Optional additional info about type of XHR (e.g., framework name, etc.) * @param xmode XHR action creation mode * 0 ... Just extend running XHR actions * 1 ... Extend any running action * 3 ... Start action if user input is present * @param xhrUrl url of the requested resource * This argument should always be provided. If it is not provided, the request will show as `/undefined` in the waterfall * @returns ID of the XhrAction */ enterXhrAction(type: string, xmode?: 0 | 1 | 3, xhrUrl?: string): number; /** * Indicates the end of an XHR action * * @param actionId ID of the XHR Action * @param [stopTime] The stop time of the XHR Action */ leaveXhrAction(actionId: number, stopTime?: number): void; /** * Indicates that an XHR callback is active (eg. XMLHttpRequest onreadystatechange) and relinks subsequently triggered XHR actions. * For example, when an XHR callback adds a script tag to your page, any XHR call triggered by it * would not be automatically added to the currently running action. * Calling this function allows relinking to such a subsequent XHR call (i.e., XHR actions) to its initial action. * The XHR callback must also be stopped by {@link leaveXhrCallback}. * * @param actionId ID of the action where callback belongs to */ enterXhrCallback(actionId: number): void; /** * Indicates the end of an XHR callback. * * @see {@link enterXhrCallback} * @param actionId ID of the action where callback belongs to */ leaveXhrCallback(actionId: number): void; /** * Indicates the start of a load action. Frameworks often have their own load callback functions * this can be used when framework starts load before 'DOMContentLoaded'. * */ signalOnLoadStart(): void; /** * Signals that the load end event is provided manually. * Use when you want to extend the onload duration (e.g. to encompass also the initialization of a framework) * * @see {@link setLoadEndManually} * Notifies the RUM monitoring code to wait for an additional call of {@link signalOnLoadEnd}, before closing the 'onload' action. * Note: Only when {@link signalOnLoadEnd} is called after, the load action will use the provided load end event correctly. */ incrementOnLoadEndMarkers(): void; /** * Indicates the end of a load action. needs {@link incrementOnLoadEndMarkers} to be called before. * When the last {@link signalOnLoadEnd} is called, the action is closed. * * @see {@link signalOnLoadStart} */ signalOnLoadEnd(): void; /** * Sets the actionName of the currently active action, or the action with the provided id * * @param actionName The new name of the action * @param actionId The action ID of the to be updated action name * @returns an {@link ActionNameResult} whether the process was successful */ actionName(actionName: string, actionId?: number): ActionNameResult; /** * Ends the currently active session immediately. */ endSession(): void; /** * Returns the current time in milliseconds. * It automatically chooses the most accurate way to determine the current time. * * @returns the current time in milliseconds */ now(): number; /** * Enables the RUM monitoring code in case it was initially disabled via the * {@link https://www.dynatrace.com/support/help/shortlink/configure-rum-privacy#opt-in-mode | opt-in mode}. * Use in combination with a user consent tool to enable RUM monitoring in case the consent has been provided. * * @see {@link disable} */ enable(): void; /** * Disables the RUM monitoring code and removes all cookies in case dtrum.enable() has been called earlier, * enabling the {@link https://www.dynatrace.com/support/help/shortlink/configure-rum-privacy#opt-in-mode | opt-in mode}. * Use in combination with a user consent tool to disable RUM monitoring in case the consent has not been provided. * * @see {@link enable} */ disable(): void; /** * Adds a listener that gets triggered when the current visit times out and before a new visit id is generted. * * @param listener The listener to add */ addVisitTimeoutListener(listener: (visitId: string, newVisitAfterTimeout: boolean) => void): void; /** * Enables session replay * * @param ignoreCostControl Allows to enable session replay despite cost control configuration */ enableSessionReplay(ignoreCostControl: boolean): void; /** * Disables session replay */ disableSessionReplay(): void; /** * Get and evaluate meta-data for the page. * Use to troubleshoot RUM monitoring. * * @returns Array of metadata objects with configured ids, type, expression, and captured values */ getAndEvaluateMetaData(): { id: string; type: string; expression: string; value: string | null; failureReason?: string; }[]; /** * Enables persistent values again. Only applies if 'disablePersistentValues' has been called previously. * Use when you want to re-enable monitoring returning users. */ enablePersistentValues(): void; /** * Removes all traces of persistent values and disables all functionality that would * recreate one. Note that this has to be called on every page, since it removes persistent RUM monitoring data, including * the information that persistent data shouldn't be stored. * Use when you want to disable monitoring of returning users. * Read more about {@link https://www.dynatrace.com/support/help/shortlink/cookies#cookie-storage | cookie storage}. * * @param remember If true, this configuration state is persisted in local storage, so that it doesn't * reset on each page load */ disablePersistentValues(remember: boolean): void; /** * Registers a method which will be invoked before the 'diff' action in session replay during recording. * * @param method Listener which will be called before diff action. Listener receives one argument * which is a string with diff. Listener also must return the diff string. * Read more about {@link https://www.dynatrace.com/support/help/shortlink/cookies#cookie-storage | cookie storage}. */ registerPreDiffMethod(method: (diff: string) => string): void; /** * Sends {@link https://www.dynatrace.com/support/help/shortlink/user-session-properties | session properties} on a beacon * currently only accepts valid java long, java double (as a string representation), Date objects, and short strings of * a maximum length of 100 characters. <br /> * NOTE: session properties need to have a lower case key! <br /> * * Make sure to first define session properties under Application settings before making this API call. * * @see {@link addActionProperties} is related and works similarly. * @param javaLongOrObject JSON object containing key value pairs of valid numbers. <br /> Value should be between range -9223372036854776000 & 9223372036854776000 * @param date JSON object containing key value pairs of JavaScript date objects.<br /> Value should be JavaScript Date object * @param shortString JSON object containing key value pairs of strings.<br /> Value character count should be less than * 100 characters * @param javaDouble JSON object containing key value pairs of valid floating point numbers.<br /> * Value should be between range -1.7976931348623157e+308 & 1.7976931348623157e+308 * * Each key value pair must be defined in the following format 'key: { value: value<AllowedMapTypes>, public?: boolean }' * Public property is optional and if not declared as true values will be sent as masked(dT_pv) in doNotTrack mode * * @returns Status report about properties that were passed to the function. * It contains data about failed properties with the failure reason. * Contains data about properties that were sent successfully and a general message with information about total failed properties. */ sendSessionProperties( javaLongOrObject?: PropertyMap<number> | PropertyObject, date?: PropertyMap<Date>, shortString?: PropertyMap<string>, javaDouble?: PropertyMap<number> ): PropertiesSendingReport | undefined; /** * Report your own{@link https://www.dynatrace.com/support/help/shortlink/configure-application-errors#configure-custom-errors | custom errors}. * For example, use when you want to capture form validation errors in your signup process. * Custom errors must first be defined in the Application settings. * * @param key The key of the error. For example, 'validation error' * @param value The error value. For example, 'Email validation failed' * @param hint A hint to pinpoint the problem, e.g. content of the input element which triggered the failed validation * @param parentingInfo How the custom error should be attached (default = false), * [case number]: To which open action the custom error event should be attached, * [case boolean]: If true it will get attached to the current active action */ reportCustomError(key: string, value: string, hint?: string, parentingInfo?: number | boolean): void; /** * Enables manual page detection. * After this is called the RUM monitoring code will stop detecting page and page group names automatically and only accepts them via {@link setPage}. * It is recommended to call this as early as possible. */ enableManualPageDetection(): void; /** * Starts a new page view and reports it to dynatrace server. * * @param newPage New page containing page name and page group. * @returns 1 if new page is started succesfully. * 2 if new page is started during onload. It means it is cached and will be sent with load action. * - 1 if page that is being set is the same as previous one. * - 2 if page is trying to be set but mechanism is not active. Probably 'dtrum.enableManualPageDetection()' was not called. * Negative number means new page failed to start and positive means that new page is started successfully. */ "setPage"(newPage: APIPage): number; } declare global { interface Window { dtrum?: DtrumApi; } }