You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
4.4 KiB
102 lines
4.4 KiB
4 months ago
|
import { __assign, __spreadArray } from "tslib";
|
||
|
import { print } from "../../utilities/index.js";
|
||
|
var defaultHttpOptions = {
|
||
|
includeQuery: true,
|
||
|
includeExtensions: false,
|
||
|
preserveHeaderCase: false,
|
||
|
};
|
||
|
var defaultHeaders = {
|
||
|
// headers are case insensitive (https://stackoverflow.com/a/5259004)
|
||
|
accept: "*/*",
|
||
|
// The content-type header describes the type of the body of the request, and
|
||
|
// so it typically only is sent with requests that actually have bodies. One
|
||
|
// could imagine that Apollo Client would remove this header when constructing
|
||
|
// a GET request (which has no body), but we historically have not done that.
|
||
|
// This means that browsers will preflight all Apollo Client requests (even
|
||
|
// GET requests). Apollo Server's CSRF prevention feature (introduced in
|
||
|
// AS3.7) takes advantage of this fact and does not block requests with this
|
||
|
// header. If you want to drop this header from GET requests, then you should
|
||
|
// probably replace it with a `apollo-require-preflight` header, or servers
|
||
|
// with CSRF prevention enabled might block your GET request. See
|
||
|
// https://www.apollographql.com/docs/apollo-server/security/cors/#preventing-cross-site-request-forgery-csrf
|
||
|
// for more details.
|
||
|
"content-type": "application/json",
|
||
|
};
|
||
|
var defaultOptions = {
|
||
|
method: "POST",
|
||
|
};
|
||
|
export var fallbackHttpConfig = {
|
||
|
http: defaultHttpOptions,
|
||
|
headers: defaultHeaders,
|
||
|
options: defaultOptions,
|
||
|
};
|
||
|
export var defaultPrinter = function (ast, printer) { return printer(ast); };
|
||
|
export function selectHttpOptionsAndBody(operation, fallbackConfig) {
|
||
|
var configs = [];
|
||
|
for (var _i = 2; _i < arguments.length; _i++) {
|
||
|
configs[_i - 2] = arguments[_i];
|
||
|
}
|
||
|
configs.unshift(fallbackConfig);
|
||
|
return selectHttpOptionsAndBodyInternal.apply(void 0, __spreadArray([operation,
|
||
|
defaultPrinter], configs, false));
|
||
|
}
|
||
|
export function selectHttpOptionsAndBodyInternal(operation, printer) {
|
||
|
var configs = [];
|
||
|
for (var _i = 2; _i < arguments.length; _i++) {
|
||
|
configs[_i - 2] = arguments[_i];
|
||
|
}
|
||
|
var options = {};
|
||
|
var http = {};
|
||
|
configs.forEach(function (config) {
|
||
|
options = __assign(__assign(__assign({}, options), config.options), { headers: __assign(__assign({}, options.headers), config.headers) });
|
||
|
if (config.credentials) {
|
||
|
options.credentials = config.credentials;
|
||
|
}
|
||
|
http = __assign(__assign({}, http), config.http);
|
||
|
});
|
||
|
if (options.headers) {
|
||
|
options.headers = removeDuplicateHeaders(options.headers, http.preserveHeaderCase);
|
||
|
}
|
||
|
//The body depends on the http options
|
||
|
var operationName = operation.operationName, extensions = operation.extensions, variables = operation.variables, query = operation.query;
|
||
|
var body = { operationName: operationName, variables: variables };
|
||
|
if (http.includeExtensions)
|
||
|
body.extensions = extensions;
|
||
|
// not sending the query (i.e persisted queries)
|
||
|
if (http.includeQuery)
|
||
|
body.query = printer(query, print);
|
||
|
return {
|
||
|
options: options,
|
||
|
body: body,
|
||
|
};
|
||
|
}
|
||
|
// Remove potential duplicate header names, preserving last (by insertion order).
|
||
|
// This is done to prevent unintentionally duplicating a header instead of
|
||
|
// overwriting it (See #8447 and #8449).
|
||
|
function removeDuplicateHeaders(headers, preserveHeaderCase) {
|
||
|
// If we're not preserving the case, just remove duplicates w/ normalization.
|
||
|
if (!preserveHeaderCase) {
|
||
|
var normalizedHeaders_1 = Object.create(null);
|
||
|
Object.keys(Object(headers)).forEach(function (name) {
|
||
|
normalizedHeaders_1[name.toLowerCase()] = headers[name];
|
||
|
});
|
||
|
return normalizedHeaders_1;
|
||
|
}
|
||
|
// If we are preserving the case, remove duplicates w/ normalization,
|
||
|
// preserving the original name.
|
||
|
// This allows for non-http-spec-compliant servers that expect intentionally
|
||
|
// capitalized header names (See #6741).
|
||
|
var headerData = Object.create(null);
|
||
|
Object.keys(Object(headers)).forEach(function (name) {
|
||
|
headerData[name.toLowerCase()] = {
|
||
|
originalName: name,
|
||
|
value: headers[name],
|
||
|
};
|
||
|
});
|
||
|
var normalizedHeaders = Object.create(null);
|
||
|
Object.keys(headerData).forEach(function (name) {
|
||
|
normalizedHeaders[headerData[name].originalName] = headerData[name].value;
|
||
|
});
|
||
|
return normalizedHeaders;
|
||
|
}
|
||
|
//# sourceMappingURL=selectHttpOptionsAndBody.js.map
|