diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 042a000d..f31811fe 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.129.0" + ".": "1.129.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index dc6a1aa6..96f9ad38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.129.1 (2025-11-04) + +Full Changelog: [v1.129.0...v1.129.1](https://github.com/Increase/increase-ruby/compare/v1.129.0...v1.129.1) + +### Bug Fixes + +* better thread safety via early initializing SSL store during HTTP client creation ([05a53e3](https://github.com/Increase/increase-ruby/commit/05a53e3f30b596d51e1e0c572ef239b0b9b8b018)) + ## 1.129.0 (2025-11-04) Full Changelog: [v1.128.0...v1.129.0](https://github.com/Increase/increase-ruby/compare/v1.128.0...v1.129.0) diff --git a/Gemfile.lock b/Gemfile.lock index 23d48dec..5c236e5f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - increase (1.129.0) + increase (1.129.1) connection_pool GEM diff --git a/README.md b/README.md index 4de0ab10..ce7fff75 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "increase", "~> 1.129.0" +gem "increase", "~> 1.129.1" ``` diff --git a/lib/increase.rb b/lib/increase.rb index b28ce1c7..bcbb1bfb 100644 --- a/lib/increase.rb +++ b/lib/increase.rb @@ -9,6 +9,7 @@ require "etc" require "json" require "net/http" +require "openssl" require "pathname" require "rbconfig" require "securerandom" diff --git a/lib/increase/internal/transport/pooled_net_requester.rb b/lib/increase/internal/transport/pooled_net_requester.rb index 2d8db8c6..e5b9f50f 100644 --- a/lib/increase/internal/transport/pooled_net_requester.rb +++ b/lib/increase/internal/transport/pooled_net_requester.rb @@ -16,10 +16,11 @@ class PooledNetRequester class << self # @api private # + # @param cert_store [OpenSSL::X509::Store] # @param url [URI::Generic] # # @return [Net::HTTP] - def connect(url) + def connect(cert_store:, url:) port = case [url.port, url.scheme] in [Integer, _] @@ -33,6 +34,8 @@ def connect(url) Net::HTTP.new(url.host, port).tap do _1.use_ssl = %w[https wss].include?(url.scheme) _1.max_retries = 0 + + (_1.cert_store = cert_store) if _1.use_ssl? end end @@ -102,7 +105,7 @@ def build_request(request, &blk) pool = @mutex.synchronize do @pools[origin] ||= ConnectionPool.new(size: @size) do - self.class.connect(url) + self.class.connect(cert_store: @cert_store, url: url) end end @@ -192,6 +195,7 @@ def execute(request) def initialize(size: self.class::DEFAULT_MAX_CONNECTIONS) @mutex = Mutex.new @size = size + @cert_store = OpenSSL::X509::Store.new.tap(&:set_default_paths) @pools = {} end diff --git a/lib/increase/version.rb b/lib/increase/version.rb index 100c744d..0b80ccec 100644 --- a/lib/increase/version.rb +++ b/lib/increase/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Increase - VERSION = "1.129.0" + VERSION = "1.129.1" end diff --git a/manifest.yaml b/manifest.yaml index 556686f5..7853f4ab 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -6,6 +6,7 @@ dependencies: - etc - json - net/http + - openssl - pathname - rbconfig - securerandom diff --git a/rbi/increase/internal/transport/pooled_net_requester.rbi b/rbi/increase/internal/transport/pooled_net_requester.rbi index 49bcd587..e375174b 100644 --- a/rbi/increase/internal/transport/pooled_net_requester.rbi +++ b/rbi/increase/internal/transport/pooled_net_requester.rbi @@ -26,8 +26,12 @@ module Increase class << self # @api private - sig { params(url: URI::Generic).returns(Net::HTTP) } - def connect(url) + sig do + params(cert_store: OpenSSL::X509::Store, url: URI::Generic).returns( + Net::HTTP + ) + end + def connect(cert_store:, url:) end # @api private diff --git a/sig/increase/internal/transport/pooled_net_requester.rbs b/sig/increase/internal/transport/pooled_net_requester.rbs index 0ce7ac42..1a5600f2 100644 --- a/sig/increase/internal/transport/pooled_net_requester.rbs +++ b/sig/increase/internal/transport/pooled_net_requester.rbs @@ -17,7 +17,10 @@ module Increase DEFAULT_MAX_CONNECTIONS: Integer - def self.connect: (URI::Generic url) -> top + def self.connect: ( + cert_store: OpenSSL::X509::Store, + url: URI::Generic + ) -> top def self.calibrate_socket_timeout: (top conn, Float deadline) -> void