code: func NewSession(ctx context.Context, name, sharedKey string) (*Session, error) {
  	id := identity.NewID()
  
  	serverOpts := []grpc.ServerOption{}
  	if span := opentracing.SpanFromContext(ctx); span != nil {
  		tracer := span.Tracer()
  		serverOpts = []grpc.ServerOption{
  			grpc.StreamInterceptor(otgrpc.OpenTracingStreamServerInterceptor(span.Tracer(), traceFilter())),
  			grpc.UnaryInterceptor(otgrpc.OpenTracingServerInterceptor(tracer, traceFilter())),
  		}
  	}
  
  	s := &Session{
  		id:         id,
  		name:       name,
  		sharedKey:  sharedKey,
  		grpcServer: grpc.NewServer(serverOpts...),
  	}
  
  	grpc_health_v1.RegisterHealthServer(s.grpcServer, health.NewServer())
  
  	return s, nil
  }
docs: // NewSession returns a new long running session