UNPKG

@graphql-hive/core

Version:
55 lines (54 loc) 2.09 kB
"use strict"; 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'}`); }); }; }