chargebee 2.74.0 → 2.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +98 -0
  3. data/Gemfile.lock +2 -2
  4. data/README.md +53 -0
  5. data/VERSION +1 -1
  6. data/chargebee.gemspec +17 -2
  7. data/lib/chargebee/environment.rb +3 -2
  8. data/lib/chargebee/models/addon.rb +7 -7
  9. data/lib/chargebee/models/address.rb +2 -2
  10. data/lib/chargebee/models/alert.rb +16 -8
  11. data/lib/chargebee/models/alert_status.rb +2 -2
  12. data/lib/chargebee/models/async_response.rb +18 -0
  13. data/lib/chargebee/models/async_response_list.rb +10 -0
  14. data/lib/chargebee/models/attached_item.rb +5 -5
  15. data/lib/chargebee/models/business_entity.rb +2 -2
  16. data/lib/chargebee/models/card.rb +5 -5
  17. data/lib/chargebee/models/column_definition.rb +10 -0
  18. data/lib/chargebee/models/comment.rb +4 -4
  19. data/lib/chargebee/models/configuration.rb +1 -1
  20. data/lib/chargebee/models/coupon.rb +9 -9
  21. data/lib/chargebee/models/coupon_code.rb +4 -4
  22. data/lib/chargebee/models/coupon_set.rb +7 -7
  23. data/lib/chargebee/models/credit_note.rb +22 -17
  24. data/lib/chargebee/models/credit_note_estimate.rb +1 -1
  25. data/lib/chargebee/models/csv_tax_rule.rb +6 -1
  26. data/lib/chargebee/models/currency.rb +6 -6
  27. data/lib/chargebee/models/customer.rb +26 -26
  28. data/lib/chargebee/models/customer_entitlement.rb +1 -1
  29. data/lib/chargebee/models/differential_price.rb +5 -5
  30. data/lib/chargebee/models/entitlement.rb +2 -2
  31. data/lib/chargebee/models/entitlement_override.rb +2 -2
  32. data/lib/chargebee/models/estimate.rb +20 -20
  33. data/lib/chargebee/models/event.rb +2 -2
  34. data/lib/chargebee/models/export.rb +18 -18
  35. data/lib/chargebee/models/feature.rb +9 -9
  36. data/lib/chargebee/models/gift.rb +7 -7
  37. data/lib/chargebee/models/grant_block.rb +3 -3
  38. data/lib/chargebee/models/hosted_page.rb +22 -22
  39. data/lib/chargebee/models/in_app_subscription.rb +4 -4
  40. data/lib/chargebee/models/invoice.rb +48 -44
  41. data/lib/chargebee/models/invoice_estimate.rb +1 -1
  42. data/lib/chargebee/models/item.rb +5 -5
  43. data/lib/chargebee/models/item_entitlement.rb +4 -4
  44. data/lib/chargebee/models/item_family.rb +5 -5
  45. data/lib/chargebee/models/item_price.rb +7 -7
  46. data/lib/chargebee/models/ledger_account_balance.rb +1 -1
  47. data/lib/chargebee/models/ledger_operation.rb +9 -10
  48. data/lib/chargebee/models/meter.rb +18 -0
  49. data/lib/chargebee/models/metered_feature.rb +46 -0
  50. data/lib/chargebee/models/non_subscription.rb +1 -1
  51. data/lib/chargebee/models/offer_event.rb +1 -1
  52. data/lib/chargebee/models/offer_fulfillment.rb +3 -3
  53. data/lib/chargebee/models/omnichannel_one_time_order.rb +2 -2
  54. data/lib/chargebee/models/omnichannel_subscription.rb +4 -4
  55. data/lib/chargebee/models/omnichannel_subscription_item.rb +1 -1
  56. data/lib/chargebee/models/order.rb +12 -12
  57. data/lib/chargebee/models/payment_intent.rb +9 -4
  58. data/lib/chargebee/models/payment_schedule_scheme.rb +3 -3
  59. data/lib/chargebee/models/payment_source.rb +16 -16
  60. data/lib/chargebee/models/payment_voucher.rb +4 -4
  61. data/lib/chargebee/models/personalized_offer.rb +1 -1
  62. data/lib/chargebee/models/plan.rb +7 -7
  63. data/lib/chargebee/models/portal_session.rb +4 -4
  64. data/lib/chargebee/models/price_variant.rb +5 -5
  65. data/lib/chargebee/models/pricing_page_session.rb +2 -2
  66. data/lib/chargebee/models/promotional_credit.rb +5 -5
  67. data/lib/chargebee/models/promotional_grant.rb +1 -1
  68. data/lib/chargebee/models/purchase.rb +2 -2
  69. data/lib/chargebee/models/quote.rb +27 -27
  70. data/lib/chargebee/models/quote_line_group.rb +1 -1
  71. data/lib/chargebee/models/quoted_charge.rb +2 -2
  72. data/lib/chargebee/models/ramp.rb +6 -6
  73. data/lib/chargebee/models/recorded_purchase.rb +2 -2
  74. data/lib/chargebee/models/resource_migration.rb +1 -1
  75. data/lib/chargebee/models/rule.rb +1 -1
  76. data/lib/chargebee/models/site_migration_detail.rb +1 -1
  77. data/lib/chargebee/models/subscription.rb +37 -37
  78. data/lib/chargebee/models/subscription_entitlement.rb +2 -2
  79. data/lib/chargebee/models/time_machine.rb +3 -3
  80. data/lib/chargebee/models/transaction.rb +11 -11
  81. data/lib/chargebee/models/unbilled_charge.rb +6 -6
  82. data/lib/chargebee/models/usage.rb +5 -5
  83. data/lib/chargebee/models/usage_charge.rb +1 -1
  84. data/lib/chargebee/models/usage_event.rb +2 -2
  85. data/lib/chargebee/models/usage_file.rb +2 -2
  86. data/lib/chargebee/models/usage_summary.rb +1 -1
  87. data/lib/chargebee/models/virtual_bank_account.rb +6 -6
  88. data/lib/chargebee/models/webhook_endpoint.rb +5 -5
  89. data/lib/chargebee/request.rb +37 -8
  90. data/lib/chargebee/result.rb +41 -6
  91. data/lib/chargebee/telemetry/request_telemetry_context.rb +29 -0
  92. data/lib/chargebee/telemetry/request_telemetry_error.rb +20 -0
  93. data/lib/chargebee/telemetry/request_telemetry_result.rb +20 -0
  94. data/lib/chargebee/telemetry/telemetry_adapter.rb +32 -0
  95. data/lib/chargebee/telemetry/telemetry_attribute_keys.rb +33 -0
  96. data/lib/chargebee/telemetry/telemetry_support.rb +123 -0
  97. data/lib/chargebee/telemetry_executor.rb +95 -0
  98. data/lib/chargebee.rb +14 -1
  99. data/spec/chargebee/request_telemetry_spec.rb +75 -0
  100. data/spec/chargebee/telemetry_executor_spec.rb +147 -0
  101. data/spec/chargebee/telemetry_support_spec.rb +29 -0
  102. metadata +20 -2
