@grafana/faro-web-sdk 1.18.2 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/faro-web-sdk.iife.js +1 -1
- package/dist/bundle/types/config/types.d.ts +1 -0
- package/dist/bundle/types/index.d.ts +1 -1
- package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/csp/index.d.ts +1 -0
- package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +10 -0
- package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/index.d.ts +1 -0
- package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/const.d.ts +1 -0
- package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/types.d.ts +2 -2
- package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/bundle/types/transports/console/transport.d.ts +1 -1
- package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
- package/dist/cjs/config/getWebInstrumentations.js +3 -0
- package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
- package/dist/cjs/config/makeCoreConfig.js +6 -5
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/config/types.js.map +1 -1
- package/dist/cjs/index.js +4 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/csp/index.js +6 -0
- package/dist/cjs/instrumentations/csp/index.js.map +1 -0
- package/dist/cjs/instrumentations/csp/instrumentation.js +40 -0
- package/dist/cjs/instrumentations/csp/instrumentation.js.map +1 -0
- package/dist/cjs/instrumentations/errors/stackFrames/const.js +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/const.js.map +1 -1
- package/dist/cjs/instrumentations/index.js +3 -1
- package/dist/cjs/instrumentations/index.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/const.js +2 -1
- package/dist/cjs/instrumentations/userActions/const.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js +2 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +2 -2
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/types.js.map +1 -1
- package/dist/esm/config/getWebInstrumentations.js +4 -1
- package/dist/esm/config/getWebInstrumentations.js.map +1 -1
- package/dist/esm/config/makeCoreConfig.js +9 -5
- package/dist/esm/config/makeCoreConfig.js.map +1 -1
- package/dist/esm/config/types.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/csp/index.js +2 -0
- package/dist/esm/instrumentations/csp/index.js.map +1 -0
- package/dist/esm/instrumentations/csp/instrumentation.js +18 -0
- package/dist/esm/instrumentations/csp/instrumentation.js.map +1 -0
- package/dist/esm/instrumentations/errors/stackFrames/const.js +1 -1
- package/dist/esm/instrumentations/errors/stackFrames/const.js.map +1 -1
- package/dist/esm/instrumentations/index.js +1 -0
- package/dist/esm/instrumentations/index.js.map +1 -1
- package/dist/esm/instrumentations/userActions/const.js +1 -0
- package/dist/esm/instrumentations/userActions/const.js.map +1 -1
- package/dist/esm/instrumentations/userActions/instrumentation.js +2 -1
- package/dist/esm/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js +3 -3
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/esm/instrumentations/userActions/types.js.map +1 -1
- package/dist/types/config/types.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/csp/index.d.ts +1 -0
- package/dist/types/instrumentations/csp/instrumentation.d.ts +10 -0
- package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/index.d.ts +1 -0
- package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/const.d.ts +1 -0
- package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/types.d.ts +2 -2
- package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/types/transports/console/transport.d.ts +1 -1
- package/dist/types/transports/fetch/transport.d.ts +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, LogLevel } from '@grafana/faro-core';\n\nexport interface BrowserConfig extends Partial<Omit<Config, 'app' | 'parseStacktrace'>>, Pick<Config, 'app'> {\n url?: string;\n apiKey?: string;\n}\n\nexport interface GetWebInstrumentationsOptions {\n captureConsole?: boolean;\n captureConsoleDisabledLevels?: LogLevel[];\n enablePerformanceInstrumentation?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, LogLevel } from '@grafana/faro-core';\n\nexport interface BrowserConfig extends Partial<Omit<Config, 'app' | 'parseStacktrace'>>, Pick<Config, 'app'> {\n url?: string;\n apiKey?: string;\n}\n\nexport interface GetWebInstrumentationsOptions {\n captureConsole?: boolean;\n captureConsoleDisabledLevels?: LogLevel[];\n enablePerformanceInstrumentation?: boolean;\n enableContentSecurityPolicyInstrumentation?: boolean;\n}\n"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { getWebInstrumentations, makeCoreConfig } from './config';
|
|
2
2
|
export { defaultEventDomain } from './consts';
|
|
3
3
|
export { initializeFaro } from './initialize';
|
|
4
|
-
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, UserActionInstrumentation, } from './instrumentations';
|
|
4
|
+
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, } from './instrumentations';
|
|
5
5
|
export { browserMeta, createSession, sdkMeta } from './metas';
|
|
6
6
|
export { ConsoleTransport, FetchTransport } from './transports';
|
|
7
7
|
export { faro, allLogLevels, BaseExtension, BaseInstrumentation, BaseTransport, Conventions, createInternalLogger, createPromiseBuffer, deepEqual, defaultExceptionType, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogLevel, genShortID, getCurrentTimestamp, getInternalFaroFromGlobalObject, getTransportBody, globalObject, internalGlobalObjectKey, isArray, isBoolean, isDomError, isDomException, isElement, isElementDefined, isError, isErrorDefined, isErrorEvent, isEvent, isEventDefined, isFunction, isInstanceOf, isInt, isInternalFaroOnGlobalObject, isMap, isMapDefined, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isSyntheticEvent, isThenable, isToString, isTypeof, isUndefined, isEmpty, InternalLoggerLevel, LogLevel, noop, setInternalFaroOnGlobalObject, TransportItemType, transportItemTypeToBodyKey, VERSION, EVENT_CLICK, EVENT_NAVIGATION, EVENT_ROUTE_CHANGE, EVENT_SESSION_EXTEND, EVENT_SESSION_RESUME, EVENT_SESSION_START, EVENT_VIEW_CHANGED, apiMessageBus, Observable, USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_HALT, USER_ACTION_START, unknownString, } from '@grafana/faro-core';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAuE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n PerformanceInstrumentation,\n UserActionInstrumentation,\n} from './instrumentations';\nexport type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n Conventions,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n isEmpty,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n EVENT_CLICK,\n EVENT_NAVIGATION,\n EVENT_ROUTE_CHANGE,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n EVENT_VIEW_CHANGED,\n apiMessageBus,\n Observable,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n unknownString,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n ApiMessageBusMessages,\n UserActionStartMessage,\n UserActionEndMessage,\n UserActionCancelMessage,\n UserActionHaltMessage,\n} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n MAX_SESSION_PERSISTENCE_TIME_BUFFER,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute, startUserAction } from './instrumentations/userActions';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAuE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n PerformanceInstrumentation,\n CSPInstrumentation,\n UserActionInstrumentation,\n} from './instrumentations';\nexport type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n Conventions,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n isEmpty,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n EVENT_CLICK,\n EVENT_NAVIGATION,\n EVENT_ROUTE_CHANGE,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n EVENT_VIEW_CHANGED,\n apiMessageBus,\n Observable,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n unknownString,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n ApiMessageBusMessages,\n UserActionStartMessage,\n UserActionEndMessage,\n UserActionCancelMessage,\n UserActionHaltMessage,\n} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n MAX_SESSION_PERSISTENCE_TIME_BUFFER,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute, startUserAction } from './instrumentations/userActions';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export { CSPInstrumentation } from './instrumentation';\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseInstrumentation, stringifyObjectValues, VERSION } from '@grafana/faro-core';
|
|
2
|
+
export class CSPInstrumentation extends BaseInstrumentation {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
this.name = '@grafana/faro-web-sdk:instrumentation-csp';
|
|
6
|
+
this.version = VERSION;
|
|
7
|
+
}
|
|
8
|
+
initialize() {
|
|
9
|
+
document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));
|
|
10
|
+
}
|
|
11
|
+
destroy() {
|
|
12
|
+
document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);
|
|
13
|
+
}
|
|
14
|
+
securitypolicyviolationHandler(ev) {
|
|
15
|
+
this.api.pushEvent('securitypolicyviolation', stringifyObjectValues(ev));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGzF,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IAIzD;QACE,KAAK,EAAE,CAAC;QAJD,SAAI,GAAG,2CAA2C,CAAC;QACnD,YAAO,GAAG,OAAO,CAAC;IAI3B,CAAC;IAED,UAAU;QACR,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,OAAO;QACL,QAAQ,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC/F,CAAC;IAEM,8BAA8B,CAAC,EAAgC;QACpE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,EAAyB,CAAC,CAAC,CAAC;IAClG,CAAC;CACF","sourcesContent":["import { BaseInstrumentation, stringifyObjectValues, VERSION } from '@grafana/faro-core';\nimport type { Instrumentation } from '@grafana/faro-core';\n\nexport class CSPInstrumentation extends BaseInstrumentation implements Instrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-csp';\n readonly version = VERSION;\n\n constructor() {\n super();\n }\n\n initialize() {\n document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));\n }\n\n destroy() {\n document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);\n }\n\n public securitypolicyviolationHandler(ev: SecurityPolicyViolationEvent) {\n this.api.pushEvent('securitypolicyviolation', stringifyObjectValues(ev as Record<string, any>));\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@ export const newLineString = '\n';
|
|
|
2
2
|
export const evalString = 'eval';
|
|
3
3
|
export const unknownSymbolString = '?';
|
|
4
4
|
export const atString = '@';
|
|
5
|
-
export const webkitLineRegex = /^\s*at (?:(
|
|
5
|
+
export const webkitLineRegex = /^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
|
|
6
6
|
export const webkitEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
|
|
7
7
|
export const webkitEvalString = 'eval';
|
|
8
8
|
export const webkitAddressAtString = 'address at ';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAC1B,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAC1B,6KAA6K,CAAC;AAChL,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,oOAAoO,CAAC;AACvO,MAAM,CAAC,MAAM,gBAAgB,GAAG,+CAA+C,CAAC;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC","sourcesContent":["export const newLineString = '\\n';\nexport const evalString = 'eval';\nexport const unknownSymbolString = '?';\nexport const atString = '@';\n\nexport const webkitLineRegex =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nexport const webkitEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nexport const webkitEvalString = 'eval';\nexport const webkitAddressAtString = 'address at ';\nexport const webkitAddressAtStringLength = webkitAddressAtString.length;\n\nexport const firefoxLineRegex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\\/.*?|\\[native code]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nexport const firefoxEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nexport const firefoxEvalString = ' > eval';\n\nexport const safariExtensionString = 'safari-extension';\nexport const safariWebExtensionString = 'safari-web-extension';\n\nexport const reactMinifiedRegex = /Minified React error #\\d+;/i;\n"]}
|
|
@@ -6,4 +6,5 @@ export { WebVitalsInstrumentation } from './webVitals';
|
|
|
6
6
|
export { PersistentSessionsManager, VolatileSessionsManager, MAX_SESSION_PERSISTENCE_TIME, MAX_SESSION_PERSISTENCE_TIME_BUFFER, SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME, STORAGE_KEY, } from './session';
|
|
7
7
|
export { PerformanceInstrumentation } from './performance';
|
|
8
8
|
export { UserActionInstrumentation, userActionDataAttribute, startUserAction } from './userActions';
|
|
9
|
+
export { CSPInstrumentation } from './csp';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC","sourcesContent":["export { SessionInstrumentation } from './session';\n\nexport { ConsoleInstrumentation } from './console';\nexport type { ConsoleInstrumentationOptions } from './console';\n\nexport {\n buildStackFrame,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n} from './errors';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './errors';\n\nexport { ViewInstrumentation } from './view';\n\nexport { WebVitalsInstrumentation } from './webVitals';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n MAX_SESSION_PERSISTENCE_TIME_BUFFER,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './session';\n\nexport { PerformanceInstrumentation } from './performance';\n\nexport { UserActionInstrumentation, userActionDataAttribute, startUserAction } from './userActions';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { SessionInstrumentation } from './session';\n\nexport { ConsoleInstrumentation } from './console';\nexport type { ConsoleInstrumentationOptions } from './console';\n\nexport {\n buildStackFrame,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n} from './errors';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './errors';\n\nexport { ViewInstrumentation } from './view';\n\nexport { WebVitalsInstrumentation } from './webVitals';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n MAX_SESSION_PERSISTENCE_TIME_BUFFER,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './session';\n\nexport { PerformanceInstrumentation } from './performance';\n\nexport { UserActionInstrumentation, userActionDataAttribute, startUserAction } from './userActions';\n\nexport { CSPInstrumentation } from './csp';\n"]}
|
|
@@ -4,4 +4,5 @@ export const MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';
|
|
|
4
4
|
export const MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';
|
|
5
5
|
export const userActionDataAttributeParsed = 'faroUserActionName';
|
|
6
6
|
export const userActionDataAttribute = 'data-faro-user-action-name';
|
|
7
|
+
export const userActionStartByApiCallEventName = 'faroApiCall';
|
|
7
8
|
//# sourceMappingURL=const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAC5D,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AACpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG,4BAA4B,CAAC","sourcesContent":["export const MESSAGE_TYPE_RESOURCE_ENTRY = 'resource-entry';\nexport const MESSAGE_TYPE_HTTP_REQUEST_START = 'http-request-start';\nexport const MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';\nexport const MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';\n\nexport const userActionDataAttributeParsed = 'faroUserActionName';\nexport const userActionDataAttribute = 'data-faro-user-action-name';\n"]}
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAC5D,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AACpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEpE,MAAM,CAAC,MAAM,iCAAiC,GAAG,aAAa,CAAC","sourcesContent":["export const MESSAGE_TYPE_RESOURCE_ENTRY = 'resource-entry';\nexport const MESSAGE_TYPE_HTTP_REQUEST_START = 'http-request-start';\nexport const MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';\nexport const MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';\n\nexport const userActionDataAttributeParsed = 'faroUserActionName';\nexport const userActionDataAttribute = 'data-faro-user-action-name';\n\nexport const userActionStartByApiCallEventName = 'faroApiCall';\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseInstrumentation, faro, VERSION } from '@grafana/faro-core';
|
|
2
|
+
import { userActionStartByApiCallEventName } from './const';
|
|
2
3
|
import { getUserEventHandler } from './processUserActionEventHandler';
|
|
3
4
|
let processUserEventHandler;
|
|
4
5
|
export class UserActionInstrumentation extends BaseInstrumentation {
|
|
@@ -20,7 +21,7 @@ function createUserActionApiEvent(name, attributes) {
|
|
|
20
21
|
return {
|
|
21
22
|
name,
|
|
22
23
|
attributes,
|
|
23
|
-
type:
|
|
24
|
+
type: userActionStartByApiCallEventName,
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,IAAI,uBAA2E,CAAC;AAEhF,MAAM,OAAO,yBAA0B,SAAQ,mBAAmB;IAAlE;;QACW,SAAI,GAAG,mDAAmD,CAAC;QAC3D,YAAO,GAAG,OAAO,CAAC;IAO7B,CAAC;IALC,UAAU;QACR,uBAAuB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAmC;IAC/E,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,UAAmC;IACjF,OAAO;QACL,IAAI;QACJ,UAAU;QACV,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,IAAI,uBAA2E,CAAC;AAEhF,MAAM,OAAO,yBAA0B,SAAQ,mBAAmB;IAAlE;;QACW,SAAI,GAAG,mDAAmD,CAAC;QAC3D,YAAO,GAAG,OAAO,CAAC;IAO7B,CAAC;IALC,UAAU;QACR,uBAAuB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAmC;IAC/E,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,UAAmC;IACjF,OAAO;QACL,IAAI;QACJ,UAAU;QACV,IAAI,EAAE,iCAAiC;KACxC,CAAC;AACJ,CAAC","sourcesContent":["import { BaseInstrumentation, faro, VERSION } from '@grafana/faro-core';\n\nimport { userActionStartByApiCallEventName } from './const';\nimport { getUserEventHandler } from './processUserActionEventHandler';\nimport type { ApiEvent } from './types';\n\nlet processUserEventHandler: ReturnType<typeof getUserEventHandler> | undefined;\n\nexport class UserActionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-user-action';\n readonly version = VERSION;\n\n initialize(): void {\n processUserEventHandler = getUserEventHandler(faro);\n window.addEventListener('pointerdown', processUserEventHandler);\n window.addEventListener('keydown', processUserEventHandler);\n }\n}\n\nexport function startUserAction(name: string, attributes?: Record<string, string>) {\n processUserEventHandler?.(createUserActionApiEvent(name, attributes));\n}\n\nfunction createUserActionApiEvent(name: string, attributes?: Record<string, string>): ApiEvent {\n return {\n name,\n attributes,\n type: userActionStartByApiCallEventName,\n };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { apiMessageBus, dateNow, genShortID, Observable, stringifyObjectValues, USER_ACTION_CANCEL, USER_ACTION_END, USER_ACTION_HALT, USER_ACTION_START, } from '@grafana/faro-core';
|
|
2
|
-
import { MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START, userActionDataAttributeParsed as userActionDataAttribute, } from './const';
|
|
2
|
+
import { MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START, userActionDataAttributeParsed as userActionDataAttribute, userActionStartByApiCallEventName, } from './const';
|
|
3
3
|
import { monitorDomMutations } from './domMutationMonitor';
|
|
4
4
|
import { monitorHttpRequests } from './httpRequestMonitor';
|
|
5
5
|
import { monitorPerformanceEntries } from './performanceEntriesMonitor';
|
|
@@ -125,7 +125,7 @@ function endUserAction(props) {
|
|
|
125
125
|
eventType,
|
|
126
126
|
});
|
|
127
127
|
// Send the final action parent event
|
|
128
|
-
api.pushEvent(userActionName, Object.assign({ userActionStartTime: startTime.toString(), userActionEndTime: endTime.toString(), userActionDuration: duration.toString(),
|
|
128
|
+
api.pushEvent(userActionName, Object.assign({ userActionStartTime: startTime.toString(), userActionEndTime: endTime.toString(), userActionDuration: duration.toString(), userActionTrigger: eventType }, stringifyObjectValues(attributes)), undefined, {
|
|
129
129
|
timestampOverwriteMs: startTime,
|
|
130
130
|
customPayloadTransformer: (payload) => {
|
|
131
131
|
payload.action = {
|
|
@@ -174,6 +174,6 @@ function isRequestEndMessage(msg) {
|
|
|
174
174
|
return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;
|
|
175
175
|
}
|
|
176
176
|
function isApiEvent(apiEvent) {
|
|
177
|
-
return apiEvent.type ===
|
|
177
|
+
return apiEvent.type === userActionStartByApiCallEventName && typeof apiEvent.name === 'string';
|
|
178
178
|
}
|
|
179
179
|
//# sourceMappingURL=processUserActionEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,6BAA6B,IAAI,uBAAuB,GACzD,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;IAClD,MAAM,yBAAyB,GAAG,yBAAyB,EAAE,CAAC;IAE9D,IAAI,SAA6B,CAAC;IAClC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,SAAS,gBAAgB,CAAC,KAA8C;;QACtE,IAAI,cAAkC,CAAC;QAEvC,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,kBAAkB,EAAE,CAAC;YACvB,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,iBAAiB,CAChC,KAAK,CAAC,MAAqB,EAC3B,MAAA,MAAM,CAAC,iCAAiC,mCAAI,uBAAuB,CACpE,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,aAAa,GAAG,IAAI,CAAC;QAErB,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;QAC5B,IAAI,OAA2B,CAAC;QAEhC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;QAE9B,aAAa,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,gEAAgE;QAChE,SAAS,GAAG,YAAY,CACtB,SAAS,EACT,GAAG,EAAE;YACH,OAAO,GAAG,OAAO,EAAE,CAAC;YAEpB,mFAAmF;YACnF,aAAa,GAAG,KAAK,CAAC;YACtB,2BAA2B,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACxD,CAAC,EACD,0BAA0B,CAC3B,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqC,CAAC;QACrE,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,sBAA0C,CAAC;QAE/C,MAAM,cAAc,GAAG,IAAI,UAAU,EAAE;aACpC,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,CAAC;aAClE,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;aAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,qFAAqF;YACrF,IAAI,QAAQ,IAAI,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC1F,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YACjB,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,4EAA4E;gBAC5E,8EAA8E;gBAC9E,+GAA+G;gBAC/G,iCAAiC;gBACjC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;YAED,6HAA6H;YAC7H,6FAA6F;YAC7F,SAAS,GAAG,YAAY,CACtB,SAAS,EACT,GAAG,EAAE;gBACH,OAAO,GAAG,OAAO,EAAE,CAAC;gBAEpB,MAAM,0BAA0B,mBAC9B,GAAG;oBACH,cAAc;oBACd,SAAS,EACT,OAAO,EAAE,OAAQ,EACjB,QAAQ;oBACR,KAAK,IACF,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAC;gBAEF,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;gBACpD,MAAM,4BAA4B,GAAG,QAAQ,IAAI,CAAC,kBAAkB,CAAC;gBAErE,IAAI,4BAA4B,EAAE,CAAC;oBACjC,YAAY,CAAC,sBAAsB,CAAC,CAAC;oBACrC,QAAQ,GAAG,KAAK,CAAC;gBACnB,CAAC;gBAED,IAAI,kBAAkB,EAAE,CAAC;oBACvB,QAAQ,GAAG,IAAI,CAAC;oBAEhB,aAAa,CAAC,MAAM,CAAC;wBACnB,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,cAAc;wBACpB,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,kBAAkB;wBAC1B,QAAQ,EAAE,OAAO,EAAE;qBACpB,CAAC,CAAC;oBAEH,sBAAsB,GAAG,YAAY,CACnC,SAAS,EACT,GAAG,EAAE;wBACH,sBAAsB,CAAC,cAAc,CAAC,CAAC;wBACvC,aAAa,CAAC,0BAA0B,CAAC,CAAC;wBAC1C,aAAa,GAAG,KAAK,CAAC;wBACtB,QAAQ,GAAG,KAAK,CAAC;oBACnB,CAAC,EACD,IAAI,GAAG,EAAE,CACV,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,sBAAsB,CAAC,cAAc,CAAC,CAAC;oBACvC,aAAa,CAAC,0BAA0B,CAAC,CAAC;oBAC1C,aAAa,GAAG,KAAK,CAAC;oBACtB,QAAQ,GAAG,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC,EACD,0BAA0B,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAQtB;IACC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACvF,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAE7B,2FAA2F;IAC3F,aAAa,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,QAAQ;QACZ,SAAS;QACT,OAAO;QACP,QAAQ;QACR,SAAS;KACV,CAAC,CAAC;IAEH,qCAAqC;IACrC,GAAG,CAAC,SAAS,CACX,cAAc,kBAEZ,mBAAmB,EAAE,SAAS,CAAC,QAAQ,EAAE,EACzC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,EAAE,EACrC,kBAAkB,EAAE,QAAQ,CAAC,QAAQ,EAAE,EACvC,mBAAmB,EAAE,SAAS,IAC3B,qBAAqB,CAAC,UAAU,CAAC,GAEtC,SAAS,EACT;QACE,oBAAoB,EAAE,SAAS;QAC/B,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;YACpC,OAAO,CAAC,MAAM,GAAG;gBACf,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;aACrB,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAoB,EAAE,iBAAyB;IACxE,MAAM,uBAAuB,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,SAA6B,EAAE,EAAc,EAAE,KAAa;IAChF,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,iEAAiE;IACjE,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,EAAE,EAAE,CAAC;IACP,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,2BAA2B,CAAC,cAAsB,EAAE,QAAgB;IAC3E,aAAa,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,cAAwC;IACtE,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAQ;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,+BAA+B,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ;IACnC,OAAO,GAAG,CAAC,IAAI,KAAK,6BAA6B,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,QAAa;IAC/B,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3E,CAAC","sourcesContent":["import {\n apiMessageBus,\n dateNow,\n genShortID,\n Observable,\n stringifyObjectValues,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n} from '@grafana/faro-core';\nimport type { Faro, Subscription } from '@grafana/faro-core';\n\nimport {\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttributeParsed as userActionDataAttribute,\n} from './const';\nimport { monitorDomMutations } from './domMutationMonitor';\nimport { monitorHttpRequests } from './httpRequestMonitor';\nimport { monitorPerformanceEntries } from './performanceEntriesMonitor';\nimport type { ApiEvent, HttpRequestEndMessage, HttpRequestMessagePayload, HttpRequestStartMessage } from './types';\nimport { convertDataAttributeName } from './util';\n\nconst maxFollowUpActionTimeRange = 100;\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n const httpMonitor = monitorHttpRequests();\n const domMutationsMonitor = monitorDomMutations();\n const performanceEntriesMonitor = monitorPerformanceEntries();\n\n let timeoutId: number | undefined;\n let actionRunning = false;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent | ApiEvent) {\n let userActionName: string | undefined;\n\n const isApiEventDetected = isApiEvent(event);\n if (isApiEventDetected) {\n userActionName = event.name;\n } else {\n userActionName = getUserActionName(\n event.target as HTMLElement,\n config.trackUserActionsDataAttributeName ?? userActionDataAttribute\n );\n }\n\n if (actionRunning || userActionName == null) {\n return;\n }\n\n actionRunning = true;\n\n const startTime = dateNow();\n let endTime: number | undefined;\n\n const actionId = genShortID();\n\n apiMessageBus.notify({\n type: USER_ACTION_START,\n name: userActionName,\n startTime: startTime,\n parentId: actionId,\n });\n\n // Triggers if no initial action happened within the first 100ms\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n // Listening for follow up activities stops once action is cancelled (set to false)\n actionRunning = false;\n sendUserActionCancelMessage(userActionName, actionId);\n },\n maxFollowUpActionTimeRange\n );\n\n const runningRequests = new Map<string, HttpRequestMessagePayload>();\n let isHalted = false;\n let pendingActionTimeoutId: number | undefined;\n\n const allMonitorsSub = new Observable()\n .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)\n .takeWhile(() => actionRunning)\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (isHalted && !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n runningRequests.set(msg.request.requestId, msg.request);\n }\n if (isRequestEndMessage(msg)) {\n runningRequests.delete(msg.request.requestId);\n }\n\n // A http request, a DOM mutation or a performance entry happened so we have a follow up activity and start the timeout again\n // If timeout is triggered the user action is done and we send respective messages and events\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n const userActionParentEventProps = {\n api,\n userActionName,\n startTime,\n endTime: endTime!,\n actionId,\n event,\n ...(isApiEventDetected ? { attributes: event.attributes } : {}),\n };\n\n const hasPendingRequests = runningRequests.size > 0;\n const isAllPendingRequestsResolved = isHalted && !hasPendingRequests;\n\n if (isAllPendingRequestsResolved) {\n clearTimeout(pendingActionTimeoutId);\n isHalted = false;\n }\n\n if (hasPendingRequests) {\n isHalted = true;\n\n apiMessageBus.notify({\n type: USER_ACTION_HALT,\n name: userActionName,\n parentId: actionId,\n reason: 'pending-requests',\n haltTime: dateNow(),\n });\n\n pendingActionTimeoutId = startTimeout(\n undefined,\n () => {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n },\n 1000 * 10\n );\n } else {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n }\n },\n maxFollowUpActionTimeRange\n );\n });\n }\n\n return processUserEvent;\n}\n\n/**\n * User action was successfully completed and we send the final event(s)\n */\nfunction endUserAction(props: {\n api: Faro['api'];\n userActionName: string;\n startTime: number;\n endTime: number;\n actionId: string;\n event: PointerEvent | KeyboardEvent | ApiEvent;\n attributes?: Record<string, string>;\n}) {\n const { api, userActionName, startTime, endTime, actionId, event, attributes } = props;\n const duration = endTime - startTime;\n const eventType = event.type;\n\n // order matters, first emit the user-action-end event and afterwards push the parent event\n apiMessageBus.notify({\n type: USER_ACTION_END,\n name: userActionName,\n id: actionId,\n startTime,\n endTime,\n duration,\n eventType,\n });\n\n // Send the final action parent event\n api.pushEvent(\n userActionName,\n {\n userActionStartTime: startTime.toString(),\n userActionEndTime: endTime.toString(),\n userActionDuration: duration.toString(),\n userActionEventType: eventType,\n ...stringifyObjectValues(attributes),\n },\n undefined,\n {\n timestampOverwriteMs: startTime,\n customPayloadTransformer: (payload) => {\n payload.action = {\n id: actionId,\n name: userActionName,\n };\n\n return payload;\n },\n }\n );\n}\n\nfunction getUserActionName(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nfunction startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nfunction sendUserActionCancelMessage(userActionName: string, actionId: string) {\n apiMessageBus.notify({\n type: USER_ACTION_CANCEL,\n name: userActionName,\n parentId: actionId,\n });\n}\n\nfunction unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n\nfunction isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nfunction isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n\nfunction isApiEvent(apiEvent: any): apiEvent is { name: string; attributes?: Record<string, string> } {\n return apiEvent.type === 'apiEvent' && typeof apiEvent.name === 'string';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n apiMessageBus,\n dateNow,\n genShortID,\n Observable,\n stringifyObjectValues,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n} from '@grafana/faro-core';\nimport type { Faro, Subscription } from '@grafana/faro-core';\n\nimport {\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttributeParsed as userActionDataAttribute,\n userActionStartByApiCallEventName,\n} from './const';\nimport { monitorDomMutations } from './domMutationMonitor';\nimport { monitorHttpRequests } from './httpRequestMonitor';\nimport { monitorPerformanceEntries } from './performanceEntriesMonitor';\nimport type { ApiEvent, HttpRequestEndMessage, HttpRequestMessagePayload, HttpRequestStartMessage } from './types';\nimport { convertDataAttributeName } from './util';\n\nconst maxFollowUpActionTimeRange = 100;\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n const httpMonitor = monitorHttpRequests();\n const domMutationsMonitor = monitorDomMutations();\n const performanceEntriesMonitor = monitorPerformanceEntries();\n\n let timeoutId: number | undefined;\n let actionRunning = false;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent | ApiEvent) {\n let userActionName: string | undefined;\n\n const isApiEventDetected = isApiEvent(event);\n if (isApiEventDetected) {\n userActionName = event.name;\n } else {\n userActionName = getUserActionName(\n event.target as HTMLElement,\n config.trackUserActionsDataAttributeName ?? userActionDataAttribute\n );\n }\n\n if (actionRunning || userActionName == null) {\n return;\n }\n\n actionRunning = true;\n\n const startTime = dateNow();\n let endTime: number | undefined;\n\n const actionId = genShortID();\n\n apiMessageBus.notify({\n type: USER_ACTION_START,\n name: userActionName,\n startTime: startTime,\n parentId: actionId,\n });\n\n // Triggers if no initial action happened within the first 100ms\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n // Listening for follow up activities stops once action is cancelled (set to false)\n actionRunning = false;\n sendUserActionCancelMessage(userActionName, actionId);\n },\n maxFollowUpActionTimeRange\n );\n\n const runningRequests = new Map<string, HttpRequestMessagePayload>();\n let isHalted = false;\n let pendingActionTimeoutId: number | undefined;\n\n const allMonitorsSub = new Observable()\n .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)\n .takeWhile(() => actionRunning)\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (isHalted && !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n runningRequests.set(msg.request.requestId, msg.request);\n }\n if (isRequestEndMessage(msg)) {\n runningRequests.delete(msg.request.requestId);\n }\n\n // A http request, a DOM mutation or a performance entry happened so we have a follow up activity and start the timeout again\n // If timeout is triggered the user action is done and we send respective messages and events\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n const userActionParentEventProps = {\n api,\n userActionName,\n startTime,\n endTime: endTime!,\n actionId,\n event,\n ...(isApiEventDetected ? { attributes: event.attributes } : {}),\n };\n\n const hasPendingRequests = runningRequests.size > 0;\n const isAllPendingRequestsResolved = isHalted && !hasPendingRequests;\n\n if (isAllPendingRequestsResolved) {\n clearTimeout(pendingActionTimeoutId);\n isHalted = false;\n }\n\n if (hasPendingRequests) {\n isHalted = true;\n\n apiMessageBus.notify({\n type: USER_ACTION_HALT,\n name: userActionName,\n parentId: actionId,\n reason: 'pending-requests',\n haltTime: dateNow(),\n });\n\n pendingActionTimeoutId = startTimeout(\n undefined,\n () => {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n },\n 1000 * 10\n );\n } else {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n }\n },\n maxFollowUpActionTimeRange\n );\n });\n }\n\n return processUserEvent;\n}\n\n/**\n * User action was successfully completed and we send the final event(s)\n */\nfunction endUserAction(props: {\n api: Faro['api'];\n userActionName: string;\n startTime: number;\n endTime: number;\n actionId: string;\n event: PointerEvent | KeyboardEvent | ApiEvent;\n attributes?: Record<string, string>;\n}) {\n const { api, userActionName, startTime, endTime, actionId, event, attributes } = props;\n const duration = endTime - startTime;\n const eventType = event.type;\n\n // order matters, first emit the user-action-end event and afterwards push the parent event\n apiMessageBus.notify({\n type: USER_ACTION_END,\n name: userActionName,\n id: actionId,\n startTime,\n endTime,\n duration,\n eventType,\n });\n\n // Send the final action parent event\n api.pushEvent(\n userActionName,\n {\n userActionStartTime: startTime.toString(),\n userActionEndTime: endTime.toString(),\n userActionDuration: duration.toString(),\n userActionTrigger: eventType,\n ...stringifyObjectValues(attributes),\n },\n undefined,\n {\n timestampOverwriteMs: startTime,\n customPayloadTransformer: (payload) => {\n payload.action = {\n id: actionId,\n name: userActionName,\n };\n\n return payload;\n },\n }\n );\n}\n\nfunction getUserActionName(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nfunction startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nfunction sendUserActionCancelMessage(userActionName: string, actionId: string) {\n apiMessageBus.notify({\n type: USER_ACTION_CANCEL,\n name: userActionName,\n parentId: actionId,\n });\n}\n\nfunction unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n\nfunction isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nfunction isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n\nfunction isApiEvent(apiEvent: any): apiEvent is { name: string; attributes?: Record<string, string> } {\n return apiEvent.type === userActionStartByApiCallEventName && typeof apiEvent.name === 'string';\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n} from './const';\n\nexport type DomMutationMessage = {\n type: typeof MESSAGE_TYPE_DOM_MUTATION;\n};\n\ntype RequestApiType = 'xhr' | 'fetch';\n\nexport type HttpRequestMessagePayload = {\n requestId: string;\n url: string;\n method: string;\n apiType: RequestApiType;\n};\n\nexport type HttpRequestStartMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_START;\n request: HttpRequestMessagePayload;\n};\n\nexport type HttpRequestEndMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_END;\n request: HttpRequestMessagePayload;\n};\n\nexport type ApiEvent = {\n name: string;\n attributes?: Record<string, string>;\n type:
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionStartByApiCallEventName,\n} from './const';\n\nexport type DomMutationMessage = {\n type: typeof MESSAGE_TYPE_DOM_MUTATION;\n};\n\ntype RequestApiType = 'xhr' | 'fetch';\n\nexport type HttpRequestMessagePayload = {\n requestId: string;\n url: string;\n method: string;\n apiType: RequestApiType;\n};\n\nexport type HttpRequestStartMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_START;\n request: HttpRequestMessagePayload;\n};\n\nexport type HttpRequestEndMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_END;\n request: HttpRequestMessagePayload;\n};\n\nexport type ApiEvent = {\n name: string;\n attributes?: Record<string, string>;\n type: typeof userActionStartByApiCallEventName;\n};\n"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { getWebInstrumentations, makeCoreConfig } from './config';
|
|
|
2
2
|
export type { BrowserConfig } from './config';
|
|
3
3
|
export { defaultEventDomain } from './consts';
|
|
4
4
|
export { initializeFaro } from './initialize';
|
|
5
|
-
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, UserActionInstrumentation, } from './instrumentations';
|
|
5
|
+
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, } from './instrumentations';
|
|
6
6
|
export type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';
|
|
7
7
|
export { browserMeta, createSession, sdkMeta } from './metas';
|
|
8
8
|
export { ConsoleTransport, FetchTransport } from './transports';
|
|
@@ -3,7 +3,7 @@ import type { ConsoleInstrumentationOptions } from './types';
|
|
|
3
3
|
export declare class ConsoleInstrumentation extends BaseInstrumentation {
|
|
4
4
|
private options;
|
|
5
5
|
readonly name = "@grafana/faro-web-sdk:instrumentation-console";
|
|
6
|
-
readonly version = "1.
|
|
6
|
+
readonly version = "1.19.0";
|
|
7
7
|
static defaultDisabledLevels: LogLevel[];
|
|
8
8
|
static consoleErrorPrefix: string;
|
|
9
9
|
private errorSerializer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CSPInstrumentation } from './instrumentation';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
|
+
import type { Instrumentation } from '@grafana/faro-core';
|
|
3
|
+
export declare class CSPInstrumentation extends BaseInstrumentation implements Instrumentation {
|
|
4
|
+
readonly name = "@grafana/faro-web-sdk:instrumentation-csp";
|
|
5
|
+
readonly version = "1.19.0";
|
|
6
|
+
constructor();
|
|
7
|
+
initialize(): void;
|
|
8
|
+
destroy(): void;
|
|
9
|
+
securitypolicyviolationHandler(ev: SecurityPolicyViolationEvent): void;
|
|
10
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class ErrorsInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-errors";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
initialize(): void;
|
|
6
6
|
}
|
|
@@ -8,3 +8,4 @@ export { WebVitalsInstrumentation } from './webVitals';
|
|
|
8
8
|
export { PersistentSessionsManager, VolatileSessionsManager, MAX_SESSION_PERSISTENCE_TIME, MAX_SESSION_PERSISTENCE_TIME_BUFFER, SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME, STORAGE_KEY, } from './session';
|
|
9
9
|
export { PerformanceInstrumentation } from './performance';
|
|
10
10
|
export { UserActionInstrumentation, userActionDataAttribute, startUserAction } from './userActions';
|
|
11
|
+
export { CSPInstrumentation } from './csp';
|
|
@@ -3,6 +3,6 @@ import type { ResourceEntryMessage } from './types';
|
|
|
3
3
|
export declare const performanceEntriesSubscription: Observable<ResourceEntryMessage>;
|
|
4
4
|
export declare class PerformanceInstrumentation extends BaseInstrumentation {
|
|
5
5
|
readonly name = "@grafana/faro-web-sdk:instrumentation-performance";
|
|
6
|
-
readonly version = "1.
|
|
6
|
+
readonly version = "1.19.0";
|
|
7
7
|
initialize(): void;
|
|
8
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class SessionInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-session";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
private notifiedSession;
|
|
6
6
|
private sendSessionStartEvent;
|
|
7
7
|
private createInitialSession;
|
|
@@ -4,3 +4,4 @@ export declare const MESSAGE_TYPE_HTTP_REQUEST_END = "http-request-end";
|
|
|
4
4
|
export declare const MESSAGE_TYPE_DOM_MUTATION = "dom-mutation";
|
|
5
5
|
export declare const userActionDataAttributeParsed = "faroUserActionName";
|
|
6
6
|
export declare const userActionDataAttribute = "data-faro-user-action-name";
|
|
7
|
+
export declare const userActionStartByApiCallEventName = "faroApiCall";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class UserActionInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-user-action";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
initialize(): void;
|
|
6
6
|
}
|
|
7
7
|
export declare function startUserAction(name: string, attributes?: Record<string, string>): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START } from './const';
|
|
1
|
+
import type { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START, userActionStartByApiCallEventName } from './const';
|
|
2
2
|
export type DomMutationMessage = {
|
|
3
3
|
type: typeof MESSAGE_TYPE_DOM_MUTATION;
|
|
4
4
|
};
|
|
@@ -20,6 +20,6 @@ export type HttpRequestEndMessage = {
|
|
|
20
20
|
export type ApiEvent = {
|
|
21
21
|
name: string;
|
|
22
22
|
attributes?: Record<string, string>;
|
|
23
|
-
type:
|
|
23
|
+
type: typeof userActionStartByApiCallEventName;
|
|
24
24
|
};
|
|
25
25
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class ViewInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-view";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
private notifiedView;
|
|
6
6
|
private sendViewChangedEvent;
|
|
7
7
|
initialize(): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class WebVitalsInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-web-vitals";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
initialize(): void;
|
|
6
6
|
private intializeWebVitalsInstrumentation;
|
|
7
7
|
}
|
|
@@ -4,7 +4,7 @@ import type { ConsoleTransportOptions } from './types';
|
|
|
4
4
|
export declare class ConsoleTransport extends BaseTransport {
|
|
5
5
|
private options;
|
|
6
6
|
readonly name = "@grafana/faro-web-sdk:transport-console";
|
|
7
|
-
readonly version = "1.
|
|
7
|
+
readonly version = "1.19.0";
|
|
8
8
|
constructor(options?: ConsoleTransportOptions);
|
|
9
9
|
send(item: TransportItem): void;
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@ import type { FetchTransportOptions } from './types';
|
|
|
4
4
|
export declare class FetchTransport extends BaseTransport {
|
|
5
5
|
private options;
|
|
6
6
|
readonly name = "@grafana/faro-web-sdk:transport-fetch";
|
|
7
|
-
readonly version = "1.
|
|
7
|
+
readonly version = "1.19.0";
|
|
8
8
|
promiseBuffer: PromiseBuffer<Response | void>;
|
|
9
9
|
private readonly rateLimitBackoffMs;
|
|
10
10
|
private readonly getNow;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafana/faro-web-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0",
|
|
4
4
|
"description": "Faro instrumentations, metas, transports for web.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"observability",
|
|
@@ -32,37 +32,37 @@
|
|
|
32
32
|
],
|
|
33
33
|
"scripts": {
|
|
34
34
|
"start": "yarn watch",
|
|
35
|
-
"build": "run-s build:*",
|
|
36
|
-
"build:compile": "run-p build:compile:*",
|
|
35
|
+
"build": "run-s 'build:*'",
|
|
36
|
+
"build:compile": "run-p 'build:compile:*'",
|
|
37
37
|
"build:compile:cjs": "tsc --build tsconfig.cjs.json",
|
|
38
38
|
"build:compile:esm": "tsc --build tsconfig.esm.json",
|
|
39
|
-
"build:compile:bundle": "run-s build:compile:bundle:*",
|
|
39
|
+
"build:compile:bundle": "run-s 'build:compile:bundle:*'",
|
|
40
40
|
"build:compile:bundle:create": "rollup -c ./rollup.config.js",
|
|
41
41
|
"build:compile:bundle:remove-extras": "rimraf dist/bundle/dist",
|
|
42
42
|
"watch": "run-s watch:compile",
|
|
43
43
|
"watch:compile": "yarn build:compile:cjs -w",
|
|
44
44
|
"clean": "rimraf dist/ yarn-error.log",
|
|
45
|
-
"quality": "run-s quality:*",
|
|
45
|
+
"quality": "run-s 'quality:*'",
|
|
46
46
|
"quality:test": "jest",
|
|
47
47
|
"quality:format": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
|
|
48
|
-
"quality:lint": "run-s quality:lint:*",
|
|
48
|
+
"quality:lint": "run-s 'quality:lint:*'",
|
|
49
49
|
"quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/webSdk --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"",
|
|
50
50
|
"quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
|
|
51
51
|
"quality:lint:md": "markdownlint README.md",
|
|
52
52
|
"quality:circular-deps": "madge --circular ."
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@grafana/faro-core": "^1.
|
|
55
|
+
"@grafana/faro-core": "^1.19.0",
|
|
56
56
|
"ua-parser-js": "^1.0.32",
|
|
57
57
|
"web-vitals": "^4.0.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@types/node": "^
|
|
60
|
+
"@types/node": "^24.0.1",
|
|
61
61
|
"@types/ua-parser-js": "^0.7.36",
|
|
62
62
|
"user-agent-data-types": "^0.4.2"
|
|
63
63
|
},
|
|
64
64
|
"publishConfig": {
|
|
65
65
|
"access": "public"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "ffae80438840da07851a0d6da1e0414c24c04165"
|
|
68
68
|
}
|