From f1bbc7a6c4536914eec492bed46f8b895cbcd8c9 Mon Sep 17 00:00:00 2001 From: Brendan Hy Date: Tue, 23 Jun 2026 13:23:36 -0700 Subject: [PATCH 1/2] chore(billing-platform): Add trial limits to package line items --- .../billing/v1/services/package/v1/package.proto | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/proto/sentry_protos/billing/v1/services/package/v1/package.proto b/proto/sentry_protos/billing/v1/services/package/v1/package.proto index 371558d9..c34bb03f 100644 --- a/proto/sentry_protos/billing/v1/services/package/v1/package.proto +++ b/proto/sentry_protos/billing/v1/services/package/v1/package.proto @@ -26,6 +26,13 @@ message LineItemConfig { // Used for calculating spend that should not apply towards an organization's PAYG budget (ie Seer seats) sentry_protos.billing.v1.common.v1.TieredPricingRate uncapped_rate = 9; + + // How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + // this field will be unset for all line items. + oneof trial_units { + bool is_unlimited_trial = 10; + uint64 num_trial_units = 11; + } } // Represents a budget included in a package that is collectively used by one or more line items, @@ -51,6 +58,13 @@ message SharedLineItemPool { // Similar to LineItemConfig.reserved_rate, this field will hold the list of available reserved tiers for this line item // as well as the prices for each respective tier. sentry_protos.billing.v1.common.v1.TieredPricingRate reserved_tier = 8; + + // How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + // this field will be unset for all line items. + oneof trial_units { + bool is_unlimited_trial = 9; + uint64 num_trial_units = 10; + } } message PackageConfig { From 842d6d73584a0d05267a9876a04fa41d163485b4 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 20:26:38 +0000 Subject: [PATCH 2/2] chore: Regenerate Rust bindings --- Cargo.lock | 2 +- ...y_protos.billing.v1.services.package.v1.rs | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index f1f06471..72f1826f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -717,7 +717,7 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "sentry_protos" -version = "0.32.5" +version = "0.33.0" dependencies = [ "prost", "prost-types", diff --git a/rust/src/sentry_protos.billing.v1.services.package.v1.rs b/rust/src/sentry_protos.billing.v1.services.package.v1.rs index bb841289..9c625734 100644 --- a/rust/src/sentry_protos.billing.v1.services.package.v1.rs +++ b/rust/src/sentry_protos.billing.v1.services.package.v1.rs @@ -31,6 +31,10 @@ pub struct LineItemConfig { pub included_reserved_units: ::core::option::Option< line_item_config::IncludedReservedUnits, >, + /// How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + /// this field will be unset for all line items. + #[prost(oneof = "line_item_config::TrialUnits", tags = "10, 11")] + pub trial_units: ::core::option::Option, } /// Nested message and enum types in `LineItemConfig`. pub mod line_item_config { @@ -43,6 +47,15 @@ pub mod line_item_config { #[prost(uint64, tag = "6")] NumReservedUnits(u64), } + /// How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + /// this field will be unset for all line items. + #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)] + pub enum TrialUnits { + #[prost(bool, tag = "10")] + IsUnlimitedTrial(bool), + #[prost(uint64, tag = "11")] + NumTrialUnits(u64), + } } /// Represents a budget included in a package that is collectively used by one or more line items, /// allowing multiple line items to draw from the same reserved budget. @@ -86,6 +99,22 @@ pub struct SharedLineItemPool { pub reserved_tier: ::core::option::Option< super::super::super::common::v1::TieredPricingRate, >, + /// How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + /// this field will be unset for all line items. + #[prost(oneof = "shared_line_item_pool::TrialUnits", tags = "9, 10")] + pub trial_units: ::core::option::Option, +} +/// Nested message and enum types in `SharedLineItemPool`. +pub mod shared_line_item_pool { + /// How many units are available for a PackageConfig during a subscription trial? For packages that are not eligible for trials, + /// this field will be unset for all line items. + #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)] + pub enum TrialUnits { + #[prost(bool, tag = "9")] + IsUnlimitedTrial(bool), + #[prost(uint64, tag = "10")] + NumTrialUnits(u64), + } } #[derive(Clone, PartialEq, ::prost::Message)] pub struct PackageConfig {