import { aiFunction, AIFunctionsProvider, assert, getEnv, sanitizeSearchParams, type Simplify, throttleKy } from '@agentic/core' import defaultKy, { type KyInstance } from 'ky' import pThrottle from 'p-throttle' import { z } from 'zod' // All proxycurl types are auto-generated from their openapi spec export namespace proxycurl { // Allow up to 300 requests per minute by default (enforced at 5 minute intervals). export const throttle = pThrottle({ limit: 1500, interval: 5 * 60 * 1000 }) export const CompanyTypeSchema = z.enum([ 'EDUCATIONAL', 'GOVERNMENT_AGENCY', 'NON_PROFIT', 'PARTNERSHIP', 'PRIVATELY_HELD', 'PUBLIC_COMPANY', 'SELF_EMPLOYED', 'SELF_OWNED' ]) export type CompanyType = z.infer export const OptionalFieldSchema = z.enum(['exclude', 'include']).optional() export type OptionalField = z.infer export const OptionalEnrichFieldSchema = z.enum(['skip', 'enrich']).optional() export type OptionalEnrichField = z.infer export const UseCacheSchema = z.enum(['if-present', 'if-recent']).optional() export type UseCache = z.infer export const FallbackToCacheSchema = z.enum(['on-error', 'never']).optional() export type FallbackToCache = z.infer export const CompanyProfileEndpointParamsQueryClassSchema = z.object({ url: z.string(), acquisitions: OptionalFieldSchema, categories: OptionalFieldSchema, exit_data: OptionalFieldSchema, extra: OptionalFieldSchema, funding_data: OptionalFieldSchema, resolve_numeric_id: z.boolean().optional(), fallback_to_cache: FallbackToCacheSchema, use_cache: UseCacheSchema }) export type CompanyProfileEndpointParamsQueryClass = z.infer< typeof CompanyProfileEndpointParamsQueryClassSchema > /** * Requires one of: * - `facebook_profile_url` * - `linkedin_profile_url` * - `twitter_profile_url` */ export const PersonProfileEndpointParamsQueryClassSchema = z.object({ facebook_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), twitter_profile_url: z.string().optional(), facebook_profile_id: OptionalFieldSchema, twitter_profile_id: OptionalFieldSchema, extra: OptionalFieldSchema, github_profile_id: OptionalFieldSchema, inferred_salary: OptionalFieldSchema, personal_contact_number: OptionalFieldSchema, personal_email: OptionalFieldSchema, skills: OptionalFieldSchema, fallback_to_cache: FallbackToCacheSchema, use_cache: UseCacheSchema }) export type PersonProfileEndpointParamsQueryClass = Simplify< z.infer > export const PersonLookupEndpointParamsQueryClassSchema = z.object({ company_domain: z .string() .describe('The domain URL of the company the person works at'), first_name: z.string(), last_name: z.string().optional(), location: z.string().optional(), similarity_checks: z .union([z.literal('include'), z.literal('skip')]) .optional(), title: z.string().optional(), enrich_profile: OptionalEnrichFieldSchema }) export type PersonLookupEndpointParamsQueryClass = z.infer< typeof PersonLookupEndpointParamsQueryClassSchema > export const RoleLookupEndpointParamsQueryClassSchema = z.object({ company_name: z.string(), role: z.string(), enrich_profile: OptionalEnrichFieldSchema }) export type RoleLookupEndpointParamsQueryClass = z.infer< typeof RoleLookupEndpointParamsQueryClassSchema > export const CompanyLookupEndpointParamsQueryClassSchema = z.object({ company_domain: z.string().optional(), company_location: z.string().optional(), company_name: z.string().optional(), enrich_profile: OptionalEnrichFieldSchema }) export type CompanyLookupEndpointParamsQueryClass = z.infer< typeof CompanyLookupEndpointParamsQueryClassSchema > export const ReverseEmailLookupEndpointParamsQueryClassSchema = z.object({ email: z.string(), enrich_profile: OptionalEnrichFieldSchema, lookup_depth: z.string().optional() }) export type ReverseEmailLookupEndpointParamsQueryClass = z.infer< typeof ReverseEmailLookupEndpointParamsQueryClassSchema > export const CompanySearchEndpointParamsQueryClassSchema = z.object({ city: z.string().optional(), country: z.string().optional(), description: z.string().optional(), employee_count_max: z.string().optional(), employee_count_min: z.string().optional(), follower_count_max: z.string().optional(), follower_count_min: z.string().optional(), founded_after_year: z.string().optional(), founded_before_year: z.string().optional(), funding_amount_max: z.string().optional(), funding_amount_min: z.string().optional(), funding_raised_after: z.string().optional(), funding_raised_before: z.string().optional(), industry: z.string().optional(), name: z.string().optional(), page_size: z.string().optional(), public_identifier_in_list: z.string().optional(), public_identifier_not_in_list: z.string().optional(), region: z.string().optional(), type: z.string().optional(), enrich_profiles: z.string().optional() }) export type CompanySearchEndpointParamsQueryClass = z.infer< typeof CompanySearchEndpointParamsQueryClassSchema > export const PersonSearchEndpointParamsQueryClassSchema = z.object({ city: z.string().optional(), country: z.string(), current_company_city: z.string().optional(), current_company_country: z.string().optional(), current_company_description: z.string().optional(), current_company_employee_count_max: z.string().optional(), current_company_employee_count_min: z.string().optional(), current_company_follower_count_max: z.string().optional(), current_company_follower_count_min: z.string().optional(), current_company_founded_after_year: z.string().optional(), current_company_founded_before_year: z.string().optional(), current_company_funding_amount_max: z.string().optional(), current_company_funding_amount_min: z.string().optional(), current_company_funding_raised_after: z.string().optional(), current_company_funding_raised_before: z.string().optional(), current_company_industry: z.string().optional(), current_company_linkedin_profile_url: z.string().optional(), current_company_name: z.string().optional(), current_company_region: z.string().optional(), current_company_type: z.string().optional(), current_job_description: z.string().optional(), current_role_after: z.string().optional(), current_role_before: z.string().optional(), current_role_title: z.string().optional(), education_degree_name: z.string().optional(), education_field_of_study: z.string().optional(), education_school_linkedin_profile_url: z.string().optional(), education_school_name: z.string().optional(), enrich_profiles: z.string().optional(), first_name: z.string().optional(), headline: z.string().optional(), industries: z.string().optional(), interests: z.string().optional(), languages: z.string().optional(), last_name: z.string().optional(), linkedin_groups: z.string().optional(), page_size: z.string().optional(), past_company_linkedin_profile_url: z.string().optional(), past_company_name: z.string().optional(), past_job_description: z.string().optional(), past_role_title: z.string().optional(), public_identifier_in_list: z.string().optional(), public_identifier_not_in_list: z.string().optional(), region: z.string().optional(), skills: z.string().optional(), summary: z.string().optional() }) export type PersonSearchEndpointParamsQueryClass = z.infer< typeof PersonSearchEndpointParamsQueryClassSchema > export const PurpleCourseSchema = z.object({ name: z.string().optional(), number: z.string().optional() }) export type PurpleCourse = z.infer export const PurpleDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type PurpleDate = z.infer export const FluffyDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type FluffyDate = z.infer export const TentacledDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type TentacledDate = z.infer export const StickyDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type StickyDate = z.infer export const IndigoDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type IndigoDate = z.infer export const IndecentDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type IndecentDate = z.infer export const HilariousDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type HilariousDate = z.infer export const AmbitiousDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type AmbitiousDate = z.infer export const PurpleActivitySchema = z.object({ activity_status: z.string().optional(), link: z.string().optional(), title: z.string().optional() }) export type PurpleActivity = z.infer export const CunningDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type CunningDate = z.infer export const MagentaDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type MagentaDate = z.infer export const FriskyDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type FriskyDate = z.infer export const MischievousDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type MischievousDate = z.infer export const BraggadociousDateSchema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type BraggadociousDate = z.infer export const Date1Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date1 = z.infer export const Date2Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date2 = z.infer export const Date3Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date3 = z.infer export const PurplePersonExtraSchema = z.object({ facebook_profile_id: z.string().optional(), github_profile_id: z.string().optional(), twitter_profile_id: z.string().optional(), website: z.string().optional() }) export type PurplePersonExtra = z.infer export const PurplePersonGroupSchema = z.object({ name: z.string().optional(), profile_pic_url: z.string().optional(), url: z.string().optional() }) export type PurplePersonGroup = z.infer export const PurpleInferredSalarySchema = z.object({ max: z.number().optional(), min: z.number().optional() }) export type PurpleInferredSalary = z.infer export const PurplePeopleAlsoViewedSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type PurplePeopleAlsoViewed = z.infer< typeof PurplePeopleAlsoViewedSchema > export const PurpleSimilarProfileSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type PurpleSimilarProfile = z.infer export const Date4Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date4 = z.infer export const Date5Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date5 = z.infer export const FluffyCourseSchema = z.object({ name: z.string().optional(), number: z.string().optional() }) export type FluffyCourse = z.infer export const Date6Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date6 = z.infer export const Date7Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date7 = z.infer export const Date8Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date8 = z.infer export const Date9Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date9 = z.infer export const Date10Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date10 = z.infer export const Date11Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date11 = z.infer export const Date12Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date12 = z.infer export const Date13Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date13 = z.infer export const FluffyActivitySchema = z.object({ activity_status: z.string().optional(), link: z.string().optional(), title: z.string().optional() }) export type FluffyActivity = z.infer export const Date14Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date14 = z.infer export const Date15Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date15 = z.infer export const Date16Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date16 = z.infer export const Date17Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date17 = z.infer export const Date18Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date18 = z.infer export const Date19Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date19 = z.infer export const Date20Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date20 = z.infer export const Date21Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date21 = z.infer export const FluffyPersonExtraSchema = z.object({ facebook_profile_id: z.string().optional(), github_profile_id: z.string().optional(), twitter_profile_id: z.string().optional(), website: z.string().optional() }) export type FluffyPersonExtra = z.infer export const FluffyPersonGroupSchema = z.object({ name: z.string().optional(), profile_pic_url: z.string().optional(), url: z.string().optional() }) export type FluffyPersonGroup = z.infer export const FluffyInferredSalarySchema = z.object({ max: z.number().optional(), min: z.number().optional() }) export type FluffyInferredSalary = z.infer export const FluffyPeopleAlsoViewedSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type FluffyPeopleAlsoViewed = z.infer< typeof FluffyPeopleAlsoViewedSchema > export const FluffySimilarProfileSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type FluffySimilarProfile = z.infer export const Date22Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date22 = z.infer export const Date23Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date23 = z.infer export const TentacledCourseSchema = z.object({ name: z.string().optional(), number: z.string().optional() }) export type TentacledCourse = z.infer export const Date24Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date24 = z.infer export const Date25Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date25 = z.infer export const Date26Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date26 = z.infer export const Date27Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date27 = z.infer export const Date28Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date28 = z.infer export const Date29Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date29 = z.infer export const Date30Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date30 = z.infer export const Date31Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date31 = z.infer export const TentacledActivitySchema = z.object({ activity_status: z.string().optional(), link: z.string().optional(), title: z.string().optional() }) export type TentacledActivity = z.infer export const Date32Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date32 = z.infer export const Date33Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date33 = z.infer export const Date34Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date34 = z.infer export const Date35Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date35 = z.infer export const Date36Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date36 = z.infer export const Date37Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date37 = z.infer export const Date38Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date38 = z.infer export const Date39Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date39 = z.infer export const TentacledPersonExtraSchema = z.object({ facebook_profile_id: z.string().optional(), github_profile_id: z.string().optional(), twitter_profile_id: z.string().optional(), website: z.string().optional() }) export type TentacledPersonExtra = z.infer export const TentacledPersonGroupSchema = z.object({ name: z.string().optional(), profile_pic_url: z.string().optional(), url: z.string().optional() }) export type TentacledPersonGroup = z.infer export const TentacledInferredSalarySchema = z.object({ max: z.number().optional(), min: z.number().optional() }) export type TentacledInferredSalary = z.infer< typeof TentacledInferredSalarySchema > export const TentacledPeopleAlsoViewedSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type TentacledPeopleAlsoViewed = z.infer< typeof TentacledPeopleAlsoViewedSchema > export const TentacledSimilarProfileSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type TentacledSimilarProfile = z.infer< typeof TentacledSimilarProfileSchema > export const Date40Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date40 = z.infer export const Date41Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date41 = z.infer export const StickyCourseSchema = z.object({ name: z.string().optional(), number: z.string().optional() }) export type StickyCourse = z.infer export const Date42Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date42 = z.infer export const Date43Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date43 = z.infer export const Date44Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date44 = z.infer export const Date45Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date45 = z.infer export const Date46Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date46 = z.infer export const Date47Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date47 = z.infer export const Date48Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date48 = z.infer export const Date49Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date49 = z.infer export const StickyActivitySchema = z.object({ activity_status: z.string().optional(), link: z.string().optional(), title: z.string().optional() }) export type StickyActivity = z.infer export const Date50Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date50 = z.infer export const Date51Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date51 = z.infer export const Date52Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date52 = z.infer export const Date53Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date53 = z.infer export const Date54Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date54 = z.infer export const Date55Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date55 = z.infer export const Date56Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date56 = z.infer export const StickyPersonGroupSchema = z.object({ name: z.string().optional(), profile_pic_url: z.string().optional(), url: z.string().optional() }) export type StickyPersonGroup = z.infer export const StickyPeopleAlsoViewedSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type StickyPeopleAlsoViewed = z.infer< typeof StickyPeopleAlsoViewedSchema > export const StickySimilarProfileSchema = z.object({ link: z.string().optional(), location: z.string().optional(), name: z.string().optional(), summary: z.string().optional() }) export type StickySimilarProfile = z.infer export const Date57Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date57 = z.infer export const Date58Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date58 = z.infer export const Date59Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date59 = z.infer export const Date60Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date60 = z.infer export const PurpleAffiliatedCompanySchema = z.object({ industry: z.string().optional(), link: z.string().optional(), location: z.string().optional(), name: z.string().optional() }) export type PurpleAffiliatedCompany = z.infer< typeof PurpleAffiliatedCompanySchema > export const PurpleExitSchema = z.object({ crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), name: z.string().optional() }) export type PurpleExit = z.infer export const Date61Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date61 = z.infer export const Date62Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date62 = z.infer export const Date63Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date63 = z.infer export const PurpleInvestorSchema = z.object({ linkedin_profile_url: z.string().optional(), name: z.string().optional(), type: z.string().optional() }) export type PurpleInvestor = z.infer export const PurpleCompanyLocationSchema = z.object({ city: z.string().optional(), country: z.string().optional(), is_hq: z.boolean().optional(), line_1: z.string().optional(), postal_code: z.string().optional(), state: z.string().optional() }) export type PurpleCompanyLocation = z.infer< typeof PurpleCompanyLocationSchema > export const FluffyCompanyLocationSchema = z.object({ city: z.string().optional(), country: z.string().optional(), is_hq: z.boolean().optional(), line_1: z.string().optional(), postal_code: z.string().optional(), state: z.string().optional() }) export type FluffyCompanyLocation = z.infer< typeof FluffyCompanyLocationSchema > export const PurpleSimilarCompanySchema = z.object({ industry: z.string().optional(), link: z.string().optional(), location: z.string().optional(), name: z.string().optional() }) export type PurpleSimilarCompany = z.infer export const Date64Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date64 = z.infer export const Date65Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date65 = z.infer export const Date66Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date66 = z.infer export const FluffyAffiliatedCompanySchema = z.object({ industry: z.string().optional(), link: z.string().optional(), location: z.string().optional(), name: z.string().optional() }) export type FluffyAffiliatedCompany = z.infer< typeof FluffyAffiliatedCompanySchema > export const FluffyExitSchema = z.object({ crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), name: z.string().optional() }) export type FluffyExit = z.infer export const Date67Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date67 = z.infer export const Date68Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date68 = z.infer export const Date69Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date69 = z.infer export const FluffyInvestorSchema = z.object({ linkedin_profile_url: z.string().optional(), name: z.string().optional(), type: z.string().optional() }) export type FluffyInvestor = z.infer export const TentacledCompanyLocationSchema = z.object({ city: z.string().optional(), country: z.string().optional(), is_hq: z.boolean().optional(), line_1: z.string().optional(), postal_code: z.string().optional(), state: z.string().optional() }) export type TentacledCompanyLocation = z.infer< typeof TentacledCompanyLocationSchema > export const StickyCompanyLocationSchema = z.object({ city: z.string().optional(), country: z.string().optional(), is_hq: z.boolean().optional(), line_1: z.string().optional(), postal_code: z.string().optional(), state: z.string().optional() }) export type StickyCompanyLocation = z.infer< typeof StickyCompanyLocationSchema > export const FluffySimilarCompanySchema = z.object({ industry: z.string().optional(), link: z.string().optional(), location: z.string().optional(), name: z.string().optional() }) export type FluffySimilarCompany = z.infer export const Date70Schema = z.object({ day: z.number().optional(), month: z.number().optional(), year: z.number().optional() }) export type Date70 = z.infer export const PurpleHonourAwardSchema = z.object({ description: z.string().optional(), issued_on: PurpleDateSchema.optional(), issuer: z.string().optional(), title: z.string().optional() }) export type PurpleHonourAward = z.infer export const PurpleAccomplishmentOrgSchema = z.object({ description: z.string().optional(), ends_at: FluffyDateSchema.optional(), org_name: z.string().optional(), starts_at: TentacledDateSchema.optional(), title: z.string().optional() }) export type PurpleAccomplishmentOrg = z.infer< typeof PurpleAccomplishmentOrgSchema > export const PurplePatentSchema = z.object({ application_number: z.string().optional(), description: z.string().optional(), issued_on: StickyDateSchema.optional(), issuer: z.string().optional(), patent_number: z.string().optional(), title: z.string().optional(), url: z.string().optional() }) export type PurplePatent = z.infer export const PurpleProjectSchema = z.object({ description: z.string().optional(), ends_at: IndigoDateSchema.optional(), starts_at: IndecentDateSchema.optional(), title: z.string().optional(), url: z.string().optional() }) export type PurpleProject = z.infer export const PurplePublicationSchema = z.object({ description: z.string().optional(), name: z.string().optional(), published_on: HilariousDateSchema.optional(), publisher: z.string().optional(), url: z.string().optional() }) export type PurplePublication = z.infer export const PurpleTestScoreSchema = z.object({ date_on: AmbitiousDateSchema.optional(), description: z.string().optional(), name: z.string().optional(), score: z.string().optional() }) export type PurpleTestScore = z.infer export const PurpleArticleSchema = z.object({ author: z.string().optional(), image_url: z.string().optional(), link: z.string().optional(), published_date: CunningDateSchema.optional(), title: z.string().optional() }) export type PurpleArticle = z.infer export const PurpleCertificationSchema = z.object({ authority: z.string().optional(), display_source: z.string().optional(), ends_at: FriskyDateSchema.optional(), license_number: z.string().optional(), name: z.string().optional(), starts_at: MischievousDateSchema.optional(), url: z.string().optional() }) export type PurpleCertification = z.infer export const PurpleEducationSchema = z.object({ activities_and_societies: z.string().optional(), degree_name: z.string().optional(), description: z.string().optional(), ends_at: BraggadociousDateSchema.optional(), field_of_study: z.string().optional(), grade: z.string().optional(), logo_url: z.string().optional(), school: z.string().optional(), school_facebook_profile_url: z.string().optional(), school_linkedin_profile_url: z.string().optional(), starts_at: Date1Schema.optional() }) export type PurpleEducation = z.infer export const PurpleExperienceSchema = z.object({ company: z.string().optional(), company_facebook_profile_url: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date2Schema.optional(), location: z.string().optional(), logo_url: z.string().optional(), starts_at: Date3Schema.optional(), title: z.string().optional() }) export type PurpleExperience = z.infer export const PurpleVolunteeringExperienceSchema = z.object({ cause: z.string().optional(), company: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date4Schema.optional(), logo_url: z.string().optional(), starts_at: Date5Schema.optional(), title: z.string().optional() }) export type PurpleVolunteeringExperience = z.infer< typeof PurpleVolunteeringExperienceSchema > export const FluffyHonourAwardSchema = z.object({ description: z.string().optional(), issued_on: Date6Schema.optional(), issuer: z.string().optional(), title: z.string().optional() }) export type FluffyHonourAward = z.infer export const FluffyAccomplishmentOrgSchema = z.object({ description: z.string().optional(), ends_at: Date7Schema.optional(), org_name: z.string().optional(), starts_at: Date8Schema.optional(), title: z.string().optional() }) export type FluffyAccomplishmentOrg = z.infer< typeof FluffyAccomplishmentOrgSchema > export const FluffyPatentSchema = z.object({ application_number: z.string().optional(), description: z.string().optional(), issued_on: Date9Schema.optional(), issuer: z.string().optional(), patent_number: z.string().optional(), title: z.string().optional(), url: z.string().optional() }) export type FluffyPatent = z.infer export const FluffyProjectSchema = z.object({ description: z.string().optional(), ends_at: Date10Schema.optional(), starts_at: Date11Schema.optional(), title: z.string().optional(), url: z.string().optional() }) export type FluffyProject = z.infer export const FluffyPublicationSchema = z.object({ description: z.string().optional(), name: z.string().optional(), published_on: Date12Schema.optional(), publisher: z.string().optional(), url: z.string().optional() }) export type FluffyPublication = z.infer export const FluffyTestScoreSchema = z.object({ date_on: Date13Schema.optional(), description: z.string().optional(), name: z.string().optional(), score: z.string().optional() }) export type FluffyTestScore = z.infer export const FluffyArticleSchema = z.object({ author: z.string().optional(), image_url: z.string().optional(), link: z.string().optional(), published_date: Date14Schema.optional(), title: z.string().optional() }) export type FluffyArticle = z.infer export const FluffyCertificationSchema = z.object({ authority: z.string().optional(), display_source: z.string().optional(), ends_at: Date16Schema.optional(), license_number: z.string().optional(), name: z.string().optional(), starts_at: Date17Schema.optional(), url: z.string().optional() }) export type FluffyCertification = z.infer export const FluffyEducationSchema = z.object({ activities_and_societies: z.string().optional(), degree_name: z.string().optional(), description: z.string().optional(), ends_at: Date18Schema.optional(), field_of_study: z.string().optional(), grade: z.string().optional(), logo_url: z.string().optional(), school: z.string().optional(), school_facebook_profile_url: z.string().optional(), school_linkedin_profile_url: z.string().optional(), starts_at: Date19Schema.optional() }) export type FluffyEducation = z.infer export const FluffyExperienceSchema = z.object({ company: z.string().optional(), company_facebook_profile_url: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date20Schema.optional(), location: z.string().optional(), logo_url: z.string().optional(), starts_at: Date21Schema.optional(), title: z.string().optional() }) export type FluffyExperience = z.infer export const FluffyVolunteeringExperienceSchema = z.object({ cause: z.string().optional(), company: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date22Schema.optional(), logo_url: z.string().optional(), starts_at: Date23Schema.optional(), title: z.string().optional() }) export type FluffyVolunteeringExperience = z.infer< typeof FluffyVolunteeringExperienceSchema > export const TentacledHonourAwardSchema = z.object({ description: z.string().optional(), issued_on: Date24Schema.optional(), issuer: z.string().optional(), title: z.string().optional() }) export type TentacledHonourAward = z.infer export const TentacledAccomplishmentOrgSchema = z.object({ description: z.string().optional(), ends_at: Date25Schema.optional(), org_name: z.string().optional(), starts_at: Date26Schema.optional(), title: z.string().optional() }) export type TentacledAccomplishmentOrg = z.infer< typeof TentacledAccomplishmentOrgSchema > export const TentacledPatentSchema = z.object({ application_number: z.string().optional(), description: z.string().optional(), issued_on: Date27Schema.optional(), issuer: z.string().optional(), patent_number: z.string().optional(), title: z.string().optional(), url: z.string().optional() }) export type TentacledPatent = z.infer export const TentacledProjectSchema = z.object({ description: z.string().optional(), ends_at: Date28Schema.optional(), starts_at: Date29Schema.optional(), title: z.string().optional(), url: z.string().optional() }) export type TentacledProject = z.infer export const TentacledPublicationSchema = z.object({ description: z.string().optional(), name: z.string().optional(), published_on: Date30Schema.optional(), publisher: z.string().optional(), url: z.string().optional() }) export type TentacledPublication = z.infer export const TentacledTestScoreSchema = z.object({ date_on: Date31Schema.optional(), description: z.string().optional(), name: z.string().optional(), score: z.string().optional() }) export type TentacledTestScore = z.infer export const TentacledArticleSchema = z.object({ author: z.string().optional(), image_url: z.string().optional(), link: z.string().optional(), published_date: Date32Schema.optional(), title: z.string().optional() }) export type TentacledArticle = z.infer export const TentacledCertificationSchema = z.object({ authority: z.string().optional(), display_source: z.string().optional(), ends_at: Date34Schema.optional(), license_number: z.string().optional(), name: z.string().optional(), starts_at: Date35Schema.optional(), url: z.string().optional() }) export type TentacledCertification = z.infer< typeof TentacledCertificationSchema > export const TentacledEducationSchema = z.object({ activities_and_societies: z.string().optional(), degree_name: z.string().optional(), description: z.string().optional(), ends_at: Date36Schema.optional(), field_of_study: z.string().optional(), grade: z.string().optional(), logo_url: z.string().optional(), school: z.string().optional(), school_facebook_profile_url: z.string().optional(), school_linkedin_profile_url: z.string().optional(), starts_at: Date37Schema.optional() }) export type TentacledEducation = z.infer export const TentacledExperienceSchema = z.object({ company: z.string().optional(), company_facebook_profile_url: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date38Schema.optional(), location: z.string().optional(), logo_url: z.string().optional(), starts_at: Date39Schema.optional(), title: z.string().optional() }) export type TentacledExperience = z.infer export const TentacledVolunteeringExperienceSchema = z.object({ cause: z.string().optional(), company: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date40Schema.optional(), logo_url: z.string().optional(), starts_at: Date41Schema.optional(), title: z.string().optional() }) export type TentacledVolunteeringExperience = z.infer< typeof TentacledVolunteeringExperienceSchema > export const StickyHonourAwardSchema = z.object({ description: z.string().optional(), issued_on: Date42Schema.optional(), issuer: z.string().optional(), title: z.string().optional() }) export type StickyHonourAward = z.infer export const StickyAccomplishmentOrgSchema = z.object({ description: z.string().optional(), ends_at: Date43Schema.optional(), org_name: z.string().optional(), starts_at: Date44Schema.optional(), title: z.string().optional() }) export type StickyAccomplishmentOrg = z.infer< typeof StickyAccomplishmentOrgSchema > export const StickyPatentSchema = z.object({ application_number: z.string().optional(), description: z.string().optional(), issued_on: Date45Schema.optional(), issuer: z.string().optional(), patent_number: z.string().optional(), title: z.string().optional(), url: z.string().optional() }) export type StickyPatent = z.infer export const StickyProjectSchema = z.object({ description: z.string().optional(), ends_at: Date46Schema.optional(), starts_at: Date47Schema.optional(), title: z.string().optional(), url: z.string().optional() }) export type StickyProject = z.infer export const StickyPublicationSchema = z.object({ description: z.string().optional(), name: z.string().optional(), published_on: Date48Schema.optional(), publisher: z.string().optional(), url: z.string().optional() }) export type StickyPublication = z.infer export const StickyTestScoreSchema = z.object({ date_on: Date49Schema.optional(), description: z.string().optional(), name: z.string().optional(), score: z.string().optional() }) export type StickyTestScore = z.infer export const StickyArticleSchema = z.object({ author: z.string().optional(), image_url: z.string().optional(), link: z.string().optional(), published_date: Date50Schema.optional(), title: z.string().optional() }) export type StickyArticle = z.infer export const StickyCertificationSchema = z.object({ authority: z.string().optional(), display_source: z.string().optional(), ends_at: Date51Schema.optional(), license_number: z.string().optional(), name: z.string().optional(), starts_at: Date52Schema.optional(), url: z.string().optional() }) export type StickyCertification = z.infer export const StickyEducationSchema = z.object({ activities_and_societies: z.string().optional(), degree_name: z.string().optional(), description: z.string().optional(), ends_at: Date53Schema.optional(), field_of_study: z.string().optional(), grade: z.string().optional(), logo_url: z.string().optional(), school: z.string().optional(), school_facebook_profile_url: z.string().optional(), school_linkedin_profile_url: z.string().optional(), starts_at: Date54Schema.optional() }) export type StickyEducation = z.infer export const StickyExperienceSchema = z.object({ company: z.string().optional(), company_facebook_profile_url: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date55Schema.optional(), location: z.string().optional(), logo_url: z.string().optional(), starts_at: Date56Schema.optional(), title: z.string().optional() }) export type StickyExperience = z.infer export const StickyVolunteeringExperienceSchema = z.object({ cause: z.string().optional(), company: z.string().optional(), company_linkedin_profile_url: z.string().optional(), description: z.string().optional(), ends_at: Date57Schema.optional(), logo_url: z.string().optional(), starts_at: Date58Schema.optional(), title: z.string().optional() }) export type StickyVolunteeringExperience = z.infer< typeof StickyVolunteeringExperienceSchema > export const PurpleAcquiredCompanySchema = z.object({ announced_date: Date59Schema.optional(), crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), price: z.number().optional() }) export type PurpleAcquiredCompany = z.infer< typeof PurpleAcquiredCompanySchema > export const PurpleAcquisitorSchema = z.object({ announced_date: Date60Schema.optional(), crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), price: z.number().optional() }) export type PurpleAcquisitor = z.infer export const PurpleCompanyDetailsSchema = z.object({ company_type: z.string().optional(), contact_email: z.string().optional(), crunchbase_profile_url: z.string().optional(), crunchbase_rank: z.number().optional(), facebook_id: z.string().optional(), founding_date: Date61Schema.optional(), ipo_date: Date62Schema.optional(), ipo_status: z.string().optional(), number_of_acquisitions: z.number().optional(), number_of_exits: z.number().optional(), number_of_funding_rounds: z.number().optional(), number_of_investments: z.number().optional(), number_of_investors: z.number().optional(), number_of_lead_investments: z.number().optional(), number_of_lead_investors: z.number().optional(), operating_status: z.string().optional(), phone_number: z.string().optional(), stock_symbol: z.string().optional(), total_fund_raised: z.number().optional(), total_funding_amount: z.number().optional(), twitter_id: z.string().optional() }) export type PurpleCompanyDetails = z.infer export const PurpleFundingSchema = z.object({ announced_date: Date63Schema.optional(), funding_type: z.string().optional(), investor_list: z.array(PurpleInvestorSchema).optional(), money_raised: z.number().optional(), number_of_investor: z.number().optional() }) export type PurpleFunding = z.infer export const PurpleCompanyUpdateSchema = z.object({ article_link: z.string().optional(), image: z.string().optional(), posted_on: Date64Schema.optional(), text: z.string().optional(), total_likes: z.number().optional() }) export type PurpleCompanyUpdate = z.infer export const FluffyAcquiredCompanySchema = z.object({ announced_date: Date65Schema.optional(), crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), price: z.number().optional() }) export type FluffyAcquiredCompany = z.infer< typeof FluffyAcquiredCompanySchema > export const FluffyAcquisitorSchema = z.object({ announced_date: Date66Schema.optional(), crunchbase_profile_url: z.string().optional(), linkedin_profile_url: z.string().optional(), price: z.number().optional() }) export type FluffyAcquisitor = z.infer export const FluffyCompanyDetailsSchema = z.object({ company_type: z.string().optional(), contact_email: z.string().optional(), crunchbase_profile_url: z.string().optional(), crunchbase_rank: z.number().optional(), facebook_id: z.string().optional(), founding_date: Date67Schema.optional(), ipo_date: Date68Schema.optional(), ipo_status: z.string().optional(), number_of_acquisitions: z.number().optional(), number_of_exits: z.number().optional(), number_of_funding_rounds: z.number().optional(), number_of_investments: z.number().optional(), number_of_investors: z.number().optional(), number_of_lead_investments: z.number().optional(), number_of_lead_investors: z.number().optional(), operating_status: z.string().optional(), phone_number: z.string().optional(), stock_symbol: z.string().optional(), total_fund_raised: z.number().optional(), total_funding_amount: z.number().optional(), twitter_id: z.string().optional() }) export type FluffyCompanyDetails = z.infer export const FluffyFundingSchema = z.object({ announced_date: Date69Schema.optional(), funding_type: z.string().optional(), investor_list: z.array(FluffyInvestorSchema).optional(), money_raised: z.number().optional(), number_of_investor: z.number().optional() }) export type FluffyFunding = z.infer export const FluffyCompanyUpdateSchema = z.object({ article_link: z.string().optional(), image: z.string().optional(), posted_on: Date70Schema.optional(), text: z.string().optional(), total_likes: z.number().optional() }) export type FluffyCompanyUpdate = z.infer export const PersonLookupUrlEnrichResultProfileSchema = z.object({ accomplishment_courses: z.array(PurpleCourseSchema).optional(), accomplishment_honors_awards: z.array(PurpleHonourAwardSchema).optional(), accomplishment_organisations: z .array(PurpleAccomplishmentOrgSchema) .optional(), accomplishment_patents: z.array(PurplePatentSchema).optional(), accomplishment_projects: z.array(PurpleProjectSchema).optional(), accomplishment_publications: z.array(PurplePublicationSchema).optional(), accomplishment_test_scores: z.array(PurpleTestScoreSchema).optional(), activities: z.array(PurpleActivitySchema).optional(), articles: z.array(PurpleArticleSchema).optional(), background_cover_image_url: z.string().optional(), birth_date: MagentaDateSchema.optional(), certifications: z.array(PurpleCertificationSchema).optional(), city: z.string().optional(), connections: z.number().optional(), country: z.string().optional(), country_full_name: z.string().optional(), education: z.array(PurpleEducationSchema).optional(), experiences: z.array(PurpleExperienceSchema).optional(), extra: PurplePersonExtraSchema.optional(), first_name: z.string().optional(), follower_count: z.number().optional(), full_name: z.string().optional(), gender: z.string().optional(), groups: z.array(PurplePersonGroupSchema).optional(), headline: z.string().optional(), industry: z.string().optional(), inferred_salary: PurpleInferredSalarySchema.optional(), interests: z.array(z.string()).optional(), languages: z.array(z.string()).optional(), last_name: z.string().optional(), occupation: z.string().optional(), people_also_viewed: z.array(PurplePeopleAlsoViewedSchema).optional(), personal_emails: z.array(z.string()).optional(), personal_numbers: z.array(z.string()).optional(), profile_pic_url: z.string().optional(), public_identifier: z.string().optional(), recommendations: z.array(z.string()).optional(), similarly_named_profiles: z.array(PurpleSimilarProfileSchema).optional(), skills: z.array(z.string()).optional(), state: z.string().optional(), summary: z.string().optional(), volunteer_work: z.array(PurpleVolunteeringExperienceSchema).optional() }) export type PersonLookupUrlEnrichResultProfile = z.infer< typeof PersonLookupUrlEnrichResultProfileSchema > export const RoleSearchEnrichedResultProfileSchema = z.object({ accomplishment_courses: z.array(FluffyCourseSchema).optional(), accomplishment_honors_awards: z.array(FluffyHonourAwardSchema).optional(), accomplishment_organisations: z .array(FluffyAccomplishmentOrgSchema) .optional(), accomplishment_patents: z.array(FluffyPatentSchema).optional(), accomplishment_projects: z.array(FluffyProjectSchema).optional(), accomplishment_publications: z.array(FluffyPublicationSchema).optional(), accomplishment_test_scores: z.array(FluffyTestScoreSchema).optional(), activities: z.array(FluffyActivitySchema).optional(), articles: z.array(FluffyArticleSchema).optional(), background_cover_image_url: z.string().optional(), birth_date: Date15Schema.optional(), certifications: z.array(FluffyCertificationSchema).optional(), city: z.string().optional(), connections: z.number().optional(), country: z.string().optional(), country_full_name: z.string().optional(), education: z.array(FluffyEducationSchema).optional(), experiences: z.array(FluffyExperienceSchema).optional(), extra: FluffyPersonExtraSchema.optional(), first_name: z.string().optional(), follower_count: z.number().optional(), full_name: z.string().optional(), gender: z.string().optional(), groups: z.array(FluffyPersonGroupSchema).optional(), headline: z.string().optional(), industry: z.string().optional(), inferred_salary: FluffyInferredSalarySchema.optional(), interests: z.array(z.string()).optional(), languages: z.array(z.string()).optional(), last_name: z.string().optional(), occupation: z.string().optional(), people_also_viewed: z.array(FluffyPeopleAlsoViewedSchema).optional(), personal_emails: z.array(z.string()).optional(), personal_numbers: z.array(z.string()).optional(), profile_pic_url: z.string().optional(), public_identifier: z.string().optional(), recommendations: z.array(z.string()).optional(), similarly_named_profiles: z.array(FluffySimilarProfileSchema).optional(), skills: z.array(z.string()).optional(), state: z.string().optional(), summary: z.string().optional(), volunteer_work: z.array(FluffyVolunteeringExperienceSchema).optional() }) export type RoleSearchEnrichedResultProfile = z.infer< typeof RoleSearchEnrichedResultProfileSchema > export const ReverseEmailUrlEnrichResultProfileSchema = z.object({ accomplishment_courses: z.array(TentacledCourseSchema).optional(), accomplishment_honors_awards: z .array(TentacledHonourAwardSchema) .optional(), accomplishment_organisations: z .array(TentacledAccomplishmentOrgSchema) .optional(), accomplishment_patents: z.array(TentacledPatentSchema).optional(), accomplishment_projects: z.array(TentacledProjectSchema).optional(), accomplishment_publications: z.array(TentacledPublicationSchema).optional(), accomplishment_test_scores: z.array(TentacledTestScoreSchema).optional(), activities: z.array(TentacledActivitySchema).optional(), articles: z.array(TentacledArticleSchema).optional(), background_cover_image_url: z.string().optional(), birth_date: Date33Schema.optional(), certifications: z.array(TentacledCertificationSchema).optional(), city: z.string().optional(), connections: z.number().optional(), country: z.string().optional(), country_full_name: z.string().optional(), education: z.array(TentacledEducationSchema).optional(), experiences: z.array(TentacledExperienceSchema).optional(), extra: TentacledPersonExtraSchema.optional(), first_name: z.string().optional(), follower_count: z.number().optional(), full_name: z.string().optional(), gender: z.string().optional(), groups: z.array(TentacledPersonGroupSchema).optional(), headline: z.string().optional(), industry: z.string().optional(), inferred_salary: TentacledInferredSalarySchema.optional(), interests: z.array(z.string()).optional(), languages: z.array(z.string()).optional(), last_name: z.string().optional(), occupation: z.string().optional(), people_also_viewed: z.array(TentacledPeopleAlsoViewedSchema).optional(), personal_emails: z.array(z.string()).optional(), personal_numbers: z.array(z.string()).optional(), profile_pic_url: z.string().optional(), public_identifier: z.string().optional(), recommendations: z.array(z.string()).optional(), similarly_named_profiles: z.array(TentacledSimilarProfileSchema).optional(), skills: z.array(z.string()).optional(), state: z.string().optional(), summary: z.string().optional(), volunteer_work: z.array(TentacledVolunteeringExperienceSchema).optional() }) export type ReverseEmailUrlEnrichResultProfile = z.infer< typeof ReverseEmailUrlEnrichResultProfileSchema > export const PersonProfileSchema = z.object({ accomplishment_courses: z.array(StickyCourseSchema).optional(), accomplishment_honors_awards: z.array(StickyHonourAwardSchema).optional(), accomplishment_organisations: z .array(StickyAccomplishmentOrgSchema) .optional(), accomplishment_patents: z.array(StickyPatentSchema).optional(), accomplishment_projects: z.array(StickyProjectSchema).optional(), accomplishment_publications: z.array(StickyPublicationSchema).optional(), accomplishment_test_scores: z.array(StickyTestScoreSchema).optional(), activities: z.array(StickyActivitySchema).optional(), articles: z.array(StickyArticleSchema).optional(), background_cover_image_url: z.string().optional(), birth_date: MagentaDateSchema.optional(), certifications: z.array(StickyCertificationSchema).optional(), city: z.string().optional(), connections: z.number().optional(), country: z.string().optional(), country_full_name: z.string().optional(), education: z.array(StickyEducationSchema).optional(), experiences: z.array(StickyExperienceSchema).optional(), first_name: z.string().optional(), follower_count: z.number().optional(), full_name: z.string().optional(), gender: z.string().optional(), groups: z.array(StickyPersonGroupSchema).optional(), headline: z.string().optional(), industry: z.string().optional(), inferred_salary: PurpleInferredSalarySchema.optional(), languages: z.array(z.string()).optional(), last_name: z.string().optional(), occupation: z.string().optional(), people_also_viewed: z.array(StickyPeopleAlsoViewedSchema).optional(), personal_emails: z.array(z.string()).optional(), personal_numbers: z.array(z.string()).optional(), profile_pic_url: z.string().optional(), public_identifier: z.string().optional(), recommendations: z.array(z.string()).optional(), similarly_named_profiles: z.array(StickySimilarProfileSchema).optional(), skills: z.array(z.string()).optional(), state: z.string().optional(), summary: z.string().optional(), volunteer_work: z.array(StickyVolunteeringExperienceSchema).optional() }) export type PersonProfile = z.infer export type ResolvedPersonProfile = { profile?: PersonProfile url?: string name_similarity_score?: number company_similarity_score?: number title_similarity_score?: number location_similarity_score?: number last_updated?: string } export const PurpleAcquisitionSchema = z.object({ acquired: z.array(PurpleAcquiredCompanySchema).optional(), acquired_by: PurpleAcquisitorSchema.optional() }) export type PurpleAcquisition = z.infer export const FluffyAcquisitionSchema = z.object({ acquired: z.array(FluffyAcquiredCompanySchema).optional(), acquired_by: FluffyAcquisitorSchema.optional() }) export type FluffyAcquisition = z.infer export const PersonLookupUrlEnrichResultSchema = z.object({ company_similarity_score: z.number().optional(), last_updated: z.string().optional(), location_similarity_score: z.number().optional(), name_similarity_score: z.number().optional(), profile: PersonLookupUrlEnrichResultProfileSchema.optional(), title_similarity_score: z.number().optional(), url: z.string().optional() }) export type PersonLookupUrlEnrichResult = z.infer< typeof PersonLookupUrlEnrichResultSchema > export const RoleSearchEnrichedResultSchema = z.object({ last_updated: z.string().optional(), linkedin_profile_url: z.string().optional(), profile: RoleSearchEnrichedResultProfileSchema.optional() }) export type RoleSearchEnrichedResult = z.infer< typeof RoleSearchEnrichedResultSchema > export const ReverseEmailUrlEnrichResultSchema = z.object({ backwards_compatibility_notes: z.string().optional(), facebook_profile_url: z.string().optional(), last_updated: z.string().optional(), linkedin_profile_url: z.string().optional(), profile: ReverseEmailUrlEnrichResultProfileSchema.optional(), similarity_score: z.number().optional(), twitter_profile_url: z.string().optional(), url: z.string().optional() }) export type ReverseEmailUrlEnrichResult = z.infer< typeof ReverseEmailUrlEnrichResultSchema > export const SearchResultSchema = z.object({ last_updated: z.string().optional(), linkedin_profile_url: z.string().optional(), profile: PersonProfileSchema.optional() }) export type SearchResult = z.infer export const ResultProfileSchema = z.object({ linkedin_url: z.string().optional(), acquisitions: PurpleAcquisitionSchema.optional(), affiliated_companies: z.array(PurpleAffiliatedCompanySchema).optional(), background_cover_image_url: z.string().optional(), categories: z.array(z.string()).optional(), company_size: z.array(z.number()).optional(), company_size_on_linkedin: z.number().optional(), company_type: CompanyTypeSchema.optional(), customer_list: z.array(z.string()).optional(), description: z.string().optional(), exit_data: z.array(PurpleExitSchema).optional(), extra: PurpleCompanyDetailsSchema.optional(), follower_count: z.number().optional(), founded_year: z.number().optional(), funding_data: z.array(PurpleFundingSchema).optional(), hq: PurpleCompanyLocationSchema.optional(), industry: z.string().optional(), linkedin_internal_id: z.string().optional(), locations: z.array(FluffyCompanyLocationSchema).optional(), name: z.string().optional(), profile_pic_url: z.string().optional(), search_id: z.string().optional(), similar_companies: z.array(PurpleSimilarCompanySchema).optional(), specialities: z.array(z.string()).optional(), tagline: z.string().optional(), universal_name_id: z.string().optional(), updates: z.array(PurpleCompanyUpdateSchema).optional(), website: z.string().optional() }) export type CompanyProfile = z.infer export type ResolvedCompanyProfile = { url: string last_updated: string profile: CompanyProfile } export const CompanyUrlEnrichResultProfileSchema = z.object({ acquisitions: FluffyAcquisitionSchema.optional(), affiliated_companies: z.array(FluffyAffiliatedCompanySchema).optional(), background_cover_image_url: z.string().optional(), categories: z.array(z.string()).optional(), company_size: z.array(z.number()).optional(), company_size_on_linkedin: z.number().optional(), company_type: CompanyTypeSchema.optional(), customer_list: z.array(z.string()).optional(), description: z.string().optional(), exit_data: z.array(FluffyExitSchema).optional(), extra: FluffyCompanyDetailsSchema.optional(), follower_count: z.number().optional(), founded_year: z.number().optional(), funding_data: z.array(FluffyFundingSchema).optional(), hq: TentacledCompanyLocationSchema.optional(), industry: z.string().optional(), linkedin_internal_id: z.string().optional(), locations: z.array(StickyCompanyLocationSchema).optional(), name: z.string().optional(), profile_pic_url: z.string().optional(), search_id: z.string().optional(), similar_companies: z.array(FluffySimilarCompanySchema).optional(), specialities: z.array(z.string()).optional(), tagline: z.string().optional(), universal_name_id: z.string().optional(), updates: z.array(FluffyCompanyUpdateSchema).optional(), website: z.string().optional() }) export type CompanyUrlEnrichResultProfile = z.infer< typeof CompanyUrlEnrichResultProfileSchema > export const PersonSearchResultSchema = z.object({ next_page: z.string().optional(), results: z.array(SearchResultSchema).optional(), total_result_count: z.number().optional() }) export type PersonSearchResult = z.infer export const CSearchResultSchema = z.object({ last_updated: z.string().optional(), linkedin_profile_url: z.string().optional(), profile: ResultProfileSchema.optional() }) export type CSearchResult = z.infer export const CompanyUrlEnrichResultSchema = z.object({ last_updated: z.string().optional(), profile: CompanyUrlEnrichResultProfileSchema.optional(), url: z.string().optional() }) export type CompanyUrlEnrichResult = z.infer< typeof CompanyUrlEnrichResultSchema > export const CompanySearchResultSchema = z.object({ next_page: z.string().optional(), results: z.array(CSearchResultSchema).optional(), total_result_count: z.number().optional() }) export type CompanySearchResult = z.infer } /** * Pull rich data about people and companies. * * Essentially a wrapper around LinkedIn & Crunchbase. * * @see https://nubela.co/proxycurl/ */ export class ProxycurlClient extends AIFunctionsProvider { protected readonly ky: KyInstance protected readonly apiKey: string protected readonly apiBaseUrl: string constructor({ apiKey = getEnv('PROXYCURL_API_KEY'), apiBaseUrl = getEnv('PROXYCURL_API_BASE_URL') ?? 'https://nubela.co/proxycurl', throttle = true, timeoutMs = 60_000, ky = defaultKy }: { apiKey?: string apiBaseUrl?: string throttle?: boolean timeoutMs?: number ky?: KyInstance } = {}) { assert( apiKey, 'ProxycurlClient missing required "apiKey" (defaults to "PROXYCURL_API_KEY")' ) assert( apiBaseUrl, 'ProxycurlClient missing required "apiBaseUrl" (defaults to "PROXYCURL_API_BASE_URL")' ) super() this.apiKey = apiKey this.apiBaseUrl = apiBaseUrl const throttledKy = throttle ? throttleKy(ky, proxycurl.throttle) : ky this.ky = throttledKy.extend({ prefixUrl: apiBaseUrl, timeout: timeoutMs, headers: { Authorization: `Bearer ${apiKey}` } }) } /** Gets the LinkedIn profile for a company given it's domain `url`. */ @aiFunction({ name: 'get_linkedin_company', description: "Gets the LinkedIn profile for a company given it's domain `url`.", inputSchema: proxycurl.CompanyProfileEndpointParamsQueryClassSchema }) async getLinkedInCompany( opts: proxycurl.CompanyProfileEndpointParamsQueryClass ): Promise { const res = await this.ky .get('api/linkedin/company', { searchParams: sanitizeSearchParams({ funding_data: 'include', exit_data: 'include', extra_data: 'include', ...opts }) }) .json() return { linkedin_url: opts.url, ...res } } /** Gets the LinkedIn profile for a person given some unique, identifying information about them. */ @aiFunction({ name: 'get_linkedin_person', description: 'Gets the LinkedIn profile for a person given some unique, identifying information about them.', inputSchema: proxycurl.PersonProfileEndpointParamsQueryClassSchema }) async getLinkedInPerson( opts: proxycurl.PersonProfileEndpointParamsQueryClass ): Promise { return this.ky .get('api/v2/linkedin', { searchParams: sanitizeSearchParams(opts) }) .json() } /** Resolves the LinkedIn profile for a person given their `first_name` and `company_domain` URL. */ @aiFunction({ name: 'resolve_linkedin_person', description: 'Resolves the LinkedIn profile for a person given their `first_name` and `company_domain` URL.', inputSchema: proxycurl.PersonLookupEndpointParamsQueryClassSchema }) async resolveLinkedInPerson( opts: proxycurl.PersonLookupEndpointParamsQueryClass ): Promise { return this.ky .get('api/linkedin/profile/resolve', { searchParams: sanitizeSearchParams({ similarity_checks: 'include', enrich_profile: 'enrich', ...opts }) }) .json() } /** Resolves the LinkedIn profile for a person given their `email`. */ @aiFunction({ name: 'resolve_linkedin_person_by_email', description: 'Resolves the LinkedIn profile for a person given their `email`.', inputSchema: proxycurl.ReverseEmailLookupEndpointParamsQueryClassSchema }) async resolveLinkedInPersonByEmail( opts: proxycurl.ReverseEmailLookupEndpointParamsQueryClass ) { return this.ky .get('api/linkedin/profile/resolve/email', { searchParams: sanitizeSearchParams({ enrich_profile: 'enrich', ...opts }) }) .json() } /** Resolves the LinkedIn profile for a person at a given `company_name` and `role`. */ @aiFunction({ name: 'resolve_linkedin_person_at_company_by_role', description: 'Resolves the LinkedIn profile for a person at a given `company_name` and `role`.', inputSchema: proxycurl.RoleLookupEndpointParamsQueryClassSchema }) async resolveLinkedInPersonAtCompanyByRole( opts: proxycurl.RoleLookupEndpointParamsQueryClass ): Promise { return this.ky .get('api/find/company/role/', { searchParams: sanitizeSearchParams({ enrich_profile: 'enrich', ...opts }) }) .json() } /** Resolves the LinkedIn profile for a company given the `company_name` and/or `company_domain`. */ @aiFunction({ name: 'resolve_linkedin_company', description: 'Resolves the LinkedIn profile for a company given the `company_name` and/or `company_domain`.', inputSchema: proxycurl.CompanyLookupEndpointParamsQueryClassSchema }) async resolveLinkedInCompany( opts: proxycurl.CompanyLookupEndpointParamsQueryClass ): Promise { const res = await this.ky .get('api/linkedin/company/resolve', { searchParams: sanitizeSearchParams({ enrich_profile: 'enrich', ...opts }) }) .json() return { linkedin_url: res.url, ...res.profile } } /** Searches LinkedIn company profiles based on a set of criteria such as `name`, `industry`, `region`, `description`, `city`, number of employees, founding date, funding raised, etc. */ @aiFunction({ name: 'search_linkedin_companies', description: 'Searches LinkedIn company profiles based on a set of criteria such as `name`, `industry`, `region`, `description`, `city`, number of employees, founding date, funding raised, etc.', inputSchema: proxycurl.CompanySearchEndpointParamsQueryClassSchema }) async searchCompanies(opts: proxycurl.CompanySearchEndpointParamsQueryClass) { return this.ky .get('api/v2/search/company', { searchParams: sanitizeSearchParams(opts) }) .json() } /** Searches LinkedIn people profiles based on a set of criteria such as `country`, `first_name`, `last_name`, `current_company_name`, `headline`, `industries`, `past_company_name`, `summary`, `city`, `education_school_name`, etc. */ @aiFunction({ name: 'search_linkedin_people', description: 'Searches LinkedIn people profiles based on a set of criteria such as `country`, `first_name`, `last_name`, `current_company_name`, `headline`, `industries`, `past_company_name`, `summary`, `city`, `education_school_name`, etc.', inputSchema: proxycurl.PersonSearchEndpointParamsQueryClassSchema }) async searchPeople(opts: proxycurl.PersonSearchEndpointParamsQueryClass) { return this.ky .get('api/v2/search/person/', { searchParams: sanitizeSearchParams(opts) }) .json() } }