@@ -13,14 +13,14 @@ module ChargeBee
13
13
  options = {
14
14
  :isIdempotent => true
15
15
  }
16
- Request.send('post', uri_path("subscriptions",id.to_s,"usages"), params, env, headers,nil, false, jsonKeys, options)
16
+ Request.send('post', uri_path("subscriptions",id.to_s,"usages"), params, env, headers,nil, false, jsonKeys, options, "usage", "create")
17
17
  end
18
18
 
19
19
  def self.retrieve(id, params, env=nil, headers={})
20
20
  jsonKeys = {
21
21
  }
22
22
  options = {}
23
- Request.send('get', uri_path("subscriptions",id.to_s,"usages"), params, env, headers,nil, false, jsonKeys, options)
23
+ Request.send('get', uri_path("subscriptions",id.to_s,"usages"), params, env, headers,nil, false, jsonKeys, options, "usage", "retrieve")
24
24
  end
25
25
 
26
26
  def self.delete(id, params, env=nil, headers={})
@@ -29,14 +29,14 @@ module ChargeBee
29
29
  options = {
30
30
  :isIdempotent => true
31
31
  }
32
- Request.send('post', uri_path("subscriptions",id.to_s,"delete_usage"), params, env, headers,nil, false, jsonKeys, options)
32
+ Request.send('post', uri_path("subscriptions",id.to_s,"delete_usage"), params, env, headers,nil, false, jsonKeys, options, "usage", "delete")
33
33
  end
34
34
 
35
35
  def self.list(params={}, env=nil, headers={})
36
36
  jsonKeys = {
37
37
  }
38
38
  options = {}
39
- Request.send_list_request('get', uri_path("usages"), params, env, headers,nil, false, jsonKeys, options)
39
+ Request.send_list_request('get', uri_path("usages"), params, env, headers,nil, false, jsonKeys, options, "usage", "list")
40
40
  end
41
41
 
42
42
  def self.pdf(params, env=nil, headers={})
@@ -45,7 +45,7 @@ module ChargeBee
45
45
  options = {
46
46
  :isIdempotent => true
47
47
  }
48
- Request.send('post', uri_path("usages","pdf"), params, env, headers,nil, false, jsonKeys, options)
48
+ Request.send('post', uri_path("usages","pdf"), params, env, headers,nil, false, jsonKeys, options, "usage", "pdf")
49
49
  end
50
50
 
51
51
  end # ~Usage
@@ -11,7 +11,7 @@ module ChargeBee
11
11
  jsonKeys = {
12
12
  }
13
13
  options = {}
14
- Request.send('get', uri_path("subscriptions",id.to_s,"usage_charges"), params, env, headers,nil, false, jsonKeys, options)
14
+ Request.send('get', uri_path("subscriptions",id.to_s,"usage_charges"), params, env, headers,nil, false, jsonKeys, options, "usageCharge", "retrieveUsageChargesForSubscription")
15
15
  end
16
16
 
17
17
  end # ~UsageCharge
@@ -11,7 +11,7 @@ module ChargeBee
11
11
  :properties => 0,
12
12
  }
13
13
  options = {}
14
- Request.send('post', uri_path("usage_events"), params, env, headers, "ingest", true, jsonKeys, options)
14
+ Request.send('post', uri_path("usage_events"), params, env, headers, "ingest", true, jsonKeys, options, "usageEvent", "create")
15
15
  end
