diff --git a/package-lock.json b/package-lock.json index 3facef2..f5536e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,30 @@ { "name": "@movie-web/providers", - "version": "2.1.0", + "version": "2.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@movie-web/providers", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT", "dependencies": { "cheerio": "^1.0.0-rc.12", + "cookie": "^0.6.0", "crypto-js": "^4.1.1", "form-data": "^4.0.0", "iso-639-1": "^3.1.0", "nanoid": "^3.3.6", "node-fetch": "^2.7.0", + "set-cookie-parser": "^2.6.0", "unpacker": "^1.0.1" }, "devDependencies": { + "@types/cookie": "^0.6.0", "@types/crypto-js": "^4.1.1", "@types/node-fetch": "^2.6.6", "@types/randombytes": "^2.0.1", + "@types/set-cookie-parser": "^2.4.7", "@types/spinnies": "^0.5.1", "@typescript-eslint/eslint-plugin": "^5.60.0", "@typescript-eslint/parser": "^5.60.0", @@ -687,6 +691,12 @@ "@types/chai": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true + }, "node_modules/@types/crypto-js": { "version": "4.2.1", "dev": true, @@ -751,6 +761,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz", + "integrity": "sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/spinnies": { "version": "0.5.3", "dev": true, @@ -1764,6 +1783,14 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -4789,6 +4816,11 @@ "node": ">=10" } }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + }, "node_modules/set-function-length": { "version": "1.1.1", "dev": true, diff --git a/package.json b/package.json index 25c4d07..f21eb89 100644 --- a/package.json +++ b/package.json @@ -48,9 +48,11 @@ "prepublishOnly": "npm test && npm run lint" }, "devDependencies": { + "@types/cookie": "^0.6.0", "@types/crypto-js": "^4.1.1", "@types/node-fetch": "^2.6.6", "@types/randombytes": "^2.0.1", + "@types/set-cookie-parser": "^2.4.7", "@types/spinnies": "^0.5.1", "@typescript-eslint/eslint-plugin": "^5.60.0", "@typescript-eslint/parser": "^5.60.0", @@ -80,11 +82,13 @@ }, "dependencies": { "cheerio": "^1.0.0-rc.12", + "cookie": "^0.6.0", "crypto-js": "^4.1.1", "form-data": "^4.0.0", "iso-639-1": "^3.1.0", "nanoid": "^3.3.6", "node-fetch": "^2.7.0", + "set-cookie-parser": "^2.6.0", "unpacker": "^1.0.1" } } diff --git a/src/entrypoint/utils/cookie.ts b/src/entrypoint/utils/cookie.ts index 4f2fcbe..20fd3e4 100644 --- a/src/entrypoint/utils/cookie.ts +++ b/src/entrypoint/utils/cookie.ts @@ -1,3 +1,6 @@ +import cookie from 'cookie'; +import setCookieParser from 'set-cookie-parser'; + export interface Cookie { name: string; value: string; @@ -5,18 +8,13 @@ export interface Cookie { export function makeCookieHeader(cookies: Record): string { return Object.entries(cookies) - .map(([name, value]) => `${name}=${value}`) + .map(([name, value]) => cookie.serialize(name, value)) .join('; '); } export function parseSetCookie(headerValue: string): Record { - const cookies: Record = {}; - const parts = headerValue.split(/; */); - for (const part of parts) { - const [name, value] = part.split('='); - if (name && value) { - cookies[name] = { name, value }; - } - } - return cookies; + const parsedCookies = setCookieParser.parse(headerValue, { + map: true, + }); + return parsedCookies; }