pull/643/head^2
Travis Fischer 2024-05-26 01:31:45 -05:00
rodzic 89f8246a3a
commit 17f3912654
4 zmienionych plików z 1310 dodań i 0 usunięć

Wyświetl plik

@ -2,6 +2,9 @@ export * from './clearbit-client.js'
export * from './dexa-client.js'
export * from './diffbot-client.js'
export * from './exa-client.js'
export * from './people-data-labs-client.js'
export * from './perigon-client.js'
export * from './predict-leads-client.js'
export * from './proxycurl-client.js'
export * from './scraper-client.js'
export * from './serpapi-client.js'

Wyświetl plik

@ -0,0 +1,525 @@
import defaultKy, { type KyInstance } from 'ky'
import pThrottle from 'p-throttle'
import { assert, getEnv, throttleKy } from '../utils.js'
const peopleDataLabsAPIThrottle = pThrottle({
limit: 20,
interval: 60 * 1000,
strict: true
})
export namespace peopledatalabs {
export const BASE_URL = 'https://api.peopledatalabs.com/v5/'
export const JobTitleLevels = [
'cxo',
'director',
'entry',
'manager',
'owner',
'partner',
'senior',
'training',
'unpaid',
'vp'
]
export const JobTitleRoles = [
'customer_service',
'design',
'education',
'engineering',
'finance',
'health',
'human_resources',
'legal',
'marketing',
'media',
'operations',
'public_relations',
'real_estate',
'sales',
'trades'
]
// TODO configure this type to make pdl_id or name or profile or ticker or website required.
// Only one is required
export interface CompanyLookupOptions {
pdl_id?: string
name?: string
profile?: string
ticker?: string
website?: string
location?: string[]
locality?: string
region?: string
country?: string
street_address?: string
postal_code?: string
data_include?: string
pretty?: boolean
}
export interface Naics {
naics_code: string
sector: string
sub_sector: string
industry_group: string
naics_industry: string | null
national_industry: string | null
}
export interface Sic {
sic_code: string
major_group: string
industry_group: string
industry_sector: string | null
}
export interface Location {
name: string
locality: string
region: string
metro: string
country: string
continent: string
street_address: string
address_line_2: string | null
postal_code: string
geo: string
}
export interface EmployeeCountByCountry {
[country: string]: number
}
export interface CompanyLookupResponse {
status: number
name: string
display_name: string
size: string
employee_count: number
id: string
founded: number
industry: string
naics: Naics[]
sic: Sic[]
location: Location
linkedin_id: string
linkedin_url: string
facebook_url: string
twitter_url: string
profiles: string[]
website: string
ticker: string
gics_sector: string | null
mic_exchange: string | null
type: string
summary: string
tags: string[]
headline: string
alternative_names: string[]
alternative_domains: string[]
affiliated_profiles: string[]
employee_count_by_country: EmployeeCountByCountry
likelihood: number
}
export interface CompanySearchOptions {
limit?: number
query: {
website?: string
tags?: string
industry?: string
'location.country'?: string
'location.metro'?: string
summary?: string
size?: string[]
affiliated_profiles?: string
}
}
export type CompanySearchOptionsQueryKeys =
keyof CompanySearchOptions['query']
export interface CompanySearchResponse {
status: number
data: {
name: string
display_name: string
size: string
employee_count: number
id: string
founded: number
industry: string
naics: Naics[]
sic: Sic[]
location: Location
linkedin_id: string
linkedin_url: string
facebook_url: string
twitter_url: string
profiles: string[]
website: string
ticker: string
gics_sector: string | null
mic_exchange: string | null
type: string
summary: string
tags: string[]
headline: string
alternative_names: string[]
alternative_domains: string[]
affiliated_profiles: string[]
employee_count_by_country: EmployeeCountByCountry
}[]
scroll_token: string
total: number
}
export interface PersonSearchOptions {
limit?: number
query: {
first_name?: string
full_name?: string
last_name?: string
job_company_website?: string
job_title_role?: string
/**
* The docs says this property should be an array of strings.
* But when sending the array a 404 error is returned.
* See: https://docs.peopledatalabs.com/docs/fields#job_title_levels
*/
job_title_levels?: string
job_company_name?: string
job_company_location_country?: string
}
}
export type PersonSearchOptionsQueryKeys = keyof PersonSearchOptions['query']
// Person response
export interface SearchPersonApiResponse {
id: string
full_name: string
first_name: string
middle_initial: null | string
middle_name: null | string
last_initial: string
last_name: string
gender: string
birth_year: null | number
birth_date: null | string
linkedin_url: string
linkedin_username: string
linkedin_id: string
facebook_url: null | string
facebook_username: null | string
facebook_id: null | string
twitter_url: string
twitter_username: string
github_url: null | string
github_username: null | string
work_email: string
personal_emails: string[]
recommended_personal_email: null | string
mobile_phone: null | string
industry: null | string
job_title: string
job_title_role: null | string
job_title_sub_role: null | string
job_title_levels: string[]
job_onet_code: string
job_onet_major_group: string
job_onet_minor_group: string
job_onet_broad_occupation: string
job_onet_specific_occupation: string
job_onet_specific_occupation_detail: string
job_company_id: string
job_company_name: string
job_company_website: string
job_company_size: string
job_company_founded: number
job_company_industry: string
job_company_linkedin_url: string
job_company_linkedin_id: string
job_company_facebook_url: string
job_company_twitter_url: string
job_company_type: string
job_company_ticker: null | string
job_company_location_name: string
job_company_location_locality: string
job_company_location_metro: string
job_company_location_region: string
job_company_location_geo: string
job_company_location_street_address: string
job_company_location_address_line_2: string
job_company_location_postal_code: string
job_company_location_country: string
job_company_location_continent: string
job_last_updated: string
job_start_date: string
job_summary: null | string
location_name: null | string
location_locality: null | string
location_metro: null | string
location_region: null | string
location_country: null | string
location_continent: null | string
location_street_address: null | string
location_address_line_2: null | string
location_postal_code: null | string
location_geo: null | string
location_last_updated: null | string
linkedin_connections: number
facebook_friends: null | string
inferred_salary: string
inferred_years_experience: number
summary: null | string
phone_numbers: string[]
phones: string[]
emails: Email[]
interests: string[]
skills: string[]
location_names: string[]
regions: string[]
countries: string[]
street_addresses: string[]
experience: Experience[]
education: Education[]
profiles: Profile[]
name_aliases: string[]
possible_emails: PossibleEmail[]
possible_profiles: PossibleProfile[]
possible_phones: PossiblePhone[]
possible_street_addresses: string[]
possible_location_names: string[]
possible_birth_dates: string[]
job_history: JobHistory[]
certifications: string[]
languages: string[]
first_seen: string
num_sources: number
num_records: number
version_status: VersionStatus
}
export interface Email {
address: string
type: null | string
first_seen: string
last_seen: string
num_sources: number
}
export interface Experience {
company: Company
start_date: null | string
end_date: null | string
title: Title
location_names: string[]
is_primary: boolean
summary: null | string
num_sources: number
first_seen: string
last_seen: string
}
export interface Company {
name: string
size: string
id: string
founded: number
industry: string
location: Location
linkedin_url: string
linkedin_id: string
facebook_url: null | string
twitter_url: string
website: string
ticker: null | string
type: string
raw: string[]
fuzzy_match: boolean
}
export interface Title {
name: string
raw: string[]
role: null | string
sub_role: null | string
levels: string[]
}
export interface Education {
school: School
degrees: string[]
start_date: string
end_date: string
majors: string[]
minors: string[]
gpa: null | string
raw: string[]
summary: null | string
}
export interface School {
name: string
type: string
id: string
location: Location
linkedin_url: string
facebook_url: string
twitter_url: string
linkedin_id: string
website: string
domain: string
raw: string[]
}
export interface Profile {
network: string
id: null | string
url: string
username: string
num_sources: number
first_seen: string
last_seen: string
}
export interface PossibleEmail {
address: string
type: null | string
first_seen: string
last_seen: string
num_sources: number
}
export interface PossibleProfile {
network: string
id: null | string
url: string
username: null | string
num_sources: number
first_seen: string
last_seen: string
}
export interface PossiblePhone {
number: string
first_seen: string
last_seen: string
num_sources: number
}
export interface VersionStatus {
status: string
contains: string[]
previous_version: string
current_version: string
}
export interface JobHistory {
company_id: string
company_name: string
title: string
first_seen: string
last_seen: string
num_sources: number
}
}
export class PeopleDataLabsClient {
readonly ky: KyInstance
readonly apiKey: string
readonly apiBaseUrl: string
constructor({
apiKey = getEnv('PEOPLE_DATA_LABS_API_KEY'),
apiBaseUrl = peopledatalabs.BASE_URL,
timeoutMs = 30_000,
throttle = true,
ky = defaultKy
}: {
apiKey?: string
apiBaseUrl?: string
timeoutMs?: number
throttle?: boolean
ky?: KyInstance
} = {}) {
assert(apiKey, 'PeopleDataLabsClient missing required "apiKey"')
this.apiKey = apiKey
this.apiBaseUrl = apiBaseUrl
const throttledKy = throttle
? throttleKy(ky, peopleDataLabsAPIThrottle)
: ky
this.ky = throttledKy.extend({
prefixUrl: apiBaseUrl,
timeout: timeoutMs,
headers: {
'X-Api-Key': `${this.apiKey}`
}
})
}
async companyLookup(options: peopledatalabs.CompanySearchOptions) {
const terms = options.query
const termsQuery = []
for (const term of Object.keys(
terms
) as peopledatalabs.CompanySearchOptionsQueryKeys[]) {
termsQuery.push({ term: { [term]: terms[term] } })
}
return this.ky
.get('company/search', {
searchParams: {
size: options.limit || 1,
query: JSON.stringify({
bool: {
must: termsQuery
}
})
}
})
.json<peopledatalabs.CompanySearchResponse>()
}
async companyProfile(options: peopledatalabs.CompanyLookupOptions) {
return this.ky
.get('company/enrich', {
// @ts-expect-error location is a string[] and searchparams shows a TS error heres
searchParams: { ...options }
})
.json<peopledatalabs.CompanyLookupResponse>()
}
async personSearch(options: peopledatalabs.PersonSearchOptions) {
const terms = options.query
const termsQuery = []
for (const term of Object.keys(
terms
) as peopledatalabs.PersonSearchOptionsQueryKeys[]) {
termsQuery.push({ term: { [term]: terms[term] } })
}
return this.ky
.get('person/search', {
searchParams: {
size: options.limit || 10,
query: JSON.stringify({
bool: {
must: termsQuery
}
})
}
})
.json<peopledatalabs.SearchPersonApiResponse>()
}
}

