@@ -272,13 +272,17 @@ func (grpcDialOptionWrapper) isToClientConnOption() {}
272272// a non-blocking dial (the function won't wait for connections to be
273273// established, and connecting happens in the background). To make it a blocking
274274// dial, use the WithGrpcDialOption(grpc.WithBlock()) option.
275+ //
276+ // To allow the configuration to reference middleware or authentication extensions,
277+ // the `extensions` argument should be the output of `host.GetExtensions()`.
278+ // It may also be `nil` in tests where no such extension is expected to be used.
275279func (cc * ClientConfig ) ToClientConn (
276280 ctx context.Context ,
277- host component.Host ,
281+ extensions map [ component.ID ]component. Component ,
278282 settings component.TelemetrySettings ,
279283 extraOpts ... ToClientConnOption ,
280284) (* grpc.ClientConn , error ) {
281- grpcOpts , err := cc .getGrpcDialOptions (ctx , host , settings , extraOpts )
285+ grpcOpts , err := cc .getGrpcDialOptions (ctx , extensions , settings , extraOpts )
282286 if err != nil {
283287 return nil , err
284288 }
@@ -299,7 +303,7 @@ func (cc *ClientConfig) addHeadersIfAbsent(ctx context.Context) context.Context
299303
300304func (cc * ClientConfig ) getGrpcDialOptions (
301305 ctx context.Context ,
302- host component.Host ,
306+ extensions map [ component.ID ]component. Component ,
303307 settings component.TelemetrySettings ,
304308 extraOpts []ToClientConnOption ,
305309) ([]grpc.DialOption , error ) {
@@ -343,11 +347,11 @@ func (cc *ClientConfig) getGrpcDialOptions(
343347 }
344348
345349 if cc .Auth .HasValue () {
346- if host . GetExtensions () == nil {
347- return nil , errors .New ("no extensions configuration available " )
350+ if extensions == nil {
351+ return nil , errors .New ("authentication was configured but this component or its host does not support extensions " )
348352 }
349353
350- grpcAuthenticator , cerr := cc .Auth .Get ().GetGRPCClientAuthenticator (ctx , host . GetExtensions () )
354+ grpcAuthenticator , cerr := cc .Auth .Get ().GetGRPCClientAuthenticator (ctx , extensions )
351355 if cerr != nil {
352356 return nil , cerr
353357 }
@@ -388,8 +392,11 @@ func (cc *ClientConfig) getGrpcDialOptions(
388392 }
389393
390394 // Apply middleware options. Note: OpenTelemetry could be registered as an extension.
395+ if len (cc .Middlewares ) > 0 && extensions == nil {
396+ return nil , errors .New ("middlewares were configured but this component or its host does not support extensions" )
397+ }
391398 for _ , middleware := range cc .Middlewares {
392- middlewareOptions , err := middleware .GetGRPCClientOptions (ctx , host . GetExtensions () )
399+ middlewareOptions , err := middleware .GetGRPCClientOptions (ctx , extensions )
393400 if err != nil {
394401 return nil , fmt .Errorf ("failed to get gRPC client options from middleware: %w" , err )
395402 }
@@ -437,13 +444,17 @@ func WithGrpcServerOption(opt grpc.ServerOption) ToServerOption {
437444func (grpcServerOptionWrapper ) isToServerOption () {}
438445
439446// ToServer returns a [grpc.Server] for the configuration.
447+ //
448+ // To allow the configuration to reference middleware or authentication extensions,
449+ // the `extensions` argument should be the output of `host.GetExtensions()`.
450+ // It may also be `nil` in tests where no such extension is expected to be used.
440451func (sc * ServerConfig ) ToServer (
441452 ctx context.Context ,
442- host component.Host ,
453+ extensions map [ component.ID ]component. Component ,
443454 settings component.TelemetrySettings ,
444455 extraOpts ... ToServerOption ,
445456) (* grpc.Server , error ) {
446- grpcOpts , err := sc .getGrpcServerOptions (ctx , host , settings , extraOpts )
457+ grpcOpts , err := sc .getGrpcServerOptions (ctx , extensions , settings , extraOpts )
447458 if err != nil {
448459 return nil , err
449460 }
@@ -452,7 +463,7 @@ func (sc *ServerConfig) ToServer(
452463
453464func (sc * ServerConfig ) getGrpcServerOptions (
454465 ctx context.Context ,
455- host component.Host ,
466+ extensions map [ component.ID ]component. Component ,
456467 settings component.TelemetrySettings ,
457468 extraOpts []ToServerOption ,
458469) ([]grpc.ServerOption , error ) {
@@ -515,7 +526,7 @@ func (sc *ServerConfig) getGrpcServerOptions(
515526 var sInterceptors []grpc.StreamServerInterceptor
516527
517528 if sc .Auth .HasValue () {
518- authenticator , err := sc .Auth .Get ().GetServerAuthenticator (ctx , host . GetExtensions () )
529+ authenticator , err := sc .Auth .Get ().GetServerAuthenticator (ctx , extensions )
519530 if err != nil {
520531 return nil , err
521532 }
@@ -539,7 +550,7 @@ func (sc *ServerConfig) getGrpcServerOptions(
539550
540551 // Apply middleware options. Note: OpenTelemetry could be registered as an extension.
541552 for _ , middleware := range sc .Middlewares {
542- middlewareOptions , err := middleware .GetGRPCServerOptions (ctx , host . GetExtensions () )
553+ middlewareOptions , err := middleware .GetGRPCServerOptions (ctx , extensions )
543554 if err != nil {
544555 return nil , fmt .Errorf ("failed to get gRPC server options from middleware: %w" , err )
545556 }
0 commit comments