├── .github ├── ISSUE_TEMPLATE │ ├── bug.yml │ ├── config.yml │ ├── docs.yml │ ├── feature_request.yml │ └── other.yml └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .npmignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── dist ├── enums │ ├── linkedin.errors.d.ts │ ├── linkedin.errors.js │ └── linkedin.errors.js.map ├── helpers │ ├── autoScroll.d.ts │ ├── autoScroll.js │ ├── autoScroll.js.map │ ├── capitalize.d.ts │ ├── capitalize.js │ ├── capitalize.js.map │ ├── colors.d.ts │ ├── colors.js │ ├── colors.js.map │ ├── create.linkedin.url.d.ts │ ├── create.linkedin.url.js │ ├── create.linkedin.url.js.map │ ├── gotoUrl.d.ts │ ├── gotoUrl.js │ ├── gotoUrl.js.map │ ├── linkedin.show.mouse.d.ts │ ├── linkedin.show.mouse.js │ ├── linkedin.show.mouse.js.map │ ├── load-cursor.d.ts │ ├── load-cursor.js │ ├── load-cursor.js.map │ ├── make.id.d.ts │ ├── make.id.js │ ├── make.id.js.map │ ├── messages.service.d.ts │ ├── messages.service.js │ ├── messages.service.js.map │ ├── show.mouse.d.ts │ ├── show.mouse.js │ ├── show.mouse.js.map │ ├── timer.d.ts │ ├── timer.js │ └── timer.js.map ├── linkedin.service.d.ts ├── linkedin.service.js ├── linkedin.service.js.map ├── linkedin │ ├── linkedin.abstract.service.d.ts │ ├── linkedin.abstract.service.js │ ├── linkedin.abstract.service.js.map │ ├── linkedin.accepted.connection.request.service.d.ts │ ├── linkedin.accepted.connection.request.service.js │ ├── linkedin.accepted.connection.request.service.js.map │ ├── linkedin.connect.service.d.ts │ ├── linkedin.connect.service.js │ ├── linkedin.connect.service.js.map │ ├── linkedin.email.service.d.ts │ ├── linkedin.email.service.js │ ├── linkedin.email.service.js.map │ ├── linkedin.endorse.service.d.ts │ ├── linkedin.endorse.service.js │ ├── linkedin.endorse.service.js.map │ ├── linkedin.engagement.service.d.ts │ ├── linkedin.engagement.service.js │ ├── linkedin.engagement.service.js.map │ ├── linkedin.global.page.service.d.ts │ ├── linkedin.global.page.service.js │ ├── linkedin.global.page.service.js.map │ ├── linkedin.like.service.d.ts │ ├── linkedin.like.service.js │ ├── linkedin.like.service.js.map │ ├── linkedin.login.service.d.ts │ ├── linkedin.login.service.js │ ├── linkedin.login.service.js.map │ ├── linkedin.message.service.d.ts │ ├── linkedin.message.service.js │ ├── linkedin.message.service.js.map │ ├── linkedin.message.with.view.d.ts │ ├── linkedin.message.with.view.js │ ├── linkedin.message.with.view.js.map │ ├── linkedin.messages.from.chat.d.ts │ ├── linkedin.messages.from.chat.js │ ├── linkedin.messages.from.chat.js.map │ ├── linkedin.messages.service.d.ts │ ├── linkedin.messages.service.js │ ├── linkedin.messages.service.js.map │ ├── linkedin.page.service.d.ts │ ├── linkedin.page.service.js │ ├── linkedin.page.service.js.map │ ├── linkedin.profileViews.service.d.ts │ ├── linkedin.profileViews.service.js │ ├── linkedin.profileViews.service.js.map │ ├── linkedin.sales.page.service.d.ts │ ├── linkedin.sales.page.service.js │ ├── linkedin.sales.page.service.js.map │ ├── linkedin.services.interface.d.ts │ ├── linkedin.services.interface.js │ ├── linkedin.services.interface.js.map │ ├── linkedin.visit.service.d.ts │ ├── linkedin.visit.service.js │ └── linkedin.visit.service.js.map └── tsconfig.tsbuildinfo ├── lib ├── enums │ └── linkedin.errors.ts ├── helpers │ ├── autoScroll.ts │ ├── capitalize.ts │ ├── colors.ts │ ├── create.linkedin.url.ts │ ├── gotoUrl.ts │ ├── linkedin.show.mouse.ts │ ├── load-cursor.ts │ ├── make.id.ts │ ├── messages.service.ts │ ├── show.mouse.ts │ └── timer.ts ├── linkedin.service.ts ├── linkedin │ ├── linkedin.abstract.service.ts │ ├── linkedin.accepted.connection.request.service.ts │ ├── linkedin.connect.service.ts │ ├── linkedin.email.service.ts │ ├── linkedin.endorse.service.ts │ ├── linkedin.engagement.service.ts │ ├── linkedin.global.page.service.ts │ ├── linkedin.like.service.ts │ ├── linkedin.login.service.ts │ ├── linkedin.message.service.ts │ ├── linkedin.message.with.view.ts │ ├── linkedin.messages.from.chat.ts │ ├── linkedin.messages.service.ts │ ├── linkedin.page.service.ts │ ├── linkedin.profileViews.service.ts │ ├── linkedin.sales.page.service.ts │ ├── linkedin.services.interface.ts │ └── linkedin.visit.service.ts └── test.example.ts ├── package-lock.json ├── package.json └── tsconfig.json /.github/ISSUE_TEMPLATE/bug.yml: -------------------------------------------------------------------------------- 1 | name: 🐛 Bug 2 | description: Report an issue to help improve the project. 3 | labels: ["bug"] 4 | body: 5 | - type: textarea 6 | id: description 7 | attributes: 8 | label: Description 9 | description: A brief description of the question or issue, also include what you tried and what didn't work 10 | validations: 11 | required: true 12 | - type: textarea 13 | id: screenshots 14 | attributes: 15 | label: Screenshots 16 | description: Please add screenshots if applicable 17 | validations: 18 | required: false 19 | - type: textarea 20 | id: extrainfo 21 | attributes: 22 | label: Additional information 23 | description: Is there anything else we should know about this bug? 24 | validations: 25 | required: false 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/docs.yml: -------------------------------------------------------------------------------- 1 | name: 📄 Documentation issue 2 | description: Found an issue in the documentation? You can use this one! 3 | title: "[DOCS] " 4 | labels: ["documentation"] 5 | body: 6 | - type: textarea 7 | id: description 8 | attributes: 9 | label: Description 10 | description: A brief description of the question or issue, also include what you tried and what didn't work 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: screenshots 15 | attributes: 16 | label: Screenshots 17 | description: Please add screenshots if applicable 18 | validations: 19 | required: false 20 | - type: textarea 21 | id: extrainfo 22 | attributes: 23 | label: Additional information 24 | description: Is there anything else we should know about this issue? 25 | validations: 26 | required: false 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: 💡 General Feature Request 2 | description: Have a new idea/feature for linvo-scraper? Please suggest! 3 | title: "[FEATURE] " 4 | labels: ["enhancement"] 5 | body: 6 | - type: textarea 7 | id: description 8 | attributes: 9 | label: Description 10 | description: A brief description of the enhancement you propose, also include what you tried and what worked. 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: screenshots 15 | attributes: 16 | label: Screenshots 17 | description: Please add screenshots if applicable 18 | validations: 19 | required: false 20 | - type: textarea 21 | id: extrainfo 22 | attributes: 23 | label: Additional information 24 | description: Is there anything else we should know about this idea? 25 | validations: 26 | required: false 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.yml: -------------------------------------------------------------------------------- 1 | name: Other 2 | description: Use this for any other issues. Please do NOT create blank issues 3 | title: "[OTHER] " 4 | 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: "# Other issue" 9 | - type: textarea 10 | id: issuedescription 11 | attributes: 12 | label: What would you like to share? 13 | description: Provide a clear and concise explanation of your issue. 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: extrainfo 18 | attributes: 19 | label: Additional information 20 | description: Is there anything else we should know about this issue? 21 | validations: 22 | required: false 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | --- 5 | ## Issue Ticket Number 6 | Fixes #(issue_number) 7 | 8 | --- 9 | ## Type of change 10 | 11 | - [ ] Bug fix (non-breaking change which fixes an issue) 12 | - [ ] New feature (non-breaking change which adds functionality) 13 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 14 | - [ ] This change requires a documentation update 15 | 16 | --- 17 | # Checklist: 18 | - [ ] I have followed the contributing guidelines of this project as mentioned in [CONTRIBUTING.md](/CONTRIBUTING.md) 19 | - [ ] I have checked to ensure there aren't other open [Pull Requests](https://github.com/linvo-io/linvo-scraper/pulls) for the same update/change? 20 | - [ ] I have performed a self-review of my own code 21 | - [ ] I have commented my code, particularly in hard-to-understand areas 22 | - [ ] I have made corresponding changes needed to the documentation -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | lib/test.ts 3 | dist/test.* 4 | node_modules 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | !dist -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | [GitHub Issues](https://github.com/linvo-io/linvo-scraper/issues/new). 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute to Linvo 2 | 3 | ## Setup 4 | 5 | 1. Clone the project 6 | 2. Install using "npm install" 7 | 3. Go to the lib folder and copy the file test.example.ts to test.ts 8 | 4. Write a new LinkedIn service and test it inside of test.ts 9 | 5. Run your test with "npm run start" 10 | 11 | ## Building 12 | 13 | Run "npm run build" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Nevo David 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | logo 4 | 5 |

6 |

Welcome to Linvo Linkedin Scraper

7 |

8 | 9 | License: MIT License 10 | 11 |

