diff --git a/src/modules/processing/cookie/cookie.js b/src/modules/processing/cookie/cookie.js index 996ab7c7..6dd95fc3 100644 --- a/src/modules/processing/cookie/cookie.js +++ b/src/modules/processing/cookie/cookie.js @@ -20,13 +20,13 @@ export default class Cookie { str.split('; ').forEach(cookie => { const key = cookie.split('=')[0]; const value = cookie.split('=').splice(1).join('='); - obj[key] = decodeURIComponent(value) + obj[key] = value }) return new Cookie(obj) } toString() { - return Object.entries(this._values).map(([ name, value ]) => `${name}=${encodeURIComponent(value)}`).join('; ') + return Object.entries(this._values).map(([ name, value ]) => `${name}=${value}`).join('; ') } toJSON() { return this.toString() diff --git a/src/modules/processing/cookie/manager.js b/src/modules/processing/cookie/manager.js index 4efb0b45..6ea05561 100644 --- a/src/modules/processing/cookie/manager.js +++ b/src/modules/processing/cookie/manager.js @@ -49,11 +49,13 @@ export function getCookie(service) { export function updateCookie(cookie, headers) { if (!cookie) return; - const parsed = parseSetCookie(splitCookiesString(headers.get('set-cookie'))), - values = {} + const parsed = parseSetCookie( + splitCookiesString(headers.get('set-cookie')), + { decodeValues: false } + ), values = {} cookie.unset(parsed.filter(c => c.expires < new Date()).map(c => c.name)); - parsed.filter(c => c.expires > new Date()).forEach(c => values[c.name] = c.value); + parsed.filter(c => !c.expires || c.expires > new Date()).forEach(c => values[c.name] = c.value); cookie.set(values); if (Object.keys(values).length) dirty = true diff --git a/src/modules/processing/services/instagram.js b/src/modules/processing/services/instagram.js index 459ac3e0..9614bd94 100644 --- a/src/modules/processing/services/instagram.js +++ b/src/modules/processing/services/instagram.js @@ -23,6 +23,9 @@ export default async function(obj) { 'User-Agent': genericUserAgent, 'X-Ig-App-Id': '936619743392459', 'X-Asbd-Id': '129477', + 'x-ig-www-claim': cookie?._wwwClaim || '0', + 'x-csrftoken': cookie?.values()?.csrftoken, + 'x-requested-with': 'XMLHttpRequest', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', @@ -32,6 +35,11 @@ export default async function(obj) { cookie } }) + + if (data.headers.get('X-Ig-Set-Www-Claim') && cookie) { + cookie._wwwClaim = data.headers.get('X-Ig-Set-Www-Claim'); + } + updateCookie(cookie, data.headers); data = (await data.json()).data; } catch (e) {