UNPKG

@supabase/supabase-js

Version:

Isomorphic Javascript client for Supabase

49 lines (39 loc) 1.21 kB
// @ts-ignore import nodeFetch, { Headers as NodeFetchHeaders } from '@supabase/node-fetch' type Fetch = typeof fetch export const resolveFetch = (customFetch?: Fetch): Fetch => { let _fetch: Fetch if (customFetch) { _fetch = customFetch } else if (typeof fetch === 'undefined') { _fetch = nodeFetch as unknown as Fetch } else { _fetch = fetch } return (...args: Parameters<Fetch>) => _fetch(...args) } export const resolveHeadersConstructor = () => { if (typeof Headers === 'undefined') { return NodeFetchHeaders } return Headers } export const fetchWithAuth = ( supabaseKey: string, getAccessToken: () => Promise<string | null>, customFetch?: Fetch ): Fetch => { const fetch = resolveFetch(customFetch) const HeadersConstructor = resolveHeadersConstructor() return async (input, init) => { const accessToken = (await getAccessToken()) ?? supabaseKey let headers = new HeadersConstructor(init?.headers) if (!headers.has('apikey')) { headers.set('apikey', supabaseKey) } if (!headers.has('Authorization')) { headers.set('Authorization', `Bearer ${accessToken}`) } return fetch(input, { ...init, headers }) } }