16
16
 
17
17
  def self.batch_ingest(params, env=nil, headers={})
@@ -19,7 +19,7 @@ module ChargeBee
19
19
  :properties => 1,
20
20
  }
21
21
  options = {}
22
- Request.send('post', uri_path("batch","usage_events"), params, env, headers, "ingest", true, jsonKeys, options)
22
+ Request.send('post', uri_path("batch","usage_events"), params, env, headers, "ingest", true, jsonKeys, options, "usageEvent", "batchIngest")
23
23
  end
24
24
 
25
25
  end # ~UsageEvent
@@ -16,14 +16,14 @@ module ChargeBee
16
16
  jsonKeys = {
17
17
  }
18
18
  options = {}
19
- Request.send('post', uri_path("usage_files","upload_url"), params, env, headers, "file-ingest", false, jsonKeys, options)
19
+ Request.send('post', uri_path("usage_files","upload_url"), params, env, headers, "file-ingest", false, jsonKeys, options, "usageFile", "uploadUrl")
20
20
  end
21
21
 
22
22
  def self.processing_status(id, env=nil, headers={})
23
23
  jsonKeys = {
24
24
  }
25
25
  options = {}
26
- Request.send('get', uri_path("usage_files",id.to_s,"processing_status"), {}, env, headers, "file-ingest", false, jsonKeys, options)
26
+ Request.send('get', uri_path("usage_files",id.to_s,"processing_status"), {}, env, headers, "file-ingest", false, jsonKeys, options, "usageFile", "processingStatus")
27
27
  end
28
28
 
29
29
  end # ~UsageFile
@@ -10,7 +10,7 @@ module ChargeBee
10
10
  jsonKeys = {
11
11
  }
12
12
  options = {}
13
- Request.send('get', uri_path("subscriptions",id.to_s,"usage_summary"), params, env, headers,nil, false, jsonKeys, options)
13
+ Request.send('get', uri_path("subscriptions",id.to_s,"usage_summary"), params, env, headers,nil, false, jsonKeys, options, "usageSummary", "retrieveUsageSummaryForSubscription")
14
14
  end
15
15
 
16
16
  end # ~UsageSummary
@@ -14,7 +14,7 @@ module ChargeBee
14
14
  options = {
15
15
  :isIdempotent => true
16
16
  }
17
- Request.send('post', uri_path("virtual_bank_accounts","create_using_permanent_token"), params, env, headers,nil, false, jsonKeys, options)
17
+ Request.send('post', uri_path("virtual_bank_accounts","create_using_permanent_token"), params, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "createUsingPermanentToken")
18
18
  end
19
19
 
20
20
  def self.create(params, env=nil, headers={})
@@ -23,21 +23,21 @@ module ChargeBee
23
23
  options = {
24
24
  :isIdempotent => true
25
25
  }
26
- Request.send('post', uri_path("virtual_bank_accounts"), params, env, headers,nil, false, jsonKeys, options)
26
+ Request.send('post', uri_path("virtual_bank_accounts"), params, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "create")
27
27
  end
28
28
 
29
29
  def self.retrieve(id, env=nil, headers={})
30
30
  jsonKeys = {
31
31
  }
32
32
  options = {}
33
- Request.send('get', uri_path("virtual_bank_accounts",id.to_s), {}, env, headers,nil, false, jsonKeys, options)
33
+ Request.send('get', uri_path("virtual_bank_accounts",id.to_s), {}, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "retrieve")
34
34
  end
35
35
 
36
36
  def self.list(params={}, env=nil, headers={})
37
37
  jsonKeys = {
38
38
  }
39
39
  options = {}
40
- Request.send_list_request('get', uri_path("virtual_bank_accounts"), params, env, headers,nil, false, jsonKeys, options)
40
+ Request.send_list_request('get', uri_path("virtual_bank_accounts"), params, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "list")
41
41
  end
42
42
 
43
43
  def self.delete(id, env=nil, headers={})
@@ -46,7 +46,7 @@ module ChargeBee
46
46
  options = {
47
47
  :isIdempotent => true
48
48
  }
49
- Request.send('post', uri_path("virtual_bank_accounts",id.to_s,"delete"), {}, env, headers,nil, false, jsonKeys, options)
49
+ Request.send('post', uri_path("virtual_bank_accounts",id.to_s,"delete"), {}, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "delete")
50
50
  end
51
51
 
52
52
  def self.delete_local(id, env=nil, headers={})
@@ -55,7 +55,7 @@ module ChargeBee
55
55
  options = {
56
56
  :isIdempotent => true
57
57
  }
58
- Request.send('post', uri_path("virtual_bank_accounts",id.to_s,"delete_local"), {}, env, headers,nil, false, jsonKeys, options)
58
+ Request.send('post', uri_path("virtual_bank_accounts",id.to_s,"delete_local"), {}, env, headers,nil, false, jsonKeys, options, "virtualBankAccount", "deleteLocal")
59
59
  end
60
60
 
61
61
  end # ~VirtualBankAccount
@@ -13,7 +13,7 @@ module ChargeBee
13
13
  options = {
14
14
  :isIdempotent => true
15
15
  }
