diff --git a/components/contactout/actions/company-search/company-search.mjs b/components/contactout/actions/company-search/company-search.mjs new file mode 100644 index 0000000000000..9ed9160d9185b --- /dev/null +++ b/components/contactout/actions/company-search/company-search.mjs @@ -0,0 +1,113 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-company-search", + name: "Company Search", + description: "Get company profiles matching the search criteria. [See the documentation](https://api.contactout.com/#company-search-api).", + version: "0.0.1", + type: "action", + props: { + app, + name: { + type: "string[]", + label: "Company Names", + description: "Array of company names to search for (max 50)", + optional: true, + }, + domain: { + type: "string[]", + label: "Company Domains", + description: "Array of company domains to search for (max 50)", + optional: true, + }, + size: { + propDefinition: [ + app, + "companySize", + ], + description: "Company size by number of employees", + }, + hqOnly: { + type: "boolean", + label: "Headquarters Only", + description: "Filter search locations by headquarters only", + optional: true, + }, + location: { + propDefinition: [ + app, + "location", + ], + description: "Array of locations to search for (max 50)", + }, + industries: { + propDefinition: [ + app, + "industry", + ], + description: "Array of industries to search for (max 50)", + }, + minRevenue: { + label: "Minimum Revenue", + description: "Minimum revenue of the company", + propDefinition: [ + app, + "revenue", + ], + }, + maxRevenue: { + label: "Maximum Revenue", + description: "Maximum revenue of the company", + propDefinition: [ + app, + "revenue", + ], + }, + yearFoundedFrom: { + type: "integer", + label: "Year Founded From", + description: "Minimum year founded of the company (min: `1985`)", + optional: true, + min: 1985, + }, + yearFoundedTo: { + type: "integer", + label: "Year Founded To", + description: "Maximum year founded of the company (requires Year Founded From)", + optional: true, + }, + }, + async run({ $ }) { + const { + name, + domain, + size, + hqOnly, + location, + industries, + minRevenue, + maxRevenue, + yearFoundedFrom, + yearFoundedTo, + } = this; + + const response = await this.app.searchCompanies({ + $, + data: { + name, + domain, + size, + hq_only: hqOnly, + location, + industries, + min_revenue: minRevenue, + max_revenue: maxRevenue, + year_founded_from: yearFoundedFrom, + year_founded_to: yearFoundedTo, + }, + }); + + $.export("$summary", "Successfully searched for companies"); + return response; + }, +}; diff --git a/components/contactout/actions/decision-makers-search/decision-makers-search.mjs b/components/contactout/actions/decision-makers-search/decision-makers-search.mjs new file mode 100644 index 0000000000000..0af6845f15592 --- /dev/null +++ b/components/contactout/actions/decision-makers-search/decision-makers-search.mjs @@ -0,0 +1,69 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-decision-makers-search", + name: "Decision Makers Search", + description: "Get profiles of key decision makers within a specified company. [See the documentation](https://api.contactout.com/#decision-makers-api).", + version: "0.0.1", + type: "action", + props: { + app, + linkedinUrl: { + type: "string", + label: "LinkedIn Company URL", + description: "The fully formed URL of the company's LinkedIn profile (e.g., `https://linkedin.com/company/contactout`)", + optional: true, + }, + domain: { + propDefinition: [ + app, + "domain", + ], + description: "The domain name of the company's website (e.g., example.com)", + optional: true, + }, + name: { + propDefinition: [ + app, + "name", + ], + description: "The name of the company", + optional: true, + }, + page: { + propDefinition: [ + app, + "page", + ], + }, + revealInfo: { + propDefinition: [ + app, + "revealInfo", + ], + }, + }, + async run({ $ }) { + const { + linkedinUrl, + domain, + name, + page, + revealInfo, + } = this; + + const response = await this.app.searchDecisionMakers({ + $, + params: { + linkedin_url: linkedinUrl, + domain, + name, + page, + reveal_info: revealInfo, + }, + }); + + $.export("$summary", "Successfully searched for decision makers"); + return response; + }, +}; diff --git a/components/contactout/actions/email-to-linkedin/email-to-linkedin.mjs b/components/contactout/actions/email-to-linkedin/email-to-linkedin.mjs new file mode 100644 index 0000000000000..e60dd6a03fbd6 --- /dev/null +++ b/components/contactout/actions/email-to-linkedin/email-to-linkedin.mjs @@ -0,0 +1,35 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-email-to-linkedin", + name: "Email To LinkedIn", + description: "Find LinkedIn profile from email address. [See the documentation](https://api.contactout.com/#email-to-linkedin-api).", + version: "0.0.1", + type: "action", + props: { + app, + email: { + propDefinition: [ + app, + "email", + ], + description: "The email address to find LinkedIn profile for", + }, + }, + async run({ $ }) { + const { + app, + email, + } = this; + + const response = await app.emailToLinkedIn({ + $, + params: { + email, + }, + }); + + $.export("$summary", "Successfully found LinkedIn profile for email"); + return response; + }, +}; diff --git a/components/contactout/actions/get-company-info/get-company-info.mjs b/components/contactout/actions/get-company-info/get-company-info.mjs new file mode 100644 index 0000000000000..d382838d47aa2 --- /dev/null +++ b/components/contactout/actions/get-company-info/get-company-info.mjs @@ -0,0 +1,28 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-get-company-info", + name: "Get Company Information", + description: "Get company information from domain names. [See the documentation](https://api.contactout.com/#company-information-from-domains).", + version: "0.0.1", + type: "action", + props: { + app, + domains: { + type: "string[]", + label: "Company Domains", + description: "An array of domain names (max 30). Each domain should be in a valid format, for example: example.com", + }, + }, + async run({ $ }) { + const response = await this.app.getCompanyInfo({ + $, + data: { + domains: this.domains, + }, + }); + + $.export("$summary", "Successfully retrieved company information"); + return response; + }, +}; diff --git a/components/contactout/actions/get-contact-info-by-member-id/get-contact-info-by-member-id.mjs b/components/contactout/actions/get-contact-info-by-member-id/get-contact-info-by-member-id.mjs new file mode 100644 index 0000000000000..2de6b04d772c1 --- /dev/null +++ b/components/contactout/actions/get-contact-info-by-member-id/get-contact-info-by-member-id.mjs @@ -0,0 +1,42 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-get-contact-info-by-member-id", + name: "Get Contact Info by LinkedIn Member ID", + description: "Get contact information (email and phone) for a LinkedIn profile using a LinkedIn Member ID. [See the documentation](https://api.contactout.com/#from-linkedin-memberid).", + version: "0.0.1", + type: "action", + props: { + app, + memberId: { + propDefinition: [ + app, + "memberId", + ], + description: "LinkedIn Member ID is a unique identifier assigned to each member on the LinkedIn platform", + }, + includePhone: { + propDefinition: [ + app, + "includePhone", + ], + }, + }, + async run({ $ }) { + const params = { + member_id: this.memberId, + }; + + if (this.includePhone) { + params.include_phone = this.includePhone; + } + + const response = await this.app.getContactInfoByMemberId({ + $, + params, + }); + + $.export("$summary", `Successfully retrieved contact info for LinkedIn Member ID: ${this.memberId}`); + return response; + }, +}; diff --git a/components/contactout/actions/get-contact-info/get-contact-info.mjs b/components/contactout/actions/get-contact-info/get-contact-info.mjs new file mode 100644 index 0000000000000..4f405e7399647 --- /dev/null +++ b/components/contactout/actions/get-contact-info/get-contact-info.mjs @@ -0,0 +1,52 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-get-contact-info", + name: "Get Contact Info from LinkedIn Profile", + description: "Get contact information (email and phone) for a LinkedIn profile using a LinkedIn URL. [See the documentation](https://api.contactout.com/#from-linkedin-profile).", + version: "0.0.1", + type: "action", + props: { + app, + profile: { + propDefinition: [ + app, + "profile", + ], + description: "The LinkedIn profile URL to get contact information for. URL must begin with http and must contain linkedin.com/in/ or linkedin.com/pub/", + }, + includePhone: { + propDefinition: [ + app, + "includePhone", + ], + }, + emailType: { + propDefinition: [ + app, + "emailType", + ], + }, + }, + async run({ $ }) { + const params = { + profile: this.profile, + }; + + if (this.includePhone) { + params.include_phone = this.includePhone; + } + + if (this.emailType) { + params.email_type = this.emailType; + } + + const response = await this.app.getContactInfo({ + $, + params, + }); + + $.export("$summary", `Successfully retrieved contact info for LinkedIn profile: ${this.profile}`); + return response; + }, +}; diff --git a/components/contactout/actions/linkedin-profile-enrich/linkedin-profile-enrich.mjs b/components/contactout/actions/linkedin-profile-enrich/linkedin-profile-enrich.mjs new file mode 100644 index 0000000000000..417216f986c3a --- /dev/null +++ b/components/contactout/actions/linkedin-profile-enrich/linkedin-profile-enrich.mjs @@ -0,0 +1,82 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-linkedin-profile-enrich", + name: "Enrich LinkedIn Profile", + description: "Get profile details for a LinkedIn profile using either a LinkedIn URL or email address. [See the documentation](https://api.contactout.com/#from-linkedin-url).", + version: "0.0.1", + type: "action", + props: { + app, + inputType: { + type: "string", + label: "Input Type", + description: "Choose whether to enrich using a LinkedIn profile URL or email address", + options: [ + { + label: "LinkedIn Profile URL", + value: "profile", + }, + { + label: "Email Address", + value: "email", + }, + ], + reloadProps: true, + }, + }, + async additionalProps() { + const props = {}; + + if (this.inputType === "profile") { + props.profile = { + type: "string", + label: "LinkedIn Profile URL", + description: "The LinkedIn profile URL to enrich (regular LinkedIn URLs only, not Sales Navigator or Talent/Recruiter URLs). URL must begin with `http` and must contain `linkedin.com/in/` or `linkedin.com/pub/`.", + }; + } else if (this.inputType === "email") { + props.email = { + type: "string", + label: "Email Address", + description: "The email address to find and enrich LinkedIn profile for", + }; + } + + return props; + }, + async run({ $ }) { + const { + app, + inputType, + profile, + email, + } = this; + + // Validate that the correct input is provided based on inputType + if (inputType === "profile" && !profile) { + throw new Error("LinkedIn profile URL is required when input type is 'profile'"); + } + if (inputType === "email" && !email) { + throw new Error("Email address is required when input type is 'email'"); + } + + // Build params based on input type + const params = {}; + if (inputType === "profile") { + params.profile = profile; + } else if (inputType === "email") { + params.email = email; + } + + const response = await app.enrichLinkedInProfile({ + $, + params, + }); + + const inputValue = inputType === "profile" + ? profile + : email; + $.export("$summary", `Successfully enriched LinkedIn profile from ${inputType}: ${inputValue}`); + return response; + }, +}; diff --git a/components/contactout/actions/people-search/people-search.mjs b/components/contactout/actions/people-search/people-search.mjs new file mode 100644 index 0000000000000..70e162a845039 --- /dev/null +++ b/components/contactout/actions/people-search/people-search.mjs @@ -0,0 +1,185 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-people-search", + name: "People Search", + description: "Search for people based on various criteria like name, company, title, location, skills, and more. [See the documentation](https://api.contactout.com/#people-search-api).", + version: "0.0.1", + type: "action", + props: { + app, + name: { + propDefinition: [ + app, + "name", + ], + }, + jobTitle: { + propDefinition: [ + app, + "jobTitle", + ], + }, + currentTitlesOnly: { + propDefinition: [ + app, + "currentTitlesOnly", + ], + }, + includeRelatedJobTitles: { + propDefinition: [ + app, + "includeRelatedJobTitles", + ], + }, + matchExperience: { + propDefinition: [ + app, + "matchExperience", + ], + }, + skills: { + propDefinition: [ + app, + "skills", + ], + }, + education: { + propDefinition: [ + app, + "education", + ], + }, + location: { + propDefinition: [ + app, + "location", + ], + }, + company: { + propDefinition: [ + app, + "company", + ], + }, + companyFilter: { + propDefinition: [ + app, + "companyFilter", + ], + }, + currentCompanyOnly: { + propDefinition: [ + app, + "currentCompanyOnly", + ], + }, + domain: { + type: "string[]", + label: "Domains", + description: "Array of company domains to search for (max 50)", + optional: true, + }, + industry: { + propDefinition: [ + app, + "industry", + ], + }, + keyword: { + propDefinition: [ + app, + "keyword", + ], + }, + companySize: { + propDefinition: [ + app, + "companySize", + ], + }, + yearsOfExperience: { + propDefinition: [ + app, + "yearsOfExperience", + ], + }, + yearsInCurrentRole: { + propDefinition: [ + app, + "yearsInCurrentRole", + ], + }, + page: { + propDefinition: [ + app, + "page", + ], + }, + dataTypes: { + propDefinition: [ + app, + "dataTypes", + ], + }, + revealInfo: { + propDefinition: [ + app, + "revealInfo", + ], + }, + }, + async run({ $ }) { + const { + name, + jobTitle, + currentTitlesOnly, + includeRelatedJobTitles, + matchExperience, + skills, + education, + location, + company, + companyFilter, + currentCompanyOnly, + domain, + industry, + keyword, + companySize, + yearsOfExperience, + yearsInCurrentRole, + page, + dataTypes, + revealInfo, + } = this; + + const response = await this.app.searchPeople({ + $, + data: { + name, + job_title: jobTitle, + current_titles_only: currentTitlesOnly, + include_related_job_titles: includeRelatedJobTitles, + match_experience: matchExperience, + skills, + education, + location, + company, + company_filter: companyFilter, + current_company_only: currentCompanyOnly, + domain, + industry, + keyword, + company_size: companySize, + years_of_experience: yearsOfExperience, + years_in_current_role: yearsInCurrentRole, + page, + data_types: dataTypes, + reveal_info: revealInfo, + }, + }); + + $.export("$summary", "Successfully searched for people"); + return response; + }, +}; diff --git a/components/contactout/actions/verify-email-bulk/verify-email-bulk.mjs b/components/contactout/actions/verify-email-bulk/verify-email-bulk.mjs new file mode 100644 index 0000000000000..c897383871fb3 --- /dev/null +++ b/components/contactout/actions/verify-email-bulk/verify-email-bulk.mjs @@ -0,0 +1,104 @@ +import { ConfigurationError } from "@pipedream/platform"; +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-verify-email-bulk", + name: "Verify Email Bulk", + description: "Verify the deliverability for a batch of up to 1000 email addresses in bulk. [See the documentation](https://api.contactout.com/#bulk).", + version: "0.0.1", + type: "action", + props: { + app, + emails: { + propDefinition: [ + app, + "emails", + ], + description: "Array of email addresses to verify (max 1000)", + }, + callbackUrl: { + propDefinition: [ + app, + "callbackUrl", + ], + description: "A URL where the results will be posted once the bulk email verification operation is completed", + }, + waitForCompletion: { + type: "boolean", + label: "Wait for Completion", + description: "If set to `true`, the action will wait and poll until the bulk verification job is `DONE`. If set to `false`, it will return immediately after creating the job.", + default: false, + optional: true, + }, + }, + async run({ $ }) { + const { + app, + emails, + callbackUrl, + waitForCompletion, + } = this; + + const MAX_RETRIES = 15; + const DELAY = 1000 * 15; // 15 seconds + const { run } = $.context; + + // First run: Create the bulk verification job + if (run.runs === 1) { + const response = await app.verifyEmailBulk({ + $, + data: { + emails, + callback_url: callbackUrl, + }, + }); + + $.export("$summary", `Successfully queued bulk email verification with job ID \`${response.job_id}\`.`); + + // If user doesn't want to wait, return immediately + if (!waitForCompletion) { + return response; + } + + // Store job_id for polling and start rerun + $.flow.rerun(DELAY, { + jobId: response.job_id, + }, MAX_RETRIES); + return response; + } + + // Subsequent runs: Poll for job status + if (run.runs > MAX_RETRIES) { + throw new ConfigurationError("Max retries exceeded - bulk verification job may still be running"); + } + + const { jobId } = run.context; + + // Poll for status + const statusResponse = await app.getBulkVerificationStatus({ + $, + jobId, + }); + + // If job is completed, return the final status + if (statusResponse.data?.status === "DONE") { + $.export("$summary", `Bulk email verification job \`${jobId}\` completed successfully. Verified ${Object.keys(statusResponse.data.result || {}).length} emails.`); + return statusResponse; + } + + // If job failed or has an error status, throw error + if (statusResponse.data?.status === "FAILED" || statusResponse.data?.status === "ERROR") { + throw new ConfigurationError(`Bulk email verification job \`${jobId}\` failed with status: ${statusResponse.data?.status}`); + } + + // Otherwise, continue polling + $.flow.rerun(DELAY, { + jobId, + }, MAX_RETRIES); + return { + status: statusResponse.data?.status || "PROCESSING", + jobId, + message: `Job is still running. Current status: ${statusResponse.data?.status || "PROCESSING"}`, + }; + }, +}; diff --git a/components/contactout/actions/verify-email/verify-email.mjs b/components/contactout/actions/verify-email/verify-email.mjs new file mode 100644 index 0000000000000..f7643f24bfe79 --- /dev/null +++ b/components/contactout/actions/verify-email/verify-email.mjs @@ -0,0 +1,35 @@ +import app from "../../contactout.app.mjs"; + +export default { + key: "contactout-verify-email", + name: "Verify Email", + description: "Verify the deliverability of a single email address. [See the documentation](https://api.contactout.com/#single).", + version: "0.0.1", + type: "action", + props: { + app, + email: { + propDefinition: [ + app, + "email", + ], + description: "The email address to verify", + }, + }, + async run({ $ }) { + const { + app, + email, + } = this; + + const response = await app.verifyEmail({ + $, + params: { + email, + }, + }); + + $.export("$summary", "Successfully verified email"); + return response; + }, +}; diff --git a/components/contactout/contactout.app.mjs b/components/contactout/contactout.app.mjs index 84e8867555504..3d2be1b8e1bb2 100644 --- a/components/contactout/contactout.app.mjs +++ b/components/contactout/contactout.app.mjs @@ -1,11 +1,429 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "contactout", - propDefinitions: {}, + propDefinitions: { + email: { + type: "string", + label: "Email Address", + description: "The email address to search for or verify", + }, + profile: { + type: "string", + label: "LinkedIn Profile URL", + description: "The LinkedIn profile URL (regular LinkedIn URLs only, not Sales Navigator or Talent/Recruiter URLs)", + }, + memberId: { + type: "string", + label: "LinkedIn Member ID", + description: "The LinkedIn Member ID", + }, + domain: { + type: "string", + label: "Company Domain", + description: "The company domain (e.g., example.com)", + }, + emails: { + type: "string[]", + label: "Email Addresses", + description: "Array of email addresses (max 100 for bulk operations)", + }, + callbackUrl: { + type: "string", + label: "Callback URL", + description: "A URL where the results will be posted once the operation is completed", + optional: true, + }, + includePhone: { + type: "boolean", + label: "Include Phone", + description: "If set to true, it will include phone information in the response and deduct phone credits", + optional: true, + }, + emailType: { + type: "string", + label: "Email Type", + description: "Filter emails by type", + optional: true, + options: [ + { + label: "Personal emails only", + value: "personal", + }, + { + label: "Work emails only", + value: "work", + }, + { + label: "Both personal and work emails", + value: "personal,work", + }, + ], + }, + name: { + type: "string", + label: "Name", + description: "Name of the profile to search for", + optional: true, + }, + jobTitle: { + type: "string[]", + label: "Job Titles", + description: "Array of job titles to search for (max 50)", + optional: true, + }, + currentTitlesOnly: { + type: "boolean", + label: "Current Titles Only", + description: "Returns profiles matching the current job title only", + optional: true, + }, + includeRelatedJobTitles: { + type: "boolean", + label: "Include Related Job Titles", + description: "Returns profiles with related job titles", + optional: true, + }, + matchExperience: { + type: "string", + label: "Match Experience", + description: "Ensures **Job Title** and **Company** match in the same experience. If set, **Current Titles Only** and **Company Filter** should not be used. API will return an error in that case.", + optional: true, + options: [ + { + label: "Current experience only", + value: "current", + }, + { + label: "Past experience only", + value: "past", + }, + { + label: "Both current and past experience", + value: "both", + }, + ], + }, + skills: { + type: "string[]", + label: "Skills", + description: "Array of skills to search for (max 50). Supports boolean equations", + optional: true, + }, + education: { + type: "string[]", + label: "Education", + description: "Array of schools/degrees to search for (max 50). Supports boolean equations", + optional: true, + }, + location: { + type: "string[]", + label: "Locations", + description: "Array of locations to search for (max 50)", + optional: true, + }, + company: { + type: "string[]", + label: "Companies", + description: "Array of company names to search for (max 50)", + optional: true, + }, + companyFilter: { + type: "string", + label: "Company Filter", + description: "Filter by current or past company experience", + optional: true, + options: [ + { + label: "Current company only", + value: "current", + }, + { + label: "Past company only", + value: "past", + }, + { + label: "Both current and past companies", + value: "both", + }, + ], + }, + currentCompanyOnly: { + type: "boolean", + label: "Current Company Only", + description: "Returns profiles matching the current company name only", + optional: true, + }, + industry: { + type: "string[]", + label: "Industries", + description: "Array of industries to search for (max 50). Supports boolean equations", + optional: true, + }, + keyword: { + type: "string", + label: "Keyword", + description: "Returns profiles that contain the mentioned keyword anywhere in their profile", + optional: true, + }, + companySize: { + type: "string[]", + label: "Company Sizes", + description: "Array of company size ranges", + optional: true, + options: [ + { + label: "1-10", + value: "1_10", + }, + { + label: "11-50", + value: "11_50", + }, + { + label: "51-200", + value: "51_200", + }, + { + label: "201-500", + value: "201_500", + }, + { + label: "501-1000", + value: "501_1000", + }, + { + label: "1001-5000", + value: "1001_5000", + }, + { + label: "5001-10000", + value: "5001_10000", + }, + { + label: "10001+", + value: "10001", + }, + ], + }, + yearsOfExperience: { + type: "string[]", + label: "Years of Experience", + description: "Array representing ranges of years of experience", + optional: true, + options: [ + { + label: "0-1", + value: "0_1", + }, + { + label: "1-2", + value: "1_2", + }, + { + label: "3-5", + value: "3_5", + }, + { + label: "6-10", + value: "6_10", + }, + { + label: "10+", + value: "10", + }, + ], + }, + yearsInCurrentRole: { + type: "string[]", + label: "Years in Current Role", + description: "Array representing ranges of years in current role", + optional: true, + options: [ + { + label: "0-2", + value: "0_2", + }, + { + label: "2-4", + value: "2_4", + }, + { + label: "4-6", + value: "4_6", + }, + { + label: "6-8", + value: "6_8", + }, + { + label: "8-10", + value: "8_10", + }, + { + label: "10+", + value: "10", + }, + ], + }, + page: { + type: "integer", + label: "Page", + description: "Page number for pagination", + optional: true, + }, + dataTypes: { + type: "string[]", + label: "Data Types", + description: "Returns profiles containing at least one of the specified data types", + optional: true, + options: [ + "personal_email", + "work_email", + "phone", + ], + }, + revealInfo: { + type: "boolean", + label: "Reveal Contact Info", + description: "If set to true, contact_info will contain emails and phone numbers (credits will be charged)", + optional: true, + }, + revenue: { + type: "integer", + label: "Revenue", + description: "Revenue reference", + optional: true, + options: [ + { + label: "1M", + value: 1000000, + }, + { + label: "5M", + value: 5000000, + }, + { + label: "10M", + value: 10000000, + }, + { + label: "50M", + value: 50000000, + }, + { + label: "100M", + value: 100000000, + }, + { + label: "250M", + value: 250000000, + }, + { + label: "500M", + value: 500000000, + }, + { + label: "1B", + value: 1000000000, + }, + ], + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + getUrl(path) { + return `https://api.contactout.com/v1${path}`; + }, + getHeaders(headers) { + return { + ...headers, + authorization: "basic", + token: this.$auth.api_key, + }; + }, + _makeRequest({ + $ = this, path, headers, ...args + }) { + return axios($, { + ...args, + url: this.getUrl(path), + headers: this.getHeaders(headers), + }); + }, + post(args = {}) { + return this._makeRequest({ + method: "POST", + ...args, + }); + }, + enrichLinkedInProfile(args = {}) { + return this._makeRequest({ + path: "/linkedin/enrich", + ...args, + }); + }, + getContactInfo(args = {}) { + return this._makeRequest({ + path: "/people/linkedin", + ...args, + }); + }, + getContactInfoByMemberId(args = {}) { + return this._makeRequest({ + path: "/people/linkedin_member_id", + ...args, + }); + }, + getCompanyInfo(args = {}) { + return this.post({ + path: "/domain/enrich", + ...args, + }); + }, + searchPeople(args = {}) { + return this.post({ + path: "/people/search", + ...args, + }); + }, + searchDecisionMakers(args = {}) { + return this._makeRequest({ + path: "/people/decision-makers", + ...args, + }); + }, + searchCompanies(args = {}) { + return this.post({ + path: "/company/search", + ...args, + }); + }, + emailToLinkedIn(args = {}) { + return this._makeRequest({ + path: "/people/person", + ...args, + }); + }, + verifyEmail(args = {}) { + return this._makeRequest({ + path: "/email/verify", + ...args, + }); + }, + verifyEmailBulk(args = {}) { + return this.post({ + path: "/email/verify/batch", + ...args, + }); + }, + getBulkVerificationStatus({ + jobId, ...args + } = {}) { + return this._makeRequest({ + path: `/email/verify/batch/${jobId}`, + ...args, + }); }, }, -}; \ No newline at end of file +}; diff --git a/components/contactout/package.json b/components/contactout/package.json index 556a6121c7bc6..06864c92b8710 100644 --- a/components/contactout/package.json +++ b/components/contactout/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/contactout", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream ContactOut Components", "main": "contactout.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.1.0" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc0362bbddcf6..de47393f7802d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2742,8 +2742,7 @@ importers: components/codeq_natural_language_processing_api: {} - components/codeqr: - specifiers: {} + components/codeqr: {} components/codereadr: dependencies: @@ -2921,7 +2920,11 @@ importers: specifier: ^1.6.2 version: 1.6.6 - components/contactout: {} + components/contactout: + dependencies: + '@pipedream/platform': + specifier: ^3.1.0 + version: 3.1.0 components/contacts: dependencies: @@ -4595,8 +4598,7 @@ importers: components/finage: {} - components/finalscout: - specifiers: {} + components/finalscout: {} components/findymail: dependencies: @@ -10335,8 +10337,7 @@ importers: specifier: ^1.5.1 version: 1.6.6 - components/predictleads: - specifiers: {} + components/predictleads: {} components/prepr_graphql: {} @@ -35407,7 +35408,7 @@ snapshots: '@pipedream/canva@0.2.3': dependencies: - '@pipedream/platform': 3.0.3 + '@pipedream/platform': 3.1.0 transitivePeerDependencies: - debug @@ -36051,8 +36052,6 @@ snapshots: '@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3)) '@putout/operator-json': 2.2.0 putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - supports-color '@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))': dependencies: