@@ -26,10 +26,12 @@ import (
2626)
2727
2828type Provider struct {
29- log * slog.Logger // TODO: not used..
30- nodeURL string
31- nodeWSURL string
32- httpClient httpClient
29+ log * slog.Logger // TODO: not used..
30+ nodeURL string
31+ nodeWSURL string
32+
33+ httpClient atomic.Value // stores an object that satisfies the httpClient interface
34+
3335 br breaker.Breaker
3436 jwtToken string // optional
3537 streamClosers []StreamCloser
@@ -56,7 +58,7 @@ func NewProvider(nodeURL string, options ...Option) (*Provider, error) {
5658 opt (p )
5759 }
5860
59- if p .httpClient == nil {
61+ if p .httpClient . Load () == nil {
6062 httpTransport := & http.Transport {
6163 Proxy : http .ProxyFromEnvironment ,
6264 DialContext : (& net.Dialer {
@@ -72,11 +74,11 @@ func NewProvider(nodeURL string, options ...Option) (*Provider, error) {
7274 ExpectContinueTimeout : 1 * time .Second ,
7375 ResponseHeaderTimeout : 30 * time .Second ,
7476 }
75- httpClient := & http.Client {
77+ client := & http.Client {
7678 Transport : httpTransport ,
7779 Timeout : 35 * time .Second ,
7880 }
79- p .httpClient = httpClient
81+ p .httpClient . Store ( client )
8082 }
8183
8284 return p , nil
@@ -106,8 +108,12 @@ type StreamUnsubscriber interface {
106108 Unsubscribe ()
107109}
108110
109- func (s * Provider ) SetHTTPClient (httpClient * http.Client ) {
110- s .httpClient = httpClient
111+ func (s * Provider ) SetHTTPClient (client httpClient ) {
112+ s .httpClient .Store (client )
113+ }
114+
115+ func (p * Provider ) getHTTPClient () httpClient {
116+ return p .httpClient .Load ().(httpClient )
111117}
112118
113119func (p * Provider ) StrictnessLevel () StrictnessLevel {
@@ -147,7 +153,8 @@ func (p *Provider) Do(ctx context.Context, calls ...Call) ([]byte, error) {
147153 req .Header .Set ("Authorization" , fmt .Sprintf ("BEARER %s" , p .jwtToken ))
148154 }
149155
150- res , err := p .httpClient .Do (req )
156+ httpClient := p .getHTTPClient ()
157+ res , err := httpClient .Do (req )
151158 if err != nil {
152159 return nil , superr .Wrap (ErrRequestFail , fmt .Errorf ("failed to send request: %w" , err ))
153160 }
0 commit comments