UNPKG

usezap-cli

Version:

Zap CLI - Command-line interface for Zap API client

104 lines (85 loc) 2.89 kB
const { Cookie, CookieJar } = require('tough-cookie'); const each = require('lodash/each'); const { isPotentiallyTrustworthyOrigin } = require('@usezap/requests').utils; const cookieJar = new CookieJar(); const addCookieToJar = (setCookieHeader, requestUrl) => { const cookie = Cookie.parse(setCookieHeader, { loose: true }); cookieJar.setCookieSync(cookie, requestUrl, { ignoreError: true // silently ignore things like parse errors and invalid domains }); }; const getCookiesForUrl = (url) => { return cookieJar.getCookiesSync(url, { secure: isPotentiallyTrustworthyOrigin(url) }); }; const getCookieStringForUrl = (url) => { const cookies = getCookiesForUrl(url); if (!Array.isArray(cookies) || !cookies.length) { return ''; } const validCookies = cookies.filter((cookie) => !cookie.expires || cookie.expires > Date.now()); return validCookies.map((cookie) => cookie.cookieString()).join('; '); }; const getDomainsWithCookies = () => { return new Promise((resolve, reject) => { const domainCookieMap = {}; cookieJar.store.getAllCookies((err, cookies) => { if (err) { return reject(err); } cookies.forEach((cookie) => { if (!domainCookieMap[cookie.domain]) { domainCookieMap[cookie.domain] = [cookie]; } else { domainCookieMap[cookie.domain].push(cookie); } }); const domains = Object.keys(domainCookieMap); const domainsWithCookies = []; each(domains, (domain) => { const cookies = domainCookieMap[domain]; const validCookies = cookies.filter((cookie) => !cookie.expires || cookie.expires > Date.now()); if (validCookies.length) { domainsWithCookies.push({ domain, cookies: validCookies, cookieString: validCookies.map((cookie) => cookie.cookieString()).join('; ') }); } }); resolve(domainsWithCookies); }); }); }; const deleteCookiesForDomain = (domain) => { return new Promise((resolve, reject) => { cookieJar.store.removeCookies(domain, null, (err) => { if (err) { return reject(err); } return resolve(); }); }); }; const saveCookies = (url, headers) => { let setCookieHeaders = []; if (headers['set-cookie']) { setCookieHeaders = Array.isArray(headers['set-cookie']) ? headers['set-cookie'] : [headers['set-cookie']]; for (let setCookieHeader of setCookieHeaders) { if (typeof setCookieHeader === 'string' && setCookieHeader.length) { addCookieToJar(setCookieHeader, url); } } } } module.exports = { addCookieToJar, getCookiesForUrl, getCookieStringForUrl, getDomainsWithCookies, deleteCookiesForDomain, saveCookies };