16
- Request.send('post', uri_path("webhook_endpoints"), params, env, headers,nil, false, jsonKeys, options)
16
+ Request.send('post', uri_path("webhook_endpoints"), params, env, headers,nil, false, jsonKeys, options, "webhookEndpoint", "create")
17
17
  end
18
18
 
19
19
  def self.update(id, params={}, env=nil, headers={})
@@ -22,14 +22,14 @@ module ChargeBee
22
22
  options = {
23
23
  :isIdempotent => true
24
24
  }
25
- Request.send('post', uri_path("webhook_endpoints",id.to_s), params, env, headers,nil, false, jsonKeys, options)
25
+ Request.send('post', uri_path("webhook_endpoints",id.to_s), params, env, headers,nil, false, jsonKeys, options, "webhookEndpoint", "update")
26
26
  end
27
27
 
28
28
  def self.retrieve(id, env=nil, headers={})
29
29
  jsonKeys = {
30
30
  }
31
31
  options = {}
32
- Request.send('get', uri_path("webhook_endpoints",id.to_s), {}, env, headers,nil, false, jsonKeys, options)
32
+ Request.send('get', uri_path("webhook_endpoints",id.to_s), {}, env, headers,nil, false, jsonKeys, options, "webhookEndpoint", "retrieve")
33
33
  end
34
34
 
35
35
  def self.delete(id, env=nil, headers={})
@@ -38,14 +38,14 @@ module ChargeBee
38
38
  options = {
39
39
  :isIdempotent => true
40
40
  }
41
- Request.send('post', uri_path("webhook_endpoints",id.to_s,"delete"), {}, env, headers,nil, false, jsonKeys, options)
41
+ Request.send('post', uri_path("webhook_endpoints",id.to_s,"delete"), {}, env, headers,nil, false, jsonKeys, options, "webhookEndpoint", "delete")
42
42
  end
43
43
 
44
44
  def self.list(params={}, env=nil, headers={})
45
45
  jsonKeys = {
46
46
  }
47
47
  options = {}
48
- Request.send_list_request('get', uri_path("webhook_endpoints"), params, env, headers,nil, false, jsonKeys, options)
48
+ Request.send_list_request('get', uri_path("webhook_endpoints"), params, env, headers,nil, false, jsonKeys, options, "webhookEndpoint", "list")
49
49
  end
50
50
 
51
51
  end # ~WebhookEndpoint
@@ -1,7 +1,7 @@
1
1
  module ChargeBee
2
2
  class Request
3
3
 
4
- def self.send_list_request(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={}, options={})
4
+ def self.send_list_request(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={}, options={}, telemetry_resource=nil, telemetry_operation=nil)
5
5
  serialized = {}
6
6
  params.each do |k, v|
7
7
  if(v.kind_of? Array)
@@ -9,19 +9,48 @@ module ChargeBee
9
9
  end
10
10
  serialized["#{k}"] = v
11
11
  end
12
- self.send(method, url, serialized, env, headers, sub_domain, isJsonRequest=nil, jsonKeys={}, options)
12
+ self.send(method, url, serialized, env, headers, sub_domain, isJsonRequest, jsonKeys, options, telemetry_resource, telemetry_operation)
13
13
  end
14
14
 
15
- def self.send(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={}, options={})
15
+ def self.send(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={}, options={}, telemetry_resource=nil, telemetry_operation=nil)
16
+ telemetry_resource, telemetry_operation = normalize_telemetry_args(telemetry_resource, telemetry_operation)
16
17
  env ||= ChargeBee.default_env
17
18
  ser_params = isJsonRequest ? params : Util.serialize(params, nil, nil, jsonKeys)
18
- resp, rheaders, rcode = NativeRequest.request(method, url, env, ser_params||={}, headers, sub_domain, isJsonRequest, options)
19
- if resp&.has_key?(:list)
20
- ListResult.new(resp[:list], resp[:next_offset], rheaders, rcode)
21
- else
22
- Result.new(resp, rheaders, rcode)
19
+ http_url = TelemetryExecutor.build_http_url(env, sub_domain, url)
20
+ normalized_headers = headers || {}
21
+
22
+ TelemetryExecutor.execute(
23
+ env,
24
+ telemetry_resource: telemetry_resource,
25
+ telemetry_operation: telemetry_operation,
26
+ method: method,
27
+ http_url: http_url,
28
+ request_headers: normalized_headers,
29
+ ) do |telemetry_headers|
30
+ merged_headers = normalized_headers.dup
31
+ if telemetry_headers
32
+ telemetry_headers.each { |key, value| merged_headers[key] = value }
33
+ end
34
+ resp, rheaders, rcode = NativeRequest.request(method, url, env, ser_params||={}, merged_headers, sub_domain, isJsonRequest, options)
35
+ result = if resp && resp.has_key?(:list)
36
+ ListResult.new(resp[:list], resp[:next_offset], rheaders, rcode)
37
+ else
38
+ Result.new(resp, rheaders, rcode)
39
+ end
40
+ [rcode.to_i, result]
23
41
  end
24
42
  end
25
43
 
