* feat(tracker): add support for multi tab sessions
* feat(backend): added support of multitabs
* fix(backend): added support of deprecated batch meta message to pre-decoder
* fix(backend): fixed nil meta issue for TabData messages in sink
* feat(player): add tabmanager
* feat(player): basic tabchange event support
* feat(player): pick tabstate for console panel and timeline
* fix(player): only display tabs that are created
* feat(player): connect performance, xray and events to tab state
* feat(player): merge all tabs data for overview
* feat(backend/tracker): extract tabdata into separate message from batchmeta
* fix(tracker): fix new session check
* fix(backend): remove batchmetadeprecated
* fix(backend): fix switch case
* fix(player): fix for tab message size
* feat(tracker): check for active tabs with broadcast channel
* feat(tracker): prevent multiple messages
* fix(tracker): ignore beacons from same tab, only ask if token isnt present yet, add small delay before start to wait for answer
* feat(player): support new msg struct in assist player
* fix(player): fix some livepl components for multi tab states
* feat(tracker): add option to disable multitab
* feat(tracker): add multitab to assist plugin
* feat(player): back compat for tab id
* fix(ui): fix missing list in controls
* fix(ui): optional list update
* feat(ui): fix visuals for multitab; use window focus event for tabs
* fix(tracker): fix for dying tests (added tabid to writer, refactored other tests)
* feat(ui): update LivePlayerSubHeader.tsx to support tabs
* feat(backend): added tabs support to devtools mob files
* feat(ui): connect state to current tab properly
* feat(backend): added multitab support to assits
* feat(backend): removed data check in agent message
* feat(backend): debug on
* fix(backend): fixed typo in message broadcast
* feat(backend): fixed issue in connect method
* fix(assist): fixed typo
* feat(assist): added more debug logs
* feat(assist): removed one log
* feat(assist): more logs
* feat(assist): use query.peerId
* feat(assist): more logs
* feat(assist): fixed session update
* fix(assist): fixed getSessions
* fix(assist): fixed request_control broadcast
* fix(assist): fixed typo
* fix(assist): added missed line
* fix(assist): fix typo
* feat(tracker): multitab support for assist sessions
* fix(tracker): fix dead tests (tabid prop)
* fix(tracker): fix yaml
* fix(tracker): timers issue
* fix(ui): fix ui E2E tests with magic?
* feat(assist): multitabs support for ee version
* fix(assist): added missed method import
* fix(tracker): fix fix events in assist
* feat(assist): added back compatibility for sessions without tabId
* fix(assist): apply message's top layer structure before broadcast call
* fix(assist): added random tabID for prev version
* fix(assist): added random tabID for prev version (ee)
* feat(assist): added debug logs
* fix(assist): fix typo in sessions_agents_count method
* fix(assist): fixed more typos in copy-pastes
* fix(tracker): fix restart timings
* feat(backend): added tabIDs for some events
* feat(ui): add tab change event to the user steps bar
* Revert "feat(backend): added tabIDs for some events"
This reverts commit 1467ad7f9f.
* feat(ui): revert timeline and xray to grab events from all tabs
* fix(ui): fix typo
---------
Co-authored-by: Alexander Zavorotynskiy <zavorotynskiy@pm.me>
512 lines
11 KiB
Ruby
512 lines
11 KiB
Ruby
# OpenReplay messages definition
|
|
|
|
message 0, 'Timestamp' do
|
|
uint 'Timestamp'
|
|
end
|
|
message 1, 'SessionStart', :tracker => false, :replayer => false do
|
|
uint 'Timestamp'
|
|
uint 'ProjectID'
|
|
string 'TrackerVersion'
|
|
string 'RevID'
|
|
string 'UserUUID'
|
|
string 'UserAgent'
|
|
string 'UserOS'
|
|
string 'UserOSVersion'
|
|
string 'UserBrowser'
|
|
string 'UserBrowserVersion'
|
|
string 'UserDevice'
|
|
string 'UserDeviceType'
|
|
uint 'UserDeviceMemorySize'
|
|
uint 'UserDeviceHeapSize'
|
|
string 'UserCountry'
|
|
string 'UserID'
|
|
end
|
|
## message 2, 'CreateDocument', do
|
|
# end
|
|
|
|
# DEPRECATED; backend only (TODO: remove in the next release)
|
|
message 3, 'SessionEndDeprecated', :tracker => false, :replayer => false do
|
|
uint 'Timestamp'
|
|
end
|
|
message 4, 'SetPageLocation' do
|
|
string 'URL'
|
|
string 'Referrer'
|
|
uint 'NavigationStart'
|
|
end
|
|
message 5, 'SetViewportSize' do
|
|
uint 'Width'
|
|
uint 'Height'
|
|
end
|
|
message 6, 'SetViewportScroll' do
|
|
int 'X'
|
|
int 'Y'
|
|
end
|
|
# (should be) Deprecated sinse tracker ?.?.? in favor of CreateDocument(id=2)
|
|
# in order to use Document as a default root node instead of the documentElement
|
|
message 7, 'CreateDocument' do
|
|
end
|
|
message 8, 'CreateElementNode' do
|
|
uint 'ID'
|
|
uint 'ParentID'
|
|
uint 'index'
|
|
string 'Tag'
|
|
boolean 'SVG'
|
|
end
|
|
message 9, 'CreateTextNode' do
|
|
uint 'ID'
|
|
uint 'ParentID'
|
|
uint 'Index'
|
|
end
|
|
message 10, 'MoveNode' do
|
|
uint 'ID'
|
|
uint 'ParentID'
|
|
uint 'Index'
|
|
end
|
|
message 11, 'RemoveNode' do
|
|
uint 'ID'
|
|
end
|
|
message 12, 'SetNodeAttribute' do
|
|
uint 'ID'
|
|
string 'Name'
|
|
string 'Value'
|
|
end
|
|
message 13, 'RemoveNodeAttribute' do
|
|
uint 'ID'
|
|
string 'Name'
|
|
end
|
|
message 14, 'SetNodeData' do
|
|
uint 'ID'
|
|
string 'Data'
|
|
end
|
|
message 15, 'SetCSSData', :tracker => false do
|
|
uint 'ID'
|
|
string 'Data'
|
|
end
|
|
message 16, 'SetNodeScroll' do
|
|
uint 'ID'
|
|
int 'X'
|
|
int 'Y'
|
|
end
|
|
message 17, 'SetInputTarget', :replayer => false do
|
|
uint 'ID'
|
|
string 'Label'
|
|
end
|
|
message 18, 'SetInputValue' do
|
|
uint 'ID'
|
|
string 'Value'
|
|
int 'Mask'
|
|
end
|
|
message 19, 'SetInputChecked' do
|
|
uint 'ID'
|
|
boolean 'Checked'
|
|
end
|
|
message 20, 'MouseMove' do
|
|
uint 'X'
|
|
uint 'Y'
|
|
end
|
|
message 21, 'NetworkRequest', :replayer => :devtools do
|
|
string 'Type' # fetch/xhr/anythingElse(axios,gql,fonts,image?)
|
|
string 'Method'
|
|
string 'URL'
|
|
string 'Request'
|
|
string 'Response'
|
|
uint 'Status'
|
|
uint 'Timestamp'
|
|
uint 'Duration'
|
|
end
|
|
message 22, 'ConsoleLog', :replayer => :devtools do
|
|
string 'Level'
|
|
string 'Value'
|
|
end
|
|
message 23, 'PageLoadTiming', :replayer => false do
|
|
uint 'RequestStart'
|
|
uint 'ResponseStart'
|
|
uint 'ResponseEnd'
|
|
uint 'DomContentLoadedEventStart'
|
|
uint 'DomContentLoadedEventEnd'
|
|
uint 'LoadEventStart'
|
|
uint 'LoadEventEnd'
|
|
uint 'FirstPaint'
|
|
uint 'FirstContentfulPaint'
|
|
end
|
|
message 24, 'PageRenderTiming', :replayer => false do
|
|
uint 'SpeedIndex'
|
|
uint 'VisuallyComplete'
|
|
uint 'TimeToInteractive'
|
|
end
|
|
# DEPRECATED since 4.1.6 / 1.8.2 in favor of #78
|
|
message 25, 'JSExceptionDeprecated', :replayer => false, :tracker => false do
|
|
string 'Name'
|
|
string 'Message'
|
|
string 'Payload'
|
|
end
|
|
message 26, 'IntegrationEvent', :tracker => false, :replayer => false do
|
|
uint 'Timestamp'
|
|
string 'Source'
|
|
string 'Name'
|
|
string 'Message'
|
|
string 'Payload'
|
|
end
|
|
message 27, 'CustomEvent', :replayer => false do
|
|
string 'Name'
|
|
string 'Payload'
|
|
end
|
|
message 28, 'UserID', :replayer => false do
|
|
string 'ID'
|
|
end
|
|
message 29, 'UserAnonymousID', :replayer => false do
|
|
string 'ID'
|
|
end
|
|
message 30, 'Metadata', :replayer => false do
|
|
string 'Key'
|
|
string 'Value'
|
|
end
|
|
message 31, 'PageEvent', :tracker => false, :replayer => false do
|
|
uint 'MessageID'
|
|
uint 'Timestamp'
|
|
string 'URL'
|
|
string 'Referrer'
|
|
boolean 'Loaded'
|
|
uint 'RequestStart'
|
|
uint 'ResponseStart'
|
|
uint 'ResponseEnd'
|
|
uint 'DomContentLoadedEventStart'
|
|
uint 'DomContentLoadedEventEnd'
|
|
uint 'LoadEventStart'
|
|
uint 'LoadEventEnd'
|
|
uint 'FirstPaint'
|
|
uint 'FirstContentfulPaint'
|
|
uint 'SpeedIndex'
|
|
uint 'VisuallyComplete'
|
|
uint 'TimeToInteractive'
|
|
end
|
|
message 32, 'InputEvent', :tracker => false, :replayer => false do
|
|
uint 'MessageID'
|
|
uint 'Timestamp'
|
|
string 'Value'
|
|
boolean 'ValueMasked'
|
|
string 'Label'
|
|
end
|
|
|
|
# DEPRECATED since 4.0.2 in favor of AdoptedSSInsertRule + AdoptedSSAddOwner
|
|
message 37, 'CSSInsertRule' do
|
|
uint 'ID'
|
|
string 'Rule'
|
|
uint 'Index'
|
|
end
|
|
# DEPRECATED since 4.0.2
|
|
message 38, 'CSSDeleteRule' do
|
|
uint 'ID'
|
|
uint 'Index'
|
|
end
|
|
|
|
# DEPRECATED since 4.1.10 in favor of NetworkRequest
|
|
message 39, 'Fetch', :replayer => :devtools do
|
|
string 'Method'
|
|
string 'URL'
|
|
string 'Request'
|
|
string 'Response'
|
|
uint 'Status'
|
|
uint 'Timestamp'
|
|
uint 'Duration'
|
|
end
|
|
message 40, 'Profiler', :replayer => :devtools do
|
|
string 'Name'
|
|
uint 'Duration'
|
|
string 'Args'
|
|
string 'Result'
|
|
end
|
|
message 41, 'OTable', :replayer => :devtools do
|
|
string 'Key'
|
|
string 'Value'
|
|
end
|
|
message 42, 'StateAction', :replayer => false do
|
|
string 'Type'
|
|
end
|
|
## 43
|
|
message 44, 'Redux', :replayer => :devtools do
|
|
string 'Action'
|
|
string 'State'
|
|
uint 'Duration'
|
|
end
|
|
message 45, 'Vuex', :replayer => :devtools do
|
|
string 'Mutation'
|
|
string 'State'
|
|
end
|
|
message 46, 'MobX', :replayer => :devtools do
|
|
string 'Type'
|
|
string 'Payload'
|
|
end
|
|
message 47, 'NgRx', :replayer => :devtools do
|
|
string 'Action'
|
|
string 'State'
|
|
uint 'Duration'
|
|
end
|
|
message 48, 'GraphQL', :replayer => :devtools do
|
|
string 'OperationKind'
|
|
string 'OperationName'
|
|
string 'Variables'
|
|
string 'Response'
|
|
end
|
|
message 49, 'PerformanceTrack' do #, :replayer => :devtools --> requires player performance refactoring (now is tied with nodes counter)
|
|
int 'Frames'
|
|
int 'Ticks'
|
|
uint 'TotalJSHeapSize'
|
|
uint 'UsedJSHeapSize'
|
|
end
|
|
# since 4.1.9
|
|
message 50, "StringDict" do
|
|
uint "Key"
|
|
string "Value"
|
|
end
|
|
# since 4.1.9
|
|
message 51, "SetNodeAttributeDict" do
|
|
uint 'ID'
|
|
uint 'NameKey'
|
|
uint 'ValueKey'
|
|
end
|
|
message 53, 'ResourceTimingDeprecated', :replayer => :devtools do
|
|
uint 'Timestamp'
|
|
uint 'Duration'
|
|
uint 'TTFB'
|
|
uint 'HeaderSize'
|
|
uint 'EncodedBodySize'
|
|
uint 'DecodedBodySize'
|
|
string 'URL'
|
|
string 'Initiator'
|
|
end
|
|
message 54, 'ConnectionInformation' do
|
|
uint 'Downlink'
|
|
string 'Type'
|
|
end
|
|
message 55, 'SetPageVisibility' do
|
|
boolean 'hidden'
|
|
end
|
|
message 56, 'PerformanceTrackAggr', :tracker => false, :replayer => false do
|
|
uint 'TimestampStart'
|
|
uint 'TimestampEnd'
|
|
uint 'MinFPS'
|
|
uint 'AvgFPS'
|
|
uint 'MaxFPS'
|
|
uint 'MinCPU'
|
|
uint 'AvgCPU'
|
|
uint 'MaxCPU'
|
|
uint 'MinTotalJSHeapSize'
|
|
uint 'AvgTotalJSHeapSize'
|
|
uint 'MaxTotalJSHeapSize'
|
|
uint 'MinUsedJSHeapSize'
|
|
uint 'AvgUsedJSHeapSize'
|
|
uint 'MaxUsedJSHeapSize'
|
|
end
|
|
|
|
# Since 4.1.7 / 1.9.0
|
|
message 57, 'LoadFontFace' do
|
|
uint 'ParentID'
|
|
string 'Family'
|
|
string 'Source'
|
|
string 'Descriptors'
|
|
end
|
|
# Since 4.1.7 / 1.9.0
|
|
message 58, 'SetNodeFocus' do
|
|
int 'ID'
|
|
end
|
|
|
|
#DEPRECATED (since 3.0.?)
|
|
message 59, 'LongTask' do
|
|
uint 'Timestamp'
|
|
uint 'Duration'
|
|
uint 'Context'
|
|
uint 'ContainerType'
|
|
string 'ContainerSrc'
|
|
string 'ContainerId'
|
|
string 'ContainerName'
|
|
end
|
|
message 60, 'SetNodeAttributeURLBased' do
|
|
uint 'ID'
|
|
string 'Name'
|
|
string 'Value'
|
|
string 'BaseURL'
|
|
end
|
|
# Might replace SetCSSData (although BaseURL is useless after rewriting)
|
|
message 61, 'SetCSSDataURLBased' do
|
|
uint 'ID'
|
|
string 'Data'
|
|
string 'BaseURL'
|
|
end
|
|
# DEPRECATED; backend only (TODO: remove in the next release)
|
|
message 62, 'IssueEventDeprecated', :replayer => false, :tracker => false do
|
|
uint 'MessageID'
|
|
uint 'Timestamp'
|
|
string 'Type'
|
|
string 'ContextString'
|
|
string 'Context'
|
|
string 'Payload'
|
|
end
|
|
message 63, 'TechnicalInfo', :replayer => false do
|
|
string 'Type'
|
|
string 'Value'
|
|
end
|
|
message 64, 'CustomIssue', :replayer => false do
|
|
string 'Name'
|
|
string 'Payload'
|
|
end
|
|
## 65
|
|
message 66, 'AssetCache', :replayer => false, :tracker => false do
|
|
string 'URL'
|
|
end
|
|
message 67, 'CSSInsertRuleURLBased' do
|
|
uint 'ID'
|
|
string 'Rule'
|
|
uint 'Index'
|
|
string 'BaseURL'
|
|
end
|
|
## 68
|
|
message 69, 'MouseClick' do
|
|
uint 'ID'
|
|
uint 'HesitationTime'
|
|
string 'Label'
|
|
string 'Selector'
|
|
end
|
|
|
|
# Since 3.4.0 //also used for ShadowDom. TODO:remane to CreateRoot
|
|
message 70, 'CreateIFrameDocument' do
|
|
uint 'FrameID'
|
|
uint 'ID'
|
|
end
|
|
|
|
#Since 4.0.0 AdoptedStyleSheets etc
|
|
# TODO: rename to StyleSheets...
|
|
message 71, 'AdoptedSSReplaceURLBased' do
|
|
uint 'SheetID'
|
|
string 'Text'
|
|
string 'BaseURL'
|
|
end
|
|
message 72, 'AdoptedSSReplace', :tracker => false do
|
|
uint 'SheetID'
|
|
string 'Text'
|
|
end
|
|
message 73, 'AdoptedSSInsertRuleURLBased' do
|
|
uint 'SheetID'
|
|
string 'Rule'
|
|
uint 'Index'
|
|
string 'BaseURL'
|
|
end
|
|
message 74, 'AdoptedSSInsertRule', :tracker => false do
|
|
uint 'SheetID'
|
|
string 'Rule'
|
|
uint 'Index'
|
|
end
|
|
message 75, 'AdoptedSSDeleteRule' do
|
|
uint 'SheetID'
|
|
uint 'Index'
|
|
end
|
|
message 76, 'AdoptedSSAddOwner' do
|
|
uint 'SheetID'
|
|
uint 'ID'
|
|
end
|
|
message 77, 'AdoptedSSRemoveOwner' do
|
|
uint 'SheetID'
|
|
uint 'ID'
|
|
end
|
|
message 78, 'JSException', :replayer => false do
|
|
string 'Name'
|
|
string 'Message'
|
|
string 'Payload'
|
|
string 'Metadata'
|
|
end
|
|
message 79, 'Zustand', :replayer => :devtools do
|
|
string 'Mutation'
|
|
string 'State'
|
|
end
|
|
|
|
|
|
# 80 -- 90 reserved
|
|
|
|
# Special one for Batch Metadata. Message id could define the version
|
|
|
|
# DEPRECATED since tracker 3.6.0 in favor of BatchMetadata
|
|
message 80, 'BatchMeta', :replayer => false, :tracker => false do
|
|
uint 'PageNo'
|
|
uint 'FirstIndex'
|
|
int 'Timestamp'
|
|
end
|
|
|
|
# since tracker 3.6.0 TODO: for webworker only
|
|
message 81, 'BatchMetadata', :replayer => false do
|
|
uint 'Version'
|
|
uint 'PageNo'
|
|
uint 'FirstIndex'
|
|
int 'Timestamp'
|
|
string 'Location'
|
|
end
|
|
|
|
# since tracker 3.6.0
|
|
message 82, 'PartitionedMessage', :replayer => false do
|
|
uint 'PartNo'
|
|
uint 'PartTotal'
|
|
end
|
|
|
|
# 90-111 reserved iOS
|
|
|
|
message 112, 'InputChange', :replayer => false do
|
|
uint 'ID'
|
|
string 'Value'
|
|
boolean 'ValueMasked'
|
|
string 'Label'
|
|
int 'HesitationTime'
|
|
int 'InputDuration'
|
|
end
|
|
|
|
message 113, 'SelectionChange' do
|
|
uint 'SelectionStart'
|
|
uint 'SelectionEnd'
|
|
string 'Selection'
|
|
end
|
|
|
|
message 114, 'MouseThrashing' do
|
|
uint 'Timestamp'
|
|
end
|
|
|
|
message 115, 'UnbindNodes', :replayer => false do
|
|
uint 'TotalRemovedPercent'
|
|
end
|
|
|
|
message 116, 'ResourceTiming', :replayer => :devtools do
|
|
uint 'Timestamp'
|
|
uint 'Duration'
|
|
uint 'TTFB'
|
|
uint 'HeaderSize'
|
|
uint 'EncodedBodySize'
|
|
uint 'DecodedBodySize'
|
|
string 'URL'
|
|
string 'Initiator'
|
|
uint 'TransferredSize'
|
|
boolean 'Cached'
|
|
end
|
|
|
|
message 117, 'TabChange' do
|
|
string 'TabId'
|
|
end
|
|
|
|
message 118, 'TabData' do
|
|
string 'TabId'
|
|
end
|
|
|
|
## Backend-only
|
|
message 125, 'IssueEvent', :replayer => false, :tracker => false do
|
|
uint 'MessageID'
|
|
uint 'Timestamp'
|
|
string 'Type'
|
|
string 'ContextString'
|
|
string 'Context'
|
|
string 'Payload'
|
|
string 'URL'
|
|
end
|
|
message 126, 'SessionEnd', :tracker => false, :replayer => false do
|
|
uint 'Timestamp'
|
|
string 'EncryptionKey'
|
|
end
|
|
message 127, 'SessionSearch', :tracker => false, :replayer => false do
|
|
uint 'Timestamp'
|
|
uint 'Partition'
|
|
end
|