syntax = "proto3"; package sentry_protos.relay.v1; import "google/protobuf/struct.proto"; /* The sentry v7 event structure. */ message Event { /* List of breadcrumbs recorded before this event. */ message EventBreadcrumbs { message EventBreadcrumbsValues { oneof has_category { string category = 1; } oneof has_data { google.protobuf.Value data = 2; } oneof has_event_id { string event_id = 3; } oneof has_level { string level = 4; } oneof has_message { string message = 5; } oneof has_timestamp { google.protobuf.Value timestamp = 6; } oneof has_type { string type = 7; } } repeated EventBreadcrumbsValues values = 1; } /* Meta data for event processing and debugging. */ message EventDebugMeta { /* Information about the system SDK (e.g. iOS SDK). */ message EventDebugMetaSdkInfo { oneof has_sdk_name { string sdk_name = 1; } oneof has_version_major { uint64 version_major = 2; } oneof has_version_minor { uint64 version_minor = 3; } oneof has_version_patchlevel { uint64 version_patchlevel = 4; } } repeated google.protobuf.Value images = 1; oneof has_sdk_info { EventDebugMetaSdkInfo sdk_info = 2; } } /* Errors encountered during processing. Intended to be phased out in favor of annotation/metadata system. */ message EventErrors { oneof has_name { string name = 1; } string type = 2; google.protobuf.Value value = 3; } /* One or multiple chained (nested) exceptions. */ message EventException { message EventExceptionValues { /* Mechanism by which this exception was generated and handled. */ message EventExceptionValuesMechanism { /* Operating system or runtime meta information. */ message EventExceptionValuesMechanismMeta { /* Optional ISO C standard error code. */ message EventExceptionValuesMechanismMetaErrno { oneof has_name { string name = 1; } oneof has_number { int64 number = 2; } } /* A Mach Exception on Apple systems comprising a code triple and optional descriptions. */ message EventExceptionValuesMechanismMetaMachException { oneof has_code { uint64 code = 1; } oneof has_exception { int64 exception = 2; } oneof has_name { string name = 3; } oneof has_subcode { uint64 subcode = 4; } } /* An NSError on Apple systems comprising code and signal. */ message EventExceptionValuesMechanismMetaNsError { oneof has_code { int64 code = 1; } oneof has_domain { string domain = 2; } } /* Information on the POSIX signal. */ message EventExceptionValuesMechanismMetaSignal { oneof has_code { int64 code = 1; } oneof has_code_name { string code_name = 2; } oneof has_name { string name = 3; } oneof has_number { int64 number = 4; } } oneof has_errno { EventExceptionValuesMechanismMetaErrno errno = 1; } oneof has_mach_exception { EventExceptionValuesMechanismMetaMachException mach_exception = 2; } oneof has_ns_error { EventExceptionValuesMechanismMetaNsError ns_error = 3; } oneof has_signal { EventExceptionValuesMechanismMetaSignal signal = 4; } } oneof has_data { google.protobuf.Value data = 1; } oneof has_description { string description = 2; } oneof has_exception_id { uint64 exception_id = 3; } oneof has_handled { bool handled = 4; } oneof has_help_link { string help_link = 5; } oneof has_is_exception_group { bool is_exception_group = 6; } oneof has_meta { EventExceptionValuesMechanismMeta meta = 7; } oneof has_parent_id { uint64 parent_id = 8; } oneof has_source { string source = 9; } oneof has_synthetic { bool synthetic = 10; } string type = 11; } /* Stack trace containing frames of this exception. */ message EventExceptionValuesStacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message EventExceptionValuesStacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message EventExceptionValuesStacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { EventExceptionValuesStacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated EventExceptionValuesStacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } oneof has_mechanism { EventExceptionValuesMechanism mechanism = 1; } oneof has_module { string module = 2; } oneof has_stacktrace { EventExceptionValuesStacktrace stacktrace = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } oneof has_type { string type = 5; } oneof has_value { string value = 6; } } repeated EventExceptionValues values = 1; } /* Custom parameterized message for this event. */ message EventLogentry { oneof has_formatted { string formatted = 1; } oneof has_message { string message = 2; } google.protobuf.Value params = 3; } /* Information about a web request that occurred during the event. */ message EventRequest { oneof has_api_target { string api_target = 1; } oneof has_body_size { uint64 body_size = 2; } oneof has_cookies { google.protobuf.Value cookies = 3; } google.protobuf.Value data = 4; oneof has_env { google.protobuf.Value env = 5; } oneof has_fragment { string fragment = 6; } oneof has_headers { google.protobuf.Value headers = 7; } oneof has_inferred_content_type { string inferred_content_type = 8; } oneof has_method { string method = 9; } oneof has_protocol { string protocol = 10; } oneof has_query_string { google.protobuf.Value query_string = 11; } oneof has_url { string url = 12; } } /* Information about the Sentry SDK that generated this event. */ message EventSdk { /* List of installed and loaded SDK packages. _Optional._ A list of packages that were installed as part of this SDK or the activated integrations. Each package consists of a name in the format `source:identifier` and `version`. If the source is a Git repository, the `source` should be `git`, the identifier should be a checkout link and the version should be a Git reference (branch, tag or SHA). */ message EventSdkPackages { oneof has_name { string name = 1; } oneof has_version { string version = 2; } } repeated string integrations = 1; string name = 2; repeated EventSdkPackages packages = 3; string version = 4; } /* Event stacktrace. DEPRECATED: Prefer `threads` or `exception` depending on which is more appropriate. */ message EventStacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message EventStacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message EventStacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { EventStacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated EventStacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } /* Threads that were active when the event occurred. */ message EventThreads { message EventThreadsValues { /* Represents a collection of locks (java monitor objects) held by a thread. A map of lock object addresses and their respective lock reason/details. */ message EventThreadsValuesHeldLocks { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } /* Stack trace containing frames of this exception. The thread that crashed with an exception should not have a stack trace, but instead, the `thread_id` attribute should be set on the exception and Sentry will connect the two. */ message EventThreadsValuesStacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message EventThreadsValuesStacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message EventThreadsValuesStacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { EventThreadsValuesStacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated EventThreadsValuesStacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } oneof has_crashed { bool crashed = 1; } oneof has_current { bool current = 2; } map held_locks = 3; oneof has_id { google.protobuf.Value id = 4; } oneof has_main { bool main = 5; } oneof has_name { string name = 6; } oneof has_stacktrace { EventThreadsValuesStacktrace stacktrace = 7; } oneof has_state { string state = 8; } } repeated EventThreadsValues values = 1; } /* Additional information about the name of the transaction. */ message EventTransactionInfo { /* A list of changes prior to the final transaction name. This list must be empty if the transaction name is set at the beginning of the transaction and never changed. There is no placeholder entry for the initial transaction name. */ message EventTransactionInfoChanges { oneof has_propagations { uint64 propagations = 1; } oneof has_source { string source = 2; } oneof has_timestamp { google.protobuf.Value timestamp = 3; } } repeated EventTransactionInfoChanges changes = 1; oneof has_original { string original = 2; } oneof has_propagations { uint64 propagations = 3; } oneof has_source { string source = 4; } } /* Information about the user who triggered this event. */ message EventUser { /* Approximate geographical location of the end user or device. */ message EventUserGeo { oneof has_city { string city = 1; } oneof has_country_code { string country_code = 2; } oneof has_region { string region = 3; } oneof has_subdivision { string subdivision = 4; } } oneof has_data { google.protobuf.Value data = 1; } oneof has_email { string email = 2; } oneof has_geo { EventUserGeo geo = 3; } oneof has_id { string id = 4; } oneof has_ip_address { string ip_address = 5; } oneof has_name { string name = 6; } oneof has_segment { string segment = 7; } oneof has_sentry_user { string sentry_user = 8; } oneof has_username { string username = 9; } } oneof has_breadcrumbs { EventBreadcrumbs breadcrumbs = 1; } map contexts = 2; oneof has_culprit { string culprit = 3; } oneof has_debug_meta { EventDebugMeta debug_meta = 4; } oneof has_dist { string dist = 5; } oneof has_environment { string environment = 6; } repeated EventErrors errors = 7; oneof has_event_id { string event_id = 8; } oneof has_exception { EventException exception = 9; } oneof has_extra { google.protobuf.Value extra = 10; } repeated string fingerprint = 11; oneof has_level { string level = 12; } oneof has_logentry { EventLogentry logentry = 13; } oneof has_logger { string logger = 14; } map modules = 15; oneof has_platform { string platform = 16; } oneof has_received { google.protobuf.Value received = 17; } oneof has_release { string release = 18; } oneof has_request { EventRequest request = 19; } oneof has_sdk { EventSdk sdk = 20; } oneof has_server_name { string server_name = 21; } oneof has_stacktrace { EventStacktrace stacktrace = 22; } oneof has_tags { google.protobuf.Value tags = 23; } oneof has_threads { EventThreads threads = 24; } oneof has_time_spent { uint64 time_spent = 25; } oneof has_timestamp { google.protobuf.Value timestamp = 26; } oneof has_transaction { string transaction = 27; } oneof has_transaction_info { EventTransactionInfo transaction_info = 28; } oneof has_type { string type = 29; } oneof has_user { EventUser user = 30; } oneof has_version { string version = 31; } } /* Application information. App context describes the application. As opposed to the runtime, this is the actual application that was running and carries metadata about the current session. */ message Appcontext { oneof has_app_build { string app_build = 1; } oneof has_app_identifier { string app_identifier = 2; } oneof has_app_memory { uint64 app_memory = 3; } oneof has_app_name { string app_name = 4; } oneof has_app_start_time { string app_start_time = 5; } oneof has_app_version { string app_version = 6; } oneof has_build_type { string build_type = 7; } oneof has_device_app_hash { string device_app_hash = 8; } oneof has_in_foreground { bool in_foreground = 9; } repeated string view_names = 10; } /* Legacy apple debug images (MachO). This was also used for non-apple platforms with similar debug setups. */ message Appledebugimage { oneof has_arch { string arch = 1; } oneof has_cpu_subtype { uint64 cpu_subtype = 2; } oneof has_cpu_type { uint64 cpu_type = 3; } string image_addr = 4; uint64 image_size = 5; oneof has_image_vmaddr { string image_vmaddr = 6; } string name = 7; string uuid = 8; } /* The Breadcrumbs Interface specifies a series of application events, or "breadcrumbs", that occurred before an event. An event may contain one or more breadcrumbs in an attribute named `breadcrumbs`. The entries are ordered from oldest to newest. Consequently, the last entry in the list should be the last entry before the event occurred. While breadcrumb attributes are not strictly validated in Sentry, a breadcrumb is most useful when it includes at least a `timestamp` and `type`, `category` or `message`. The rendering of breadcrumbs in Sentry depends on what is provided. The following example illustrates the breadcrumbs part of the event payload and omits other attributes for simplicity. ```json { "breadcrumbs": { "values": [ { "timestamp": "2016-04-20T20:55:53.845Z", "message": "Something happened", "category": "log", "data": { "foo": "bar", "blub": "blah" } }, { "timestamp": "2016-04-20T20:55:53.847Z", "type": "navigation", "data": { "from": "/login", "to": "/dashboard" } } ] } } ``` */ message Breadcrumb { oneof has_category { string category = 1; } oneof has_data { google.protobuf.Value data = 2; } oneof has_event_id { string event_id = 3; } oneof has_level { string level = 4; } oneof has_message { string message = 5; } oneof has_timestamp { google.protobuf.Value timestamp = 6; } oneof has_type { string type = 7; } } /* Web browser information. */ message Browsercontext { oneof has_name { string name = 1; } oneof has_version { string version = 2; } } /* POSIX signal with optional extended data. Error codes set by Linux system calls and some library functions as specified in ISO C99, POSIX.1-2001, and POSIX.1-2008. See [`errno(3)`](https://man7.org/linux/man-pages/man3/errno.3.html) for more information. */ message Cerror { oneof has_name { string name = 1; } oneof has_number { int64 number = 2; } } /* The SDK Interface describes the Sentry SDK and its configuration used to capture and transmit an event. */ message Clientsdkinfo { /* List of installed and loaded SDK packages. _Optional._ A list of packages that were installed as part of this SDK or the activated integrations. Each package consists of a name in the format `source:identifier` and `version`. If the source is a Git repository, the `source` should be `git`, the identifier should be a checkout link and the version should be a Git reference (branch, tag or SHA). */ message ClientsdkinfoPackages { oneof has_name { string name = 1; } oneof has_version { string version = 2; } } repeated string integrations = 1; string name = 2; repeated ClientsdkinfoPackages packages = 3; string version = 4; } /* An installed and loaded package as part of the Sentry SDK. */ message Clientsdkpackage { oneof has_name { string name = 1; } oneof has_version { string version = 2; } } /* The arbitrary data on the trace. */ message Data { /* The previous route in the application Set by React Native SDK. */ message DataPreviousroute { oneof has_name { string name = 1; } oneof has_params { google.protobuf.Value params = 2; } } /* The current route in the application. Set by React Native SDK. */ message DataRoute { oneof has_name { string name = 1; } oneof has_params { google.protobuf.Value params = 2; } } oneof has_previous_route { DataPreviousroute previous_route = 1; } oneof has_route { DataRoute route = 2; } } /* Debugging and processing meta information. The debug meta interface carries debug information for processing errors and crash reports. Sentry amends the information in this interface. Example (look at field types to see more detail): ```json { "debug_meta": { "images": [], "sdk_info": { "sdk_name": "iOS", "version_major": 10, "version_minor": 3, "version_patchlevel": 0 } } } ``` */ message Debugmeta { /* Information about the system SDK (e.g. iOS SDK). */ message DebugmetaSdkInfo { oneof has_sdk_name { string sdk_name = 1; } oneof has_version_major { uint64 version_major = 2; } oneof has_version_minor { uint64 version_minor = 3; } oneof has_version_patchlevel { uint64 version_patchlevel = 4; } } repeated google.protobuf.Value images = 1; oneof has_sdk_info { DebugmetaSdkInfo sdk_info = 2; } } /* Device information. Device context describes the device that caused the event. This is most appropriate for mobile applications. */ message Devicecontext { oneof has_arch { string arch = 1; } oneof has_battery_level { double battery_level = 2; } oneof has_battery_status { string battery_status = 3; } oneof has_boot_time { string boot_time = 4; } oneof has_brand { string brand = 5; } oneof has_charging { bool charging = 6; } oneof has_cpu_description { string cpu_description = 7; } oneof has_device_type { string device_type = 8; } oneof has_device_unique_identifier { string device_unique_identifier = 9; } oneof has_external_free_storage { uint64 external_free_storage = 10; } oneof has_external_storage_size { uint64 external_storage_size = 11; } oneof has_family { string family = 12; } oneof has_free_memory { uint64 free_memory = 13; } oneof has_free_storage { uint64 free_storage = 14; } oneof has_locale { string locale = 15; } oneof has_low_memory { bool low_memory = 16; } oneof has_manufacturer { string manufacturer = 17; } oneof has_memory_size { uint64 memory_size = 18; } oneof has_model { string model = 19; } oneof has_model_id { string model_id = 20; } oneof has_name { string name = 21; } oneof has_online { bool online = 22; } oneof has_orientation { string orientation = 23; } oneof has_processor_count { uint64 processor_count = 24; } oneof has_processor_frequency { uint64 processor_frequency = 25; } oneof has_screen_density { double screen_density = 26; } oneof has_screen_dpi { uint64 screen_dpi = 27; } oneof has_screen_height_pixels { uint64 screen_height_pixels = 28; } oneof has_screen_resolution { string screen_resolution = 29; } oneof has_screen_width_pixels { uint64 screen_width_pixels = 30; } oneof has_simulator { bool simulator = 31; } oneof has_storage_size { uint64 storage_size = 32; } oneof has_supports_accelerometer { bool supports_accelerometer = 33; } oneof has_supports_audio { bool supports_audio = 34; } oneof has_supports_gyroscope { bool supports_gyroscope = 35; } oneof has_supports_location_service { bool supports_location_service = 36; } oneof has_supports_vibration { bool supports_vibration = 37; } oneof has_timezone { string timezone = 38; } oneof has_usable_memory { uint64 usable_memory = 39; } oneof has_uuid { string uuid = 40; } } /* An event processing error. */ message Eventprocessingerror { oneof has_name { string name = 1; } string type = 2; google.protobuf.Value value = 3; } /* A single exception. Multiple values inside of an [event](#typedef-Event) represent chained exceptions and should be sorted oldest to newest. For example, consider this Python code snippet: ```python try: raise Exception("random boring invariant was not met!") except Exception as e: raise ValueError("something went wrong, help!") from e ``` `Exception` would be described first in the values list, followed by a description of `ValueError`: ```json { "exception": { "values": [ {"type": "Exception": "value": "random boring invariant was not met!"}, {"type": "ValueError", "value": "something went wrong, help!"}, ] } } ``` */ message Exception { /* Mechanism by which this exception was generated and handled. */ message ExceptionMechanism { /* Operating system or runtime meta information. */ message ExceptionMechanismMeta { /* Optional ISO C standard error code. */ message ExceptionMechanismMetaErrno { oneof has_name { string name = 1; } oneof has_number { int64 number = 2; } } /* A Mach Exception on Apple systems comprising a code triple and optional descriptions. */ message ExceptionMechanismMetaMachException { oneof has_code { uint64 code = 1; } oneof has_exception { int64 exception = 2; } oneof has_name { string name = 3; } oneof has_subcode { uint64 subcode = 4; } } /* An NSError on Apple systems comprising code and signal. */ message ExceptionMechanismMetaNsError { oneof has_code { int64 code = 1; } oneof has_domain { string domain = 2; } } /* Information on the POSIX signal. */ message ExceptionMechanismMetaSignal { oneof has_code { int64 code = 1; } oneof has_code_name { string code_name = 2; } oneof has_name { string name = 3; } oneof has_number { int64 number = 4; } } oneof has_errno { ExceptionMechanismMetaErrno errno = 1; } oneof has_mach_exception { ExceptionMechanismMetaMachException mach_exception = 2; } oneof has_ns_error { ExceptionMechanismMetaNsError ns_error = 3; } oneof has_signal { ExceptionMechanismMetaSignal signal = 4; } } oneof has_data { google.protobuf.Value data = 1; } oneof has_description { string description = 2; } oneof has_exception_id { uint64 exception_id = 3; } oneof has_handled { bool handled = 4; } oneof has_help_link { string help_link = 5; } oneof has_is_exception_group { bool is_exception_group = 6; } oneof has_meta { ExceptionMechanismMeta meta = 7; } oneof has_parent_id { uint64 parent_id = 8; } oneof has_source { string source = 9; } oneof has_synthetic { bool synthetic = 10; } string type = 11; } /* Stack trace containing frames of this exception. */ message ExceptionStacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message ExceptionStacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message ExceptionStacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { ExceptionStacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated ExceptionStacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } oneof has_mechanism { ExceptionMechanism mechanism = 1; } oneof has_module { string module = 2; } oneof has_stacktrace { ExceptionStacktrace stacktrace = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } oneof has_type { string type = 5; } oneof has_value { string value = 6; } } /* Holds information about a single stacktrace frame. Each object should contain **at least** a `filename`, `function` or `instruction_addr` attribute. All values are optional, but recommended. */ message Frame { /* A possible lock (java monitor object) held by this frame. */ message FrameLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { FrameLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } /* Geographical location of the end user or device. */ message Geo { oneof has_city { string city = 1; } oneof has_country_code { string country_code = 2; } oneof has_region { string region = 3; } oneof has_subdivision { string subdivision = 4; } } /* GPU information. Example: ```json "gpu": { "name": "AMD Radeon Pro 560", "vendor_name": "Apple", "memory_size": 4096, "api_type": "Metal", "multi_threaded_rendering": true, "version": "Metal", "npot_support": "Full" } ``` */ message Gpucontext { oneof has_api_type { string api_type = 1; } oneof has_graphics_shader_level { string graphics_shader_level = 2; } google.protobuf.Value id = 3; oneof has_max_texture_size { uint64 max_texture_size = 4; } oneof has_memory_size { uint64 memory_size = 5; } oneof has_multi_threaded_rendering { bool multi_threaded_rendering = 6; } oneof has_name { string name = 7; } oneof has_npot_support { string npot_support = 8; } oneof has_supports_compute_shaders { bool supports_compute_shaders = 9; } oneof has_supports_draw_call_instancing { bool supports_draw_call_instancing = 10; } oneof has_supports_geometry_shaders { bool supports_geometry_shaders = 11; } oneof has_supports_ray_tracing { bool supports_ray_tracing = 12; } oneof has_vendor_id { string vendor_id = 13; } oneof has_vendor_name { string vendor_name = 14; } oneof has_version { string version = 15; } } /* A debug image consisting of source files for a JVM based language. Examples: ```json { "type": "jvm", "debug_id": "395835f4-03e0-4436-80d3-136f0749a893" } ``` */ message Jvmdebugimage { string debug_id = 1; } /* Represents an instance of a held lock (java monitor object) in a thread. */ message Lockreason { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } /* A log entry message. A log message is similar to the `message` attribute on the event itself but can additionally hold optional parameters. ```json { "message": { "message": "My raw message with interpreted strings like %s", "params": ["this"] } } ``` ```json { "message": { "message": "My raw message with interpreted strings like {foo}", "params": {"foo": "this"} } } ``` */ message Logentry { oneof has_formatted { string formatted = 1; } oneof has_message { string message = 2; } google.protobuf.Value params = 3; } /* Mach exception information. */ message Machexception { oneof has_code { uint64 code = 1; } oneof has_exception { int64 exception = 2; } oneof has_name { string name = 3; } oneof has_subcode { uint64 subcode = 4; } } /* The mechanism by which an exception was generated and handled. The exception mechanism is an optional field residing in the [exception](#typedef-Exception). It carries additional information about the way the exception was created on the target system. This includes general exception values obtained from the operating system or runtime APIs, as well as mechanism-specific values. */ message Mechanism { /* Operating system or runtime meta information. */ message MechanismMeta { /* Optional ISO C standard error code. */ message MechanismMetaErrno { oneof has_name { string name = 1; } oneof has_number { int64 number = 2; } } /* A Mach Exception on Apple systems comprising a code triple and optional descriptions. */ message MechanismMetaMachException { oneof has_code { uint64 code = 1; } oneof has_exception { int64 exception = 2; } oneof has_name { string name = 3; } oneof has_subcode { uint64 subcode = 4; } } /* An NSError on Apple systems comprising code and signal. */ message MechanismMetaNsError { oneof has_code { int64 code = 1; } oneof has_domain { string domain = 2; } } /* Information on the POSIX signal. */ message MechanismMetaSignal { oneof has_code { int64 code = 1; } oneof has_code_name { string code_name = 2; } oneof has_name { string name = 3; } oneof has_number { int64 number = 4; } } oneof has_errno { MechanismMetaErrno errno = 1; } oneof has_mach_exception { MechanismMetaMachException mach_exception = 2; } oneof has_ns_error { MechanismMetaNsError ns_error = 3; } oneof has_signal { MechanismMetaSignal signal = 4; } } oneof has_data { google.protobuf.Value data = 1; } oneof has_description { string description = 2; } oneof has_exception_id { uint64 exception_id = 3; } oneof has_handled { bool handled = 4; } oneof has_help_link { string help_link = 5; } oneof has_is_exception_group { bool is_exception_group = 6; } oneof has_meta { MechanismMeta meta = 7; } oneof has_parent_id { uint64 parent_id = 8; } oneof has_source { string source = 9; } oneof has_synthetic { bool synthetic = 10; } string type = 11; } /* Operating system or runtime meta information to an exception mechanism. The mechanism metadata usually carries error codes reported by the runtime or operating system, along with a platform-dependent interpretation of these codes. SDKs can safely omit code names and descriptions for well-known error codes, as it will be filled out by Sentry. For proprietary or vendor-specific error codes, adding these values will give additional information to the user. */ message Mechanismmeta { /* Optional ISO C standard error code. */ message MechanismmetaErrno { oneof has_name { string name = 1; } oneof has_number { int64 number = 2; } } /* A Mach Exception on Apple systems comprising a code triple and optional descriptions. */ message MechanismmetaMachException { oneof has_code { uint64 code = 1; } oneof has_exception { int64 exception = 2; } oneof has_name { string name = 3; } oneof has_subcode { uint64 subcode = 4; } } /* An NSError on Apple systems comprising code and signal. */ message MechanismmetaNsError { oneof has_code { int64 code = 1; } oneof has_domain { string domain = 2; } } /* Information on the POSIX signal. */ message MechanismmetaSignal { oneof has_code { int64 code = 1; } oneof has_code_name { string code_name = 2; } oneof has_name { string name = 3; } oneof has_number { int64 number = 4; } } oneof has_errno { MechanismmetaErrno errno = 1; } oneof has_mach_exception { MechanismmetaMachException mach_exception = 2; } oneof has_ns_error { MechanismmetaNsError ns_error = 3; } oneof has_signal { MechanismmetaSignal signal = 4; } } /* A generic (new-style) native platform debug information file. The `type` key must be one of: - `macho` - `elf`: ELF images are used on Linux platforms. Their structure is identical to other native images. - `pe` Examples: ```json { "type": "elf", "code_id": "68220ae2c65d65c1b6aaa12fa6765a6ec2f5f434", "code_file": "/lib/x86_64-linux-gnu/libgcc_s.so.1", "debug_id": "e20a2268-5dc6-c165-b6aa-a12fa6765a6e", "image_addr": "0x7f5140527000", "image_size": 90112, "image_vmaddr": "0x40000", "arch": "x86_64" } ``` ```json { "type": "pe", "code_id": "57898e12145000", "code_file": "C:\\Windows\\System32\\dbghelp.dll", "debug_id": "9c2a902b-6fdf-40ad-8308-588a41d572a0-1", "debug_file": "dbghelp.pdb", "image_addr": "0x70850000", "image_size": "1331200", "image_vmaddr": "0x40000", "arch": "x86" } ``` ```json { "type": "macho", "debug_id": "84a04d24-0e60-3810-a8c0-90a65e2df61a", "debug_file": "libDiagnosticMessagesClient.dylib", "code_file": "/usr/lib/libDiagnosticMessagesClient.dylib", "image_addr": "0x7fffe668e000", "image_size": 8192, "image_vmaddr": "0x40000", "arch": "x86_64", } ``` */ message Nativedebugimage { oneof has_arch { string arch = 1; } string code_file = 2; oneof has_code_id { string code_id = 3; } oneof has_debug_checksum { string debug_checksum = 4; } oneof has_debug_file { string debug_file = 5; } string debug_id = 6; oneof has_image_addr { string image_addr = 7; } oneof has_image_size { uint64 image_size = 8; } oneof has_image_vmaddr { string image_vmaddr = 9; } } /* Contains NEL report information. Network Error Logging (NEL) is a browser feature that allows reporting of failed network requests from the client side. See the following resources for more information: - [W3C Editor's Draft](https://w3c.github.io/network-error-logging/) - [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Network_Error_Logging) */ message Nelcontext { oneof has_elapsed_time { uint64 elapsed_time = 1; } oneof has_error_type { string error_type = 2; } oneof has_phase { google.protobuf.Value phase = 3; } oneof has_sampling_fraction { double sampling_fraction = 4; } oneof has_server_ip { string server_ip = 5; } } /* NSError informaiton. */ message Nserror { oneof has_code { int64 code = 1; } oneof has_domain { string domain = 2; } } /* Operating system information. OS context describes the operating system on which the event was created. In web contexts, this is the operating system of the browser (generally pulled from the User-Agent string). */ message Oscontext { oneof has_build { string build = 1; } oneof has_kernel_version { string kernel_version = 2; } oneof has_name { string name = 3; } oneof has_raw_description { string raw_description = 4; } oneof has_rooted { bool rooted = 5; } oneof has_version { string version = 6; } } /* OpenTelemetry Context If an event has this context, it was generated from an OpenTelemetry signal (trace, metric, log). */ message Otelcontext { oneof has_attributes { google.protobuf.Value attributes = 1; } oneof has_resource { google.protobuf.Value resource = 2; } } /* POSIX signal with optional extended data. On Apple systems, signals also carry a code in addition to the signal number describing the signal in more detail. On Linux, this code does not exist. */ message Posixsignal { oneof has_code { int64 code = 1; } oneof has_code_name { string code_name = 2; } oneof has_name { string name = 3; } oneof has_number { int64 number = 4; } } /* Profile context */ message Profilecontext { string profile_id = 1; } /* Proguard mapping file. Proguard images refer to `mapping.txt` files generated when Proguard obfuscates function names. The Java SDK integrations assign this file a unique identifier, which has to be included in the list of images. */ message Proguarddebugimage { string uuid = 1; } /* A stack trace of a single thread. A stack trace contains a list of frames, each with various bits (most optional) describing the context of that frame. Frames should be sorted from oldest to newest. For the given example program written in Python: ```python def foo(): my_var = 'foo' raise ValueError() def main(): foo() ``` A minimalistic stack trace for the above program in the correct order: ```json { "frames": [ {"function": "main"}, {"function": "foo"} ] } ``` The top frame fully symbolicated with five lines of source context: ```json { "frames": [{ "in_app": true, "function": "myfunction", "abs_path": "/real/file/name.py", "filename": "file/name.py", "lineno": 3, "vars": { "my_var": "'value'" }, "pre_context": [ "def foo():", " my_var = 'foo'", ], "context_line": " raise ValueError()", "post_context": [ "", "def main():" ], }] } ``` A minimal native stack trace with register values. Note that the `package` event attribute must be "native" for these frames to be symbolicated. ```json { "frames": [ {"instruction_addr": "0x7fff5bf3456c"}, {"instruction_addr": "0x7fff5bf346c0"}, ], "registers": { "rip": "0x00007ff6eef54be2", "rsp": "0x0000003b710cd9e0" } } ``` */ message Rawstacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message RawstacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message RawstacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { RawstacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated RawstacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } /* Replay context. The replay context contains the replay_id of the session replay if the event occurred during a replay. The replay_id is added onto the dynamic sampling context on the javascript SDK which propagates it through the trace. In relay, we take this value from the DSC and create a context which contains only the replay_id This context is never set on the client for events, only on relay. */ message Replaycontext { oneof has_replay_id { string replay_id = 1; } } /* Http request information. The Request interface contains information on a HTTP request related to the event. In client SDKs, this can be an outgoing request, or the request that rendered the current web page. On server SDKs, this could be the incoming web request that is being handled. The data variable should only contain the request body (not the query string). It can either be a dictionary (for standard HTTP requests) or a raw request body. ### Ordered Maps In the Request interface, several attributes can either be declared as string, object, or list of tuples. Sentry attempts to parse structured information from the string representation in such cases. Sometimes, keys can be declared multiple times, or the order of elements matters. In such cases, use the tuple representation over a plain object. Example of request headers as object: ```json { "content-type": "application/json", "accept": "application/json, application/xml" } ``` Example of the same headers as list of tuples: ```json [ ["content-type", "application/json"], ["accept", "application/json"], ["accept", "application/xml"] ] ``` Example of a fully populated request object: ```json { "request": { "method": "POST", "url": "http://absolute.uri/foo", "query_string": "query=foobar&page=2", "data": { "foo": "bar" }, "cookies": "PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;", "headers": { "content-type": "text/html" }, "env": { "REMOTE_ADDR": "192.168.0.1" } } } ``` */ message Request { oneof has_api_target { string api_target = 1; } oneof has_body_size { uint64 body_size = 2; } oneof has_cookies { google.protobuf.Value cookies = 3; } google.protobuf.Value data = 4; oneof has_env { google.protobuf.Value env = 5; } oneof has_fragment { string fragment = 6; } oneof has_headers { google.protobuf.Value headers = 7; } oneof has_inferred_content_type { string inferred_content_type = 8; } oneof has_method { string method = 9; } oneof has_protocol { string protocol = 10; } oneof has_query_string { google.protobuf.Value query_string = 11; } oneof has_url { string url = 12; } } /* Response interface that contains information on a HTTP response related to the event. The data variable should only contain the response body. It can either be a dictionary (for standard HTTP responses) or a raw response body. */ message Responsecontext { oneof has_body_size { uint64 body_size = 1; } oneof has_cookies { google.protobuf.Value cookies = 2; } google.protobuf.Value data = 3; oneof has_headers { google.protobuf.Value headers = 4; } oneof has_inferred_content_type { string inferred_content_type = 5; } oneof has_status_code { uint64 status_code = 6; } } /* The route in the application, set by React Native SDK. */ message Route { oneof has_name { string name = 1; } oneof has_params { google.protobuf.Value params = 2; } } /* Runtime information. Runtime context describes a runtime in more detail. Typically, this context is present in `contexts` multiple times if multiple runtimes are involved (for instance, if you have a JavaScript application running on top of JVM). */ message Runtimecontext { oneof has_build { string build = 1; } oneof has_name { string name = 2; } oneof has_raw_description { string raw_description = 3; } oneof has_version { string version = 4; } } /* A debug image pointing to a source map. Examples: ```json { "type": "sourcemap", "code_file": "https://example.com/static/js/main.min.js", "debug_id": "395835f4-03e0-4436-80d3-136f0749a893" } ``` **Note:** Stack frames and the correlating entries in the debug image here for `code_file`/`abs_path` are not PII stripped as they need to line up perfectly for source map processing. */ message Sourcemapdebugimage { string code_file = 1; oneof has_debug_file { string debug_file = 2; } string debug_id = 3; } message Stacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message StacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message StacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { StacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated StacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } /* Holds information about the system SDK. This is relevant for iOS and other platforms that have a system SDK. Not to be confused with the client SDK. */ message Systemsdkinfo { oneof has_sdk_name { string sdk_name = 1; } oneof has_version_major { uint64 version_major = 2; } oneof has_version_minor { uint64 version_minor = 3; } oneof has_version_patchlevel { uint64 version_patchlevel = 4; } } message Tagentry { oneof has_a0 { string a0 = 1; } oneof has_a1 { string a1 = 2; } } /* A process thread of an event. The Threads Interface specifies threads that were running at the time an event happened. These threads can also contain stack traces. An event may contain one or more threads in an attribute named `threads`. The following example illustrates the threads part of the event payload and omits other attributes for simplicity. ```json { "threads": { "values": [ { "id": "0", "name": "main", "crashed": true, "stacktrace": {} } ] } } ``` */ message Thread { /* Represents a collection of locks (java monitor objects) held by a thread. A map of lock object addresses and their respective lock reason/details. */ message ThreadHeldLocks { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } /* Stack trace containing frames of this exception. The thread that crashed with an exception should not have a stack trace, but instead, the `thread_id` attribute should be set on the exception and Sentry will connect the two. */ message ThreadStacktrace { /* Required. A non-empty list of stack frames. The list is ordered from caller to callee, or oldest to youngest. The last frame is the one creating the exception. */ message ThreadStacktraceFrames { /* A possible lock (java monitor object) held by this frame. */ message ThreadStacktraceFramesLock { oneof has_address { string address = 1; } oneof has_class_name { string class_name = 2; } oneof has_package_name { string package_name = 3; } oneof has_thread_id { google.protobuf.Value thread_id = 4; } string type = 5; } oneof has_abs_path { string abs_path = 1; } oneof has_addr_mode { string addr_mode = 2; } oneof has_colno { uint64 colno = 3; } oneof has_context_line { string context_line = 4; } oneof has_filename { string filename = 5; } oneof has_function { string function = 6; } oneof has_function_id { string function_id = 7; } oneof has_image_addr { string image_addr = 8; } oneof has_in_app { bool in_app = 9; } oneof has_instruction_addr { string instruction_addr = 10; } oneof has_lineno { uint64 lineno = 11; } oneof has_lock { ThreadStacktraceFramesLock lock = 12; } oneof has_module { string module = 13; } oneof has_package { string package = 14; } oneof has_platform { string platform = 15; } repeated string post_context = 16; repeated string pre_context = 17; oneof has_raw_function { string raw_function = 18; } oneof has_stack_start { bool stack_start = 19; } oneof has_symbol { string symbol = 20; } oneof has_symbol_addr { string symbol_addr = 21; } oneof has_vars { google.protobuf.Value vars = 22; } } repeated ThreadStacktraceFrames frames = 1; oneof has_instruction_addr_adjustment { string instruction_addr_adjustment = 2; } oneof has_lang { string lang = 3; } map registers = 4; oneof has_snapshot { bool snapshot = 5; } } oneof has_crashed { bool crashed = 1; } oneof has_current { bool current = 2; } map held_locks = 3; oneof has_id { google.protobuf.Value id = 4; } oneof has_main { bool main = 5; } oneof has_name { string name = 6; } oneof has_stacktrace { ThreadStacktrace stacktrace = 7; } oneof has_state { string state = 8; } } /* Trace context */ message Tracecontext { /* Arbitrary additional data on a trace. */ message TracecontextData { /* The previous route in the application Set by React Native SDK. */ message TracecontextDataPreviousroute { oneof has_name { string name = 1; } oneof has_params { google.protobuf.Value params = 2; } } /* The current route in the application. Set by React Native SDK. */ message TracecontextDataRoute { oneof has_name { string name = 1; } oneof has_params { google.protobuf.Value params = 2; } } oneof has_previous_route { TracecontextDataPreviousroute previous_route = 1; } oneof has_route { TracecontextDataRoute route = 2; } } oneof has_client_sample_rate { double client_sample_rate = 1; } oneof has_data { TracecontextData data = 2; } oneof has_exclusive_time { double exclusive_time = 3; } oneof has_op { string op = 4; } oneof has_origin { string origin = 5; } oneof has_parent_span_id { string parent_span_id = 6; } oneof has_sampled { bool sampled = 7; } string span_id = 8; oneof has_status { string status = 9; } string trace_id = 10; } /* Additional information about the name of the transaction. */ message Transactioninfo { /* A list of changes prior to the final transaction name. This list must be empty if the transaction name is set at the beginning of the transaction and never changed. There is no placeholder entry for the initial transaction name. */ message TransactioninfoChanges { oneof has_propagations { uint64 propagations = 1; } oneof has_source { string source = 2; } oneof has_timestamp { google.protobuf.Value timestamp = 3; } } repeated TransactioninfoChanges changes = 1; oneof has_original { string original = 2; } oneof has_propagations { uint64 propagations = 3; } oneof has_source { string source = 4; } } message Transactionnamechange { oneof has_propagations { uint64 propagations = 1; } oneof has_source { string source = 2; } oneof has_timestamp { google.protobuf.Value timestamp = 3; } } /* Information about the user who triggered an event. ```json { "user": { "id": "unique_id", "username": "my_user", "email": "foo@example.com", "ip_address": "127.0.0.1", "subscription": "basic" } } ``` */ message User { /* Approximate geographical location of the end user or device. */ message UserGeo { oneof has_city { string city = 1; } oneof has_country_code { string country_code = 2; } oneof has_region { string region = 3; } oneof has_subdivision { string subdivision = 4; } } oneof has_data { google.protobuf.Value data = 1; } oneof has_email { string email = 2; } oneof has_geo { UserGeo geo = 3; } oneof has_id { string id = 4; } oneof has_ip_address { string ip_address = 5; } oneof has_name { string name = 6; } oneof has_segment { string segment = 7; } oneof has_sentry_user { string sentry_user = 8; } oneof has_username { string username = 9; } } /* Feedback context. This contexts contains user feedback specific attributes. We don't PII scrub contact_email as that is provided by the user. TODO(jferg): rename to FeedbackContext once old UserReport logic is deprecated. */ message Userreportv2Context { oneof has_contact_email { string contact_email = 1; } oneof has_message { string message = 2; } }