44
+ def self.normalize_telemetry_args(telemetry_resource, telemetry_operation)
45
+ if telemetry_resource.is_a?(Hash) && telemetry_operation.nil? &&
46
+ (telemetry_resource.key?(:telemetry_resource) || telemetry_resource.key?(:telemetry_operation))
47
+ h = telemetry_resource
48
+ return [h[:telemetry_resource], h[:telemetry_operation]]
49
+ end
50
+
51
+ [telemetry_resource, telemetry_operation]
52
+ end
53
+ private_class_method :normalize_telemetry_args
54
+
26
55
  end
27
56
  end
@@ -30,6 +30,20 @@ module ChargeBee
30
30
  end
31
31
  end
32
32
 
33
+ def async_response_list()
34
+ async_response_list = get(:async_response_list, AsyncResponseList, {},
35
+ {:list => AsyncResponse});
36
+ async_response_list.init_dependant_list(@response[:async_response_list], :list,
37
+ {:request => AsyncResponse::RequestAsyncApi, :error_detail => AsyncResponse::Error});
38
+ return async_response_list;
39
+ end
40
+
41
+ def async_response()
42
+ async_response = get(:async_response, AsyncResponse,
43
+ {:request_async_api => AsyncResponse::RequestAsyncApi, :error => AsyncResponse::Error});
44
+ return async_response;
45
+ end
46
+
33
47
  def subscription()
34
48
  subscription = get(:subscription, Subscription,
35
49
  {:subscription_items => Subscription::SubscriptionItem, :item_tiers => Subscription::ItemTier, :charged_items => Subscription::ChargedItem, :addons => Subscription::Addon, :event_based_addons => Subscription::EventBasedAddon, :charged_event_based_addons => Subscription::ChargedEventBasedAddon, :coupons => Subscription::Coupon, :shipping_address => Subscription::ShippingAddress, :referral_info => Subscription::ReferralInfo, :billing_override => Subscription::BillingOverride, :contract_term => Subscription::ContractTerm, :discounts => Subscription::Discount});
@@ -106,7 +120,7 @@ module ChargeBee
106
120
 
107
121
  def invoice()
108
122
  invoice = get(:invoice, Invoice,
109
- {:line_items => Invoice::LineItem, :line_item_tiers => Invoice::LineItemTier, :line_item_discounts => Invoice::LineItemDiscount, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_addresses => Invoice::LineItemAddress, :discounts => Invoice::Discount, :taxes => Invoice::Tax, :tax_origin => Invoice::TaxOrigin, :linked_payments => Invoice::LinkedPayment, :reference_transactions => Invoice::ReferenceTransaction, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :billing_address => Invoice::BillingAddress, :statement_descriptor => Invoice::StatementDescriptor, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation});
123
+ {:exchange_rates => Invoice::ExchangeRate, :line_items => Invoice::LineItem, :line_item_tiers => Invoice::LineItemTier, :line_item_discounts => Invoice::LineItemDiscount, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_addresses => Invoice::LineItemAddress, :discounts => Invoice::Discount, :taxes => Invoice::Tax, :tax_origin => Invoice::TaxOrigin, :linked_payments => Invoice::LinkedPayment, :reference_transactions => Invoice::ReferenceTransaction, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :billing_address => Invoice::BillingAddress, :statement_descriptor => Invoice::StatementDescriptor, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation});
110
124
  return invoice;
111
125
  end
112
126
 
@@ -133,7 +147,7 @@ module ChargeBee
133
147
 
134
148
  def credit_note()
135
149
  credit_note = get(:credit_note, CreditNote,
136
- {:line_items => CreditNote::LineItem, :line_item_tiers => CreditNote::LineItemTier, :line_item_discounts => CreditNote::LineItemDiscount, :line_item_taxes => CreditNote::LineItemTax, :line_item_addresses => CreditNote::LineItemAddress, :discounts => CreditNote::Discount, :taxes => CreditNote::Tax, :tax_origin => CreditNote::TaxOrigin, :linked_refunds => CreditNote::LinkedRefund, :allocations => CreditNote::Allocation, :shipping_address => CreditNote::ShippingAddress, :billing_address => CreditNote::BillingAddress, :einvoice => CreditNote::Einvoice, :site_details_at_creation => CreditNote::SiteDetailsAtCreation});
150
+ {:line_items => CreditNote::LineItem, :line_item_tiers => CreditNote::LineItemTier, :line_item_discounts => CreditNote::LineItemDiscount, :line_item_taxes => CreditNote::LineItemTax, :line_item_addresses => CreditNote::LineItemAddress, :discounts => CreditNote::Discount, :taxes => CreditNote::Tax, :tax_origin => CreditNote::TaxOrigin, :linked_refunds => CreditNote::LinkedRefund, :allocations => CreditNote::Allocation, :exchange_rates => CreditNote::ExchangeRate, :shipping_address => CreditNote::ShippingAddress, :billing_address => CreditNote::BillingAddress, :einvoice => CreditNote::Einvoice, :site_details_at_creation => CreditNote::SiteDetailsAtCreation});
137
151
  return credit_note;
138
152
  end
139
153
 
@@ -318,7 +332,7 @@ module ChargeBee
318
332
 
319
333
  def payment_intent()
320
334
  payment_intent = get(:payment_intent, PaymentIntent,
321
- {:payment_attempt => PaymentIntent::PaymentAttempt, :payment_attempts => PaymentIntent::PaymentAttempt});
335
+ {:payment_attempt => PaymentIntent::PaymentAttempt, :payment_attempts => PaymentIntent::PaymentAttempt, :payment_intent_metadata => PaymentIntent::PaymentIntentMetadata});
322
336
  return payment_intent;
