
* Add template Cleanup Update queries Basic mailchimp client Add Oauth flow remove next auth * Auth flow, mailchimp button * Basic layouts * session saver for appbridge * ideas drop * basic iframe flow * iframe flow - with post message * saving token in backend * saving token in backend * Extracted settings manager * Refactor audience router * Remove old macaw ui * Nav and layout * display lists and wip add customer * Metadata updater * Allow iframe to NOT have app layout * Add segment coming soon * App layout * Add removing config button * Add iframe * Fix postmessages * Display lists * webhook settings * Connect webhook * remove comment * batch customer adding client * Update macaw * Fetching customers component * Add bulk sync * add temp ts-ignore until macaw is fixed * Improve ui * redesign * Extract sections * Redesign mailchimp login * Refactor sections * Extract mailchimp list picker * Add name mapping * WIP tags, extracted colocated queries to folders * Wip - not working CustomerUpdated subs * Add instructions * Fix webhook config state * Add external links * envs * Protected Oauth handler * Fix instructions * Squash some todos * Instructions update with gql * empty trygger * Add env validation * Fix error message * Update macaw and remove todos * Add metadata manager test * Replace Mailchimp enum to lowercase * Update oauth routes * Fix typo * Add loader to removing config box * Update labeler to include CRM app * Apply suggestions from CR * Fix linter
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { AuthConfig, authExchange } from "@urql/exchange-auth";
|
|
import {
|
|
cacheExchange,
|
|
createClient as urqlCreateClient,
|
|
dedupExchange,
|
|
fetchExchange,
|
|
} from "urql";
|
|
|
|
interface IAuthState {
|
|
token: string;
|
|
}
|
|
|
|
export const createClient = (url: string, getAuth: AuthConfig<IAuthState>["getAuth"]) =>
|
|
urqlCreateClient({
|
|
url,
|
|
exchanges: [
|
|
dedupExchange,
|
|
cacheExchange,
|
|
authExchange<IAuthState>({
|
|
addAuthToOperation: ({ authState, operation }) => {
|
|
if (!authState || !authState?.token) {
|
|
return operation;
|
|
}
|
|
|
|
const fetchOptions =
|
|
typeof operation.context.fetchOptions === "function"
|
|
? operation.context.fetchOptions()
|
|
: operation.context.fetchOptions || {};
|
|
|
|
return {
|
|
...operation,
|
|
context: {
|
|
...operation.context,
|
|
fetchOptions: {
|
|
...fetchOptions,
|
|
headers: {
|
|
...fetchOptions.headers,
|
|
"Authorization-Bearer": authState.token,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
},
|
|
getAuth,
|
|
}),
|
|
fetchExchange,
|
|
],
|
|
});
|