From 6c8628f56fd2999b7ccfc38dc89e4b3f7aa097f7 Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Mon, 20 Jan 2020 10:38:29 +0100 Subject: [PATCH] Prevent apollo client from throwing errors on 302 response --- client/package-lock.json | 30 ++++++++++++++++++++---------- client/package.json | 1 + client/src/graphql/client.js | 23 +++++++++++++++++++++-- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 27d19b87..e994281d 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2460,7 +2460,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -2492,7 +2492,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -3253,6 +3253,16 @@ "zen-observable-ts": "^0.8.20" } }, + "apollo-link-error": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.12.tgz", + "integrity": "sha512-psNmHyuy3valGikt/XHJfe0pKJnRX19tLLs6P6EHRxg+6q6JMXNVLYPaQBkL0FkwdTCB0cbFJAGRYCBviG8TDA==", + "requires": { + "apollo-link": "^1.2.13", + "apollo-link-http-common": "^0.2.15", + "tslib": "^1.9.3" + } + }, "apollo-link-http": { "version": "1.5.16", "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.16.tgz", @@ -7145,7 +7155,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -13121,7 +13131,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13168,13 +13178,13 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, "ora": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "resolved": "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz", "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { @@ -13232,7 +13242,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13296,7 +13306,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13328,7 +13338,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -13598,7 +13608,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, diff --git a/client/package.json b/client/package.json index cc297d28..0660bb1e 100644 --- a/client/package.json +++ b/client/package.json @@ -24,6 +24,7 @@ "apollo-cache-inmemory": "^1.6.5", "apollo-client": "^2.6.8", "apollo-link": "^1.2.13", + "apollo-link-error": "^1.1.12", "apollo-link-http": "^1.5.16", "appolo": "^6.0.19", "autoprefixer": "^7.1.2", diff --git a/client/src/graphql/client.js b/client/src/graphql/client.js index 8ed6bafe..a6304945 100644 --- a/client/src/graphql/client.js +++ b/client/src/graphql/client.js @@ -1,7 +1,8 @@ import {InMemoryCache, defaultDataIdFromObject} from 'apollo-cache-inmemory/lib/index' import {createHttpLink} from 'apollo-link-http' +import {onError} from 'apollo-link-error'; import {ApolloClient} from 'apollo-client' -import {ApolloLink} from 'apollo-link' +import {ApolloLink, Observable} from 'apollo-link' import fetch from 'unfetch' import {typeDefs} from '@/graphql/typedefs'; import {resolvers} from '@/graphql/resolvers'; @@ -40,7 +41,25 @@ export default function (uri) { return forward(operation) }); - const composedLink = ApolloLink.from([createOmitTypenameLink, consoleLink, httpLink]); + const errorLink = onError(({response, operation, networkError, graphQLErrors}) => { + if (graphQLErrors) { + graphQLErrors.forEach(({message, locations, path}) => + console.log( + `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}` + ) + ); + } + + /* + The server redirects to the HTML login page, but apollo expects a JSON response. This is fine, we'll just ignore it + */ + if (networkError && networkError.name === 'ServerParseError') { + // workaround found here: https://github.com/apollographql/apollo-link/issues/855#issuecomment-485764697 + return Observable.of(); + } + }); + + const composedLink = ApolloLink.from([createOmitTypenameLink, consoleLink, errorLink, httpLink]); const cache = new InMemoryCache({ dataIdFromObject: obj => {