{
    "version": {
        "major": "0",
        "minor": "1"
    },
    "domains": [
        {
            "domain": "Recording",
            "description": "The Recording domain defines methods for managing recordings.",
            "types": [
                {
                    "id": "RecordingId",
                    "description": "Globally unique identifier for a recording.",
                    "type": "string"
                },
                {
                    "id": "BuildId",
                    "description": "Unique identifier for the software used to produce a recording.",
                    "type": "string"
                },
                {
                    "id": "TimeStamp",
                    "description": "A point in time within a recording, specified as the elapsed time in\nmilliseconds since the recording started. Sub-millisecond resolution\nis possible.",
                    "type": "number"
                },
                {
                    "id": "TimeRange",
                    "description": "Description for a range of time within a recording.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "begin",
                            "$ref": "TimeStamp"
                        },
                        {
                            "name": "end",
                            "$ref": "TimeStamp"
                        }
                    ]
                },
                {
                    "id": "ExecutionPoint",
                    "description": "Identifier for a point within a recording at which the program state can be\ninspected. Execution points are integers encoded as base-10 numeric strings,\nsuch that smaller numbered points precede larger numbered ones. They can be\ncompared by e.g. converting to BigInts and then comparing those BigInts.",
                    "type": "string"
                },
                {
                    "id": "PointRange",
                    "description": "A range between two execution points in a recording.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "begin",
                            "$ref": "ExecutionPoint"
                        },
                        {
                            "name": "end",
                            "$ref": "ExecutionPoint"
                        }
                    ]
                },
                {
                    "id": "TimeStampedPoint",
                    "description": "An execution point and its associated time stamp. Recordings always have a\nbeginning execution point with value \"0\" and a time stamp of zero.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "point",
                            "$ref": "ExecutionPoint"
                        },
                        {
                            "name": "time",
                            "$ref": "TimeStamp"
                        }
                    ]
                },
                {
                    "id": "TimeStampedPointRange",
                    "description": "A range between two points, with associated time stamps.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "begin",
                            "$ref": "TimeStampedPoint"
                        },
                        {
                            "name": "end",
                            "$ref": "TimeStampedPoint"
                        }
                    ]
                },
                {
                    "id": "MouseEvent",
                    "description": "A mouse event that occurs somewhere in a recording.",
                    "$ref": "TimeStampedPoint",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "Kind of mouse event.",
                            "$ref": "MouseEventKind"
                        },
                        {
                            "name": "clientX",
                            "description": "X coordinate of the event, relative to the upper left of the page's main window.",
                            "type": "integer"
                        },
                        {
                            "name": "clientY",
                            "description": "Y coordinate of the event, relative to the upper left of the page's main window.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "id": "MouseEventKind",
                    "description": "Kinds of mouse events described in a recording.",
                    "type": "string",
                    "enum": [
                        "mousemove",
                        "mousedown"
                    ]
                },
                {
                    "id": "KeyboardEvent",
                    "description": "A keyboard event that occurs somewhere in a recording.",
                    "$ref": "TimeStampedPoint",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "Kind of mouse event.",
                            "$ref": "KeyboardEventKind"
                        },
                        {
                            "name": "key",
                            "description": "The DOM-spec key representing the key being pressed. See\nhttps://www.w3.org/TR/uievents-code/ for more information.\nNote: Depending on the platform being recorded, not all key events may be recordable.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "KeyboardEventKind",
                    "description": "Kinds of keyboard events described in a recording.\nNote: Platforms should prefer to record key down/up events if possible, but keypress\nis provided as a simpler fallback for platforms unable to track down/up events.",
                    "type": "string",
                    "enum": [
                        "keydown",
                        "keyup",
                        "keypress"
                    ]
                },
                {
                    "id": "NavigationEvent",
                    "description": "A navigate operation that occurs somewhere in a recording.",
                    "$ref": "TimeStampedPoint",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "The kind of navigation that occured, if known.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "url",
                            "description": "The URL that the top-level page navigated to.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "Annotation",
                    "description": "An annotation that was added to a recording.",
                    "$ref": "TimeStampedPoint",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "Kind of annotation.",
                            "type": "string"
                        },
                        {
                            "name": "contents",
                            "description": "Data associated with the annotation.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "SourceMapId",
                    "description": "An opaque source map identifier.",
                    "type": "string"
                },
                {
                    "id": "SourceMapTargetHash",
                    "description": "The hash of a target for the sourcemap.\n\nSee Resource.FileHash for further info in the expected format for\nthis hash string.",
                    "type": "string"
                }
            ],
            "commands": [
                {
                    "name": "getDescription",
                    "description": "Get a description of a recording.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording to get the description for.",
                            "$ref": "RecordingId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "duration",
                            "description": "Duration of the recording.",
                            "$ref": "TimeStamp"
                        },
                        {
                            "name": "length",
                            "description": "Byte length of the recording.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "createSession",
                    "description": "Create a session for inspecting a recording. This command does not return\nuntil the recording's contents have been fully received, unless\n<code>loadPoint</code> is specified. If the contents\nare incomplete, <code>uploadedData</code> events will be periodically\nemitted before the command returns. After creating, a <code>sessionError</code>\nevents may be emitted later if the session dies unexpectedly.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording to load into the session.",
                            "$ref": "RecordingId"
                        },
                        {
                            "name": "loadPoint",
                            "description": "Instead of waiting for the recording to be fully received, only wait until\nenough of the recording has been received that this point can be loaded.",
                            "optional": true,
                            "$ref": "ExecutionPoint"
                        },
                        {
                            "name": "experimentalSettings",
                            "description": "Settings which can be used to configure the session in ways that are not\nyet officially supported in the protocol.",
                            "optional": true,
                            "type": "object"
                        }
                    ],
                    "returns": [
                        {
                            "name": "sessionId",
                            "description": "Identifier for the new session.",
                            "$ref": "Session.SessionId"
                        }
                    ]
                },
                {
                    "name": "releaseSession",
                    "description": "Release a session and allow its resources to be reclaimed.",
                    "parameters": [
                        {
                            "name": "sessionId",
                            "description": "Session to release.",
                            "$ref": "Session.SessionId"
                        }
                    ]
                },
                {
                    "name": "processRecording",
                    "description": "Begin processing a recording, even if no sessions have been created for it.\nAfter calling this, sessions created for the recording (on this connection,\nor another) may start in a partially or fully processed state and start\nbeing used immediately.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "$ref": "RecordingId"
                        }
                    ]
                },
                {
                    "name": "addSourceMap",
                    "description": "Add a sourcemap to the recording.\n\nThe sourcemap will be applied to any file that matches the given\nset of target hash filters.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording to apply the sourcemap to.",
                            "$ref": "RecordingId"
                        },
                        {
                            "name": "targetContentHash",
                            "description": "Limit this sourcemap to only apply to sources with this content hash.",
                            "optional": true,
                            "$ref": "SourceMapTargetHash"
                        },
                        {
                            "name": "targetURLHash",
                            "description": "Limit this sourcemap to only apply to sources with this url hash.",
                            "optional": true,
                            "$ref": "SourceMapTargetHash"
                        },
                        {
                            "name": "targetMapURLHash",
                            "description": "Limit this sourcemap to only apply to sources with this source-map-url hash.\ne.g. The hash of the 'url' value from Target.getSourceMapURL/Target.getSheetSourceMapURL\nto tie this map to.\n\nUsing the url or content hash of the source itself is recommended for more\nspecificity, but if there is no URL and the content is unknown, such as\nin the case for inline CSS, this is necessary.",
                            "optional": true,
                            "$ref": "SourceMapTargetHash"
                        },
                        {
                            "name": "resource",
                            "description": "The sourcemap's resource data.",
                            "$ref": "Resource.Proof"
                        },
                        {
                            "name": "baseURL",
                            "description": "The baseURL to use when resolving relative paths in the map.",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "id",
                            "$ref": "SourceMapId"
                        }
                    ]
                },
                {
                    "name": "addOriginalSource",
                    "description": "Add original source content to a given sourcemap.\n\nSourceMaps do not always contain the original source, so this\nthis allows users to explicitly associate the correct source content\nwith a source in the map.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording to get the description for.",
                            "$ref": "RecordingId"
                        },
                        {
                            "name": "resource",
                            "description": "The original source's resource data.",
                            "$ref": "Resource.Proof"
                        },
                        {
                            "name": "parentId",
                            "description": "The parent sourcemap's id.",
                            "$ref": "SourceMapId"
                        },
                        {
                            "name": "parentOffset",
                            "description": "The offset in the parent sourcemap's 'sources'.",
                            "type": "number"
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "uploadedData",
                    "description": "Describes how much of a recording's data has been uploaded to the cloud service.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording being described.",
                            "$ref": "RecordingId"
                        },
                        {
                            "name": "uploaded",
                            "description": "How many bytes of recording data have been received by the cloud service.",
                            "type": "integer"
                        },
                        {
                            "name": "length",
                            "description": "Total size of the recording in bytes, if known.",
                            "optional": true,
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "awaitingSourcemaps",
                    "description": "Emitted during 'createSession' if all recording data has been received, but\nsourcemaps are still pending.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "Recording being described.",
                            "$ref": "RecordingId"
                        }
                    ]
                },
                {
                    "name": "sessionError",
                    "description": "Emitted when a session has died due to a server side problem.",
                    "parameters": [
                        {
                            "name": "sessionId",
                            "description": "Session which died.",
                            "$ref": "Session.SessionId"
                        },
                        {
                            "name": "code",
                            "description": "Numeric code for the error.",
                            "type": "integer"
                        },
                        {
                            "name": "message",
                            "description": "Description of the error.",
                            "type": "string"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Resource",
            "description": "The commands for uploading and processing resource files.",
            "types": [
                {
                    "id": "Token",
                    "description": "An opaque salt value that can be used to create a Proof for a file.\n\nThis string should be prepended to the file's content when calculating\nthe file's salted hash for the Proof.",
                    "type": "string"
                },
                {
                    "id": "FileHash",
                    "description": "A string representing hashed resource file content.\n\nAll hashes should be computed with SHA256 and prefixed with \"sha256:\"\nAll hashes should be computed using the UTF8 encoding of their content.\nAll hashes should be encoded as hex.",
                    "type": "string"
                },
                {
                    "id": "Proof",
                    "description": "An object representing knowledge of a file's full content.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "token",
                            "$ref": "Token"
                        },
                        {
                            "name": "saltedHash",
                            "$ref": "FileHash"
                        }
                    ]
                }
            ],
            "commands": [
                {
                    "name": "token",
                    "description": "Get the token to use when computing the hashes of a given file.",
                    "parameters": [
                        {
                            "name": "hash",
                            "description": "The file's unsalted hash.",
                            "$ref": "FileHash"
                        }
                    ],
                    "returns": [
                        {
                            "name": "token",
                            "description": "The token to use to create a proof for this file.",
                            "$ref": "Token"
                        },
                        {
                            "name": "expiration",
                            "description": "The unixtime when the token will be invalidated, in seconds.",
                            "type": "number"
                        }
                    ]
                },
                {
                    "name": "exists",
                    "description": "Check if a given resource already exists on our servers.",
                    "parameters": [
                        {
                            "name": "resource",
                            "$ref": "Proof"
                        }
                    ],
                    "returns": [
                        {
                            "name": "exists",
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "name": "create",
                    "description": "Upload a file, and for ease of use, get a resource proof for it.",
                    "parameters": [
                        {
                            "name": "content",
                            "description": "The content you wish to upload.",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "resource",
                            "description": "Proof that can be passed back to the server to reference this asset.",
                            "$ref": "Proof"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Authentication",
            "description": "The Authentication domain defines a command for authenticating the current user.",
            "commands": [
                {
                    "name": "setAccessToken",
                    "description": "Set the user's current access token",
                    "parameters": [
                        {
                            "name": "accessToken",
                            "type": "string"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Session",
            "description": "The Session domain defines methods for using recording sessions. In order to\ninspect a recording, it must first be loaded into a session via\n<code>Recording.createSession</code>.\n\nAfter the session is created, it may be in an unprocessed or partially\nprocessed state. As documented, some commands do not return until the session\nhas fully processed the recording. Processing starts automatically after the\nsession is created.\n\n<br><br>All commands and events in this domain must include a <code>sessionId</code>.",
            "sessionId": true,
            "types": [
                {
                    "id": "SessionId",
                    "description": "Unique identifier for a session which a recording has been loaded into.",
                    "type": "string"
                },
                {
                    "id": "ProcessingLevel",
                    "description": "Level at which a recording can be processed. After <code>basic</code>\nprocessing, all console messages, sources, paints, and mouse events will\nbe available immediately.",
                    "type": "string",
                    "enum": [
                        "basic"
                    ]
                }
            ],
            "commands": [
                {
                    "name": "ensureProcessed",
                    "description": "Does not return until the recording is fully processed. Before returning,\n<code>missingRegions</code> and <code>unprocessedRegions</code> events will\nbe periodically emitted. Commands which require inspecting the recording\nwill not return until that part of the recording has been processed,\nsee <code>ProcessingLevel</code> for details.",
                    "parameters": [
                        {
                            "name": "level",
                            "description": "Level at which the recording should be processed before returning.\nDefaults to <code>basic</code> if omitted.",
                            "optional": true,
                            "$ref": "ProcessingLevel"
                        }
                    ]
                },
                {
                    "name": "findMouseEvents",
                    "description": "Find all points in the recording at which a mouse move or click occurred.\nDoes not return until the recording is fully processed. Before returning,\n<code>mouseEvents</code> events will be periodically emitted. The union\nof all these events describes all mouse events in the recording."
                },
                {
                    "name": "findKeyboardEvents",
                    "description": "Find all points in the recording at which a keyboard event occurred.\nDoes not return until the recording is fully processed. Before returning,\n<code>keyboardEvents</code> events will be periodically emitted. The union\nof all these events describes all keyboard events in the recording."
                },
                {
                    "name": "findNavigationEvents"
                },
                {
                    "name": "findAnnotations",
                    "description": "Find all points in the recording at which an annotation was added via the\nRecordReplayOnAnnotation driver API. Does not return until the recording\nis fully processed. Before returning, <code>annotations</code> events will\nbe periodically emitted, which describe all annotations in the recording,\nor all annotations of the provided kind.",
                    "parameters": [
                        {
                            "name": "kind",
                            "description": "Any kind to restrict the returned annotations to.",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "getAnnotationKinds",
                    "description": "Get the different kinds of annotations in the recording.",
                    "returns": [
                        {
                            "name": "kinds",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                {
                    "name": "getEndpoint",
                    "description": "Get the last execution point in the recording.",
                    "returns": [
                        {
                            "name": "endpoint",
                            "$ref": "Recording.TimeStampedPoint"
                        }
                    ]
                },
                {
                    "name": "getPointNearTime",
                    "description": "Get a point near a given time in the recording.",
                    "parameters": [
                        {
                            "name": "time",
                            "type": "number"
                        }
                    ],
                    "returns": [
                        {
                            "name": "point",
                            "$ref": "Recording.TimeStampedPoint"
                        }
                    ]
                },
                {
                    "name": "createPause",
                    "description": "Create a pause describing the state at an execution point.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to create the pause at.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "pauseId",
                            "description": "Identifier for the new pause.",
                            "$ref": "Pause.PauseId"
                        },
                        {
                            "name": "stack",
                            "description": "Stack contents, omitted if there are no frames on the stack at this point.",
                            "optional": true,
                            "$ref": "Pause.CallStack"
                        },
                        {
                            "name": "data",
                            "description": "Data describing the frames on the stack and the in scope\nvariables of the topmost frame.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "releasePause",
                    "description": "Release a pause and allow its resources to be reclaimed.",
                    "parameters": [
                        {
                            "name": "pauseId",
                            "$ref": "Pause.PauseId"
                        }
                    ]
                },
                {
                    "name": "listenForLoadChanges",
                    "description": "Listen for changes in the loading status of parts of the recording.\nDoes not return until the session has been released. Before returning,\n<code>loadedRegions</code> events will be emitted when their status changes.\nBy default, the entire recording is loaded. If the recording is long enough,\nearlier loaded regions may be unloaded to reduce backend resource usage.\nPauses cannot be created or used in unloaded parts of the recording,\nand execution information for analyses and other commands like\n<code>Debugger.getHitCounts</code> will not be available."
                },
                {
                    "name": "loadRegion",
                    "description": "Request that an unloaded part of the recording start loading.\n\nAfter this command returns, any future commands that are sent will use the\nnew loading set of regions, and might need to wait until they finish loading\nbefore they return.\n\nCommands which are sent before this returns or which were still in progress\nwhen this was sent may use either the earlier loaded regions, the newly\nloaded regions, or some combination of the two.",
                    "parameters": [
                        {
                            "name": "region",
                            "description": "Region to load.",
                            "$ref": "Recording.TimeRange"
                        }
                    ]
                },
                {
                    "name": "unloadRegion",
                    "description": "Request that part of the recording be unloaded. As for <code>Session.loadRegion</code>,\nthe newly loaded regions will take effect after the command returns, and commands\nwhich are sent before this returns or are in progress when it is sent may or may\nnot use the newly loaded regions.",
                    "parameters": [
                        {
                            "name": "region",
                            "description": "Region to unload.",
                            "$ref": "Recording.TimeRange"
                        }
                    ]
                },
                {
                    "name": "getBuildId",
                    "description": "Get the identifier of the build used to produce the recording.",
                    "returns": [
                        {
                            "name": "buildId",
                            "description": "Build identifier originally passed to the RecordReplayAttach API when\nrecording. The build ID includes the platform, target (e.g. gecko,\nchromium, or node), build date, and a unique identifier. The format\nof a build ID is not currently consistent between platforms, and is\nsubject to change over time.",
                            "type": "string"
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "missingRegions",
                    "description": "Event describing regions of the recording that have not been uploaded.",
                    "parameters": [
                        {
                            "name": "regions",
                            "description": "Regions that have not been uploaded.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.TimeRange"
                            }
                        }
                    ]
                },
                {
                    "name": "unprocessedRegions",
                    "description": "Event describing regions of the recording that have not been processed.",
                    "parameters": [
                        {
                            "name": "level",
                            "description": "Level at which the regions are unprocessed.",
                            "$ref": "ProcessingLevel"
                        },
                        {
                            "name": "regions",
                            "description": "Regions of the recording that haven't been processed at the associated\nlevel.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.TimeStampedPointRange"
                            }
                        }
                    ]
                },
                {
                    "name": "mouseEvents",
                    "description": "Describes some mouse events that occur in the recording.",
                    "parameters": [
                        {
                            "name": "events",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.MouseEvent"
                            }
                        }
                    ]
                },
                {
                    "name": "keyboardEvents",
                    "description": "Describes some keyboard events that occur in the recording.",
                    "parameters": [
                        {
                            "name": "events",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.KeyboardEvent"
                            }
                        }
                    ]
                },
                {
                    "name": "navigationEvents",
                    "description": "Describes some navigate events that occur in the recording.",
                    "parameters": [
                        {
                            "name": "events",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.NavigationEvent"
                            }
                        }
                    ]
                },
                {
                    "name": "annotations",
                    "description": "Describes some annotations in the recording.",
                    "parameters": [
                        {
                            "name": "annotations",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.Annotation"
                            }
                        }
                    ]
                },
                {
                    "name": "loadedRegions",
                    "description": "Describes the regions of the recording which are loading or loaded.",
                    "parameters": [
                        {
                            "name": "loaded",
                            "description": "Timespans which are fully loaded.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.TimeStampedPointRange"
                            }
                        },
                        {
                            "name": "loading",
                            "description": "Timespans which are in the process of loading. Pauses in these regions\ncan still be used, but will be slower.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.TimeStampedPointRange"
                            }
                        },
                        {
                            "name": "indexed",
                            "description": "Timespans which have been indexed. Note: Indexed timespans are a subset\nof loading in the same way that loaded is a subset of loading.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.TimeStampedPointRange"
                            }
                        }
                    ]
                },
                {
                    "name": "newMetric",
                    "description": "Placeholder event for metrics being emitted.",
                    "parameters": [
                        {
                            "name": "data",
                            "type": "object"
                        }
                    ]
                },
                {
                    "name": "experimentalEvent",
                    "description": "An event indicating that something happened in a way that is not yet officially\nsupported in the protocol. This will only be emitted for sessions which\nspecified experimental settings when they were created.",
                    "parameters": [
                        {
                            "name": "kind",
                            "description": "Kind of the event.",
                            "type": "string"
                        },
                        {
                            "name": "data",
                            "description": "Any associated data for the event.",
                            "optional": true,
                            "type": "object"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Graphics",
            "description": "The Graphics domain defines methods for accessing a recording's graphics data.\n\n<br><br>All commands and events in this domain must include a <code>sessionId</code>.",
            "sessionId": true,
            "commands": [
                {
                    "name": "findPaints",
                    "description": "Find all points in the recording at which paints occurred. Does not return\nuntil the recording is fully processed. Before returning,\n<code>paintPoints</code> events will be periodically emitted. The union\nof all these events describes all paint points in the recording."
                },
                {
                    "name": "getPlaybackVideo",
                    "description": "Get the playback video data for this session.  Does not return until the\nrecording is fully processed. Before returning,\n<code>playbackVideoFragment</code> events will be periodically emitted. The\nconcatenation of all these events constitutes the playback video data."
                },
                {
                    "name": "getPaintContents",
                    "description": "Get the graphics at a point where a paint occurred.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Execution point to get the graphics for. This must have been listed in\na <code>paintPoints</code> event.",
                            "$ref": "Recording.ExecutionPoint"
                        },
                        {
                            "name": "mimeType",
                            "description": "Encoding format for the returned screen.",
                            "$ref": "MimeType"
                        },
                        {
                            "name": "resizeHeight",
                            "description": "If specified, the returned screen will be scaled to the specified height.",
                            "optional": true,
                            "type": "integer"
                        }
                    ],
                    "returns": [
                        {
                            "name": "screen",
                            "description": "Screen shot of the rendered graphics.",
                            "$ref": "ScreenShot"
                        }
                    ]
                },
                {
                    "name": "getDevicePixelRatio",
                    "description": "Get the value of <code>window.devicePixelRatio</code>. This is the ratio of\npixels in screen shots to pixels used by DOM/CSS data such as\n<code>DOM.getBoundingClientRect</code>.",
                    "returns": [
                        {
                            "name": "ratio",
                            "type": "number"
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "paintPoints",
                    "description": "Describes some points in the recording at which paints occurred. No paint\nwill occur for the recording's beginning execution point.",
                    "parameters": [
                        {
                            "name": "paints",
                            "type": "array",
                            "items": {
                                "$ref": "PaintPoint"
                            }
                        }
                    ]
                },
                {
                    "name": "playbackVideoFragment",
                    "description": "Describes the next fragment of playback video data, as part of the response\nto the getPlaybackVideo request.",
                    "parameters": [
                        {
                            "name": "fragment",
                            "type": "string"
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "MimeType",
                    "description": "Graphics encoding format.",
                    "type": "string",
                    "enum": [
                        "image/jpeg",
                        "image/png"
                    ]
                },
                {
                    "id": "ScreenShotHash",
                    "description": "Compact hash code for a screen shot.",
                    "type": "string"
                },
                {
                    "id": "ScreenShotDescription",
                    "description": "Compact description of the graphics rendered at some point.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "mimeType",
                            "description": "Encoding used for the screen shot.",
                            "$ref": "MimeType"
                        },
                        {
                            "name": "hash",
                            "description": "Hash code for the screen shot's graphics data.",
                            "$ref": "ScreenShotHash"
                        }
                    ]
                },
                {
                    "id": "ScreenShot",
                    "description": "Complete contents of the graphics rendered at some point.",
                    "$ref": "ScreenShotDescription",
                    "properties": [
                        {
                            "name": "data",
                            "description": "Raw graphics data encoded in base64.",
                            "type": "string"
                        },
                        {
                            "name": "scale",
                            "description": "The size of a CSS pixel relative to a pixel in this screenshot",
                            "type": "number"
                        }
                    ]
                },
                {
                    "id": "PaintPoint",
                    "description": "Information about a point where a paint occurred.",
                    "$ref": "Recording.TimeStampedPoint",
                    "properties": [
                        {
                            "name": "screenShots",
                            "description": "Available screen shots for the graphics rendered at this point.",
                            "type": "array",
                            "items": {
                                "$ref": "ScreenShotDescription"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Debugger",
            "description": "The Debugger domain defines methods for accessing sources in the recording\nand navigating around the recording using breakpoints, stepping, and so forth.\n\n<br><br>All commands and events in this domain must include a <code>sessionId</code>.",
            "sessionId": true,
            "commands": [
                {
                    "name": "findSources",
                    "description": "Find all sources in the recording. Does not return until the recording is\nfully processed. Before returning, <code>newSource</code> events will be\nemitted for every source in the recording."
                },
                {
                    "name": "getSourceContents",
                    "description": "Get the contents of a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "Source to fetch the contents for.",
                            "$ref": "SourceId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "contents",
                            "description": "Contents of the source.",
                            "type": "string"
                        },
                        {
                            "name": "contentType",
                            "description": "Content type of the source contents.",
                            "$ref": "ContentType"
                        }
                    ]
                },
                {
                    "name": "getSourceMap",
                    "description": "Get the sourcemap of a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "Source to fetch the sourcemap for.",
                            "$ref": "SourceId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "contents",
                            "description": "The sourcemap of the source (if there is one).",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "getScopeMap",
                    "description": "Get the mapping of generated to original variable names for the given\nlocation (which must be in a generated source).",
                    "parameters": [
                        {
                            "name": "location",
                            "description": "Location in a generated source to fetch the scopemap for.",
                            "$ref": "Location"
                        }
                    ],
                    "returns": [
                        {
                            "name": "map",
                            "description": "The mapping of generated to original variable names.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "VariableMapping"
                            }
                        }
                    ]
                },
                {
                    "name": "getPossibleBreakpoints",
                    "description": "Get a compact representation of the locations where breakpoints can be set\nin a region of a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "Source to return breakpoint locations for.",
                            "$ref": "SourceId"
                        },
                        {
                            "name": "begin",
                            "description": "If specified, earlier breakpoint locations will be excluded.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        },
                        {
                            "name": "end",
                            "description": "If specified, later breakpoint locations will be excluded.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        }
                    ],
                    "returns": [
                        {
                            "name": "lineLocations",
                            "description": "All breakpoint locations in the specified source and range.",
                            "type": "array",
                            "items": {
                                "$ref": "SameLineSourceLocations"
                            }
                        }
                    ]
                },
                {
                    "name": "getHitCounts",
                    "description": "Get a HitCount object for each of the given locations in the given sourceId.\nCounts will only be computed for regions in the recording which are loaded.",
                    "parameters": [
                        {
                            "name": "locations",
                            "description": "Locations for which to retrieve hit counts. Can be chained with the\nreturn value of `Debugger.getPossibleBreakpoints`.",
                            "type": "array",
                            "items": {
                                "$ref": "SameLineSourceLocations"
                            }
                        },
                        {
                            "name": "sourceId",
                            "description": "Source to return breakpoint locations for.",
                            "type": "string"
                        },
                        {
                            "name": "maxHits",
                            "description": "Max number of hit counts to report for each location. For locations with\nmany hits, reducing this number will make the command run faster.",
                            "optional": true,
                            "type": "number"
                        },
                        {
                            "name": "range",
                            "description": "Any subrange of the recording to restrict the hit counts to.",
                            "optional": true,
                            "$ref": "Recording.PointRange"
                        }
                    ],
                    "returns": [
                        {
                            "name": "hits",
                            "description": "Hit counts for the given locations.",
                            "type": "array",
                            "items": {
                                "$ref": "HitCount"
                            }
                        }
                    ]
                },
                {
                    "name": "getEventHandlerCount",
                    "description": "Get the number of times handlers for a type of event executed.",
                    "parameters": [
                        {
                            "name": "eventType",
                            "description": "Type of event to get the handler count for.",
                            "$ref": "EventHandlerType"
                        },
                        {
                            "name": "range",
                            "description": "Any subrange of the recording to restrict the returned events to.",
                            "optional": true,
                            "$ref": "Recording.PointRange"
                        }
                    ],
                    "returns": [
                        {
                            "name": "count",
                            "description": "How many times handlers for the event type executed.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "searchSourceContents",
                    "parameters": [
                        {
                            "name": "searchId",
                            "type": "string"
                        },
                        {
                            "name": "query",
                            "type": "string"
                        },
                        {
                            "name": "sourceIds",
                            "description": "The sources to search (in the given order).\nIf not specified, all sources will be searched.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "SourceId"
                            }
                        }
                    ]
                },
                {
                    "name": "getMappedLocation",
                    "description": "Get the mapped location for a source location.",
                    "parameters": [
                        {
                            "name": "location",
                            "$ref": "Location"
                        }
                    ],
                    "returns": [
                        {
                            "name": "mappedLocation",
                            "$ref": "MappedLocation"
                        }
                    ]
                },
                {
                    "name": "setBreakpoint",
                    "description": "Set a breakpoint at a location.",
                    "parameters": [
                        {
                            "name": "location",
                            "description": "Location to set the breakpoint at.",
                            "$ref": "Location"
                        },
                        {
                            "name": "condition",
                            "description": "Any condition which must evaluate to a non-falsy value for an execution\npoint to hit the breakpoint.",
                            "optional": true,
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "breakpointId",
                            "description": "ID for the new breakpoint.",
                            "$ref": "BreakpointId"
                        }
                    ]
                },
                {
                    "name": "removeBreakpoint",
                    "description": "Remove a breakpoint.",
                    "parameters": [
                        {
                            "name": "breakpointId",
                            "$ref": "BreakpointId"
                        }
                    ]
                },
                {
                    "name": "findResumeTarget",
                    "description": "Find where to pause when running forward from a point.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to start the resume from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "findRewindTarget",
                    "description": "Find where to pause when rewinding from a point.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to start rewinding from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "findReverseStepOverTarget",
                    "description": "Find where to pause when reverse-stepping from a point.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to start reverse-stepping from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "findStepOverTarget",
                    "description": "Find where to pause when stepping from a point.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to start stepping from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "findStepInTarget",
                    "description": "Find where to pause when stepping from a point and stopping at the entry of\nany encountered call.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to start stepping from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "findStepOutTarget",
                    "description": "Find where to pause when stepping out from a frame to the caller.",
                    "parameters": [
                        {
                            "name": "point",
                            "description": "Point to step out from.",
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ],
                    "returns": [
                        {
                            "name": "target",
                            "description": "Point where execution should pause.",
                            "$ref": "PauseDescription"
                        }
                    ]
                },
                {
                    "name": "blackboxSource",
                    "description": "Blackbox a source or a region in it. Resume commands like\n<code>findResumeTarget</code> will not return execution points in\nblackboxed regions of a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "Source to blackbox.",
                            "$ref": "SourceId"
                        },
                        {
                            "name": "begin",
                            "description": "If specified, earlier locations will keep their blackbox state.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        },
                        {
                            "name": "end",
                            "description": "If specified, later locations will keep their blackbox state.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        }
                    ]
                },
                {
                    "name": "unblackboxSource",
                    "description": "Unblackbox a source or a region in it.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "Source to unblackbox.",
                            "$ref": "SourceId"
                        },
                        {
                            "name": "begin",
                            "description": "If specified, earlier locations will keep their blackbox state.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        },
                        {
                            "name": "end",
                            "description": "If specified, later locations will keep their blackbox state.",
                            "optional": true,
                            "$ref": "SourceLocation"
                        }
                    ]
                },
                {
                    "name": "searchFunctions",
                    "description": "Get the function names that match a query.",
                    "parameters": [
                        {
                            "name": "searchId",
                            "type": "string"
                        },
                        {
                            "name": "query",
                            "type": "string"
                        },
                        {
                            "name": "sourceIds",
                            "description": "The sources to search (in the given order).\nIf not specified, all sources will be searched.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "SourceId"
                            }
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "newSource",
                    "description": "Describes a source in the recording.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "description": "ID for the source.",
                            "$ref": "SourceId"
                        },
                        {
                            "name": "kind",
                            "description": "Kind of the source.",
                            "$ref": "SourceKind"
                        },
                        {
                            "name": "url",
                            "description": "URL of the source. Omitted for dynamically generated sources (from eval etc.).",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "generatedSourceIds",
                            "description": "If this is an original source, the IDs of the sources which were generated from\nthis one.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "SourceId"
                            }
                        },
                        {
                            "name": "contentHash",
                            "description": "The hash of the source's content.\nThis is set for all sources except pretty printed ones.",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "searchSourceContentsMatches",
                    "parameters": [
                        {
                            "name": "searchId",
                            "type": "string"
                        },
                        {
                            "name": "matches",
                            "type": "array",
                            "items": {
                                "$ref": "SearchSourceContentsMatch"
                            }
                        }
                    ]
                },
                {
                    "name": "functionsMatches",
                    "parameters": [
                        {
                            "name": "searchId",
                            "type": "string"
                        },
                        {
                            "name": "matches",
                            "type": "array",
                            "items": {
                                "$ref": "FunctionMatch"
                            }
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "SourceId",
                    "description": "Unique ID for a source.",
                    "type": "string"
                },
                {
                    "id": "SourceKind",
                    "description": "Kind of a source.\n<br>\n<br><code>inlineScript</code>: Inline contents of a <code>script</code> element.\n<br><code>scriptSource</code>: Script loaded via the <code>src</code> attribute\n  of a <code>script</code> element.\n<br><code>other</code>: An unspecified kind of source. This does not include any\n  original sources.\n<br><code>html</code>: An entire HTML page containing one or more inline scripts.\n  This is an original source whose generated sources are the inline scripts.\n<br><code>sourceMapped</code>: An original source specified by a source map.\n  This will have a generated source associated with the source map.\n  The source map and its sources must have been\n  associated with the recording via <code>Recording.addSourceMap</code> and\n  <code>Recording.addOriginalSource</code>.\n<br><code>prettyPrinted</code>: An original source which was produced by pretty\n  printing the associated generated source. Pretty printed sources will\n  automatically be created for other sources which appear to contain minified\n  code, including HTML page sources. <code>newSource</code> events will be\n  emitted for a pretty printed source before the generated source.\n<br><br>",
                    "type": "string",
                    "enum": [
                        "inlineScript",
                        "scriptSource",
                        "other",
                        "html",
                        "sourceMapped",
                        "prettyPrinted"
                    ]
                },
                {
                    "id": "VariableMapping",
                    "description": "A variable mapping containing a generated and an original variable name.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                {
                    "id": "ContentType",
                    "description": "Possible content types for sources.",
                    "type": "string",
                    "enum": [
                        "text/javascript",
                        "text/html"
                    ]
                },
                {
                    "id": "HitCount",
                    "description": "A combination of a location and the number of times that location was hit\nduring the execution of the currently loaded regions.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "location",
                            "description": "Location of the hits.",
                            "$ref": "Location"
                        },
                        {
                            "name": "hits",
                            "description": "Number of times this location was hit in loaded regions.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "id": "EventHandlerType",
                    "description": "Type of an event which handlers can be associated with.",
                    "type": "string"
                },
                {
                    "id": "SearchSourceContentsMatch",
                    "type": "object",
                    "properties": [
                        {
                            "name": "location",
                            "$ref": "Location"
                        },
                        {
                            "name": "context",
                            "description": "Some snippet of text from around the match",
                            "type": "string"
                        },
                        {
                            "name": "contextStart",
                            "description": "The beginning of the match within the context snippet",
                            "$ref": "SourceLocation"
                        },
                        {
                            "name": "contextEnd",
                            "description": "The end of the match within the context snippet",
                            "$ref": "SourceLocation"
                        }
                    ]
                },
                {
                    "id": "SourceLocation",
                    "description": "Location within a particular source.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "line",
                            "description": "1-indexed line in the source.",
                            "type": "integer"
                        },
                        {
                            "name": "column",
                            "description": "0-indexed column in the source.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "id": "SameLineSourceLocations",
                    "description": "Set of locations which are all on the same line of the same source.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "line",
                            "description": "Common line number for the locations.",
                            "type": "integer"
                        },
                        {
                            "name": "columns",
                            "description": "Different column numbers for the locations.",
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    ]
                },
                {
                    "id": "Location",
                    "description": "Location within a source.",
                    "$ref": "SourceLocation",
                    "properties": [
                        {
                            "name": "sourceId",
                            "$ref": "SourceId"
                        }
                    ]
                },
                {
                    "id": "MappedLocation",
                    "description": "A location in a generated source, along with corresponding locations in any\noriginal sources which the generated source was source mapped from.\nThe generated location is the first element of the array.",
                    "type": "array",
                    "items": {
                        "$ref": "Location"
                    }
                },
                {
                    "id": "BreakpointId",
                    "description": "ID for a breakpoint.",
                    "type": "string"
                },
                {
                    "id": "PauseReason",
                    "description": "Reasons why execution can pause when running forward or backward through\nthe recording.\n<br>\n<br><code>endpoint</code>: Ran to the beginning or end of the recording.\n<br><code>breakpoint</code>: Hit an installed breakpoint.\n<br><code>debuggerStatement</code>: Hit a debugger statement.\n<br><code>step</code>: Reached the target of a step operation.\n<br><br>",
                    "type": "string",
                    "enum": [
                        "endpoint",
                        "breakpoint",
                        "debuggerStatement",
                        "step"
                    ]
                },
                {
                    "id": "PointDescription",
                    "description": "Description of an execution point.",
                    "$ref": "Recording.TimeStampedPoint",
                    "properties": [
                        {
                            "name": "frame",
                            "description": "Location of the topmost frame, omitted if there are no frames on stack.",
                            "optional": true,
                            "$ref": "MappedLocation"
                        }
                    ]
                },
                {
                    "id": "PauseDescription",
                    "description": "Description of a point where execution can pause after running forward or\nbackward through the recording.",
                    "$ref": "PointDescription",
                    "properties": [
                        {
                            "name": "reason",
                            "description": "Reason for pausing.",
                            "$ref": "PauseReason"
                        }
                    ]
                },
                {
                    "id": "FunctionMatch",
                    "type": "object",
                    "properties": [
                        {
                            "name": "loc",
                            "$ref": "Location"
                        },
                        {
                            "name": "name",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "PersistentObjectId",
                    "description": "Identifier for a JS object that persists through the lifetime of that object,\nunlike Pause.ObjectId which can use different IDs for the same JS object in\ndifferent pauses.",
                    "type": "string"
                }
            ]
        },
        {
            "domain": "Console",
            "description": "The Console domain defines methods for accessing messages reported to the console.\n\n<br><br>All commands and events in this domain must include a <code>sessionId</code>.",
            "sessionId": true,
            "commands": [
                {
                    "name": "findMessages",
                    "description": "Find all messages in the recording. Does not return until the recording is\nfully processed. Before returning, <code>newMessage</code> events will be\nemitted for every console message in the recording.",
                    "returns": [
                        {
                            "name": "overflow",
                            "description": "Set if there were too many messages and not all were returned.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "name": "findMessagesInRange",
                    "description": "Find all messages in one area of a recording. Useful if finding all messages in\nthe recording overflowed.",
                    "parameters": [
                        {
                            "name": "range",
                            "description": "Subrange of the recording to find messages within.",
                            "$ref": "Recording.PointRange"
                        }
                    ],
                    "returns": [
                        {
                            "name": "messages",
                            "description": "Messages within the specified range.",
                            "type": "array",
                            "items": {
                                "$ref": "Message"
                            }
                        },
                        {
                            "name": "overflow",
                            "description": "Whether there were too many messages and not all were returned.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "newMessage",
                    "description": "Describes a console message in the recording.",
                    "parameters": [
                        {
                            "name": "message",
                            "description": "Contents of the message.",
                            "$ref": "Message"
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "Message",
                    "description": "Contents of a console message.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "source",
                            "description": "Source of the message.",
                            "$ref": "MessageSource"
                        },
                        {
                            "name": "level",
                            "description": "Severity level of the message.",
                            "$ref": "MessageLevel"
                        },
                        {
                            "name": "text",
                            "description": "Any text associated with the message.",
                            "type": "string"
                        },
                        {
                            "name": "url",
                            "description": "Any URL associated with the message.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "sourceId",
                            "description": "Any source associated with the message.",
                            "optional": true,
                            "$ref": "Debugger.SourceId"
                        },
                        {
                            "name": "line",
                            "description": "Any 1-indexed line number associated with the message.",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "column",
                            "description": "Any 0-indexed column number associated with the message.",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "point",
                            "description": "Point associated with the message. For messages added due to uncaught\nexceptions this is the point at which the exception was thrown. For\nother types of messages it is the point where the message was added.",
                            "$ref": "Debugger.PointDescription"
                        },
                        {
                            "name": "pauseId",
                            "description": "Pause ID associated with the message arguments and stack.",
                            "$ref": "Pause.PauseId"
                        },
                        {
                            "name": "argumentValues",
                            "description": "Any arguments to the message.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Pause.Value"
                            }
                        },
                        {
                            "name": "stack",
                            "description": "Stack contents for the pause, omitted if there are no frames on the\nstack at the message's point.",
                            "optional": true,
                            "$ref": "Pause.CallStack"
                        },
                        {
                            "name": "data",
                            "description": "Data describing the message arguments and frames on the stack.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "id": "MessageSource",
                    "description": "Possible sources from which a message can originate.",
                    "type": "string",
                    "enum": [
                        "PageError",
                        "ConsoleAPI"
                    ]
                },
                {
                    "id": "MessageLevel",
                    "description": "Severity level of a message.",
                    "type": "string",
                    "enum": [
                        "info",
                        "trace",
                        "warning",
                        "error",
                        "assert"
                    ]
                }
            ]
        },
        {
            "domain": "Pause",
            "description": "The Pause domain is used to inspect the state of the program when it is paused\nat particular execution points.\n\n<br><br>All commands and events in this domain must include both a <code>sessionId</code>\nand a <code>pauseId</code>.",
            "sessionId": true,
            "pauseId": true,
            "types": [
                {
                    "id": "PauseId",
                    "description": "Unique identifier for a pause session where the program state can be inspected.\nPauses are each associated with a specific execution point, and when created\nreflect the program state when it reached that point. Operations on a pause\ncan have side effects due to evaluations and so forth. These side effects will\naffect later results produced for the same pause, but will have no effect on\nthe state of the program in other pauses.",
                    "type": "string"
                },
                {
                    "id": "FrameId",
                    "description": "Identifier for a call frame in a pause.",
                    "type": "string"
                },
                {
                    "id": "CallStack",
                    "description": "Description of the entire call stack: the IDs of all frames, in order\nstarting with the topmost (currently executing) frame.",
                    "type": "array",
                    "items": {
                        "$ref": "FrameId"
                    }
                },
                {
                    "id": "ScopeId",
                    "description": "Identifier for a scope in a pause.",
                    "type": "string"
                },
                {
                    "id": "ObjectId",
                    "description": "Identifier for a JS object in a pause.",
                    "type": "string"
                },
                {
                    "id": "Value",
                    "description": "Description of a value. At most one property will be specified.\nIf no properties are specified, the value is <code>undefined</code>.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "value",
                            "description": "For non-object values that are valid JSON values.\nLong strings may be truncated.",
                            "optional": true,
                            "type": "any"
                        },
                        {
                            "name": "object",
                            "description": "For object values.",
                            "optional": true,
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "unserializableNumber",
                            "description": "String representation of a number that is not a valid JSON value:\n<code>-0</code>, <code>Infinity</code>, <code>-Infinity</code>,\nand <code>NaN</code>.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "bigint",
                            "description": "String representation of a bigint.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "symbol",
                            "description": "String representation of a symbol.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "uninitialized",
                            "description": "Set for values of variables which haven't been initialized yet.",
                            "optional": true,
                            "type": "boolean"
                        },
                        {
                            "name": "unavailable",
                            "description": "Set for values which are not available for some reason.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "NamedValue",
                    "description": "Description of a value, with an associated name.",
                    "$ref": "Value",
                    "properties": [
                        {
                            "name": "name",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "Frame",
                    "description": "Description of a stack frame.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "frameId",
                            "description": "ID of this frame.",
                            "$ref": "FrameId"
                        },
                        {
                            "name": "type",
                            "description": "Type of frame which is executing.",
                            "$ref": "FrameType"
                        },
                        {
                            "name": "functionName",
                            "description": "For call frames, the name of the function being called.\nOmitted if the function has no name.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "originalFunctionName",
                            "description": "For call frames, the original name of the function being called.\nOmitted if the function has no name.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "functionLocation",
                            "description": "For call frames, the location of the function being called.",
                            "optional": true,
                            "$ref": "Debugger.MappedLocation"
                        },
                        {
                            "name": "location",
                            "description": "Location in the source where this frame is paused at.",
                            "$ref": "Debugger.MappedLocation"
                        },
                        {
                            "name": "scopeChain",
                            "description": "Scope chain for the call frame, from innermost to outermost.",
                            "type": "array",
                            "items": {
                                "$ref": "ScopeId"
                            }
                        },
                        {
                            "name": "originalScopeChain",
                            "description": "Alternate scope chain determined from any source map for the frame's\ngenerated source. This can be structured differently and include\ndifferent names than the normal scope chain.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "ScopeId"
                            }
                        },
                        {
                            "name": "this",
                            "description": "<code>this</code> value of the call frame.",
                            "$ref": "Value"
                        }
                    ]
                },
                {
                    "id": "FrameType",
                    "description": "Different kinds of stack frames.",
                    "type": "string",
                    "enum": [
                        "call",
                        "global",
                        "module",
                        "eval"
                    ]
                },
                {
                    "id": "Scope",
                    "description": "Description of a scope.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "scopeId",
                            "description": "ID of this scope.",
                            "$ref": "ScopeId"
                        },
                        {
                            "name": "type",
                            "description": "Type of this scope.",
                            "$ref": "ScopeType"
                        },
                        {
                            "name": "functionLexical",
                            "description": "Set for the top-level lexical scope of a function.",
                            "optional": true,
                            "type": "boolean"
                        },
                        {
                            "name": "object",
                            "description": "For <code>global</code> and <code>with</code> scopes, the underlying object.",
                            "optional": true,
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "functionName",
                            "description": "For <code>function</code> scopes, the name of the called function.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "bindings",
                            "description": "For <code>function</code> and <code>block</code> scopes, the scope bindings.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "NamedValue"
                            }
                        }
                    ]
                },
                {
                    "id": "ScopeType",
                    "description": "Possible types of a scope.",
                    "type": "string",
                    "enum": [
                        "global",
                        "with",
                        "function",
                        "block"
                    ]
                },
                {
                    "id": "Object",
                    "description": "Description of an object.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "objectId",
                            "description": "ID of this object.",
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "className",
                            "description": "Object class name.",
                            "type": "string"
                        },
                        {
                            "name": "preview",
                            "description": "Any preview data available for the object's contents.",
                            "optional": true,
                            "$ref": "ObjectPreview"
                        },
                        {
                            "name": "persistentId",
                            "description": "Any persistent ID for this object.",
                            "optional": true,
                            "$ref": "Debugger.PersistentObjectId"
                        }
                    ]
                },
                {
                    "id": "ObjectPreview",
                    "description": "Description of some or all of an object's contents.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "overflow",
                            "description": "Set if there are additional contents not in this preview which can be\nobtained by getting a \"full\" preview.",
                            "optional": true,
                            "type": "boolean"
                        },
                        {
                            "name": "prototypeId",
                            "description": "ID of the prototype, if there is one.",
                            "optional": true,
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "properties",
                            "description": "Descriptors of the object's own properties.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Property"
                            }
                        },
                        {
                            "name": "containerEntries",
                            "description": "Entries of container objects.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "ContainerEntry"
                            }
                        },
                        {
                            "name": "getterValues",
                            "description": "Results of evaluating getter properties from this or the prototype chain\non this object, if they could be evaluated without side effects.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "NamedValue"
                            }
                        },
                        {
                            "name": "containerEntryCount",
                            "description": "For container objects, the number of entries in the container.",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "regexpString",
                            "description": "For RegExp objects, the string representation.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "dateTime",
                            "description": "For Date objects, the result of calling <code>getTime()</code>.",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "proxyState",
                            "description": "For Proxy objects, the target and handler.",
                            "optional": true,
                            "$ref": "ProxyStateData"
                        },
                        {
                            "name": "promiseState",
                            "description": "For Promise objects, the resolution state.",
                            "optional": true,
                            "$ref": "PromiseStateData"
                        },
                        {
                            "name": "functionName",
                            "description": "For Function objects, the name of the function.\nOmitted for functions with no name.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "functionParameterNames",
                            "description": "For Function objects, the names of the parameters.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        {
                            "name": "functionLocation",
                            "description": "For Function objects, any associated source location.",
                            "optional": true,
                            "$ref": "Debugger.MappedLocation"
                        },
                        {
                            "name": "node",
                            "description": "For DOM Node objects, information about the node.",
                            "optional": true,
                            "$ref": "DOM.Node"
                        },
                        {
                            "name": "rule",
                            "description": "For CSSRule objects, information about the rule.",
                            "optional": true,
                            "$ref": "CSS.Rule"
                        },
                        {
                            "name": "style",
                            "description": "For CSSStyleDeclaration objects, information about the style.",
                            "optional": true,
                            "$ref": "CSS.StyleDeclaration"
                        },
                        {
                            "name": "styleSheet",
                            "description": "For StyleSheet objects, information about the style sheet.",
                            "optional": true,
                            "$ref": "CSS.StyleSheet"
                        }
                    ]
                },
                {
                    "id": "Property",
                    "description": "Description of an object's own property. The <code>NamedValue</code> members\nindicate the property's name and its value if it is a data descriptor.",
                    "$ref": "NamedValue",
                    "properties": [
                        {
                            "name": "flags",
                            "description": "Configuration flags for the property, omitted if the property is\nwritable, configurable, and enumerable (a bitmask of <code>7</code>).",
                            "optional": true,
                            "$ref": "PropertyConfigurationFlags"
                        },
                        {
                            "name": "get",
                            "description": "Any getter function if this is an accessor property.",
                            "optional": true,
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "set",
                            "description": "Any setter function if this is an accessor property.",
                            "optional": true,
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "isSymbol",
                            "description": "Set if this property's name is a symbol.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "PropertyConfigurationFlags",
                    "description": "Compact bitmask of configuration flags on a property. Possible values in the mask\nare <code>1</code> (whether the property is writable), <code>2</code>\n(whether the property is configurable), <code>4</code> (whether the\nproperty is enumerable), and combinations of these values using bitwise-or.",
                    "type": "integer"
                },
                {
                    "id": "ContainerEntry",
                    "description": "An entry in a container object (maps, sets, weak maps, and weak sets).",
                    "type": "object",
                    "properties": [
                        {
                            "name": "key",
                            "description": "For maps and weak maps, this entry's key.",
                            "optional": true,
                            "$ref": "Value"
                        },
                        {
                            "name": "value",
                            "description": "This entry's value.",
                            "$ref": "Value"
                        }
                    ]
                },
                {
                    "id": "PromiseState",
                    "description": "The possible states for a promise.",
                    "type": "string",
                    "enum": [
                        "pending",
                        "fulfilled",
                        "rejected"
                    ]
                },
                {
                    "id": "PromiseStateData",
                    "description": "The internal state data of a promise.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "state",
                            "description": "The resolution state.",
                            "$ref": "PromiseState"
                        },
                        {
                            "name": "value",
                            "description": "The fulfilled/rejected value, if not pending.",
                            "optional": true,
                            "$ref": "Value"
                        }
                    ]
                },
                {
                    "id": "ProxyStateData",
                    "description": "The internal state data of a proxy.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "target",
                            "description": "The target value the proxy was initialized with. May reference an object or null.",
                            "$ref": "Value"
                        },
                        {
                            "name": "handler",
                            "description": "The handler value the proxy was initialized with. May reference an object or null.",
                            "$ref": "Value"
                        }
                    ]
                },
                {
                    "id": "PauseData",
                    "description": "Block of data from this pause which might be useful to the protocol client.\nTo reduce the number of back-and-forth calls required over the protocol,\ndata which wasn't specifically asked for can be returned by commands or\nevents. <code>PauseData</code> objects will not duplicate data from a\n<code>PauseData</code> object produced earlier for the same pause.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "frames",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Frame"
                            }
                        },
                        {
                            "name": "scopes",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Scope"
                            }
                        },
                        {
                            "name": "objects",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Object"
                            }
                        }
                    ]
                },
                {
                    "id": "Result",
                    "description": "Result of performing an effectful operation.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "returned",
                            "description": "If the operation returned normally, the returned value.",
                            "optional": true,
                            "$ref": "Value"
                        },
                        {
                            "name": "exception",
                            "description": "If the operation threw an exception, the thrown value.",
                            "optional": true,
                            "$ref": "Value"
                        },
                        {
                            "name": "failed",
                            "description": "Set if the operation failed and no value was returned or thrown.\nThis can happen when operations interact with the system in an\nunsupported way (such as by calling <code>dump()</code>)\nor if the evaluation took too long and was forcibly terminated.",
                            "optional": true,
                            "type": "boolean"
                        },
                        {
                            "name": "data",
                            "description": "Any additional data associated with the returned/thrown value.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "id": "ObjectPreviewLevel",
                    "description": "Levels of detail for an object preview.\n<br>\n<br><code>none</code>: Don't actually generate a preview, but just an <code>Object</code>\n  with non-preview information.\n<br><code>noProperties</code>: Generate an overflowing preview with no properties.\n<br><code>canOverflow</code>: Generate a preview with some properties.\n  If there are too many properties, some may be omitted and the preview will overflow.\n<br><code>full</code>: Generate a non-overflowing preview with as many properties as possible.\n  For very large objects, some properties may be omitted from the result.\n<br><br>",
                    "type": "string",
                    "enum": [
                        "none",
                        "noProperties",
                        "canOverflow",
                        "full"
                    ]
                }
            ],
            "commands": [
                {
                    "name": "evaluateInFrame",
                    "description": "Evaluate an expression in the context of a call frame. This command is\neffectful.",
                    "parameters": [
                        {
                            "name": "frameId",
                            "description": "Frame to perform the evaluation in.",
                            "$ref": "FrameId"
                        },
                        {
                            "name": "expression",
                            "description": "Expression to evaluate.",
                            "type": "string"
                        },
                        {
                            "name": "pure",
                            "description": "Execute the expression without side-effects. Usage of this parameter\nwill result in an error response if the target has not opted in to the\n'pureEval' capability. If a target has not opted in, it may assume\nthat this parameter will always be false.",
                            "optional": true,
                            "type": "boolean"
                        },
                        {
                            "name": "useOriginalScopes",
                            "description": "Whether to perform the evaluation in the context of the original\nscope chain for the frame.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "Result of the evaluation.",
                            "$ref": "Result"
                        }
                    ]
                },
                {
                    "name": "evaluateInGlobal",
                    "description": "Evaluate an expression in a global context. This command is effectful.",
                    "parameters": [
                        {
                            "name": "expression",
                            "description": "Expression to evaluate.",
                            "type": "string"
                        },
                        {
                            "name": "pure",
                            "description": "Execute the expression without side-effects. Usage of this parameter\nwill result in an error response if the target has not opted in to the\n'pureEval' capability. If a target has not opted in, it may assume\nthat this parameter will always be false.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "Result of the evaluation.",
                            "$ref": "Result"
                        }
                    ]
                },
                {
                    "name": "getObjectProperty",
                    "description": "Read a property from an object. This command is effectful.",
                    "parameters": [
                        {
                            "name": "object",
                            "description": "Object to get the property from.",
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "name",
                            "description": "Property to get.",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "Result of getting the property.",
                            "$ref": "Result"
                        }
                    ]
                },
                {
                    "name": "callFunction",
                    "description": "Call a function object. This command is effectful.",
                    "parameters": [
                        {
                            "name": "object",
                            "description": "Function or other object to call.",
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "thisValue",
                            "description": "<code>this</code> value to use for the call.",
                            "$ref": "Value"
                        },
                        {
                            "name": "argumentValues",
                            "description": "Arguments to use for the call.",
                            "type": "array",
                            "items": {
                                "$ref": "Value"
                            }
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "Result of the call.",
                            "$ref": "Result"
                        }
                    ]
                },
                {
                    "name": "callObjectProperty",
                    "description": "Read a property from an object, then call the result. This command is effectful.",
                    "parameters": [
                        {
                            "name": "object",
                            "description": "Object to perform the call on.",
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "name",
                            "description": "Property to call.",
                            "type": "string"
                        },
                        {
                            "name": "argumentValues",
                            "description": "Arguments to use for the call.",
                            "type": "array",
                            "items": {
                                "$ref": "Value"
                            }
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "Result of the call.",
                            "$ref": "Result"
                        }
                    ]
                },
                {
                    "name": "getObjectPreview",
                    "description": "Load a preview for an object.",
                    "parameters": [
                        {
                            "name": "object",
                            "description": "Object to load the preview for.",
                            "$ref": "ObjectId"
                        },
                        {
                            "name": "level",
                            "description": "Amount of data desired in the resulting preview. If omitted, the full\nnon-overflowing preview for the object will be returned.",
                            "optional": true,
                            "$ref": "ObjectPreviewLevel"
                        }
                    ],
                    "returns": [
                        {
                            "name": "data",
                            "description": "Returned data. This includes a preview for the object, and additional\ndata for objects which it references.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "name": "getScope",
                    "description": "Load a scope's contents.",
                    "parameters": [
                        {
                            "name": "scope",
                            "description": "Scope to load.",
                            "$ref": "ScopeId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "data",
                            "description": "Returned data. This includes the scope's contents, and additional data\nfor objects which it references.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "name": "getTopFrame",
                    "description": "Get the topmost frame on the stack.",
                    "returns": [
                        {
                            "name": "frame",
                            "description": "ID of the topmost frame, if there is one.",
                            "optional": true,
                            "$ref": "FrameId"
                        },
                        {
                            "name": "data",
                            "description": "Any data associated with the frame.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "name": "getAllFrames",
                    "description": "Get all frames on the stack.",
                    "returns": [
                        {
                            "name": "frames",
                            "description": "IDs of all frames on the stack.",
                            "$ref": "CallStack"
                        },
                        {
                            "name": "data",
                            "description": "Any data associated with the frames.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "name": "getFrameArguments",
                    "description": "Get the values of a frame's arguments.",
                    "parameters": [
                        {
                            "name": "frameId",
                            "description": "Frame to get the parameters for.",
                            "$ref": "FrameId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "argumentValues",
                            "description": "Current values of each of the frame's arguments. Omitted for non-call frames.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Value"
                            }
                        },
                        {
                            "name": "data",
                            "description": "Any data associated with the argument values.",
                            "$ref": "PauseData"
                        }
                    ]
                },
                {
                    "name": "getFrameSteps",
                    "description": "Get the points of all steps that are executed by a frame.\n\nIf this is a generator frame then steps from all places where the frame\nexecuted will be returned, except in parts of the recording are unloaded\n(see <code>Session.listenForLoadChanges</code>).",
                    "parameters": [
                        {
                            "name": "frameId",
                            "description": "Frame to get steps for.",
                            "$ref": "FrameId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "steps",
                            "description": "Execution points for all steps which the frame executes.",
                            "type": "array",
                            "items": {
                                "$ref": "Debugger.PointDescription"
                            }
                        }
                    ]
                },
                {
                    "name": "getExceptionValue",
                    "description": "Get any exception that is being thrown at this point.",
                    "returns": [
                        {
                            "name": "exception",
                            "description": "If an exception is being thrown, the exception's value.",
                            "optional": true,
                            "$ref": "Value"
                        },
                        {
                            "name": "data",
                            "description": "Any additional data associated with the exception.",
                            "$ref": "PauseData"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "DOM",
            "description": "The DOM domain is used to inspect the DOM at particular execution points.\nInspecting the DOM requires a <code>Pause.PauseId</code>, and DOM nodes\nare identified by a <code>Pause.ObjectId</code>.\n\n<br><br>All commands and events in this domain must include both a <code>sessionId</code>\nand a <code>pauseId</code>.",
            "sessionId": true,
            "pauseId": true,
            "commands": [
                {
                    "name": "getDocument",
                    "description": "Get the page's root document.",
                    "returns": [
                        {
                            "name": "document",
                            "description": "ID for the document.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "data",
                            "description": "Information about the document and related nodes.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "getParentNodes",
                    "description": "Load previews for an object and its transitive parents up to the\nroot document.",
                    "parameters": [
                        {
                            "name": "node",
                            "description": "Node to load the previews for.",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "data",
                            "description": "Returned data, including previews for the object and its transitive parents.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "querySelector",
                    "description": "Call querySelector() on a node in the page.",
                    "parameters": [
                        {
                            "name": "node",
                            "description": "Base node for the query.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "selector",
                            "description": "Selector to query.",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "result",
                            "description": "ID of the found node, omitted if none was found.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "data",
                            "description": "Information about the returned node and related nodes, including all\nparent nodes up to the root document.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "getEventListeners",
                    "description": "Get the event listeners attached to a node in the page.",
                    "parameters": [
                        {
                            "name": "node",
                            "description": "Node to get listeners for.",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "listeners",
                            "description": "All event listeners for the node.",
                            "type": "array",
                            "items": {
                                "$ref": "EventListener"
                            }
                        },
                        {
                            "name": "data",
                            "description": "Additional information about the event listeners.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "getBoxModel",
                    "description": "Get boxes for a node.",
                    "parameters": [
                        {
                            "name": "node",
                            "description": "Node to get boxes for.",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "model",
                            "description": "Box model data for the node.",
                            "$ref": "BoxModel"
                        }
                    ]
                },
                {
                    "name": "getBoundingClientRect",
                    "description": "Get the bounding client rect for a node.",
                    "parameters": [
                        {
                            "name": "node",
                            "description": "Node to get the bounds for.",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "rect",
                            "description": "Bounding client rect for the node.",
                            "$ref": "Rect"
                        }
                    ]
                },
                {
                    "name": "getAllBoundingClientRects",
                    "description": "Get the bounding client rect for all elements on the page.",
                    "returns": [
                        {
                            "name": "elements",
                            "description": "All elements on the page and their bounding client rects. These are\nare given in stacking order: elements earlier in the list will be drawn\nin front of later elements.",
                            "type": "array",
                            "items": {
                                "$ref": "NodeBounds"
                            }
                        }
                    ]
                },
                {
                    "name": "performSearch",
                    "description": "Search the DOM for nodes containing a string.",
                    "parameters": [
                        {
                            "name": "query",
                            "description": "Text to search for.",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "nodes",
                            "description": "Nodes whose name, attributes, or text content contains the query string.",
                            "type": "array",
                            "items": {
                                "$ref": "Pause.ObjectId"
                            }
                        },
                        {
                            "name": "data",
                            "description": "Any data associated with the returned nodes, including all parent nodes\nup to the root document.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                },
                {
                    "name": "repaintGraphics",
                    "description": "Paint the state of the DOM at this pause, even if no equivalent paint\noccurred when originally recording. In the latter case a best-effort attempt\nwill be made to paint the current graphics, but the result might not be\nidentical to what would have originally been drawn while recording.",
                    "returns": [
                        {
                            "name": "description",
                            "description": "Description of the resulting screen shot.",
                            "$ref": "Graphics.ScreenShotDescription"
                        },
                        {
                            "name": "screenShot",
                            "description": "Contents of the screen shot. If an identical screen shot was previously\nreturned, this will be omitted.",
                            "optional": true,
                            "$ref": "Graphics.ScreenShot"
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "EventListener",
                    "description": "Description of an event listener on a page.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "node",
                            "description": "Node the listener is attached to.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "handler",
                            "description": "Handler function associated with the listener.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "type",
                            "description": "Event being listened for.",
                            "type": "string"
                        },
                        {
                            "name": "capture",
                            "description": "Whether the listener captures events.",
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "Node",
                    "description": "Description of a node's contents which is attached to its\nassociated <code>Pause.ObjectPreview.node</code>.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "nodeType",
                            "description": "Value of <code>node.nodeType</code>.",
                            "type": "integer"
                        },
                        {
                            "name": "nodeName",
                            "description": "Value of <code>node.nodeName</code>.",
                            "type": "string"
                        },
                        {
                            "name": "nodeValue",
                            "description": "Value of <code>node.nodeValue</code>.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "isConnected",
                            "description": "Value of <code>node.isConnected</code>.",
                            "type": "boolean"
                        },
                        {
                            "name": "attributes",
                            "description": "For element nodes, the attributes.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Attr"
                            }
                        },
                        {
                            "name": "pseudoType",
                            "description": "For pseudo elements, the pseudo type.",
                            "optional": true,
                            "$ref": "PseudoType"
                        },
                        {
                            "name": "style",
                            "description": "For element nodes, ID of any inline style declaration.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "parentNode",
                            "description": "ID of any <code>node.parentNode</code>. For the document node in an\n<code>iframe</code>, this will be the <code>iframe</code> element itself\ninstead of null.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "childNodes",
                            "description": "IDs of all <code>node.childNodes</code>. For <code>iframe</code> elements\nthis will additionally contain the document element of that frame.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Pause.ObjectId"
                            }
                        },
                        {
                            "name": "documentURL",
                            "description": "For document nodes, the <code>URL</code> property.",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "Attr",
                    "description": "Description of an element attribute.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "name",
                            "description": "Value of <code>attr.name</code>.",
                            "type": "string"
                        },
                        {
                            "name": "value",
                            "description": "Value of <code>attr.value</code>.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "PseudoType",
                    "description": "Type of a pseudo element.",
                    "type": "string",
                    "enum": [
                        "before",
                        "after",
                        "marker"
                    ]
                },
                {
                    "id": "BoxModel",
                    "description": "Description of the box model for a node.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "node",
                            "description": "Node this is the box model for.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "content",
                            "description": "Quads holding the node's content.",
                            "$ref": "Quads"
                        },
                        {
                            "name": "padding",
                            "description": "Quads including the content and any padding between the border.",
                            "$ref": "Quads"
                        },
                        {
                            "name": "border",
                            "description": "Quads including the border.",
                            "$ref": "Quads"
                        },
                        {
                            "name": "margin",
                            "description": "Quads including the border and any margin between other nodes.",
                            "$ref": "Quads"
                        }
                    ]
                },
                {
                    "id": "Quads",
                    "description": "Compact representation of an array of DOMQuads, projected onto the <code>x/y</code>\nplane (i.e. <code>z</code> and <code>w</code> values in points are ignored).\nEach quad is 8 elements, with the <code>x</code> and <code>y</code> coordinates\nof the four points in the quad. The entire array will have a length that is a\nmultiple of 8.",
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                {
                    "id": "Rect",
                    "description": "Compact representation of a DOMRect. A rect has four elements, listing the\nrect's <code>left</code>, <code>top</code>, <code>right</code>, and\n<code>bottom</code> values in order.",
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                {
                    "id": "ClipBounds",
                    "description": "Clipping bounds that are applied to an element. These come from an ancestor\nelement that has the CSS overflow property set. Bounds that have no effect\non the element are left out.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "left",
                            "optional": true,
                            "type": "number"
                        },
                        {
                            "name": "top",
                            "optional": true,
                            "type": "number"
                        },
                        {
                            "name": "right",
                            "optional": true,
                            "type": "number"
                        },
                        {
                            "name": "bottom",
                            "optional": true,
                            "type": "number"
                        }
                    ]
                },
                {
                    "id": "NodeBounds",
                    "description": "Describes the bounding client rect for a node.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "node",
                            "description": "Node being described.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "rect",
                            "description": "Bounding client rect for the node. This is the smallest rect that\nincludes all client rects.",
                            "$ref": "Rect"
                        },
                        {
                            "name": "rects",
                            "description": "All client rects for the node if there is more than one.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Rect"
                            }
                        },
                        {
                            "name": "clipBounds",
                            "description": "Clipping bounds for the node.",
                            "optional": true,
                            "$ref": "ClipBounds"
                        },
                        {
                            "name": "visibility",
                            "description": "Set to <code>\"hidden\"</code> for nodes with that CSS property",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "pointerEvents",
                            "description": "Set to <code>\"none\"</code> for nodes with that CSS property",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "CSS",
            "description": "The CSS domain is used to inspect the CSS state at particular execution points.\n\n<br><br>All commands and events in this domain must include both a <code>sessionId</code>\nand a <code>pauseId</code>.",
            "sessionId": true,
            "pauseId": true,
            "commands": [
                {
                    "name": "getComputedStyle",
                    "description": "Get the styles computed for a node.",
                    "parameters": [
                        {
                            "name": "node",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "computedStyle",
                            "type": "array",
                            "items": {
                                "$ref": "ComputedStyleProperty"
                            }
                        }
                    ]
                },
                {
                    "name": "getAppliedRules",
                    "description": "Get the style rules being applied to a node.",
                    "parameters": [
                        {
                            "name": "node",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "rules",
                            "description": "All style rules being applied to the node. This includes rules that\napply directly to this node or to one of its pseudo-elements.\nRules are grouped by their pseudo-element (if any) and are ordered by\nprecedence, with higher priority rules (higher specificity, or later\nappearance in style sheets) given first.",
                            "type": "array",
                            "items": {
                                "$ref": "AppliedRule"
                            }
                        },
                        {
                            "name": "data",
                            "description": "Information about the rules and related objects.",
                            "$ref": "Pause.PauseData"
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "ComputedStyleProperty",
                    "description": "A style which is applied to a node.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "name",
                            "description": "Name of the style.",
                            "type": "string"
                        },
                        {
                            "name": "value",
                            "description": "Value of the style.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "AppliedRule",
                    "description": "Information about a rule applied to a node.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "rule",
                            "description": "ID of the rule being applied to the node.",
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "pseudoElement",
                            "description": "Pseudo-element of the node the rule is applied to, if any.",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "Rule",
                    "description": "Description of a CSSRule's contents which is attached to its\nassociated <code>Pause.ObjectPreview.rule</code>.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "type",
                            "description": "Value of <code>rule.type</code>.",
                            "type": "integer"
                        },
                        {
                            "name": "cssText",
                            "description": "Value of <code>rule.cssText</code>.",
                            "type": "string"
                        },
                        {
                            "name": "parentStyleSheet",
                            "description": "The ID of any style sheet this rule is associated with.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "startLine",
                            "description": "Start line in the parent style sheet (1-indexed).",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "startColumn",
                            "description": "Start column in the parent style sheet (0-indexed).",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "originalLocation",
                            "description": "If the parent style sheet is source mapped, the original location of the rule.",
                            "optional": true,
                            "$ref": "OriginalStyleSheetLocation"
                        },
                        {
                            "name": "selectorText",
                            "description": "For <code>CSSStyleRule</code> objects, the value of <code>rule.selectorText</code>.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "style",
                            "description": "For <code>CSSStyleRule</code> objects, the ID of the rule's style declaration.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        }
                    ]
                },
                {
                    "id": "StyleDeclaration",
                    "description": "Description of a CSSStyleDeclaration's contents which is attached to its\nassociated <code>Pause.ObjectPreview.style</code>.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "cssText",
                            "description": "Value of <code>style.cssText</code>.",
                            "type": "string"
                        },
                        {
                            "name": "parentRule",
                            "description": "If this declaration originates from a CSSStyleRule, ID of that rule.",
                            "optional": true,
                            "$ref": "Pause.ObjectId"
                        },
                        {
                            "name": "properties",
                            "description": "Style properties of this declaration.",
                            "type": "array",
                            "items": {
                                "$ref": "StyleProperty"
                            }
                        }
                    ]
                },
                {
                    "id": "StyleProperty",
                    "description": "Information about a style property declaration.",
                    "$ref": "ComputedStyleProperty",
                    "properties": [
                        {
                            "name": "important",
                            "description": "Whether the property is marked <code>!important</code>. Defaults to\n<code>false</code> if omitted.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "StyleSheet",
                    "description": "Description of a StyleSheet's contents which is attached to its\nassociated <code>Pause.ObjectPreview.styleSheet</code>.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "href",
                            "description": "URL of the style sheet.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "isSystem",
                            "description": "Whether this sheet is internal to the browser itself.",
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "OriginalStyleSheetLocation",
                    "description": "Location of a rule within an original style sheet.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "href",
                            "description": "URL of the original style sheet.",
                            "type": "string"
                        },
                        {
                            "name": "startLine",
                            "description": "Start line in the style sheet (1-indexed).",
                            "type": "integer"
                        },
                        {
                            "name": "startColumn",
                            "description": "Start column in the style sheet (0-indexed).",
                            "type": "integer"
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Analysis",
            "description": "The Analysis domain is used to efficiently analyze the program state at many\nexecution points. Analysis specifications are based on the MapReduce\nalgorithm: a map operation is performed on all the execution points of\ninterest, and the results are reduced to a summary afterwards.\n\n<br><br>The life cycle of an analysis is as follows. First, use <code>createAnalysis</code>\nto create the analysis and specify its map and reduce operations. Next, use one\nor more other commands to specify the set of execution points to apply the\nanalysis to. Finally, use <code>runAnalysis</code> to start running the\nanalysis and generate <code>analysisResult</code> events.\n\n<br><br>All commands and events in this domain must include a <code>sessionId</code>.",
            "sessionId": true,
            "types": [
                {
                    "id": "AnalysisId",
                    "description": "Unique identifier for an analysis.",
                    "type": "string"
                },
                {
                    "id": "MapInput",
                    "description": "Input to the mapper function.",
                    "$ref": "Recording.TimeStampedPoint",
                    "properties": [
                        {
                            "name": "pauseId",
                            "description": "Pause ID created for the current execution point.",
                            "$ref": "Pause.PauseId"
                        }
                    ]
                },
                {
                    "id": "AnalysisKey",
                    "description": "Key for an analysis result. This can be any JSON value. Keys are equivalent\nif they are structurally equivalent: they have the same contents, though\nobject keys may be ordered differently when stringified.",
                    "type": "any"
                },
                {
                    "id": "AnalysisValue",
                    "description": "Value for an analysis result. This can be any JSON value.",
                    "type": "any"
                },
                {
                    "id": "AnalysisEntry",
                    "description": "A key/value pair produced by an analysis.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "key",
                            "$ref": "AnalysisKey"
                        },
                        {
                            "name": "value",
                            "$ref": "AnalysisValue"
                        }
                    ]
                }
            ],
            "commands": [
                {
                    "name": "createAnalysis",
                    "description": "Start specifying a new analysis.",
                    "parameters": [
                        {
                            "name": "mapper",
                            "description": "Body of the mapper function. The mapper function takes two arguments:\n<code>input</code> is a <code>MapInput</code> object, and\n<code>sendCommand</code> is a function that can be passed a command\nname and parameters (in that order) and synchronously returns the\ncommand result. Only methods from the <code>Pause</code> domain may\nbe used with <code>sendCommand</code>. The mapper function must\nreturn an array of <code>AnalysisEntry</code> objects.",
                            "type": "string"
                        },
                        {
                            "name": "name",
                            "description": "A logical name for the analysis.  Does not have any constraints\naside from being a valid string.  May be omitted.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "priority",
                            "description": "A priority for the analysis.  The priority must be one of the strings\n<code>\"user\"</code> (indicating that the analysis was user-created),\nor <code>\"app\"</code> (indicating that the analysis was automatically\ncreated by the frontend app).  The priority may be omitted, in\nwhich case <code>\"user\"</code> priority is assumed.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "reducer",
                            "description": "Body of the reducer function. The reducer function takes two arguments:\n<code>key</code> is an <code>AnalysisKey</code>, and <code>values</code>\nis an array of <code>AnalysisValue</code>. All the values\nwere associated with the key by an earlier call to <code>mapper</code>\n<strong>or</strong> <code>reducer</code>. The reducer function must\nreturn an <code>AnalysisValue</code>, which summarizes all\nthe input values and will be associated with <code>key</code> for\n<code>analysisResult</code> events or further calls to the reducer.\nThe reducer may be omitted if no reduction phase is needed.",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "effectful",
                            "description": "Whether effectful commands in the <code>Pause</code> domain might be\nsent by the mapper function. An analysis which does not use effectful\ncommands will run more efficiently. See the <code>Pause</code> domain\nfor which commands are effectful.",
                            "type": "boolean"
                        },
                        {
                            "name": "range",
                            "description": "Any subrange of the recording which the analysis will run in.",
                            "optional": true,
                            "$ref": "Recording.PointRange"
                        }
                    ],
                    "returns": [
                        {
                            "name": "analysisId",
                            "description": "ID of the resulting analysis.",
                            "$ref": "AnalysisId"
                        }
                    ]
                },
                {
                    "name": "addLocation",
                    "description": "Apply the analysis to every point where a source location executes.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "location",
                            "description": "Location to apply the analysis to.",
                            "$ref": "Debugger.Location"
                        },
                        {
                            "name": "onStackFrame",
                            "description": "If specified, the analysis will only be applied to matching points which\nexecute while this point's frame is on the stack.",
                            "optional": true,
                            "$ref": "Recording.ExecutionPoint"
                        }
                    ]
                },
                {
                    "name": "addFunctionEntryPoints",
                    "description": "Apply the analysis to every function entry point in a region of a source.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "sourceId",
                            "description": "Source to look for function entry points in.",
                            "$ref": "Debugger.SourceId"
                        },
                        {
                            "name": "begin",
                            "description": "If specified, earlier functions will be excluded.",
                            "optional": true,
                            "$ref": "Debugger.SourceLocation"
                        },
                        {
                            "name": "end",
                            "description": "If specified, later functions will be excluded.",
                            "optional": true,
                            "$ref": "Debugger.SourceLocation"
                        }
                    ]
                },
                {
                    "name": "addRandomPoints",
                    "description": "Apply the analysis to a random selection of points.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "numPoints",
                            "description": "Maximum number of points to apply the analysis to.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "addEventHandlerEntryPoints",
                    "description": "Apply the analysis to the entry point of every handler for an event.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "eventType",
                            "description": "Type of event whose handler calls the analysis should be applied to.",
                            "$ref": "Debugger.EventHandlerType"
                        }
                    ]
                },
                {
                    "name": "addExceptionPoints",
                    "description": "Apply the analysis to every point where an exception is thrown.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        }
                    ]
                },
                {
                    "name": "addPoints",
                    "description": "Apply the analysis to a specific set of points.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "points",
                            "description": "Points to apply the analysis to.",
                            "type": "array",
                            "items": {
                                "$ref": "Recording.ExecutionPoint"
                            }
                        }
                    ]
                },
                {
                    "name": "runAnalysis",
                    "description": "Run the analysis. After this is called, <code>analysisResult</code> and/or\n<code>analysisError</code> events will be emitted as results are gathered.\nDoes not return until the analysis has finished and all events have been\nemitted. Results will not be gathered in parts of the recording that are\nunloaded, see <code>Session.listenForLoadChanges</code> and\n<code>Session.loadRegion</code>.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Analysis to run.",
                            "$ref": "AnalysisId"
                        }
                    ]
                },
                {
                    "name": "releaseAnalysis",
                    "description": "Release an analysis and its server side resources. If the analysis is\nrunning, it will be canceled, preventing further <code>analysisResult</code>\nand <code>analysisError</code> events from being emitted.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Analysis to release.",
                            "$ref": "AnalysisId"
                        }
                    ]
                },
                {
                    "name": "findAnalysisPoints",
                    "description": "Find the set of execution points at which an analysis will run. After this\nis called, <code>analysisPoints</code> events will be emitted as the points\nare found. Does not return until events for all points have been emitted.\nPoints will not be emitted for parts of the recording that are\nunloaded, see <code>Session.listenForLoadChanges</code> and\n<code>Session.loadRegion</code>.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Analysis to find points for.",
                            "$ref": "AnalysisId"
                        }
                    ]
                }
            ],
            "events": [
                {
                    "name": "analysisResult",
                    "description": "Describes some results of an analysis.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "results",
                            "description": "Results for different keys. If a reducer was specified, a given key can\nonly appear once in the results emitted for the analysis.",
                            "type": "array",
                            "items": {
                                "$ref": "AnalysisEntry"
                            }
                        }
                    ]
                },
                {
                    "name": "analysisError",
                    "description": "Describes an error that occurred when running an analysis mapper or reducer\nfunction. This will not be emitted for every error, but if there was any\nerror then at least one event will be emitted.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "error",
                            "description": "Description of the error.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "analysisPoints",
                    "description": "Describes some points at which an analysis will run.",
                    "parameters": [
                        {
                            "name": "analysisId",
                            "description": "Associated analysis.",
                            "$ref": "AnalysisId"
                        },
                        {
                            "name": "points",
                            "description": "Some points at which the analysis will run.",
                            "type": "array",
                            "items": {
                                "$ref": "Debugger.PointDescription"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Network",
            "description": "The Network domain is used to inspect the Network state at particular execution points.\n\n<br><br>All commands and events in this domain must include both a <code>sessionId</code>.",
            "sessionId": true,
            "types": [
                {
                    "id": "RequestId",
                    "description": "The string id of a request.",
                    "type": "string"
                },
                {
                    "id": "BodyRange",
                    "description": "The range offsets within a request/response body.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "start",
                            "description": "The inclusive start location of the data.\nDefaults to zero.",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "end",
                            "description": "The exclusive end location of the data.\nDefaults to the length of the data.",
                            "optional": true,
                            "type": "integer"
                        }
                    ]
                },
                {
                    "id": "BodyData",
                    "description": "A piece of request/response data. Currently only base64-encoded\nbinary data, but may be expanded in the future to handle\nwebsockets and other data stream types.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "offset",
                            "description": "The inclusive start location of the data.",
                            "type": "integer"
                        },
                        {
                            "name": "length",
                            "description": "The length of the data.",
                            "type": "integer"
                        },
                        {
                            "name": "value",
                            "description": "A string containing the data.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "RequestBodyData",
                    "description": "A piece of data from the request body.",
                    "$ref": "BodyData",
                    "properties": [
                        {
                            "name": "point",
                            "description": "The point where the this piece of request data was sent, for example\nif the request body was generated from a stream, or as many separate\nwebsocket messages.",
                            "optional": true,
                            "$ref": "Recording.TimeStampedPoint"
                        }
                    ]
                },
                {
                    "id": "ResponseBodyData",
                    "description": "A piece of data from the response body.",
                    "$ref": "BodyData"
                },
                {
                    "id": "RequestInfo",
                    "description": "The basic information about a request.",
                    "$ref": "Recording.TimeStampedPoint",
                    "properties": [
                        {
                            "name": "id",
                            "description": "The unique identifier for this request.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "triggerPoint",
                            "description": "The point where the request was initiated. The same point may trigger\nmultiple requests, such as in the case of a request that redirects.",
                            "optional": true,
                            "$ref": "Recording.TimeStampedPoint"
                        }
                    ]
                },
                {
                    "id": "RequestEventInfo",
                    "description": "The basic information about events emitted by a request.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "id",
                            "description": "The unique identifier for the request this event\nis associated with.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "time",
                            "description": "The time that the info appeared.",
                            "type": "number"
                        },
                        {
                            "name": "event",
                            "description": "Data about the event that occured.",
                            "$ref": "RequestEvent"
                        }
                    ]
                },
                {
                    "id": "Header",
                    "description": "An HTTP header key/value pair.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "name",
                            "description": "The header name.",
                            "type": "string"
                        },
                        {
                            "name": "value",
                            "description": "The header value.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "RequestEvent",
                    "description": "A tagged union type of all of the request events.\nUse 'kind' to differentiate the events.",
                    "type": "object",
                    "enum": [
                        {
                            "$ref": "RequestOpenEvent"
                        },
                        {
                            "$ref": "RequestRawHeaderEvent"
                        },
                        {
                            "$ref": "RequestDestinationEvent"
                        },
                        {
                            "$ref": "RequestResponseEvent"
                        },
                        {
                            "$ref": "RequestResponseRawHeaderEvent"
                        },
                        {
                            "$ref": "RequestDoneEvent"
                        },
                        {
                            "$ref": "RequestFailedEvent"
                        },
                        {
                            "$ref": "RequestResponseBodyEvent"
                        }
                    ]
                },
                {
                    "id": "RequestOpenEvent",
                    "description": "An event representing the beginning of a request.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request\""
                        },
                        {
                            "name": "requestUrl",
                            "description": "The URL being loaded by the request.",
                            "type": "string"
                        },
                        {
                            "name": "requestMethod",
                            "description": "The HTTP method used for the request.",
                            "type": "string"
                        },
                        {
                            "name": "requestHeaders",
                            "description": "The HTTP headers sent with the request.",
                            "type": "array",
                            "items": {
                                "$ref": "Header"
                            }
                        },
                        {
                            "name": "requestCause",
                            "description": "A short string identifying the cause of the request,\ne.g. 'img', 'fetch', 'document', and so on",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "RequestRawHeaderEvent",
                    "description": "An event representing the request having sent raw headers.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request-raw-headers\""
                        },
                        {
                            "name": "requestRawHeaders",
                            "description": "The raw HTTP header that was sent with the request.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "RequestDestinationEvent",
                    "description": "An event representing information about the request's destination.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request-destination\""
                        },
                        {
                            "name": "destinationAddress",
                            "description": "The IP address of the destination.",
                            "type": "string"
                        },
                        {
                            "name": "destinationPort",
                            "description": "The port number of the destination.",
                            "type": "number"
                        }
                    ]
                },
                {
                    "id": "RequestResponseEvent",
                    "description": "An event representing the response to a request being received.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"response\""
                        },
                        {
                            "name": "responseHeaders",
                            "description": "The HTTP headers sent with the response.",
                            "type": "array",
                            "items": {
                                "$ref": "Header"
                            }
                        },
                        {
                            "name": "responseProtocolVersion",
                            "description": "The HTTP version of the response.",
                            "type": "string"
                        },
                        {
                            "name": "responseStatus",
                            "description": "The HTTP status code of the response.",
                            "type": "number"
                        },
                        {
                            "name": "responseStatusText",
                            "description": "The HTTP status text of the response.",
                            "type": "string"
                        },
                        {
                            "name": "responseFromCache",
                            "description": "Indicates whether the response was served from cache.",
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "RequestResponseRawHeaderEvent",
                    "description": "An event representing the response having received raw headers.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"response-raw-headers\""
                        },
                        {
                            "name": "responseRawHeaders",
                            "description": "The raw HTTP header that was sent with the response.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "RequestResponseBodyEvent",
                    "description": "An event representing the presence of a response body for this\nrequest, indicating a Network.getResponseBody command will not\nthrow an error for this request.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"response-body\""
                        }
                    ]
                },
                {
                    "id": "RequestBodyEvent",
                    "description": "An event representing the presence of a request body for this\nrequest, indicating a Network.getRequestBody command will not\nthrow an error for this request.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request-body\""
                        }
                    ]
                },
                {
                    "id": "RequestDoneEvent",
                    "description": "An event representing the request having completed.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request-done\""
                        },
                        {
                            "name": "encodedBodySize",
                            "description": "The number of bytes transferred for the body.",
                            "type": "number"
                        },
                        {
                            "name": "decodedBodySize",
                            "description": "The number of bytes after content decoding.\nNull if the data didn't have a content-encoding.",
                            "optional": true,
                            "type": "number"
                        }
                    ]
                },
                {
                    "id": "RequestFailedEvent",
                    "description": "An event representing the request having failed.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this event.",
                            "type": "\"request-failed\""
                        },
                        {
                            "name": "requestFailedReason",
                            "description": "A short description of the cause of the failure.",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                }
            ],
            "commands": [
                {
                    "name": "getRequestBody",
                    "description": "Query the recording for all of the parts of this request body.\nThe server will emit 'requestBodyData' events for all parts, and\nthis command will not complete until all parts have been sent.",
                    "parameters": [
                        {
                            "name": "id",
                            "description": "The id of the request to load.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "range",
                            "description": "The range of data to fetch from the body.",
                            "optional": true,
                            "$ref": "BodyRange"
                        }
                    ]
                },
                {
                    "name": "getResponseBody",
                    "description": "Query the recording for all of the parts of this response body.\nThe server will emit 'responseBodyData' events for all parts, and\nthis command will not complete until all parts have been sent.",
                    "parameters": [
                        {
                            "name": "id",
                            "description": "The id of the request to load.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "range",
                            "description": "The range of data to fetch from the body.",
                            "optional": true,
                            "$ref": "BodyRange"
                        }
                    ]
                },
                {
                    "name": "findRequests",
                    "description": "Query the recording for all network data that is available, returning once\nall 'Network.requests' events have been dispatched."
                }
            ],
            "events": [
                {
                    "name": "requestBodyData",
                    "description": "Emit data about a request body as it is processed.\nParts are not guaranteed to be emitted in order.",
                    "parameters": [
                        {
                            "name": "id",
                            "description": "The id of the request to the body belongs to.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "parts",
                            "description": "Pieces of data belonging to the request body.",
                            "type": "array",
                            "items": {
                                "$ref": "RequestBodyData"
                            }
                        }
                    ]
                },
                {
                    "name": "responseBodyData",
                    "description": "Emit data about a response body as it is processed.\nParts are not guaranteed to be emitted in order.",
                    "parameters": [
                        {
                            "name": "id",
                            "description": "The id of the request to the body belongs to.",
                            "$ref": "RequestId"
                        },
                        {
                            "name": "parts",
                            "description": "Pieces of data belonging to the response body.",
                            "type": "array",
                            "items": {
                                "$ref": "ResponseBodyData"
                            }
                        }
                    ]
                },
                {
                    "name": "requests",
                    "description": "Describe some requests that were dispatched by the recording.\n\nNOTE: There is no guarantee that request information will be available\nbefore the request event info, so all temporal combinations should be\nsupported when processing this data.",
                    "parameters": [
                        {
                            "name": "requests",
                            "description": "A list of requests found in the recording.",
                            "type": "array",
                            "items": {
                                "$ref": "RequestInfo"
                            }
                        },
                        {
                            "name": "events",
                            "description": "A list of request event data found in the recording.",
                            "type": "array",
                            "items": {
                                "$ref": "RequestEventInfo"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Target",
            "description": "The Target domain includes commands that are sent by the Record Replay Driver\nto the target application which it is attached to. Protocol clients should\nnot use this domain. See https://replay.io/driver for more information.",
            "types": [
                {
                    "id": "Capabilities",
                    "description": "The various capabilities supported by a target.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "pureEval",
                            "description": "True if the target supports the 'pure' parameter. If this is not set,\nattempts at pure evaluation will not pass the command to the target.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ]
                },
                {
                    "id": "NetworkStreamData",
                    "description": "Represents the data pieces returned from a network stream. Always \"data\" for now\nbut we'll likely add more in the future to support Websockets.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "kind",
                            "description": "A tagged-union identifier for this data type.",
                            "type": "\"data\""
                        },
                        {
                            "name": "value",
                            "description": "A string containing the data.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "id": "PossibleBreakpointsForSource",
                    "type": "object",
                    "properties": [
                        {
                            "name": "sourceId",
                            "$ref": "SourceId"
                        },
                        {
                            "name": "lineLocations",
                            "type": "array",
                            "items": {
                                "$ref": "Debugger.SameLineSourceLocations"
                            }
                        }
                    ]
                }
            ],
            "commands": [
                {
                    "name": "getCapabilities",
                    "description": "Query the target for general information about what capabilities it supports.",
                    "returns": [
                        {
                            "name": "capabilities",
                            "$ref": "Capabilities"
                        }
                    ]
                },
                {
                    "name": "convertLocationToFunctionOffset",
                    "description": "Get the function ID / offset to use for a source location, if there is one.",
                    "parameters": [
                        {
                            "name": "location",
                            "$ref": "Debugger.Location"
                        }
                    ],
                    "returns": [
                        {
                            "name": "functionId",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "offset",
                            "optional": true,
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "convertFunctionOffsetToLocation",
                    "description": "Get the location to use for a function ID / offset.",
                    "parameters": [
                        {
                            "name": "functionId",
                            "type": "string"
                        },
                        {
                            "name": "offset",
                            "optional": true,
                            "type": "integer"
                        }
                    ],
                    "returns": [
                        {
                            "name": "location",
                            "$ref": "Debugger.Location"
                        }
                    ]
                },
                {
                    "name": "convertFunctionOffsetsToLocations",
                    "description": "Get all the locations to use for some offsets in a function. This can be\nimplemented more efficiently by some targets than when separate\n<code>convertFunctionOffsetToLocation</code> commands are used.",
                    "parameters": [
                        {
                            "name": "functionId",
                            "description": "Function ID shared by all the offsets.",
                            "type": "string"
                        },
                        {
                            "name": "offsets",
                            "description": "Sorted array of offsets to compute the locations for.",
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    ],
                    "returns": [
                        {
                            "name": "locations",
                            "description": "Resulting locations, with the same length as <code>offsets</code>.",
                            "type": "array",
                            "items": {
                                "$ref": "Debugger.Location"
                            }
                        }
                    ]
                },
                {
                    "name": "getStepOffsets",
                    "description": "Get the offsets at which execution should pause when stepping around within\na frame for a function.",
                    "parameters": [
                        {
                            "name": "functionId",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "offsets",
                            "description": "Offsets at which execution should stop when stepping. This is a\nsubset of the breakpoint locations in the function, and may be\nomitted if execution should stop at all breakpoint locations.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    ]
                },
                {
                    "name": "getHTMLSource",
                    "description": "Get the most complete contents known for an HTML file.",
                    "parameters": [
                        {
                            "name": "url",
                            "type": "string"
                        }
                    ],
                    "returns": [
                        {
                            "name": "contents",
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "getFunctionsInRange",
                    "description": "Get the IDs of all functions in a range within a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "$ref": "Debugger.SourceId"
                        },
                        {
                            "name": "begin",
                            "optional": true,
                            "$ref": "Debugger.SourceLocation"
                        },
                        {
                            "name": "end",
                            "optional": true,
                            "$ref": "Debugger.SourceLocation"
                        }
                    ],
                    "returns": [
                        {
                            "name": "functions",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                {
                    "name": "getSourceMapURL",
                    "description": "Get any source map URL associated with a source.",
                    "parameters": [
                        {
                            "name": "sourceId",
                            "$ref": "Debugger.SourceId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "url",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "baseUrl",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "getSheetSourceMapURL",
                    "description": "Get any source map URL associated with a style sheet.",
                    "parameters": [
                        {
                            "name": "sheet",
                            "$ref": "Pause.ObjectId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "url",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "baseUrl",
                            "optional": true,
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "getCurrentMessageContents",
                    "description": "This command might be sent from within a RecordReplayOnConsoleMessage() call\nto get contents of the new message. Properties in the result have the same\nmeaning as for <code>Console.Message</code>.",
                    "returns": [
                        {
                            "name": "source",
                            "$ref": "Console.MessageSource"
                        },
                        {
                            "name": "level",
                            "$ref": "Console.MessageLevel"
                        },
                        {
                            "name": "text",
                            "type": "string"
                        },
                        {
                            "name": "url",
                            "optional": true,
                            "type": "string"
                        },
                        {
                            "name": "sourceId",
                            "optional": true,
                            "$ref": "Debugger.SourceId"
                        },
                        {
                            "name": "line",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "column",
                            "optional": true,
                            "type": "integer"
                        },
                        {
                            "name": "argumentValues",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "$ref": "Pause.Value"
                            }
                        }
                    ]
                },
                {
                    "name": "countStackFrames",
                    "description": "Count the number of stack frames on the stack. This is equivalent to using\nthe size of the stack returned by <code>Pause.getAllFrames</code>, but can\nbe implemented more efficiently.",
                    "returns": [
                        {
                            "name": "count",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "getStackFunctionIDs",
                    "description": "Get the IDs of the functions for all stack frames, ordered from topmost to\nbottommost.",
                    "returns": [
                        {
                            "name": "frameFunctions",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                {
                    "name": "currentGeneratorId",
                    "description": "If the topmost frame on the stack is a generator frame which can be popped\nand pushed on the stack repeatedly, return a unique ID for the frame which\nwill be consistent across each of those pops and pushes.",
                    "returns": [
                        {
                            "name": "id",
                            "optional": true,
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "topFrameLocation",
                    "description": "Get the location of the top frame on the stack, if there is one.",
                    "returns": [
                        {
                            "name": "location",
                            "optional": true,
                            "$ref": "Debugger.Location"
                        }
                    ]
                },
                {
                    "name": "getCurrentNetworkRequestEvent",
                    "description": "This command might be sent from within a RecordReplayOnNetworkRequestEvent()\ncall to get contents of the request data.",
                    "returns": [
                        {
                            "name": "data",
                            "$ref": "Network.RequestEvent"
                        }
                    ]
                },
                {
                    "name": "getCurrentNetworkStreamData",
                    "description": "Fetch the current data entry for a given driver OnNetworkStreamData call.",
                    "parameters": [
                        {
                            "name": "index",
                            "description": "The start index within the value to fetch.",
                            "type": "number"
                        },
                        {
                            "name": "length",
                            "description": "The amount of data to fetch.",
                            "type": "number"
                        }
                    ],
                    "returns": [
                        {
                            "name": "data",
                            "description": "The stream data available at the current location.",
                            "$ref": "NetworkStreamData"
                        }
                    ]
                },
                {
                    "name": "getPossibleBreakpointsForMultipleSources",
                    "description": "This command is used, when supported by the target runtime, to collect all\npossible breakpoints for all sources of a given region in one batch. This is\nan optimization over sending one Debugger.getPossibleBreakpoints command for\neach source.",
                    "parameters": [
                        {
                            "name": "sourceIds",
                            "type": "array",
                            "items": {
                                "$ref": "SourceId"
                            }
                        }
                    ],
                    "returns": [
                        {
                            "name": "possibleBreakpoints",
                            "type": "array",
                            "items": {
                                "$ref": "PossibleBreakpointsForSource"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "domain": "Internal",
            "description": "The Internal domain is for use in software that is used to create recordings\nand for internal/diagnostic use cases. While use of this domain is not\nrestricted, it won't be very helpful for other users.",
            "commands": [
                {
                    "name": "createRecording",
                    "description": "Create a new recording.",
                    "parameters": [
                        {
                            "name": "buildId",
                            "description": "Build Id of the software which produced the recording.",
                            "$ref": "Recording.BuildId"
                        },
                        {
                            "name": "recordingId",
                            "description": "Identifier for the recording. Must be a version 4 UUID. If not specified,\na new ID will be created.",
                            "optional": true,
                            "$ref": "Recording.RecordingId"
                        },
                        {
                            "name": "requireFinish",
                            "description": "The backend will accept all recording data until it gets an\n`Internal.finishRecording` command or the connection closes. Partial\nrecordings can be useful for debugging, but if data integrity\nis important, this option can be used to avoid ending up with a\npartially-created recording.\nWith this flag enabled, a connection loss during upload will\ninvalidate the recording rather than using the partially-complete data.",
                            "optional": true,
                            "type": "boolean"
                        }
                    ],
                    "returns": [
                        {
                            "name": "recordingId",
                            "description": "Identifier for the recording. Matches the input `recordingId` if it was\nspecified.",
                            "$ref": "Recording.RecordingId"
                        }
                    ]
                },
                {
                    "name": "setRecordingMetadata",
                    "description": "Adds metadata that is associated with the entire recording in question,\nas identified by the id field in the recordingData field. This includes things\nlike the URL being recorded as well as the token that is associated with the\nuser who started this recording.",
                    "parameters": [
                        {
                            "name": "recordingData",
                            "$ref": "RecordingData"
                        },
                        {
                            "name": "metadata",
                            "optional": true,
                            "type": "object"
                        }
                    ]
                },
                {
                    "name": "addRecordingData",
                    "description": "Add data to a recording. The next message sent after this must be a binary\nmessage with the data described by this message. A response to this command\nindicates that the data has been successfully received by the server, but it\ncould still be lost due to a server failure. Use `Internal.finishRecording`\nif you want to ensure that all data has been successfully stored.",
                    "binary": true,
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "ID of the recording data is being added to. This recording must have\nbeen produced by a createRecording command previously sent on this\nconnection.",
                            "$ref": "Recording.RecordingId"
                        },
                        {
                            "name": "offset",
                            "description": "Byte offset into the recording's blob of the data being sent.",
                            "type": "integer"
                        },
                        {
                            "name": "length",
                            "description": "Byte length of the data being sent.",
                            "type": "integer"
                        }
                    ]
                },
                {
                    "name": "addRecordingDescription",
                    "description": "Add metadata about a recording.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "ID of the recording being described.",
                            "$ref": "Recording.RecordingId"
                        },
                        {
                            "name": "length",
                            "description": "Total byte length of the recording.",
                            "type": "integer"
                        },
                        {
                            "name": "duration",
                            "description": "Duration of the entire recording.",
                            "$ref": "Recording.TimeStamp"
                        },
                        {
                            "name": "commandLineArguments",
                            "description": "Any command line arguments associated with the recording.",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                {
                    "name": "finishRecording",
                    "description": "Indicate that all data for the given recording has been sent and the recording\ncan be marked ready and complete. If this is not sent, the recording will be\nfinished as a sideeffect of the connection closing, but if backend issues\nwere to fail to save all of the data, there will be no way to know.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "ID of the recording being finished.",
                            "$ref": "Recording.RecordingId"
                        }
                    ]
                },
                {
                    "name": "beginRecordingResourceUpload",
                    "description": "Lock a given recording so that sessions will not be created\nuntil the lock has been removed.",
                    "parameters": [
                        {
                            "name": "recordingId",
                            "description": "ID of the recording.",
                            "$ref": "Recording.RecordingId"
                        }
                    ],
                    "returns": [
                        {
                            "name": "key",
                            "description": "An identifier for the lock, in order to unlock.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "endRecordingResourceUpload",
                    "description": "Unlock a lock so that sessions may be created.",
                    "parameters": [
                        {
                            "name": "key",
                            "description": "ID of the recording.",
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "echo",
                    "description": "For testing network issues.",
                    "parameters": [
                        {
                            "name": "str",
                            "type": "string"
                        },
                        {
                            "name": "count",
                            "type": "integer"
                        }
                    ],
                    "returns": [
                        {
                            "name": "str",
                            "type": "string"
                        }
                    ]
                },
                {
                    "name": "reportCrash",
                    "description": "Report information about a crash while recording.",
                    "parameters": [
                        {
                            "name": "data",
                            "type": "object"
                        }
                    ]
                }
            ],
            "types": [
                {
                    "id": "RecordingData",
                    "description": "Metadata that can be associated with a recording.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "id",
                            "$ref": "Recording.RecordingId"
                        },
                        {
                            "name": "url",
                            "type": "string"
                        },
                        {
                            "name": "title",
                            "type": "string"
                        },
                        {
                            "name": "duration",
                            "type": "integer"
                        },
                        {
                            "name": "lastScreenData",
                            "type": "string"
                        },
                        {
                            "name": "lastScreenMimeType",
                            "type": "string"
                        },
                        {
                            "name": "operations",
                            "$ref": "OperationsData"
                        }
                    ]
                },
                {
                    "id": "OperationsData",
                    "description": "Operations that could be considered security sensitive and is\ncurrently targeted at times when the recording accesses existing\ninformation from the user's profile like cookies and local storage.",
                    "type": "object",
                    "properties": [
                        {
                            "name": "scriptDomains",
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        {
                            "name": "cookies",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        {
                            "name": "storage",
                            "optional": true,
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}