{"ast":null,"code":"/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n'use strict';\n\nvar net = require('net');\n\nvar urlParse = require('url').parse;\n\nvar util = require('util');\n\nvar pubsuffix = require('./pubsuffix-psl');\n\nvar Store = require('./store').Store;\n\nvar MemoryCookieStore = require('./memstore').MemoryCookieStore;\n\nvar pathMatch = require('./pathMatch').pathMatch;\n\nvar VERSION = require('./version');\n\nvar punycode;\n\ntry {\n punycode = require('punycode');\n} catch (e) {\n console.warn(\"tough-cookie: can't load punycode; won't use punycode for domain normalization\");\n} // From RFC6265 S4.1.1\n// note that it excludes \\x3B \";\"\n\n\nvar COOKIE_OCTETS = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]+$/;\nvar CONTROL_CHARS = /[\\x00-\\x1F]/; // From Chromium // '\\r', '\\n' and '\\0' should be treated as a terminator in\n// the \"relaxed\" mode, see:\n// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60\n\nvar TERMINATORS = ['\\n', '\\r', '\\0']; // RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or \";\"'\n// Note ';' is \\x3B\n\nvar PATH_VALUE = /[\\x20-\\x3A\\x3C-\\x7E]+/; // date-time parsing constants (RFC6265 S5.1.1)\n\nvar DATE_DELIM = /[\\x09\\x20-\\x2F\\x3B-\\x40\\x5B-\\x60\\x7B-\\x7E]/;\nvar MONTH_TO_NUM = {\n jan: 0,\n feb: 1,\n mar: 2,\n apr: 3,\n may: 4,\n jun: 5,\n jul: 6,\n aug: 7,\n sep: 8,\n oct: 9,\n nov: 10,\n dec: 11\n};\nvar NUM_TO_MONTH = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar NUM_TO_DAY = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nvar MAX_TIME = 2147483647000; // 31-bit max\n\nvar MIN_TIME = 0; // 31-bit min\n\n/*\n * Parses a Natural number (i.e., non-negative integer) with either the\n * *DIGIT ( non-digit *OCTET )\n * or\n * *DIGIT\n * grammar (RFC6265 S5.1.1).\n *\n * The \"trailingOK\" boolean controls if the grammar accepts a\n * \"( non-digit *OCTET )\" trailer.\n */\n\nfunction parseDigits(token, minDigits, maxDigits, trailingOK) {\n var count = 0;\n\n while (count < token.length) {\n var c = token.charCodeAt(count); // \"non-digit = %x00-2F / %x3A-FF\"\n\n if (c <= 0x2F || c >= 0x3A) {\n break;\n }\n\n count++;\n } // constrain to a minimum and maximum number of digits.\n\n\n if (count < minDigits || count > maxDigits) {\n return null;\n }\n\n if (!trailingOK && count != token.length) {\n return null;\n }\n\n return parseInt(token.substr(0, count), 10);\n}\n\nfunction parseTime(token) {\n var parts = token.split(':');\n var result = [0, 0, 0];\n /* RF6256 S5.1.1:\n * time = hms-time ( non-digit *OCTET )\n * hms-time = time-field \":\" time-field \":\" time-field\n * time-field = 1*2DIGIT\n */\n\n if (parts.length !== 3) {\n return null;\n }\n\n for (var i = 0; i < 3; i++) {\n // \"time-field\" must be strictly \"1*2DIGIT\", HOWEVER, \"hms-time\" can be\n // followed by \"( non-digit *OCTET )\" so therefore the last time-field can\n // have a trailer\n var trailingOK = i == 2;\n var num = parseDigits(parts[i], 1, 2, trailingOK);\n\n if (num === null) {\n return null;\n }\n\n result[i] = num;\n }\n\n return result;\n}\n\nfunction parseMonth(token) {\n token = String(token).substr(0, 3).toLowerCase();\n var num = MONTH_TO_NUM[token];\n return num >= 0 ? num : null;\n}\n/*\n * RFC6265 S5.1.1 date parser (see RFC for full grammar)\n */\n\n\nfunction parseDate(str) {\n if (!str) {\n return;\n }\n /* RFC6265 S5.1.1:\n * 2. Process each date-token sequentially in the order the date-tokens\n * appear in the cookie-date\n */\n\n\n var tokens = str.split(DATE_DELIM);\n\n if (!tokens) {\n return;\n }\n\n var hour = null;\n var minute = null;\n var second = null;\n var dayOfMonth = null;\n var month = null;\n var year = null;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i].trim();\n\n if (!token.length) {\n continue;\n }\n\n var result;\n /* 2.1. If the found-time flag is not set and the token matches the time\n * production, set the found-time flag and set the hour- value,\n * minute-value, and second-value to the numbers denoted by the digits in\n * the date-token, respectively. Skip the remaining sub-steps and continue\n * to the next date-token.\n */\n\n if (second === null) {\n result = parseTime(token);\n\n if (result) {\n hour = result[0];\n minute = result[1];\n second = result[2];\n continue;\n }\n }\n /* 2.2. If the found-day-of-month flag is not set and the date-token matches\n * the day-of-month production, set the found-day-of- month flag and set\n * the day-of-month-value to the number denoted by the date-token. Skip\n * the remaining sub-steps and continue to the next date-token.\n */\n\n\n if (dayOfMonth === null) {\n // \"day-of-month = 1*2DIGIT ( non-digit *OCTET )\"\n result = parseDigits(token, 1, 2, true);\n\n if (result !== null) {\n dayOfMonth = result;\n continue;\n }\n }\n /* 2.3. If the found-month flag is not set and the date-token matches the\n * month production, set the found-month flag and set the month-value to\n * the month denoted by the date-token. Skip the remaining sub-steps and\n * continue to the next date-token.\n */\n\n\n if (month === null) {\n result = parseMonth(token);\n\n if (result !== null) {\n month = result;\n continue;\n }\n }\n /* 2.4. If the found-year flag is not set and the date-token matches the\n * year production, set the found-year flag and set the year-value to the\n * number denoted by the date-token. Skip the remaining sub-steps and\n * continue to the next date-token.\n */\n\n\n if (year === null) {\n // \"year = 2*4DIGIT ( non-digit *OCTET )\"\n result = parseDigits(token, 2, 4, true);\n\n if (result !== null) {\n year = result;\n /* From S5.1.1:\n * 3. If the year-value is greater than or equal to 70 and less\n * than or equal to 99, increment the year-value by 1900.\n * 4. If the year-value is greater than or equal to 0 and less\n * than or equal to 69, increment the year-value by 2000.\n */\n\n if (year >= 70 && year <= 99) {\n year += 1900;\n } else if (year >= 0 && year <= 69) {\n year += 2000;\n }\n }\n }\n }\n /* RFC 6265 S5.1.1\n * \"5. Abort these steps and fail to parse the cookie-date if:\n * * at least one of the found-day-of-month, found-month, found-\n * year, or found-time flags is not set,\n * * the day-of-month-value is less than 1 or greater than 31,\n * * the year-value is less than 1601,\n * * the hour-value is greater than 23,\n * * the minute-value is greater than 59, or\n * * the second-value is greater than 59.\n * (Note that leap seconds cannot be represented in this syntax.)\"\n *\n * So, in order as above:\n */\n\n\n if (dayOfMonth === null || month === null || year === null || second === null || dayOfMonth < 1 || dayOfMonth > 31 || year < 1601 || hour > 23 || minute > 59 || second > 59) {\n return;\n }\n\n return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));\n}\n\nfunction formatDate(date) {\n var d = date.getUTCDate();\n d = d >= 10 ? d : '0' + d;\n var h = date.getUTCHours();\n h = h >= 10 ? h : '0' + h;\n var m = date.getUTCMinutes();\n m = m >= 10 ? m : '0' + m;\n var s = date.getUTCSeconds();\n s = s >= 10 ? s : '0' + s;\n return NUM_TO_DAY[date.getUTCDay()] + ', ' + d + ' ' + NUM_TO_MONTH[date.getUTCMonth()] + ' ' + date.getUTCFullYear() + ' ' + h + ':' + m + ':' + s + ' GMT';\n} // S5.1.2 Canonicalized Host Names\n\n\nfunction canonicalDomain(str) {\n if (str == null) {\n return null;\n }\n\n str = str.trim().replace(/^\\./, ''); // S4.1.2.3 & S5.2.3: ignore leading .\n // convert to IDN if any non-ASCII characters\n\n if (punycode && /[^\\u0001-\\u007f]/.test(str)) {\n str = punycode.toASCII(str);\n }\n\n return str.toLowerCase();\n} // S5.1.3 Domain Matching\n\n\nfunction domainMatch(str, domStr, canonicalize) {\n if (str == null || domStr == null) {\n return null;\n }\n\n if (canonicalize !== false) {\n str = canonicalDomain(str);\n domStr = canonicalDomain(domStr);\n }\n /*\n * \"The domain string and the string are identical. (Note that both the\n * domain string and the string will have been canonicalized to lower case at\n * this point)\"\n */\n\n\n if (str == domStr) {\n return true;\n }\n /* \"All of the following [three] conditions hold:\" (order adjusted from the RFC) */\n\n /* \"* The string is a host name (i.e., not an IP address).\" */\n\n\n if (net.isIP(str)) {\n return false;\n }\n /* \"* The domain string is a suffix of the string\" */\n\n\n var idx = str.indexOf(domStr);\n\n if (idx <= 0) {\n return false; // it's a non-match (-1) or prefix (0)\n } // e.g \"a.b.c\".indexOf(\"b.c\") === 2\n // 5 === 3+2\n\n\n if (str.length !== domStr.length + idx) {\n // it's not a suffix\n return false;\n }\n /* \"* The last character of the string that is not included in the domain\n * string is a %x2E (\".\") character.\" */\n\n\n if (str.substr(idx - 1, 1) !== '.') {\n return false;\n }\n\n return true;\n} // RFC6265 S5.1.4 Paths and Path-Match\n\n/*\n * \"The user agent MUST use an algorithm equivalent to the following algorithm\n * to compute the default-path of a cookie:\"\n *\n * Assumption: the path (and not query part or absolute uri) is passed in.\n */\n\n\nfunction defaultPath(path) {\n // \"2. If the uri-path is empty or if the first character of the uri-path is not\n // a %x2F (\"/\") character, output %x2F (\"/\") and skip the remaining steps.\n if (!path || path.substr(0, 1) !== \"/\") {\n return \"/\";\n } // \"3. If the uri-path contains no more than one %x2F (\"/\") character, output\n // %x2F (\"/\") and skip the remaining step.\"\n\n\n if (path === \"/\") {\n return path;\n }\n\n var rightSlash = path.lastIndexOf(\"/\");\n\n if (rightSlash === 0) {\n return \"/\";\n } // \"4. Output the characters of the uri-path from the first character up to,\n // but not including, the right-most %x2F (\"/\").\"\n\n\n return path.slice(0, rightSlash);\n}\n\nfunction trimTerminator(str) {\n for (var t = 0; t < TERMINATORS.length; t++) {\n var terminatorIdx = str.indexOf(TERMINATORS[t]);\n\n if (terminatorIdx !== -1) {\n str = str.substr(0, terminatorIdx);\n }\n }\n\n return str;\n}\n\nfunction parseCookiePair(cookiePair, looseMode) {\n cookiePair = trimTerminator(cookiePair);\n var firstEq = cookiePair.indexOf('=');\n\n if (looseMode) {\n if (firstEq === 0) {\n // '=' is immediately at start\n cookiePair = cookiePair.substr(1);\n firstEq = cookiePair.indexOf('='); // might still need to split on '='\n }\n } else {\n // non-loose mode\n if (firstEq <= 0) {\n // no '=' or is at start\n return; // needs to have non-empty \"cookie-name\"\n }\n }\n\n var cookieName, cookieValue;\n\n if (firstEq <= 0) {\n cookieName = \"\";\n cookieValue = cookiePair.trim();\n } else {\n cookieName = cookiePair.substr(0, firstEq).trim();\n cookieValue = cookiePair.substr(firstEq + 1).trim();\n }\n\n if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {\n return;\n }\n\n var c = new Cookie();\n c.key = cookieName;\n c.value = cookieValue;\n return c;\n}\n\nfunction parse(str, options) {\n if (!options || typeof options !== 'object') {\n options = {};\n }\n\n str = str.trim(); // We use a regex to parse the \"name-value-pair\" part of S5.2\n\n var firstSemi = str.indexOf(';'); // S5.2 step 1\n\n var cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi);\n var c = parseCookiePair(cookiePair, !!options.loose);\n\n if (!c) {\n return;\n }\n\n if (firstSemi === -1) {\n return c;\n } // S5.2.3 \"unparsed-attributes consist of the remainder of the set-cookie-string\n // (including the %x3B (\";\") in question).\" plus later on in the same section\n // \"discard the first \";\" and trim\".\n\n\n var unparsed = str.slice(firstSemi + 1).trim(); // \"If the unparsed-attributes string is empty, skip the rest of these\n // steps.\"\n\n if (unparsed.length === 0) {\n return c;\n }\n /*\n * S5.2 says that when looping over the items \"[p]rocess the attribute-name\n * and attribute-value according to the requirements in the following\n * subsections\" for every item. Plus, for many of the individual attributes\n * in S5.3 it says to use the \"attribute-value of the last attribute in the\n * cookie-attribute-list\". Therefore, in this implementation, we overwrite\n * the previous value.\n */\n\n\n var cookie_avs = unparsed.split(';');\n\n while (cookie_avs.length) {\n var av = cookie_avs.shift().trim();\n\n if (av.length === 0) {\n // happens if \";;\" appears\n continue;\n }\n\n var av_sep = av.indexOf('=');\n var av_key, av_value;\n\n if (av_sep === -1) {\n av_key = av;\n av_value = null;\n } else {\n av_key = av.substr(0, av_sep);\n av_value = av.substr(av_sep + 1);\n }\n\n av_key = av_key.trim().toLowerCase();\n\n if (av_value) {\n av_value = av_value.trim();\n }\n\n switch (av_key) {\n case 'expires':\n // S5.2.1\n if (av_value) {\n var exp = parseDate(av_value); // \"If the attribute-value failed to parse as a cookie date, ignore the\n // cookie-av.\"\n\n if (exp) {\n // over and underflow not realistically a concern: V8's getTime() seems to\n // store something larger than a 32-bit time_t (even with 32-bit node)\n c.expires = exp;\n }\n }\n\n break;\n\n case 'max-age':\n // S5.2.2\n if (av_value) {\n // \"If the first character of the attribute-value is not a DIGIT or a \"-\"\n // character ...[or]... If the remainder of attribute-value contains a\n // non-DIGIT character, ignore the cookie-av.\"\n if (/^-?[0-9]+$/.test(av_value)) {\n var delta = parseInt(av_value, 10); // \"If delta-seconds is less than or equal to zero (0), let expiry-time\n // be the earliest representable date and time.\"\n\n c.setMaxAge(delta);\n }\n }\n\n break;\n\n case 'domain':\n // S5.2.3\n // \"If the attribute-value is empty, the behavior is undefined. However,\n // the user agent SHOULD ignore the cookie-av entirely.\"\n if (av_value) {\n // S5.2.3 \"Let cookie-domain be the attribute-value without the leading %x2E\n // (\".\") character.\"\n var domain = av_value.trim().replace(/^\\./, '');\n\n if (domain) {\n // \"Convert the cookie-domain to lower case.\"\n c.domain = domain.toLowerCase();\n }\n }\n\n break;\n\n case 'path':\n // S5.2.4\n\n /*\n * \"If the attribute-value is empty or if the first character of the\n * attribute-value is not %x2F (\"/\"):\n * Let cookie-path be the default-path.\n * Otherwise:\n * Let cookie-path be the attribute-value.\"\n *\n * We'll represent the default-path as null since it depends on the\n * context of the parsing.\n */\n c.path = av_value && av_value[0] === \"/\" ? av_value : null;\n break;\n\n case 'secure':\n // S5.2.5\n\n /*\n * \"If the attribute-name case-insensitively matches the string \"Secure\",\n * the user agent MUST append an attribute to the cookie-attribute-list\n * with an attribute-name of Secure and an empty attribute-value.\"\n */\n c.secure = true;\n break;\n\n case 'httponly':\n // S5.2.6 -- effectively the same as 'secure'\n c.httpOnly = true;\n break;\n\n default:\n c.extensions = c.extensions || [];\n c.extensions.push(av);\n break;\n }\n }\n\n return c;\n} // avoid the V8 deoptimization monster!\n\n\nfunction jsonParse(str) {\n var obj;\n\n try {\n obj = JSON.parse(str);\n } catch (e) {\n return e;\n }\n\n return obj;\n}\n\nfunction fromJSON(str) {\n if (!str) {\n return null;\n }\n\n var obj;\n\n if (typeof str === 'string') {\n obj = jsonParse(str);\n\n if (obj instanceof Error) {\n return null;\n }\n } else {\n // assume it's an Object\n obj = str;\n }\n\n var c = new Cookie();\n\n for (var i = 0; i < Cookie.serializableProperties.length; i++) {\n var prop = Cookie.serializableProperties[i];\n\n if (obj[prop] === undefined || obj[prop] === Cookie.prototype[prop]) {\n continue; // leave as prototype default\n }\n\n if (prop === 'expires' || prop === 'creation' || prop === 'lastAccessed') {\n if (obj[prop] === null) {\n c[prop] = null;\n } else {\n c[prop] = obj[prop] == \"Infinity\" ? \"Infinity\" : new Date(obj[prop]);\n }\n } else {\n c[prop] = obj[prop];\n }\n }\n\n return c;\n}\n/* Section 5.4 part 2:\n * \"* Cookies with longer paths are listed before cookies with\n * shorter paths.\n *\n * * Among cookies that have equal-length path fields, cookies with\n * earlier creation-times are listed before cookies with later\n * creation-times.\"\n */\n\n\nfunction cookieCompare(a, b) {\n var cmp = 0; // descending for length: b CMP a\n\n var aPathLen = a.path ? a.path.length : 0;\n var bPathLen = b.path ? b.path.length : 0;\n cmp = bPathLen - aPathLen;\n\n if (cmp !== 0) {\n return cmp;\n } // ascending for time: a CMP b\n\n\n var aTime = a.creation ? a.creation.getTime() : MAX_TIME;\n var bTime = b.creation ? b.creation.getTime() : MAX_TIME;\n cmp = aTime - bTime;\n\n if (cmp !== 0) {\n return cmp;\n } // break ties for the same millisecond (precision of JavaScript's clock)\n\n\n cmp = a.creationIndex - b.creationIndex;\n return cmp;\n} // Gives the permutation of all possible pathMatch()es of a given path. The\n// array is in longest-to-shortest order. Handy for indexing.\n\n\nfunction permutePath(path) {\n if (path === '/') {\n return ['/'];\n }\n\n if (path.lastIndexOf('/') === path.length - 1) {\n path = path.substr(0, path.length - 1);\n }\n\n var permutations = [path];\n\n while (path.length > 1) {\n var lindex = path.lastIndexOf('/');\n\n if (lindex === 0) {\n break;\n }\n\n path = path.substr(0, lindex);\n permutations.push(path);\n }\n\n permutations.push('/');\n return permutations;\n}\n\nfunction getCookieContext(url) {\n if (url instanceof Object) {\n return url;\n } // NOTE: decodeURI will throw on malformed URIs (see GH-32).\n // Therefore, we will just skip decoding for such URIs.\n\n\n try {\n url = decodeURI(url);\n } catch (err) {// Silently swallow error\n }\n\n return urlParse(url);\n}\n\nfunction Cookie(options) {\n options = options || {};\n Object.keys(options).forEach(function (prop) {\n if (Cookie.prototype.hasOwnProperty(prop) && Cookie.prototype[prop] !== options[prop] && prop.substr(0, 1) !== '_') {\n this[prop] = options[prop];\n }\n }, this);\n this.creation = this.creation || new Date(); // used to break creation ties in cookieCompare():\n\n Object.defineProperty(this, 'creationIndex', {\n configurable: false,\n enumerable: false,\n // important for assert.deepEqual checks\n writable: true,\n value: ++Cookie.cookiesCreated\n });\n}\n\nCookie.cookiesCreated = 0; // incremented each time a cookie is created\n\nCookie.parse = parse;\nCookie.fromJSON = fromJSON;\nCookie.prototype.key = \"\";\nCookie.prototype.value = \"\"; // the order in which the RFC has them:\n\nCookie.prototype.expires = \"Infinity\"; // coerces to literal Infinity\n\nCookie.prototype.maxAge = null; // takes precedence over expires for TTL\n\nCookie.prototype.domain = null;\nCookie.prototype.path = null;\nCookie.prototype.secure = false;\nCookie.prototype.httpOnly = false;\nCookie.prototype.extensions = null; // set by the CookieJar:\n\nCookie.prototype.hostOnly = null; // boolean when set\n\nCookie.prototype.pathIsDefault = null; // boolean when set\n\nCookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse\n\nCookie.prototype.lastAccessed = null; // Date when set\n\nObject.defineProperty(Cookie.prototype, 'creationIndex', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: 0\n});\nCookie.serializableProperties = Object.keys(Cookie.prototype).filter(function (prop) {\n return !(Cookie.prototype[prop] instanceof Function || prop === 'creationIndex' || prop.substr(0, 1) === '_');\n});\n\nCookie.prototype.inspect = function inspect() {\n var now = Date.now();\n return 'Cookie=\"' + this.toString() + '; hostOnly=' + (this.hostOnly != null ? this.hostOnly : '?') + '; aAge=' + (this.lastAccessed ? now - this.lastAccessed.getTime() + 'ms' : '?') + '; cAge=' + (this.creation ? now - this.creation.getTime() + 'ms' : '?') + '\"';\n}; // Use the new custom inspection symbol to add the custom inspect function if\n// available.\n\n\nif (util.inspect.custom) {\n Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;\n}\n\nCookie.prototype.toJSON = function () {\n var obj = {};\n var props = Cookie.serializableProperties;\n\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n\n if (this[prop] === Cookie.prototype[prop]) {\n continue; // leave as prototype default\n }\n\n if (prop === 'expires' || prop === 'creation' || prop === 'lastAccessed') {\n if (this[prop] === null) {\n obj[prop] = null;\n } else {\n obj[prop] = this[prop] == \"Infinity\" ? // intentionally not ===\n \"Infinity\" : this[prop].toISOString();\n }\n } else if (prop === 'maxAge') {\n if (this[prop] !== null) {\n // again, intentionally not ===\n obj[prop] = this[prop] == Infinity || this[prop] == -Infinity ? this[prop].toString() : this[prop];\n }\n } else {\n if (this[prop] !== Cookie.prototype[prop]) {\n obj[prop] = this[prop];\n }\n }\n }\n\n return obj;\n};\n\nCookie.prototype.clone = function () {\n return fromJSON(this.toJSON());\n};\n\nCookie.prototype.validate = function validate() {\n if (!COOKIE_OCTETS.test(this.value)) {\n return false;\n }\n\n if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires)) {\n return false;\n }\n\n if (this.maxAge != null && this.maxAge <= 0) {\n return false; // \"Max-Age=\" non-zero-digit *DIGIT\n }\n\n if (this.path != null && !PATH_VALUE.test(this.path)) {\n return false;\n }\n\n var cdomain = this.cdomain();\n\n if (cdomain) {\n if (cdomain.match(/\\.$/)) {\n return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this\n }\n\n var suffix = pubsuffix.getPublicSuffix(cdomain);\n\n if (suffix == null) {\n // it's a public suffix\n return false;\n }\n }\n\n return true;\n};\n\nCookie.prototype.setExpires = function setExpires(exp) {\n if (exp instanceof Date) {\n this.expires = exp;\n } else {\n this.expires = parseDate(exp) || \"Infinity\";\n }\n};\n\nCookie.prototype.setMaxAge = function setMaxAge(age) {\n if (age === Infinity || age === -Infinity) {\n this.maxAge = age.toString(); // so JSON.stringify() works\n } else {\n this.maxAge = age;\n }\n}; // gives Cookie header format\n\n\nCookie.prototype.cookieString = function cookieString() {\n var val = this.value;\n\n if (val == null) {\n val = '';\n }\n\n if (this.key === '') {\n return val;\n }\n\n return this.key + '=' + val;\n}; // gives Set-Cookie header format\n\n\nCookie.prototype.toString = function toString() {\n var str = this.cookieString();\n\n if (this.expires != Infinity) {\n if (this.expires instanceof Date) {\n str += '; Expires=' + formatDate(this.expires);\n } else {\n str += '; Expires=' + this.expires;\n }\n }\n\n if (this.maxAge != null && this.maxAge != Infinity) {\n str += '; Max-Age=' + this.maxAge;\n }\n\n if (this.domain && !this.hostOnly) {\n str += '; Domain=' + this.domain;\n }\n\n if (this.path) {\n str += '; Path=' + this.path;\n }\n\n if (this.secure) {\n str += '; Secure';\n }\n\n if (this.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (this.extensions) {\n this.extensions.forEach(function (ext) {\n str += '; ' + ext;\n });\n }\n\n return str;\n}; // TTL() partially replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n// elsewhere)\n// S5.3 says to give the \"latest representable date\" for which we use Infinity\n// For \"expired\" we use 0\n\n\nCookie.prototype.TTL = function TTL(now) {\n /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires\n * attribute, the Max-Age attribute has precedence and controls the\n * expiration date of the cookie.\n * (Concurs with S5.3 step 3)\n */\n if (this.maxAge != null) {\n return this.maxAge <= 0 ? 0 : this.maxAge * 1000;\n }\n\n var expires = this.expires;\n\n if (expires != Infinity) {\n if (!(expires instanceof Date)) {\n expires = parseDate(expires) || Infinity;\n }\n\n if (expires == Infinity) {\n return Infinity;\n }\n\n return expires.getTime() - (now || Date.now());\n }\n\n return Infinity;\n}; // expiryTime() replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n// elsewhere)\n\n\nCookie.prototype.expiryTime = function expiryTime(now) {\n if (this.maxAge != null) {\n var relativeTo = now || this.creation || new Date();\n var age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000;\n return relativeTo.getTime() + age;\n }\n\n if (this.expires == Infinity) {\n return Infinity;\n }\n\n return this.expires.getTime();\n}; // expiryDate() replaces the \"expiry-time\" parts of S5.3 step 3 (setCookie()\n// elsewhere), except it returns a Date\n\n\nCookie.prototype.expiryDate = function expiryDate(now) {\n var millisec = this.expiryTime(now);\n\n if (millisec == Infinity) {\n return new Date(MAX_TIME);\n } else if (millisec == -Infinity) {\n return new Date(MIN_TIME);\n } else {\n return new Date(millisec);\n }\n}; // This replaces the \"persistent-flag\" parts of S5.3 step 3\n\n\nCookie.prototype.isPersistent = function isPersistent() {\n return this.maxAge != null || this.expires != Infinity;\n}; // Mostly S5.1.2 and S5.2.3:\n\n\nCookie.prototype.cdomain = Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {\n if (this.domain == null) {\n return null;\n }\n\n return canonicalDomain(this.domain);\n};\n\nfunction CookieJar(store, options) {\n if (typeof options === \"boolean\") {\n options = {\n rejectPublicSuffixes: options\n };\n } else if (options == null) {\n options = {};\n }\n\n if (options.rejectPublicSuffixes != null) {\n this.rejectPublicSuffixes = options.rejectPublicSuffixes;\n }\n\n if (options.looseMode != null) {\n this.enableLooseMode = options.looseMode;\n }\n\n if (!store) {\n store = new MemoryCookieStore();\n }\n\n this.store = store;\n}\n\nCookieJar.prototype.store = null;\nCookieJar.prototype.rejectPublicSuffixes = true;\nCookieJar.prototype.enableLooseMode = false;\nvar CAN_BE_SYNC = [];\nCAN_BE_SYNC.push('setCookie');\n\nCookieJar.prototype.setCookie = function (cookie, url, options, cb) {\n var err;\n var context = getCookieContext(url);\n\n if (options instanceof Function) {\n cb = options;\n options = {};\n }\n\n var host = canonicalDomain(context.hostname);\n var loose = this.enableLooseMode;\n\n if (options.loose != null) {\n loose = options.loose;\n } // S5.3 step 1\n\n\n if (!(cookie instanceof Cookie)) {\n cookie = Cookie.parse(cookie, {\n loose: loose\n });\n }\n\n if (!cookie) {\n err = new Error(\"Cookie failed to parse\");\n return cb(options.ignoreError ? null : err);\n } // S5.3 step 2\n\n\n var now = options.now || new Date(); // will assign later to save effort in the face of errors\n // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()\n // S5.3 step 4: NOOP; domain is null by default\n // S5.3 step 5: public suffixes\n\n if (this.rejectPublicSuffixes && cookie.domain) {\n var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());\n\n if (suffix == null) {\n // e.g. \"com\"\n err = new Error(\"Cookie has domain set to a public suffix\");\n return cb(options.ignoreError ? null : err);\n }\n } // S5.3 step 6:\n\n\n if (cookie.domain) {\n if (!domainMatch(host, cookie.cdomain(), false)) {\n err = new Error(\"Cookie not in this host's domain. Cookie:\" + cookie.cdomain() + \" Request:\" + host);\n return cb(options.ignoreError ? null : err);\n }\n\n if (cookie.hostOnly == null) {\n // don't reset if already set\n cookie.hostOnly = false;\n }\n } else {\n cookie.hostOnly = true;\n cookie.domain = host;\n } //S5.2.4 If the attribute-value is empty or if the first character of the\n //attribute-value is not %x2F (\"/\"):\n //Let cookie-path be the default-path.\n\n\n if (!cookie.path || cookie.path[0] !== '/') {\n cookie.path = defaultPath(context.pathname);\n cookie.pathIsDefault = true;\n } // S5.3 step 8: NOOP; secure attribute\n // S5.3 step 9: NOOP; httpOnly attribute\n // S5.3 step 10\n\n\n if (options.http === false && cookie.httpOnly) {\n err = new Error(\"Cookie is HttpOnly and this isn't an HTTP API\");\n return cb(options.ignoreError ? null : err);\n }\n\n var store = this.store;\n\n if (!store.updateCookie) {\n store.updateCookie = function (oldCookie, newCookie, cb) {\n this.putCookie(newCookie, cb);\n };\n }\n\n function withCookie(err, oldCookie) {\n if (err) {\n return cb(err);\n }\n\n var next = function (err) {\n if (err) {\n return cb(err);\n } else {\n cb(null, cookie);\n }\n };\n\n if (oldCookie) {\n // S5.3 step 11 - \"If the cookie store contains a cookie with the same name,\n // domain, and path as the newly created cookie:\"\n if (options.http === false && oldCookie.httpOnly) {\n // step 11.2\n err = new Error(\"old Cookie is HttpOnly and this isn't an HTTP API\");\n return cb(options.ignoreError ? null : err);\n }\n\n cookie.creation = oldCookie.creation; // step 11.3\n\n cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker\n\n cookie.lastAccessed = now; // Step 11.4 (delete cookie) is implied by just setting the new one:\n\n store.updateCookie(oldCookie, cookie, next); // step 12\n } else {\n cookie.creation = cookie.lastAccessed = now;\n store.putCookie(cookie, next); // step 12\n }\n }\n\n store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);\n}; // RFC6365 S5.4\n\n\nCAN_BE_SYNC.push('getCookies');\n\nCookieJar.prototype.getCookies = function (url, options, cb) {\n var context = getCookieContext(url);\n\n if (options instanceof Function) {\n cb = options;\n options = {};\n }\n\n var host = canonicalDomain(context.hostname);\n var path = context.pathname || '/';\n var secure = options.secure;\n\n if (secure == null && context.protocol && (context.protocol == 'https:' || context.protocol == 'wss:')) {\n secure = true;\n }\n\n var http = options.http;\n\n if (http == null) {\n http = true;\n }\n\n var now = options.now || Date.now();\n var expireCheck = options.expire !== false;\n var allPaths = !!options.allPaths;\n var store = this.store;\n\n function matchingCookie(c) {\n // \"Either:\n // The cookie's host-only-flag is true and the canonicalized\n // request-host is identical to the cookie's domain.\n // Or:\n // The cookie's host-only-flag is false and the canonicalized\n // request-host domain-matches the cookie's domain.\"\n if (c.hostOnly) {\n if (c.domain != host) {\n return false;\n }\n } else {\n if (!domainMatch(host, c.domain, false)) {\n return false;\n }\n } // \"The request-uri's path path-matches the cookie's path.\"\n\n\n if (!allPaths && !pathMatch(path, c.path)) {\n return false;\n } // \"If the cookie's secure-only-flag is true, then the request-uri's\n // scheme must denote a \"secure\" protocol\"\n\n\n if (c.secure && !secure) {\n return false;\n } // \"If the cookie's http-only-flag is true, then exclude the cookie if the\n // cookie-string is being generated for a \"non-HTTP\" API\"\n\n\n if (c.httpOnly && !http) {\n return false;\n } // deferred from S5.3\n // non-RFC: allow retention of expired cookies by choice\n\n\n if (expireCheck && c.expiryTime() <= now) {\n store.removeCookie(c.domain, c.path, c.key, function () {}); // result ignored\n\n return false;\n }\n\n return true;\n }\n\n store.findCookies(host, allPaths ? null : path, function (err, cookies) {\n if (err) {\n return cb(err);\n }\n\n cookies = cookies.filter(matchingCookie); // sorting of S5.4 part 2\n\n if (options.sort !== false) {\n cookies = cookies.sort(cookieCompare);\n } // S5.4 part 3\n\n\n var now = new Date();\n cookies.forEach(function (c) {\n c.lastAccessed = now;\n }); // TODO persist lastAccessed\n\n cb(null, cookies);\n });\n};\n\nCAN_BE_SYNC.push('getCookieString');\n\nCookieJar.prototype.getCookieString = function () {\n var args = Array.prototype.slice.call(arguments, 0);\n var cb = args.pop();\n\n var next = function (err, cookies) {\n if (err) {\n cb(err);\n } else {\n cb(null, cookies.sort(cookieCompare).map(function (c) {\n return c.cookieString();\n }).join('; '));\n }\n };\n\n args.push(next);\n this.getCookies.apply(this, args);\n};\n\nCAN_BE_SYNC.push('getSetCookieStrings');\n\nCookieJar.prototype.getSetCookieStrings = function () {\n var args = Array.prototype.slice.call(arguments, 0);\n var cb = args.pop();\n\n var next = function (err, cookies) {\n if (err) {\n cb(err);\n } else {\n cb(null, cookies.map(function (c) {\n return c.toString();\n }));\n }\n };\n\n args.push(next);\n this.getCookies.apply(this, args);\n};\n\nCAN_BE_SYNC.push('serialize');\n\nCookieJar.prototype.serialize = function (cb) {\n var type = this.store.constructor.name;\n\n if (type === 'Object') {\n type = null;\n } // update README.md \"Serialization Format\" if you change this, please!\n\n\n var serialized = {\n // The version of tough-cookie that serialized this jar. Generally a good\n // practice since future versions can make data import decisions based on\n // known past behavior. When/if this matters, use `semver`.\n version: 'tough-cookie@' + VERSION,\n // add the store type, to make humans happy:\n storeType: type,\n // CookieJar configuration:\n rejectPublicSuffixes: !!this.rejectPublicSuffixes,\n // this gets filled from getAllCookies:\n cookies: []\n };\n\n if (!(this.store.getAllCookies && typeof this.store.getAllCookies === 'function')) {\n return cb(new Error('store does not support getAllCookies and cannot be serialized'));\n }\n\n this.store.getAllCookies(function (err, cookies) {\n if (err) {\n return cb(err);\n }\n\n serialized.cookies = cookies.map(function (cookie) {\n // convert to serialized 'raw' cookies\n cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie; // Remove the index so new ones get assigned during deserialization\n\n delete cookie.creationIndex;\n return cookie;\n });\n return cb(null, serialized);\n });\n}; // well-known name that JSON.stringify calls\n\n\nCookieJar.prototype.toJSON = function () {\n return this.serializeSync();\n}; // use the class method CookieJar.deserialize instead of calling this directly\n\n\nCAN_BE_SYNC.push('_importCookies');\n\nCookieJar.prototype._importCookies = function (serialized, cb) {\n var jar = this;\n var cookies = serialized.cookies;\n\n if (!cookies || !Array.isArray(cookies)) {\n return cb(new Error('serialized jar has no cookies array'));\n }\n\n cookies = cookies.slice(); // do not modify the original\n\n function putNext(err) {\n if (err) {\n return cb(err);\n }\n\n if (!cookies.length) {\n return cb(err, jar);\n }\n\n var cookie;\n\n try {\n cookie = fromJSON(cookies.shift());\n } catch (e) {\n return cb(e);\n }\n\n if (cookie === null) {\n return putNext(null); // skip this cookie\n }\n\n jar.store.putCookie(cookie, putNext);\n }\n\n putNext();\n};\n\nCookieJar.deserialize = function (strOrObj, store, cb) {\n if (arguments.length !== 3) {\n // store is optional\n cb = store;\n store = null;\n }\n\n var serialized;\n\n if (typeof strOrObj === 'string') {\n serialized = jsonParse(strOrObj);\n\n if (serialized instanceof Error) {\n return cb(serialized);\n }\n } else {\n serialized = strOrObj;\n }\n\n var jar = new CookieJar(store, serialized.rejectPublicSuffixes);\n\n jar._importCookies(serialized, function (err) {\n if (err) {\n return cb(err);\n }\n\n cb(null, jar);\n });\n};\n\nCookieJar.deserializeSync = function (strOrObj, store) {\n var serialized = typeof strOrObj === 'string' ? JSON.parse(strOrObj) : strOrObj;\n var jar = new CookieJar(store, serialized.rejectPublicSuffixes); // catch this mistake early:\n\n if (!jar.store.synchronous) {\n throw new Error('CookieJar store is not synchronous; use async API instead.');\n }\n\n jar._importCookiesSync(serialized);\n\n return jar;\n};\n\nCookieJar.fromJSON = CookieJar.deserializeSync;\n\nCookieJar.prototype.clone = function (newStore, cb) {\n if (arguments.length === 1) {\n cb = newStore;\n newStore = null;\n }\n\n this.serialize(function (err, serialized) {\n if (err) {\n return cb(err);\n }\n\n CookieJar.deserialize(serialized, newStore, cb);\n });\n};\n\nCAN_BE_SYNC.push('removeAllCookies');\n\nCookieJar.prototype.removeAllCookies = function (cb) {\n var store = this.store; // Check that the store implements its own removeAllCookies(). The default\n // implementation in Store will immediately call the callback with a \"not\n // implemented\" Error.\n\n if (store.removeAllCookies instanceof Function && store.removeAllCookies !== Store.prototype.removeAllCookies) {\n return store.removeAllCookies(cb);\n }\n\n store.getAllCookies(function (err, cookies) {\n if (err) {\n return cb(err);\n }\n\n if (cookies.length === 0) {\n return cb(null);\n }\n\n var completedCount = 0;\n var removeErrors = [];\n\n function removeCookieCb(removeErr) {\n if (removeErr) {\n removeErrors.push(removeErr);\n }\n\n completedCount++;\n\n if (completedCount === cookies.length) {\n return cb(removeErrors.length ? removeErrors[0] : null);\n }\n }\n\n cookies.forEach(function (cookie) {\n store.removeCookie(cookie.domain, cookie.path, cookie.key, removeCookieCb);\n });\n });\n};\n\nCookieJar.prototype._cloneSync = syncWrap('clone');\n\nCookieJar.prototype.cloneSync = function (newStore) {\n if (!newStore.synchronous) {\n throw new Error('CookieJar clone destination store is not synchronous; use async API instead.');\n }\n\n return this._cloneSync(newStore);\n}; // Use a closure to provide a true imperative API for synchronous stores.\n\n\nfunction syncWrap(method) {\n return function () {\n if (!this.store.synchronous) {\n throw new Error('CookieJar store is not synchronous; use async API instead.');\n }\n\n var args = Array.prototype.slice.call(arguments);\n var syncErr, syncResult;\n args.push(function syncCb(err, result) {\n syncErr = err;\n syncResult = result;\n });\n this[method].apply(this, args);\n\n if (syncErr) {\n throw syncErr;\n }\n\n return syncResult;\n };\n} // wrap all declared CAN_BE_SYNC methods in the sync wrapper\n\n\nCAN_BE_SYNC.forEach(function (method) {\n CookieJar.prototype[method + 'Sync'] = syncWrap(method);\n});\nexports.version = VERSION;\nexports.CookieJar = CookieJar;\nexports.Cookie = Cookie;\nexports.Store = Store;\nexports.MemoryCookieStore = MemoryCookieStore;\nexports.parseDate = parseDate;\nexports.formatDate = formatDate;\nexports.parse = parse;\nexports.fromJSON = fromJSON;\nexports.domainMatch = domainMatch;\nexports.defaultPath = defaultPath;\nexports.pathMatch = pathMatch;\nexports.getPublicSuffix = pubsuffix.getPublicSuffix;\nexports.cookieCompare = cookieCompare;\nexports.permuteDomain = require('./permuteDomain').permuteDomain;\nexports.permutePath = permutePath;\nexports.canonicalDomain = canonicalDomain;","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/request/node_modules/tough-cookie/lib/cookie.js"],"names":["net","require","urlParse","parse","util","pubsuffix","Store","MemoryCookieStore","pathMatch","VERSION","punycode","e","console","warn","COOKIE_OCTETS","CONTROL_CHARS","TERMINATORS","PATH_VALUE","DATE_DELIM","MONTH_TO_NUM","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","NUM_TO_MONTH","NUM_TO_DAY","MAX_TIME","MIN_TIME","parseDigits","token","minDigits","maxDigits","trailingOK","count","length","c","charCodeAt","parseInt","substr","parseTime","parts","split","result","i","num","parseMonth","String","toLowerCase","parseDate","str","tokens","hour","minute","second","dayOfMonth","month","year","trim","Date","UTC","formatDate","date","d","getUTCDate","h","getUTCHours","m","getUTCMinutes","s","getUTCSeconds","getUTCDay","getUTCMonth","getUTCFullYear","canonicalDomain","replace","test","toASCII","domainMatch","domStr","canonicalize","isIP","idx","indexOf","defaultPath","path","rightSlash","lastIndexOf","slice","trimTerminator","t","terminatorIdx","parseCookiePair","cookiePair","looseMode","firstEq","cookieName","cookieValue","Cookie","key","value","options","firstSemi","loose","unparsed","cookie_avs","av","shift","av_sep","av_key","av_value","exp","expires","delta","setMaxAge","domain","secure","httpOnly","extensions","push","jsonParse","obj","JSON","fromJSON","Error","serializableProperties","prop","undefined","prototype","cookieCompare","a","b","cmp","aPathLen","bPathLen","aTime","creation","getTime","bTime","creationIndex","permutePath","permutations","lindex","getCookieContext","url","Object","decodeURI","err","keys","forEach","hasOwnProperty","defineProperty","configurable","enumerable","writable","cookiesCreated","maxAge","hostOnly","pathIsDefault","lastAccessed","filter","Function","inspect","now","toString","custom","toJSON","props","toISOString","Infinity","clone","validate","cdomain","match","suffix","getPublicSuffix","setExpires","age","cookieString","val","ext","TTL","expiryTime","relativeTo","expiryDate","millisec","isPersistent","canonicalizedDomain","CookieJar","store","rejectPublicSuffixes","enableLooseMode","CAN_BE_SYNC","setCookie","cookie","cb","context","host","hostname","ignoreError","pathname","http","updateCookie","oldCookie","newCookie","putCookie","withCookie","next","findCookie","getCookies","protocol","expireCheck","expire","allPaths","matchingCookie","removeCookie","findCookies","cookies","sort","getCookieString","args","Array","call","arguments","pop","map","join","apply","getSetCookieStrings","serialize","type","constructor","name","serialized","version","storeType","getAllCookies","serializeSync","_importCookies","jar","isArray","putNext","deserialize","strOrObj","deserializeSync","synchronous","_importCookiesSync","newStore","removeAllCookies","completedCount","removeErrors","removeCookieCb","removeErr","_cloneSync","syncWrap","cloneSync","method","syncErr","syncResult","syncCb","exports","permuteDomain"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n'use strict';\nvar net = require('net');\nvar urlParse = require('url').parse;\nvar util = require('util');\nvar pubsuffix = require('./pubsuffix-psl');\nvar Store = require('./store').Store;\nvar MemoryCookieStore = require('./memstore').MemoryCookieStore;\nvar pathMatch = require('./pathMatch').pathMatch;\nvar VERSION = require('./version');\n\nvar punycode;\ntry {\n punycode = require('punycode');\n} catch(e) {\n console.warn(\"tough-cookie: can't load punycode; won't use punycode for domain normalization\");\n}\n\n// From RFC6265 S4.1.1\n// note that it excludes \\x3B \";\"\nvar COOKIE_OCTETS = /^[\\x21\\x23-\\x2B\\x2D-\\x3A\\x3C-\\x5B\\x5D-\\x7E]+$/;\n\nvar CONTROL_CHARS = /[\\x00-\\x1F]/;\n\n// From Chromium // '\\r', '\\n' and '\\0' should be treated as a terminator in\n// the \"relaxed\" mode, see:\n// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60\nvar TERMINATORS = ['\\n', '\\r', '\\0'];\n\n// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or \";\"'\n// Note ';' is \\x3B\nvar PATH_VALUE = /[\\x20-\\x3A\\x3C-\\x7E]+/;\n\n// date-time parsing constants (RFC6265 S5.1.1)\n\nvar DATE_DELIM = /[\\x09\\x20-\\x2F\\x3B-\\x40\\x5B-\\x60\\x7B-\\x7E]/;\n\nvar MONTH_TO_NUM = {\n jan:0, feb:1, mar:2, apr:3, may:4, jun:5,\n jul:6, aug:7, sep:8, oct:9, nov:10, dec:11\n};\nvar NUM_TO_MONTH = [\n 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'\n];\nvar NUM_TO_DAY = [\n 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'\n];\n\nvar MAX_TIME = 2147483647000; // 31-bit max\nvar MIN_TIME = 0; // 31-bit min\n\n/*\n * Parses a Natural number (i.e., non-negative integer) with either the\n * *DIGIT ( non-digit *OCTET )\n * or\n * *DIGIT\n * grammar (RFC6265 S5.1.1).\n *\n * The \"trailingOK\" boolean controls if the grammar accepts a\n * \"( non-digit *OCTET )\" trailer.\n */\nfunction parseDigits(token, minDigits, maxDigits, trailingOK) {\n var count = 0;\n while (count < token.length) {\n var c = token.charCodeAt(count);\n // \"non-digit = %x00-2F / %x3A-FF\"\n if (c <= 0x2F || c >= 0x3A) {\n break;\n }\n count++;\n }\n\n // constrain to a minimum and maximum number of digits.\n if (count < minDigits || count > maxDigits) {\n return null;\n }\n\n if (!trailingOK && count != token.length) {\n return null;\n }\n\n return parseInt(token.substr(0,count), 10);\n}\n\nfunction parseTime(token) {\n var parts = token.split(':');\n var result = [0,0,0];\n\n /* RF6256 S5.1.1:\n * time = hms-time ( non-digit *OCTET )\n * hms-time = time-field \":\" time-field \":\" time-field\n * time-field = 1*2DIGIT\n */\n\n if (parts.length !== 3) {\n return null;\n }\n\n for (var i = 0; i < 3; i++) {\n // \"time-field\" must be strictly \"1*2DIGIT\", HOWEVER, \"hms-time\" can be\n // followed by \"( non-digit *OCTET )\" so therefore the last time-field can\n // have a trailer\n var trailingOK = (i == 2);\n var num = parseDigits(parts[i], 1, 2, trailingOK);\n if (num === null) {\n return null;\n }\n result[i] = num;\n }\n\n return result;\n}\n\nfunction parseMonth(token) {\n token = String(token).substr(0,3).toLowerCase();\n var num = MONTH_TO_NUM[token];\n return num >= 0 ? num : null;\n}\n\n/*\n * RFC6265 S5.1.1 date parser (see RFC for full grammar)\n */\nfunction parseDate(str) {\n if (!str) {\n return;\n }\n\n /* RFC6265 S5.1.1:\n * 2. Process each date-token sequentially in the order the date-tokens\n * appear in the cookie-date\n */\n var tokens = str.split(DATE_DELIM);\n if (!tokens) {\n return;\n }\n\n var hour = null;\n var minute = null;\n var second = null;\n var dayOfMonth = null;\n var month = null;\n var year = null;\n\n for (var i=0; i= 70 && year <= 99) {\n year += 1900;\n } else if (year >= 0 && year <= 69) {\n year += 2000;\n }\n }\n }\n }\n\n /* RFC 6265 S5.1.1\n * \"5. Abort these steps and fail to parse the cookie-date if:\n * * at least one of the found-day-of-month, found-month, found-\n * year, or found-time flags is not set,\n * * the day-of-month-value is less than 1 or greater than 31,\n * * the year-value is less than 1601,\n * * the hour-value is greater than 23,\n * * the minute-value is greater than 59, or\n * * the second-value is greater than 59.\n * (Note that leap seconds cannot be represented in this syntax.)\"\n *\n * So, in order as above:\n */\n if (\n dayOfMonth === null || month === null || year === null || second === null ||\n dayOfMonth < 1 || dayOfMonth > 31 ||\n year < 1601 ||\n hour > 23 ||\n minute > 59 ||\n second > 59\n ) {\n return;\n }\n\n return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));\n}\n\nfunction formatDate(date) {\n var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;\n var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;\n var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;\n var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;\n return NUM_TO_DAY[date.getUTCDay()] + ', ' +\n d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+\n h+':'+m+':'+s+' GMT';\n}\n\n// S5.1.2 Canonicalized Host Names\nfunction canonicalDomain(str) {\n if (str == null) {\n return null;\n }\n str = str.trim().replace(/^\\./,''); // S4.1.2.3 & S5.2.3: ignore leading .\n\n // convert to IDN if any non-ASCII characters\n if (punycode && /[^\\u0001-\\u007f]/.test(str)) {\n str = punycode.toASCII(str);\n }\n\n return str.toLowerCase();\n}\n\n// S5.1.3 Domain Matching\nfunction domainMatch(str, domStr, canonicalize) {\n if (str == null || domStr == null) {\n return null;\n }\n if (canonicalize !== false) {\n str = canonicalDomain(str);\n domStr = canonicalDomain(domStr);\n }\n\n /*\n * \"The domain string and the string are identical. (Note that both the\n * domain string and the string will have been canonicalized to lower case at\n * this point)\"\n */\n if (str == domStr) {\n return true;\n }\n\n /* \"All of the following [three] conditions hold:\" (order adjusted from the RFC) */\n\n /* \"* The string is a host name (i.e., not an IP address).\" */\n if (net.isIP(str)) {\n return false;\n }\n\n /* \"* The domain string is a suffix of the string\" */\n var idx = str.indexOf(domStr);\n if (idx <= 0) {\n return false; // it's a non-match (-1) or prefix (0)\n }\n\n // e.g \"a.b.c\".indexOf(\"b.c\") === 2\n // 5 === 3+2\n if (str.length !== domStr.length + idx) { // it's not a suffix\n return false;\n }\n\n /* \"* The last character of the string that is not included in the domain\n * string is a %x2E (\".\") character.\" */\n if (str.substr(idx-1,1) !== '.') {\n return false;\n }\n\n return true;\n}\n\n\n// RFC6265 S5.1.4 Paths and Path-Match\n\n/*\n * \"The user agent MUST use an algorithm equivalent to the following algorithm\n * to compute the default-path of a cookie:\"\n *\n * Assumption: the path (and not query part or absolute uri) is passed in.\n */\nfunction defaultPath(path) {\n // \"2. If the uri-path is empty or if the first character of the uri-path is not\n // a %x2F (\"/\") character, output %x2F (\"/\") and skip the remaining steps.\n if (!path || path.substr(0,1) !== \"/\") {\n return \"/\";\n }\n\n // \"3. If the uri-path contains no more than one %x2F (\"/\") character, output\n // %x2F (\"/\") and skip the remaining step.\"\n if (path === \"/\") {\n return path;\n }\n\n var rightSlash = path.lastIndexOf(\"/\");\n if (rightSlash === 0) {\n return \"/\";\n }\n\n // \"4. Output the characters of the uri-path from the first character up to,\n // but not including, the right-most %x2F (\"/\").\"\n return path.slice(0, rightSlash);\n}\n\nfunction trimTerminator(str) {\n for (var t = 0; t < TERMINATORS.length; t++) {\n var terminatorIdx = str.indexOf(TERMINATORS[t]);\n if (terminatorIdx !== -1) {\n str = str.substr(0,terminatorIdx);\n }\n }\n\n return str;\n}\n\nfunction parseCookiePair(cookiePair, looseMode) {\n cookiePair = trimTerminator(cookiePair);\n\n var firstEq = cookiePair.indexOf('=');\n if (looseMode) {\n if (firstEq === 0) { // '=' is immediately at start\n cookiePair = cookiePair.substr(1);\n firstEq = cookiePair.indexOf('='); // might still need to split on '='\n }\n } else { // non-loose mode\n if (firstEq <= 0) { // no '=' or is at start\n return; // needs to have non-empty \"cookie-name\"\n }\n }\n\n var cookieName, cookieValue;\n if (firstEq <= 0) {\n cookieName = \"\";\n cookieValue = cookiePair.trim();\n } else {\n cookieName = cookiePair.substr(0, firstEq).trim();\n cookieValue = cookiePair.substr(firstEq+1).trim();\n }\n\n if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {\n return;\n }\n\n var c = new Cookie();\n c.key = cookieName;\n c.value = cookieValue;\n return c;\n}\n\nfunction parse(str, options) {\n if (!options || typeof options !== 'object') {\n options = {};\n }\n str = str.trim();\n\n // We use a regex to parse the \"name-value-pair\" part of S5.2\n var firstSemi = str.indexOf(';'); // S5.2 step 1\n var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);\n var c = parseCookiePair(cookiePair, !!options.loose);\n if (!c) {\n return;\n }\n\n if (firstSemi === -1) {\n return c;\n }\n\n // S5.2.3 \"unparsed-attributes consist of the remainder of the set-cookie-string\n // (including the %x3B (\";\") in question).\" plus later on in the same section\n // \"discard the first \";\" and trim\".\n var unparsed = str.slice(firstSemi + 1).trim();\n\n // \"If the unparsed-attributes string is empty, skip the rest of these\n // steps.\"\n if (unparsed.length === 0) {\n return c;\n }\n\n /*\n * S5.2 says that when looping over the items \"[p]rocess the attribute-name\n * and attribute-value according to the requirements in the following\n * subsections\" for every item. Plus, for many of the individual attributes\n * in S5.3 it says to use the \"attribute-value of the last attribute in the\n * cookie-attribute-list\". Therefore, in this implementation, we overwrite\n * the previous value.\n */\n var cookie_avs = unparsed.split(';');\n while (cookie_avs.length) {\n var av = cookie_avs.shift().trim();\n if (av.length === 0) { // happens if \";;\" appears\n continue;\n }\n var av_sep = av.indexOf('=');\n var av_key, av_value;\n\n if (av_sep === -1) {\n av_key = av;\n av_value = null;\n } else {\n av_key = av.substr(0,av_sep);\n av_value = av.substr(av_sep+1);\n }\n\n av_key = av_key.trim().toLowerCase();\n\n if (av_value) {\n av_value = av_value.trim();\n }\n\n switch(av_key) {\n case 'expires': // S5.2.1\n if (av_value) {\n var exp = parseDate(av_value);\n // \"If the attribute-value failed to parse as a cookie date, ignore the\n // cookie-av.\"\n if (exp) {\n // over and underflow not realistically a concern: V8's getTime() seems to\n // store something larger than a 32-bit time_t (even with 32-bit node)\n c.expires = exp;\n }\n }\n break;\n\n case 'max-age': // S5.2.2\n if (av_value) {\n // \"If the first character of the attribute-value is not a DIGIT or a \"-\"\n // character ...[or]... If the remainder of attribute-value contains a\n // non-DIGIT character, ignore the cookie-av.\"\n if (/^-?[0-9]+$/.test(av_value)) {\n var delta = parseInt(av_value, 10);\n // \"If delta-seconds is less than or equal to zero (0), let expiry-time\n // be the earliest representable date and time.\"\n c.setMaxAge(delta);\n }\n }\n break;\n\n case 'domain': // S5.2.3\n // \"If the attribute-value is empty, the behavior is undefined. However,\n // the user agent SHOULD ignore the cookie-av entirely.\"\n if (av_value) {\n // S5.2.3 \"Let cookie-domain be the attribute-value without the leading %x2E\n // (\".\") character.\"\n var domain = av_value.trim().replace(/^\\./, '');\n if (domain) {\n // \"Convert the cookie-domain to lower case.\"\n c.domain = domain.toLowerCase();\n }\n }\n break;\n\n case 'path': // S5.2.4\n /*\n * \"If the attribute-value is empty or if the first character of the\n * attribute-value is not %x2F (\"/\"):\n * Let cookie-path be the default-path.\n * Otherwise:\n * Let cookie-path be the attribute-value.\"\n *\n * We'll represent the default-path as null since it depends on the\n * context of the parsing.\n */\n c.path = av_value && av_value[0] === \"/\" ? av_value : null;\n break;\n\n case 'secure': // S5.2.5\n /*\n * \"If the attribute-name case-insensitively matches the string \"Secure\",\n * the user agent MUST append an attribute to the cookie-attribute-list\n * with an attribute-name of Secure and an empty attribute-value.\"\n */\n c.secure = true;\n break;\n\n case 'httponly': // S5.2.6 -- effectively the same as 'secure'\n c.httpOnly = true;\n break;\n\n default:\n c.extensions = c.extensions || [];\n c.extensions.push(av);\n break;\n }\n }\n\n return c;\n}\n\n// avoid the V8 deoptimization monster!\nfunction jsonParse(str) {\n var obj;\n try {\n obj = JSON.parse(str);\n } catch (e) {\n return e;\n }\n return obj;\n}\n\nfunction fromJSON(str) {\n if (!str) {\n return null;\n }\n\n var obj;\n if (typeof str === 'string') {\n obj = jsonParse(str);\n if (obj instanceof Error) {\n return null;\n }\n } else {\n // assume it's an Object\n obj = str;\n }\n\n var c = new Cookie();\n for (var i=0; i 1) {\n var lindex = path.lastIndexOf('/');\n if (lindex === 0) {\n break;\n }\n path = path.substr(0,lindex);\n permutations.push(path);\n }\n permutations.push('/');\n return permutations;\n}\n\nfunction getCookieContext(url) {\n if (url instanceof Object) {\n return url;\n }\n // NOTE: decodeURI will throw on malformed URIs (see GH-32).\n // Therefore, we will just skip decoding for such URIs.\n try {\n url = decodeURI(url);\n }\n catch(err) {\n // Silently swallow error\n }\n\n return urlParse(url);\n}\n\nfunction Cookie(options) {\n options = options || {};\n\n Object.keys(options).forEach(function(prop) {\n if (Cookie.prototype.hasOwnProperty(prop) &&\n Cookie.prototype[prop] !== options[prop] &&\n prop.substr(0,1) !== '_')\n {\n this[prop] = options[prop];\n }\n }, this);\n\n this.creation = this.creation || new Date();\n\n // used to break creation ties in cookieCompare():\n Object.defineProperty(this, 'creationIndex', {\n configurable: false,\n enumerable: false, // important for assert.deepEqual checks\n writable: true,\n value: ++Cookie.cookiesCreated\n });\n}\n\nCookie.cookiesCreated = 0; // incremented each time a cookie is created\n\nCookie.parse = parse;\nCookie.fromJSON = fromJSON;\n\nCookie.prototype.key = \"\";\nCookie.prototype.value = \"\";\n\n// the order in which the RFC has them:\nCookie.prototype.expires = \"Infinity\"; // coerces to literal Infinity\nCookie.prototype.maxAge = null; // takes precedence over expires for TTL\nCookie.prototype.domain = null;\nCookie.prototype.path = null;\nCookie.prototype.secure = false;\nCookie.prototype.httpOnly = false;\nCookie.prototype.extensions = null;\n\n// set by the CookieJar:\nCookie.prototype.hostOnly = null; // boolean when set\nCookie.prototype.pathIsDefault = null; // boolean when set\nCookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse\nCookie.prototype.lastAccessed = null; // Date when set\nObject.defineProperty(Cookie.prototype, 'creationIndex', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: 0\n});\n\nCookie.serializableProperties = Object.keys(Cookie.prototype)\n .filter(function(prop) {\n return !(\n Cookie.prototype[prop] instanceof Function ||\n prop === 'creationIndex' ||\n prop.substr(0,1) === '_'\n );\n });\n\nCookie.prototype.inspect = function inspect() {\n var now = Date.now();\n return 'Cookie=\"'+this.toString() +\n '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +\n '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +\n '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +\n '\"';\n};\n\n// Use the new custom inspection symbol to add the custom inspect function if\n// available.\nif (util.inspect.custom) {\n Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;\n}\n\nCookie.prototype.toJSON = function() {\n var obj = {};\n\n var props = Cookie.serializableProperties;\n for (var i=0; i