diff --git a/crates/common/src/grpc/mod.rs b/crates/common/src/grpc/mod.rs index a2dd6f87..f46d7a74 100644 --- a/crates/common/src/grpc/mod.rs +++ b/crates/common/src/grpc/mod.rs @@ -4,10 +4,13 @@ use std::{ }; use futures::Future; +use pb::error_metadata::ErrorMetadataStatusExt; use sentry::integrations::tower as sentry_tower; use tonic::{ server::NamedService, service::Routes, + Response, + Status, }; use tonic_health::{ server::{ @@ -81,3 +84,10 @@ impl ConvexGrpcService { Ok(()) } } + +pub fn handle_response(response: Result, Status>) -> anyhow::Result { + match response { + Ok(response) => Ok(response.into_inner()), + Err(status) => Err(status.into_anyhow()), + } +} diff --git a/crates/pb/src/error_metadata.rs b/crates/pb/src/error_metadata.rs index 05bba173..4d90e5ca 100644 --- a/crates/pb/src/error_metadata.rs +++ b/crates/pb/src/error_metadata.rs @@ -116,6 +116,8 @@ impl ErrorMetadataStatusExt for tonic::Status { Err(err) => return err.context("Failed to parse ErrorMetadata proto"), }; error = error.context(error_metadata) + } else if error.is::() { + error = error.context(ErrorMetadata::operational_internal_server_error()); } error }