@@ -529,19 +529,26 @@ func (r *RootCmd) InitClient(inv *serpent.Invocation) (*codersdk.Client, error)
529
529
}
530
530
}
531
531
532
- client := & codersdk. Client {}
533
- err = r .configureClient (inv .Context (), client , r .clientURL , inv )
532
+ // Configure HTTP client with transport wrappers
533
+ httpClient , err : = r .createHTTPClient (inv .Context (), r .clientURL , inv )
534
534
if err != nil {
535
535
return nil , err
536
536
}
537
- client .SetSessionToken (r .token )
537
+
538
+ // Use ClientBuilder to construct the builder
539
+ builder := codersdk .NewClientBuilder (r .clientURL ).
540
+ SessionToken (r .token ).
541
+ HTTPClient (httpClient )
542
+
543
+ if r .disableDirect {
544
+ builder .DisableDirectConnections ()
545
+ }
538
546
539
547
if r .debugHTTP {
540
- client .PlainLogger = os .Stderr
541
- client .SetLogBodies (true )
548
+ builder .PlainLogger (os .Stderr ).LogBodies (true )
542
549
}
543
- client . DisableDirectConnections = r . disableDirect
544
- return client , nil
550
+
551
+ return builder . Build () , nil
545
552
}
546
553
547
554
// TryInitClient is similar to InitClient but doesn't error when credentials are missing.
@@ -577,19 +584,26 @@ func (r *RootCmd) TryInitClient(inv *serpent.Invocation) (*codersdk.Client, erro
577
584
578
585
// Only configure the client if we have a URL
579
586
if r .clientURL != nil && r .clientURL .String () != "" {
580
- client := & codersdk. Client {}
581
- err = r .configureClient (inv .Context (), client , r .clientURL , inv )
587
+ // Configure HTTP client with transport wrappers
588
+ httpClient , err : = r .createHTTPClient (inv .Context (), r .clientURL , inv )
582
589
if err != nil {
583
590
return nil , err
584
591
}
585
- client .SetSessionToken (r .token )
592
+
593
+ // Use ClientBuilder to construct the builder
594
+ builder := codersdk .NewClientBuilder (r .clientURL ).
595
+ SessionToken (r .token ).
596
+ HTTPClient (httpClient )
597
+
598
+ if r .disableDirect {
599
+ builder .DisableDirectConnections ()
600
+ }
586
601
587
602
if r .debugHTTP {
588
- client .PlainLogger = os .Stderr
589
- client .SetLogBodies (true )
603
+ builder .PlainLogger (os .Stderr ).LogBodies (true )
590
604
}
591
- client . DisableDirectConnections = r . disableDirect
592
- return client , nil
605
+
606
+ return builder . Build () , nil
593
607
}
594
608
595
609
// Return a minimal client if no URL is available
@@ -602,17 +616,14 @@ func (r *RootCmd) HeaderTransport(ctx context.Context, serverURL *url.URL) (*cod
602
616
return headerTransport (ctx , serverURL , r .header , r .headerCommand )
603
617
}
604
618
605
- func (r * RootCmd ) configureClient (ctx context.Context , client * codersdk.Client , serverURL * url.URL , inv * serpent.Invocation ) error {
606
- if client .SessionTokenProvider == nil {
607
- client .SessionTokenProvider = codersdk.FixedSessionTokenProvider {}
608
- }
619
+ func (r * RootCmd ) createHTTPClient (ctx context.Context , serverURL * url.URL , inv * serpent.Invocation ) (* http.Client , error ) {
609
620
transport := http .DefaultTransport
610
621
transport = wrapTransportWithTelemetryHeader (transport , inv )
611
622
if ! r .noVersionCheck {
612
623
transport = wrapTransportWithVersionMismatchCheck (transport , inv , buildinfo .Version (), func (ctx context.Context ) (codersdk.BuildInfoResponse , error ) {
613
624
// Create a new client without any wrapped transport
614
625
// otherwise it creates an infinite loop!
615
- basicClient := codersdk .New (serverURL )
626
+ basicClient := codersdk .NewClientBuilder (serverURL ). Build ( )
616
627
return basicClient .BuildInfo (ctx )
617
628
})
618
629
}
@@ -621,23 +632,24 @@ func (r *RootCmd) configureClient(ctx context.Context, client *codersdk.Client,
621
632
}
622
633
headerTransport , err := r .HeaderTransport (ctx , serverURL )
623
634
if err != nil {
624
- return xerrors .Errorf ("create header transport: %w" , err )
635
+ return nil , xerrors .Errorf ("create header transport: %w" , err )
625
636
}
626
637
// The header transport has to come last.
627
638
// codersdk checks for the header transport to get headers
628
639
// to clone on the DERP client.
629
640
headerTransport .Transport = transport
630
- client . HTTPClient = & http.Client {
641
+ return & http.Client {
631
642
Transport : headerTransport ,
632
- }
633
- client .URL = serverURL
634
- return nil
643
+ }, nil
635
644
}
636
645
637
646
func (r * RootCmd ) createUnauthenticatedClient (ctx context.Context , serverURL * url.URL , inv * serpent.Invocation ) (* codersdk.Client , error ) {
638
- var client codersdk.Client
639
- err := r .configureClient (ctx , & client , serverURL , inv )
640
- return & client , err
647
+ httpClient , err := r .createHTTPClient (ctx , serverURL , inv )
648
+ if err != nil {
649
+ return nil , err
650
+ }
651
+ client := codersdk .NewClientBuilder (serverURL ).HTTPClient (httpClient )
652
+ return client .Build (), nil
641
653
}
642
654
643
655
type AgentAuth struct {
0 commit comments