12 | 13 | Here you can find secure scraping using Puppeteer for different Linkedin actions 14 | - [x] Login 15 | - [x] Scrape profiles: Sales Nav / Normal 16 | - [x] Connection Request 17 | - [x] Follow message 18 | - [x] Endorse Profile 19 | - [x] Visit Profile 20 | - [x] Like posts 21 | - [x] Random Engagement 22 | 23 | ## Install 24 | 25 | ```sh 26 | npm install linvo-scraper puppeteer --save 27 | ``` 28 | 29 | ## Usage 30 | 31 | ```javascript 32 | import * as LinvoScraper from 'linvo-scraper'; 33 | import * as puppeteer from 'puppeteer'; 34 | 35 | (async () => { 36 | const browser = await puppeteer.launch({ 37 | headless: false 38 | }); 39 | const page = (await browser.newPage()); 40 | const cdp = await page.target().createCDPSession(); 41 | 42 | // that's the res Linvo is working in production 43 | await page.setViewport({ 44 | width: 1440, 45 | height: 900, 46 | }); 47 | 48 | // add ghost-cursor for maximum safety 49 | await LinvoScraper.tools.loadCursor(page, true); 50 | 51 | // Login with Linkedin 52 | const {token} = await LinvoScraper.services.login.process(page, cdp, { 53 | user: 'bang@linvo.io', 54 | password: 'superStrongPass!!%' 55 | }) 56 | 57 | // set cookies 58 | await page.setCookie({ 59 | name: "li_at", 60 | value: token, 61 | httpOnly: true, 62 | secure: true, 63 | sameSite: "None", 64 | priority: "Medium", 65 | path: "/", 66 | domain: ".www.linkedin.com", 67 | }); 68 | 69 | await LinvoScraper.services.connect.process(page, cdp, { 70 | message: 'Hi Nevo! Let\'s connect!', 71 | url: 'https://www.linkedin.com/in/nevo-david/' 72 | }) 73 | })(); 74 | ``` 75 | 76 | ## Who made this project 77 | 78 | This project was made by [Linvo](https://linvo.io) - The Safest Linkedin Automation Tool, and being maintained by [Nevo David](https://github.com/nevo-david) 79 | Any contribution is welcomed! 80 | 81 | ## 🤝 Contributing 82 | 83 | [Please check our Contribution guide to get started!](https://github.com/linvo-io/linvo-scraper/blob/main/CONTRIBUTING.md) 84 | 85 | Contributions, issues and feature requests are welcome!
Feel free to check [issues page](https://github.com/linvo-io/linvo-scraper/issues?q=is%3Aopen). 86 | * Fork the repository, Clone it on your device. That's it 🎉 87 | * Finally make a pull request :) 88 | 89 | ## 📝 License 90 | 91 | This project is [MIT License](https://opensource.org/licenses/MIT) licensed. 92 | 93 | *** 94 | We accept contribution with great love! Show your interest! Contribute! 95 | 96 | From the creator of [Postiz](https://postiz.com) 97 | 98 | [How to get GitHub stars](https://howtogetgithubstars.com) 99 | -------------------------------------------------------------------------------- /dist/enums/linkedin.errors.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum LINKEDIN_ERRORS { 2 | DISCONNECTED = 0, 3 | INVALID_CREDENTIALS = 1, 4 | DELAY = 2 5 | } 6 | export declare class LinkedinErrors { 7 | text: string; 8 | url?: string; 9 | additional?: { 10 | values: LINKEDIN_ERRORS; 11 | more?: any; 12 | }; 13 | constructor(text: string, url?: string, additional?: { 14 | values: LINKEDIN_ERRORS; 15 | more?: any; 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /dist/enums/linkedin.errors.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinErrors = exports.LINKEDIN_ERRORS = void 0; 4 | var LINKEDIN_ERRORS; 5 | (function (LINKEDIN_ERRORS) { 6 | LINKEDIN_ERRORS[LINKEDIN_ERRORS["DISCONNECTED"] = 0] = "DISCONNECTED"; 7 | LINKEDIN_ERRORS[LINKEDIN_ERRORS["INVALID_CREDENTIALS"] = 1] = "INVALID_CREDENTIALS"; 8 | LINKEDIN_ERRORS[LINKEDIN_ERRORS["DELAY"] = 2] = "DELAY"; 9 | })(LINKEDIN_ERRORS = exports.LINKEDIN_ERRORS || (exports.LINKEDIN_ERRORS = {})); 10 | class LinkedinErrors { 11 | constructor(text, url, additional) { 12 | this.text = text; 13 | this.url = url; 14 | this.additional = additional; 15 | } 16 | } 17 | exports.LinkedinErrors = LinkedinErrors; 18 | //# sourceMappingURL=linkedin.errors.js.map -------------------------------------------------------------------------------- /dist/enums/linkedin.errors.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.errors.js","sourceRoot":"","sources":["../../lib/enums/linkedin.errors.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,qEAAY,CAAA;IACZ,mFAAmB,CAAA;IACnB,uDAAK,CAAA;AACP,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B;AAED,MAAa,cAAc;IACzB,YACS,IAAY,EACZ,GAAY,EACZ,UAAoD;QAFpD,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAS;QACZ,eAAU,GAAV,UAAU,CAA0C;IAC1D,CAAC;CACL;AAND,wCAMC"} -------------------------------------------------------------------------------- /dist/helpers/autoScroll.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | export declare function autoScroll(page: Page): Promise; 3 | -------------------------------------------------------------------------------- /dist/helpers/autoScroll.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.autoScroll = void 0; 4 | async function autoScroll(page) { 5 | await page.evaluate(() => new Promise((resolve) => { 6 | var scrollTop = -1; 7 | const interval = setInterval(() => { 8 | window.scrollBy(0, 100); 9 | if (document.documentElement.scrollTop !== scrollTop) { 10 | scrollTop = document.documentElement.scrollTop; 11 | return false; 12 | } 13 | clearInterval(interval); 14 | resolve(void {}); 15 | }, 150); 16 | })); 17 | } 18 | exports.autoScroll = autoScroll; 19 | //# sourceMappingURL=autoScroll.js.map -------------------------------------------------------------------------------- /dist/helpers/autoScroll.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"autoScroll.js","sourceRoot":"","sources":["../../lib/helpers/autoScroll.ts"],"names":[],"mappings":";;;AAGO,KAAK,UAAU,UAAU,CAAC,IAAU;IACzC,MAAM,IAAI,CAAC,QAAQ,CACjB,GAAG,EAAE,CACH,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACtB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,EAAE;gBACpD,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;gBAC/C,OAAO,KAAK,CAAC;aACd;YACD,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAhBD,gCAgBC"} -------------------------------------------------------------------------------- /dist/helpers/capitalize.d.ts: -------------------------------------------------------------------------------- 1 | export declare const capitalize: (s: string) => string; 2 | -------------------------------------------------------------------------------- /dist/helpers/capitalize.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.capitalize = void 0; 4 | const capitalize = (s) => { 5 | if (typeof s !== 'string') 6 | return ''; 7 | return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); 8 | }; 9 | exports.capitalize = capitalize; 10 | //# sourceMappingURL=capitalize.js.map -------------------------------------------------------------------------------- /dist/helpers/capitalize.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"capitalize.js","sourceRoot":"","sources":["../../lib/helpers/capitalize.ts"],"names":[],"mappings":";;;AAAO,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE;IACtC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9D,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB"} -------------------------------------------------------------------------------- /dist/helpers/colors.d.ts: -------------------------------------------------------------------------------- 1 | interface String { 2 | black(): string; 3 | red(): string; 4 | green(): string; 5 | yellow(): string; 6 | blue(): string; 7 | magenta(): string; 8 | cyan(): string; 9 | white(): string; 10 | } 11 | declare const Reset = "\u001B[0m"; 12 | declare const colorWithReset: (color: string, str: string) => string; 13 | -------------------------------------------------------------------------------- /dist/helpers/colors.js: -------------------------------------------------------------------------------- 1 | const Reset = '\u001b[0m'; 2 | const colorWithReset = (color, str) => color + str + Reset; 3 | String.prototype.black = function () { 4 | return colorWithReset('\u001b[30m', this); 5 | }; 6 | String.prototype.red = function () { 7 | return colorWithReset('\u001b[31m', this); 8 | }; 9 | String.prototype.yellow = function () { 10 | return colorWithReset('\u001b[33m', this); 11 | }; 12 | String.prototype.green = function () { 13 | return colorWithReset('\u001b[32m', this); 14 | }; 15 | String.prototype.blue = function () { 16 | return colorWithReset('\u001b[34m', this); 17 | }; 18 | String.prototype.magenta = function () { 19 | return colorWithReset('\u001b[35m', this); 20 | }; 21 | String.prototype.cyan = function () { 22 | return colorWithReset('\u001b[36m', this); 23 | }; 24 | String.prototype.white = function () { 25 | return colorWithReset('\u001b[37m', this); 26 | }; 27 | //# sourceMappingURL=colors.js.map -------------------------------------------------------------------------------- /dist/helpers/colors.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../lib/helpers/colors.ts"],"names":[],"mappings":"AAYA,MAAM,KAAK,GAAG,WAAW,CAAC;AAE1B,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;AAE3E,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;IACvB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG;IACrB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG;IACxB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;IACvB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;IACtB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG;IACzB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG;IACtB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG;IACvB,OAAO,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC"} -------------------------------------------------------------------------------- /dist/helpers/create.linkedin.url.d.ts: -------------------------------------------------------------------------------- 1 | export declare const createLinkedinLink: (getLink: string, fullLinkedinUrl: boolean) => string; 2 | -------------------------------------------------------------------------------- /dist/helpers/create.linkedin.url.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.createLinkedinLink = void 0; 4 | const createLinkedinLink = (getLink, fullLinkedinUrl) => { 5 | var _a; 6 | if (!getLink || 7 | (getLink.indexOf('/in/') === -1 && getLink.indexOf('/sales/people/') === -1)) { 8 | return ''; 9 | } 10 | const link = (_a = getLink === null || getLink === void 0 ? void 0 : getLink.trim()) === null || _a === void 0 ? void 0 : _a.replace(/\\/g, ''); 11 | const newLink = 'https://www.linkedin.com' + 12 | (link.indexOf('linkedin.com') > -1 ? link.split('linkedin.com')[1] : link); 13 | const prepend = fullLinkedinUrl ? 'https://www.linkedin.com' : ''; 14 | const path = new URL(newLink).pathname; 15 | if (path[path.length - 1] === '/') { 16 | return prepend + path.slice(0, path.length - 1); 17 | } 18 | return prepend + path; 19 | }; 20 | exports.createLinkedinLink = createLinkedinLink; 21 | //# sourceMappingURL=create.linkedin.url.js.map -------------------------------------------------------------------------------- /dist/helpers/create.linkedin.url.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"create.linkedin.url.js","sourceRoot":"","sources":["../../lib/helpers/create.linkedin.url.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAC9B,OAAe,EACf,eAAwB,EAC1B,EAAE;;IACA,IACI,CAAC,OAAO;QACR,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAC9E;QACE,OAAO,EAAE,CAAC;KACb;IACD,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,0CAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GACT,0BAA0B;QAC1B,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QAC/B,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACnD;IAED,OAAO,OAAO,GAAG,IAAI,CAAC;AAC1B,CAAC,CAAC;AArBW,QAAA,kBAAkB,sBAqB7B"} -------------------------------------------------------------------------------- /dist/helpers/gotoUrl.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | export declare const gotoUrl: (page: Page, url: string) => Promise; 3 | -------------------------------------------------------------------------------- /dist/helpers/gotoUrl.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.gotoUrl = void 0; 4 | const gotoUrl = async (page, url) => { 5 | try { 6 | await page.goto(url, { 7 | timeout: 0 8 | }); 9 | } 10 | catch (err) { } 11 | }; 12 | exports.gotoUrl = gotoUrl; 13 | //# sourceMappingURL=gotoUrl.js.map -------------------------------------------------------------------------------- /dist/helpers/gotoUrl.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"gotoUrl.js","sourceRoot":"","sources":["../../lib/helpers/gotoUrl.ts"],"names":[],"mappings":";;;AAEO,MAAM,OAAO,GAAG,KAAK,EAAE,IAAU,EAAE,GAAW,EAAE,EAAE;IACrD,IAAI;QACA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACjB,OAAO,EAAE,CAAC;SACb,CAAC,CAAC;KACN;IACD,OAAO,GAAG,EAAE,GAAE;AAClB,CAAC,CAAA;AAPY,QAAA,OAAO,WAOnB"} -------------------------------------------------------------------------------- /dist/helpers/linkedin.show.mouse.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | export declare function installMouseHelper(page: Page): Promise; 3 | -------------------------------------------------------------------------------- /dist/helpers/linkedin.show.mouse.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.installMouseHelper = void 0; 4 | async function installMouseHelper(page) { 5 | await page.evaluateOnNewDocument(() => { 6 | if (window !== window.parent) 7 | return; 8 | window.addEventListener('DOMContentLoaded', () => { 9 | const box = document.createElement('puppeteer-mouse-pointer'); 10 | const styleElement = document.createElement('style'); 11 | styleElement.innerHTML = ` 12 | puppeteer-mouse-pointer { 13 | pointer-events: none; 14 | position: absolute; 15 | top: 0; 16 | z-index: 1000000000000000; 17 | left: 0; 18 | width: 20px; 19 | height: 20px; 20 | background: rgba(0,0,0,.4); 21 | border: 1px solid white; 22 | border-radius: 10px; 23 | margin: -10px 0 0 -10px; 24 | padding: 0; 25 | transition: background .2s, border-radius .2s, border-color .2s; 26 | } 27 | puppeteer-mouse-pointer.button-1 { 28 | transition: none; 29 | background: rgba(0,0,0,0.9); 30 | } 31 | puppeteer-mouse-pointer.button-2 { 32 | transition: none; 33 | border-color: rgba(0,0,255,0.9); 34 | } 35 | puppeteer-mouse-pointer.button-3 { 36 | transition: none; 37 | border-radius: 4px; 38 | } 39 | puppeteer-mouse-pointer.button-4 { 40 | transition: none; 41 | border-color: rgba(255,0,0,0.9); 42 | } 43 | puppeteer-mouse-pointer.button-5 { 44 | transition: none; 45 | border-color: rgba(0,255,0,0.9); 46 | } 47 | `; 48 | document.head.appendChild(styleElement); 49 | document.body.appendChild(box); 50 | document.addEventListener('mousemove', (event) => { 51 | box.style.left = event.pageX + 'px'; 52 | box.style.top = event.pageY + 'px'; 53 | updateButtons(event.buttons); 54 | }, true); 55 | document.addEventListener('mousedown', (event) => { 56 | updateButtons(event.buttons); 57 | box.classList.add('button-' + event.which); 58 | }, true); 59 | document.addEventListener('mouseup', (event) => { 60 | updateButtons(event.buttons); 61 | box.classList.remove('button-' + event.which); 62 | }, true); 63 | function updateButtons(buttons) { 64 | for (let i = 0; i < 5; i++) { 65 | box.classList.toggle('button-' + i, buttons & (1 << i)); 66 | } 67 | } 68 | }, false); 69 | }); 70 | } 71 | exports.installMouseHelper = installMouseHelper; 72 | //# sourceMappingURL=linkedin.show.mouse.js.map -------------------------------------------------------------------------------- /dist/helpers/linkedin.show.mouse.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.show.mouse.js","sourceRoot":"","sources":["../../lib/helpers/linkedin.show.mouse.ts"],"names":[],"mappings":";;;AAEO,KAAK,UAAU,kBAAkB,CAAC,IAAU;IACjD,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE;QAEpC,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,OAAO;QACrC,MAAM,CAAC,gBAAgB,CACrB,kBAAkB,EAClB,GAAG,EAAE;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,YAAY,CAAC,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoC1B,CAAC;YACA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,QAAQ,CAAC,gBAAgB,CACvB,WAAW,EACX,CAAC,KAAK,EAAE,EAAE;gBACR,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC,EACD,IAAI,CACL,CAAC;YACF,QAAQ,CAAC,gBAAgB,CACvB,WAAW,EACX,CAAC,KAAK,EAAE,EAAE;gBACR,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC,EACD,IAAI,CACL,CAAC;YACF,QAAQ,CAAC,gBAAgB,CACvB,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;gBACR,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC,EACD,IAAI,CACL,CAAC;YACF,SAAS,aAAa,CAAC,OAAY;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAE1B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACzD;YACH,CAAC;QACH,CAAC,EACD,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAnFD,gDAmFC"} -------------------------------------------------------------------------------- /dist/helpers/load-cursor.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | declare const loadCursor: (page: Page, headless: boolean) => Promise; 3 | export default loadCursor; 4 | -------------------------------------------------------------------------------- /dist/helpers/load-cursor.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | const show_mouse_1 = require("./show.mouse"); 4 | const ghost_cursor_1 = require("ghost-cursor"); 5 | const loadCursor = async (page, headless) => { 6 | if (!headless) { 7 | await (0, show_mouse_1.installMouseHelper)(page); 8 | } 9 | page.cursor = await (0, ghost_cursor_1.createCursor)(page); 10 | }; 11 | exports.default = loadCursor; 12 | //# sourceMappingURL=load-cursor.js.map -------------------------------------------------------------------------------- /dist/helpers/load-cursor.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"load-cursor.js","sourceRoot":"","sources":["../../lib/helpers/load-cursor.ts"],"names":[],"mappings":";;AACA,6CAAgD;AAChD,+CAA0C;AAE1C,MAAM,UAAU,GAAG,KAAK,EAAE,IAAU,EAAE,QAAiB,EAAE,EAAE;IACvD,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAA,+BAAkB,EAAC,IAAI,CAAC,CAAC;KAClC;IAGD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAA,2BAAY,EAAC,IAAI,CAAC,CAAC;AAC3C,CAAC,CAAA;AAED,kBAAe,UAAU,CAAC"} -------------------------------------------------------------------------------- /dist/helpers/make.id.d.ts: -------------------------------------------------------------------------------- 1 | export declare function makeid(size?: number): string; 2 | -------------------------------------------------------------------------------- /dist/helpers/make.id.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.makeid = void 0; 4 | function makeid(size = 5) { 5 | let text = ''; 6 | const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 7 | for (let i = 0; i < size; i++) 8 | text += possible.charAt(Math.floor(Math.random() * possible.length)); 9 | return text; 10 | } 11 | exports.makeid = makeid; 12 | //# sourceMappingURL=make.id.js.map -------------------------------------------------------------------------------- /dist/helpers/make.id.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"make.id.js","sourceRoot":"","sources":["../../lib/helpers/make.id.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAC,OAAe,CAAC;IACrC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,sDAAsD,CAAC;IAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;QAC3B,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvE,OAAO,IAAI,CAAC;AACd,CAAC;AARD,wBAQC"} -------------------------------------------------------------------------------- /dist/helpers/messages.service.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from 'puppeteer'; 2 | interface MessageOptions { 3 | label: string; 4 | value: string; 5 | } 6 | export declare class MessagesService { 7 | static _replace(content: string, name: string, value: string): string; 8 | messagesList(prospectName: string, page: Page): Promise<{ 9 | from: string; 10 | message: any; 11 | }[]>; 12 | createMessage(message: string, params: MessageOptions[]): Promise; 13 | } 14 | export {}; 15 | -------------------------------------------------------------------------------- /dist/helpers/messages.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | exports.MessagesService = void 0; 7 | const emoji_strip_1 = __importDefault(require("emoji-strip")); 8 | class MessagesService { 9 | static _replace(content, name, value) { 10 | if (content.indexOf('{{') === -1) { 11 | return content; 12 | } 13 | const reg = new RegExp(`\{\{${name}\}\}`, 'g'); 14 | return content.replace(reg, value); 15 | } 16 | async messagesList(prospectName, page) { 17 | await page.waitForSelector('.message-overlay__conversation article'); 18 | return page.evaluate((fullName) => { 19 | return [ 20 | ...Array.from(document.querySelectorAll('.message-overlay__conversation article')), 21 | ].map((current) => { 22 | var _a, _b, _c, _d; 23 | return ({ 24 | from: ((_b = (_a = current 25 | .querySelector('address')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim().indexOf(fullName)) > -1 26 | ? 'Prospect' 27 | : 'Me', 28 | message: (_d = (_c = current.lastElementChild) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim(), 29 | }); 30 | }); 31 | }, prospectName); 32 | } 33 | async createMessage(message, params) { 34 | for (let param of params) { 35 | message = MessagesService._replace(message, param.label, (0, emoji_strip_1.default)(param.value || '')); 36 | } 37 | return message.trim(); 38 | } 39 | } 40 | exports.MessagesService = MessagesService; 41 | //# sourceMappingURL=messages.service.js.map -------------------------------------------------------------------------------- /dist/helpers/messages.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"messages.service.js","sourceRoot":"","sources":["../../lib/helpers/messages.service.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqC;AAQrC,MAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,KAAa;QAC1D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YAChC,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,YAAoB,EAAE,IAAU;QACjD,MAAM,IAAI,CAAC,eAAe,CAAC,wCAAwC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAa,EAAE,EAAE;YACrC,OAAO;gBACL,GAAG,KAAK,CAAC,IAAI,CACX,QAAQ,CAAC,gBAAgB,CAAC,wCAAwC,CAAC,CACpE;aACF,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE;;gBAAC,OAAA,CAAC;oBACvB,IAAI,EACF,CAAA,MAAA,MAAA,OAAO;yBACJ,aAAa,CAAC,SAAS,CAAC,0CACvB,WAAW,0CAAE,IAAI,GAClB,OAAO,CAAC,QAAQ,CAAC,IAAG,CAAC,CAAC;wBACvB,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,IAAI;oBACV,OAAO,EAAE,MAAA,MAAA,OAAO,CAAC,gBAAgB,0CAAE,WAAW,0CAAE,IAAI,EAAE;iBACvD,CAAC,CAAA;aAAA,CAAC,CAAC;QACN,CAAC,EAAE,YAAY,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,MAAwB;QAGxB,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;YACxB,OAAO,GAAG,eAAe,CAAC,QAAQ,CAChC,OAAO,EACP,KAAK,CAAC,KAAK,EACX,IAAA,qBAAU,EAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAC9B,CAAC;SACH;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;CACF;AA7CD,0CA6CC"} -------------------------------------------------------------------------------- /dist/helpers/show.mouse.d.ts: -------------------------------------------------------------------------------- 1 | export declare function installMouseHelper(page: any): Promise; 2 | -------------------------------------------------------------------------------- /dist/helpers/show.mouse.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.installMouseHelper = void 0; 4 | async function installMouseHelper(page) { 5 | await page.evaluateOnNewDocument(() => { 6 | if (window !== window.parent) 7 | return; 8 | window.addEventListener('DOMContentLoaded', () => { 9 | const box = document.createElement('puppeteer-mouse-pointer'); 10 | const styleElement = document.createElement('style'); 11 | styleElement.innerHTML = ` 12 | puppeteer-mouse-pointer { 13 | pointer-events: none; 14 | position: absolute; 15 | top: 0; 16 | z-index: 1000000000000000; 17 | left: 0; 18 | width: 20px; 19 | height: 20px; 20 | background: rgba(0,0,0,.4); 21 | border: 1px solid white; 22 | border-radius: 10px; 23 | margin: -10px 0 0 -10px; 24 | padding: 0; 25 | transition: background .2s, border-radius .2s, border-color .2s; 26 | } 27 | puppeteer-mouse-pointer.button-1 { 28 | transition: none; 29 | background: rgba(0,0,0,0.9); 30 | } 31 | puppeteer-mouse-pointer.button-2 { 32 | transition: none; 33 | border-color: rgba(0,0,255,0.9); 34 | } 35 | puppeteer-mouse-pointer.button-3 { 36 | transition: none; 37 | border-radius: 4px; 38 | } 39 | puppeteer-mouse-pointer.button-4 { 40 | transition: none; 41 | border-color: rgba(255,0,0,0.9); 42 | } 43 | puppeteer-mouse-pointer.button-5 { 44 | transition: none; 45 | border-color: rgba(0,255,0,0.9); 46 | } 47 | `; 48 | document.head.appendChild(styleElement); 49 | document.body.appendChild(box); 50 | document.addEventListener('mousemove', (event) => { 51 | box.style.left = event.pageX + 'px'; 52 | box.style.top = event.pageY + 'px'; 53 | updateButtons(event.buttons); 54 | }, true); 55 | document.addEventListener('mousedown', (event) => { 56 | updateButtons(event.buttons); 57 | box.classList.add('button-' + event.which); 58 | }, true); 59 | document.addEventListener('mouseup', (event) => { 60 | updateButtons(event.buttons); 61 | box.classList.remove('button-' + event.which); 62 | }, true); 63 | function updateButtons(buttons) { 64 | for (let i = 0; i < 5; i++) { 65 | box.classList.toggle('button-' + i, buttons & (1 << i)); 66 | } 67 | } 68 | }, false); 69 | }); 70 | } 71 | exports.installMouseHelper = installMouseHelper; 72 | //# sourceMappingURL=show.mouse.js.map -------------------------------------------------------------------------------- /dist/helpers/show.mouse.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"show.mouse.js","sourceRoot":"","sources":["../../lib/helpers/show.mouse.ts"],"names":[],"mappings":";;;AAAO,KAAK,UAAU,kBAAkB,CAAC,IAAI;IACzC,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE;QAElC,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,OAAO;QACrC,MAAM,CAAC,gBAAgB,CACnB,kBAAkB,EAClB,GAAG,EAAE;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrD,YAAY,CAAC,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoClC,CAAC;YACQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,QAAQ,CAAC,gBAAgB,CACrB,WAAW,EACX,CAAC,KAAK,EAAE,EAAE;gBACN,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC,EACD,IAAI,CACP,CAAC;YACF,QAAQ,CAAC,gBAAgB,CACrB,WAAW,EACX,CAAC,KAAK,EAAE,EAAE;gBACN,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC,EACD,IAAI,CACP,CAAC;YACF,QAAQ,CAAC,gBAAgB,CACrB,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;gBACN,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC,EACD,IAAI,CACP,CAAC;YACF,SAAS,aAAa,CAAC,OAAO;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAExB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC3D;YACL,CAAC;QACL,CAAC,EACD,KAAK,CACR,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAnFD,gDAmFC"} -------------------------------------------------------------------------------- /dist/helpers/timer.d.ts: -------------------------------------------------------------------------------- 1 | export declare function randomIntFromInterval(min: number, max: number): number; 2 | export declare const timer: (num: number) => Promise; 3 | -------------------------------------------------------------------------------- /dist/helpers/timer.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.timer = exports.randomIntFromInterval = void 0; 4 | function randomIntFromInterval(min, max) { 5 | return Math.floor(Math.random() * (max - min + 1) + min); 6 | } 7 | exports.randomIntFromInterval = randomIntFromInterval; 8 | const timer = (num) => { 9 | return new Promise(res => { 10 | setTimeout(() => { 11 | res(true); 12 | }, num + randomIntFromInterval(-1000, 1000)); 13 | }); 14 | }; 15 | exports.timer = timer; 16 | //# sourceMappingURL=timer.js.map -------------------------------------------------------------------------------- /dist/helpers/timer.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../lib/helpers/timer.ts"],"names":[],"mappings":";;;AAAA,SAAgB,qBAAqB,CAAC,GAAW,EAAE,GAAW;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC3D,CAAC;AAFD,sDAEC;AAEM,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;IACnC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QACvB,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC,EAAE,GAAG,GAAG,qBAAqB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AANW,QAAA,KAAK,SAMhB"} -------------------------------------------------------------------------------- /dist/linkedin.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinEmailService } from "./linkedin/linkedin.email.service"; 2 | import { LinkedinConnectService } from "./linkedin/linkedin.connect.service"; 3 | import { LinkedinMessageService } from "./linkedin/linkedin.message.service"; 4 | import { LinkedinMessageWithView } from "./linkedin/linkedin.message.with.view"; 5 | import { LinkedinGlobalPageService } from "./linkedin/linkedin.global.page.service"; 6 | import { LinkedinAcceptedConnectionsService } from "./linkedin/linkedin.accepted.connection.request.service"; 7 | import { LinkedinMessagesFromChat } from "./linkedin/linkedin.messages.from.chat"; 8 | import { LinkedinLoginService } from "./linkedin/linkedin.login.service"; 9 | import { LinkedinMessagesService } from "./linkedin/linkedin.messages.service"; 10 | import { LinkedinEndorseService } from "./linkedin/linkedin.endorse.service"; 11 | import { LinkedinLikeService } from "./linkedin/linkedin.like.service"; 12 | import { LinkedinVisitService } from "./linkedin/linkedin.visit.service"; 13 | import { LinkedinEngagementService } from "./linkedin/linkedin.engagement.service"; 14 | import './helpers/colors'; 15 | import { LinkedinProfileViewsService } from "./linkedin/linkedin.profileViews.service"; 16 | export declare const services: { 17 | extract_information: LinkedinEmailService; 18 | connect: LinkedinConnectService; 19 | message: LinkedinMessageService; 20 | message_with_view: LinkedinMessageWithView; 21 | scraper: LinkedinGlobalPageService; 22 | accepted_connection_request: LinkedinAcceptedConnectionsService; 23 | chat: LinkedinMessagesFromChat; 24 | login: LinkedinLoginService; 25 | messages: LinkedinMessagesService; 26 | endorse: LinkedinEndorseService; 27 | like: LinkedinLikeService; 28 | visit: LinkedinVisitService; 29 | engagement: LinkedinEngagementService; 30 | profileViews: LinkedinProfileViewsService; 31 | }; 32 | export declare const tools: { 33 | loadCursor: (page: import("puppeteer").Page, headless: boolean) => Promise; 34 | }; 35 | -------------------------------------------------------------------------------- /dist/linkedin.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | exports.tools = exports.services = void 0; 7 | const linkedin_email_service_1 = require("./linkedin/linkedin.email.service"); 8 | const linkedin_connect_service_1 = require("./linkedin/linkedin.connect.service"); 9 | const linkedin_message_service_1 = require("./linkedin/linkedin.message.service"); 10 | const linkedin_message_with_view_1 = require("./linkedin/linkedin.message.with.view"); 11 | const linkedin_global_page_service_1 = require("./linkedin/linkedin.global.page.service"); 12 | const linkedin_accepted_connection_request_service_1 = require("./linkedin/linkedin.accepted.connection.request.service"); 13 | const linkedin_messages_from_chat_1 = require("./linkedin/linkedin.messages.from.chat"); 14 | const linkedin_login_service_1 = require("./linkedin/linkedin.login.service"); 15 | const linkedin_messages_service_1 = require("./linkedin/linkedin.messages.service"); 16 | const linkedin_endorse_service_1 = require("./linkedin/linkedin.endorse.service"); 17 | const linkedin_like_service_1 = require("./linkedin/linkedin.like.service"); 18 | const linkedin_visit_service_1 = require("./linkedin/linkedin.visit.service"); 19 | const linkedin_engagement_service_1 = require("./linkedin/linkedin.engagement.service"); 20 | const load_cursor_1 = __importDefault(require("./helpers/load-cursor")); 21 | require("./helpers/colors"); 22 | const linkedin_profileViews_service_1 = require("./linkedin/linkedin.profileViews.service"); 23 | exports.services = { 24 | extract_information: new linkedin_email_service_1.LinkedinEmailService(), 25 | connect: new linkedin_connect_service_1.LinkedinConnectService(), 26 | message: new linkedin_message_service_1.LinkedinMessageService(), 27 | message_with_view: new linkedin_message_with_view_1.LinkedinMessageWithView(), 28 | scraper: new linkedin_global_page_service_1.LinkedinGlobalPageService(), 29 | accepted_connection_request: new linkedin_accepted_connection_request_service_1.LinkedinAcceptedConnectionsService(), 30 | chat: new linkedin_messages_from_chat_1.LinkedinMessagesFromChat(), 31 | login: new linkedin_login_service_1.LinkedinLoginService(), 32 | messages: new linkedin_messages_service_1.LinkedinMessagesService(), 33 | endorse: new linkedin_endorse_service_1.LinkedinEndorseService(), 34 | like: new linkedin_like_service_1.LinkedinLikeService(), 35 | visit: new linkedin_visit_service_1.LinkedinVisitService(), 36 | engagement: new linkedin_engagement_service_1.LinkedinEngagementService(), 37 | profileViews: new linkedin_profileViews_service_1.LinkedinProfileViewsService(), 38 | }; 39 | exports.tools = { 40 | loadCursor: load_cursor_1.default 41 | }; 42 | //# sourceMappingURL=linkedin.service.js.map -------------------------------------------------------------------------------- /dist/linkedin.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.service.js","sourceRoot":"","sources":["../lib/linkedin.service.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAuE;AACvE,kFAA2E;AAC3E,kFAA2E;AAC3E,sFAA8E;AAC9E,0FAAkF;AAClF,0HAA2G;AAC3G,wFAAgF;AAChF,8EAAuE;AACvE,oFAA6E;AAC7E,kFAA2E;AAC3E,4EAAqE;AACrE,8EAAuE;AACvE,wFAAiF;AACjF,wEAA+C;AAC/C,4BAA0B;AAC1B,4FAAuF;AAE1E,QAAA,QAAQ,GAAG;IACpB,mBAAmB,EAAE,IAAI,6CAAoB,EAAE;IAC/C,OAAO,EAAE,IAAI,iDAAsB,EAAE;IACrC,OAAO,EAAE,IAAI,iDAAsB,EAAE;IACrC,iBAAiB,EAAE,IAAI,oDAAuB,EAAE;IAChD,OAAO,EAAE,IAAI,wDAAyB,EAAE;IACxC,2BAA2B,EAAE,IAAI,iFAAkC,EAAE;IACrE,IAAI,EAAE,IAAI,sDAAwB,EAAE;IACpC,KAAK,EAAE,IAAI,6CAAoB,EAAE;IACjC,QAAQ,EAAE,IAAI,mDAAuB,EAAE;IACvC,OAAO,EAAE,IAAI,iDAAsB,EAAE;IACrC,IAAI,EAAE,IAAI,2CAAmB,EAAE;IAC/B,KAAK,EAAE,IAAI,6CAAoB,EAAE;IACjC,UAAU,EAAE,IAAI,uDAAyB,EAAE;IAC3C,YAAY,EAAE,IAAI,2DAA2B,EAAE;CAClD,CAAA;AAEY,QAAA,KAAK,GAAG;IACjB,UAAU,EAAV,qBAAU;CACb,CAAA"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.abstract.service.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | import { MessagesService } from "../helpers/messages.service"; 3 | export declare class LinkedinAbstractService extends MessagesService { 4 | extractEmail(page: Page): Promise<{ 5 | birthDay?: string; 6 | im?: { 7 | link: string; 8 | type: string; 9 | }[]; 10 | twitter?: string; 11 | websites?: { 12 | link: string; 13 | type: string; 14 | }[]; 15 | phone?: { 16 | phone: string; 17 | type: string; 18 | }[]; 19 | email?: string; 20 | }>; 21 | moveMouseAndScroll(page: Page, selector: string, timeout?: number, disabledMouseMove?: boolean, offset?: number): Promise; 22 | static checkLimit(page: Page): Promise; 23 | static checkToken(page: Page): Promise; 24 | extractInformation(page: Page): Promise<{ 25 | currentTitle: string; 26 | currentPositionLength: string; 27 | headline: string; 28 | location: string; 29 | profilePicture: string; 30 | name: string; 31 | last_name: string; 32 | companyName: string; 33 | currentCompanyPicture: string; 34 | }>; 35 | moveAndClick(page: Page, select: string | { 36 | container: string; 37 | selector: string; 38 | }, timeout?: number, totalClicks?: number): Promise>; 39 | generateMessage(message: string, params: { 40 | firstName: string; 41 | lastName: string; 42 | companyName: string; 43 | profilePicture: string; 44 | myname: string; 45 | mylastname: string; 46 | mycompany: string; 47 | }): Promise; 48 | waitForLoader(page: Page): Promise; 49 | selectContract(page: Page): Promise; 50 | waitForSalesLoader(page: Page): Promise; 51 | } 52 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.accepted.connection.request.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 4 | export declare class LinkedinAcceptedConnectionsService extends LinkedinAbstractService implements LinkedinServicesInterface { 5 | process(page: Page): Promise; 6 | scrapeProfile(page: Page): Promise>; 10 | } 11 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.accepted.connection.request.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinAcceptedConnectionsService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const gotoUrl_1 = require("../helpers/gotoUrl"); 6 | class LinkedinAcceptedConnectionsService extends linkedin_abstract_service_1.LinkedinAbstractService { 7 | async process(page) { 8 | (0, gotoUrl_1.gotoUrl)(page, "https://www.linkedin.com/mynetwork/invite-connect/connections/"); 9 | await this.waitForLoader(page); 10 | try { 11 | await page.waitForSelector(".mn-connection-card__details", { 12 | timeout: 10000, 13 | }); 14 | return (await this.scrapeProfile(page)).map((m) => ({ 15 | name: m.name, 16 | url: m.url, 17 | })); 18 | } 19 | catch (err) { 20 | return []; 21 | } 22 | } 23 | async scrapeProfile(page) { 24 | return page.evaluate(async (current) => { 25 | return Array.from(document.querySelectorAll("ul .mn-connection-card")).map((elm) => { 26 | var _a, _b, _c; 27 | return ({ 28 | name: (_b = (_a = elm 29 | .querySelector(".mn-connection-card__name")) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim(), 30 | url: [ 31 | (_c = elm.querySelector("a")) === null || _c === void 0 ? void 0 : _c.getAttribute("href"), 32 | ].reduce((all, url) => { 33 | if (url[url.length - 1] === "/") { 34 | return url.slice(0, -1); 35 | } 36 | return url; 37 | }, ""), 38 | }); 39 | }); 40 | }); 41 | } 42 | } 43 | exports.LinkedinAcceptedConnectionsService = LinkedinAcceptedConnectionsService; 44 | //# sourceMappingURL=linkedin.accepted.connection.request.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.accepted.connection.request.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.accepted.connection.request.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.accepted.connection.request.service.ts"],"names":[],"mappings":";;;AAAA,2EAAsE;AAGtE,gDAA2C;AAE3C,MAAa,kCACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU;QACtB,IAAA,iBAAO,EAAC,IAAI,EAAE,gEAAgE,CAAC,CAAC;QAEhF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,8BAA8B,EAAE;gBACzD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,GAAG,EAAE,CAAC,CAAC,GAAG;aACX,CAAC,CAAC,CAAC;SACL;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,IAAU;QAGV,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACrC,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CACpD,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;gBAAC,OAAA,CAAC;oBACd,IAAI,EAAE,MAAA,MAAA,GAAG;yBACN,aAAa,CAAC,2BAA2B,CAAC,0CACzC,WAAW,0CAAE,IAAI,EAAE;oBACvB,GAAG,EAAE;wBACH,MAAA,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,0CAAE,YAAY,CAAC,MAAM,CAAC;qBAC7C,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;wBAEpB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;4BAE/B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACzB;wBACD,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC;iBACP,CAAC,CAAA;aAAA,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA/CD,gFA+CC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.connect.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | message: string; 6 | url: string; 7 | extra?: { 8 | myname: string; 9 | mylastname: string; 10 | mycompany: string; 11 | }; 12 | } 13 | export declare class LinkedinConnectService extends LinkedinAbstractService implements LinkedinServicesInterface { 14 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 15 | name: string; 16 | currentCompanyPicture: string; 17 | companyName: string; 18 | current_position_title: string; 19 | location: string; 20 | headline: string; 21 | current_position_length: string; 22 | url: string; 23 | linkedin_id: string; 24 | }>; 25 | connectMethod3(page: Page): Promise; 26 | connectMethod2(page: Page): Promise; 27 | connectMethod4(page: Page): Promise; 28 | connectMethod1(page: Page): Promise; 29 | clickConnectButton(page: Page): Promise; 30 | } 31 | export {}; 32 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.connect.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.connect.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.connect.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.email.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from './linkedin.abstract.service'; 2 | import { LinkedinServicesInterface } from './linkedin.services.interface'; 3 | import { CDPSession, Page } from 'puppeteer'; 4 | interface RequiredData { 5 | url: string; 6 | } 7 | export declare class LinkedinEmailService extends LinkedinAbstractService implements LinkedinServicesInterface { 8 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 9 | url: string; 10 | linkedin_id: string; 11 | birthDay?: string; 12 | im?: { 13 | link: string; 14 | type: string; 15 | }[]; 16 | twitter?: string; 17 | websites?: { 18 | link: string; 19 | type: string; 20 | }[]; 21 | phone?: { 22 | phone: string; 23 | type: string; 24 | }[]; 25 | email?: string; 26 | }>; 27 | } 28 | export {}; 29 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.email.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinEmailService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const create_linkedin_url_1 = require("../helpers/create.linkedin.url"); 6 | const gotoUrl_1 = require("../helpers/gotoUrl"); 7 | const timer_1 = require("../helpers/timer"); 8 | class LinkedinEmailService extends linkedin_abstract_service_1.LinkedinAbstractService { 9 | async process(page, cdp, data) { 10 | const { url } = data; 11 | const theUrl = (0, create_linkedin_url_1.createLinkedinLink)(url, true); 12 | try { 13 | (0, gotoUrl_1.gotoUrl)(page, theUrl); 14 | await this.waitForLoader(page); 15 | await (0, timer_1.timer)(3000); 16 | const newUrl = await page.evaluate(() => { 17 | return window.location.href; 18 | }); 19 | await page.evaluate(() => { 20 | history.pushState({}, '', window.location.href + 'overlay/contact-info/'); 21 | history.pushState({}, '', window.location.href + 'overlay/contact-info/'); 22 | history.back(); 23 | }); 24 | return Object.assign(Object.assign({}, await this.extractEmail(page)), { url: theUrl, linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false) }); 25 | } 26 | catch (err) { 27 | const newUrl = await page.evaluate(() => { 28 | return window.location.href; 29 | }); 30 | return { url: theUrl, linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false) }; 31 | } 32 | } 33 | } 34 | exports.LinkedinEmailService = LinkedinEmailService; 35 | //# sourceMappingURL=linkedin.email.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.email.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.email.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.email.service.ts"],"names":[],"mappings":";;;AAAA,2EAAsE;AAGtE,wEAAkE;AAClE,gDAA2C;AAC3C,4CAAuC;AAMvC,MAAa,oBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;QAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,MAAM,MAAM,GAAG,IAAA,wCAAkB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAI;YACF,IAAA,iBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEtB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAGlB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,uBAAuB,CAAC,CAAC;gBAC1E,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,uBAAuB,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,uCAAW,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,IAAE;SACxG;QACD,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAC,CAAC;SACtE;IACH,CAAC;CACF;AApCD,oDAoCC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.endorse.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | url: string; 6 | } 7 | export declare class LinkedinEndorseService extends LinkedinAbstractService implements LinkedinServicesInterface { 8 | globalError(): { 9 | text: string; 10 | }; 11 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 12 | linkedin_id: string; 13 | url: string; 14 | }>; 15 | } 16 | export {}; 17 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.endorse.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinEndorseService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const create_linkedin_url_1 = require("../helpers/create.linkedin.url"); 6 | const gotoUrl_1 = require("../helpers/gotoUrl"); 7 | const timer_1 = require("../helpers/timer"); 8 | class LinkedinEndorseService extends linkedin_abstract_service_1.LinkedinAbstractService { 9 | globalError() { 10 | return { 11 | text: "Could not endorse", 12 | }; 13 | } 14 | async process(page, cdp, data) { 15 | const { url } = data; 16 | const theUrl = (0, create_linkedin_url_1.createLinkedinLink)(url, true); 17 | try { 18 | (0, gotoUrl_1.gotoUrl)(page, theUrl); 19 | await this.waitForLoader(page); 20 | await page.waitForSelector(".pv-top-card--list > li, .pv-top-card__photo"); 21 | await (0, timer_1.timer)(3000); 22 | const scrollSize = await page.evaluate(() => { 23 | return document.body.scrollHeight; 24 | }); 25 | await page.mouse.wheel({ 26 | deltaY: scrollSize, 27 | }); 28 | await (0, timer_1.timer)(3000); 29 | await page.waitForSelector(".pv-skill-categories-section", { 30 | visible: true, 31 | timeout: 7000, 32 | }); 33 | await this.moveMouseAndScroll(page, ".pv-skill-categories-section", 0, false, -200); 34 | await (0, timer_1.timer)(4000); 35 | const newUrl = await page.evaluate(() => { 36 | return window.location.href; 37 | }); 38 | const all = await page.evaluate(() => { 39 | var _a; 40 | return (_a = Array.from(document.querySelectorAll(".pv-skill-entity__featured-endorse-button-shared:not(.pv-skill-entity__featured-endorse-button-shared--checked)"))) === null || _a === void 0 ? void 0 : _a.map((p) => p.getAttribute("id")).filter((f) => f); 41 | }); 42 | if (!all.length) { 43 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: newUrl }; 44 | } 45 | for (const id of all) { 46 | await this.moveAndClick(page, `#${id}`); 47 | await page.waitForSelector(".artdeco-hoverable-content__close-btn"); 48 | await this.moveAndClick(page, `.artdeco-hoverable-content__close-btn`); 49 | await (0, timer_1.timer)(2000); 50 | } 51 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: newUrl }; 52 | } 53 | catch (err) { 54 | const newUrl = await page.evaluate(() => { 55 | return window.location.href; 56 | }); 57 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: newUrl }; 58 | } 59 | } 60 | } 61 | exports.LinkedinEndorseService = LinkedinEndorseService; 62 | //# sourceMappingURL=linkedin.endorse.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.endorse.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.endorse.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.endorse.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.engagement.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | export declare class LinkedinEngagementService extends LinkedinAbstractService implements LinkedinServicesInterface { 5 | process(page: Page, cdp: CDPSession, data: any): Promise; 6 | } 7 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.engagement.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinEngagementService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const gotoUrl_1 = require("../helpers/gotoUrl"); 6 | const timer_1 = require("../helpers/timer"); 7 | const lodash_1 = require("lodash"); 8 | class LinkedinEngagementService extends linkedin_abstract_service_1.LinkedinAbstractService { 9 | async process(page, cdp, data) { 10 | (0, gotoUrl_1.gotoUrl)(page, "https://www.linkedin.com/feed/"); 11 | await this.waitForLoader(page); 12 | await page.mouse.wheel({ 13 | deltaY: 1500, 14 | }); 15 | await (0, timer_1.timer)(4000); 16 | await page.waitForFunction(() => { 17 | return (Array.from(document.querySelectorAll('[type="like-icon"], [type="thumbs-up-outline"]')) || []) 18 | .map((curr) => { 19 | var _a; 20 | return (_a = curr 21 | .closest("button:not(.react-button--active)")) === null || _a === void 0 ? void 0 : _a.getAttribute("id"); 22 | }) 23 | .filter((f) => f); 24 | }); 25 | const ids = await page.evaluate(() => { 26 | return (Array.from(document.querySelectorAll('[type="like-icon"], [type="thumbs-up-outline"]')) || []) 27 | .map((curr) => { 28 | var _a, _b, _c, _d, _e, _f, _g; 29 | const parent = (_a = curr === null || curr === void 0 ? void 0 : curr.closest("button:not(.react-button--active)")) === null || _a === void 0 ? void 0 : _a.closest(".social-details-social-activity"); 30 | return { 31 | like: (_c = (_b = parent 32 | .querySelector('[type="thumbs-up-outline"]')) === null || _b === void 0 ? void 0 : _b.closest("button")) === null || _c === void 0 ? void 0 : _c.getAttribute("id"), 33 | comment: (_d = parent 34 | .querySelector(".comment-button")) === null || _d === void 0 ? void 0 : _d.getAttribute("id"), 35 | id: parent === null || parent === void 0 ? void 0 : parent.getAttribute("id"), 36 | totalLikes: +(((_g = (_f = (_e = parent === null || parent === void 0 ? void 0 : parent.querySelector(".social-details-social-counts__reactions-count, .social-details-social-counts__social-proof-text")) === null || _e === void 0 ? void 0 : _e.textContent) === null || _f === void 0 ? void 0 : _f.match(/\d/g)) === null || _g === void 0 ? void 0 : _g.join('')) || 0), 37 | }; 38 | }) 39 | .filter((f) => f.id) 40 | .slice(0, 4); 41 | }); 42 | if (!ids.length) { 43 | return; 44 | } 45 | for (const id of ids) { 46 | try { 47 | await this.moveMouseAndScroll(page, `#${id.like}`, undefined, false, -700); 48 | await (0, timer_1.timer)(1000); 49 | await this.moveAndClick(page, `#${id.like}`); 50 | await (0, timer_1.timer)(1000); 51 | if (id.totalLikes > 30) { 52 | await this.moveMouseAndScroll(page, `#${id.comment}`, undefined, false, -700); 53 | await (0, timer_1.timer)(1000); 54 | await this.moveAndClick(page, `#${id.comment}`); 55 | await (0, timer_1.timer)(1000); 56 | await page.keyboard.type((0, lodash_1.shuffle)([ 57 | "Thank you for sharing", 58 | "Great Share", 59 | "Cool", 60 | "Thanks for posting 💯🔥", 61 | "💯💯", 62 | "Great content keep it up 👌🏼", 63 | "Great 👍", 64 | "Awesome!!", 65 | ])[0], { delay: 20 }); 66 | await (0, timer_1.timer)(1000); 67 | await this.moveAndClick(page, ".comments-comment-box__submit-button"); 68 | } 69 | } 70 | catch (err) { } 71 | } 72 | } 73 | } 74 | exports.LinkedinEngagementService = LinkedinEngagementService; 75 | //# sourceMappingURL=linkedin.engagement.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.engagement.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.engagement.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.engagement.service.ts"],"names":[],"mappings":";;;AAIA,2EAAsE;AACtE,gDAA2C;AAC3C,4CAAuC;AACvC,mCAAiC;AAEjC,MAAa,yBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAS;QAClD,IAAA,iBAAO,EAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAEhD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAElB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YAC9B,OAAO,CACL,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,gBAAgB,CACvB,gDAAgD,CACjD,CACF,IAAI,EAAE,CACR;iBACE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;gBACZ,OAAO,MAAA,IAAI;qBACR,OAAO,CAAC,mCAAmC,CAAC,0CAC3C,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAGH,MAAM,GAAG,GAKJ,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5B,OAAO,CACL,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,gBAAgB,CACvB,gDAAgD,CACjD,CACF,IAAI,EAAE,CACR;iBACE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;gBACZ,MAAM,MAAM,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CACf,OAAO,CAAC,mCAAmC,CAAC,0CAC5C,OAAO,CAAC,iCAAiC,CAAE,CAAC;gBAEhD,OAAO;oBACL,IAAI,EAAE,MAAA,MAAA,MAAM;yBACT,aAAa,CACZ,4BAA4B,CAC7B,0CACC,OAAO,CAAC,QAAQ,CAAC,0CACjB,YAAY,CAAC,IAAI,CAAC;oBACtB,OAAO,EAAE,MAAA,MAAM;yBACZ,aAAa,CAAC,iBAAiB,CAAC,0CAC/B,YAAY,CAAC,IAAI,CAAC;oBACtB,EAAE,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,IAAI,CAAC;oBAC9B,UAAU,EAAE,CAAC,CACX,CAAA,MAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CACF,aAAa,CACb,kGAAkG,CACnG,0CACC,WAAW,0CAAE,KAAK,CAAC,KAAK,CAAC,0CAAE,IAAI,CAAC,EAAE,CAAC,KAAI,CAAC,CAC7C;iBACF,CAAC;YACJ,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,OAAO;SACR;QAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YACpB,IAAI;gBACF,MAAM,IAAI,CAAC,kBAAkB,CAC3B,IAAI,EACJ,IAAI,EAAE,CAAC,IAAI,EAAE,EACb,SAAS,EACT,KAAK,EACL,CAAC,GAAG,CACL,CAAC;gBACF,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;gBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;gBAElB,IAAI,EAAE,CAAC,UAAU,GAAG,EAAE,EAAE;oBACtB,MAAM,IAAI,CAAC,kBAAkB,CAC3B,IAAI,EACJ,IAAI,EAAE,CAAC,OAAO,EAAE,EAChB,SAAS,EACT,KAAK,EACL,CAAC,GAAG,CACL,CAAC;oBACF,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;oBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChD,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;oBAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CACtB,IAAA,gBAAO,EAAC;wBACN,uBAAuB;wBACvB,aAAa;wBACb,MAAM;wBACN,yBAAyB;wBACzB,MAAM;wBACN,+BAA+B;wBAC/B,UAAU;wBACV,WAAW;qBACZ,CAAC,CAAC,CAAC,CAAC,EACL,EAAE,KAAK,EAAE,EAAE,EAAE,CACd,CAAC;oBACF,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;oBAClB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,sCAAsC,CAAC,CAAC;iBACvE;aACF;YAAC,OAAO,GAAG,EAAE,GAAE;SACjB;IACH,CAAC;CACF;AAzHD,8DAyHC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.global.page.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 4 | import { CDPSession } from "puppeteer"; 5 | export interface PageConnections { 6 | name: string; 7 | link: string; 8 | image: string; 9 | description: string; 10 | connect: boolean; 11 | } 12 | interface RequiredData { 13 | page: number; 14 | url: string; 15 | remove_overlapping: boolean; 16 | } 17 | export declare class LinkedinGlobalPageService extends LinkedinAbstractService implements LinkedinServicesInterface { 18 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 19 | url: string; 20 | pages: number; 21 | remove_overlapping?: boolean; 22 | values: PageConnections[]; 23 | csv?: string; 24 | }>; 25 | startProcess(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 26 | pages: number; 27 | remove_overlapping?: boolean; 28 | values: PageConnections[]; 29 | csv?: string; 30 | }>; 31 | } 32 | export {}; 33 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.global.page.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinGlobalPageService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const linkedin_sales_page_service_1 = require("./linkedin.sales.page.service"); 6 | const linkedin_page_service_1 = require("./linkedin.page.service"); 7 | const querystring_1 = require("querystring"); 8 | const normalPage = new linkedin_page_service_1.LinkedinPageService(); 9 | const salesPage = new linkedin_sales_page_service_1.LinkedinSalesPageService(); 10 | class LinkedinGlobalPageService extends linkedin_abstract_service_1.LinkedinAbstractService { 11 | async process(page, cdp, data) { 12 | const load = await this.startProcess(page, cdp, data); 13 | return Object.assign(Object.assign({}, load), { url: data.url }); 14 | } 15 | async startProcess(page, cdp, data) { 16 | const { page: pageNumber, url, remove_overlapping } = data; 17 | if (pageNumber > 100) { 18 | return { 19 | values: [], 20 | pages: 0, 21 | }; 22 | } 23 | const onlyQuery = new URL(url.replace("#", "?")); 24 | const parseQuery = (0, querystring_1.parse)(onlyQuery.search); 25 | if (url.indexOf("https://linvo-premium-dev-bucket.s3.us-east-2.amazonaws.com") === 0 && 26 | parseQuery.run === false) { 27 | return { 28 | values: [], 29 | pages: 0, 30 | }; 31 | } 32 | if (url.indexOf("https://linvo-premium-dev-bucket.s3.us-east-2.amazonaws.com") === 0) { 33 | return { 34 | values: [], 35 | pages: 1, 36 | csv: url, 37 | remove_overlapping, 38 | }; 39 | } 40 | if (pageNumber === 1) { 41 | delete parseQuery.page; 42 | } 43 | else { 44 | parseQuery.page = pageNumber; 45 | } 46 | if (parseQuery === null || parseQuery === void 0 ? void 0 : parseQuery.viewAllFilters) { 47 | parseQuery === null || parseQuery === void 0 ? void 0 : parseQuery.viewAllFilters = "false"; 48 | } 49 | const newUrl = (0, querystring_1.stringify)(parseQuery, onlyQuery.origin + 50 | onlyQuery.pathname + 51 | (url.indexOf("#") > -1 ? "#" : "?")); 52 | const info = await (url.indexOf("/sales/") > -1 53 | ? salesPage 54 | : normalPage).pagesTask(page, newUrl); 55 | return Object.assign(Object.assign({}, info), { remove_overlapping }); 56 | return Promise.race([ 57 | (url.indexOf("/sales/") > -1 ? salesPage : normalPage).pagesTask(page, newUrl), 58 | new Promise(async (res) => { 59 | try { 60 | await page.waitForFunction(() => { 61 | var _a, _b, _c, _d, _e, _f; 62 | return (((_c = (_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.innerText) === null || _b === void 0 ? void 0 : _b.trim()) === null || _c === void 0 ? void 0 : _c.indexOf("No results found")) > 63 | -1 || 64 | ((_f = (_e = (_d = document === null || document === void 0 ? void 0 : document.body) === null || _d === void 0 ? void 0 : _d.innerText) === null || _e === void 0 ? void 0 : _e.trim()) === null || _f === void 0 ? void 0 : _f.indexOf("no results containing your search terms were found")) > -1); 65 | }, { 66 | timeout: 0, 67 | }); 68 | res({ 69 | values: [], 70 | pages: 0, 71 | }); 72 | } 73 | catch (err) { 74 | return; 75 | } 76 | }), 77 | ]); 78 | } 79 | } 80 | exports.LinkedinGlobalPageService = LinkedinGlobalPageService; 81 | //# sourceMappingURL=linkedin.global.page.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.global.page.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.global.page.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.global.page.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.like.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | url: string; 6 | } 7 | export declare class LinkedinLikeService extends LinkedinAbstractService implements LinkedinServicesInterface { 8 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 9 | linkedin_id: string; 10 | url: string; 11 | }>; 12 | } 13 | export {}; 14 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.like.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinLikeService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const create_linkedin_url_1 = require("../helpers/create.linkedin.url"); 6 | const gotoUrl_1 = require("../helpers/gotoUrl"); 7 | const timer_1 = require("../helpers/timer"); 8 | class LinkedinLikeService extends linkedin_abstract_service_1.LinkedinAbstractService { 9 | async process(page, cdp, data) { 10 | const { url } = data; 11 | const theUrl = (0, create_linkedin_url_1.createLinkedinLink)(url, true); 12 | (0, gotoUrl_1.gotoUrl)(page, theUrl); 13 | await this.waitForLoader(page); 14 | await (0, timer_1.timer)(8000); 15 | const onlyUrl = await page.evaluate(() => { 16 | return window.location.href; 17 | }); 18 | await page.goto("about:blank"); 19 | const newUrl = (0, create_linkedin_url_1.createLinkedinLink)(onlyUrl, false); 20 | (0, gotoUrl_1.gotoUrl)(page, onlyUrl + "/detail/recent-activity/shares/"); 21 | try { 22 | await this.waitForLoader(page); 23 | await page.waitForSelector(".social-actions-button", { 24 | visible: true, 25 | timeout: 7000, 26 | }); 27 | const all = await page.evaluate(() => { 28 | var _a, _b, _c; 29 | return (_c = (_b = (_a = Array.from(document.querySelectorAll("[data-urn]"))) === null || _a === void 0 ? void 0 : _a.reduce((all, current) => { 30 | var _a; 31 | return [ 32 | ...all, 33 | (_a = current === null || current === void 0 ? void 0 : current.querySelector(".social-actions-button")) === null || _a === void 0 ? void 0 : _a.getAttribute("id"), 34 | ]; 35 | }, [])) === null || _b === void 0 ? void 0 : _b.filter((f) => f)) === null || _c === void 0 ? void 0 : _c.slice(0, 1); 36 | }, []); 37 | if (!all.length) { 38 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: theUrl }; 39 | } 40 | await this.moveAndClick(page, `#${all[0]}`); 41 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: theUrl }; 42 | } 43 | catch (err) { 44 | return { linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false), url: theUrl }; 45 | } 46 | } 47 | } 48 | exports.LinkedinLikeService = LinkedinLikeService; 49 | //# sourceMappingURL=linkedin.like.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.like.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.like.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.like.service.ts"],"names":[],"mappings":";;;AAIA,2EAAsE;AACtE,wEAAkE;AAClE,gDAA2C;AAC3C,4CAAuC;AAMvC,MAAa,mBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;QAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,MAAM,MAAM,GAAG,IAAA,wCAAkB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE7C,IAAA,iBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAA,wCAAkB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAElD,IAAA,iBAAO,EAAC,IAAI,EAAE,OAAO,GAAG,iCAAiC,CAAC,CAAC;QAE3D,IAAI;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE;gBACnD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;gBACnC,OAAO,MAAA,MAAA,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,0CAEtD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;;oBACxB,OAAO;wBACL,GAAG,GAAG;wBACN,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CACH,aAAa,CAAC,wBAAwB,CAAC,0CACvC,YAAY,CAAC,IAAI,CAAC;qBACvB,CAAC;gBACJ,CAAC,EAAE,EAAE,CAAC,0CAEF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,0CAClB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACf,OAAO,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;aACxE;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAE5C,OAAO,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;SACxE;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;SACxE;IAMH,CAAC;CACF;AAhED,kDAgEC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.login.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | user: string; 6 | password: string; 7 | } 8 | export declare class LinkedinLoginService extends LinkedinAbstractService implements LinkedinServicesInterface { 9 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 10 | user: string; 11 | token: string; 12 | }>; 13 | } 14 | export {}; 15 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.login.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinLoginService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const timer_1 = require("../helpers/timer"); 6 | const linkedin_errors_1 = require("../enums/linkedin.errors"); 7 | class LinkedinLoginService extends linkedin_abstract_service_1.LinkedinAbstractService { 8 | async process(page, cdp, data) { 9 | var _a, _b, _c, _d; 10 | try { 11 | await page.goto("https://www.linkedin.com/login"); 12 | await page.waitForSelector("#username"); 13 | await (0, timer_1.timer)(4000); 14 | await ((_a = (await page.$("#username"))) === null || _a === void 0 ? void 0 : _a.type(data.user, { delay: 30 })); 15 | await (0, timer_1.timer)(500); 16 | await ((_b = (await page.$("#password"))) === null || _b === void 0 ? void 0 : _b.type(data.password, { delay: 30 })); 17 | await (0, timer_1.timer)(1000); 18 | await ((_c = (await page.$("button[type=submit]"))) === null || _c === void 0 ? void 0 : _c.click()); 19 | await (0, timer_1.timer)(3000); 20 | await page.waitForSelector(".search-global-typeahead__input", { 21 | timeout: 30000, 22 | }); 23 | const token = await page.cookies(); 24 | return { 25 | user: data.user, 26 | token: (_d = token === null || token === void 0 ? void 0 : token.find((t) => t.name === "li_at")) === null || _d === void 0 ? void 0 : _d.value, 27 | }; 28 | } 29 | catch (err) { 30 | throw new linkedin_errors_1.LinkedinErrors("Could not login to linkedin, please update you credentials", '/accounts', { 31 | values: linkedin_errors_1.LINKEDIN_ERRORS.INVALID_CREDENTIALS, 32 | }); 33 | } 34 | } 35 | } 36 | exports.LinkedinLoginService = LinkedinLoginService; 37 | //# sourceMappingURL=linkedin.login.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.login.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.login.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.login.service.ts"],"names":[],"mappings":";;;AAIA,2EAAsE;AACtE,4CAAuC;AACvC,8DAAyE;AAOzE,MAAa,oBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;;QAC3D,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAElD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAExC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAElB,MAAM,CAAA,MAAA,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,0CAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC;YAElE,MAAM,IAAA,aAAK,EAAC,GAAG,CAAC,CAAC;YAEjB,MAAM,CAAA,MAAA,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,0CAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC;YAEtE,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAClB,MAAM,CAAA,MAAA,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,0CAAE,KAAK,EAAE,CAAA,CAAC;YAErD,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAElB,MAAM,IAAI,CAAC,eAAe,CAAC,iCAAiC,EAAE;gBAC5D,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAEnC,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,0CAAE,KAAK;aACrD,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,gCAAc,CACtB,4DAA4D,EAC5D,WAAW,EACX;gBACE,MAAM,EAAE,iCAAe,CAAC,mBAAmB;aAC5C,CACF,CAAC;SACH;IACH,CAAC;CACF;AA3CD,oDA2CC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.message.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | name: string; 6 | info?: any; 7 | contact?: any; 8 | message: string; 9 | url: string; 10 | IgnoreProspectMessages: 0 | 1 | 2; 11 | image?: { 12 | todo: "gif" | "upload" | "personalized"; 13 | value: { 14 | picture: string; 15 | id: string | number; 16 | }; 17 | }; 18 | } 19 | export interface Message { 20 | from: "Prospect" | "Me"; 21 | message: string; 22 | sentiment: number; 23 | } 24 | export declare class LinkedinMessageService extends LinkedinAbstractService implements LinkedinServicesInterface { 25 | findInChat(page: Page, name: string): Promise; 26 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 27 | info: any; 28 | messages: { 29 | name: string; 30 | time: string; 31 | values: Message[]; 32 | }; 33 | name: string[]; 34 | }>; 35 | getMessagesList(page: Page, lastName: string): Promise<{ 36 | name: string; 37 | time: string; 38 | values: Message[]; 39 | }>; 40 | } 41 | export {}; 42 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.message.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.message.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.message.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.message.with.view.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 3 | import { CDPSession, Page } from "puppeteer"; 4 | interface RequiredData { 5 | url: string; 6 | message: string; 7 | contact: any; 8 | IgnoreProspectMessages: 1 | 2 | 0; 9 | extra: { 10 | myname: string; 11 | mylastname: string; 12 | mycompany: string; 13 | }; 14 | image?: { 15 | todo: "gif" | "upload" | "personalized"; 16 | value: { 17 | picture: string; 18 | id: string | number; 19 | }; 20 | }; 21 | } 22 | export declare class LinkedinMessageWithView extends LinkedinAbstractService implements LinkedinServicesInterface { 23 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 24 | info: any; 25 | messages: { 26 | name: string; 27 | time: string; 28 | values: import("./linkedin.message.service").Message[]; 29 | }; 30 | name: string[]; 31 | }>; 32 | } 33 | export {}; 34 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.message.with.view.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinMessageWithView = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const linkedin_message_service_1 = require("./linkedin.message.service"); 6 | const create_linkedin_url_1 = require("../helpers/create.linkedin.url"); 7 | const gotoUrl_1 = require("../helpers/gotoUrl"); 8 | const timer_1 = require("../helpers/timer"); 9 | const linkedin_errors_1 = require("../enums/linkedin.errors"); 10 | class LinkedinMessageWithView extends linkedin_abstract_service_1.LinkedinAbstractService { 11 | async process(page, cdp, data) { 12 | var _a, _b; 13 | const theUrl = (0, create_linkedin_url_1.createLinkedinLink)(data.url, true); 14 | (0, gotoUrl_1.gotoUrl)(page, theUrl); 15 | await this.waitForLoader(page); 16 | await page.waitForSelector(".pv-top-card--list > li, .pv-top-card__photo"); 17 | await (0, timer_1.timer)(3000); 18 | const info = await this.extractInformation(page); 19 | const newMessage = await this.generateMessage(data.message, Object.assign({ firstName: info.name, lastName: info.last_name, companyName: info.companyName, profilePicture: info.profilePicture }, data.extra)); 20 | const url = await page.evaluate(() => { 21 | var _a, _b; 22 | return (_b = (_a = Array.from(document.body.querySelectorAll("*"))) === null || _a === void 0 ? void 0 : _a.find((p) => { var _a; return ((_a = p === null || p === void 0 ? void 0 : p.getAttribute("href")) === null || _a === void 0 ? void 0 : _a.indexOf("/messaging/thread")) > -1; })) === null || _b === void 0 ? void 0 : _b.getAttribute("href"); 23 | }); 24 | if (!url) { 25 | throw new linkedin_errors_1.LinkedinErrors("You are not connected with the prospect"); 26 | } 27 | const messageService = new linkedin_message_service_1.LinkedinMessageService(); 28 | return messageService.process(page, cdp, Object.assign(Object.assign({}, data), { url, info: { 29 | currentCompanyPicture: info.currentCompanyPicture, 30 | companyName: info.companyName, 31 | current_position_title: info.currentTitle, 32 | location: info.location, 33 | headline: info.headline, 34 | current_position_length: info.currentPositionLength, 35 | name: ((_a = data === null || data === void 0 ? void 0 : data.contact) === null || _a === void 0 ? void 0 : _a.name) || info.name + " " + info.last_name, 36 | url: theUrl, 37 | }, name: ((_b = data === null || data === void 0 ? void 0 : data.contact) === null || _b === void 0 ? void 0 : _b.name) || info.name + " " + info.last_name, message: newMessage })); 38 | } 39 | } 40 | exports.LinkedinMessageWithView = LinkedinMessageWithView; 41 | //# sourceMappingURL=linkedin.message.with.view.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.message.with.view.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.message.with.view.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.message.with.view.ts"],"names":[],"mappings":";;;AAAA,2EAAsE;AAKtE,yEAAoE;AACpE,wEAAkE;AAClE,gDAA2C;AAC3C,4CAAuC;AACvC,8DAAwD;AAqBxD,MAAa,uBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;;QAC3D,MAAM,MAAM,GAAG,IAAA,wCAAkB,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAElD,IAAA,iBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,8CAA8C,CAAC,CAAC;QAC3E,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,kBACxD,SAAS,EAAE,IAAI,CAAC,IAAI,EACpB,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,cAAc,EAAE,IAAI,CAAC,cAAc,IAChC,IAAI,CAAC,KAAK,EACb,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;YACnC,OAAO,MAAA,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,0CAClD,IAAI,CACJ,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,YAAY,CAAC,MAAM,CAAC,0CAAE,OAAO,CAAC,mBAAmB,CAAE,IAAG,CAAC,CAAC,CAAA,EAAA,CACnE,0CACC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,gCAAc,CAAC,yCAAyC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,IAAI,iDAAsB,EAAE,CAAC;QACpD,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,kCAClC,IAAI,KACP,GAAG,EACH,IAAI,EAAE;gBACJ,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,sBAAsB,EAAE,IAAI,CAAC,YAAY;gBACzC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,uBAAuB,EAAE,IAAI,CAAC,qBAAqB;gBACnD,IAAI,EAAE,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,0CAAE,IAAI,KAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS;gBAC7D,GAAG,EAAE,MAAM;aACZ,EACD,IAAI,EAAE,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,0CAAE,IAAI,KAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,EAC7D,OAAO,EAAE,UAAU,IACnB,CAAC;IACL,CAAC;CACF;AArDD,0DAqDC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.messages.from.chat.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import { Message } from "./linkedin.message.service"; 4 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 5 | export declare class LinkedinMessagesFromChat extends LinkedinAbstractService implements LinkedinServicesInterface { 6 | process(page: Page): Promise; 7 | getMessagesList(page: Page, lastName: string): Promise<{ 8 | id: string; 9 | name: string; 10 | time: string; 11 | img: string; 12 | link: string; 13 | values: Message[]; 14 | }>; 15 | nextPerson(page: Page, idList: string[], name: string, language: string): Promise; 16 | totalVisibleElement(page: Page): Promise; 17 | continueGetAllMessagesFromChat(page: Page): Promise; 18 | } 19 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.messages.from.chat.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.messages.from.chat.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.messages.from.chat.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.messages.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 2 | import { CDPSession, Page } from "puppeteer"; 3 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 4 | interface RequiredData { 5 | messages: Array<{ 6 | id: string; 7 | name: string; 8 | messages: string; 9 | link: string; 10 | }>; 11 | } 12 | export declare class LinkedinMessagesService extends LinkedinAbstractService implements LinkedinServicesInterface { 13 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise; 14 | } 15 | export {}; 16 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.messages.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinMessagesService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const linkedin_messages_from_chat_1 = require("./linkedin.messages.from.chat"); 6 | const gotoUrl_1 = require("../helpers/gotoUrl"); 7 | const timer_1 = require("../helpers/timer"); 8 | const messagesFromChat = new linkedin_messages_from_chat_1.LinkedinMessagesFromChat(); 9 | class LinkedinMessagesService extends linkedin_abstract_service_1.LinkedinAbstractService { 10 | async process(page, cdp, data) { 11 | try { 12 | for (const messages of data.messages) { 13 | await page.goto('about:blank'); 14 | (0, gotoUrl_1.gotoUrl)(page, messages.link); 15 | await this.waitForLoader(page); 16 | try { 17 | for (const message of messages.messages) { 18 | await (0, timer_1.timer)(5000); 19 | await this.moveAndClick(page, '[contenteditable="true"]'); 20 | await page.keyboard.type(message, { 21 | delay: 10, 22 | }); 23 | await page.keyboard.press("Enter"); 24 | await (0, timer_1.timer)(1000); 25 | await page.waitForFunction(() => { 26 | return document.querySelector(".msg-form__send-button:not(:disabled), .msg-form__hint-text"); 27 | }); 28 | const totalBefore = await page.evaluate(() => { 29 | return document.querySelectorAll(".msg-s-message-list__event") 30 | .length; 31 | }); 32 | await this.moveAndClick(page, ".msg-form__send-button:not(:disabled), .msg-form__hint-text"); 33 | await page.waitForFunction((before) => { 34 | return (document.querySelectorAll(".msg-s-message-list__event") 35 | .length !== before); 36 | }, {}, totalBefore); 37 | } 38 | } 39 | catch (err) { 40 | } 41 | } 42 | } 43 | catch (err) { 44 | } 45 | await page.goto('https://www.linkedin.com/messaging/'); 46 | await (0, timer_1.timer)(4000); 47 | return messagesFromChat.continueGetAllMessagesFromChat(page); 48 | } 49 | } 50 | exports.LinkedinMessagesService = LinkedinMessagesService; 51 | //# sourceMappingURL=linkedin.messages.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.messages.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.messages.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.messages.service.ts"],"names":[],"mappings":";;;AAIA,2EAAsE;AACtE,+EAAyE;AACzE,gDAA2C;AAC3C,4CAAuC;AACvC,MAAM,gBAAgB,GAAG,IAAI,sDAAwB,EAAE,CAAC;AAWxD,MAAa,uBACX,SAAQ,mDAAuB;IAG/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;QAC3D,IAAI;YACF,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACpC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC/B,IAAA,iBAAO,EAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAE/B,IAAI;oBACF,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;wBACvC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;wBAElB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;wBAE1D,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;4BAChC,KAAK,EAAE,EAAE;yBACV,CAAC,CAAC;wBAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAEnC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;wBAElB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;4BAC9B,OAAO,QAAQ,CAAC,aAAa,CAC3B,6DAA6D,CAC9D,CAAC;wBACJ,CAAC,CAAC,CAAC;wBAEH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;4BAC3C,OAAO,QAAQ,CAAC,gBAAgB,CAAC,4BAA4B,CAAC;iCAC3D,MAAM,CAAC;wBACZ,CAAC,CAAC,CAAC;wBAEH,MAAM,IAAI,CAAC,YAAY,CACrB,IAAI,EACJ,6DAA6D,CAC9D,CAAC;wBAEF,MAAM,IAAI,CAAC,eAAe,CACxB,CAAC,MAAM,EAAE,EAAE;4BACT,OAAO,CACL,QAAQ,CAAC,gBAAgB,CAAC,4BAA4B,CAAC;iCACpD,MAAM,KAAK,MAAM,CACrB,CAAC;wBACJ,CAAC,EACD,EAAE,EACF,WAAW,CACZ,CAAC;qBACH;iBACF;gBAAC,OAAO,GAAG,EAAE;iBACb;aACF;SACF;QAAC,OAAO,GAAG,EAAE;SACb;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACvD,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,OAAO,gBAAgB,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;CACF;AA9DD,0DA8DC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.page.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | export declare class LinkedinPageService extends LinkedinAbstractService { 4 | elements(page: Page, index: number): Promise; 5 | pagesTask(page: Page, url: string): Promise<{ 6 | pages: number; 7 | values: any; 8 | }>; 9 | } 10 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.page.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinPageService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const timer_1 = require("../helpers/timer"); 6 | class LinkedinPageService extends linkedin_abstract_service_1.LinkedinAbstractService { 7 | async elements(page, index) { 8 | if (index === 1) { 9 | await page.waitForSelector(`.artdeco-card ul li:nth-child(${index})`); 10 | } 11 | else { 12 | if (!(await page.$(`.artdeco-card ul li:nth-child(${index})`))) { 13 | return []; 14 | } 15 | } 16 | await this.moveMouseAndScroll(page, `.artdeco-card ul li:nth-child(${index})`); 17 | const list = await page.evaluate((cur) => { 18 | var _a, _b, _c; 19 | const element = document.querySelector(`.artdeco-card ul li:nth-child(${cur})`); 20 | if (!element) { 21 | return undefined; 22 | } 23 | const button = element.querySelector("button"); 24 | if (!button || !(button === null || button === void 0 ? void 0 : button.getAttribute("class"))) { 25 | return []; 26 | } 27 | const connect = ((_a = button.getAttribute("class")) === null || _a === void 0 ? void 0 : _a.indexOf("muted")) === -1; 28 | const nameElement = element.querySelector(".actor-name") || 29 | element.querySelector(".discover-person-card__name") || 30 | element.querySelector('.entity-result__title-text [data-control-name="entity_result"]') || 31 | element.querySelector(".entity-result__title-text") || 32 | element.querySelector(".artdeco-entity-lockup__title"); 33 | const descriptionElement = element.querySelector(".search-result__info > p") || 34 | element.querySelector(".discover-person-card__occupation") || 35 | element.querySelector(".entity-result__primary-subtitle") || 36 | element.querySelector(".artdeco-entity-lockup__subtitle"); 37 | const imgElement = element.querySelector("img.discover-entity-type-card__image-circle") || 38 | element.querySelector("img"); 39 | const name = nameElement === null || nameElement === void 0 ? void 0 : nameElement.innerText.trim().split("\n")[0]; 40 | const link = (_b = element === null || element === void 0 ? void 0 : element.querySelector('a[href*="/in/"]')) === null || _b === void 0 ? void 0 : _b.getAttribute("href"); 41 | const description = (_c = descriptionElement === null || descriptionElement === void 0 ? void 0 : descriptionElement.textContent) === null || _c === void 0 ? void 0 : _c.trim(); 42 | return [ 43 | { 44 | name, 45 | link, 46 | image: imgElement ? imgElement.getAttribute("src") : "", 47 | description, 48 | connect, 49 | }, 50 | ]; 51 | }, index); 52 | if (!list) { 53 | return []; 54 | } 55 | return [...list, ...(await this.elements(page, index + 1))]; 56 | } 57 | async pagesTask(page, url) { 58 | var _a, _b, _c, _d, _e; 59 | const goto = await page.goto(url); 60 | const json = await page.evaluate((val) => { 61 | var _a, _b, _c; 62 | const div = document.createElement("div"); 63 | div.innerHTML = val; 64 | const findElements = (_a = Array.from(div.querySelectorAll("code"))) === null || _a === void 0 ? void 0 : _a.filter((a) => { 65 | var _a, _b; 66 | return ((_a = a === null || a === void 0 ? void 0 : a.textContent) === null || _a === void 0 ? void 0 : _a.indexOf("elements")) > -1 && 67 | ((_b = a === null || a === void 0 ? void 0 : a.textContent) === null || _b === void 0 ? void 0 : _b.indexOf("totalResultCount")) > -1; 68 | }); 69 | if (findElements.length === 0) { 70 | return "{}"; 71 | } 72 | return (_c = (_b = findElements[findElements.length - 1]) === null || _b === void 0 ? void 0 : _b.textContent) === null || _c === void 0 ? void 0 : _c.trim(); 73 | }, (_a = (await (goto === null || goto === void 0 ? void 0 : goto.buffer()))) === null || _a === void 0 ? void 0 : _a.toString()); 74 | const { included, data } = JSON.parse(json || "{}"); 75 | if (!data || !included) { 76 | return { 77 | pages: 0, 78 | values: [], 79 | }; 80 | } 81 | return { 82 | pages: Math.ceil((((_b = data === null || data === void 0 ? void 0 : data.metadata) === null || _b === void 0 ? void 0 : _b.totalResultCount) > 1000 83 | ? 1000 84 | : (_c = data === null || data === void 0 ? void 0 : data.metadata) === null || _c === void 0 ? void 0 : _c.totalResultCount) / 10), 85 | values: ((_e = (_d = included === null || included === void 0 ? void 0 : included.filter((f) => { var _a; return (_a = f === null || f === void 0 ? void 0 : f.title) === null || _a === void 0 ? void 0 : _a.text; })) === null || _d === void 0 ? void 0 : _d.map((f) => { 86 | var _a, _b, _c, _d, _e, _f, _g, _h, _j; 87 | return ({ 88 | name: (_a = f === null || f === void 0 ? void 0 : f.title) === null || _a === void 0 ? void 0 : _a.text, 89 | link: f === null || f === void 0 ? void 0 : f.navigationUrl, 90 | description: (_b = f === null || f === void 0 ? void 0 : f.primarySubtitle) === null || _b === void 0 ? void 0 : _b.text, 91 | image: ((_g = (_f = (_e = (_d = (_c = f === null || f === void 0 ? void 0 : f.image) === null || _c === void 0 ? void 0 : _c.attributes[0]) === null || _d === void 0 ? void 0 : _d.detailDataUnion) === null || _e === void 0 ? void 0 : _e.nonEntityProfilePicture) === null || _f === void 0 ? void 0 : _f.vectorImage) === null || _g === void 0 ? void 0 : _g.rootUrl) 92 | ? ((_h = f === null || f === void 0 ? void 0 : f.image) === null || _h === void 0 ? void 0 : _h.attributes[0].detailDataUnion.nonEntityProfilePicture.vectorImage.rootUrl) + 93 | ((_j = f === null || f === void 0 ? void 0 : f.image) === null || _j === void 0 ? void 0 : _j.attributes[0].detailDataUnion.nonEntityProfilePicture.vectorImage.artifacts[0].fileIdentifyingUrlPathSegment) 94 | : "", 95 | }); 96 | })) === null || _e === void 0 ? void 0 : _e.filter((f) => (f === null || f === void 0 ? void 0 : f.name) && (f === null || f === void 0 ? void 0 : f.link) && (f === null || f === void 0 ? void 0 : f.link.indexOf("/in/")) > -1)) || 97 | [], 98 | }; 99 | await this.waitForLoader(page); 100 | await page.waitForSelector(".artdeco-card"); 101 | await page.waitForSelector(`.actor-name, .discover-person-card__name, .entity-result__title-text [data-control-name="entity_result"], .entity-result__title-text`, { 102 | timeout: 5000, 103 | }); 104 | await (0, timer_1.timer)(10000); 105 | const elements = await this.elements(page, 1); 106 | await (0, timer_1.timer)(200); 107 | const deltaY = await page.evaluate(() => { 108 | return document.body.scrollHeight; 109 | }); 110 | await page.mouse.wheel({ 111 | deltaY, 112 | }); 113 | await (0, timer_1.timer)(3000); 114 | const pages = !elements.length 115 | ? null 116 | : await page.evaluate(() => { 117 | var _a, _b; 118 | return (((_b = (_a = document 119 | .querySelector(".artdeco-pagination__pages li:last-child button")) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || 1); 120 | }); 121 | return { 122 | pages: pages === null ? 1 : +pages, 123 | values: elements, 124 | }; 125 | } 126 | } 127 | exports.LinkedinPageService = LinkedinPageService; 128 | //# sourceMappingURL=linkedin.page.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.page.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.page.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.page.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.profileViews.service.d.ts: -------------------------------------------------------------------------------- 1 | import { CDPSession, Page } from "puppeteer"; 2 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 3 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 4 | export interface People { 5 | name: { 6 | firstName: String; 7 | lastName: String; 8 | }; 9 | profilePicture?: String; 10 | count?: String; 11 | } 12 | export declare class LinkedinProfileViewsService extends LinkedinAbstractService implements LinkedinServicesInterface<{}> { 13 | globalError(): { 14 | text: string; 15 | }; 16 | process(page: Page, cdp: CDPSession): Promise>; 17 | } 18 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.profileViews.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinProfileViewsService = void 0; 4 | const autoScroll_1 = require("../helpers/autoScroll"); 5 | const timer_1 = require("../helpers/timer"); 6 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 7 | class LinkedinProfileViewsService extends linkedin_abstract_service_1.LinkedinAbstractService { 8 | globalError() { 9 | return { 10 | text: "Could not scrape pages", 11 | }; 12 | } 13 | async process(page, cdp) { 14 | await page.goto("https://www.linkedin.com/analytics/profile-views/"); 15 | try { 16 | await page.waitForSelector(".member-analytics-addon-entity-list__entity"); 17 | await (0, autoScroll_1.autoScroll)(page); 18 | await (0, timer_1.timer)(2000); 19 | const ppl = await page.evaluate(() => { 20 | var _a; 21 | return (_a = Array.from(document.querySelectorAll(".member-analytics-addon-entity-list__entity"))) === null || _a === void 0 ? void 0 : _a.map((node) => { 22 | var _a; 23 | let person = node === null || node === void 0 ? void 0 : node.querySelector(".member-analytics-addon-entity-list__entity-content-title"); 24 | let x = person === null || person === void 0 ? void 0 : person.querySelector("span > span"); 25 | let name = x === null || x === void 0 ? void 0 : x.textContent.split(" "); 26 | if (!name) { 27 | let countString = person.textContent.trim().split(" ")[0]; 28 | return { 29 | name: { 30 | firstName: "Private Mode", 31 | lastName: "Private Mode", 32 | countString, 33 | }, 34 | }; 35 | } 36 | let picNode = (_a = node.querySelector("img")) === null || _a === void 0 ? void 0 : _a.getAttribute("src"); 37 | return { 38 | name: { firstName: name[0], lastName: name[1] }, 39 | profilePicture: picNode, 40 | }; 41 | }); 42 | }); 43 | return ppl; 44 | } 45 | catch (error) { 46 | console.error(error); 47 | } 48 | } 49 | } 50 | exports.LinkedinProfileViewsService = LinkedinProfileViewsService; 51 | //# sourceMappingURL=linkedin.profileViews.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.profileViews.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.profileViews.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.profileViews.service.ts"],"names":[],"mappings":";;;AACA,sDAAmD;AACnD,4CAAyC;AACzC,2EAAsE;AAQtE,MAAa,2BACX,SAAQ,mDAAuB;IAG/B,WAAW;QACT,OAAO;YACL,IAAI,EAAE,wBAAwB;SAC/B,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACrE,IAAI;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,6CAA6C,CAAC,CAAC;YAC1E,MAAM,IAAA,uBAAU,EAAC,IAAI,CAAC,CAAC;YACvB,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAClB,MAAM,GAAG,GAAkB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;gBAClD,OAAA,MAAA,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,gBAAgB,CACvB,6CAA6C,CAC9C,CACF,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;oBACd,IAAI,MAAM,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAC9B,2DAA2D,CAC5D,CAAC;oBACF,IAAI,CAAC,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,aAAa,CAAC,CAAC;oBAC7C,IAAI,IAAI,GAAG,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACrC,IAAI,CAAC,IAAI,EAAE;wBACT,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAI1D,OAAO;4BACL,IAAI,EAAE;gCACJ,SAAS,EAAE,cAAc;gCACzB,QAAQ,EAAE,cAAc;gCACxB,WAAW;6BACZ;yBACF,CAAC;qBACH;oBACD,IAAI,OAAO,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,0CAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC7D,OAAO;wBACL,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;wBAC/C,cAAc,EAAE,OAAO;qBACxB,CAAC;gBACJ,CAAC,CAAC,CAAA;aAAA,CACH,CAAC;YACF,OAAO,GAAG,CAAC;SACZ;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACtB;IACH,CAAC;CACF;AAnDD,kEAmDC"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.sales.page.service.d.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 3 | export declare class LinkedinSalesPageService extends LinkedinAbstractService { 4 | salesNavChooser(page: Page): Promise; 5 | pagesTask(page: Page, url: string): Promise<{ 6 | pages: number; 7 | values: any; 8 | }>; 9 | scrollTo(page: Page, scrollName: string, time?: number): Promise; 10 | workOnResults(page: Page): Promise; 11 | } 12 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.sales.page.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.sales.page.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.sales.page.service.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.services.interface.d.ts: -------------------------------------------------------------------------------- 1 | import { CDPSession, Page } from "puppeteer"; 2 | export interface LinkedinServicesInterface { 3 | process: (page: Page, cdp: CDPSession, data?: T) => Promise; 4 | } 5 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.services.interface.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=linkedin.services.interface.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.services.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.services.interface.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.services.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /dist/linkedin/linkedin.visit.service.d.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from './linkedin.abstract.service'; 2 | import { LinkedinServicesInterface } from './linkedin.services.interface'; 3 | import { CDPSession, Page } from 'puppeteer'; 4 | interface RequiredData { 5 | url: string; 6 | } 7 | export declare class LinkedinVisitService extends LinkedinAbstractService implements LinkedinServicesInterface { 8 | process(page: Page, cdp: CDPSession, data: RequiredData): Promise<{ 9 | url: string; 10 | linkedin_id: string; 11 | }>; 12 | } 13 | export {}; 14 | -------------------------------------------------------------------------------- /dist/linkedin/linkedin.visit.service.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.LinkedinVisitService = void 0; 4 | const linkedin_abstract_service_1 = require("./linkedin.abstract.service"); 5 | const gotoUrl_1 = require("../helpers/gotoUrl"); 6 | const timer_1 = require("../helpers/timer"); 7 | const create_linkedin_url_1 = require("../helpers/create.linkedin.url"); 8 | class LinkedinVisitService extends linkedin_abstract_service_1.LinkedinAbstractService { 9 | async process(page, cdp, data) { 10 | const { url } = data; 11 | const theUrl = url.indexOf("linkedin.com") !== -1 12 | ? url 13 | : `https://www.linkedin.com${data.url}`; 14 | (0, gotoUrl_1.gotoUrl)(page, theUrl); 15 | await this.waitForLoader(page); 16 | await page.waitForSelector(".pv-top-card--list > li, .pv-top-card__photo"); 17 | await (0, timer_1.timer)(3000); 18 | const newUrl = await page.evaluate(() => { 19 | return window.location.href; 20 | }); 21 | return { url: theUrl, linkedin_id: (0, create_linkedin_url_1.createLinkedinLink)(newUrl, false) }; 22 | } 23 | } 24 | exports.LinkedinVisitService = LinkedinVisitService; 25 | //# sourceMappingURL=linkedin.visit.service.js.map -------------------------------------------------------------------------------- /dist/linkedin/linkedin.visit.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"linkedin.visit.service.js","sourceRoot":"","sources":["../../lib/linkedin/linkedin.visit.service.ts"],"names":[],"mappings":";;;AAAA,2EAAsE;AAGtE,gDAA2C;AAC3C,4CAAuC;AACvC,wEAAkE;AAMlE,MAAa,oBACX,SAAQ,mDAAuB;IAE/B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,GAAe,EAAE,IAAkB;QAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACrB,MAAM,MAAM,GACV,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,2BAA2B,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5C,IAAA,iBAAO,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,8CAA8C,CAAC,CAAC;QAC3E,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAGlB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAA,wCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAC,CAAC;IACvE,CAAC;CACF;AAxBD,oDAwBC"} -------------------------------------------------------------------------------- /lib/enums/linkedin.errors.ts: -------------------------------------------------------------------------------- 1 | export enum LINKEDIN_ERRORS { 2 | DISCONNECTED, 3 | INVALID_CREDENTIALS, 4 | DELAY, 5 | } 6 | 7 | export class LinkedinErrors { 8 | constructor( 9 | public text: string, 10 | public url?: string, 11 | public additional?: { values: LINKEDIN_ERRORS; more?: any } 12 | ) {} 13 | } 14 | -------------------------------------------------------------------------------- /lib/helpers/autoScroll.ts: -------------------------------------------------------------------------------- 1 | // from https://stackoverflow.com/a/53527984/16780635 2 | import { Page } from "puppeteer"; 3 | 4 | export async function autoScroll(page: Page) { 5 | await page.evaluate( 6 | () => 7 | new Promise((resolve) => { 8 | var scrollTop = -1; 9 | const interval = setInterval(() => { 10 | window.scrollBy(0, 100); 11 | if (document.documentElement.scrollTop !== scrollTop) { 12 | scrollTop = document.documentElement.scrollTop; 13 | return false; 14 | } 15 | clearInterval(interval); 16 | resolve(void {}); 17 | }, 150); 18 | }) 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /lib/helpers/capitalize.ts: -------------------------------------------------------------------------------- 1 | export const capitalize = (s: string) => { 2 | if (typeof s !== 'string') return ''; 3 | return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); 4 | }; 5 | -------------------------------------------------------------------------------- /lib/helpers/colors.ts: -------------------------------------------------------------------------------- 1 | interface String { 2 | black(): string; 3 | red(): string; 4 | green(): string; 5 | yellow(): string; 6 | blue(): string; 7 | magenta(): string; 8 | cyan(): string; 9 | white(): string; 10 | } 11 | 12 | // @ts-ignore 13 | const Reset = '\u001b[0m'; 14 | // @ts-ignore 15 | const colorWithReset = (color: string, str: string) => color + str + Reset; 16 | 17 | String.prototype.black = function (this: string) { 18 | return colorWithReset('\u001b[30m', this); 19 | }; 20 | String.prototype.red = function (this: string) { 21 | return colorWithReset('\u001b[31m', this); 22 | }; 23 | 24 | String.prototype.yellow = function (this: string) { 25 | return colorWithReset('\u001b[33m', this); 26 | }; 27 | 28 | String.prototype.green = function (this: string) { 29 | return colorWithReset('\u001b[32m', this); 30 | }; 31 | String.prototype.blue = function (this: string) { 32 | return colorWithReset('\u001b[34m', this); 33 | }; 34 | String.prototype.magenta = function (this: string) { 35 | return colorWithReset('\u001b[35m', this); 36 | }; 37 | String.prototype.cyan = function (this: string) { 38 | return colorWithReset('\u001b[36m', this); 39 | }; 40 | String.prototype.white = function (this: string) { 41 | return colorWithReset('\u001b[37m', this); 42 | }; 43 | -------------------------------------------------------------------------------- /lib/helpers/create.linkedin.url.ts: -------------------------------------------------------------------------------- 1 | export const createLinkedinLink = ( 2 | getLink: string, 3 | fullLinkedinUrl: boolean, 4 | ) => { 5 | if ( 6 | !getLink || 7 | (getLink.indexOf('/in/') === -1 && getLink.indexOf('/sales/people/') === -1) 8 | ) { 9 | return ''; 10 | } 11 | const link = getLink?.trim()?.replace(/\\/g, ''); 12 | const newLink = 13 | 'https://www.linkedin.com' + 14 | (link.indexOf('linkedin.com') > -1 ? link.split('linkedin.com')[1] : link); 15 | const prepend = fullLinkedinUrl ? 'https://www.linkedin.com' : ''; 16 | const path = new URL(newLink).pathname; 17 | if (path[path.length - 1] === '/') { 18 | return prepend + path.slice(0, path.length - 1); 19 | } 20 | 21 | return prepend + path; 22 | }; 23 | -------------------------------------------------------------------------------- /lib/helpers/gotoUrl.ts: -------------------------------------------------------------------------------- 1 | import {Page} from "puppeteer"; 2 | 3 | export const gotoUrl = async (page: Page, url: string) => { 4 | try { 5 | await page.goto(url, { 6 | timeout: 0 7 | }); 8 | } 9 | catch (err) {} 10 | } -------------------------------------------------------------------------------- /lib/helpers/linkedin.show.mouse.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "puppeteer"; 2 | 3 | export async function installMouseHelper(page: Page) { 4 | await page.evaluateOnNewDocument(() => { 5 | // Install mouse helper only for top-level frame. 6 | if (window !== window.parent) return; 7 | window.addEventListener( 8 | 'DOMContentLoaded', 9 | () => { 10 | const box = document.createElement('puppeteer-mouse-pointer'); 11 | const styleElement = document.createElement('style'); 12 | styleElement.innerHTML = ` 13 | puppeteer-mouse-pointer { 14 | pointer-events: none; 15 | position: absolute; 16 | top: 0; 17 | z-index: 1000000000000000; 18 | left: 0; 19 | width: 20px; 20 | height: 20px; 21 | background: rgba(0,0,0,.4); 22 | border: 1px solid white; 23 | border-radius: 10px; 24 | margin: -10px 0 0 -10px; 25 | padding: 0; 26 | transition: background .2s, border-radius .2s, border-color .2s; 27 | } 28 | puppeteer-mouse-pointer.button-1 { 29 | transition: none; 30 | background: rgba(0,0,0,0.9); 31 | } 32 | puppeteer-mouse-pointer.button-2 { 33 | transition: none; 34 | border-color: rgba(0,0,255,0.9); 35 | } 36 | puppeteer-mouse-pointer.button-3 { 37 | transition: none; 38 | border-radius: 4px; 39 | } 40 | puppeteer-mouse-pointer.button-4 { 41 | transition: none; 42 | border-color: rgba(255,0,0,0.9); 43 | } 44 | puppeteer-mouse-pointer.button-5 { 45 | transition: none; 46 | border-color: rgba(0,255,0,0.9); 47 | } 48 | `; 49 | document.head.appendChild(styleElement); 50 | document.body.appendChild(box); 51 | document.addEventListener( 52 | 'mousemove', 53 | (event) => { 54 | box.style.left = event.pageX + 'px'; 55 | box.style.top = event.pageY + 'px'; 56 | updateButtons(event.buttons); 57 | }, 58 | true, 59 | ); 60 | document.addEventListener( 61 | 'mousedown', 62 | (event) => { 63 | updateButtons(event.buttons); 64 | box.classList.add('button-' + event.which); 65 | }, 66 | true, 67 | ); 68 | document.addEventListener( 69 | 'mouseup', 70 | (event) => { 71 | updateButtons(event.buttons); 72 | box.classList.remove('button-' + event.which); 73 | }, 74 | true, 75 | ); 76 | function updateButtons(buttons: any) { 77 | for (let i = 0; i < 5; i++) { 78 | // @ts-ignore 79 | box.classList.toggle('button-' + i, buttons & (1 << i)); 80 | } 81 | } 82 | }, 83 | false, 84 | ); 85 | }); 86 | } 87 | -------------------------------------------------------------------------------- /lib/helpers/load-cursor.ts: -------------------------------------------------------------------------------- 1 | import {Page} from "puppeteer"; 2 | import {installMouseHelper} from "./show.mouse"; 3 | import {createCursor} from 'ghost-cursor'; 4 | 5 | const loadCursor = async (page: Page, headless: boolean) => { 6 | if (!headless) { 7 | await installMouseHelper(page); 8 | } 9 | 10 | // @ts-ignore 11 | page.cursor = await createCursor(page); 12 | } 13 | 14 | export default loadCursor; -------------------------------------------------------------------------------- /lib/helpers/make.id.ts: -------------------------------------------------------------------------------- 1 | export function makeid(size: number = 5) { 2 | let text = ''; 3 | const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 4 | 5 | for (let i = 0; i < size; i++) 6 | text += possible.charAt(Math.floor(Math.random() * possible.length)); 7 | 8 | return text; 9 | } 10 | -------------------------------------------------------------------------------- /lib/helpers/messages.service.ts: -------------------------------------------------------------------------------- 1 | import emojiStrip from 'emoji-strip'; 2 | import { Page } from 'puppeteer'; 3 | 4 | interface MessageOptions { 5 | label: string; 6 | value: string; 7 | } 8 | 9 | export class MessagesService { 10 | static _replace(content: string, name: string, value: string) { 11 | if (content.indexOf('{{') === -1) { 12 | return content; 13 | } 14 | 15 | const reg = new RegExp(`\{\{${name}\}\}`, 'g'); 16 | return content.replace(reg, value); 17 | } 18 | 19 | async messagesList(prospectName: string, page: Page) { 20 | await page.waitForSelector('.message-overlay__conversation article'); 21 | return page.evaluate((fullName: any) => { 22 | return [ 23 | ...Array.from( 24 | document.querySelectorAll('.message-overlay__conversation article'), 25 | ), 26 | ].map((current: any) => ({ 27 | from: 28 | current 29 | .querySelector('address') 30 | ?.textContent?.trim() 31 | .indexOf(fullName) > -1 32 | ? 'Prospect' 33 | : 'Me', 34 | message: current.lastElementChild?.textContent?.trim(), 35 | })); 36 | }, prospectName); 37 | } 38 | 39 | async createMessage( 40 | message: string, 41 | params: MessageOptions[], 42 | ) { 43 | 44 | for (let param of params) { 45 | message = MessagesService._replace( 46 | message, 47 | param.label, 48 | emojiStrip(param.value || ''), 49 | ); 50 | } 51 | 52 | return message.trim(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/helpers/show.mouse.ts: -------------------------------------------------------------------------------- 1 | export async function installMouseHelper(page) { 2 | await page.evaluateOnNewDocument(() => { 3 | // Install mouse helper only for top-level frame. 4 | if (window !== window.parent) return; 5 | window.addEventListener( 6 | 'DOMContentLoaded', 7 | () => { 8 | const box = document.createElement('puppeteer-mouse-pointer'); 9 | const styleElement = document.createElement('style'); 10 | styleElement.innerHTML = ` 11 | puppeteer-mouse-pointer { 12 | pointer-events: none; 13 | position: absolute; 14 | top: 0; 15 | z-index: 1000000000000000; 16 | left: 0; 17 | width: 20px; 18 | height: 20px; 19 | background: rgba(0,0,0,.4); 20 | border: 1px solid white; 21 | border-radius: 10px; 22 | margin: -10px 0 0 -10px; 23 | padding: 0; 24 | transition: background .2s, border-radius .2s, border-color .2s; 25 | } 26 | puppeteer-mouse-pointer.button-1 { 27 | transition: none; 28 | background: rgba(0,0,0,0.9); 29 | } 30 | puppeteer-mouse-pointer.button-2 { 31 | transition: none; 32 | border-color: rgba(0,0,255,0.9); 33 | } 34 | puppeteer-mouse-pointer.button-3 { 35 | transition: none; 36 | border-radius: 4px; 37 | } 38 | puppeteer-mouse-pointer.button-4 { 39 | transition: none; 40 | border-color: rgba(255,0,0,0.9); 41 | } 42 | puppeteer-mouse-pointer.button-5 { 43 | transition: none; 44 | border-color: rgba(0,255,0,0.9); 45 | } 46 | `; 47 | document.head.appendChild(styleElement); 48 | document.body.appendChild(box); 49 | document.addEventListener( 50 | 'mousemove', 51 | (event) => { 52 | box.style.left = event.pageX + 'px'; 53 | box.style.top = event.pageY + 'px'; 54 | updateButtons(event.buttons); 55 | }, 56 | true, 57 | ); 58 | document.addEventListener( 59 | 'mousedown', 60 | (event) => { 61 | updateButtons(event.buttons); 62 | box.classList.add('button-' + event.which); 63 | }, 64 | true, 65 | ); 66 | document.addEventListener( 67 | 'mouseup', 68 | (event) => { 69 | updateButtons(event.buttons); 70 | box.classList.remove('button-' + event.which); 71 | }, 72 | true, 73 | ); 74 | function updateButtons(buttons) { 75 | for (let i = 0; i < 5; i++) { 76 | // @ts-ignore 77 | box.classList.toggle('button-' + i, buttons & (1 << i)); 78 | } 79 | } 80 | }, 81 | false, 82 | ); 83 | }); 84 | } 85 | -------------------------------------------------------------------------------- /lib/helpers/timer.ts: -------------------------------------------------------------------------------- 1 | export function randomIntFromInterval(min: number, max: number) { // min and max included 2 | return Math.floor(Math.random() * (max - min + 1) + min); 3 | } 4 | 5 | export const timer = (num: number) => { 6 | return new Promise(res => { 7 | setTimeout(() => { 8 | res(true); 9 | }, num + randomIntFromInterval(-1000, 1000)); 10 | }); 11 | }; 12 | -------------------------------------------------------------------------------- /lib/linkedin.service.ts: -------------------------------------------------------------------------------- 1 | import {LinkedinEmailService} from "./linkedin/linkedin.email.service"; 2 | import {LinkedinConnectService} from "./linkedin/linkedin.connect.service"; 3 | import {LinkedinMessageService} from "./linkedin/linkedin.message.service"; 4 | import {LinkedinMessageWithView} from "./linkedin/linkedin.message.with.view"; 5 | import {LinkedinGlobalPageService} from "./linkedin/linkedin.global.page.service"; 6 | import {LinkedinAcceptedConnectionsService} from "./linkedin/linkedin.accepted.connection.request.service"; 7 | import {LinkedinMessagesFromChat} from "./linkedin/linkedin.messages.from.chat"; 8 | import {LinkedinLoginService} from "./linkedin/linkedin.login.service"; 9 | import {LinkedinMessagesService} from "./linkedin/linkedin.messages.service"; 10 | import {LinkedinEndorseService} from "./linkedin/linkedin.endorse.service"; 11 | import {LinkedinLikeService} from "./linkedin/linkedin.like.service"; 12 | import {LinkedinVisitService} from "./linkedin/linkedin.visit.service"; 13 | import {LinkedinEngagementService} from "./linkedin/linkedin.engagement.service"; 14 | import loadCursor from "./helpers/load-cursor"; 15 | import './helpers/colors'; 16 | import { LinkedinProfileViewsService } from "./linkedin/linkedin.profileViews.service"; 17 | 18 | export const services = { 19 | extract_information: new LinkedinEmailService(), 20 | connect: new LinkedinConnectService(), 21 | message: new LinkedinMessageService(), 22 | message_with_view: new LinkedinMessageWithView(), 23 | scraper: new LinkedinGlobalPageService(), 24 | accepted_connection_request: new LinkedinAcceptedConnectionsService(), 25 | chat: new LinkedinMessagesFromChat(), 26 | login: new LinkedinLoginService(), 27 | messages: new LinkedinMessagesService(), 28 | endorse: new LinkedinEndorseService(), 29 | like: new LinkedinLikeService(), 30 | visit: new LinkedinVisitService(), 31 | engagement: new LinkedinEngagementService(), 32 | profileViews: new LinkedinProfileViewsService(), 33 | } 34 | 35 | export const tools = { 36 | loadCursor 37 | } 38 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.accepted.connection.request.service.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 4 | import {gotoUrl} from "../helpers/gotoUrl"; 5 | 6 | export class LinkedinAcceptedConnectionsService 7 | extends LinkedinAbstractService 8 | implements LinkedinServicesInterface 9 | { 10 | async process(page: Page): Promise { 11 | gotoUrl(page, "https://www.linkedin.com/mynetwork/invite-connect/connections/"); 12 | 13 | await this.waitForLoader(page); 14 | 15 | try { 16 | await page.waitForSelector(".mn-connection-card__details", { 17 | timeout: 10000, 18 | }); 19 | 20 | return (await this.scrapeProfile(page)).map((m) => ({ 21 | name: m.name, 22 | url: m.url, 23 | })); 24 | } catch (err) { 25 | return []; 26 | } 27 | } 28 | 29 | async scrapeProfile( 30 | page: Page 31 | ): Promise> { 32 | // @ts-ignore 33 | return page.evaluate(async (current) => { 34 | return Array.from( 35 | document.querySelectorAll("ul .mn-connection-card") 36 | ).map((elm) => ({ 37 | name: elm 38 | .querySelector(".mn-connection-card__name") 39 | ?.textContent?.trim(), 40 | url: [ 41 | elm.querySelector("a")?.getAttribute("href"), 42 | ].reduce((all, url) => { 43 | // @ts-ignore 44 | if (url[url.length - 1] === "/") { 45 | // @ts-ignore 46 | return url.slice(0, -1); 47 | } 48 | return url; 49 | }, ""), 50 | })); 51 | }); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.email.service.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from './linkedin.abstract.service'; 2 | import { LinkedinServicesInterface } from './linkedin.services.interface'; 3 | import { CDPSession, Page } from 'puppeteer'; 4 | import {createLinkedinLink} from "../helpers/create.linkedin.url"; 5 | import {gotoUrl} from "../helpers/gotoUrl"; 6 | import {timer} from "../helpers/timer"; 7 | 8 | interface RequiredData { 9 | url: string; 10 | } 11 | 12 | export class LinkedinEmailService 13 | extends LinkedinAbstractService 14 | implements LinkedinServicesInterface { 15 | 16 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 17 | const { url } = data; 18 | const theUrl = createLinkedinLink(url, true); 19 | 20 | try { 21 | gotoUrl(page, theUrl); 22 | 23 | await this.waitForLoader(page); 24 | 25 | await timer(3000); 26 | // this is super important, if we don't do this, we would not know about the new url 27 | // And we will not know about connection requests approved 28 | const newUrl = await page.evaluate(() => { 29 | return window.location.href; 30 | }); 31 | 32 | await page.evaluate(() => { 33 | history.pushState({}, '', window.location.href + 'overlay/contact-info/'); 34 | history.pushState({}, '', window.location.href + 'overlay/contact-info/'); 35 | history.back(); 36 | }); 37 | 38 | return {...await this.extractEmail(page), url: theUrl, linkedin_id: createLinkedinLink(newUrl, false)}; 39 | } 40 | catch (err) { 41 | const newUrl = await page.evaluate(() => { 42 | return window.location.href; 43 | }); 44 | 45 | return {url: theUrl, linkedin_id: createLinkedinLink(newUrl, false)}; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.endorse.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LinkedinServicesInterface, 3 | } from "./linkedin.services.interface"; 4 | import { CDPSession, Page } from "puppeteer"; 5 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 6 | import {createLinkedinLink} from "../helpers/create.linkedin.url"; 7 | import {gotoUrl} from "../helpers/gotoUrl"; 8 | import {timer} from "../helpers/timer"; 9 | interface RequiredData { 10 | url: string; 11 | } 12 | 13 | export class LinkedinEndorseService 14 | extends LinkedinAbstractService 15 | implements LinkedinServicesInterface 16 | { 17 | globalError() { 18 | return { 19 | text: "Could not endorse", 20 | }; 21 | } 22 | 23 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 24 | const { url } = data; 25 | const theUrl = createLinkedinLink(url, true); 26 | 27 | try { 28 | gotoUrl(page, theUrl); 29 | 30 | await this.waitForLoader(page); 31 | 32 | await page.waitForSelector( 33 | ".pv-top-card--list > li, .pv-top-card__photo" 34 | ); 35 | 36 | await timer(3000); 37 | 38 | const scrollSize = await page.evaluate(() => { 39 | return document.body.scrollHeight; 40 | }); 41 | 42 | await page.mouse.wheel({ 43 | deltaY: scrollSize, 44 | }); 45 | 46 | await timer(3000); 47 | 48 | await page.waitForSelector(".pv-skill-categories-section", { 49 | visible: true, 50 | timeout: 7000, 51 | }); 52 | 53 | await this.moveMouseAndScroll( 54 | page, 55 | ".pv-skill-categories-section", 56 | 0, 57 | false, 58 | -200 59 | ); 60 | 61 | await timer(4000); 62 | 63 | const newUrl = await page.evaluate(() => { 64 | return window.location.href; 65 | }); 66 | 67 | const all = await page.evaluate(() => { 68 | return Array.from( 69 | document.querySelectorAll( 70 | ".pv-skill-entity__featured-endorse-button-shared:not(.pv-skill-entity__featured-endorse-button-shared--checked)" 71 | ) 72 | ) 73 | ?.map((p) => p.getAttribute("id")) 74 | .filter((f) => f); 75 | }); 76 | 77 | if (!all.length) { 78 | return { linkedin_id: createLinkedinLink(newUrl, false), url: newUrl }; 79 | } 80 | 81 | for (const id of all) { 82 | await this.moveAndClick(page, `#${id}`); 83 | 84 | await page.waitForSelector(".artdeco-hoverable-content__close-btn"); 85 | await this.moveAndClick(page, `.artdeco-hoverable-content__close-btn`); 86 | 87 | await timer(2000); 88 | } 89 | 90 | return { linkedin_id: createLinkedinLink(newUrl, false), url: newUrl }; 91 | } catch (err) { 92 | const newUrl = await page.evaluate(() => { 93 | return window.location.href; 94 | }); 95 | 96 | return { linkedin_id: createLinkedinLink(newUrl, false), url: newUrl }; 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.engagement.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LinkedinServicesInterface, 3 | } from "./linkedin.services.interface"; 4 | import { CDPSession, Page } from "puppeteer"; 5 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 6 | import {gotoUrl} from "../helpers/gotoUrl"; 7 | import {timer} from "../helpers/timer"; 8 | import { shuffle } from "lodash"; 9 | 10 | export class LinkedinEngagementService 11 | extends LinkedinAbstractService 12 | implements LinkedinServicesInterface 13 | { 14 | async process(page: Page, cdp: CDPSession, data: any) { 15 | gotoUrl(page, "https://www.linkedin.com/feed/"); 16 | 17 | await this.waitForLoader(page); 18 | 19 | await page.mouse.wheel({ 20 | deltaY: 1500, 21 | }); 22 | 23 | await timer(4000); 24 | 25 | await page.waitForFunction(() => { 26 | return ( 27 | Array.from( 28 | document.querySelectorAll( 29 | '[type="like-icon"], [type="thumbs-up-outline"]' 30 | ) 31 | ) || [] 32 | ) 33 | .map((curr) => { 34 | return curr 35 | .closest("button:not(.react-button--active)") 36 | ?.getAttribute("id"); 37 | }) 38 | .filter((f) => f); 39 | }); 40 | 41 | // @ts-ignore 42 | const ids: Array<{ 43 | id: string; 44 | like: string; 45 | comment: string; 46 | totalLikes: number; 47 | }> = await page.evaluate(() => { 48 | return ( 49 | Array.from( 50 | document.querySelectorAll( 51 | '[type="like-icon"], [type="thumbs-up-outline"]' 52 | ) 53 | ) || [] 54 | ) 55 | .map((curr) => { 56 | const parent = curr 57 | ?.closest("button:not(.react-button--active)") 58 | ?.closest(".social-details-social-activity")!; 59 | 60 | return { 61 | like: parent 62 | .querySelector( 63 | '[type="thumbs-up-outline"]' 64 | ) 65 | ?.closest("button") 66 | ?.getAttribute("id"), 67 | comment: parent 68 | .querySelector(".comment-button") 69 | ?.getAttribute("id"), 70 | id: parent?.getAttribute("id"), 71 | totalLikes: +( 72 | parent 73 | ?.querySelector( 74 | ".social-details-social-counts__reactions-count, .social-details-social-counts__social-proof-text" 75 | ) 76 | ?.textContent?.match(/\d/g)?.join('') || 0 77 | ), 78 | }; 79 | }) 80 | .filter((f) => f.id) 81 | .slice(0, 4); 82 | }); 83 | 84 | if (!ids.length) { 85 | return; 86 | } 87 | 88 | for (const id of ids) { 89 | try { 90 | await this.moveMouseAndScroll( 91 | page, 92 | `#${id.like}`, 93 | undefined, 94 | false, 95 | -700 96 | ); 97 | await timer(1000); 98 | await this.moveAndClick(page, `#${id.like}`); 99 | await timer(1000); 100 | 101 | if (id.totalLikes > 30) { 102 | await this.moveMouseAndScroll( 103 | page, 104 | `#${id.comment}`, 105 | undefined, 106 | false, 107 | -700 108 | ); 109 | await timer(1000); 110 | await this.moveAndClick(page, `#${id.comment}`); 111 | await timer(1000); 112 | await page.keyboard.type( 113 | shuffle([ 114 | "Thank you for sharing", 115 | "Great Share", 116 | "Cool", 117 | "Thanks for posting 💯🔥", 118 | "💯💯", 119 | "Great content keep it up 👌🏼", 120 | "Great 👍", 121 | "Awesome!!", 122 | ])[0], 123 | { delay: 20 } 124 | ); 125 | await timer(1000); 126 | await this.moveAndClick(page, ".comments-comment-box__submit-button"); 127 | } 128 | } catch (err) {} 129 | } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.global.page.service.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import { 4 | LinkedinServicesInterface, 5 | } from "./linkedin.services.interface"; 6 | import { CDPSession } from "puppeteer"; 7 | import { LinkedinSalesPageService } from "./linkedin.sales.page.service"; 8 | import { LinkedinPageService } from "./linkedin.page.service"; 9 | import { parse, stringify } from "querystring"; 10 | 11 | export interface PageConnections { 12 | name: string; 13 | link: string; 14 | image: string; 15 | description: string; 16 | connect: boolean; 17 | } 18 | 19 | interface RequiredData { 20 | page: number; 21 | url: string; 22 | remove_overlapping: boolean; 23 | } 24 | 25 | const normalPage = new LinkedinPageService(); 26 | const salesPage = new LinkedinSalesPageService(); 27 | 28 | export class LinkedinGlobalPageService 29 | extends LinkedinAbstractService 30 | implements LinkedinServicesInterface 31 | { 32 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 33 | const load = await this.startProcess(page, cdp, data); 34 | return { ...load, url: data.url }; 35 | } 36 | 37 | async startProcess( 38 | page: Page, 39 | cdp: CDPSession, 40 | data: RequiredData 41 | ): Promise<{ 42 | pages: number; 43 | remove_overlapping?: boolean; 44 | values: PageConnections[]; 45 | csv?: string; 46 | }> { 47 | const { page: pageNumber, url, remove_overlapping } = data; 48 | if (pageNumber > 100) { 49 | return { 50 | values: [], 51 | pages: 0, 52 | }; 53 | } 54 | const onlyQuery = new URL(url.replace("#", "?")); 55 | const parseQuery = parse(onlyQuery.search); 56 | 57 | if ( 58 | url.indexOf( 59 | "https://linvo-premium-dev-bucket.s3.us-east-2.amazonaws.com" 60 | ) === 0 && 61 | // @ts-ignore 62 | parseQuery.run === false 63 | ) { 64 | return { 65 | values: [], 66 | pages: 0, 67 | }; 68 | } 69 | 70 | if ( 71 | url.indexOf( 72 | "https://linvo-premium-dev-bucket.s3.us-east-2.amazonaws.com" 73 | ) === 0 74 | ) { 75 | return { 76 | values: [], 77 | pages: 1, 78 | csv: url, 79 | remove_overlapping, 80 | }; 81 | } 82 | 83 | if (pageNumber === 1) { 84 | // @ts-ignore 85 | delete parseQuery.page; 86 | } else { 87 | // @ts-ignore 88 | parseQuery.page = pageNumber; 89 | } 90 | 91 | // @ts-ignore 92 | if (parseQuery?.viewAllFilters) { 93 | // @ts-ignore 94 | parseQuery?.viewAllFilters = "false"; 95 | } 96 | 97 | const newUrl = stringify( 98 | parseQuery, 99 | onlyQuery.origin + 100 | onlyQuery.pathname + 101 | (url.indexOf("#") > -1 ? "#" : "?") 102 | ); 103 | 104 | const info = await (url.indexOf("/sales/") > -1 105 | ? salesPage 106 | : normalPage 107 | ).pagesTask(page, newUrl); 108 | 109 | // @ts-ignore 110 | return { 111 | ...info, 112 | remove_overlapping, 113 | }; 114 | 115 | return Promise.race([ 116 | (url.indexOf("/sales/") > -1 ? salesPage : normalPage).pagesTask( 117 | page, 118 | newUrl 119 | ), 120 | new Promise(async (res) => { 121 | try { 122 | await page.waitForFunction( 123 | () => { 124 | return ( 125 | document?.body?.innerText?.trim()?.indexOf("No results found") > 126 | -1 || 127 | document?.body?.innerText 128 | ?.trim() 129 | ?.indexOf( 130 | "no results containing your search terms were found" 131 | ) > -1 132 | ); 133 | }, 134 | { 135 | timeout: 0, 136 | } 137 | ); 138 | 139 | res({ 140 | values: [], 141 | pages: 0, 142 | }); 143 | } catch (err) { 144 | return; 145 | } 146 | }), 147 | ]) as any; 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.like.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LinkedinServicesInterface, 3 | } from "./linkedin.services.interface"; 4 | import { CDPSession, Page } from "puppeteer"; 5 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 6 | import {createLinkedinLink} from "../helpers/create.linkedin.url"; 7 | import {gotoUrl} from "../helpers/gotoUrl"; 8 | import {timer} from "../helpers/timer"; 9 | 10 | interface RequiredData { 11 | url: string; 12 | } 13 | 14 | export class LinkedinLikeService 15 | extends LinkedinAbstractService 16 | implements LinkedinServicesInterface 17 | { 18 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 19 | const { url } = data; 20 | const theUrl = createLinkedinLink(url, true); 21 | 22 | gotoUrl(page, theUrl); 23 | 24 | await this.waitForLoader(page); 25 | 26 | await timer(8000); 27 | 28 | const onlyUrl = await page.evaluate(() => { 29 | return window.location.href; 30 | }); 31 | 32 | await page.goto("about:blank"); 33 | 34 | const newUrl = createLinkedinLink(onlyUrl, false); 35 | 36 | gotoUrl(page, onlyUrl + "/detail/recent-activity/shares/"); 37 | 38 | try { 39 | await this.waitForLoader(page); 40 | 41 | await page.waitForSelector(".social-actions-button", { 42 | visible: true, 43 | timeout: 7000, 44 | }); 45 | 46 | const all = await page.evaluate(() => { 47 | return Array.from(document.querySelectorAll("[data-urn]")) 48 | // @ts-ignore 49 | ?.reduce((all, current) => { 50 | return [ 51 | ...all, 52 | current 53 | ?.querySelector(".social-actions-button") 54 | ?.getAttribute("id"), 55 | ]; 56 | }, []) 57 | // @ts-ignore 58 | ?.filter((f) => f) 59 | ?.slice(0, 1); 60 | }, []); 61 | 62 | if (!all.length) { 63 | return { linkedin_id: createLinkedinLink(newUrl, false), url: theUrl }; 64 | } 65 | 66 | await this.moveAndClick(page, `#${all[0]}`); 67 | 68 | return { linkedin_id: createLinkedinLink(newUrl, false), url: theUrl }; 69 | } catch (err) { 70 | return { linkedin_id: createLinkedinLink(newUrl, false), url: theUrl }; 71 | } 72 | // const newUrl = await page.evaluate(() => { 73 | // return window.location.href; 74 | // }); 75 | // 76 | // return { linkedin_id: createLinkedinLink(newUrl, false), url: theUrl}; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.login.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LinkedinServicesInterface, 3 | } from "./linkedin.services.interface"; 4 | import { CDPSession, Page } from "puppeteer"; 5 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 6 | import {timer} from "../helpers/timer"; 7 | import {LINKEDIN_ERRORS, LinkedinErrors} from "../enums/linkedin.errors"; 8 | 9 | interface RequiredData { 10 | user: string; 11 | password: string; 12 | } 13 | 14 | export class LinkedinLoginService 15 | extends LinkedinAbstractService 16 | implements LinkedinServicesInterface 17 | { 18 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 19 | try { 20 | await page.goto("https://www.linkedin.com/login"); 21 | 22 | await page.waitForSelector("#username"); 23 | 24 | await timer(4000); 25 | 26 | await (await page.$("#username"))?.type(data.user, { delay: 30 }); 27 | 28 | await timer(500); 29 | 30 | await (await page.$("#password"))?.type(data.password, { delay: 30 }); 31 | 32 | await timer(1000); 33 | await (await page.$("button[type=submit]"))?.click(); 34 | 35 | await timer(3000); 36 | 37 | await page.waitForSelector(".search-global-typeahead__input", { 38 | timeout: 30000, 39 | }); 40 | 41 | const token = await page.cookies(); 42 | 43 | return { 44 | user: data.user, 45 | token: token?.find((t) => t.name === "li_at")?.value, 46 | }; 47 | } catch (err) { 48 | throw new LinkedinErrors( 49 | "Could not login to linkedin, please update you credentials", 50 | '/accounts', 51 | { 52 | values: LINKEDIN_ERRORS.INVALID_CREDENTIALS, 53 | } 54 | ); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.message.with.view.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { 3 | LinkedinServicesInterface, 4 | } from "./linkedin.services.interface"; 5 | import { CDPSession, Page } from "puppeteer"; 6 | import { LinkedinMessageService } from "./linkedin.message.service"; 7 | import {createLinkedinLink} from "../helpers/create.linkedin.url"; 8 | import {gotoUrl} from "../helpers/gotoUrl"; 9 | import {timer} from "../helpers/timer"; 10 | import {LinkedinErrors} from "../enums/linkedin.errors"; 11 | 12 | interface RequiredData { 13 | url: string; 14 | message: string; 15 | contact: any; 16 | IgnoreProspectMessages: 1 | 2 | 0; 17 | extra: { 18 | myname: string; 19 | mylastname: string; 20 | mycompany: string; 21 | }; 22 | image?: { 23 | todo: "gif" | "upload" | "personalized"; 24 | value: { 25 | picture: string; 26 | id: string | number; 27 | }; 28 | }; 29 | } 30 | 31 | export class LinkedinMessageWithView 32 | extends LinkedinAbstractService 33 | implements LinkedinServicesInterface 34 | { 35 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 36 | const theUrl = createLinkedinLink(data.url, true); 37 | 38 | gotoUrl(page, theUrl); 39 | 40 | await this.waitForLoader(page); 41 | 42 | await page.waitForSelector(".pv-top-card--list > li, .pv-top-card__photo"); 43 | await timer(3000); 44 | const info = await this.extractInformation(page); 45 | 46 | const newMessage = await this.generateMessage(data.message, { 47 | firstName: info.name, 48 | lastName: info.last_name, 49 | companyName: info.companyName, 50 | profilePicture: info.profilePicture, 51 | ...data.extra, 52 | }); 53 | 54 | const url = await page.evaluate(() => { 55 | return Array.from(document.body.querySelectorAll("*")) 56 | ?.find( 57 | (p) => p?.getAttribute("href")?.indexOf("/messaging/thread")! > -1 58 | ) 59 | ?.getAttribute("href"); 60 | }); 61 | 62 | if (!url) { 63 | throw new LinkedinErrors("You are not connected with the prospect"); 64 | } 65 | 66 | const messageService = new LinkedinMessageService(); 67 | return messageService.process(page, cdp, { 68 | ...data, 69 | url, 70 | info: { 71 | currentCompanyPicture: info.currentCompanyPicture, 72 | companyName: info.companyName, 73 | current_position_title: info.currentTitle, 74 | location: info.location, 75 | headline: info.headline, 76 | current_position_length: info.currentPositionLength, 77 | name: data?.contact?.name || info.name + " " + info.last_name, 78 | url: theUrl, 79 | }, 80 | name: data?.contact?.name || info.name + " " + info.last_name, 81 | message: newMessage, 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.messages.from.chat.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import Sentiment from "sentiment"; 4 | import { shuffle } from "lodash"; 5 | import { Message } from "./linkedin.message.service"; 6 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 7 | import {gotoUrl} from "../helpers/gotoUrl"; 8 | import {timer} from "../helpers/timer"; 9 | const analyzer = new Sentiment(); 10 | 11 | export class LinkedinMessagesFromChat 12 | extends LinkedinAbstractService 13 | implements LinkedinServicesInterface 14 | { 15 | async process(page: Page) { 16 | gotoUrl(page, "https://www.linkedin.com/messaging/"); 17 | 18 | await this.waitForLoader(page); 19 | 20 | return this.continueGetAllMessagesFromChat(page); 21 | } 22 | 23 | async getMessagesList( 24 | page: Page, 25 | lastName: string 26 | ): Promise<{ 27 | id: string; 28 | name: string; 29 | time: string; 30 | img: string; 31 | link: string; 32 | values: Message[]; 33 | }> { 34 | try { 35 | await page.waitForFunction( 36 | (last) => { 37 | return ( 38 | last !== 39 | document 40 | ?.querySelector( 41 | '[data-control-name="topcard"] h2, .msg-entity-lockup__entity-title-wrapper h2' 42 | ) 43 | ?.textContent?.trim() 44 | ); 45 | }, 46 | { timeout: 10000 }, 47 | lastName 48 | ); 49 | await page.waitForSelector(".msg-s-message-list__loader.hidden"); 50 | } catch (err) { 51 | // @ts-ignore 52 | return; 53 | } 54 | 55 | const getName = await page.evaluate(() => { 56 | return ( 57 | document 58 | ?.querySelector( 59 | '[data-control-name="topcard"] h2, .msg-entity-lockup__entity-title-wrapper h2' 60 | ) 61 | ?.textContent?.trim() || "" 62 | ); 63 | }); 64 | 65 | const time = 66 | (await page.evaluate((n) => { 67 | return (Array.from(document.querySelectorAll("h3")) || []) 68 | ?.find((f) => f?.innerText?.trim()?.indexOf(n) > -1) 69 | ?.nextElementSibling?.textContent?.trim(); 70 | }, getName)) || ""; 71 | 72 | const img = 73 | (await page.evaluate((n) => { 74 | return (Array.from(document.querySelectorAll("h3")) || []) 75 | ?.find((f) => f?.innerText?.trim()?.indexOf(n) > -1) 76 | ?.closest("li") 77 | ?.querySelector("img") 78 | ?.getAttribute("src"); 79 | }, getName)) || ''; 80 | 81 | const id = await page.evaluate(() => { 82 | return document 83 | ?.querySelector('[data-control-name="topcard"], .msg-thread__link-to-profile') 84 | ?.getAttribute("href") 85 | ?.trim(); 86 | }); 87 | 88 | const link = await page.evaluate(() => { 89 | return window.location.href; 90 | }); 91 | 92 | const a = { 93 | id, 94 | name: getName, 95 | time, 96 | img, 97 | link, 98 | values: ( 99 | await page.evaluate((theName) => { 100 | return ( 101 | Array.from( 102 | document.querySelectorAll(".msg-s-message-list__event") 103 | ) || [] 104 | ).reduce((all, current) => { 105 | const top = current 106 | .querySelector('[data-control-name="view_profile"], .msg-s-message-group__profile-link') 107 | ?.textContent?.trim(); 108 | 109 | const time = Array.from(current.querySelectorAll("time")) 110 | ?.find((m) => m?.textContent?.indexOf(":")! > -1) 111 | ?.textContent?.trim(); 112 | if (top) { 113 | all.push({ 114 | name: theName!, 115 | link: window.location.href, 116 | time, 117 | from: top === theName ? "Prospect" : "Me", 118 | message: "", 119 | }); 120 | } 121 | 122 | const message = current 123 | .querySelector("[data-event-urn] p") 124 | ?.textContent?.trim(); 125 | 126 | all[all.length - 1] = { 127 | ...all[all.length - 1], 128 | message: (" " + message).trim(), 129 | }; 130 | 131 | return all; 132 | }, [] as any[]); 133 | }, getName) 134 | ) 135 | .map((p) => ({ 136 | ...p, 137 | sentiment: p?.message ? analyzer.analyze(p?.message).score : 0, 138 | })) 139 | .filter((p) => p?.message && p?.name), 140 | }; 141 | 142 | console.log(a); 143 | 144 | // @ts-ignore 145 | return a; 146 | } 147 | 148 | async nextPerson( 149 | page: Page, 150 | idList: string[], 151 | name: string, 152 | language: string 153 | ): Promise { 154 | if (!idList.length) { 155 | return []; 156 | } 157 | 158 | const current = idList.shift(); 159 | 160 | await this.moveAndClick( 161 | page, 162 | `#${current} .msg-conversation-card__body-row` 163 | ); 164 | await timer(2000); 165 | 166 | const load = await this.getMessagesList(page, name); 167 | return [ 168 | ...(load?.id 169 | ? [ 170 | { 171 | id: load?.id, 172 | time: load?.time, 173 | name: load?.name || "", 174 | link: load?.link || "", 175 | list: load?.values, 176 | img: load?.img || "", 177 | language, 178 | }, 179 | ] 180 | : []), 181 | ...(await this.nextPerson(page, idList, load?.name || "", language)), 182 | ]; 183 | } 184 | 185 | async totalVisibleElement(page: Page) { 186 | return page.evaluate(() => { 187 | const { height: elmHeight } = document 188 | .querySelector( 189 | ".msg-conversations-container__conversations-list > li:not(:empty)" 190 | ) 191 | ?.getBoundingClientRect()!; 192 | const { height: heightContainer } = document 193 | .querySelector(".msg-conversations-container__conversations-list") 194 | ?.getBoundingClientRect()!; 195 | return Math.floor(heightContainer / elmHeight); 196 | }); 197 | } 198 | 199 | async continueGetAllMessagesFromChat(page: Page) { 200 | await page.waitForSelector( 201 | ".msg-conversations-container__conversations-list > li:not(:empty)", 202 | { 203 | visible: true, 204 | } 205 | ); 206 | const visibility = await this.totalVisibleElement(page); 207 | const all = shuffle( 208 | ( 209 | await page.evaluate((vis) => { 210 | return Array.from( 211 | document.querySelectorAll( 212 | ".msg-conversations-container__conversations-list > li:not(:empty):not(.msg-conversation-card--occluded)" 213 | ) 214 | ) 215 | .map((f) => ({ 216 | id: f.getAttribute("id"), 217 | filter: 218 | f.innerHTML.indexOf("InMail") > -1 || 219 | f.innerHTML.indexOf("LinkedIn Offer") > -1 || 220 | f.innerHTML.indexOf("Sponsored") > -1, 221 | })) 222 | .filter((f) => (f.id || "").indexOf("ember") > -1) 223 | .slice(0, vis); 224 | }, visibility) 225 | ) 226 | .filter((f) => !f.filter) 227 | .map((p) => p.id) 228 | ); 229 | 230 | const language = await page.evaluate(() => { 231 | return document 232 | .querySelector('meta[name="i18nLocale"]') 233 | ?.getAttribute("content") 234 | ?.split("_")[0]; 235 | }); 236 | 237 | return (await this.nextPerson(page, all as any, "", language!)).filter( 238 | (f: any) => f?.name && f?.list.length 239 | ); 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.messages.service.ts: -------------------------------------------------------------------------------- 1 | import { 2 | LinkedinServicesInterface, 3 | } from "./linkedin.services.interface"; 4 | import { CDPSession, Page } from "puppeteer"; 5 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 6 | import { LinkedinMessagesFromChat } from "./linkedin.messages.from.chat"; 7 | import {gotoUrl} from "../helpers/gotoUrl"; 8 | import {timer} from "../helpers/timer"; 9 | const messagesFromChat = new LinkedinMessagesFromChat(); 10 | 11 | interface RequiredData { 12 | messages: Array<{ 13 | id: string; 14 | name: string; 15 | messages: string; 16 | link: string; 17 | }>; 18 | } 19 | 20 | export class LinkedinMessagesService 21 | extends LinkedinAbstractService 22 | implements LinkedinServicesInterface 23 | { 24 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 25 | try { 26 | for (const messages of data.messages) { 27 | await page.goto('about:blank'); 28 | gotoUrl(page, messages.link); 29 | await this.waitForLoader(page); 30 | 31 | try { 32 | for (const message of messages.messages) { 33 | await timer(5000); 34 | 35 | await this.moveAndClick(page, '[contenteditable="true"]'); 36 | 37 | await page.keyboard.type(message, { 38 | delay: 10, 39 | }); 40 | 41 | await page.keyboard.press("Enter"); 42 | 43 | await timer(1000); 44 | 45 | await page.waitForFunction(() => { 46 | return document.querySelector( 47 | ".msg-form__send-button:not(:disabled), .msg-form__hint-text" 48 | ); 49 | }); 50 | 51 | const totalBefore = await page.evaluate(() => { 52 | return document.querySelectorAll(".msg-s-message-list__event") 53 | .length; 54 | }); 55 | 56 | await this.moveAndClick( 57 | page, 58 | ".msg-form__send-button:not(:disabled), .msg-form__hint-text" 59 | ); 60 | 61 | await page.waitForFunction( 62 | (before) => { 63 | return ( 64 | document.querySelectorAll(".msg-s-message-list__event") 65 | .length !== before 66 | ); 67 | }, 68 | {}, 69 | totalBefore 70 | ); 71 | } 72 | } catch (err) { 73 | } 74 | } 75 | } catch (err) { 76 | } 77 | 78 | await page.goto('https://www.linkedin.com/messaging/'); 79 | await timer(4000); 80 | return messagesFromChat.continueGetAllMessagesFromChat(page); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.page.service.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 2 | import { Page } from "puppeteer"; 3 | import {timer} from "../helpers/timer"; 4 | 5 | export class LinkedinPageService extends LinkedinAbstractService { 6 | async elements(page: Page, index: number): Promise { 7 | if (index === 1) { 8 | await page.waitForSelector(`.artdeco-card ul li:nth-child(${index})`); 9 | } else { 10 | if (!(await page.$(`.artdeco-card ul li:nth-child(${index})`))) { 11 | return []; 12 | } 13 | } 14 | 15 | await this.moveMouseAndScroll( 16 | page, 17 | `.artdeco-card ul li:nth-child(${index})` 18 | ); 19 | 20 | const list = await page.evaluate((cur) => { 21 | const element = document.querySelector( 22 | `.artdeco-card ul li:nth-child(${cur})` 23 | ); 24 | 25 | if (!element) { 26 | return undefined; 27 | } 28 | 29 | const button = element.querySelector("button"); 30 | if (!button || !button?.getAttribute("class")) { 31 | return []; 32 | } 33 | 34 | const connect = button.getAttribute("class")?.indexOf("muted") === -1; 35 | 36 | const nameElement = 37 | element.querySelector(".actor-name") || 38 | element.querySelector(".discover-person-card__name") || 39 | element.querySelector( 40 | '.entity-result__title-text [data-control-name="entity_result"]' 41 | ) || 42 | element.querySelector(".entity-result__title-text") || 43 | element.querySelector(".artdeco-entity-lockup__title"); 44 | 45 | const descriptionElement = 46 | element.querySelector(".search-result__info > p") || 47 | element.querySelector(".discover-person-card__occupation") || 48 | element.querySelector(".entity-result__primary-subtitle") || 49 | element.querySelector(".artdeco-entity-lockup__subtitle"); 50 | const imgElement = 51 | element.querySelector("img.discover-entity-type-card__image-circle") || 52 | element.querySelector("img"); 53 | // @ts-ignore 54 | const name = nameElement?.innerText.trim().split("\n")[0]; 55 | const link = element 56 | ?.querySelector('a[href*="/in/"]') 57 | ?.getAttribute("href"); 58 | const description = descriptionElement?.textContent?.trim(); 59 | 60 | return [ 61 | { 62 | name, 63 | link, 64 | image: imgElement ? imgElement.getAttribute("src") : "", 65 | description, 66 | connect, 67 | }, 68 | ]; 69 | }, index); 70 | 71 | if (!list) { 72 | return []; 73 | } 74 | 75 | return [...list, ...(await this.elements(page, index + 1))]; 76 | } 77 | 78 | async pagesTask(page: Page, url: string) { 79 | const goto = await page.goto(url); 80 | 81 | const json = await page.evaluate((val) => { 82 | const div = document.createElement("div"); 83 | // @ts-ignore 84 | div.innerHTML = val; 85 | // @ts-ignore 86 | const findElements = Array.from(div.querySelectorAll("code"))?.filter( 87 | (a) => 88 | a?.textContent?.indexOf("elements")! > -1 && 89 | a?.textContent?.indexOf("totalResultCount")! > -1 90 | ); 91 | if (findElements.length === 0) { 92 | return "{}"; 93 | } 94 | 95 | return findElements[findElements.length - 1]?.textContent?.trim(); 96 | }, (await goto?.buffer())?.toString()); 97 | 98 | const { included, data } = JSON.parse(json || "{}"); 99 | 100 | if (!data || !included) { 101 | return { 102 | pages: 0, 103 | values: [], 104 | }; 105 | } 106 | 107 | return { 108 | pages: Math.ceil( 109 | (data?.metadata?.totalResultCount > 1000 110 | ? 1000 111 | : data?.metadata?.totalResultCount) / 10 112 | ), 113 | values: 114 | included 115 | ?.filter((f: any) => f?.title?.text) 116 | ?.map((f: any) => ({ 117 | name: f?.title?.text, 118 | link: f?.navigationUrl, 119 | description: f?.primarySubtitle?.text, 120 | image: f?.image?.attributes[0]?.detailDataUnion 121 | ?.nonEntityProfilePicture?.vectorImage?.rootUrl 122 | ? f?.image?.attributes[0].detailDataUnion.nonEntityProfilePicture 123 | .vectorImage.rootUrl + 124 | f?.image?.attributes[0].detailDataUnion.nonEntityProfilePicture 125 | .vectorImage.artifacts[0].fileIdentifyingUrlPathSegment 126 | : "", 127 | })) 128 | ?.filter((f: any) => f?.name && f?.link && f?.link.indexOf("/in/") > -1) || 129 | [], 130 | }; 131 | 132 | await this.waitForLoader(page); 133 | 134 | await page.waitForSelector(".artdeco-card"); 135 | await page.waitForSelector( 136 | `.actor-name, .discover-person-card__name, .entity-result__title-text [data-control-name="entity_result"], .entity-result__title-text`, 137 | { 138 | timeout: 5000, 139 | } 140 | ); 141 | 142 | await timer(10000); 143 | 144 | const elements = await this.elements(page, 1); 145 | 146 | await timer(200); 147 | 148 | const deltaY = await page.evaluate(() => { 149 | return document.body.scrollHeight; 150 | }); 151 | 152 | await page.mouse.wheel({ 153 | deltaY, 154 | }); 155 | 156 | await timer(3000); 157 | 158 | const pages = !elements.length 159 | ? null 160 | : await page.evaluate(() => { 161 | return ( 162 | document 163 | .querySelector(".artdeco-pagination__pages li:last-child button") 164 | ?.textContent?.trim() || 1 165 | ); 166 | }); 167 | 168 | return { 169 | pages: pages === null ? 1 : +pages!, 170 | values: elements, 171 | }; 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.profileViews.service.ts: -------------------------------------------------------------------------------- 1 | import { CDPSession, Page } from "puppeteer"; 2 | import { autoScroll } from "../helpers/autoScroll"; 3 | import { timer } from "../helpers/timer"; 4 | import { LinkedinAbstractService } from "./linkedin.abstract.service"; 5 | import { LinkedinServicesInterface } from "./linkedin.services.interface"; 6 | 7 | export interface People { 8 | name: { firstName: String; lastName: String }; 9 | profilePicture?: String; 10 | count?: String; 11 | } 12 | export class LinkedinProfileViewsService 13 | extends LinkedinAbstractService 14 | implements LinkedinServicesInterface<{}> 15 | { 16 | globalError() { 17 | return { 18 | text: "Could not scrape pages", 19 | }; 20 | } 21 | async process(page: Page, cdp: CDPSession): Promise> { 22 | await page.goto("https://www.linkedin.com/analytics/profile-views/"); 23 | try { 24 | await page.waitForSelector(".member-analytics-addon-entity-list__entity"); 25 | await autoScroll(page); 26 | await timer(2000); 27 | const ppl: Array = await page.evaluate(() => 28 | Array.from( 29 | document.querySelectorAll( 30 | ".member-analytics-addon-entity-list__entity" 31 | ) 32 | )?.map((node) => { 33 | let person = node?.querySelector( 34 | ".member-analytics-addon-entity-list__entity-content-title" 35 | ); 36 | let x = person?.querySelector("span > span"); 37 | let name = x?.textContent.split(" "); 38 | if (!name) { 39 | let countString = person.textContent.trim().split(" ")[0]; 40 | // BUG: The following two lines give and error because the string might not have been resolved yet 41 | // let count = parseInt(countString); 42 | // console.log(count); 43 | return { 44 | name: { 45 | firstName: "Private Mode", 46 | lastName: "Private Mode", 47 | countString, 48 | }, 49 | }; 50 | } 51 | let picNode = node.querySelector("img")?.getAttribute("src"); 52 | return { 53 | name: { firstName: name[0], lastName: name[1] }, 54 | profilePicture: picNode, 55 | }; 56 | }) 57 | ); 58 | return ppl; 59 | } catch (error) { 60 | console.error(error); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.services.interface.ts: -------------------------------------------------------------------------------- 1 | import { CDPSession, Page } from "puppeteer"; 2 | 3 | export interface LinkedinServicesInterface { 4 | // eslint-disable-next-line @typescript-eslint/no-misused-new 5 | process: (page: Page, cdp: CDPSession, data?: T) => Promise; 6 | } 7 | -------------------------------------------------------------------------------- /lib/linkedin/linkedin.visit.service.ts: -------------------------------------------------------------------------------- 1 | import { LinkedinAbstractService } from './linkedin.abstract.service'; 2 | import { LinkedinServicesInterface } from './linkedin.services.interface'; 3 | import { CDPSession, Page } from 'puppeteer'; 4 | import {gotoUrl} from "../helpers/gotoUrl"; 5 | import {timer} from "../helpers/timer"; 6 | import {createLinkedinLink} from "../helpers/create.linkedin.url"; 7 | 8 | interface RequiredData { 9 | url: string; 10 | } 11 | 12 | export class LinkedinVisitService 13 | extends LinkedinAbstractService 14 | implements LinkedinServicesInterface { 15 | async process(page: Page, cdp: CDPSession, data: RequiredData) { 16 | const { url } = data; 17 | const theUrl = 18 | url.indexOf("linkedin.com") !== -1 19 | ? url 20 | : `https://www.linkedin.com${data.url}`; 21 | 22 | gotoUrl(page, theUrl); 23 | 24 | await this.waitForLoader(page); 25 | 26 | await page.waitForSelector(".pv-top-card--list > li, .pv-top-card__photo"); 27 | await timer(3000); 28 | // this is super important, if we don't do this, we would not know about the new url 29 | // And we will not know about connection requests approved 30 | const newUrl = await page.evaluate(() => { 31 | return window.location.href; 32 | }); 33 | 34 | return {url: theUrl, linkedin_id: createLinkedinLink(newUrl, false)}; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/test.example.ts: -------------------------------------------------------------------------------- 1 | import * as LinvoScraper from './linkedin.service'; 2 | import * as puppeteer from 'puppeteer'; 3 | 4 | (async () => { 5 | const browser = await puppeteer.launch({ 6 | headless: false 7 | }); 8 | const page = (await browser.newPage()); 9 | const cdp = await page.target().createCDPSession(); 10 | 11 | // that's the res Linvo is working in production 12 | await page.setViewport({ 13 | width: 1440, 14 | height: 900, 15 | }); 16 | 17 | // add ghost-cursor for maximum safety 18 | await LinvoScraper.tools.loadCursor(page, true); 19 | 20 | // Login with Linkedin 21 | const {token} = await LinvoScraper.services.login.process(page, cdp, { 22 | user: 'bang@linvo.io', 23 | password: 'superStrongPass!!%' 24 | }) 25 | 26 | // set cookies 27 | await page.setCookie({ 28 | name: "li_at", 29 | value: token, 30 | httpOnly: true, 31 | secure: true, 32 | sameSite: "None", 33 | priority: "Medium", 34 | path: "/", 35 | domain: ".www.linkedin.com", 36 | }); 37 | 38 | await LinvoScraper.services.connect.process(page, cdp, { 39 | message: 'Hi Nevo! Let\'s connect!', 40 | url: 'https://www.linkedin.com/in/nevo-david/' 41 | }) 42 | })(); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "linvo-scraper", 3 | "version": "1.0.5", 4 | "description": "", 5 | "main": "dist/linkedin.service.js", 6 | "scripts": { 7 | "start": "./node_modules/.bin/ts-node lib/test.ts", 8 | "watch": "./node_modules/typescript/bin/tsc --watch", 9 | "build": "./node_modules/typescript/bin/tsc" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git@github.com:linvo-io/linvo-scraper.git" 14 | }, 15 | "author": "", 16 | "license": "ISC", 17 | "devDependencies": { 18 | "puppeteer": "^18.2.1", 19 | "ts-node": "^10.9.1", 20 | "typescript": "^4.8.4" 21 | }, 22 | "dependencies": { 23 | "@types/emoji-strip": "^1.0.0", 24 | "@types/lodash": "^4.14.186", 25 | "@types/moment": "^2.13.0", 26 | "@types/sentiment": "^5.0.1", 27 | "@types/string-similarity": "^4.0.0", 28 | "emoji-strip": "^1.0.1", 29 | "ghost-cursor": "^1.1.15", 30 | "lodash": "^4.17.21", 31 | "moment": "^2.29.4", 32 | "puppeteer-core": "^18.2.1", 33 | "querystring": "^0.2.1", 34 | "sentiment": "^5.0.2", 35 | "string-similarity": "^4.0.4" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "moduleResolution": "node", 10 | "target": "es2017", 11 | "sourceMap": true, 12 | "outDir": "./dist", 13 | "baseUrl": "./", 14 | "incremental": true, 15 | "esModuleInterop": true, 16 | "skipLibCheck": true, 17 | "lib": ["es2020.string", "dom"] 18 | } 19 | } 20 | --------------------------------------------------------------------------------