Skip to content

Latest commit

History

History
551 lines (317 loc) 路 55.2 KB

CHANGELOG.md

File metadata and controls

551 lines (317 loc) 路 55.2 KB

CHANGELOG for @apollo/gateway

This CHANGELOG pertains only to Apollo Federation packages in the 0.x range. The Federation v2 equivalent for this package can be found here on the main branch of this repo.

vNEXT

v0.54.0

  • Expand support for Node.js v18 PR #1884

v0.52.1

  • The change released in v0.52.0 which updates the TypeScript types relating to the gateway interface has been improved to be more compatible with Apollo Server 2. PR #2080

v0.52.0

  • The method RemoteGraphQLDataSource.errorFromResponse now returns a GraphQLError (as defined by graphql) rather than an ApolloError (as defined by apollo-server-errors). PR #2028
    • BREAKING: If you call RemoteGraphQLDataSource.errorFromResponse manually and expect its return value to be a particular subclass of GraphQLError, or if you expect the error received by didEncounterError to be a particular subclass of GraphQLError, then this change may affect you. We recommend checking error.extensions.code instead.
  • The LocalGraphQLDataSource class no longer supports the undocumented __resolveObject Apollo Server feature. PR #2007
    • BREAKING: If you relied on the undocumented __resolveObject feature with LocalGraphQLDataSource, it will no longer work. If this affects you, file an issue and we can help you find a workaround.
  • Some TypeScript types, such as the arguments and return value of GraphQLDataSource.process, are defined using types from the @apollo/server-gateway-interface package instead of from apollo-server-types and apollo-server-core. This is intended to be fully backwards-compatible; please file an issue if this leads to TypeScript compilation issues. PR #2044

v0.51.0

  • The fetch implementation used by default by UplinkFetcher and RemoteGraphQLDataSource is now imported from make-fetch-happen v10 instead of v8. The fetcher used by RemoteGraphQLDataSource no longer limits the number of simultaneous requests per subgraph (or specifically, per host/port pair) to 15 by default; instead, there is no limit. (If you want to restore the previous behavior, install make-fetch-happen, import fetcher from it, and pass new RemoteGraphQLDataSource({ fetcher: fetcher.defaults(maxSockets: 15)})) in your buildService option.) Note that if you invoke the fetcher yourself in a RemoteGraphQLDataSource subclass, you should ensure that you pass "plain" objects rather than Headers or Request objects, as the newer version has slightly different logic about how to recognize Headers and Request objects. We have adjusted the TypeScript types for fetcher so that only these "plain" objects (which result in consistent behavior across all fetcher implementations) are permitted. PR #1805
  • We no longer export a getDefaultFetcher function. This function returned the default fetch implementation used to talk to Uplink (which is distinct from the default fetch implementation used by RemoteGraphQLDataSource to talk to subgraphs). It was the fetcher from make-fetch-happen v8 with some preset configuration relating to caching and request headers. However, the caching configuration was not actually being used when talking to Uplink (as we talk to Uplink over POST requests, and the Uplink protocol has an application-level mechanism for avoiding unnecessary large responses), and the request headers were already being provided explicitly by the Uplink client code. Since this release is also upgrading make-fetch-happen, it is impossible to promise that there would be no behavior change at all to the fetcher returned from make-fetch-happen, and as none of the preset configuration is actually relevant to the internal use of getDefaultFetcher (which now just uses make-fetch-happens without extra configuration), we have removed the function. If you were using this function, you can replace const fetcher = getDefaultFetcher() with import fetcher from 'make-fetch-happen'. PR #1810
  • The fetch implementation returned by getDefaultFetcher no longer performs in-memory caching. This fetcher is currently only used by @apollo/gateway to make uncacheable POST requests to Uplink, so this is a no-op for Gateway's own behavior, but if you used the function returned getDefaultFetcher in your own code to perform GET requests against servers that return cache-related response headers, it will no longer cache results. You can use the underlying make-fetch-happen package directly to use its cache capabilities instead of using the function returned by getDefaultFetcher. PR #1792

v0.50.2

  • Move __resolveReference resolvers on to extensions #1747

v0.50.1

  • Throw a GraphQLSchemaValidationError error for issues with the @inaccessible directive when calling toApiSchema. The error will contain a list of all validation errors pertaining to @inaccessible PR #1581.

v0.50.0

  • diffTypeNodes function will now return any[] as the type on the kind field. This may result in casting being necessary for some clients. PR #1636
  • Support for Node 17 PR #1648.

