saleor-apps-redis_apl/apps/cms/src/lib/graphql.ts
Dawid bec8d812e8
Bulk product export to CMS providers (#351)
* Add sync all channel products feature

* Implement batch create and delete product variants CMSes sync methods

* Fix pnpm-lock file

* Update UI

* Update imports

* Add fetch rate limit to Contentful provider

* Small refactor of functions

* Update logging
2023-04-12 16:10:32 +02:00

50 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;
}
const getExchanges = (getAuth: AuthConfig<IAuthState>["getAuth"]) => [
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,
];
export const createClient = (url: string, getAuth: AuthConfig<IAuthState>["getAuth"]) =>
urqlCreateClient({
url,
exchanges: getExchanges(getAuth),
});