33 lines
922 B
JavaScript
33 lines
922 B
JavaScript
import fetch from "./fetch";
|
|
import CookieJar from "./cookie-jar";
|
|
import Cookie from "./cookie";
|
|
|
|
const cookieJar = new CookieJar();
|
|
|
|
export default async function cookieFetch(url, options) {
|
|
let cookies = "";
|
|
[...cookieJar.cookiesValidForRequest(url)]
|
|
.filter((v, i, a) => a.slice(0, i).every(c => c.name !== v.name)) // filter cookies with duplicate names
|
|
.forEach(c => cookies += c.serialize() + "; ");
|
|
|
|
if(cookies) {
|
|
if(!options)
|
|
options = {};
|
|
if(!options.headers)
|
|
options.headers = {};
|
|
options.headers.cookie = cookies.slice(0, -2);
|
|
}
|
|
|
|
const result = await fetch(url, options);
|
|
|
|
cookies = result.headers["set-cookie"] || [];
|
|
cookies.forEach(c => cookieJar.addCookie(c, url));
|
|
|
|
// delete expired cookies after each request
|
|
cookieJar.deleteExpired(false);
|
|
|
|
return result;
|
|
}
|
|
|
|
export {cookieJar, CookieJar, Cookie};
|