v0.49.0

  • Respect the minDelaySeconds returning from Uplink when polling and retrying to fetch the supergraph schema from Uplink PR #1564
  • Remove the previously deprecated experimental_pollInterval config option and deprecate pollIntervalInMs in favour of fallbackPollIntervalInMs (for managed mode only). PR #1564

v0.48.3

  • Only transitive dependency updates with no other notable changes.

v0.48.1

  • Use specific error classes when throwing errors due Apollo Uplink being unreacheable or returning an invalid response PR #1473
  • Improve typings for GraphQLResolverMap which previously prevented users from typing their args parameter on a resolver correctly. PR #1499
  • FIX Correct retry logic while fetching the supergraph schema from Uplink PR #1503

v0.48.0

  • BREAKING Bump graphql@15 peer to ^15.8.0 PR #1482

v0.47.0

  • Expand graphql peer dependency to include ^16.0.0 PR #1428.

v0.46.0

  • BREAKING: This change improves the supergraphSdl configuration option to provide a clean and flexible interface for updating gateway schema on load and at runtime. This PR brings a number of updates and deprecations to the gateway. Previous options for loading the gateway's supergraph (serviceList, localServiceList, experimental_updateServiceDefinitions, experimental_supergraphSdl) are all deprecated going forward. The migration paths all point to the updated supergraphSdl configuration option.

The most notable change here is the introduction of the concept of a SupergraphManager (one new possible type of supergraphSdl). This interface (when implemented) provides a means for userland code to update the gateway supergraph dynamically, perform subgraph healthchecks, and access subgraph datasources. All of the mentioned deprecated configurations now either use an implementation of a SupergraphManager internally or export one to be configured by the user (IntrospectAndCompose and LocalCompose).

For now: all of the mentioned deprecated configurations will still continue to work as expected. Their usage will come with deprecation warnings advising a switch to supergraphSdl.

  • serviceList users should switch to the now-exported IntrospectAndCompose class.
  • localServiceList users should switch to the similar LocalCompose class.
  • experimental_{updateServiceDefinitions|supergraphSdl} users should migrate their implementation to a custom SupergraphSdlHook or SupergraphManager.

Since the gateway itself is no longer responsible for composition:

  • experimental_didUpdateComposition has been renamed more appropriately to experimental_didUpdateSupergraph (no signature change)
  • experimental_compositionDidFail hook is removed

experimental_pollInterval is deprecated and will issue a warning. Its renamed equivalent is pollIntervalInMs.

Some defensive code around gateway shutdown has been removed which was only relevant to users who are running the gateway within ApolloServer before v2.18. If you are still running one of these versions, server shutdown may not happen as smoothly.

#1246

  • RemoteGraphQLDataSource will now use make-fetch-happen by default rather than node-fetch PR #1380

v0.45.1

  • Continue resolving when an @external reference cannot be resolved. #376

v0.45.0

  • NOOP: Fix OOB testing w.r.t. nock hygiene. Pushed error reporting endpoint responsibilities up into the gateway class, but there should be no effect on the runtime at all. PR #1309
  • BREAKING: Remove legacy GCS fetcher for schema updates. If you're currently opted-in to the backwards compatibility provided by setting schemaConfigDeliveryEndpoint: null, you may be affected by this update. Please see the PR for additional details. PR #1225
  • Multi-cloud Uplink capability PR #1283: now, by default two separate Uplink services will be used for schema fetching, the system will round-robin and if one service fails, a retry will occur and the other service will be called.
    • The Uplink URLs are https://uplink.api.apollographql.com/ (GCP) and https://aws.uplink.api.apollographql.com/ (AWS).
    • To override these defaults and configure what Uplink services, there are two options:
      • Option #1: use the existing environment variable APOLLO_SCHEMA_CONFIG_DELIVERY_ENDPOINT which will now be treated as a comma-separated list of URLs.
      • Option #2: use the new uplinkEndpoints, which must be single URL or a comma-separated list of URLs for the Uplink End-points to be used, and uplinkMaxRetries which is how many times the Uplink URLs should be retried.
    • The old schemaConfigDeliveryEndpoint configuration value still work, but is deprecated and will be removed in a subsequent release.

v0.44.0

  • BREAKING: Update @apollo/core-schema usage and graphql peerDependencies. The core schema package suffered from incompatible changes in the latest graphql versions (^15.7.0). The core schema has since been updated. This updates our usage to the latest version, but in doing so requires us to update our peerDependency requirement of graphql-js to the latest v15 release (15.7.2) PR #1140
  • Conditional schema update based on ifAfterId PR #1198

