2022-02-21 13:32:38 +00:00
|
|
|
import { ApolloClient, InMemoryCache } from "@apollo/client";
|
|
|
|
import { BatchHttpLink } from "@apollo/client/link/batch-http";
|
2023-01-16 09:45:12 +00:00
|
|
|
import { getApiUrl } from "@dashboard/config";
|
2021-12-17 11:10:54 +00:00
|
|
|
import { createFetch } from "@saleor/sdk";
|
2023-02-06 13:05:45 +00:00
|
|
|
import isCI from "is-ci";
|
2020-07-20 10:05:47 +00:00
|
|
|
import path from "path";
|
|
|
|
import { setupPolly } from "setup-polly-jest";
|
|
|
|
|
2023-02-06 13:05:45 +00:00
|
|
|
const POLLY_MODES = ["replay", "record", "passthrough", "stopped"] as const;
|
|
|
|
|
|
|
|
function getPollyMode() {
|
|
|
|
const env = process.env.POLLY_MODE as typeof POLLY_MODES[number];
|
|
|
|
if (!env) {
|
|
|
|
return POLLY_MODES[0]; // replay
|
|
|
|
}
|
|
|
|
if (POLLY_MODES.includes(env)) {
|
|
|
|
return env;
|
|
|
|
}
|
|
|
|
console.warn(`Unrecognised POLLY_MODE env variable value: ${env}`);
|
|
|
|
return POLLY_MODES[0]; // replay
|
|
|
|
}
|
|
|
|
|
|
|
|
function getPollyRecordIfMissing() {
|
|
|
|
const env = process.env.POLLY_RECORD_IF_MISSING;
|
|
|
|
if (!env) {
|
|
|
|
return !isCI;
|
|
|
|
}
|
|
|
|
return env === "true";
|
|
|
|
}
|
|
|
|
|
2020-07-20 10:05:47 +00:00
|
|
|
function setupApi() {
|
|
|
|
setupPolly({
|
2023-02-06 13:05:45 +00:00
|
|
|
adapters: [require("@pollyjs/adapter-node-http")],
|
2020-07-29 13:10:39 +00:00
|
|
|
matchRequestsBy: {
|
|
|
|
headers: false,
|
|
|
|
url: {
|
|
|
|
hash: false,
|
2023-02-06 13:05:45 +00:00
|
|
|
hostname: true,
|
2020-07-29 13:10:39 +00:00
|
|
|
password: false,
|
2023-02-06 13:05:45 +00:00
|
|
|
pathname: true,
|
2020-07-29 13:10:39 +00:00
|
|
|
port: false,
|
|
|
|
protocol: false,
|
|
|
|
query: false,
|
2022-06-21 09:36:55 +00:00
|
|
|
username: false,
|
|
|
|
},
|
2023-02-06 13:05:45 +00:00
|
|
|
body: false,
|
2020-07-29 13:10:39 +00:00
|
|
|
},
|
2023-02-06 13:05:45 +00:00
|
|
|
mode: getPollyMode(),
|
|
|
|
recordIfMissing: getPollyRecordIfMissing(),
|
|
|
|
persister: require("@pollyjs/persister-fs"),
|
2020-07-20 10:05:47 +00:00
|
|
|
persisterOptions: {
|
2023-02-06 13:05:45 +00:00
|
|
|
keepUnusedRequests: false,
|
2020-07-20 10:05:47 +00:00
|
|
|
fs: {
|
2022-06-21 09:36:55 +00:00
|
|
|
recordingsDir: path.resolve(__dirname, "../recordings"),
|
|
|
|
},
|
|
|
|
},
|
2020-07-20 10:05:47 +00:00
|
|
|
});
|
|
|
|
const cache = new InMemoryCache();
|
|
|
|
const link = new BatchHttpLink({
|
2021-12-17 11:10:54 +00:00
|
|
|
fetch: createFetch(),
|
2022-11-16 15:01:34 +00:00
|
|
|
uri: getApiUrl(),
|
2020-07-20 10:05:47 +00:00
|
|
|
});
|
|
|
|
const apolloClient = new ApolloClient({
|
|
|
|
cache,
|
2022-06-21 09:36:55 +00:00
|
|
|
link,
|
2020-07-20 10:05:47 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return apolloClient;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default setupApi;
|