diff --git a/lib/privy.rb b/lib/privy.rb index f803100..300a49d 100644 --- a/lib/privy.rb +++ b/lib/privy.rb @@ -922,6 +922,7 @@ require_relative "privy/public_api/services/users" require_relative "privy/public_api/services/policies" require_relative "privy/public_api/services/key_quorums" +require_relative "privy/public_api/privy_request_expiry_options" require_relative "privy/public_api/privy_client" # Cryptography (HPKE) diff --git a/lib/privy/public_api/privy_request_expiry_options.rb b/lib/privy/public_api/privy_request_expiry_options.rb new file mode 100644 index 0000000..c2339a4 --- /dev/null +++ b/lib/privy/public_api/privy_request_expiry_options.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Privy + # Configures request-expiry behavior on Privy::PrivyClient. + # + # @!attribute [r] default_ms + # @return [Integer, nil] Default expiry duration in milliseconds-from-now used when a + # caller does not pass `request_expiry:` explicitly. `nil` falls back to + # {Privy::PrivyClient::DEFAULT_REQUEST_EXPIRY_MS} (15 minutes). + # @!attribute [r] disabled + # @return [Boolean] When true, no `privy-request-expiry` header is auto-set. An + # explicit per-call `request_expiry:` value still wins over this flag. + PrivyRequestExpiryOptions = Data.define(:default_ms, :disabled) do + def self.build(default_ms: nil, disabled: false) + new(default_ms: default_ms, disabled: disabled) + end + end +end diff --git a/test/privy/public_api/privy_request_expiry_options_test.rb b/test/privy/public_api/privy_request_expiry_options_test.rb new file mode 100644 index 0000000..f9ba997 --- /dev/null +++ b/test/privy/public_api/privy_request_expiry_options_test.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +class Privy::PrivyRequestExpiryOptionsTest < Minitest::Test + def test_build_defaults_default_ms_nil_disabled_false + opts = Privy::PrivyRequestExpiryOptions.build + assert_nil(opts.default_ms) + assert_equal(false, opts.disabled) + end + + def test_build_accepts_kwargs + opts = Privy::PrivyRequestExpiryOptions.build(default_ms: 60_000, disabled: true) + assert_equal(60_000, opts.default_ms) + assert_equal(true, opts.disabled) + end + + def test_is_a_data_value_object + opts = Privy::PrivyRequestExpiryOptions.build(default_ms: 1) + other = Privy::PrivyRequestExpiryOptions.build(default_ms: 1) + assert_equal(opts, other) # Data equality is structural + end +end