v0.43.0

  • Skip fetches when possible (based on @skip and @include usages). The query planner now aggregates top-level skip and include usages, which allows the gateway to skip FetchNodes altogether when possible during execution. PR #1113

v0.42.4

  • Updates to transitive dependencies. No other substantial changes.

v0.42.3

  • Updates to transitive dependencies. No other substantial changes.

v0.42.2

  • Updates to transitive dependencies. No other substantial changes.

v0.42.1

  • Emit a deprecation warning for deprecated functions. We would advise to adjust the code to use the new functionality, as the deprecated functions will be removed in a future version. If needed, deprecation warnings can be muted with either the --no-deprecation or --no-warnings command-line flags for node.js. Please keep in mind in doing so will also prevent any future deprecation warnings from node.js itself as well as from any package.PR #1033.

v0.42.0

  • Only related changes in the @apollo/federation package. Adds flexibility for @tag directive definitions in subgraphs.

v0.41.0

  • BREAKING: This is a breaking change due to a peerDependencies update (graphql@^15.4.0 -> graphql@^15.5.3). This graphql version includes a fix which is being necessarily adopted within the @apollo/federation package. See associated CHANGELOG entry in the federation-js folder for additional details. PR #1008

v0.40.0

  • Only related changes in the @apollo/federation package. Adds support for @deprecated on input values and the new built-in directive @specifiedBy.

v0.39.0

  • Introduce @core/v0.2 support with the for: directive argument which was introduced to the core specification in specs-core#9. Supergraphs (which are @core schemas in the way they're implemented) which were generated with a composer tool (e.g., rover) that produces @core schemas with the v0.1 specification are still valid and backwards compatible. The newly introduced for: argument allows a @core directive to specify its criticality to the gateway (or any consumer). The for: argument is optional - its absence means that the directive requires no additional support from the consumer. Its two available options EXECUTION and SECURITY both require explicit support from the consumer, else the consumer should fail to start / update to this unsupported schema. For more information on supergraphs see our documentation or learn how to generate them in our federation quickstart. PR #957

v0.38.1

  • Reverts PR #159 which propogated subgraph execution errors directly to the client. While desirable in practice, this somewhat recent introduction would seem to beg for a different implementation, given that the pain points of introducing it seem to be currently outweighing the gains. Happy to revisit this with additional feedback on the tracking issue that has been opened to re-visit this. In the interim, we are offering a release that reverts this change. Issue #974 Apollo Server Issue #5550 PR #982

v0.38.0

v0.37.0

  • OpenTelemetry will now include the GraphQL operationName in span attributes, following up on the initial implementation introduced in v0.31.0 via #836 PR #942

v0.36.0

  • In RemoteGraphQLDataSource, if the subgraph response has a cache-control header, use it to affect the current request's overall cache policy. You can disable this by passing honorSubgraphCacheControlHeader: false to the RemoteGraphQLDataSource constructor. This feature is only enabled when your subgraph is running Apollo Server 3.0.2 or later. PR #870 Related docs PR
  • Provide the full incoming GraphQLRequestContext to GraphQLDataSource.process, as well as a kind allowing your implementation to differentiate between requests that come from incoming GraphQL operations, health checks, and schema fetches. PR #870 Issue #419 Issue #835

v0.35.1

  • Narrow graphql peer dependency to a more fitting range ^15.4.0 based on our current usage of the package. This requirement was introduced by, but not captured in, changes within the recently released @apollo/gateway@0.35.0. As such, this change will be released as a patch since the breaking change already accidentally happened and this is a correction to that oversight. PR #913

v0.35.0

  • Fixes bug where one onSchemaChange listener throwing would prevent other onSchemaChange listeners from being notified. PR #738
  • Adds onSchemaLoadOrUpdate method to register listeners for schema load and updates, and to receive both the API schema and the core supergraph SDL. onSchemaChange has been deprecated in favor of this method. Note that onSchemaChange listeners are not notified when loading schemas from static gateway configurations, while onSchemaLoadOrUpdate listeners are notified. PR #738

