Update dependency apollo-server-express to v3 #33
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^2.14.2
->^3.0.0
Release Notes
apollographql/apollo-server
v3.1.2
Compare Source
apollo-server-core
: Update versions of@graphql-tools/schema
and@graphql-tools/utils
from v7 to v8. While there is no change in behavior in these versions, a recently-released version of@graphql-tools/mock
depends on them, and so without this change, you tpyically end up with two copies of them installed.v3.1.1
Compare Source
apollo-server-env
: UpdateHeaders.values()
type to match whatnode-fetch
actually does and what the Fetch spec says it should be, and what@types/node-fetch
finally gets correct. PR #5537v3.1.0
Compare Source
apollo-server-core
: If a client does not provide a value or provides null for a variable declared to be non-null, this is now reported as an error with anextensions.code
ofBAD_USER_INPUT
rather thanINTERNAL_SERVER_ERROR
. (This is similar to a change we made in v2.23.0 for variables that are sent as the wrong type.) PR #5508 Issue #5353apollo-server-core
/apollo-server-plugin-base
: Add support forschemaDidLoadOrUpdate
event hooks, to be specified by theserverWillStart
event hook. Plugins listening for this event will receive the API schema (and core schema for gateways) when the server's schema is initially loaded and when the server's schema is updated. For more information about this plugin event, see the plugin event reference documentation. PR #5187apollo-server-core
: Add support for schema reporting when using Apollo Gateway. At the time of this package's release, Apollo Studio does not yet support schema reporting from gateways, so you should not use this feature yet for gateways (unless instructed otherwise by Apollo staff or by the Studio docs). If you do enable schema reporting for a gateway, the version of@apollo/gateway
must be at least0.35.0
, or elsestart()
will error. PR #5187apollo-server-core
: Support gateways without executors, to help with mocking gateways. Note that if you have a customGatewayInterface
implementation, Apollo Server will now honor theexecutor
returned fromload
and will ignore theexecutor
method on the gateway itself. See the PR for details. PR #5539apollo-server-plugin-response-cache
,apollo-server-plugin-operation-registry
: Change how the default export from the package is set up to fix errors with some build tools. PR #5542v3.0.2
Compare Source
apollo-server-types
: TypeScript typings forinfo.cacheControl
are now added toGraphQLResolveInfo
as part ofapollo-server-types
rather than a nested file inapollo-server-core
, and the field now has a named type,ResolveInfoCacheControl
. PR #5512apollo-server-micro
: Like the other framework integrations, only serve landing pages from the GraphQL path (/graphql
by default, configurable via thepath
option tocreateHandler
). PR #5516apollo-server-env
: Remove polyfills ofObject.values
,Object.entries
, andutil.promisify
which were only required for Node 6 support. RemoveValueOrPromise
andWithRequired
TypeScript types that are also provided byapollo-server-types
. PR #5515v3.0.1
Compare Source
apollo-server-core
: The defaultmaxAge
(which defaults to 0) for a field should only be applied if no dynamic cache control hint is set. Specifically, if you call the (new in 3.0.0) functioninfo.cacheControl.cacheHint.restrict({ maxAge: 60 })
, it should setmaxAge
to 60 even if the default max age is lower. (This bug fix is the behavior that was intended for 3.0.0, and primarily affects the behavior of functions added in Apollo Server 3. This does mean that checkinginfo.cacheControl.cacheHint
now only shows explicitly-setmaxAge
and not the default, but this seems like it will be helpful since it lets you differentiate between the two similar circumstances.) PR #5492apollo-server-lambda
: Fix TypeScript types forcontext
function. (In 3.0.0, the TS types for thecontext
function were accidentally inherited fromapollo-server-express
instead of using the correct Lambda-specific types). PR #5481apollo-server-lambda
,apollo-server-cloud-functions
: Make the default URL path for handling GraphQL be/
(ie, handle all requests). This is similar to how these packages work in Apollo Server 2. After this change,apollo-server
and the serverless integrations have a default URL path of/
(or ignore the path entirely, in the case ofapollo-server-azure-functions
), and the framework integrations have a default URL path of/graphql
. This is a backwards-incompatible change from 3.0.1 but minimizes the changes from Apollo Server 2 (and this AS3 change was not intended or documented). PR #5497 Issue #5462v3.0.0
Compare Source
BREAKING CHANGES
Apollo Server 3 contains quite a few breaking changes. Read our migration guide for more details on how to update your app.
Bumped dependencies
The minimum versions of these dependencies have been bumped to provide an improved foundation for the development of future features.
graphql
library prior to15.3.0
.mocks
option of theApolloServer
constructor now uses@graphql-tools/mock
v7 instead ofgraphql-tools
v4, which causes some breaking changes.Promise
s.resolvers
argument toaddMocksToSchema
. Apollo Server does not support this option, but you can calladdMocksToSchema
yourself and pass the result to theschema
option of theApolloServer
constructor.Removed functionality
Certain undersupported and underused Apollo Server features have been removed in favor of current or future methods for achieving similar functionality. Many of these features can be manually re-enabled, as listed below.
Dropped built-in partial support for subscriptions via the
subscriptions-transport-ws
package.subscriptions-transport-ws
has not been actively maintained.Dropped built-in support for file uploads via the
graphql-upload
package.Dropped support for the
graphql-extensions
API (e.g.,GraphQLExtensions
,extensions
) in favor of the Apollo Server plugins API.Dropped support for passing the
schemaDirectives
option to theApolloServer
constructor.This option was passed directly to the
graphql-tools
functionmakeExecutableSchema
. To continue using it, you can importmakeExecutableSchema
from@graphql-tools/schema
and call it yourself:Note that
graphql-tools
calls this feature "legacy" schema directives, and you might want to consider the newerschemaTransforms
option instead.Removed the deprecated
ApolloServer.schema
field, which never worked with federated gateways.serverWillStart
or registeronSchemaChange
on your gateway.apollo-datasource-rest
: We no longer officially support overriding thebaseURL
property with a getter, because TypeScript 4 does not allow you to do so.Removed the automatic addition of the
@cacheControl
directive to schemas.@cacheControl
, you can define it in your schema as shown in the docs.Removed the
tracing
option passed to theApolloServer
constructor. The correspondingapollo-tracing
package has been deprecated and is no longer being published.This package implemented an inefficient JSON format for execution traces returned via the
tracing
GraphQL response extension. This format was only consumed by the deprecatedengineproxy
and GraphQL Playground.If you rely on this trace format, the old version of
apollo-tracing
should still work:Removed a redundant mechanism for applying extensions to an
ApolloError
.error.extensions
, and are not also available onerror
itself.ForbiddenError
andAuthenticationError
constructors now allow you to pass additional extensions.Removed the
cacheControl
option passed to theApolloServer
constructor.Cache-Control
HTTP header. However, this is now implemented directly insideapollo-server-core
instead of inside a separateapollo-cache-control
package (this package has been deprecated and is no longer being published).defaultMaxAge
is now done via the newly exportedApolloServerPluginCacheControl
plugin, instead of as a top-level constructor option. This follows the same pattern as other built-in plugins like usage reporting.CacheHint
andCacheScope
types are now exported fromapollo-server-types
. Theinfo.cacheControl.cacheHint
object now has additional methods (replace
,restrict
, andpolicyIfCacheable
), and its fields update when those methods orsetCacheHint
are called. These methods also exist onrequestContext.overallCachePolicy
, which is always defined and which should not be overwritten (usereplace
instead). There is also a new functioninfo.cacheControl.cacheHintFromType
available.@cacheControl
directives on type extensions are no longer ignored. Fields returning union types are now treated similarly to fields returning object and interface types (@cacheControl
directives on the type are honored, the defaultmaxAge
is applied to them).@cacheControl(inheritMaxAge: true)
when applied to a composite type or a field returning a composite type means that the defaultmaxAge
is not applied to that field (unless it is a root field).Due to conflicts with same/similar globals provided by
@types/supertest
(which we use in our testing), some global TypeScript definitions have been removed fromapollo-server-env
including that of, e.g.,fetch
,RequestInfo
,Headers
,Request
,Response
,ResponseInit
, and more. See the full list prior to removal here. Internally in the Apollo Server tests, for the time-being, we are relying on the same-named types from TypeScript'slib.dom.d.ts
— e.g., itsRequestInfo
type definition. For more details, see PR #5165.Top-level exports have changed. For example:
graphql-tools
(includingmakeExecutableSchema
) from all Apollo Server packages. To continue using them, installgraphql-tools
or one of its sub-packages yourself.Upload
scalar is no longer exported as part of dropping built-in support for file uploads.Stopped publishing the deprecated
apollo-server-testing
package. This package is just a wrapper aroundserver.executeOperation
, which you can use directly.apollo-server-caching
: The test suite helper works differently, and theTestableKeyValueCache
interface is removed.The
engine
constructor option,ENGINE_API_KEY
environment variable, andENGINE_SCHEMA_TAG
environment variables are no longer supported. Use theapollo
constructor option,APOLLO_KEY
environment variable, andAPOLLO_GRAPH_VARIANT
environment variable instead, as described in [theengine
option migration guide from v2.18)[https://www.apollographql.com/docs/apollo-server/v2/migration-engine-plugins/].When you supply an Apollo API key via the
APOLLO_KEY
environment variable ornew ApolloServer({apollo: {key}})
, Apollo Server 3 no longer parses the key to guess your Studio graph ID. You must specify it yourself, either via theAPOLLO_GRAPH_ID
environment variable (ornew ApolloServer({apollo: {graphId}})
), or as a graph ref along with the variant (e.g.,your-graph-id@your-graph-variant
) in theAPOLLO_GRAPH_REF
environment variable (ornew ApolloServer({apollo: {graphRef}})
).Modified functionality
requestDidStart
,didResolveOperation
, etc.) are nowasync
.async
, and some were "sometimes-async
" by returning aValueOrPromise
.willResolveField
, which remains synchronous. This method is called much more often than any other plugin method, and converting it toasync
might affect performance.willResolveField
might become "sometimes-async
" by returning aValueOrPromise
.willSendResponse
plugin lifecycle event after firingdidEncounterError
.willSendResponse
.GraphQLService
interface toGatewayInterface
.renderLandingPage
hook that returns an HTML page to serve to browsers.ApolloServerPluginLandingPageProductionDefault
andApolloServerPluginLandingPageLocalDefault
) are installed by default (the former whenNODE_ENV
isproduction
, the latter otherwise) with instructions on how to communicate with the server, links to Apollo Sandbox, etc.ApolloServerPluginLandingPageGraphQLPlayground
plugin can be installed instead to continue to use GraphQL Playground instead. Theplayground
option provided to theApolloServer
constructor has been removed; to customize GraphQL Playground you can provide an argument to the new playground plugin. By default, no GraphQL Playground settings are overridden, including the endpoint, which now defaults towindow.location.href
(with most query parameters removed). This means you typically don't have to manually configure the endpoint when using GraphQL Playground.ApolloServerPluginLandingPageDisabled
plugin.defaultPlaygroundOptions
,PlaygroundConfig
, orPlaygroundRenderPageOptions
.requestContext.response.http.status
now affects successful GraphQL responses, not just errors.Changes to Node.js framework integrations
When using a non-serverless framework integration (Express, Fastify, Hapi, Koa, Micro, or Cloudflare), you now must call
await server.start()
before attaching the server to your framework.apollo-server
library or to serverless framework integrations.apollo-server-express
no longer officially supports using with theconnect
framework.connect
compatibility code, and we do still test that it works withconnect
. However, we reserve the right to break that compatibility without a major version bump of this package (we will certainly note in this changelog if we do so).apollo-server-lambda
: This package is now implemented as a wrapper aroundapollo-server-express
.createHandler
's argument now has different options:expressGetMiddlewareOptions
, which includes options likecors
and is passed through toapollo-server-express
'sgetMiddleware
expressAppFromMiddleware
, which lets you customize HTTP processingAlso, the
context
function now receives anexpress: { req, res }
option in addition toevent
andcontext
apollo-server-lambda
: The handler returned bycreateHandler
can now only be called as an async function returning aPromise
(it no longer optionally accepts a callback as the third argument).exports.handler = server.createHandler()
will keep working without any changes).createHandler
with a callback, you'll need to handle itsPromise
return value instead.apollo-server-lambda
: Improved support for running behind an Application Load Balancer (ALB).apollo-server-fastify
is now compatible with Fastify v3 instead of Fastify v2.apollo-server-hapi
is now only tested with Hapi v20.1.2 and higher (the minimum version that supports Node 16).The non-serverless integrations now depend on their corresponding web frameworks via peer dependencies rather than direct dependencies.
All integrations that allow CORS headers to be customized now default to
access-control-allow-origin: *
. This was already the case forapollo-server
, Express, Fastify, and Hapi; it is now also the same for Koa (which previously reflected the request's origin), Lambda, Cloud Functions, and Azure Functions as well (which did not set CORS by default). Micro and CloudFlare do not have a built-in way of setting CORS headers.v2.25.2
Compare Source
apollo-server-express
: Update dependencies on@types/express
and@types/express-serve-static-core
. PR #5352v2.25.1
Compare Source
apollo-server-core
,apollo-server-express
: Upgradesubscriptions-transport-ws
dependency and remove unneeded runtime dependency onws
. This should enable you to install Apollo Server without depending on versions ofws
vulnerable to CVE-2021-32640. Note that the superficial integration of the unmaintainedsubscriptions-transport-ws
package will be removed in Apollo Server 3; you can also avoid this vulnerability by disabling the built-in subscription support withnew ApolloServer({subscriptions: false})
and using a maintained package such asgraphql-ws
instead. (Instead of taking this upgrade, you can also upgradews
to5.2.3
, which was just released.)v2.25.0
Compare Source
apollo-server-core
: You may now specify your Studio graph as a graph ref (id@variant
) via theAPOLLO_GRAPH_REF
environment variable ornew ApolloServer({apollo: {graphRef}})
instead of specifying graph ID and graph variant separately. Theapollo
object passed to pluginserverWillStart
and to gatewayload
now contains agraphRef
field.apollo-server-core
: Fix a race condition where schema reporting could lead to a delay at process shutdown. PR #5222apollo-server-core
: Allow the Fetch API implementation to be overridden for the schema reporting and usage reporting plugins via a newfetcher
option. PR #5179apollo-server-core
: Theserver.executeOperation
method (designed for testing) can now take itsquery
as aDocumentNode
(eg, agql
-tagged string) in addition to as a string. (This matches the behavior of theapollo-server-testing
createTestClient
function which is now deprecated.) We now recommend this method instead ofapollo-server-testing
in our docs. Issue #4952apollo-server-testing
: Replace README with a deprecation notice explaining how to useserver.executeOperation
instead. Issue #4952v2.24.1
Compare Source
apollo-server-core
: Fix a typo that could lead to TypeScript compilation when combined with a recent version of@types/node
. (This bug had no runtime effect.) PR #5149v2.24.0
Compare Source
apollo-server-core
: Apollo Studio usage reporting uses a more efficient format which sends fewer detailed traces to Apollo's server. This change should not have a major effect on the experience of using Apollo Studio. PR #4142v2.23.0
Compare Source
apollo-server-core
: Add optional argument toApolloServer.executeOperation
allowing the caller to manually specify an argument to theconfig
function analogous to that provided by integration packages. PR #4166 Issue #2886[email protected]
: NewBaseRedisCache
class which takes anioredis
-compatible Redis client as an argument. The existing classesRedisCache
andRedisClusterCache
(which pass their arguments toioredis
constructors) are now implemented in terms of this class. This allows you to use any of theioredis
constructor forms rather than just the ones recognized by our classes. This also fixes a long-standing bug where the Redis cache implementations returned a number fromdelete()
; it now returns a number, matching what theKeyValueCache
interface and the TypeScript types expect. PR #5034 PR #5088 Issue #4870 Issue #5006apollo-server-core
: Fix type forformatResponse
function. It never is called with anull
argument, and is allowed to returnnull
. Issue #5009 PR #5089apollo-server-lambda
: Fix regression in v2.21.2 where thrown errors were replaced by throwing the JS Error class itself. PR #5085apollo-server-core
: If a client sends a variable of the wrong type, this is now reported as an error with anextensions.code
ofBAD_USER_INPUT
rather thanINTERNAL_SERVER_ERROR
. PR #5091 Issue #3498apollo-server-lambda
: Explicitly support API GatewaypayloadFormatVersion
2.0. Previously some codepaths did appropriate checks to partially support 2.0 and other codepaths could lead to errors likeevent.path.endsWith is not a function
(especially since v2.21.1). Note that this changes the TypeScript typing of theonHealthCheck
callback passed tocreateHandler
to indicate that it can receive either type of event. If you are using TypeScript and care about having a precise typing for the argument to youronHealthCheck
callback, you should determine which payload format you want to support and writenew ApolloServer<APIGatewayProxyEvent>(...)
ornew ApolloServer<APIGatewayProxyEventV2>(...)
(importing these types fromaws-lambda
), or differentiate between the two formats by checking to see if'path' in event
. Issue #5084 Issue #5016v2.22.2
Compare Source
apollo-server-core
: Fix a regression in v2.22.0 where combiningapollo-server-core
v2.22 with an older version of an integration package could lead to startup errors likecalled start() with surprising state invoking serverWillStart
. The fix involves changing the semantics of the protectedwillStart
method (which is left in only for backwards compatibility). Issue #5065 Issue #5066 PR #5073v2.22.1
Compare Source
apollo-server-core
: Fix a regression in v2.22.0 where startup errors could be thrown as part of the GraphQL response instead of redacted in one edge case. PR #5064v2.22.0
Compare Source
serverWillStart
handlers successfully before starting an HTTP server. If you're using theapollo-server
package, no code changes are necessary. If you're using an integration such asapollo-server-express
that is not a "serverless framework", you can insertawait server.start()
betweenserver = new ApolloServer()
andserver.applyMiddleware
. (If you don't callserver.start()
yourself, your server will still work, but the previous behavior of starting a web server that may fail to load its schema still applies.) The serverless framework integrations (Lambda, Azure Functions, and Cloud Functions) do not support this functionality. While the protected methodwillStart
still exists for backwards compatibility, you should replace calls to it withstart
or the new protected methodensureStarting
. PR #4981v2.21.2
Compare Source
apollo-server-core
: TheSIGINT
andSIGTERM
signal handlers installed by default (when not disabled bystopOnTerminationSignals: false
) now stay active (preventing process termination) while the server shuts down, instead of letting a second signal terminate the process. The handlers still re-signal the process afterthis.stop()
concludes. Also, ifthis.stop()
throws, the signal handlers will now log and exit 1 instead of throwing an uncaught exception. Issue #4931apollo-server-lambda
: Refactor the handler returned byserver.createHandler
so that if it is not passed a callback, it acts as an async handler instead of a non-async handler. This means you can wrap it in your own async handler without having to create a callback, and makes the code more maintainable. Issue #1989 PR #5004v2.21.1
Compare Source
apollo-server-lambda
: TheonHealthCheck
option did not previously work. Additionally, health checks (withonHealthCheck
or without) didn't work in all Lambda contexts, such as behind Custom Domains; the path check is now more flexible. Issue #3999 PR #4969 Issue #4891 PR #4892debug
option tonew ApolloServer
(which adds stack traces to errors) now affects errors that come from requests executed withserver.executeOperation
(and its wrapperapollo-server-testing
), instead of just errors that come from requests executed over HTTP. Issue #4107 PR #4948@apollographql/graphql-playground-html
to v1.6.27 and@apollographql/graphql-playground-react
to v1.7.39 to resolve incorrectly rendered CDN URL when Playgroundversion
wasfalse
-y. PR #4932 PR #4955 Issue #4937v2.21.0
Compare Source
graphql@15
without causing peer dependency errors or warnings. (Apollo Server has a file upload feature which was implemented as a wrapper around thegraphql-upload
package. We have been unable to upgrade our dependency on that package due to backwards-incompatible changes in later versions, and the version we were stuck on did not allowgraphql@15
as a peer dependency. We have now switched to a fork of that old version called@apollographql/graphql-upload-8-fork
that allowsgraphql@15
.) Also bump thegraphql-tools
dependency from 4.0.0 to 4.0.8 forgraphql@15
support. Issue #4865v2.20.0
Compare Source
apollo-server
: Previously,ApolloServer.stop()
functioned likenet.Server.close()
in that it did not close idle connections or close active connections after a grace period. This meant that trying toawait ApolloServer.stop()
could hang indefinitely if there are open connections. Now, this method closes idle connections, and closes active connections after 10 seconds. The grace period can be adjusted by passing the newstopGracePeriodMillis
option tonew ApolloServer
, or disabled by passingInfinity
(though it will still close idle connections). Note that this only applies to the "batteries-included"ApolloServer
in theapollo-server
package with its own built-in Express and HTTP servers. PR #4908 Issue #4097apollo-server-core
: When used withApolloGateway
,ApolloServer.stop
now invokesApolloGateway.stop
. (This makes sense becauseApolloServer
already invokesApolloGateway.load
which is what starts the behavior stopped byApolloGateway.stop
.) Note that@apollo/gateway
0.23 will expect to be stopped in order for natural program shutdown to occur. PR #4907 Issue #4428apollo-server-core
: Avoid instrumenting schemas for the oldgraphql-extensions
library unless extensions are provided. PR #4893 Issue #4889[email protected]
: TheshouldReadFromCache
andshouldWriteToCache
hooks were always documented as returningValueOrPromise<boolean>
(ie, that they could be either sync or async), but they actually only worked if they returned a bool. Now they can be either sync or async as intended. PR #4890 Issue #4886[email protected]
: TheRESTDataSource.trace
method is nowprotected
instead ofprivate
to allow more control over logging and metrics. PR #3940v2.19.2
Compare Source
apollo-server-express
: types: ExportExpressContext
from main module. PR #4821 Issue #3699apollo-server-env
: types: The first parameter tofetch
is now marked as required, as intended and in accordance with the Fetch API specification. PR #4822 Issue #4741apollo-server-core
: Updategraphql-tag
package tolatest
, now with itsgraphql-js
peerDependencies
expanded to include^15.0.0
PR #4833v2.19.1
Compare Source
apollo-server-core
: ThedebugPrintReports
option toApolloServerPluginUsageReporting
now prints traces as well. PR #4805v2.19.0
Compare Source
apollo-server-testing
: types: Allow genericvariables
usage ofquery
andmutate
functions. PR #4383apollo-server-express
: Export theGetMiddlewareOptions
type. PR #4599apollo-server-lambda
: Fix file uploads - ignore base64 decoding for multipart queries. PR #4506apollo-server-core
: Do not send operation documents that cannot be executed to Apollo Studio. Instead, information about these operations will be combined into one "operation" for parse failures, one for validation failures, and one for unknown operation names.v2.18.2
Compare Source
apollo-server-core
: Explicitly includelru-cache
dependency inapollo-server-core
's dependencies. PR #4600v2.18.1
Compare Source
apollo-server-core
: Fix support for legacy optionengine: {logger}
, broken in v2.18.0. PR #4588apollo-server-plugin-base
: TheApolloServerPlugin
TypeScript type does not need to extendAnyFunctionMap
, which was an unnecessary change in v2.18.0. PR #4588apollo-server-core
: Improve a usage reporting error which occurs when you use Apollo Server in an unsupported way. PR #4588apollo-server-core
: Fix typo in error message for unparsable/invalid schemas provided viaoverrideReportedSchema
. PR #4581v2.18.0
Compare Source
apollo-server-core
: When Apollo Server is configured with an Apollo API key, the URLs it uses to connect to Apollo's servers have changed. If the environment in which you run your servers requires you to explicitly allow connections by domain, you will need to add the new domain names. Usage reporting previously connected to https://engine-report.apollodata.com/ and now connects to https://usage-reporting.api.apollographql.com/; schema reporting previously connected to https://edge-server-reporting.api.apollographql.com/ and now connects to https://schema-reporting.api.apollographql.com/ . PR #4453Apollo Server's support for communicating with Apollo’s commercial products has been refactored into three separate plugins exported from
apollo-server-core
(for usage reporting, schema reporting, and inline tracing), configured using the standardplugins
option. Theengine
option continues to work for backwards compatibility in the 2.x series; support forengine
will be deprecated in Apollo Server 3.x. Full details are available in the migration guide. PR #4453To consistently support tracing, inline tracing is enabled by default on federated implementing services, even when an Apollo API key is provided. Previously it was not enabled when an API key was provided. You can disable it with
ApolloServerPluginInlineTraceDisabled
. PR #4453The
apollo-engine-reporting
npm package has been obsoleted and will no longer receive updates. PR #4453The
apollo-engine-reporting-protobuf
package has been renamed toapollo-reporting-protobuf
. No new versions of the old package will be published. PR #4453Implementations of
ApolloServer
for serverless frameworks such as Lambda now override theserverlessFramework()
method to return true. We have changed our own integrations, but other implementations that extendApolloServer
which need this behavior should do the same. Support forengine.sendReportsImmediately
will be dropped in Apollo Server 3.x. PR #4453The
GraphQLServiceContext
type passed to the plugin serverWillStart method now containsapollo
andserverlessFramework
values. PR #4453apollo-server-core
/apollo-server-plugin-base
: The request pipeline plugin API now supports aserverWillStop
lifecycle hook. PR #4453apollo-server-core
: Previously, the usage reporting functionality registered one-shot handlers for theSIGINT
andSIGTERM
signals, which it used to send one final usage report before re-sending the signal to itself to continue shutdown. These signals handlers were installed by default if you enabled usage or schema reporting, and could be disabled by passingengine.handleSignals: false
. Now, termination signal handling is the responsibility of Apollo Server as a whole rather than something specific to usage reporting. Apollo Server itself now registers these one-shot signal handlers, which triggerApolloServer.stop()
. This allows any plugin that implements the newserverWillStop
callback to hook into shutdown logic, not just the usage reporting code. Similarly to before, these signal handlers are registered by default but can be disabled by via an option. We've changed the option name tostopOnTerminationSignals: false
as it is more explicit about the behavior. PR #4453apollo-server-core
: The default logger implementation (if you don't specify your ownlogger
or specifydebug
) now logs at the INFO level instead of the WARN level. The main effect is on a few built-in plugins which log one INFO message at startup; if a custom plugin logs at the INFO level then those messages will be visible by default as well. PR #4453apollo-server-core
: Parse and validate any schema passed viaoverrideReportedSchema
to the schema reporting plugin, and throw accordingly on unparsable or invalid schemas.Using Apollo Server from TypeScript now requires TypeScript 3.8 due to the use of the
import type
andexport type
directives. (If this proves to be a major problem we can revert this choice, but it makes it easier for us to ensure that certain large dependencies are only loaded when needed.) PR #4453Updated
@apollographql/graphql-playground-react
to 1.7.33 to include an upstream fix. PR #4550v2.17.0
Compare Source
installSubscriptionHandlers
from accepting awebsocket.Server
(as intended in PR #1966) and also added support for otherhttp.Server
variations (e.g., Tls). Issue #4198 PR #4200v2.16.1
Compare Source
v2.16.0
Compare Source
apollo-server-fastify
: Pass Fastify'srequest
andreply
objects into thecontext
function, which previously had been receiving nothing. Issue #3156 [PR #3895(apollo-server-fastify's context function now receives reply object. apollographql/apollo-server#3895)apollo-server-lamdbda
: Automatically decode payloads which are Base64-encoded when theisBase64Encoded
boolean is present on Lambdaevent
payloads. PR #4311v2.15.1
Compare Source
main
. As this changed a number of references in the repository'spackage.json
andREADME.md
files (e.g., for badges, links, etc.), this necessitates a release to publish those changes to npm. PR #4302v2.15.0
Compare Source
apollo-engine-reporting
: Added areportTiming
API to allow trace reporting to be enabled or disabled on a per request basis. The option takes either a boolean or a predicate function that takes aGraphQLRequestContextDidResolveOperation
orGraphQLRequestContextDidEncounterErrors
and returns a boolean. If the boolean is false the request will not be instrumented for tracing and no trace will be sent to Apollo Graph Manager. The default istrue
so all traces will get instrumented and sent, which is the same as the previous default behavior. PR #3918apollo-engine-reporting
: RemovedGraphQLServerOptions.reporting
. It isn't known whether a trace will be reported at the beginning of the request because of the above change. We believe this field was only used internally within Apollo Server; let us know if this is a problem and we can suggest alternatives. Additionally, the fieldrequestContext.metrics.captureTraces
is now initialized later in the request pipeline. PR #3918apollo-engine-reporting
: Make Apollo Server throw if schema reporting is enabled for a gateway or federated service. PR #4246apollo-engine-reporting
: Remove theexperimental_
prefix from schema reporting options, and specifically renameexperimental_schemaReporting
option name toreportSchema
. (The old option names remain functional, but are deprecated.) PR #4236v2.14.5
Compare Source
apollo-engine-reporting
: Make Apollo Server throw if schema reporting is enabled for a gateway or federated service. PR #4246v2.14.4
Compare Source
apollo-engine-reporting
: Add environment variableAPOLLO_SCHEMA_REPORTING
that can enable schema reporting. Ifexperimental__schemaReporting
is set it will override the environment variable. PR #4206apollo-engine-reporting
: The schema reporting URL has been changed to use the new dedicated sub-domainhttps://edge-server-reporting.api.apollographql.com
. PR #4232apollo-server-core
: Though Apollo Server is not affected due to the way it is integrated, in response to an upstream security advisory for GraphQL Playground we have published the same patch on our@apollographql/graphql-playground-html
fork and bumped Apollo Server to use it. Again, this was done out of an abundance of caution since the way that Apollo Server utilizesrenderPlaygroundPage
is not vulnerable as it does not allow per-request Playground configuration that could allow interpolation of user-input. PR #4231v2.14.3
Compare Source
Configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by WhiteSource Renovate. View repository job log here.