323
337
  end
324
338
 
@@ -530,11 +544,31 @@ module ChargeBee
530
544
  return rule;
531
545
  end
532
546
 
547
+ def meter()
548
+ meter = get(:meter, Meter, {},
549
+ {:column_definitions => ColumnDefinition, :features => Feature});
550
+ meter.init_dependant_list(@response[:meter], :column_definitions,
551
+ {});
552
+ meter.init_dependant_list(@response[:meter], :features,
553
+ {:levels => Feature::Level});
554
+ return meter;
555
+ end
556
+
533
557
  def usage_event()
534
558
  usage_event = get(:usage_event, UsageEvent);
535
559
  return usage_event;
536
560
  end
537
561
 
562
+ def metered_feature()
563
+ metered_feature = get(:metered_feature, MeteredFeature, {},
564
+ {:column_definitions => ColumnDefinition, :features => Feature});
565
+ metered_feature.init_dependant_list(@response[:metered_feature], :column_definitions,
566
+ {});
567
+ metered_feature.init_dependant_list(@response[:metered_feature], :features,
568
+ {:levels => Feature::Level});
569
+ return metered_feature;
570
+ end
571
+
538
572
  def usage_file()
539
573
  usage_file = get(:usage_file, UsageFile,
540
574
  {:upload_detail => UsageFile::UploadDetail});
@@ -579,7 +613,8 @@ module ChargeBee
579
613
  end
580
614
 
581
615
  def alert()
582
- alert = get(:alert, Alert);
616
+ alert = get(:alert, Alert,
617
+ {:threshold => Alert::Threshold, :filter_conditions => Alert::FilterCondition});
583
618
  return alert;
584
619
  end
585
620
 
@@ -644,7 +679,7 @@ module ChargeBee
644
679
 
645
680
  def invoices()
646
681
  invoices = get_list(:invoices, Invoice,
647
- {:line_items => Invoice::LineItem, :line_item_tiers => Invoice::LineItemTier, :line_item_discounts => Invoice::LineItemDiscount, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_addresses => Invoice::LineItemAddress, :discounts => Invoice::Discount, :taxes => Invoice::Tax, :tax_origin => Invoice::TaxOrigin, :linked_payments => Invoice::LinkedPayment, :reference_transactions => Invoice::ReferenceTransaction, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :billing_address => Invoice::BillingAddress, :statement_descriptor => Invoice::StatementDescriptor, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation});
682
+ {:exchange_rates => Invoice::ExchangeRate, :line_items => Invoice::LineItem, :line_item_tiers => Invoice::LineItemTier, :line_item_discounts => Invoice::LineItemDiscount, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_addresses => Invoice::LineItemAddress, :discounts => Invoice::Discount, :taxes => Invoice::Tax, :tax_origin => Invoice::TaxOrigin, :linked_payments => Invoice::LinkedPayment, :reference_transactions => Invoice::ReferenceTransaction, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :billing_address => Invoice::BillingAddress, :statement_descriptor => Invoice::StatementDescriptor, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation});
648
683
  return invoices;
649
684
  end
650
685
 
@@ -656,7 +691,7 @@ module ChargeBee
656
691
 
657
692
  def credit_notes()
658
693
  credit_notes = get_list(:credit_notes, CreditNote,
659
- {:line_items => CreditNote::LineItem, :line_item_tiers => CreditNote::LineItemTier, :line_item_discounts => CreditNote::LineItemDiscount, :line_item_taxes => CreditNote::LineItemTax, :line_item_addresses => CreditNote::LineItemAddress, :discounts => CreditNote::Discount, :taxes => CreditNote::Tax, :tax_origin => CreditNote::TaxOrigin, :linked_refunds => CreditNote::LinkedRefund, :allocations => CreditNote::Allocation, :shipping_address => CreditNote::ShippingAddress, :billing_address => CreditNote::BillingAddress, :einvoice => CreditNote::Einvoice, :site_details_at_creation => CreditNote::SiteDetailsAtCreation});
694
+ {:line_items => CreditNote::LineItem, :line_item_tiers => CreditNote::LineItemTier, :line_item_discounts => CreditNote::LineItemDiscount, :line_item_taxes => CreditNote::LineItemTax, :line_item_addresses => CreditNote::LineItemAddress, :discounts => CreditNote::Discount, :taxes => CreditNote::Tax, :tax_origin => CreditNote::TaxOrigin, :linked_refunds => CreditNote::LinkedRefund, :allocations => CreditNote::Allocation, :exchange_rates => CreditNote::ExchangeRate, :shipping_address => CreditNote::ShippingAddress, :billing_address => CreditNote::BillingAddress, :einvoice => CreditNote::Einvoice, :site_details_at_creation => CreditNote::SiteDetailsAtCreation});
660
695
  return credit_notes;
661
696
  end
662
697
 
