in router/core/graph_server.go [1370:1472]
func configureSubgraphOverwrites(
engineConfig *nodev1.EngineConfiguration,
configSubgraphs []*nodev1.Subgraph,
overrideRoutingURLConfig config.OverrideRoutingURLConfiguration,
overrides config.OverridesConfiguration,
) ([]Subgraph, error) {
var err error
subgraphs := make([]Subgraph, 0, len(configSubgraphs))
for _, sg := range configSubgraphs {
subgraph := Subgraph{
Id: sg.Id,
Name: sg.Name,
}
// Validate subgraph url. Note that it can be empty if the subgraph is virtual
subgraph.Url, err = url.Parse(sg.RoutingUrl)
if err != nil {
return nil, fmt.Errorf("failed to parse subgraph url '%s': %w", sg.RoutingUrl, err)
}
subgraph.UrlString = subgraph.Url.String()
overrideURL, ok := overrideRoutingURLConfig.Subgraphs[sg.Name]
overrideSubgraph, overrideSubgraphOk := overrides.Subgraphs[sg.Name]
var overrideSubscriptionURL string
var overrideSubscriptionProtocol *common.GraphQLSubscriptionProtocol
var overrideSubscriptionWebsocketSubprotocol *common.GraphQLWebsocketSubprotocol
if overrideSubgraphOk {
if overrideSubgraph.RoutingURL != "" {
overrideURL = overrideSubgraph.RoutingURL
}
if overrideSubgraph.SubscriptionURL != "" {
overrideSubscriptionURL = overrideSubgraph.SubscriptionURL
_, err := url.Parse(overrideSubscriptionURL)
if err != nil {
return nil, fmt.Errorf("failed to parse override url '%s': %w", overrideSubscriptionURL, err)
}
}
if overrideSubgraph.SubscriptionProtocol != "" {
switch overrideSubgraph.SubscriptionProtocol {
case "ws":
overrideSubscriptionProtocol = common.GraphQLSubscriptionProtocol_GRAPHQL_SUBSCRIPTION_PROTOCOL_WS.Enum()
case "sse":
overrideSubscriptionProtocol = common.GraphQLSubscriptionProtocol_GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE.Enum()
case "sse_post":
overrideSubscriptionProtocol = common.GraphQLSubscriptionProtocol_GRAPHQL_SUBSCRIPTION_PROTOCOL_SSE_POST.Enum()
default:
return nil, fmt.Errorf("invalid subscription protocol '%s'", overrideSubgraph.SubscriptionProtocol)
}
}
if overrideSubgraph.SubscriptionWebsocketSubprotocol != "" {
switch overrideSubgraph.SubscriptionWebsocketSubprotocol {
case "graphql-ws":
overrideSubscriptionWebsocketSubprotocol = common.GraphQLWebsocketSubprotocol_GRAPHQL_WEBSOCKET_SUBPROTOCOL_WS.Enum()
case "graphql-transport-ws":
overrideSubscriptionWebsocketSubprotocol = common.GraphQLWebsocketSubprotocol_GRAPHQL_WEBSOCKET_SUBPROTOCOL_TRANSPORT_WS.Enum()
case "auto":
overrideSubscriptionWebsocketSubprotocol = common.GraphQLWebsocketSubprotocol_GRAPHQL_WEBSOCKET_SUBPROTOCOL_AUTO.Enum()
default:
return nil, fmt.Errorf("invalid subscription websocket subprotocol '%s'", overrideSubgraph.SubscriptionWebsocketSubprotocol)
}
}
}
// check if the subgraph is overridden
if ok || overrideSubgraphOk {
if overrideURL != "" {
subgraph.Url, err = url.Parse(overrideURL)
if err != nil {
return nil, fmt.Errorf("failed to parse override url '%s': %w", overrideURL, err)
}
subgraph.UrlString = subgraph.Url.String()
}
// Override datasource urls
for _, conf := range engineConfig.DatasourceConfigurations {
if conf.Id == sg.Id {
if overrideURL != "" {
conf.CustomGraphql.Fetch.Url.StaticVariableContent = overrideURL
sg.RoutingUrl = overrideURL
}
if overrideSubscriptionURL != "" {
conf.CustomGraphql.Subscription.Url.StaticVariableContent = overrideSubscriptionURL
}
if overrideSubscriptionProtocol != nil {
conf.CustomGraphql.Subscription.Protocol = overrideSubscriptionProtocol
}
if overrideSubscriptionWebsocketSubprotocol != nil {
conf.CustomGraphql.Subscription.WebsocketSubprotocol = overrideSubscriptionWebsocketSubprotocol
}
break
}
}
}
subgraphs = append(subgraphs, subgraph)
}
return subgraphs, nil
}