"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const exotic_1 = require("exotic");
const tough_cookie_1 = require("tough-cookie");
const log_1 = require("../log");
/* Cookies suck :( */
const hasResponseCookies = (response) => exotic_1.isArray(response.headers.get('set-cookie'));
exports.hasResponseCookies = hasResponseCookies;
const parseCookie = (cookie) => {
return (cookie && tough_cookie_1.Cookie.parse(cookie, { loose: true }).toJSON()) || exotic_1.EMPTY_OBJ;
};
const decodeCookieValue = (cookieVal) => {
const first = decodeURIComponent(cookieVal);
return decodeURIComponent(first);
};
/* Because Invalid API cookies breaks things*/
const toCookies = (response) => {
const header = response.headers.get('set-cookie');
return exotic_1.isArray(header) ? header : [header];
};
const hasDataAndSessionId = (response) => {
return exotic_1.isObj(response.data) && response.data.sessionId;
};
const setCookiesOnResponse = (response, context) => {
const cookies = toCookies(response);
// @todo @@fixme @@hack
const sessionId = hasDataAndSessionId(response) &&
`x-sk-session-id=${response.data.sessionId}`;
cookies
.concat([sessionId])
.filter(Boolean)
.filter(cookie => {
const parsed = parseCookie(cookie);
return parsed.value !== undefined;
})
.forEach(cookie => {
// @todo typing here
const { key, value, maxAge, path } = parseCookie(cookie);
const fixedValue = decodeCookieValue(value);
const cookieValue = {
// domain: parsed.domain,
path,
encode: String,
};
if (maxAge) {
cookieValue.maxAge = maxAge * 1000;
}
else {
cookieValue.maxAge = Date.now() + 10000;
}
log_1.logger.debug('setCookiesOnResponse_cookie:', {
cookie,
fixedValue,
cookieValue,
});
if (exotic_1.isObj(context.res) && exotic_1.isFunction(context.res.cookie)) {
context.res.cookie(key, fixedValue, cookieValue);
}
else {
log_1.logger.warn('[setCookiesOnResponse] missing res.cookie');
}
});
// example to send it back
// const serializedCookies = cookies.map(cookie => {
// const mostlyFixed = cookie
// .replace('Domain=skavaone.com;', '')
// .replace(';Secure', ';')
// .replace('Max-Age=3600;', 'Max-Age=3600000;')
// const withoutExpires = mostlyFixed.split('Expires=').shift()
// return withoutExpires
// })
// context.res.header('_Cookies', serializedCookies.join('|||'))
};
exports.setCookiesOnResponse = setCookiesOnResponse;
exports.default = setCookiesOnResponse;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0Q29va2llc09uUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVwcy9zZXRDb29raWVzT25SZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUE4RDtBQUU5RCwrQ0FBNEM7QUFDNUMsZ0NBQStCO0FBRy9CLHFCQUFxQjtBQUVyQixNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQ2hELGdCQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtBQStFZCxnREFBa0I7QUE3RWpELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBYyxFQUFxQixFQUFFO0lBQ3hELE9BQU8sQ0FBQyxNQUFNLElBQUkscUJBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxrQkFBUyxDQUFBO0FBQ2hGLENBQUMsQ0FBQTtBQUVELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUU7SUFDdEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDM0MsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNsQyxDQUFDLENBQUE7QUFFRCw4Q0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFrQixFQUFZLEVBQUU7SUFDakQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDakQsT0FBTyxnQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDNUMsQ0FBQyxDQUFBO0FBRUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQXFCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLGNBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUE7QUFDeEQsQ0FBQyxDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixRQUFxQixFQUNyQixPQUFnQixFQUNWLEVBQUU7SUFDUixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFbkMsdUJBQXVCO0lBQ3ZCLE1BQU0sU0FBUyxHQUNiLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUM3QixtQkFBbUIsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUU5QyxPQUFPO1NBQ0osTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNmLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNsQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFBO0lBQ25DLENBQUMsQ0FBQztTQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNoQixvQkFBb0I7UUFDcEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQyxNQUFNLFdBQVcsR0FBRztZQUNsQix5QkFBeUI7WUFDekIsSUFBSTtZQUNKLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQTtRQUNELElBQUksTUFBTSxFQUFFO1lBQ1YsV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFBO1NBQ25DO2FBQU07WUFDTCxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUE7U0FDeEM7UUFFRCxZQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFO1lBQzNDLE1BQU07WUFDTixVQUFVO1lBQ1YsV0FBVztTQUNaLENBQUMsQ0FBQTtRQUVGLElBQUksY0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtTQUNqRDthQUFNO1lBQ0wsWUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO1NBQ3pEO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFSiwwQkFBMEI7SUFDMUIsb0RBQW9EO0lBQ3BELCtCQUErQjtJQUMvQiwyQ0FBMkM7SUFDM0MsK0JBQStCO0lBQy9CLG9EQUFvRDtJQUNwRCxpRUFBaUU7SUFDakUsMEJBQTBCO0lBQzFCLEtBQUs7SUFDTCxnRUFBZ0U7QUFDbEUsQ0FBQyxDQUFBO0FBRVEsb0RBQW9CO0FBQzdCLGtCQUFlLG9CQUFvQixDQUFBIn0=