Wyświetl plik

@ -0,0 +1,304 @@
import defaultKy, { type KyInstance } from 'ky'
import pThrottle from 'p-throttle'
import { assert, getEnv, throttleKy } from '../utils.js'
const perigonAPIThrottle = pThrottle({
limit: 20,
interval: 60 * 1000,
strict: true
})
export namespace perigon {
export type ArticleLabel =
| 'Opinion'
| 'Non-news'
| 'Paid News'
| 'Fact Check'
| 'Pop Culture'
| 'Roundup'
| 'Press Release'
export type Categories =
| 'Politics'
| 'Tech'
| 'Sports'
| 'Business'
| 'Finance'
| 'Entertainment'
| 'Health'
| 'Weather'
| 'Lifestyle'
| 'Auto'
| 'Science'
| 'Travel'
| 'Environment'
| 'World'
| 'General'
| 'none'
export type ArticlesOptions = {
q: string
title?: string
desc?: string
content?: string
url?: string
from?: string | Date
to?: string | Date
addDateFrom?: string | Date
addDateTo?: string | Date
refreshDateFrom?: string | Date
refreshDateTo?: string | Date
articleId?: string
clusterId?: string
medium?: 'article' | 'video'
source?: string
sourceGroup?:
| 'top10'
| 'top100'
| 'top500English'
| 'top25crypto'
| 'top25finance'
| 'top50tech'
| 'top100sports'
| 'top100leftUS'
| 'top100rightUS'
| 'top100centerUS'
excludeSource?: string
paywall?: boolean
country?: string
language?: string
label?: ArticleLabel
excludeLabel?: ArticleLabel | 'Low Content'
byline?: string
topic?: string
category?: Categories
journalistId?: string
state?: string
city?: string
area?: string
location?: string
sortBy?: 'date' | 'relevance' | 'addDate' | 'pubDate' | 'refreshDate'
relevance?: number
size?: number
showReprints?: boolean
showNumResults?: boolean
type?: 'all' | 'local' | 'world'
linkTo?: string
reprintGroupId?: string
personWikidataId?: string[]
personName?: string[]
companyId?: string[]
companyName?: string
companyDomain?: string[]
companySymbol?: string[]
maxDistance?: number
lat?: number
lon?: number
searchTranslation?: boolean
}
export type ArticlesResponse = {
status: number
numResults: number
articles: {
url: string
authorsByline: string
articleId: string
clusterId: string
source: {
domain: string
}
imageUrl: string
country: string
language: string
pubDate: string
addDate: string
refreshDate: string
score: number
title: string
description: string
content: string
medium: string
links: string[]
labels: string[]
matchedAuthors: string[]
claim: string
verdict: string
keywords: {
name: string
weight: number
}[]
topics: {
name: string
}[]
categories: {
name: string
}[]
entities: {
data: string
type: string
mentions: number
}[]
sentiment: {
positive: number
negative: number
neutral: number
}
summary: string
translation: string
locations: string[]
reprint: boolean
reprintGroupId: string
places: null
}[]
}
export type StoriesOptions = {
clusterId?: string
topic?: string
category?: Categories
name?: string
nameExists?: boolean
from?: string
to?: string
initializedFrom?: string
initializedTo?: string
updatedFrom?: string
updatedTo?: string
minClusterSize?: number
maxClusterSize?: number
state?: string
city?: string
area?: string
page?: number
size?: number
sortBy?: 'count' | 'createdAt' | 'updatedAt'
showNumResults?: boolean
}
export type StoriesResponse = {
status: number
numResults: number
results: Array<{
createdAt: string
updatedAt: string
initializedAt: string
id: string
name: string
summary: string
summaryReferences: Array<any>
keyPoints: Array<{
point: string
references: Array<string>
}>
sentiment: {
positive: number
negative: number
neutral: number
}
uniqueCount: number
reprintCount: number
totalCount: number
countries: Array<{
name: string
count: number
}>
topCountries: Array<string>
topics: Array<{
name: string
count: number
}>
topTopics: Array<{ name: string }>
categories: Array<{
name: string
count: number
}>
topCategories: Array<{ name: string }>
people: Array<{ wikidataId: string; name: string; count: number }>
topPeople: Array<{ wikidataId: string; name: string }>
companies: Array<{
id: string
name: string
domains: Array<string>
symbols: Array<string>
count: number
}>
topCompanies: Array<{
id: string
name: string
domains: Array<string>
symbols: Array<string>
}>
locations: Array<{
state: string
city?: string
area?: string
county?: string
count: number
}>
topLocations: Array<{
state: string
city?: string
area?: string
county?: string
}>
}>
}
}
export class PerigonClient {
readonly ky: KyInstance
readonly apiKey: string
readonly _maxPageSize = 10
constructor({
apiKey = getEnv('PERIGON_API_KEY'),
timeoutMs = 30_000,
throttle = true,
ky = defaultKy
}: {
apiKey?: string
apiBaseUrl?: string
throttle?: boolean
timeoutMs?: number
ky?: KyInstance
} = {}) {
assert(apiKey, 'Error perigon client missing required "apiKey"')
this.apiKey = apiKey
const throttledKy = throttle ? throttleKy(ky, perigonAPIThrottle) : ky
this.ky = throttledKy.extend({
prefixUrl: 'https://api.goperigon.com/v1/',
timeout: timeoutMs
})
}
async articles(options: perigon.ArticlesOptions) {
return this.ky
.get('all', {
// @ts-expect-error there are multiple query params that array of strings
// and KY SearchParamsOption shows a TS error for those types
searchParams: {
apiKey: this.apiKey,
...options,
size: Math.min(this._maxPageSize, options.size || this._maxPageSize)
}
})
.json<perigon.ArticlesResponse>()
}
async stories(options: perigon.StoriesOptions) {
return this.ky
.get('stories/all', {
searchParams: {
apiKey: this.apiKey,
...options,
size: Math.min(this._maxPageSize, options.size || this._maxPageSize)
}
})
.json<perigon.StoriesResponse>()
}
}

