UNPKG

linkedin-private-api-node12

Version:

![Build](https://github.com/eilonmore/linkedin-private-api/workflows/Build/badge.svg?branch=master)

80 lines 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Login = void 0; const cookie_1 = require("cookie"); const fs_1 = require("fs"); const lodash_1 = require("lodash"); const config_1 = require("../../config"); const SESSIONS_PATH = `${process.cwd()}/sessions.json`; const parseCookies = (cookies) => cookies.reduce((res, c) => { let parsedCookie = cookie_1.parse(c); parsedCookie = lodash_1.pickBy(parsedCookie, (v, k) => k === Object.keys(parsedCookie)[0]); return lodash_1.merge(res, parsedCookie); }, {}); class Login { constructor({ client }) { this.client = client; } setRequestHeaders({ cookies }) { const cookieStr = lodash_1.reduce(cookies, (res, v, k) => `${res}${k}="${v}"; `, ''); this.client.request.setHeaders({ ...config_1.requestHeaders, cookie: cookieStr, 'csrf-token': cookies.JSESSIONID, }); } async readCacheFile() { let cachedSessions; try { const sessionsBuffer = (await fs_1.promises.readFile(SESSIONS_PATH).catch(() => fs_1.promises.writeFile(SESSIONS_PATH, '{}'))) || '{}'; cachedSessions = JSON.parse(sessionsBuffer.toString()); } catch (err) { cachedSessions = {}; } return cachedSessions; } tryCacheLogin({ useCache = true, cachedSessions, username, }) { if (!useCache) { return false; } if (!username) { throw new TypeError('Must provide username when useCache option is true'); } const cookies = cachedSessions[username]; if (cookies) { this.setRequestHeaders({ cookies }); return true; } return false; } async userPass({ username, password, useCache = true, }) { const cachedSessions = await this.readCacheFile(); if (this.tryCacheLogin({ useCache, cachedSessions, username })) { return this.client; } if (!password) { throw new TypeError('password is required for login'); } const anonymousAuthResponse = await this.client.request.auth.getAnonymousAuth(); const sessionId = parseCookies(anonymousAuthResponse.headers['set-cookie']).JSESSIONID; const authRes = await this.client.request.auth.authenticateUser({ username, password, sessionId }); const parsedCookies = parseCookies(authRes.headers['set-cookie']); fs_1.promises.writeFile(SESSIONS_PATH, JSON.stringify({ ...cachedSessions, [username]: parsedCookies })); this.setRequestHeaders({ cookies: parsedCookies }); return this.client; } async userCookie({ username, cookies, useCache = true, }) { const cachedSessions = await this.readCacheFile(); if (this.tryCacheLogin({ useCache, cachedSessions, username })) { return this.client; } this.setRequestHeaders({ cookies }); if (username) { fs_1.promises.writeFile(SESSIONS_PATH, JSON.stringify({ ...cachedSessions, [username]: cookies })); } return this.client; } } exports.Login = Login; //# sourceMappingURL=login.js.map