The version headers in this history reflect the versions of Apollo Server itself. Versions of other packages (e.g. which are not actual HTTP integrations; packages not prefixed with apollo-server
) may use different versions. For more details, check the publish commit for that version in the Git history, or check the individual CHANGELOGs for specific packages which are maintained separately:
The changes noted within this
vNEXT
section have not been released yet. New PRs and commits which introduce changes should include an entry in thisvNEXT
section as part of their development. With few exceptions, the format of the entry should follow convention (i.e., prefix with package name, use markdownbacktick formatting
for package names and code, suffix with a link to the change-set à la[PR #YYY](https://link/pull/YYY)
, etc.). When a release is being prepared, a new header will be (manually) created below and the appropriate changes within that release will be moved into the new section.
apollo-server-fastify
: Pass Fastify'srequest
andreply
objects into thecontext
function, which previously had been receiving nothing. Issue #3156 [PR #3895(apollographql#3895)apollo-server-lamdbda
: Automatically decode payloads which are Base64-encoded when theisBase64Encoded
boolean is present on Lambdaevent
payloads. PR #4311
- The default branch of the repository has been changed to
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 #4302
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 #4236
apollo-engine-reporting
: Make Apollo Server throw if schema reporting is enabled for a gateway or federated service. PR #4246
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 #4231
- This release only includes patch updates to dependencies.
Note: This release is is related to a GitHub Security Advisory published by the Apollo Server team. Please read the attached advisory to understand the impact.
⚠️ SECURITY: Pass all schema validation rules to the subscription server, including validation rules that restrict introspection when introspection is meant to be disabled. Read the full GitHub Security Advisory for details.
apollo-server-testing
: Ensure that user-provided context is cloned when usingcreateTestClient
, per the instructions in the intergration testing section of the Apollo Server documentation. Issue #4170 PR #4175
-
apollo-server-core
/apollo-server-plugin-base
: Add support forwillResolveField
and corresponding end-handler withinexecutionDidStart
. This brings the remaining bit of functionality that was previously only available fromgraphql-extensions
to the new plugin API. Thegraphql-extensions
API (which was never documented) will be deprecated in Apollo Server 3.x. To see the documentation for the request pipeline API, see its documentation. For more details, see the attached PR. PR #3988 -
apollo-server-core
: Deprecategraphql-extensions
. All internal usages of thegraphql-extensions
API have been migrated to the request pipeline plugin API. For any implementor-suppliedextensions
, a deprecation warning will be printed once per-extension, per-server-startup, notifying of the intention to deprecate. Extensions should migrate to the plugin API, which is outlined in its documentation. PR #4135 -
apollo-engine-reporting
: Currently only for non-federated graphs. Added an experimental schema reporting option,experimental_schemaReporting
, for Apollo Graph Manager users. During this experiment, we'd appreciate testing and feedback from current and new users of the schema registry!Prior to the introduction of this feature, the only way to get schemas into the schema registry in Apollo Graph Manager was to use the CLI and run
apollo schema:push
. Apollo schema reporting protocol is a new specification for GraphQL servers to automatically report schemas to the Apollo Graph Manager schema registry.To enable schema reporting, provide a Graph Manager API key (available free from Apollo Graph Manager) in the
APOLLO_KEY
environment variable and set theexperimental_schemaReporting
option totrue
in the Apollo Server constructor options, like so:const server = new ApolloServer({ typeDefs, resolvers, engine: { experimental_schemaReporting: true, /* Other existing options can remain the same. */ }, });
When enabled, a schema reporter is initiated by the
apollo-engine-reporting
agent. It will loop until theApolloServer
instance is stopped, periodically calling back to Apollo Graph Manager to send information. The life-cycle of this reporter is managed by the agent.For more details on the implementation of this new protocol, see the PR which introduced it to Apollo Server and the preview documentation.
-
apollo-engine-reporting
: The underlying integration of this plugin, which instruments and traces the graph's resolver performance and transmits these metrics to Apollo Graph Manager, has been changed from the (soon to be deprecated)graphql-extensions
API to the new request pipelineplugins
API. PR #3998This change should be purely an implementation detail for a majority of users. There are, however, some special considerations which are worth noting:
- The federated tracing plugin's
ftv1
response onextensions
(which is present on the response from an implementing service to the gateway) is now placed on theextensions
after theformatResponse
hook. Anyone leveraging theextensions
.ftv1
data from theformatResponse
hook will find that it is no longer present at that phase.
- The federated tracing plugin's
-
apollo-tracing
: This package's internal integration with Apollo Server has been switched from using the soon-to-be-deprecatedgraphql-extensions
API to using the request pipeline plugin API. Behavior should remain otherwise the same. PR #3991 -
apollo-cache-control
: This package's internal integration with Apollo Server has been switched from using the soon-to-be-deprecatedgraphql-extensions
API to using the request pipeline plugin API. Behavior should remain otherwise the same. PR #3997
- Allow passing a
WebSocket.Server
toApolloServer.installSubscriptionHandlers
. PR #2314 apollo-server-lambda
: Support file uploads on AWS Lambda Issue #1419 Issue #1703 PR #3926apollo-engine-reporting
: Fix inadvertant conditional formatting which prevented automated persisted query (APQ) hits and misses from being reported to Apollo Graph Manager. PR #3986apollo-engine-reporting
: Deprecate theENGINE_API_KEY
environment variable in favor of its new name,APOLLO_KEY
. Continued use ofENGINE_API_KEY
will result in deprecation warnings and support for it will be removed in a future major version. #3923apollo-engine-reporting
: Deprecated theAPOLLO_SCHEMA_TAG
environment variable in favor of its new name,APOLLO_GRAPH_VARIANT
. Similarly, within theengine
configuration object, theschemaTag
property has been renamedgraphVariant
. The functionality remains otherwise unchanged, but their new names mirror the name used within Apollo Graph Manager. Continued use of the now-deprecated names will result in deprecation warnings and support will be dropped completely in the next "major" update. To avoid misconfiguration, a runtime error will be thrown if both new and deprecated names are set. PR #3855apollo-engine-reporting-protobuf
: (This is a breaking change only if you directly depend onapollo-engine-reporting-protobuf
.) Drop legacy fields that were never used byapollo-engine-reporting
. Added new fieldsStatsContext
to allowapollo-server
to send summary stats instead of full traces, and renamedFullTracesReport
toReport
andTraces
toTracesAndStats
since reports now can include stats as well as traces.
apollo-server-core
: Support providing a custom logger implementation (e.g.winston
,bunyan
, etc.) to capture server console messages. Though there has historically been limited output from Apollo Server, some messages are important to capture in the larger context of production logging facilities or can benefit from using more advanced structure, like JSON-based logging. This also introduces alogger
property to theGraphQLRequestContext
that is exposed to plugins, making it possible for plugins to leverage the same server-level logger, and allowing implementors to create request-specific log contexts, if desired. When not provided, these will still output toconsole
. PR #3894apollo-server-core
: When operating in gateway mode using thegateway
property of the Apollo Server constructor options, the failure to initialize a schema during initial start-up, e.g. connectivity problems, will no longer result in the federated executor from being assigned when the schema eventually becomes available. This precludes a state where the gateway may never become available to serve federated requests, even when failure conditions are no longer present. PR #3811apollo-server-core
: Prevent a condition which prefixed an error message on each request when the initial gateway initialization resulted in a Promise-rejection which was memoized and re-prepended withInvalid options provided to ApolloServer:
on each request. PR #3811apollo-server-express
: Disable the automatic inclusion of thex-powered-by: express
header. PR #3821apollo-engine-reporting
: Avoid creating new arrays when building trace trees. PR #3479apollo-server-core
: Bumpgraphql
peerDependencies
range to include^15.0.0
. PR #3944
- The range of accepted
peerDepedencies
versions forgraphql
has been widened to includegraphql@^15.0.0-rc.2
so as to accommodate the latest release-candidate of thegraphql@15
package, and an intention to support it when it is finally released on thelatest
npm tag. While this change will subdue peer dependency warnings for Apollo Server packages, many dependencies from outside of this repository will continue to raise similar warnings until those packages ownpeerDependencies
are updated. It is unlikely that all of those packages will update their ranges prior to the final version ofgraphql@15
being released, but if everything is working as expected, the warnings can be safely ignored. PR #3825
apollo-server-core
: Update GraphQL Playground to latest version to remove a rogue curly-brace appearing in the top-right corner of the interface under certain conditions. PR #3702 Playground PRapollo-server-core
: Typings: Allow thecache
property insidepersistedQueries
to be optional. This was already optional at runtime where it defaults to the top-level global cache when unspecified, but with the introduction of thettl
property, it now makes sense that one may be provided without the other. #3671
apollo-server-express
: SupportCorsOptionsDelegate
type oncors
parameter toapplyMiddleware
, to align with the supported type of the underlyingcors
middleware itself. #3613apollo-server-core
: Allow asynchronous initialization of datasources: theinitialize
method on datasources may now return a Promise, which will be settled before any resolvers are called. #3639apollo-server-core
: experimental: Allow configuration of the parsed/validated document store by introducing anexperimental_approximateDocumentStoreMiB
property to theApolloServer
constructor options which overrides the default cache size of 30MiB. #3755
apollo-server-core
: Update apollo-tooling dependencies, resolve TS build error (missing types for node-fetch) #3662
apollo-engine-reporting
: Fix regression introduced by #3614 which causedPersistedQueryNotFoundError
,PersistedQueryNotSupportedError
andInvalidGraphQLRequestError
errors to be triggered before therequestDidStart
handler triggeredtreeBuilder
'sstartTiming
method. This fix preserves the existing behavior by special-casing these specific errors. #3638 fixes #3627apollo-server-cloud-functions
: Transmit CORS headers onOPTIONS
request. #3557apollo-server-caching
: De-compose options interface forKeyValueCache.prototype.set
to accommodate better TSDoc annotations for its properties (e.g. to specify thatttl
is defined in seconds). #3619apollo-server-core
,apollo-server-caching
: Introduce attl
property, specified in seconds, on the options for automated persisted queries (APQ) which applies specific TTL settings to the cacheset
s during APQ registration. Previously, all APQ cache records were set to 300 seconds. Additionally, this adds support (to the underlyingapollo-server-caching
mechanisms) for a time-to-live (TTL) value ofnull
which, when supported by the cache implementation, skips the assignment of a TTL value altogether. This allows the cache's controller to determine when eviction happens (e.g. cache forever, and purge least recently used when the cache is full), which may be desireable for network cache stores (e.g. Memcached, Redis). #3623apollo-server-core
: Upgrade TS to 3.7.3 #3618
apollo-server-core
: Ensure that plugin'sdidEncounterErrors
hooks are invoked for known automated persisted query (APQ) errors. #3614apollo-server-plugin-base
: MoveTContext
generic fromrequestDidStart
method toApolloServerPlugin
Interface. #3525
@apollo/gateway
: Add@types/node-fetch
as a regular dependency to avoid missing dependency for TypeScript consumers. #3546 fixes #3471apollo-engine-reporting
: Declare acceptablegraphql
versions ranges inpeerDependencies
rather than allowing it to occur implicitly (and less ideally) via its consumers (e.g. mostapollo-server-*
packages). #3496
- Reinstate #3530 via #3539 - after a patch release of the
@apollo/protobufjs
fork, the build issue for consumers should be resolved.
- Revert #3530 via #3535- the introduction of the
@apollo/protobufjs
fork is causing TS errors in consumer projects. Reverting this change for now, and will reintroduce it after the issue is resolved within the forked package.
apollo-engine-reporting
: Swap usage ofprotobufjs
for a newly published fork located at@apollo/protobufjs
. This is to account for the relative uncertainty into the continued on-going maintenance of the officialprotobuf.js
project. This should immediately resolve a bug that affectedLong
types inapollo-engine-reporting
and other non-Apollo projects that rely onprotobuf.js
'sLong
type. #3530
apollo-server-core
: Don't try parsingvariables
andextensions
as JSON if they are defined but empty strings. #3501apollo-server-lambda
: IntroduceonHealthCheck
oncreateHandler
in the same fashion as implemented in other integrations. #3458apollo-server-core
: Usegraphql
'sisSchema
to more defensively check the user-specified schema's type at runtime and prevent unexpected errors. #3462
apollo-server-core
: Provide accurate type forformatResponse
rather than genericFunction
type. #3431apollo-server-core
: Pass complete request context toformatResponse
, rather than justcontext
. #3431
apollo-server-errors
: FixApolloError
bug andGraphQLError
spec compliance #3408
@apollo/gateway
,@apollo/federation
,apollo-engine-reporting
: Updateapollo-graphql
dependency to bring inapollo-tooling
's #1551 which resolve runtime errors when its source is minified. While this fixes a particular minification bug when Apollo Server packages are minified, we do not recommend minification of server code in most cases. #3387 fixes #3335apollo-server-koa
: Correctly declare dependency onkoa-compose
. #3356apollo-server-core
: Preserve anyextensions
that have been placed on the response when pre-execution errors occur. #3394
apollo-server-express
: Add direct dependency onexpress
to allow for usage ofexpress.Router
forgetMiddleware
functionality (from #2435). Previously, unlike other server integration packages,apollo-server-express
did not directly needexpress
as a dependency since it only relied onexpress
for TypeScript typings. #3239 fixes #3238apollo-server-lambda
: Add@types/aws-lambda
as a direct dependency toapollo-server-express
to allow usage of its typings without needing to separately install it. #3242 fixes #2351
apollo-server-koa
: Drop support for Node.js v6 within the Apollo Server Koa integration in order to updatekoa-bodyparser
dependency fromv3.0.0
tov4.2.1
. #3229 fixes #3050apollo-server-express
: Use explicit return type for newgetMiddleware
method. #3230 (hopefully) fixes #3222
apollo-server-core
: MakeformatError
available to subscriptions in the same spirit as the existingformatResponse
. #2942apollo-engine-reporting
: The behavior of theengine.maxAttempts
parameter previously did not match its documentation. It is documented as being the max number of attempts including the initial attempt, but until this release it was actually the number of retries excluding the initial attempt. The behavior has been changed to match the documentation (and the literal reading of the option name). #3218apollo-engine-reporting
: When sending the report fails with a server-side 5xx error, include the full error from the server in the logs. #3218apollo-server-core
: Fix regression which prevented the resizing of the schema panel in GraphQL Playground. #3224 and upstream
apollo-server-express
,apollo-server-koa
: A newgetMiddleware
method has been introduced, which accepts the same parameters asapplyMiddleware
with the exception of theapp
property. This allows implementors to obtain the middleware directly and "use
" it within an existingapp
. In the near-term, this should ease some of the pain points with the previous technique. Longer-term, we are exploring what we consider to be a much more natural approach by introducing an "HTTP transport" in Apollo Server 3.x. See this proposal issue for more information. #2435@apollo/federation
:buildFederatedSchema
'stypeDefs
parameter now accepts arrays ofDocumentNode
s (i.e. type definitions wrapped ingql
) andresolvers
to make the migration from a single service into a federated service easier for teams previously utilizing this pattern. #3188
apollo-server-koa
: Update dependency koa to v2.8.1. PR #3175apollo-server-express
: Update types exported by the ASE package. PR #3173 PR #3172
apollo-engine-reporting
: Fix reporting errors which have non-arraypath
fields (eg, non-GraphQLError errors). PR #3112apollo-engine-reporting
: Add missingapollo-server-caching
dependency. PR #3054apollo-server-hapi
: Revert switch fromaccept
andboom
which took place in v2.8.0. PR #3089@apollo/gateway
: Change thesetInterval
timer, which is used to continuously check for updates to a federated graph from the Apollo Graph Manager, to be anunref
'd timer. Without this change, the server wouldn't terminate properly once polling had started since the event-loop would continue to have unprocessed events on it. PR #3105- Switch to using community
@types/graphql-upload
types. apollo-server-fastify
: Change the typing of the HTTPresponse
fromOutgoingMessage
toServerResponse
. Commitapollo-server-hapi
: Pass theraw
request and response objects tographql-upload
sprocessRequest
method to align on the same TypeScript types. Commit
@apollo/federation
: Add support for "value types", which are type definitions which live on multiple services' types, inputs, unions or interfaces. These common types must be identical by name, kind and field across all services. PR #3063apollo-server-express
: Use the Expresssend
method, rather than callingnet.Socket.prototype.end
. PR #2842apollo-server-hapi
: Update internal dependencies to use scoped packages@hapi/accept
and@hapi/boom
, in place ofaccept
andboom
respectively. PR #3089
apollo-engine-reporting
: Fix reporting errors from backend. (The support for federated metrics introduced in v2.7.0 did not properly handle GraphQL errors from the backend; all users of federated metrics should upgrade to this version.) PR #3056 Issue #3052apollo-engine-reporting
: Clean upSIGINT
andSIGTERM
handlers whenEngineReportingAgent
is stopped; fixes 'Possible EventEmitter memory leak detected' log. PR #3090
apollo-engine-reporting
: If an error is thrown by a custom variable transform function passed into the reporting optionsendVariableValues: { transform: ... }
, all variable values will be replaced with the string[PREDICATE_FUNCTION_ERROR]
.apollo-server-express
: Typing fix for theconnection
property, which was missing from theExpressContext
interface. PR #2959@apollo/gateway
: Ensure execution of correct document within multi-operation documents by including theoperationName
in the cache key used when caching query plans used in federated execution. PR #3084
-
apollo-engine-reporting
: Behavior change: By default, send no GraphQL variable values to Apollo's servers instead of sending all variable values. Adding the new EngineReportingOptionsendVariableValues
to send some or all variable values, possibly after transforming them. This replaces theprivateVariables
option, which is now deprecated. PR #2931To maintain the previous behavior of transmitting all GraphQL variable values, unfiltered, to Apollo Engine, configure
engine
.sendVariableValues
as follows:engine: { sendVariableValues: { all: true } }
-
apollo-engine-reporting
: Behavior change: By default, send no GraphQL request headers and values to Apollo's servers instead of sending all. Adding the new EngineReportingOptionsendHeaders
to send some or all header values. This replaces theprivateHeaders
option, which is now deprecated. PR #2931To maintain the previous behavior of transmitting all GraphQL request headers and values, configure
engine
.sendHeaders
as following:engine: { sendHeaders: { all: true } }
-
apollo-engine-reporting
: Behavior change: If the error returned from theengine.rewriteError
hook has anextensions
property, that property will be used instead of the original error's extensions. Document that changes to most otherGraphQLError
fields byengine.rewriteError
are ignored. PR #2932 -
apollo-engine-reporting
: Behavior change: Theengine.maskErrorDetails
option, deprecated byengine.rewriteError
in v2.5.0, now behaves a bit more like the new option: while all error messages will be redacted, they will still show up on the appropriate nodes in a trace. PR #2932 -
apollo-server-core
,@apollo/gateway
: Introduced managed federation support. For more information on managed federation, see the blog post or jump to the documentation for managed federation. -
@apollo/gateway@0.7.1
: Don't print a warning about an unspecified "graph variant" (previously, and in many ways still, known as "schema tag") every few seconds. We do highly recommend specifying one when using the Apollo Platform features though! PR #3043 -
graphql-playground
: Update to resolve incorrect background color on tabs when using thelight
theme. PR #2989 Issue #2979 -
graphql-playground
: Fix "Query Planner" and "Tracing" panels which were off the edge of the viewport. -
apollo-server-plugin-base
: FixGraphQLRequestListener
type definitions to allowreturn void
. PR #2368
apollo-server-core
: Guard against undefined property access inisDirectiveDefined
which resulted in "Cannot read property 'some' of undefined" error. PR #2924 Issue #2921
apollo-server-core
: Avoid duplicatecacheControl
directives being added viaisDirectiveDefined
, re-landing the implementation reverted in v2.6.1 which first surfaced in v2.6.0. PR #2762 Reversion PR #2754 Original PR #2428apollo-server-testing
: Add TypeScript types forapollo-server-testing
client. PR #2871apollo-server-plugin-response-cache
: Fix undefined property access attempt which occurred when an incomplete operation was received. PR #2792 Issue #2745
apollo-engine-reporting
: Simplify the technique for capturingoperationName
. PR #2899apollo-server-core
: Fix regression in 2.6.0 which causedengine: false
not to disable Engine when theENGINE_API_KEY
environment variable was set. PR #2850@apollo/federation
: Introduced aREADME.md
. PR #2883@apollo/gateway
: Introduced aREADME.md
. PR #2883
@apollo/gateway
: Passcontext
through to thegraphql
command inLocalGraphQLDataSource
'sprocess
method. PR #2821@apollo/gateway
: Fix gateway not sending needed variables for subqueries not at the root level. PR #2867@apollo/federation
: Allow matching enums/scalars in separate services and validate that enums have matching values. PR #2829.@apollo/federation
: Strip@external
fields from interface extensions. PR #2848@apollo/federation
: Add support for list type keys in federation. PR #2841@apollo/federation
: Deduplicate variable definitions for sub-queries. PR #2840
apollo-engine-reporting
: SetforbiddenOperation
andregisteredOperation
later in the request lifecycle. PR #2828apollo-server-core
: AddqueryHash
toGraphQLExecutor
for federation. PR #2822@apollo/federation
: Preserve descriptions from SDL of federated services. PR #2830
apollo-engine-reporting-protobuf
: Update protobuf to includeforbiddenOperations
andregisteredOperations
. PR #2768apollo-server-core
: AddforbiddenOperation
andregisteredOperation
toGraphQLRequestMetrics
type. PR #2768apollo-engine-reporting
: SetforbiddenOperation
andregisteredOperation
on trace if the field is true onrequestContext.metrics
. PR #2768apollo-server-lambda
: RemoveObject.fromEntries
usage. PR #2787
- Revert: Don't add
cacheControl
directive if one has already been defined. Presently, although the TypeScript don't suggest it, passing aString
astypeDefs
toApolloServer
is supported and this would be a breaking change for non-TypeScript users. PR #2428
apollo-server-core
: Introduce newdidEncounterErrors
life-cycle hook which has access to unformattederrors
property on therequestContext
, which is the first positional parameter that this new request life-cycle receives. PR #2719apollo-server-core
: Allow request pipeline life-cycle hooks (i.e. plugins) to modify the response'shttp.status
code (an integer) in the event of an error. When combined with the newdidEncounterErrors
life-cycle hook (see above), this will allow modifying the HTTP status code in the event of an error. PR #2714apollo-server-lambda
: SetcallbackWaitsForEmptyEventLoop
tofalse
forOPTIONS
requests to return as soon as thecallback
is triggered instead of waiting for the event loop to empty. PR #2638apollo-server
: SupportonHealthCheck
in theApolloServer
constructor in the same way ascors
is supported. This contrasts with the-express
,-hapi
, etc. variations which accept this parameter via theirapplyMiddleware
methods and will remain as-is. PR #2672- core: Expose SHA-512 hex hash digest of the Engine API key to plugins, when available, as
engine.apiKeyHash
. PR #2685 PR #2736 apollo-datasource-rest
: If anotherContent-type
is already set on the response, don't overwrite it withapplication/json
, allowing the user's initialContent-type
to prevail. PR #2520- Don't add
cacheControl
directive if one has already been defined. PR #2428 apollo-cache-control
: Do not respond withCache-control
headers if the HTTP response containserrors
. PR #2715apollo-server-core
: Skip loadingutil.promisify
polyfill in Node.js engines >= 8.0 PR #2278apollo-server-core
: Lazy loadsubscriptions-transport-ws
in core PR #2278apollo-server-cache-redis
: BREAKING FOR USERS OFapollo-server-cache-redis
(This is a package that must be updated separately but shares the sameCHANGELOG.md
with Apollo Server itself.) A new major version of this package has been published and updated to support Redis Standalone, Cluster and Sentinel modes. This is a breaking change since it is now based onioredis
instead ofnode_redis
. Although this update is compatible with the most common uses ofapollo-server-cache-redis
, please check the options supported byioredis
while updating to this version. The constructor options are passed directly fromRedisCache
to the new Redis adapter. The pre-1.0 versions should continue to work with Apollo Server without modification. PR #1770
- Upgrade GraphQL Playground to the latest upstream release. This release also includes a new "Query Plan" panel for displaying the query planning results when running the Apollo Gateway.
- New plugin package
apollo-server-plugin-response-cache
implementing a full query response cache based onapollo-cache-control
hints. The implementation added a few hooks and context fields; see the PR for details. There is a slight change tocacheControl
object: previously,cacheControl.stripFormattedExtensions
defaulted to false if you did not provide acacheControl
option object, but defaulted to true if you provided (eg)cacheControl: {defaultMaxAge: 10}
. NowstripFormattedExtensions
defaults to false unless explicitly provided astrue
, or if you use the legacy booleancacheControl: true
. For more information, read the documentation. PR #2437 - Add
rewriteError
option toEngineReportingOptions
(i.e. theengine
property of theApolloServer
constructor). When defined as afunction
, it will receive anerr
property as its first argument which can be used to manipulate (e.g. redaction) an error prior to sending it to Apollo Engine by modifying, e.g., itsmessage
property. The error can also be suppressed from reporting entirely by returning an explicitnull
value. For more information, read the documentation and theEngineReportingOptions
API reference.maskErrorDetails
is now deprecated. PR #1639 apollo-server-azure-functions
: Support@azure/functions
to enable Apollo Server Typescript development in Azure Functions. PR #2487- Allow
GraphQLRequestListener
callbacks in plugins to depend onthis
. PR #2470 apollo-server-testing
: Addvariables
andoperationName
toQuery
andMutation
types. PR #2307 Issue #2172
- Add
cache-control: no-cache
header to bothPersistedQueryNotSupportedError
andPersistedQueryNotFoundError
responses as these should never be cached. PR #2452 apollo-datasource-rest
: Don't attempt to parse "204 No Content" responses as JSON. PR #2446apollo-server-express
: Fix Playground URL when Apollo Server is mounted inside of another Express app by utilizingreq.originalUrl
. PR #2451apollo-datasource-rest
: Correctly allow a TTL value of0
to represent "not-cacheable". PR #2588apollo-datasource-rest
: FixInvalid argument
in IE11, whenthis.headers
isundefined
. PR #2607
- No functional changes in this version. The patch version has been bumped to fix the
README.md
displayed on the npm package forapollo-server
as a result of a broken publish. Apologies for the additional noise!
- Fix typings which incorrectly included
cors
as part of the constructor options forapollo-server-express
(it should be defined viaapplyMiddleware
) but, conversely, inadvertently omitted the perfectly validcors
option from theapollo-server
constructor (whereapplyMiddleware
is not used/available). PR #2373 Issue #1882
- Allow Node.js-like runtimes to identify as Node.js as well. PR #2357 Issue #2356
apollo-server-express
: ExportExpressContext
PR #2352
- Fix typing for ContextFunction incorrectly requiring the context object the function produces to match the parameters of the function PR #2350
apollo-server-lambda
: Fix typings which triggered "Module has no default export" errors. PR #2230apollo-server-koa
: Support OPTIONS requests PR #2288- Add
req
andres
typings to theContextFunction
argument for apollo-server and apollo-server-express. UpdateContextFunction
return type to allow returning a value syncronously. PR #2330 - Type the
formatError
function to accept an GraphQLError as an argument and return a GraphQLFormattedError PR #2343
apollo-server-fastify
is now on Apollo Server and lives within theapollo-server
repository. This is being introduced in a patch version, however it's a major version bump from the last timeapollo-server-fastify
was published under1.0.2
. PR #1971- Move
apollo-graphql
package to theapollo-tooling
repository PR #2316
- Fix inaccurate total duration in apollo-tracing PR #2298
- Avoid importing entire
crypto
dependency tree if not in Node.js. PR #2304 - Allow passing
parseOptions
toApolloServerBase
constructor. PR #2289 - Rename
azureFunctions.d.ts
toazureFunctions.ts
. PR #2287 - Require
apollo-engine-reporting
only ifEngineReportingAgent
used. PR #2305
- Implement an in-memory cache store to save parsed and validated documents and provide performance benefits for repeat executions of the same document. PR #2111 (
>=2.4.0-alpha.0
) - Fix: Serialize arrays as JSON on fetch in
RESTDataSource
. PR #2219 - Fix: The
privateHeaders
configuration forapollo-engine-reporting
now allows headers to be specified using any case and lower-cases them prior to comparison. PR #2276 - Fix broken
apollo-server-azure-functions
TypeScript definitions. PR #2287
apollo-server
(only): Stop double-invocation ofserverWillStart
life-cycle event. (More specific integrations - e.g. Express, Koa, Hapi, etc. - were unaffected.) PR #2239- Avoid traversing
graphql-upload
module tree in run-time environments which aren't Node.js. PR #2235
-
Switch from
json-stable-stringify
tofast-json-stable-stringify
. PR #2065 -
Fix cache hints of
maxAge: 0
to mean "uncachable". #2197 -
Apply
defaultMaxAge
to scalar fields on the root object. #2210 -
Don't write to the persisted query cache until execution will begin. PR #2227
-
apollo-server-azure-functions
: Added Azure Functions documentation and deployment examples PR #2131, Issue #2092
- Provide types for
graphql-upload
in a location where they can be accessed by TypeScript consumers ofapollo-server
packages. ccf935f9 Issue #2092
-
BREAKING FOR NODE.JS <= 8.5.0 ONLY: To continue using Apollo Server 2.x in versions of Node.js prior to v8.5.0, file uploads must be disabled by setting
uploads: false
on theApolloServer
constructor options. Without explicitly disabling file-uploads, the server willthrow
at launch (with instructions and a link to our documentation).This early deprecation is due to changes in the third-party
graphql-upload
package which Apollo Server utilizes to implement out-of-the-box file upload functionality. While, in general, Apollo Server 2.x aims to support all Node.js versions which were under an LTS policy at the time of its release, we felt this required an exception. Bythrow
-ing whenuploads
is not explicitly set tofalse
, we aim to make it clear immediately (rather than surprisingly) that this deprecation has taken effect.While Node.js 6.x is covered by a Long Term Support agreement by the Node.js Foundation until April 2019, there are substantial performance (e.g. V8 improvements) and language changes (e.g. "modern" ECMAScript support) offered by newer Node.js engines (e.g. 8.x, 10.x). We encourage all users of Apollo Server to update to newer LTS versions of Node.js prior to the "end-of-life" dates for their current server version.
We intend to drop support for Node.js 6.x in the next major version of Apollo Server.
For more information, see PR #2054 and our documentation.
apollo-engine-reporting
: When multiple instances ofapollo-engine-reporting
are loaded (an uncommon edge case), ensure thatencodedTraces
are handled only once rather than once per loaded instance. PR #2040
apollo-server-micro
: Set theContent-type
totext/html
for GraphQL Playground. PR #2026
- Follow-up on the update to
graphql-playground-html
in previous release by also bumping the minor version of thegraphql-playground-react
dependency to1.7.10
— which is the version requested from the from the CDN bundle bygraphql-playground-html
. PR #2037
- Fix GraphQL Playground documentation scrolling bug in Safari by updating to latest (rebased) fork of
graphql-playground-html
. PR #2037
- When
generateClientInfo
is not used to define the client name, client version and client reference ID, Apollo Server will now default to the values present in the HTTP headers of the request (apollographql-client-name
,apollographql-client-reference-id
andapollographql-client-version
respectively). As a last resort, when those headers are not set, the query extensions'clientInfo
values will be used. PR #1960
- Fixed TypeScript 2.2 compatibility via updated
apollo-tooling
dependency. Issue #195126d6c739
- Throw a more specific error when asynchronous introspection query behavior is detected. PR #1955
- Added support for an array of
modules
on theApolloServer
constructor options. Each element of themodules
can point to a module which exportstypeDefs
andresolvers
. These modules can be used in lieu of, or in combination with, directly specifyingschema
ortypeDefs
/resolvers
on the constructor options. This provides greater modularity and improved organization for logic which might be limited to a specific service.8f6481e6
. - Added
resolveObject
support to query execution.bb67584
. - Fix broken
apollo-server-cloud-functions
in 2.2.0 caused by missing TypeScript project references which resulted in the package not being published to npm in compiled form. PR #1948
- New request pipeline, including support for plugins which can implement lifecycle hooks at various stages of a request. PR #1795.
- Introduce new
apollo-server-testing
utilities. PR #1909 - Fix mocks configuration to allow disabling of mocks by using
mocks: false
, even ifmockEntireSchema
istrue
. PR #1835 - Update
graphql-playground-html
to 1.7.8. PR #1855 - Bring back Azure functions support Issue #1752 PR #1753
- Allow an optional function to resolve the
rootValue
, passing theDocumentNode
AST to determine the value. PR #1555 - Follow-up on the work in PR #1516 to also fix missing insertion cursor/caret when a custom GraphQL configuration is specified which doesn't specify its own
cursorShape
property. PR #1607 - Azure functions support Issue #1752 PR #1753 PR #1948
- Allow JSON parsing in
RESTDataSource
of Content Typeapplication/hal+json
. PR #185 - Add support for a
requestAgent
configuration parameter within theengine
configuration. This can be utilized when a proxy is necessary to transmit tracing and metrics data to Apollo Engine. It accepts either anhttp.Agent
orhttps.Agent
and behaves the same as theagent
parameter to Node.js'http.request
. PR #1879 - Allow an optional parameter to the
RESTDataSource
constructor which takes anode-fetch
-compatiblefetch
implementation that will be used for HTTP calls instead of the default fetch. PR #1807
- Updated the google-cloud-functions package to handle null paths PR #1674
- Update link inside Authentication Docs PR #1682
- Fix making sure all headers are getting reported to Engine properly when using
privateHeaders
PR #1689 - (experimental, subject to change/removal) Provide ability to specify client info in traces #1631
- Reporting: Catch Error if JSON.Stringify Fails for Engine Trace PR #1668
- Core: Allow context to be passed to all GraphQLExtension methods. PR #1547
- Fix #1581
apollo-server-micro
top level error response #1619 - Switch
ApolloServerBase.schema
from private access to protected access. #1610 - Add toggle for including error messages in reports #1615
- Fix
apollo-server-cloud-functions
tests #1611
- Update
graphql-playground-html
to 1.7.4 #1586 - Add support for
graphql-js
v14 by augmenting typeDefs with the@cacheControl
directive so SDL validation doesn't fail #1595 - Add
node-fetch
extensions typing toRequestInit
#1602
- Google Cloud Function support #1402 #1446
- Switch to a fork of
apollo-upload-server
to fix missingcore-js
dependency. #1556
- apollo-server: Release due to failed build and install
- apollo-server: failed publish
- pass payload into context function for subscriptions #1513
- Add option to mock the entire schema(i.e. sets preserveResolvers) PR #1546
- Release with Lerna 3 due
- Hapi: Allow additional route options to be passed to Hapi.js plugin. PR #1384
- express, koa: remove next after playground #1436
- Hapi: Pass the response toolkit to the context function. #1407
- update apollo-engine-reporting-protobuf to non-beta #1429
- playground would use its own settings as default #1516
- Lambda: Look in event.path first when picking endpoint for GraphQL Playground #1527
- Fix to allow enabling GraphQL Playground in production with custom config #1495
- This version failed to publish fully/correctly and should not be used.
- This version failed to publish fully/correctly and should not be used.
- export GraphQLUpload from integrations #1322
- add
cors
to vanilla #1335 - export
bodyParser.Options
to koa #1334 - add and use playground in ApolloServer constructor #1297
- breaking: remove calculate headers as function #1337
- breaking: remove
formatParams
#1331
- enable engine reporting from lambda #1313
- remove flattening of errors #1288
- dynamic url in datasourece (#1277)
- BREAKING: errors are passed to user extensions, then engine reporting, and finally
formatError
(#1272) formatError
only called once on validation errors (#1272)- BREAKING: apollo-server-env does place types in global namespace (#1259)
- export Request from apollo-datasource-rest and graphql-extensions (53d7a75 c525818)
- Use scoped graphql-playground and centralize version (8ea36d8, 84233d2)
- fix dependencies + exports (#1257)
- fix data source + context cloning (7e35305)
- use fetch instead of Node request for engine-reporting (#1274)
- fix formatError to keep prototype of Error (#1235)
- Add trailing slash to data source
- allow body passed to data source
- new apollo-engine-reporting agent
- Missing apollo-upload-server dependency (#1221)
- encode trace report over each request in apollo-engine-reporting
- BREAKING: remove logFunction (71a403d), see this commit for an implementation
- move upload option to constructor (#1204)
- fixed hapi gui bugs (#1211)
- remove requirement for exModuleInterop (#1210)
- change BadUserInputError to UserInputError (#1208)
- add cache-control headers for CDN integration (#1138)
- Lambda support (thanks to @adnsio, @bwlt, and @gragio #1138)
Data sources
- Breaking:
registerServer
changed toserver.applyMiddleware
(3279991) - Breaking: subscriptions enabled with
installSubscriptionHandlers
- Add Data Sources (#1163)
- Bug fix to allow async context (#1129)
- logFunction is now an extension (#1128)
- Allow user defined extensions and include engine reporting (#1105)
- remove registerServer configuration from
apollo-server
's listen (#1090) - move healthcheck into variants (#1086)
- Add file uploads, breaking requires removing
scalar Upload
from the typeDefs (#1071) - Add reporting to Engine as apollo-engine-reporting (#1105)
- Allow users to define extensions (#1105)
ListenOptions:
-
engine
->engineProxy
-
port
,host
, and other http options moved underhttp
key (#1080) -
subscriptions
moved toserver.listen
(#1059) -
Add mocks to server constructor (#1017)
-
Add
bodyParserConfig
parameter toregisterServer
in apollo-server (#1059) commit -
Remove tests and guaranteed support for Node 4 PR #1024
-
Cleanup docs PR #1233
- [Issue #626] Integrate apollo-fastify plugin. PR #1013
- add hapi 16 next() invocation PR #743
- Add skipValidation option PR #839
apollo-server-module-graphiql
: adds an option to the constructor to disable url rewriting when editing a query PR #1047- Upgrade
subscription-transport-ws
to 0.9.9 for Graphiql
- Recognize requests with Apollo Persisted Queries and return
PersistedQueryNotSupported
to the client instead of a confusing error. PR #982
apollo-server-adonis
: TheContent-type
of an operation response will now be correctly set toapplication/json
. PR #842 PR #910apollo-server-azure-functions
: Fix non-functional Azure Functions implementation and update examples in Azure Functions'README.md
. PR #753 Issue #684- Fix
TypeError
on GET requests with missingquery
parameter. PR #964 - The typing on the context of
GraphQLServerOptions
now matches the equivilent type used bygraphql-tools
. PR #919 - Middleware handlers now used named (rather than anonymous) functions to enable easier identification during debugging/profiling. PR #827
- The
npm-check-updates
package has been removed as a "dev dependency" which was resulting in an older version ofnpm
being used during testing. PR #959 - The typing on
HttpQueryRequest
'squery
attribute now enforces that its object properties' keys beString
s. PR #834 - TypeScript types have been updated via updates to
@types/node
,@types/connect
,@types/koa
and@types/aws-lambda
.
- Upgrade to
apollo-cache-control@0.1.0
and allow you to specify options to it (such as the newdefaultMaxAge
) by passingcacheControl: {defaultMaxAge: 5}
instead ofcacheControl: true
.
- Updated peer dependencies to support
graphql@0.13.x
. apollo-server-express
: TheGraphQLOptions
type is now exported fromapollo-server-express
in order to facilitate type checking when utilizinggraphqlExpress
,graphiqlExpress
,graphqlConnect
andgraphiqlConnect
. PR #871- Update GraphiQL version to 0.11.11. PR #914
- Updated peer dependencies and tests to support
graphql@0.12
. - Fix issue where the core
runQuery
method broke the ability to use the Nodeasync_hooks
feature's call stack. PR #733 - Hoist declarations of rarely used functions out of
doRunQuery
to improve performance. PR# 821
- Fixed a fatal execution error with the new
graphql@0.12
.
- Breaking:
apollo-server-hapi
: now supports Hapi v17, and no longer supports Hapi v16. For information on running Apollo Server 1.x with Hapi v16, check this documentation. - New package:
apollo-server-adonis
supporting the Adonis framework! - The
graphqlOptions
parameter to server GraphQL integration functions now accepts context as a function and as an object with a prototype. PR #679 apollo-server-express
: Send Content-Length header.apollo-server-micro
: Allow Micro 9 inpeerDependencies
. PR #671- GraphiQL integration:
- Recognize Websocket endpoints with secure
wss://
URLs. - Only include truthy values in GraphiQL URL.
- Recognize Websocket endpoints with secure
- New feature: Add support for Apollo Cache Control. Enable
apollo-cache-control
by passingcacheControl: true
to your server's GraphQL integration function. - Include README.md in published npm packages.
- Added support for the vhost option for Hapi PR #611
- Fix dependency on
apollo-tracing
to be less strict.
(v1.1.4 had a major bug and was immediately unpublished. v1.1.5 was identical to v1.1.6.)
- GraphiQL integration: Fixes bug where CORS would not allow
Access-Control-Allow-Origin: *
with credential 'include', changed to 'same-origin' Issue #514 - Updated peer dependencies to support
graphql@0.11
.
- Fixed bug with no URL query params with GraphiQL on Lambda Issue #504 PR #512
- Added support for Azure Functions #503
- Added ability to provide custom default field resolvers #482
- Add
tracing
option to collect and expose trace data in the Apollo Tracing format - Add support for GraphiQL editor themes in #484 as requested in #444
- Add support for full websocket using GraphiQL #491
- Updated restify lib (@yucun) in #472
- Updated package apollo-server-micro, updated micro in devDependencies and peerDependencies to ^8.0.1
- Revert #463, because it's a breaking change that shouldn't have been a patch update.
- Rename packages from graphql-server- to apollo-server- #465. We'll continue to publish
graphql-server-
packages that depend on the renamedapollo-server-
packages for the time being, to ensure backwards compatibility.
- Add package readmes for Express, Hapi, Koa, Restify (@helfer) in #442
- Updated & fixed typescript typings (@helfer) in #440
- Fix: graphql-server-micro now properly returns response promises #401
- Fix issue with auto-updating dependencies that caused fibers to update accidentally (@helfer) on #425
- Persist
window.location.hash
on URL updates #386 - Added support for
graphql-js
> 0.10.0 #407 - Updated
subscriptions-transport-ws
for GraphiQL with subscriptions #407
- Fix include passHeader field that was accidentally removed
- Fix graphiql fetcher to use endpointURL parameter instead of hardcoded URI.#365
- Add Zeit Micro Integration #324
- add support for subscriptionURL to GraphiQL (@urigo on #320
- Restify: Fix for calling next() (@jadkap) on #285
- Breaking: Update all dependencies #329
- Add AWS Lambda Integration PR #247
- Update GraphiQL to version 0.9.1 (@ephemer) on #293
- Restify integration (@joelgriffith) on #189
- run batched requests in parallel (@DxCx) on #273
- Fix GraphiQL options variables. Issue #193. (@alanchristensen) on PR #255
- Allow graphql@0.9.0 as peerDependency (@Chris-R3) on PR #278
- Switch graphql typings for typescript to @types/graphql #260
- Restructure Apollo Server into 6 new packages, and rename to GraphQL Server (@DxCx) and (@stubailo) in #183 and #164.
- There are now 6 packages that make up the GraphQL server family:
graphql-server-core
graphql-module-graphiql
graphql-module-operation-store
graphql-server-express
graphql-server-hapi
graphql-server-koa
- Exports have been renamed. Everything that used to export
apollo*
now exportsgraphql*
, for exampleapolloExpress
has becomegraphqlExpress
. - The repository is now managed using Lerna.
- Fix passHeader option in GraphiQL (Both Hapi and Koa)
- Pass
ctx
instead ofctx.request
to options function in Koa integration (@HriBB) in PR #154 - Manage TypeScript declaration files using npm. (@od1k in #162)
- Fix connect example in readme. (@conrad-vanl in #165)
- Add try/catch to formatError. (@nicolaslopezj in #174)
- Clone context object for each query in a batch.
- Refactor Hapi integration to improve the API and make the plugins more idiomatic. (@nnance) in PR #127
- Fixed query batching with Hapi integration. Issue #123 (@nnance) in PR #127
- Add support for route options in Hapi integration. Issue #97. (@nnance) in PR #127
- Camelcase Hapi. Issue #129. (@nnance) in PR #132
- Fix error handling when parsing variables parameter. Issue #130. (@nnance) in PR #131
- Improve logging function. Issue #79. (@nnance) in PR #136
- Output stack trace for errors in debug mode. Issue #111. (@nnance) in PR #137
- Allow to pass custom headers in GraphiQL (@nicolaslopezj in #133).
- Expose the OperationStore as part of the public API. (@nnance)
- Support adding parsed operations to the OperationStore. (@nnance)
- Expose ApolloOptions as part of the public API.
- Complete refactor of Apollo Server using TypeScript. PR #41
- Added Hapi integration (@nnance in #46)
- Added Koa integration (@HriBB in #59)
- Changed express integration to support connect as well (@helfer in #58)
- Dropped express-graphql dependency
- Dropped support for GET requests, only POST requests are allowed now
- Split GraphiQL into a separate middleware
- Factored out core to support Hapi, Koa and connect implementations
- Added support for query batching
- Added support for query whitelisting / stored queries
- Removed body parsing from express integration. Body must be parsed outside of apollo now
- Added
formatRequest
andformatResponse
functions to apollo options. - Removed support for shorthand schema definitions, connectors and mocks (use
graphql-tools
instead)
- BUG: Fixed a bug with tracer mocks that would throw a TypeError when using Ava #26
- Updated graphql dependency to 0.6.0