@@ -0,0 +1,29 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Context passed to TelemetryAdapter#on_request_start.
9
+ class RequestTelemetryContext
10
+ attr_reader :span_name, :resource, :operation, :http_method, :http_url, :server_address,
11
+ :chargebee_site, :chargebee_api_version, :sdk_name, :sdk_version, :start_attributes
12
+
13
+ def initialize(span_name:, resource:, operation:, http_method:, http_url:, server_address:,
14
+ chargebee_site:, chargebee_api_version:, sdk_name:, sdk_version:, start_attributes:)
15
+ @span_name = span_name
16
+ @resource = resource
17
+ @operation = operation
18
+ @http_method = http_method
19
+ @http_url = http_url
20
+ @server_address = server_address
21
+ @chargebee_site = chargebee_site
22
+ @chargebee_api_version = chargebee_api_version
23
+ @sdk_name = sdk_name
24
+ @sdk_version = sdk_version
25
+ @start_attributes = start_attributes.freeze
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Error details attached to RequestTelemetryResult on failed requests.
9
+ class RequestTelemetryError
10
+ attr_reader :message, :chargebee_error_code, :chargebee_api_error_type, :chargebee_error_param
11
+
12
+ def initialize(message:, chargebee_error_code: nil, chargebee_api_error_type: nil, chargebee_error_param: nil)
13
+ @message = message
14
+ @chargebee_error_code = chargebee_error_code
15
+ @chargebee_api_error_type = chargebee_api_error_type
16
+ @chargebee_error_param = chargebee_error_param
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Result passed to TelemetryAdapter#on_request_end.
9
+ class RequestTelemetryResult
10
+ attr_reader :http_status_code, :duration_ms, :error, :end_attributes
11
+
12
+ def initialize(http_status_code:, duration_ms:, error:, end_attributes:)
13
+ @http_status_code = http_status_code
14
+ @duration_ms = duration_ms
15
+ @error = error
16
+ @end_attributes = end_attributes.freeze
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Optional telemetry adapter for observability integrations (e.g. OpenTelemetry).
9
+ #
10
+ # When not configured, the SDK skips all telemetry work — zero overhead. The SDK stores the
11
+ # adapter by reference and never clones or deep-copies it.
12
+ #
13
+ # Implementations may inject W3C trace context headers (traceparent, tracestate) into
14
+ # request_headers during on_request_start.
15
+ module TelemetryAdapter
16
+ # Called once per SDK API call before the request is sent (including before retries).
17
+ #
18
+ # context contains prebuilt start attributes. request_headers is a mutable map for trace propagation.
19
+ # Returns an opaque handle passed back to on_request_end, or nil if span creation was skipped.
20
+ def on_request_start(context, request_headers)
21
+ raise NotImplementedError
22
+ end
23
+
24
+ # Called once per SDK API call after the final response or terminal failure.
25
+ #
26
+ # handle is the value returned from on_request_start and may be nil. result contains prebuilt end attributes.
27
+ def on_request_end(handle, result)
28
+ raise NotImplementedError
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Span attribute keys shared across Chargebee SDKs.
9
+ module TelemetryAttributeKeys
10
+ SDK_NAME = 'chargebee-ruby'.freeze
11
+ TELEMETRY_SPAN_NAME_PREFIX = 'chargebee'.freeze
12
+
13
+ HTTP_REQUEST_HEADER_ATTRIBUTE_PREFIX = 'http.request.header.'.freeze
14
+ CHARGEBEE_TELEMETRY_HEADER_PREFIX = 'chargebee-'.freeze
15
+ CHARGEBEE_TELEMETRY_HEADER_EXCLUDE_PREFIX = 'chargebee-request-origin-'.freeze
16
+
17
+ URL_FULL = 'url.full'.freeze
18
+ HTTP_REQUEST_METHOD = 'http.request.method'.freeze
19
+ HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code'.freeze
20
+ SERVER_ADDRESS = 'server.address'.freeze
21
+ ERROR_TYPE = 'error.type'.freeze
22
+ CHARGEBEE_SITE = 'chargebee.site'.freeze
23
+ CHARGEBEE_API_VERSION = 'chargebee.api_version'.freeze
24
+ CHARGEBEE_RESOURCE = 'chargebee.resource'.freeze
25
+ CHARGEBEE_OPERATION = 'chargebee.operation'.freeze
26
+ CHARGEBEE_SDK_NAME = 'chargebee.sdk.name'.freeze
27
+ CHARGEBEE_SDK_VERSION = 'chargebee.sdk.version'.freeze
28
+ CHARGEBEE_ERROR_CODE = 'chargebee.error.code'.freeze
29
+ CHARGEBEE_ERROR_TYPE = 'chargebee.error.type'.freeze
30
+ CHARGEBEE_ERROR_PARAM = 'chargebee.error.param'.freeze
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,123 @@
1
+ # This file is auto-generated by Chargebee.
2
+ # For more information on how to make changes to this file, please see the README.
3
+ # Reach out to dx@chargebee.com for any questions.
4
+ # Copyright 2026 Chargebee Inc.
5
+
6
+ module ChargeBee
7
+ module Telemetry
8
+ # Helpers for building standardized Chargebee telemetry context and results.
9
+ class TelemetrySupport
10
+ class << self
11
+ def build_span_name(resource, operation)
12
+ "#{TelemetryAttributeKeys::TELEMETRY_SPAN_NAME_PREFIX}.#{resource}.#{operation}"
13
+ end
14
+
15
+ def resolve_chargebee_api_version(api_path)
16
+ api_path == '/api/v1' ? 'v1' : 'v2'
17
+ end
18
+
19
+ def build_request_start_span_attributes(resource, operation, http_method, http_url, server_address,
20
+ chargebee_site, chargebee_api_version, sdk_version, request_headers = {})
21
+ {
22
+ TelemetryAttributeKeys::URL_FULL => http_url,
23
+ TelemetryAttributeKeys::HTTP_REQUEST_METHOD => http_method,
24
+ TelemetryAttributeKeys::SERVER_ADDRESS => server_address,
25
+ TelemetryAttributeKeys::CHARGEBEE_SITE => chargebee_site,
26
+ TelemetryAttributeKeys::CHARGEBEE_API_VERSION => chargebee_api_version,
27
+ TelemetryAttributeKeys::CHARGEBEE_RESOURCE => resource,
28
+ TelemetryAttributeKeys::CHARGEBEE_OPERATION => operation,
29
+ TelemetryAttributeKeys::CHARGEBEE_SDK_NAME => TelemetryAttributeKeys::SDK_NAME,
30
+ TelemetryAttributeKeys::CHARGEBEE_SDK_VERSION => sdk_version,
31
+ }.merge(build_request_header_span_attributes(request_headers))
32
+ end
33
+
34
+ # Promotes chargebee-* request headers to http.request.header.* attributes; excludes the chargebee-request-origin-* PII family.
35
+ def build_request_header_span_attributes(request_headers)
36
+ attributes = {}
37
+ return attributes if request_headers.nil?
38
+
39
+ request_headers.each do |name, value|
40
+ next if name.nil? || value.nil?
41
+
42
+ lower_name = name.to_s.downcase
43
+ next unless lower_name.start_with?(TelemetryAttributeKeys::CHARGEBEE_TELEMETRY_HEADER_PREFIX)
44
+ next if lower_name.start_with?(TelemetryAttributeKeys::CHARGEBEE_TELEMETRY_HEADER_EXCLUDE_PREFIX)
45
+
46
+ attributes["#{TelemetryAttributeKeys::HTTP_REQUEST_HEADER_ATTRIBUTE_PREFIX}#{lower_name}"] = value.to_s
47
+ end
48
+
49
+ attributes
50
+ end
51
+
52
+ def build_request_end_span_attributes(http_status_code, error)
53
+ attributes = {
54
+ TelemetryAttributeKeys::HTTP_RESPONSE_STATUS_CODE => http_status_code,
55
+ }
56
+
57
+ if error
58
+ if error.chargebee_api_error_type
59
+ attributes[TelemetryAttributeKeys::ERROR_TYPE] = error.chargebee_api_error_type
60
+ attributes[TelemetryAttributeKeys::CHARGEBEE_ERROR_TYPE] = error.chargebee_api_error_type
61
+ end
62
+ attributes[TelemetryAttributeKeys::CHARGEBEE_ERROR_CODE] = error.chargebee_error_code if error.chargebee_error_code
63
+ attributes[TelemetryAttributeKeys::CHARGEBEE_ERROR_PARAM] = error.chargebee_error_param if error.chargebee_error_param
64
+ end
65
+
66
+ attributes
67
+ end
68
+
69
+ def build_request_telemetry_context(resource, operation, http_method, http_url, server_address,
70
+ chargebee_site, chargebee_api_version, sdk_version, request_headers = {})
71
+ RequestTelemetryContext.new(
72
+ span_name: build_span_name(resource, operation),
73
+ resource: resource,
74
+ operation: operation,
75
+ http_method: http_method,
76
+ http_url: http_url,
77
+ server_address: server_address,
78
+ chargebee_site: chargebee_site,
79
+ chargebee_api_version: chargebee_api_version,
80
+ sdk_name: TelemetryAttributeKeys::SDK_NAME,
81
+ sdk_version: sdk_version,
82
+ start_attributes: build_request_start_span_attributes(
83
+ resource, operation, http_method, http_url, server_address, chargebee_site, chargebee_api_version, sdk_version, request_headers
84
+ ),
85
+ )
86
+ end
87
+
88
+ def build_request_telemetry_result(http_status_code, duration_ms, error)
89
+ RequestTelemetryResult.new(
90
+ http_status_code: http_status_code,
91
+ duration_ms: duration_ms,
92
+ error: error,
93
+ end_attributes: build_request_end_span_attributes(http_status_code, error),
94
+ )
95
+ end
96
+
97
+ def extract_request_telemetry_error(err)
98
+ return nil if err.nil?
99
+
100
+ message = err.message.to_s
101
+ message = 'Chargebee API request failed' if message.empty?
102
+
103
+ if err.is_a?(ChargeBee::APIError)
104
+ return RequestTelemetryError.new(
105
+ message: message,
106
+ chargebee_error_code: err.api_error_code,
107
+ chargebee_api_error_type: err.type.to_s,
108
+ chargebee_error_param: err.param,
109
+ )
110
+ end
111
+
112
+ RequestTelemetryError.new(message: message)
113
+ end
114
+
115
+ def extract_http_status_code(err)
116
+ return err.http_status_code if err.is_a?(ChargeBee::APIError)
117
+
118
+ nil
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end