function createClient(headers, token, initialState) { let accessToken = token; (async () => { // eslint-disable-next-line no-param-reassign accessToken = token || (await persist.willGetAccessToken()); })(); const authLink = new ApolloLink((operation, forward) => { operation.setContext({ headers: { authorization: accessToken } }); return forward(operation); }).concat(httpLink); return new ApolloClient({ headers, link: authLink, connectToDevTools: process.browser, ssrMode: !process.browser, cache: new InMemoryCache().restore(initialState || {}) }); }
const apolloClient = new ApolloClient({ link: new ApolloLink((operation, forward) => { return forward(operation).map(response => { const context = operation.getContext(); const {
.then(oper => request(oper)) .then(() => { handle = forward(operation).subscribe({ next: observer.next.bind(observer), error: observer.error.bind(observer),
Promise.resolve(operation) .then(oper => request(oper)) .then(() => { handle = forward(operation).subscribe({ next: observer.next.bind(observer), error: observer.error.bind(observer), complete: observer.complete.bind(observer), }); }) .catch(observer.error.bind(observer));
forward(operation).map(response => { const { response: { headers } } = operation.getContext() if (headers) { const token = headers.get('x-token') // const refreshToken = headers.get('x-refresh-token') if (token) { localStorage.setItem('token', token) } /* UNCOMMENT FOR REFRESH TOKENS if (refreshToken) { localStorage.setItem('refreshToken', refreshToken) } */ } return response })
const queryOrMutationLink = (config = {}) => new ApolloLink((operation, forward) => { operation.setContext({ credentials: 'same-origin', headers: { authorization: `Bearer ${localStorage.getItem('auth_token')}` } }); return forward(operation); }).concat( new HttpLink({ uri: 'http://localhost:5000/graphql', ...config, }) )
forward(operation).map(response => { const context = operation.getContext() const { response: { headers } } = context if (headers) { const token = headers.get("x-token") const refresh_token = headers.get("x-refresh-token") if (token) { localStorage.setItem(AUTH_TOKEN, token) localStorage.setItem(REFRESH_TOKEN, refresh_token) } } // //Se puede manipular datos cuando llegan de graphql // if (response.data.user.lastLoginDate) { // // } //redireccionar en caso de error if(response.errors && response.errors.length>0){ if(response.errors[0].message==='Not authenticated'){ localStorage.removeItem('token'); localStorage.removeItem('refreshToken'); window.location = "/login" } } return response; })
headers }); return forward(operation); });
forward(operation).subscribe(subscriber) }) .catch(error => {
forward( operation ).map( response => { /** * Check for session header and update session in local storage accordingly. */ const context = operation.getContext(); const { response: { headers } } = context; const session = headers.get( "woocommerce-session" ); if ( session ) { // Remove session data if session destroyed. if ( "false" === session ) { localStorage.removeItem( "woo-session" ); // Update session new data if changed. } else if ( localStorage.getItem( "woo-session" ) !== session ) { localStorage.setItem( "woo-session", headers.get( "woocommerce-session" ) ); } } return response; } )
.then(oper => request(oper)) .then(() => { handle = forward(operation).subscribe({ next: observer.next.bind(observer), error: observer.error.bind(observer),
forward(operation).map(response => { const context = operation.getContext() const { response: { headers } } = context if (headers) { const token = headers.get("x-token") const refresh_token = headers.get("x-refresh-token") if (token) { localStorage.setItem(AUTH_TOKEN, token) localStorage.setItem(REFRESH_TOKEN, refresh_token) } } // //Se puede manipular datos cuando llegan de graphql // if (response.data.user.lastLoginDate) { // // } //redireccionar en caso de error if(response.errors && response.errors.length>0){ if(response.errors[0].message==='Not authenticated'){ localStorage.removeItem('token'); localStorage.removeItem('refreshToken'); window.location = "/login" } } return response; })