UNPKG

memcookies

Version:

Encrypt and store cookies in client-side on outgoing requests, decrypt and use them on incoming requests. For cookies disabled mode.

89 lines (64 loc) 2.09 kB
export function extend(obj, source) { if (!source) { return obj; } for (let key in source) { if (source.hasOwnProperty(key)) { obj[key] = source[key]; } } return obj; } export function interceptHeader(name, { get, set }) { if (set) { let open = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function () { let result = open.apply(this, arguments); let value = set(); if (value) { this.setRequestHeader(name, value); } else { return result; } let setRequestHeader = this.setRequestHeader; this.setRequestHeader = function(headerName, headerValue) { if (headerName === name) { return; } return setRequestHeader.apply(this, arguments); } return result; }; } if (get) { let send = window.XMLHttpRequest.prototype.send; window.XMLHttpRequest.prototype.send = function () { let self = this; let onreadystatechange = self.onreadystatechange; function listener() { try { let newValue = this.getResponseHeader(name); if (newValue) { get(newValue); } } catch (err) { // pass } if (onreadystatechange) { return onreadystatechange.apply(this, arguments); } } delete self.onreadystatechange; self.onreadystatechange = listener; Object.defineProperty(self, 'onreadystatechange', { get() { return listener; }, set(handler) { onreadystatechange = handler; } }); return send.apply(this, arguments); }; } }