request-cookie
Version:
Cookie store for request-compose
55 lines (39 loc) • 1.3 kB
JavaScript
var url = require('url')
var tough = require('tough-cookie')
exports.Request = (cookie) => ({options}) => {
if (cookie && !cookie.store) {
cookie.store = new tough.CookieJar(undefined, {looseMode: true})
}
if (cookie && cookie.header === undefined) {
var header = Object.keys(options.headers)
.find((name) => name.toLowerCase() === 'cookie')
cookie.header = header ? options.headers[header] : false
}
var uri = url.parse(
`${options.protocol}//${options.hostname}${options.path}`
+ (options.port ? `:${options.port}` : '')
)
var cookies = cookie.store.getCookieStringSync(uri.href)
if (cookies && cookies.length) {
options.headers.cookie =
cookie.header ? `${cookie.header}; ${cookies}` : cookies
}
return {options}
}
exports.Response = (cookie) => ({options, res}) => {
var header = Object.keys(res.headers)
.find((name) => name.toLowerCase() === 'set-cookie')
if (header) {
var uri = url.parse(
`${options.protocol}//${options.hostname}${options.path}`
+ (options.port ? `:${options.port}` : '')
)
;[].concat(res.headers[header]).forEach((str) => {
try {
cookie.store.setCookieSync(str, uri, {ignoreError: true})
}
catch (err) {}
})
}
return {options, res}
}