Skip to content

Instantly share code, notes, and snippets.

@acro5piano
Last active December 4, 2023 13:56
Show Gist options
  • Save acro5piano/c911361b3da1e6b871214fe7c100e08c to your computer and use it in GitHub Desktop.
Save acro5piano/c911361b3da1e6b871214fe7c100e08c to your computer and use it in GitHub Desktop.
URQL + Firebase authentication
import {
Exchange,
cacheExchange,
createClient,
dedupExchange,
fetchExchange,
subscriptionExchange,
} from 'urql'
import { delay, empty, fromPromise, map, mergeMap, pipe, tap } from 'wonka'
import firebase from 'firebase' // NOTE: This is old Firebase version
const headerExchange: Exchange = ({ forward }) => (operations$) =>
pipe(
operations$,
mergeMap((operation) => {
const currentUser = firebase.auth().currentUser
if (!currentUser) {
return pipe(
empty,
map(() => operation),
)
}
return pipe(
fromPromise(currentUser.getIdToken()),
map((authToken) => {
if (!operation.context.fetchOptions) {
operation.context.fetchOptions = {}
}
Object.assign(operation.context.fetchOptions, {
headers: {
accept: 'application/json',
Authorization: `Bearer ${authToken}`,
},
})
return operation
}),
)
}),
forward,
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment