@graphql-hive/core
Version:
55 lines (54 loc) • 2.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSupergraphSDLFetcher = createSupergraphSDLFetcher;
const version_js_1 = require("../version.js");
const http_client_js_1 = require("./http-client.js");
const utils_js_1 = require("./utils.js");
function createSupergraphSDLFetcher(options) {
let cacheETag = null;
let cached = null;
const endpoint = options.endpoint.endsWith('/supergraph')
? options.endpoint
: (0, utils_js_1.joinUrl)(options.endpoint, 'supergraph');
return function supergraphSDLFetcher() {
const headers = {
'X-Hive-CDN-Key': options.key,
'User-Agent': `hive-client/${version_js_1.version}`,
};
if (cacheETag) {
headers['If-None-Match'] = cacheETag;
}
return http_client_js_1.http
.get(endpoint, {
headers,
isRequestOk: response => response.status === 304 || response.ok,
retry: {
retries: 10,
maxTimeout: 200,
minTimeout: 1,
},
logger: options.logger,
fetchImplementation: options.fetchImplementation,
})
.then(async (response) => {
var _a;
if (response.ok) {
const supergraphSdl = await response.text();
const result = {
id: await (0, utils_js_1.createHash)('SHA-256').update(supergraphSdl).digest('base64'),
supergraphSdl,
};
const etag = response.headers.get('etag');
if (etag) {
cached = result;
cacheETag = etag;
}
return result;
}
if (response.status === 304 && cached !== null) {
return cached;
}
throw new Error(`Failed to GET ${endpoint}, received: ${response.status} ${(_a = response.statusText) !== null && _a !== void 0 ? _a : 'Internal Server Error'}`);
});
};
}
;