Wyświetl plik

@ -0,0 +1,478 @@
import defaultKy, { type KyInstance } from 'ky'
import pThrottle from 'p-throttle'
import type { DeepNullable } from '../types.js'
import { assert, getEnv, throttleKy } from '../utils.js'
const predictionLeadsAPIThrottle = pThrottle({
limit: 20,
interval: 60 * 1000,
strict: true
})
export namespace predictleads {
export type Meta = DeepNullable<{
count: number
message?: string | null
message_type?: string
}>
export type GenericSuccessResponse = {
success: {
type: string
message: string
}
}
export type FollowedCompaniesResponse = {
data: DeepNullable<
Array<{
domain: string
custom_company_identifier: string | null
}>
>
meta: Meta
}
export type Relationship = Record<
string,
{
data: {
id: string
type: string
}
}
>
export type AdditionalData = {
relationships: {
companies: [string, string]
}
date: string
location: string
location_data: {
region?: string
continent?: string
country?: string
state?: string
zip_code?: string
city?: string
fuzzy_match?: boolean
}
contact?: string
job_title?: string
product?: string
product_tags?: string[]
amount?: number
recognition?: string
assets?: string
asset_tags?: string[]
headcount?: number
award?: string
financing_type?: string
financing_type_tags?: string[]
funding_round?: string
division?: string
conference?: string
vulnerability?: string
planning?: boolean
article_title?: string
article_sentence?: string
article_body?: string
article_source?: string
article_published_at?: string
article_image_url?: string
}
export type Event = {
id: string
type: string
attributes: {
categories: string[]
title: string
url: string
found_at: string
additional_data: AdditionalData
domain: string
location: string
location_data: {
state: string
country: string
}
company_name: string
friendly_company_name: string
ticker: null
meta_title: string
meta_description: string
published_at: string
post_type: string
post_url: string
company_domain: string
fuzzy_match: boolean
}
relationships: Relationship
}
export type Response = DeepNullable<{
data: Event[]
included: Relationship
meta: Meta
}>
export type JobOpeningData = {
id: string
type: string
attributes: {
title: string
url: string
description: string
salary: string
salary_data: {
salary_low: number
salary_high: number
salary_currency: string
salary_low_usd: number
salary_high_usd: number
salary_time_unit: string
}
job_opening_closed: boolean
location: string
contract_types: string[]
first_seen_at: string
last_seen_at: string
last_processed_at: string
categories: string[]
onet_code: string
additional_data: {
job_title_seniority: string
tags: string[]
location_data: {
country: string
city: string
fuzzy_match: boolean
}
}
}
relationships: {
company: {
data: {
id: string
type: string
}
}
}
}
export type CompanyData = {
id: string
type: string
attributes: {
domain: string
company_name: string
ticker: string | null
}
}
export type JobOpeningResponse = DeepNullable<{
data: JobOpeningData[]
included: CompanyData[]
meta: {
count: number
}
}>
export type JobOpeningByIdResponse = Omit<JobOpeningResponse, 'meta'>
}
export class PredictLeadsClient {
readonly ky: KyInstance
readonly apiKey: string
readonly apiToken: string
readonly _maxPageSize = 100
constructor({
apiKey = getEnv('PREDICT_LEADS_API_KEY'),
apiToken = getEnv('PREDICT_LEADS_API_TOKEN'),
timeoutMs = 30_000,
throttle = true,
ky = defaultKy
}: {
apiKey?: string
apiToken?: string
apiBaseUrl?: string
timeoutMs?: number
throttle?: boolean
ky?: KyInstance
} = {}) {
assert(apiKey, 'PredictLeadsClient missing required "apiKey"')
assert(apiToken, 'PredictLeadsClient missing required "apiToken"')
this.apiKey = apiKey
this.apiToken = apiToken
const throttledKy = throttle
? throttleKy(ky, predictionLeadsAPIThrottle)
: ky
this.ky = throttledKy.extend({
timeout: timeoutMs,
headers: {
'X-Api-Key': apiKey,
'X-Api-Token': apiToken
}
})
}
async followCompany(domain: string, customCompanyIdentifier?: string) {
return this.ky
.post(
`https://predictleads.com/api/v2/companies/${domain}/follow`,
customCompanyIdentifier
? {
json: { customCompanyIdentifier }
}
: undefined
)
.json<predictleads.GenericSuccessResponse>()
}
async getFollowingCompanies(limit: number = this._maxPageSize) {
return this.ky
.get(`https://predictleads.com/api/v2/followings`, {
searchParams: { limit }
})
.json<predictleads.FollowedCompaniesResponse>()
}
async unfollowCompany(domain: string, customCompanyIdentifier?: string) {
return this.ky
.post(
`https://predictleads.com/api/v2/companies/${domain}/unfollow`,
customCompanyIdentifier
? {
json: { customCompanyIdentifier }
}
: undefined
)
.json<predictleads.GenericSuccessResponse>()
}
async events(
domain: string,
params: {
categories?: string
found_at_from?: string
found_at_until?: string
page?: number
limit?: string
with_news_article_bodies?: boolean
} = {}
) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}/events`, {
searchParams: { page: 1, ...params }
})
.json<predictleads.Response>()
}
async eventById(id: string) {
return this.ky
.get(`https://predictleads.com/api/v2/events/${id}`)
.json<predictleads.Response>()
}
async financingEvents(domain: string) {
return this.ky
.get(
`https://predictleads.com/api/v2/companies/${domain}/financing_events`
)
.json<predictleads.Response>()
}
async jobOpenings(
domain: string,
params: {
categories?: string
with_job_descriptions?: boolean
active_only?: boolean
not_closed?: boolean
limit?: string
} = {}
) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}/job_openings`, {
searchParams: params
})
.json<predictleads.JobOpeningResponse>()
}
async jobOpeningById(id: string) {
return this.ky
.get(`https://predictleads.com/api/v2/job_openings/${id}`)
.json<predictleads.JobOpeningByIdResponse>()
}
async technologies(
domain: string,
params: {
categories: string
limit?: string
}
) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}/technologies`, {
searchParams: params
})
.json<predictleads.Response>()
}
async connections(
domain: string,
params?: {
categories: string
limit?: string
}
) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}/connections`, {
searchParams: params
})
.json<predictleads.Response>()
}
async websiteEvolution(
domain: string,
{ limit = 100 }: { limit?: number } = {}
) {
return this.ky
.get(
`https://predictleads.com/api/v2/companies/${domain}/website_evolution`,
{
searchParams: { limit }
}
)
.json<predictleads.Response>()
}
async githubRepositories(
domain: string,
{ limit = 100 }: { limit?: number } = {}
) {
return this.ky
.get(
`https://predictleads.com/api/v2/companies/${domain}/github_repositories`,
{
searchParams: { limit }
}
)
.json<predictleads.Response>()
}
async products(
domain: string,
params?: {
sources: string
limit?: number
}
) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}/products`, {
searchParams: params
})
.json<predictleads.Response>()
}
async company(domain: string) {
return this.ky
.get(`https://predictleads.com/api/v2/companies/${domain}`)
.json<predictleads.Response>()
}
async discoverStartupJobs(params?: {
post_datetime_from?: string
post_datetime_until?: string
min_score?: string
limit?: string
}) {
return this.ky
.get(
`https://predictleads.com/api/v2/discover/startup_platform/jobs_hn`,
{
searchParams: params
}
)
.json<predictleads.Response>()
}
async discoverStartupShow(params?: {
post_datetime_from?: string
post_datetime_until?: string
min_score?: string
limit?: string
}) {
return this.ky
.get(
`https://predictleads.com/api/v2/discover/startup_platform/show_hn`,
{
searchParams: params
}
)
.json<predictleads.Response>()
}
/*
TODO this returns 500 error, even using the curl example from docs.
Also for this reason I couldn't test the other segments endpoints
curl -X POST "https://predictleads.com/api/v2/segments"
-d '{"technologies":"Salesforce", "job_categories":"sales"}'
-H "Content-Type: application/json" \
-H 'X-Api-Key: <key>' \
-H 'X-Api-Token: <token>'
*/
async createSegment(params: {
webhook_url?: string
locations?: string
headquarters_locations?: string
job_categories?: string
technologies?: string
found_at_from?: string
found_at_until?: string
active?: string
limit?: string
}) {
return this.ky
.post(`https://predictleads.com/api/v2/segments`, {
json: params
})
.json<any>()
}
async updateSegment(params: {
id: string
webhook_url: string
active: string
}) {
return this.ky
.put(
`https://predictleads.com/api/v2/discover/startup_platform/show_hn`,
{
json: params
}
)
.json<any>()
}
async showSegment(id: string) {
return this.ky
.get(`https://predictleads.com/api/v2/segments/${id}`)
.json<any>()
}
async showAllSegment(limit = 100) {
return this.ky
.get(`https://predictleads.com/api/v2/segments`, {
searchParams: { limit }
})
.json<any>()
}
}