62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import platform from "../platform/index.js";
 | |
| import utils from "../utils.js";
 | |
| import isURLSameOrigin from "./isURLSameOrigin.js";
 | |
| import cookies from "./cookies.js";
 | |
| import buildFullPath from "../core/buildFullPath.js";
 | |
| import mergeConfig from "../core/mergeConfig.js";
 | |
| import AxiosHeaders from "../core/AxiosHeaders.js";
 | |
| import buildURL from "./buildURL.js";
 | |
| 
 | |
| export default (config) => {
 | |
|   const newConfig = mergeConfig({}, config);
 | |
| 
 | |
|   let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;
 | |
| 
 | |
|   newConfig.headers = headers = AxiosHeaders.from(headers);
 | |
| 
 | |
|   newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);
 | |
| 
 | |
|   // HTTP basic authentication
 | |
|   if (auth) {
 | |
|     headers.set('Authorization', 'Basic ' +
 | |
|       btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   if (utils.isFormData(data)) {
 | |
|     if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {
 | |
|       headers.setContentType(undefined); // browser handles it
 | |
|     } else if (utils.isFunction(data.getHeaders)) {
 | |
|       // Node.js FormData (like form-data package)
 | |
|       const formHeaders = data.getHeaders();
 | |
|       // Only set safe headers to avoid overwriting security headers
 | |
|       const allowedHeaders = ['content-type', 'content-length'];
 | |
|       Object.entries(formHeaders).forEach(([key, val]) => {
 | |
|         if (allowedHeaders.includes(key.toLowerCase())) {
 | |
|           headers.set(key, val);
 | |
|         }
 | |
|       });
 | |
|     }
 | |
|   }  
 | |
| 
 | |
|   // Add xsrf header
 | |
|   // This is only done if running in a standard browser environment.
 | |
|   // Specifically not if we're in a web worker, or react-native.
 | |
| 
 | |
|   if (platform.hasStandardBrowserEnv) {
 | |
|     withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
 | |
| 
 | |
|     if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {
 | |
|       // Add xsrf header
 | |
|       const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);
 | |
| 
 | |
|       if (xsrfValue) {
 | |
|         headers.set(xsrfHeaderName, xsrfValue);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return newConfig;
 | |
| }
 | |
| 
 |