v0.34.0

  • Change default managed federation mechanism over to use Apollo's new Uplink service. This service handles composition and sends the entire supergraph to the gateway. Previously the gateway was responsible for downloading each service's SDL from GCS and handling the composition itself. If you have any issues trying to use this new behavior, you may use the gateway config option schemaConfigDeliveryEndpoint: null to continue using the previous mechanism for the time being. If you were previously setting the experimental_schemaConfigDeliveryEndpoint config option, you will need to update the name of the option itself (or you can remove it entirely if you were using Apollo's Uplink service). PR #881
  • Introduce support for removing @inaccessible elements from the API schema. PR #807
  • Call toAPISchema within the try/catch block in loadStatic. PR #894
  • Remove query and variables from downstream subgraph error extensions, as well as path from the error itself in the final response. This affects specifically errors with the code DOWNSTREAM_SERVICE_ERROR. The message and serviceName will continue to exist on the error. These can also be redacted (within ApolloServer) using formatError or the willSendResponse and didEncounterError plugin hooks. If you wish to bring back the existing behavior you may change your downstream service implementation to add query, variables, and path (all of which are available to the downstream service; on Apollo Server, this can be done with a plugin that implements didEncounterError and willSendResponse hooks that pluck the properties from the requestContext and put them back on the extensions. PR #900

v0.33.0

  • Only changes in the similarly versioned @apollo/federation (v0.26.0) package.

v0.32.0

  • This release updates dependencies so that it will support the final release of Apollo Server 3 when it is released. (Since 0.29, it has supported preview releases of Apollo Server 3.) There are no code changes.

v0.31.1

  • Move otel dependencies from peerDependencies to actual dependencies. Also rename otel trace labels to @apollo/gateway/0.31.0 (or whatever the current version installed happens to be) PR #848

v0.31.0

  • OpenTelemetry instrumentation. PR #836

v0.30.0

  • Send error reports to a configurable endpoint when providing the APOLLO_OUT_OF_BAND_REPORTER_ENDPOINT env variable. Using the Apollo URL https://outofbandreporter.api.apollographql.com is recommended unless you have a custom configuration. Reports will only be sent if the env variable is set. PR #777

v0.29.1

  • More work towards compatibility with Apollo Server 3 preview releases. PR #822

v0.29.0

  • This release is intended to be compatible with preview releases of Apollo Server 3. The apollo option to ApolloGateway.load now can accept the signature sent by AS2 (which always includes graphVariant) or AS3 (which never does), and the dependencies on Apollo Server packages allow for preview releases as well as the AS2 versions. (However, it was not quite enough for AS3 compatibility; see 0.29.1 above.) PR #819 PR #819

v0.28.3

  • Fix plan querying a subgraph with an interface it doesn't know due to directives PR #805 Issue #801
  • Take subtypes into account when matching type conditions to extract representations. PR #804

v0.28.0

  • Expand the range of supported node versions in the package's engines specifier to include the now-tested Node.js 16. PR #713

v0.27.1

  • Update version of @apollo/query-planner which was uninstallable due to a missing dependency. Related PR: PR #709

v0.27.0

  • Fix query plans missing fields in some situations involving nested type conditions. PR #652 Issue #396
  • Fix condition would could result in duplicate fetches within query plans. PR #671

v0.26.3

  • Update apollo-graphql dependency which resolves a missing dependency (sha.js) within that package. PR #699

v0.26.2

  • Avoid small potential performance concern/observation introduced in v0.21.0 which unnecessarily JSON.stringify'd the same object twice during requests to upstream subgraphs. PR #673
  • Allow passing a function to the introspectionHeaders field when constructing an ApolloGateway instance. This allows for producing dynamic introspection headers per request. PR #607
  • Will no longer calculate the automated persisted query (APQ) hash when apq is not set to true on the RemoteGraphQLDataSource. PR #672

v0.26.1

  • Allow passing a function to the introspectionHeaders field when constructing an ApolloGateway instance. This allows for producing dynamic introspection headers per request. PR #607
  • Updates @apollo/query-planner dependency to v0.1.1, which no longer depends on @apollo/query-planner-wasm. PR #643

v0.26.0

  • Re-introduce TypeScript query planner to the gateway. This change should effectively be an implementation detail - it's undergone extensive testing to ensure compatibility with current query plans. PR #622
  • BREAKING - All references to CSDL within the gateway have been updated to its latest iteration Supergraph SDL which is very similar in spirit, but implements the currently-being-introduced core and join specs. This includes changes to recent external API additions like the csdl and experimental_updateCsdl gateway constructor options. PR #622
  • Update query planner API. With the query planner back in TypeScript, we can modify the QP API in such a way that prevents double parsing and schema building. PR #628

v0.25.1

  • Improved query plan execution by pruning entities which are undefined or didn't match specified type conditions after a prior FetchNode execution. After pruning, only the remaining entities will be fetched in the dependent FetchNode execution. If NO entities remain, the request will not be made. PR #612

v0.25.0

  • Add support for an upcoming mechanism for fetching a graph's schema and configuration when using managed federation. In this release, the new mechanism is opt-in, and users shouldn't use enable it unless instructed by Apollo to do so. PR #458 PR #585
  • Provide context as a fourth, optional argument to RemoteGraphQLDataSource.didEncounterError. This is a non-breaking change which allows implementors to read and modify the context object which is already similarly available in other hooks. PR #600

v0.24.4

  • deps(@apollo/query-planner-wasm): Adjust the packaging to ensure that dist/` packages were published by the CI publishing pipeline. PR #557

v0.24.3

  • deps(@apollo/query-planner-wasm): Fix an error caused by a lacking relatively prefix on the items in exports, following up PR #270

v0.24.2

v0.24.1

  • Re-publish with adjustment to lerna.json to ensure that the newly-introduced @apollo/query-planner package (which wraps @apollo/query-planner-wasm) is published by the release pipeline. This is important because @apollo/gateway now depends on @apollo/query-planner as of PR #453

v0.24.0

  • BREAKING: Make all protected gateway fields and methods private (except loadServiceDefinitions). If you currently depend on the ability to override any of these currently protected members of ApolloGateway please let us know by opening or commenting on an existing an issue on this repository. For additional context on why loadServiceDefinitions remains protected (for now) please read the associated PR description and linked issue. PR #539
  • deps(@apollo/query-planner-wasm): This dependency has been bumped to a version that emits an ECMAScript module (ESM) in addition to the current CommonJS (CJS) bundle. This may help facilitate interoperability with bundlers thwarted by the presence of the WASM module (.wasm) within in this dependency since its inception and included in @apollo/gateway since v0.20.1. PR #270 Issue #255

v0.23.2

  • Only changes in the similarly versioned @apollo/federation package.

v0.23.1

  • Adjust quoting on "invalid state" error message introduced in PR #452 to properly reveal the unknown state. PR #460

v0.23.0

  • If you are on v2.18 or v2.19 of Apollo Server, you should upgrade to Apollo Server v2.20 before upgrading to this version, or your Node process may not shut down properly after stopping your Apollo Server.. Code that calls ApolloGateway.load is now expected to call ApolloGateway.stop. If you don't do that and you're using managed federation or experimental_pollInterval, the background polling interval will now keep a Node process alive rather than allowing it to exit if it's the only remaining event loop handler. Generally, ApolloServer is what calls ApolloGateway.load, and if you use at least v2.20.0 of Apollo Server, ApolloServer.stop() will invoke ApolloGateway.stop(). There's a bit of a hack where ApolloGateway does the old behavior if it believes that it is being called by a version of Apollo Server older than v2.18.0. So if you are manually calling ApolloGateway.load from your code, make sure to call ApolloGateway.stop when you're done, and don't use this version with Apollo Server v2.18 or v2.19. PR #452 apollo-server Issue #4428
  • Simplify startup code paths. This is technically only intended to be an internal restructure, but it's substantial enough to warrant a changelog entry for observability in case of any unexpected behavioral changes. PR #440

v0.22.0

  • Include original error during creation of GraphQLError in downstreamServiceError(). PR #309
  • Gateway accepts csdl for startup configuration, uses CSDL internally for schema object creation. PR #278
  • Add Promise<T> generic type info to fix typescript errors PR #324
  • Update apollo-server-* deps PR #325

v0.21.4

  • Update version of @apollo/federation

v0.21.3

  • No changes, but please note that v0.21.2 was a botched release, with no update to the @apollo/query-planner-wasm package that was needed. If you're seeing an error similar to This data graph is missing a valid configuration. unreachable, please upgrade to at least this patch release.

v0.21.2

  • Whenever "AccessDenied" 403 error comes from Apollo, provide a useful error message indicating how to resolve the problem. PR #245

v0.21.1

  • Only changes in the similarly versioned @apollo/federation package.

v0.21.0

  • Fix Cannot convert undefined or null to object error which occurred when nullable variables were declared/used within an operation (i.e. query) document but variables was undefined on the request. PR #167 Issue #196
  • When using a custom fetcher on a RemoteGraphQLDataSource, use that fetcher's Request initialization in order to satisfy and of its own implementation details. This is necessary, for example, when using make-fetch-happen. PR #188 Issue #191

v0.20.4

  • Adjust a preinstall script which was only intended to be executed by the monorepo tool-chain, not merely by installing the @apollo/gateway package as a dependency in another project. PR #185 Issue #184

v0.20.3

  • Read managed federation configuration from the apollo option to ApolloGateway.load rather than the deprecated engine option, when available (ie, when running Apollo Server v2.18+), and update error messages referring to the old Engine and Graph Manager product names. PR #148
  • FIX: Directives which are located on inline fragments should not be skipped and should be sent to the service PR #178

v0.20.2

  • FIX: Minifying a String argument should escape quotes and slashes PR #174

v0.20.1

  • Replace the query planner implementation with a new implementation written in rust and integrated into the gateway via wasm. PR #4534

v0.20.0

  • Only changes in the similarly versioned @apollo/federation package.

v0.19.1

  • Only changes in the similarly versioned @apollo/federation package.

v0.19.0

  • Only changes in the similarly versioned @apollo/federation package.

v0.18.1

  • FIX: Pass null required fields correctly within the parent object to resolvers. When a composite field was null, it would sometimes be expanded into an object with all null subfields and passed to the resolver. This fix prevents this expansion and sets the field to null, as originally intended. PR #4157
  • FIX: Prevent gateway from entering an inoperable state after an initial configuration load failure. PR #4277

v0.18.0

  • The RemoteGraphQLDataSource's didEncounterError method will now receive Response as the third argument when it is available, making its signature (error: Error, fetchRequest: Request, fetchResponse?: Response). This compliments the existing Request type it was already receiving. Both of these types are HTTP WHATWG Fetch API types, not GraphQLRequest, GraphQLResponse types.

v0.17.0

  • BREAKING: Move federation metadata from custom objects on schema nodes over to the extensions field on schema nodes which are intended for metadata. This is a breaking change because it narrows the graphql peer dependency from ^14.0.2 to ^14.5.0 which is when extensions were introduced for all Type System objects. PR #4313

v0.16.11

  • Only changes in the similarly versioned @apollo/federation package.

v0.16.10

  • The default branch of the repository has been changed to main. As this changed a number of references in the repository's package.json and README.md files (e.g., for badges, links, etc.), this necessitates a release to publish those changes to npm. PR #4302
  • FIX: The cache implementation for the HTTP-fetcher which is used when communicating with the Apollo Registry when the gateway is configured to use managed federation will no longer write to its cache when it receives a 304 response. This is necessary since such a response indicates that the cache used to conditionally make the request must already be present. This does not affect GraphQL requests at runtime, only the polling and fetching mechanism for retrieving composed schemas under manged federation. PR #4325
  • FIX: The mergeFieldNodeSelectionSets method no longer mutates original FieldNode objects. Before, it was updating the selection set of the original object, corrupting the data accross requests.

v0.16.9

  • Only changes in the similarly versioned @apollo/federation package.

v0.16.7

  • Bumped the version of apollo-server-core, but no other changes!

v0.16.6

  • Only changes in the similarly versioned @apollo/federation package.

v0.16.5

  • Only changes in the similarly versioned @apollo/federation package.

v0.16.4

  • NEW: Provide the requestContext as an argument to the experimental callback function experimental_didResolveQueryPlan. #4173

v0.16.3

v0.16.2

  • FIX: Collapse nested required fields into a single body in the query plan. Before, some nested fields' selection sets were getting split, causing some of their subfields to be dropped when executing the query. This fix collapses the split selection sets into one. #4064

v0.16.1

  • NEW: Provide the ability to pass a custom fetcher during RemoteGraphQLDataSource construction to be used when executing operations against downstream services. Providing a custom fetcher may be necessary to accommodate more advanced needs, e.g., configuring custom TLS certificates for internal services. PR #4149

    The fetcher specified should be a compliant implementor of the Fetch API standard. This addition compliments, though is still orthognonal to, similar behavior originally introduced in #3783, which allowed customization of the implementation used to fetch gateway configuration and federated SDL from services in managed and unmanaged modes, but didn't affect the communication that takes place during operation execution.

    For now, the default fetcher will remain the same (node-fetch) implementation. A future major-version bump will update it to be consistent with other feature-rich implementations of the Fetch API which are used elsewhere in the Apollo Server stack where we use make-fetch-happen. In all likelihood, ApolloGateway will pass its own fetcher to the RemoteGraphQLDataSource during service initialization.

v0.16.0

v0.15.1

  • FIX: Correctly handle unions with nested conditions that have no possibleTypes #4071
  • FIX: Normalize root operation types when reporting to Apollo Graph Manager. Federation always uses the default names Query, Mutation, and Subscription for root operation types even if downstream services choose different names; now we properly normalize traces received from downstream services in the same way. #4100

v0.15.0

See complete versioning details.

  • BREAKING: Drop support for Node.js 8 and Node.js 10. This is being done primarily for performance gains which stand to be seen by transpiling to a newer ECMAScript target. For more details, see the related PR. #4031
  • Performance: Cache stringified representations of downstream query bodies within the query plan to address performance cost incurred by repeatedly printing the sameDocumentNodes with the graphql printer. This improvement is more pronounced on larger documents. PR #4018
  • Deprecation: Deprecated the ENGINE_API_KEY environment variable in favor of its new name, APOLLO_KEY. The new name mirrors the name used within Apollo Graph Manager. Aside from the rename, the functionality remains otherwise identical. Continued use of ENGINE_API_KEY will result in deprecation warnings being printed to the server console. Support for ENGINE_API_KEY will be removed in a future, major update. #3923
  • Deprecation: Deprecated the APOLLO_SCHEMA_TAG environment variable in favor of its new name, APOLLO_GRAPH_VARIANT. The new name mirrors the name used within Apollo Graph Manager. Aside from the rename, the functionality remains otherwise identical. Use of the now-deprecated name will result in a deprecation warning being printed to the server console. Support will be removed entirely in a future, major update. To avoid misconfiguration, runtime errors will be thrown if the new and deprecated versions are both set. #3855
  • Add inadvertently excluded apollo-server-errors runtime dependency. #3927

v0.14.1

See complete versioning details.

  • FIX: Resolve condition which surfaced in 0.14.0 which prevented loading the configuration using managed federation. PR #3979

v0.14.0

See complete versioning details.

  • Several previously unhandled Promise rejection errors stemming from, e.g. connectivity, failures when communicating with Apollo Graph Manager within asynchronous code are now handled. PR #3811
  • Provide a more helpful error message when encountering expected errors. PR #3811
  • General improvements and clarity to error messages and logging. PR #3811
  • Warn of a possible misconfiguration when local service configuration is provided (via serviceList or localServiceList) and a remote Apollo Graph Manager configuration is subsequently found as well. PR #3868
  • During composition, the unavailability of a downstream service in unmanaged federation mode will no longer result in a partially composed schema which merely lacks the types provided by the downed service. This prevents unexpected validation errors for clients querying a graph which lacks types which were merely unavailable during the initial composition but were intended to be part of the graph. PR #3867
  • Support providing a custom logger implementation (e.g. winston, bunyan, etc.) to capture gateway-sourced console output. This allows the use of existing, production logging facilities or the possibiltiy to use advanced structure in logging, such as console output which is encapsulated in JSON. The same PR that introduces this support also introduces a logger property to the GraphQLRequestContext that is exposed to GraphQLDataSources and Apollo Server plugins, making it possible to attach additional properties (as supported by the logger implementation) to specific requests, if desired, by leveraging custom implementations in those components respectively. When not provided, these will still output to console. PR #3894
  • Drop use of loglevel-debug. This removes the very long date and time prefix in front of each log line and also the support for the DEBUG=apollo-gateway: environment variable. Both of these were uncommonly necessary or seldom used (with the environment variable also being undocumented). The existing behavior can be preserved by providing a logger that uses loglevel-debug, if desired, and more details can be found in the PR. PR #3896
  • Fix Typescript generic typing for datasource contexts #3865 This is a fix for the TContext typings of the gateway's exposed GraphQLDataSource implementations. In their current form, they don't work as intended, or in any manner that's useful for typing the context property throughout the class methods. This introduces a type argument TContext to the class itself (which defaults to Record<string, any> for existing implementations) and removes the non-operational type arguments on the class methods themselves.
  • Implement retry logic for requests to GCS PR #3836 Note: coupled with this change is a small alteration in how the gateway polls GCS for updates in managed mode. Previously, the tick was on a specific interval. Now, every tick starts after the round of fetches to GCS completes. For more details, see the linked PR.
  • Gateway issues health checks to downstream services via serviceHealthCheck configuration option. Note: expected behavior differs between managed and unmanaged federation. See PR for new test cases and documentation. #3930

v0.13.2

  • BREAKING: The behavior and signature of RemoteGraphQLDataSource's didReceiveResponse method has been changed. No changes are necessary unless your implementation has overridden the default behavior of this method by either extending the class and overriding the method or by providing didReceiveResponse as a parameter to the RemoteGraphQLDataSource's constructor options. Implementations which have provided their own didReceiveResponse using either of these methods should view the PR linked here for details on what has changed. PR #3743
  • NEW: Setting the apq option to true on the RemoteGraphQLDataSource will enable the use of automated persisted queries (APQ) when sending queries to downstream services. Depending on the complexity of queries sent to downstream services, this technique can greatly reduce the size of the payloads being transmitted over the network. Downstream implementing services must also support APQ functionality to participate in this feature (Apollo Server does by default unless it has been explicitly disabled). As with normal APQ behavior, a downstream server must have received and registered a query once before it will be able to serve an APQ request. #3744
  • NEW: Experimental feature: compress downstream requests via generated fragments #3791 This feature enables the gateway to generate fragments for queries to downstream services in order to minimize bytes over the wire and parse time. This can be enabled via the gateway config by setting experimental_autoFragmentization: true. It is currently disabled by default.
  • Introduce make-fetch-happen package. Remove cachedFetcher in favor of the caching implementation provided by this package. #3783

v0.12.1

v0.12.0

See complete versioning details.

  • Reduce interface expansion for types contained to a single service #3582
  • Instantiate one CachedFetcher per gateway instance. This resolves a condition where multiple federated gateways would utilize the same cache store could result in an Expected undefined to be a GraphQLSchema error. #3704
  • Gateway: minimize downstream request size #3737
  • experimental: Allow configuration of the query plan store by introducing an experimental_approximateQueryPlanStoreMiB property to the ApolloGateway constructor options which overrides the default cache size of 30MiB. #3755

v0.11.6

See complete versioning details.

  • Fix onSchemaChange callbacks for unmanaged configs #3605

v0.11.4

See complete versioning details.

  • Gateway over-merging fields of unioned types #3581

v0.11.0

See complete versioning details.

  • Begin supporting executable directives in federation #3464

v0.10.8

See complete versioning details.

  • Fix Gateway / Playground Query Plan view #3418
  • Gateway schema change listener bug + refactor #3411 introduces a change to the experimental_didUpdateComposition hook and experimental_pollInterval configuration behavior.
    1. Previously, the experimental_didUpdateComposition hook wouldn't be reliably called unless the experimental_pollInterval was set. If it was called, it was sporadic and didn't necessarily mark the timing of an actual composition update. After this change, the hook is called on a successful composition update.
    2. The experimental_pollInterval configuration option now affects both the GCS polling interval when gateway is configured for managed federation, as well as the polling interval of services. The former being newly introduced behavior.
  • Gateway cached DataSource bug #3412 introduces a fix for managed federation users where DataSources wouldn't update correctly if a service's url changed. This bug was introduced with heavier DataSource caching in #3388. By inspecting the url as well, DataSources will now update correctly when a composition update occurs.
  • Gateway - don't log updates on startup #3421 Fine tune gateway startup logging - on load, instead of logging an "update", log the service id, variant, and mode in which gateway is running.

v0.10.7

See complete versioning details.

  • Add export for experimental observability functions types. #3371
  • Fix double instantiation of DataSources #3388

v0.10.6

See complete versioning details.

  • Fix debug query plan logging #3376
  • Add context object to GraphQLDataSource.didReceiveResponse arguments #3360

v0.10.1

See complete versioning details.

  • Make service definition cache local to ApolloGateway object #3191
  • Fix value type behavior within composition and execution #3182
  • Validate variables at the gateway level #3213

v0.9.1

See complete versioning details.

  • Optimize buildQueryPlan when two FetchGroups are on the same service #3135
  • Construct and use RemoteGraphQLDataSource to issue introspection query to Federated Services #3120

v0.9.0

See complete versioning details.

  • Add experimental observability functions #3110

v0.8.2

See complete versioning details.

  • Handle null @requires selections correctly during execution #3138

v0.6.13

See complete versioning details.

  • Proxy errors from downstream services #3019
  • Handle schema defaultVariables correctly within downstream fetches #2963

v0.6.12

See complete versioning details.

  • Fix @requires bug preventing array and null values. PR #2928

v0.6.5

See complete versioning details.

  • Relax constraints of root operation type names in validation #2783

v0.6.2

See complete versioning details.

  • Resolve an issue with _proto_ pollution in deepMerge() #2779