From 5db5cf4764761c210604354d57184aec618aa955 Mon Sep 17 00:00:00 2001 From: Volo Kluev Date: Thu, 12 Nov 2026 13:56:55 -0800 Subject: [PATCH 1/2] feat(billing): add Seer wallet expiry --- .../contract/ledger/v1/endpoint_get_ledger_balance.proto | 5 +++++ .../v1/endpoint_get_seer_wallet_balance.proto | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/proto/sentry_protos/billing/v1/services/contract/ledger/v1/endpoint_get_ledger_balance.proto b/proto/sentry_protos/billing/v1/services/contract/ledger/v1/endpoint_get_ledger_balance.proto index 752f8016..d8ed5f00 100644 --- a/proto/sentry_protos/billing/v1/services/contract/ledger/v1/endpoint_get_ledger_balance.proto +++ b/proto/sentry_protos/billing/v1/services/contract/ledger/v1/endpoint_get_ledger_balance.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package sentry_protos.billing.v1.services.contract.ledger.v1; +import "google/protobuf/timestamp.proto"; + message GetLedgerBalanceRequest { uint64 organization_id = 1; string account_id = 2; @@ -12,4 +14,7 @@ message GetLedgerBalanceResponse { int64 balance_cents = 1; // Deposits whose invoices are not paid yet. Not part of balance_cents. int64 pending_deposit_cents = 2; + // Creation time of the most recent deposit, whether or not its invoice has + // been paid. Unset when the account has no deposits. + optional google.protobuf.Timestamp latest_deposit_at = 3; } diff --git a/proto/sentry_protos/billing/v1/services/seer_feature_billing/v1/endpoint_get_seer_wallet_balance.proto b/proto/sentry_protos/billing/v1/services/seer_feature_billing/v1/endpoint_get_seer_wallet_balance.proto index 7b298d90..4ee55425 100644 --- a/proto/sentry_protos/billing/v1/services/seer_feature_billing/v1/endpoint_get_seer_wallet_balance.proto +++ b/proto/sentry_protos/billing/v1/services/seer_feature_billing/v1/endpoint_get_seer_wallet_balance.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package sentry_protos.billing.v1.services.seer_feature_billing.v1; +import "sentry_protos/billing/v1/date.proto"; + // Reads the organization's prepaid Seer credit from its current contract. message GetSeerWalletBalanceRequest { uint64 organization_id = 1; @@ -23,6 +25,9 @@ message SeerWallet { uint64 included_credits = 4; // Included credits used this billing period. At most included_credits. uint64 included_credits_used = 5; + // Purchased credits expire twelve months after the latest ledger deposit. + // Unset when the wallet has never received a deposit. + optional sentry_protos.billing.v1.Date expires_at = 6; } message GetSeerWalletBalanceResponse { From e91268808f7c91453134c032356cc37eacc04c7e Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Thu, 12 Nov 2026 21:58:17 +0000 Subject: [PATCH 2/2] chore: Regenerate Rust bindings --- Cargo.lock | 2 +- .../sentry_protos.billing.v1.services.contract.ledger.v1.rs | 4 ++++ ...ntry_protos.billing.v1.services.seer_feature_billing.v1.rs | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 15958c87..bb2775f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -717,7 +717,7 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "sentry_protos" -version = "0.118.0" +version = "0.120.0" dependencies = [ "prost", "prost-types", diff --git a/rust/src/sentry_protos.billing.v1.services.contract.ledger.v1.rs b/rust/src/sentry_protos.billing.v1.services.contract.ledger.v1.rs index fd9cdcd5..fe41ccd8 100644 --- a/rust/src/sentry_protos.billing.v1.services.contract.ledger.v1.rs +++ b/rust/src/sentry_protos.billing.v1.services.contract.ledger.v1.rs @@ -60,6 +60,10 @@ pub struct GetLedgerBalanceResponse { /// Deposits whose invoices are not paid yet. Not part of balance_cents. #[prost(int64, tag = "2")] pub pending_deposit_cents: i64, + /// Creation time of the most recent deposit, whether or not its invoice has + /// been paid. Unset when the account has no deposits. + #[prost(message, optional, tag = "3")] + pub latest_deposit_at: ::core::option::Option<::prost_types::Timestamp>, } /// One row of an account's transaction history. Entries are append-only. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] diff --git a/rust/src/sentry_protos.billing.v1.services.seer_feature_billing.v1.rs b/rust/src/sentry_protos.billing.v1.services.seer_feature_billing.v1.rs index a1d16d91..69719211 100644 --- a/rust/src/sentry_protos.billing.v1.services.seer_feature_billing.v1.rs +++ b/rust/src/sentry_protos.billing.v1.services.seer_feature_billing.v1.rs @@ -240,6 +240,10 @@ pub struct SeerWallet { /// Included credits used this billing period. At most included_credits. #[prost(uint64, tag = "5")] pub included_credits_used: u64, + /// Purchased credits expire twelve months after the latest ledger deposit. + /// Unset when the wallet has never received a deposit. + #[prost(message, optional, tag = "6")] + pub expires_at: ::core::option::Option, } #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetSeerWalletBalanceResponse {