n8n-nodes-linkedin-scraper 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -380,6 +380,7 @@ class LinkedinScraper {
|
|
|
380
380
|
password,
|
|
381
381
|
},
|
|
382
382
|
json: true,
|
|
383
|
+
timeout: 2 * 60 * 1000,
|
|
383
384
|
});
|
|
384
385
|
returnData.push(response);
|
|
385
386
|
continue;
|
|
@@ -406,6 +407,7 @@ class LinkedinScraper {
|
|
|
406
407
|
password,
|
|
407
408
|
},
|
|
408
409
|
json: true,
|
|
410
|
+
timeout: 2 * 60 * 1000,
|
|
409
411
|
});
|
|
410
412
|
const cookies = loginResponse.cookies;
|
|
411
413
|
// Then search for jobs
|
|
@@ -426,6 +428,7 @@ class LinkedinScraper {
|
|
|
426
428
|
cookies,
|
|
427
429
|
},
|
|
428
430
|
json: true,
|
|
431
|
+
timeout: 2 * 60 * 60 * 1000,
|
|
429
432
|
});
|
|
430
433
|
const jobs = response.jobs;
|
|
431
434
|
if (!Array.isArray(jobs)) {
|
|
@@ -438,6 +441,14 @@ class LinkedinScraper {
|
|
|
438
441
|
}
|
|
439
442
|
if (resource === 'job' && operation === 'details') {
|
|
440
443
|
const jobUrl = this.getNodeParameter('jobUrl', itemIndex);
|
|
444
|
+
// Validate URL - skip if not a valid URL
|
|
445
|
+
if (!jobUrl || !jobUrl.startsWith('http')) {
|
|
446
|
+
returnData.push({
|
|
447
|
+
success: false,
|
|
448
|
+
error: `Invalid job URL: ${jobUrl || 'empty'}`,
|
|
449
|
+
});
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
441
452
|
const response = await this.helpers.request({
|
|
442
453
|
method: 'POST',
|
|
443
454
|
url: `${scraperUrl}/jobs/details`,
|
|
@@ -449,12 +460,22 @@ class LinkedinScraper {
|
|
|
449
460
|
url: jobUrl,
|
|
450
461
|
},
|
|
451
462
|
json: true,
|
|
463
|
+
timeout: 5 * 60 * 1000,
|
|
452
464
|
});
|
|
453
465
|
returnData.push(response);
|
|
454
466
|
continue;
|
|
455
467
|
}
|
|
456
468
|
if (resource === 'company' && operation === 'followers') {
|
|
457
469
|
const companyUrl = this.getNodeParameter('companyUrl', itemIndex);
|
|
470
|
+
// Validate URL - skip if not a valid URL
|
|
471
|
+
if (!companyUrl || !companyUrl.startsWith('http')) {
|
|
472
|
+
returnData.push({
|
|
473
|
+
follower_count: 0,
|
|
474
|
+
source: 'skipped',
|
|
475
|
+
error: `Invalid company URL: ${companyUrl || 'empty'}`,
|
|
476
|
+
});
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
458
479
|
const response = await this.helpers.request({
|
|
459
480
|
method: 'POST',
|
|
460
481
|
url: `${scraperUrl}/companies/followers`,
|
|
@@ -466,6 +487,7 @@ class LinkedinScraper {
|
|
|
466
487
|
url: companyUrl,
|
|
467
488
|
},
|
|
468
489
|
json: true,
|
|
490
|
+
timeout: 5 * 60 * 1000,
|
|
469
491
|
});
|
|
470
492
|
returnData.push(response);
|
|
471
493
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../nodes/LinkedinScraper/LinkedinScraper.node.ts"],"names":[],"mappings":"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","file":"LinkedinScraper.node.js","sourcesContent":["/**\n * Author: Marco Visin\n * Date: 2025-12-22\n * LinkedIn Scraper n8n node\n * Interacts with the LinkedIn scraper microservice\n * Uses the same InNotes API credentials for authentication\n */\n\nimport {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n\tNodeApiError,\n\tNodeConnectionType,\n} from 'n8n-workflow';\n\nfunction splitCommaSeparated(value: string): string[] {\n\treturn value\n\t\t.split(',')\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nexport class LinkedinScraper implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'LinkedIn Scraper Service',\n\t\tname: 'linkedinScraper',\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tdescription: 'Interact with the LinkedIn scraper microservice',\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\ticon: 'file:logo.svg',\n\t\tdefaults: {\n\t\t\tname: 'LinkedIn Scraper',\n\t\t},\n\t\tinputs: [NodeConnectionType.Main],\n\t\toutputs: [NodeConnectionType.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\t// Reuse the same InNotes API credentials\n\t\t\t\tname: 'inNotesApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t// Scraper service URL\n\t\t\t{\n\t\t\t\tdisplayName: 'Scraper Service URL',\n\t\t\t\tname: 'scraperUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'https://scraper.innotes.me',\n\t\t\t\tdescription: 'Base URL of the LinkedIn scraper service',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Resource selection\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Session',\n\t\t\t\t\t\tvalue: 'session',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Jobs',\n\t\t\t\t\t\tvalue: 'jobs',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Job',\n\t\t\t\t\t\tvalue: 'job',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Company',\n\t\t\t\t\t\tvalue: 'company',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'jobs',\n\t\t\t},\n\t\t\t// Session operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Login',\n\t\t\t\t\t\tvalue: 'login',\n\t\t\t\t\t\taction: 'Login to LinkedIn and fetch cookies',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'login',\n\t\t\t},\n\t\t\t// Jobs operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Search',\n\t\t\t\t\t\tvalue: 'search',\n\t\t\t\t\t\taction: 'Search for jobs on LinkedIn and jobs.ch',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'search',\n\t\t\t},\n\t\t\t// Job operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['job'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Details',\n\t\t\t\t\t\tvalue: 'details',\n\t\t\t\t\t\taction: 'Fetch job details',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'details',\n\t\t\t},\n\t\t\t// Company operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['company'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Followers',\n\t\t\t\t\t\tvalue: 'followers',\n\t\t\t\t\t\taction: 'Fetch company follower count',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'followers',\n\t\t\t},\n\t\t\t// LinkedIn credentials for login\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Email',\n\t\t\t\tname: 'linkedinEmail',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'user@example.com',\n\t\t\t\tdescription: 'LinkedIn account email',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t\toperation: ['login'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Password',\n\t\t\t\tname: 'linkedinPassword',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tpassword: true,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn account password',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t\toperation: ['login'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Jobs search parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Job Titles',\n\t\t\t\tname: 'jobTitles',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Software Engineer, Developer',\n\t\t\t\tdescription: 'Comma-separated list of job titles to search for',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Locations',\n\t\t\t\tname: 'locations',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Zurich, Remote',\n\t\t\t\tdescription: 'Comma-separated list of locations to search in',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Email',\n\t\t\t\tname: 'linkedinEmailSearch',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'user@example.com',\n\t\t\t\tdescription: 'LinkedIn account email for authentication',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Password',\n\t\t\t\tname: 'linkedinPasswordSearch',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tpassword: true,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn account password',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Max Results',\n\t\t\t\tname: 'maxResults',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 500,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t\tmaxValue: 2000,\n\t\t\t\t},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Include jobs.ch',\n\t\t\t\tname: 'includeJobsCh',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Company Blacklist',\n\t\t\t\tname: 'companyBlacklist',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Company A, Company B',\n\t\t\t\tdescription: 'Comma-separated list of companies to exclude',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Keyword Blacklist',\n\t\t\t\tname: 'keywordBlacklist',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Senior, Lead',\n\t\t\t\tdescription: 'Comma-separated list of keywords to exclude from job titles',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Job details parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Job URL',\n\t\t\t\tname: 'jobUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn or jobs.ch job URL',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['job'],\n\t\t\t\t\t\toperation: ['details'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Company parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Company URL',\n\t\t\t\tname: 'companyUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn company URL',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['company'],\n\t\t\t\t\t\toperation: ['followers'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: IDataObject[] = [];\n\n\t\t// Get InNotes API credentials (reused for scraper authentication)\n\t\tconst credentials = (await this.getCredentials('inNotesApi')) as IDataObject | null;\n\n\t\tif (!credentials) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'InNotes API credentials are missing',\n\t\t\t});\n\t\t}\n\n\t\t// Get the Bearer token from credentials\n\t\tconst authMethod = credentials.authMethod as string;\n\t\tlet bearerToken: string | undefined;\n\n\t\tif (authMethod === 'token') {\n\t\t\tbearerToken = credentials.token as string;\n\t\t} else {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'LinkedIn Scraper requires Bearer token authentication. Please update your InNotes API credentials to use Bearer Token.',\n\t\t\t});\n\t\t}\n\n\t\tif (!bearerToken) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'Bearer token is missing from InNotes API credentials',\n\t\t\t});\n\t\t}\n\n\t\tfor (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t\t\tconst scraperUrl = (this.getNodeParameter('scraperUrl', itemIndex) as string).replace(/\\/+$/, '');\n\t\t\tconst resource = this.getNodeParameter('resource', itemIndex) as string;\n\t\t\tconst operation = this.getNodeParameter('operation', itemIndex) as string;\n\n\t\t\ttry {\n\t\t\t\tif (resource === 'session' && operation === 'login') {\n\t\t\t\t\tconst email = this.getNodeParameter('linkedinEmail', itemIndex) as string;\n\t\t\t\t\tconst password = this.getNodeParameter('linkedinPassword', itemIndex) as string;\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/linkedin/login`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\tpassword,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'jobs' && operation === 'search') {\n\t\t\t\t\tconst jobTitles = splitCommaSeparated(\n\t\t\t\t\t\tthis.getNodeParameter('jobTitles', itemIndex) as string,\n\t\t\t\t\t);\n\t\t\t\t\tconst locations = splitCommaSeparated(\n\t\t\t\t\t\tthis.getNodeParameter('locations', itemIndex) as string,\n\t\t\t\t\t);\n\t\t\t\t\tconst email = this.getNodeParameter('linkedinEmailSearch', itemIndex) as string;\n\t\t\t\t\tconst password = this.getNodeParameter('linkedinPasswordSearch', itemIndex) as string;\n\t\t\t\t\tconst maxResults = this.getNodeParameter('maxResults', itemIndex) as number;\n\t\t\t\t\tconst includeJobsCh = this.getNodeParameter('includeJobsCh', itemIndex) as boolean;\n\t\t\t\t\tconst companyBlacklist = splitCommaSeparated(\n\t\t\t\t\t\t(this.getNodeParameter('companyBlacklist', itemIndex) as string) || '',\n\t\t\t\t\t);\n\t\t\t\t\tconst keywordBlacklist = splitCommaSeparated(\n\t\t\t\t\t\t(this.getNodeParameter('keywordBlacklist', itemIndex) as string) || '',\n\t\t\t\t\t);\n\n\t\t\t\t\t// First login to get cookies\n\t\t\t\t\tconst loginResponse = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/linkedin/login`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\tpassword,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst cookies = (loginResponse as IDataObject).cookies as IDataObject[];\n\n\t\t\t\t\t// Then search for jobs\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/jobs/search`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tjob_titles: jobTitles,\n\t\t\t\t\t\t\tlocations,\n\t\t\t\t\t\t\tmax_results: maxResults,\n\t\t\t\t\t\t\tinclude_jobs_ch: includeJobsCh,\n\t\t\t\t\t\t\tcompany_blacklist: companyBlacklist,\n\t\t\t\t\t\t\tkeywords_blacklist: keywordBlacklist,\n\t\t\t\t\t\t\tcookies,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst jobs = (response as IDataObject).jobs as IDataObject[];\n\t\t\t\t\tif (!Array.isArray(jobs)) {\n\t\t\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\t\t\tmessage: 'Unexpected response format from job search',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturnData.push(...jobs);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'job' && operation === 'details') {\n\t\t\t\t\tconst jobUrl = this.getNodeParameter('jobUrl', itemIndex) as string;\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/jobs/details`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\turl: jobUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'company' && operation === 'followers') {\n\t\t\t\t\tconst companyUrl = this.getNodeParameter('companyUrl', itemIndex) as string;\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/companies/followers`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\turl: companyUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\tmessage: `Unsupported resource (${resource}) or operation (${operation})`,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn [returnData.map((data) => ({ json: data }))];\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../nodes/LinkedinScraper/LinkedinScraper.node.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,+CAQsB;AAEtB,SAAS,mBAAmB,CAAC,KAAa;IACzC,OAAO,KAAK;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAa,eAAe;IAA5B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,0BAA0B;YACvC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,8DAA8D;YACxE,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE;gBACT,IAAI,EAAE,kBAAkB;aACxB;YACD,MAAM,EAAE,sCAAyB;YACjC,OAAO,EAAE,sCAAyB;YAClC,WAAW,EAAE;gBACZ;oBACC,yCAAyC;oBACzC,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,UAAU,EAAE;gBACX,sBAAsB;gBACtB;oBACC,WAAW,EAAE,qBAAqB;oBAClC,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,4BAA4B;oBACrC,WAAW,EAAE,0CAA0C;oBACvD,QAAQ,EAAE,IAAI;iBACd;gBACD,qBAAqB;gBACrB;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;yBAChB;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;yBACb;wBACD;4BACC,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,KAAK;yBACZ;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;yBAChB;qBACD;oBACD,OAAO,EAAE,MAAM;iBACf;gBACD,qBAAqB;gBACrB;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,SAAS,CAAC;yBACrB;qBACD;oBACD,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,qCAAqC;yBAC7C;qBACD;oBACD,OAAO,EAAE,OAAO;iBAChB;gBACD,kBAAkB;gBAClB;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;yBAClB;qBACD;oBACD,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,QAAQ;4BACf,MAAM,EAAE,yCAAyC;yBACjD;qBACD;oBACD,OAAO,EAAE,QAAQ;iBACjB;gBACD,iBAAiB;gBACjB;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,KAAK,CAAC;yBACjB;qBACD;oBACD,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,MAAM,EAAE,mBAAmB;yBAC3B;qBACD;oBACD,OAAO,EAAE,SAAS;iBAClB;gBACD,qBAAqB;gBACrB;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,SAAS,CAAC;yBACrB;qBACD;oBACD,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,WAAW;4BAClB,MAAM,EAAE,8BAA8B;yBACtC;qBACD;oBACD,OAAO,EAAE,WAAW;iBACpB;gBACD,iCAAiC;gBACjC;oBACC,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,kBAAkB;oBAC/B,WAAW,EAAE,wBAAwB;oBACrC,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,SAAS,CAAC;4BACrB,SAAS,EAAE,CAAC,OAAO,CAAC;yBACpB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD;oBACC,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;wBACZ,QAAQ,EAAE,IAAI;qBACd;oBACD,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,2BAA2B;oBACxC,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,SAAS,CAAC;4BACrB,SAAS,EAAE,CAAC,OAAO,CAAC;yBACpB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD,yBAAyB;gBACzB;oBACC,WAAW,EAAE,YAAY;oBACzB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,8BAA8B;oBAC3C,WAAW,EAAE,kDAAkD;oBAC/D,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,gBAAgB;oBAC7B,WAAW,EAAE,gDAAgD;oBAC7D,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD;oBACC,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,kBAAkB;oBAC/B,WAAW,EAAE,2CAA2C;oBACxD,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD;oBACC,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE;wBACZ,QAAQ,EAAE,IAAI;qBACd;oBACD,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,2BAA2B;oBACxC,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD;oBACC,WAAW,EAAE,aAAa;oBAC1B,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,GAAG;oBACZ,WAAW,EAAE;wBACZ,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,IAAI;qBACd;oBACD,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,iBAAiB;oBAC9B,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAI;oBACb,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,sBAAsB;oBACnC,WAAW,EAAE,8CAA8C;oBAC3D,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,cAAc;oBAC3B,WAAW,EAAE,6DAA6D;oBAC1E,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,MAAM,CAAC;4BAClB,SAAS,EAAE,CAAC,QAAQ,CAAC;yBACrB;qBACD;iBACD;gBACD,yBAAyB;gBACzB;oBACC,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,6BAA6B;oBAC1C,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,KAAK,CAAC;4BACjB,SAAS,EAAE,CAAC,SAAS,CAAC;yBACtB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;gBACD,qBAAqB;gBACrB;oBACC,WAAW,EAAE,aAAa;oBAC1B,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,sBAAsB;oBACnC,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,QAAQ,EAAE,CAAC,SAAS,CAAC;4BACrB,SAAS,EAAE,CAAC,WAAW,CAAC;yBACxB;qBACD;oBACD,QAAQ,EAAE,IAAI;iBACd;aACD;SACD,CAAC;IA4MH,CAAC;IA1MA,KAAK,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,kEAAkE;QAClE,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAuB,CAAC;QAEpF,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;gBACtC,OAAO,EAAE,qCAAqC;aAC9C,CAAC,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAoB,CAAC;QACpD,IAAI,WAA+B,CAAC;QAEpC,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC5B,WAAW,GAAG,WAAW,CAAC,KAAe,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;gBACtC,OAAO,EAAE,wHAAwH;aACjI,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;gBACtC,OAAO,EAAE,sDAAsD;aAC/D,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC/D,MAAM,UAAU,GAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClG,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAW,CAAC;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAW,CAAC;YAE1E,IAAI,CAAC;gBACJ,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;oBACrD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAW,CAAC;oBAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,CAAW,CAAC;oBAEhF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC3C,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,GAAG,UAAU,iBAAiB;wBACnC,OAAO,EAAE;4BACR,eAAe,EAAE,UAAU,WAAW,EAAE;4BACxC,cAAc,EAAE,kBAAkB;yBAClC;wBACD,IAAI,EAAE;4BACL,KAAK;4BACL,QAAQ;yBACR;wBACD,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,GAAC,EAAE,GAAC,IAAI;qBAClB,CAAC,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,QAAuB,CAAC,CAAC;oBACzC,SAAS;gBACV,CAAC;gBAED,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACnD,MAAM,SAAS,GAAG,mBAAmB,CACpC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAW,CACvD,CAAC;oBACF,MAAM,SAAS,GAAG,mBAAmB,CACpC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAW,CACvD,CAAC;oBACF,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,SAAS,CAAW,CAAC;oBAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,SAAS,CAAW,CAAC;oBACtF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAW,CAAC;oBAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,CAAY,CAAC;oBACnF,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,CAAY,IAAI,EAAE,CACtE,CAAC;oBACF,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,CAAY,IAAI,EAAE,CACtE,CAAC;oBAEF,6BAA6B;oBAC7B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAChD,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,GAAG,UAAU,iBAAiB;wBACnC,OAAO,EAAE;4BACR,eAAe,EAAE,UAAU,WAAW,EAAE;4BACxC,cAAc,EAAE,kBAAkB;yBAClC;wBACD,IAAI,EAAE;4BACL,KAAK;4BACL,QAAQ;yBACR;wBACD,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,GAAC,EAAE,GAAC,IAAI;qBAClB,CAAC,CAAC;oBAEH,MAAM,OAAO,GAAI,aAA6B,CAAC,OAAwB,CAAC;oBAExE,uBAAuB;oBACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC3C,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,GAAG,UAAU,cAAc;wBAChC,OAAO,EAAE;4BACR,eAAe,EAAE,UAAU,WAAW,EAAE;4BACxC,cAAc,EAAE,kBAAkB;yBAClC;wBACD,IAAI,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,SAAS;4BACT,WAAW,EAAE,UAAU;4BACvB,eAAe,EAAE,aAAa;4BAC9B,iBAAiB,EAAE,gBAAgB;4BACnC,kBAAkB,EAAE,gBAAgB;4BACpC,OAAO;yBACP;wBACD,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,GAAC,EAAE,GAAC,EAAE,GAAC,IAAI;qBACrB,CAAC,CAAC;oBAEH,MAAM,IAAI,GAAI,QAAwB,CAAC,IAAqB,CAAC;oBAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1B,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;4BACtC,OAAO,EAAE,4CAA4C;yBACrD,CAAC,CAAC;oBACJ,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;oBACzB,SAAS;gBACV,CAAC;gBAED,IAAI,QAAQ,KAAK,KAAK,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAW,CAAC;oBAEpE,yCAAyC;oBACzC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3C,UAAU,CAAC,IAAI,CAAC;4BACf,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,oBAAoB,MAAM,IAAI,OAAO,EAAE;yBAC9C,CAAC,CAAC;wBACH,SAAS;oBACV,CAAC;oBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC3C,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,GAAG,UAAU,eAAe;wBACjC,OAAO,EAAE;4BACR,eAAe,EAAE,UAAU,WAAW,EAAE;4BACxC,cAAc,EAAE,kBAAkB;yBAClC;wBACD,IAAI,EAAE;4BACL,GAAG,EAAE,MAAM;yBACX;wBACD,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,GAAC,EAAE,GAAC,IAAI;qBAClB,CAAC,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,QAAuB,CAAC,CAAC;oBACzC,SAAS;gBACV,CAAC;gBAED,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;oBACzD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAW,CAAC;oBAE5E,yCAAyC;oBACzC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnD,UAAU,CAAC,IAAI,CAAC;4BACf,cAAc,EAAE,CAAC;4BACjB,MAAM,EAAE,SAAS;4BACjB,KAAK,EAAE,wBAAwB,UAAU,IAAI,OAAO,EAAE;yBACtD,CAAC,CAAC;wBACH,SAAS;oBACV,CAAC;oBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC3C,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,GAAG,UAAU,sBAAsB;wBACxC,OAAO,EAAE;4BACR,eAAe,EAAE,UAAU,WAAW,EAAE;4BACxC,cAAc,EAAE,kBAAkB;yBAClC;wBACD,IAAI,EAAE;4BACL,GAAG,EAAE,UAAU;yBACf;wBACD,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,CAAC,GAAC,EAAE,GAAC,IAAI;qBAClB,CAAC,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,QAAuB,CAAC,CAAC;oBACzC,SAAS;gBACV,CAAC;gBAED,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;oBACtC,OAAO,EAAE,yBAAyB,QAAQ,mBAAmB,SAAS,GAAG;iBACzE,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC;wBACf,KAAK,EAAG,KAAe,CAAC,OAAO;wBAC/B,SAAS;qBACT,CAAC,CAAC;oBACH,SAAS;gBACV,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACD;AAxgBD,0CAwgBC","file":"LinkedinScraper.node.js","sourcesContent":["/**\n * Author: Marco Visin\n * Date: 2025-12-22\n * LinkedIn Scraper n8n node\n * Interacts with the LinkedIn scraper microservice\n * Uses the same InNotes API credentials for authentication\n */\n\nimport {\n\tIDataObject,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeType,\n\tINodeTypeDescription,\n\tNodeApiError,\n\tNodeConnectionType,\n} from 'n8n-workflow';\n\nfunction splitCommaSeparated(value: string): string[] {\n\treturn value\n\t\t.split(',')\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n}\n\nexport class LinkedinScraper implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'LinkedIn Scraper Service',\n\t\tname: 'linkedinScraper',\n\t\tgroup: ['transform'],\n\t\tversion: 1,\n\t\tdescription: 'Interact with the LinkedIn scraper microservice',\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\ticon: 'file:logo.svg',\n\t\tdefaults: {\n\t\t\tname: 'LinkedIn Scraper',\n\t\t},\n\t\tinputs: [NodeConnectionType.Main],\n\t\toutputs: [NodeConnectionType.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\t// Reuse the same InNotes API credentials\n\t\t\t\tname: 'inNotesApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t// Scraper service URL\n\t\t\t{\n\t\t\t\tdisplayName: 'Scraper Service URL',\n\t\t\t\tname: 'scraperUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: 'https://scraper.innotes.me',\n\t\t\t\tdescription: 'Base URL of the LinkedIn scraper service',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Resource selection\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Session',\n\t\t\t\t\t\tvalue: 'session',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Jobs',\n\t\t\t\t\t\tvalue: 'jobs',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Job',\n\t\t\t\t\t\tvalue: 'job',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Company',\n\t\t\t\t\t\tvalue: 'company',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'jobs',\n\t\t\t},\n\t\t\t// Session operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Login',\n\t\t\t\t\t\tvalue: 'login',\n\t\t\t\t\t\taction: 'Login to LinkedIn and fetch cookies',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'login',\n\t\t\t},\n\t\t\t// Jobs operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Search',\n\t\t\t\t\t\tvalue: 'search',\n\t\t\t\t\t\taction: 'Search for jobs on LinkedIn and jobs.ch',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'search',\n\t\t\t},\n\t\t\t// Job operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['job'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Details',\n\t\t\t\t\t\tvalue: 'details',\n\t\t\t\t\t\taction: 'Fetch job details',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'details',\n\t\t\t},\n\t\t\t// Company operations\n\t\t\t{\n\t\t\t\tdisplayName: 'Operation',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['company'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Followers',\n\t\t\t\t\t\tvalue: 'followers',\n\t\t\t\t\t\taction: 'Fetch company follower count',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'followers',\n\t\t\t},\n\t\t\t// LinkedIn credentials for login\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Email',\n\t\t\t\tname: 'linkedinEmail',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'user@example.com',\n\t\t\t\tdescription: 'LinkedIn account email',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t\toperation: ['login'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Password',\n\t\t\t\tname: 'linkedinPassword',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tpassword: true,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn account password',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['session'],\n\t\t\t\t\t\toperation: ['login'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Jobs search parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Job Titles',\n\t\t\t\tname: 'jobTitles',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Software Engineer, Developer',\n\t\t\t\tdescription: 'Comma-separated list of job titles to search for',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Locations',\n\t\t\t\tname: 'locations',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Zurich, Remote',\n\t\t\t\tdescription: 'Comma-separated list of locations to search in',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Email',\n\t\t\t\tname: 'linkedinEmailSearch',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'user@example.com',\n\t\t\t\tdescription: 'LinkedIn account email for authentication',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'LinkedIn Password',\n\t\t\t\tname: 'linkedinPasswordSearch',\n\t\t\t\ttype: 'string',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tpassword: true,\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn account password',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Max Results',\n\t\t\t\tname: 'maxResults',\n\t\t\t\ttype: 'number',\n\t\t\t\tdefault: 500,\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t\tmaxValue: 2000,\n\t\t\t\t},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Include jobs.ch',\n\t\t\t\tname: 'includeJobsCh',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: true,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Company Blacklist',\n\t\t\t\tname: 'companyBlacklist',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Company A, Company B',\n\t\t\t\tdescription: 'Comma-separated list of companies to exclude',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Keyword Blacklist',\n\t\t\t\tname: 'keywordBlacklist',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tplaceholder: 'Senior, Lead',\n\t\t\t\tdescription: 'Comma-separated list of keywords to exclude from job titles',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['jobs'],\n\t\t\t\t\t\toperation: ['search'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Job details parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Job URL',\n\t\t\t\tname: 'jobUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn or jobs.ch job URL',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['job'],\n\t\t\t\t\t\toperation: ['details'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t\t// Company parameters\n\t\t\t{\n\t\t\t\tdisplayName: 'Company URL',\n\t\t\t\tname: 'companyUrl',\n\t\t\t\ttype: 'string',\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'LinkedIn company URL',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresource: ['company'],\n\t\t\t\t\t\toperation: ['followers'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: IDataObject[] = [];\n\n\t\t// Get InNotes API credentials (reused for scraper authentication)\n\t\tconst credentials = (await this.getCredentials('inNotesApi')) as IDataObject | null;\n\n\t\tif (!credentials) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'InNotes API credentials are missing',\n\t\t\t});\n\t\t}\n\n\t\t// Get the Bearer token from credentials\n\t\tconst authMethod = credentials.authMethod as string;\n\t\tlet bearerToken: string | undefined;\n\n\t\tif (authMethod === 'token') {\n\t\t\tbearerToken = credentials.token as string;\n\t\t} else {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'LinkedIn Scraper requires Bearer token authentication. Please update your InNotes API credentials to use Bearer Token.',\n\t\t\t});\n\t\t}\n\n\t\tif (!bearerToken) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'Bearer token is missing from InNotes API credentials',\n\t\t\t});\n\t\t}\n\n\t\tfor (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t\t\tconst scraperUrl = (this.getNodeParameter('scraperUrl', itemIndex) as string).replace(/\\/+$/, '');\n\t\t\tconst resource = this.getNodeParameter('resource', itemIndex) as string;\n\t\t\tconst operation = this.getNodeParameter('operation', itemIndex) as string;\n\n\t\t\ttry {\n\t\t\t\tif (resource === 'session' && operation === 'login') {\n\t\t\t\t\tconst email = this.getNodeParameter('linkedinEmail', itemIndex) as string;\n\t\t\t\t\tconst password = this.getNodeParameter('linkedinPassword', itemIndex) as string;\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/linkedin/login`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\tpassword,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\ttimeout: 2*60*1000,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'jobs' && operation === 'search') {\n\t\t\t\t\tconst jobTitles = splitCommaSeparated(\n\t\t\t\t\t\tthis.getNodeParameter('jobTitles', itemIndex) as string,\n\t\t\t\t\t);\n\t\t\t\t\tconst locations = splitCommaSeparated(\n\t\t\t\t\t\tthis.getNodeParameter('locations', itemIndex) as string,\n\t\t\t\t\t);\n\t\t\t\t\tconst email = this.getNodeParameter('linkedinEmailSearch', itemIndex) as string;\n\t\t\t\t\tconst password = this.getNodeParameter('linkedinPasswordSearch', itemIndex) as string;\n\t\t\t\t\tconst maxResults = this.getNodeParameter('maxResults', itemIndex) as number;\n\t\t\t\t\tconst includeJobsCh = this.getNodeParameter('includeJobsCh', itemIndex) as boolean;\n\t\t\t\t\tconst companyBlacklist = splitCommaSeparated(\n\t\t\t\t\t\t(this.getNodeParameter('companyBlacklist', itemIndex) as string) || '',\n\t\t\t\t\t);\n\t\t\t\t\tconst keywordBlacklist = splitCommaSeparated(\n\t\t\t\t\t\t(this.getNodeParameter('keywordBlacklist', itemIndex) as string) || '',\n\t\t\t\t\t);\n\n\t\t\t\t\t// First login to get cookies\n\t\t\t\t\tconst loginResponse = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/linkedin/login`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\temail,\n\t\t\t\t\t\t\tpassword,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\ttimeout: 2*60*1000,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst cookies = (loginResponse as IDataObject).cookies as IDataObject[];\n\n\t\t\t\t\t// Then search for jobs\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/jobs/search`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tjob_titles: jobTitles,\n\t\t\t\t\t\t\tlocations,\n\t\t\t\t\t\t\tmax_results: maxResults,\n\t\t\t\t\t\t\tinclude_jobs_ch: includeJobsCh,\n\t\t\t\t\t\t\tcompany_blacklist: companyBlacklist,\n\t\t\t\t\t\t\tkeywords_blacklist: keywordBlacklist,\n\t\t\t\t\t\t\tcookies,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\ttimeout: 2*60*60*1000,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst jobs = (response as IDataObject).jobs as IDataObject[];\n\t\t\t\t\tif (!Array.isArray(jobs)) {\n\t\t\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\t\t\tmessage: 'Unexpected response format from job search',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturnData.push(...jobs);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'job' && operation === 'details') {\n\t\t\t\t\tconst jobUrl = this.getNodeParameter('jobUrl', itemIndex) as string;\n\n\t\t\t\t\t// Validate URL - skip if not a valid URL\n\t\t\t\t\tif (!jobUrl || !jobUrl.startsWith('http')) {\n\t\t\t\t\t\treturnData.push({\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: `Invalid job URL: ${jobUrl || 'empty'}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/jobs/details`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\turl: jobUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\ttimeout: 5*60*1000,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (resource === 'company' && operation === 'followers') {\n\t\t\t\t\tconst companyUrl = this.getNodeParameter('companyUrl', itemIndex) as string;\n\n\t\t\t\t\t// Validate URL - skip if not a valid URL\n\t\t\t\t\tif (!companyUrl || !companyUrl.startsWith('http')) {\n\t\t\t\t\t\treturnData.push({\n\t\t\t\t\t\t\tfollower_count: 0,\n\t\t\t\t\t\t\tsource: 'skipped',\n\t\t\t\t\t\t\terror: `Invalid company URL: ${companyUrl || 'empty'}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = await this.helpers.request({\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: `${scraperUrl}/companies/followers`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Authorization': `Bearer ${bearerToken}`,\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\turl: companyUrl,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\ttimeout: 5*60*1000,\n\t\t\t\t\t});\n\t\t\t\t\treturnData.push(response as IDataObject);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\tmessage: `Unsupported resource (${resource}) or operation (${operation})`,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn [returnData.map((data) => ({ json: data }))];\n\t}\n}\n"]}
|
package/dist/package.json
CHANGED