UNPKG

@jomari-wp/linkedin-jobs-scraper

Version:

Scrape public available jobs on Linkedin using headless browser

78 lines (70 loc) 2.24 kB
import { EventMap } from 'typed-emitter'; type BrowserEvent = "disconnected" | "targetchanged" | "targetcreated" | "targetdestroyed"; export interface IData { query: string; location: string; jobId: string; jobIndex: number; // Job index during search, only useful for debug link: string; applyLink?: string; title: string; company: string; companyLink?: string; companyImgLink?: string; place: string; date: string; description: string; descriptionHTML: string; insights: string[]; } export interface IMetrics { processed: number; // Number of successfully processed jobs failed: number; // Number of jobs failed to process (because of an error) missed: number; // Number of missed jobs to load during scraping } interface IEvents { scraper: { data: "scraper:data"; error: "scraper:error"; metrics: "scraper:metrics"; invalidSession: "scraper:invalid-session", end: "scraper:end"; }, puppeteer: { browser: { disconnected: BrowserEvent; targetchanged: BrowserEvent; targetcreated: BrowserEvent; targetdestroyed: BrowserEvent; }, }, } const events: IEvents = { scraper: { data: "scraper:data", error: "scraper:error", metrics: "scraper:metrics", invalidSession: "scraper:invalid-session", end: "scraper:end", }, puppeteer: { browser: { disconnected: "disconnected" as BrowserEvent, targetchanged: "targetchanged" as BrowserEvent, targetcreated: "targetcreated" as BrowserEvent, targetdestroyed: "targetdestroyed" as BrowserEvent, }, }, }; export type IEventListeners = { ["scraper:data"]: (data: IData) => void; ["scraper:error"]: (error: Error | string) => void; ["scraper:metrics"]: (data: IMetrics) => void; ["scraper:invalid-session"]: () => void; ["scraper:end"]: () => void; ["disconnected"]: (...args: any[]) => void; ["targetchanged"]: (...args: any[]) => void; ["targetcreated"]: (...args: any[]) => void; ["targetdestroyed"]: (...args: any[]) => void; } export { events };