Skip to content

Commit 4e41162

Browse files
committed
fixed files cols
1 parent 7251483 commit 4e41162

10 files changed

Lines changed: 296 additions & 118 deletions

File tree

apps/docs/components/ui/icon-mapping.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
263263
extend_v2: ExtendIcon,
264264
fathom: FathomIcon,
265265
file: DocumentIcon,
266-
file_v3: DocumentIcon,
267266
file_v4: DocumentIcon,
268267
findymail: FindymailIcon,
269268
firecrawl: FirecrawlIcon,

apps/docs/content/docs/en/tools/prospeo.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ Free endpoint to retrieve valid location or job title values for use in Search f
229229

230230
| Parameter | Type | Description |
231231
| --------- | ---- | ----------- |
232-
| `location_suggestions` | array | Location suggestions when using location_search \(null when searching job titles\) |
232+
| `location_suggestions` | array | Location suggestions when using location_search \(empty when searching job titles\) |
233233
|`name` | string | Formatted location name to use in filters |
234234
|`type` | string | Location type \(COUNTRY, STATE, CITY, or ZONE\) |
235-
| `job_title_suggestions` | array | Up to 25 job title suggestions ordered by popularity when using job_title_search \(null when searching locations\) |
235+
| `job_title_suggestions` | array | Up to 25 job title suggestions ordered by popularity when using job_title_search \(empty when searching locations\) |
236236

237237

apps/sim/app/workspace/[workspaceId]/files/files.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ const ACCEPT_ATTR = SUPPORTED_EXTENSIONS.map((ext) => `.${ext}`).join(',')
114114

115115
const COLUMNS: ResourceColumn[] = [
116116
{ id: 'name', header: 'Name', widthMultiplier: 1.15 },
117-
{ id: 'size', header: 'Size', widthMultiplier: 0.7 },
118-
{ id: 'type', header: 'Type', widthMultiplier: 0.85 },
117+
{ id: 'size', header: 'Size', widthMultiplier: 0.85 },
118+
{ id: 'type', header: 'Type', widthMultiplier: 1.0 },
119119
{ id: 'created', header: 'Created' },
120120
{ id: 'owner', header: 'Owner' },
121121
{ id: 'updated', header: 'Last Updated' },

apps/sim/blocks/blocks/findymail.ts

Lines changed: 139 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,15 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
3737
},
3838
// Find Email From Name
3939
{
40-
id: 'name',
40+
id: 'fn_name',
4141
title: 'Full Name',
4242
type: 'short-input',
4343
required: true,
4444
placeholder: 'John Doe',
4545
condition: { field: 'operation', value: 'findymail_find_email_from_name' },
4646
},
4747
{
48-
id: 'domain',
48+
id: 'fn_domain',
4949
title: 'Company Domain or Name',
5050
type: 'short-input',
5151
required: true,
@@ -54,7 +54,7 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
5454
},
5555
// Find Email From LinkedIn
5656
{
57-
id: 'linkedin_url',
57+
id: 'fefl_linkedin_url',
5858
title: 'LinkedIn URL',
5959
type: 'short-input',
6060
required: true,
@@ -63,7 +63,7 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
6363
},
6464
// Find Emails By Domain
6565
{
66-
id: 'domain',
66+
id: 'fed_domain',
6767
title: 'Domain',
6868
type: 'short-input',
6969
required: true,
@@ -77,10 +77,15 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
7777
required: true,
7878
placeholder: '["CEO", "Founder"]',
7979
condition: { field: 'operation', value: 'findymail_find_emails_by_domain' },
80+
wandConfig: {
81+
prompt:
82+
'Generate a JSON array of job roles/titles to target at the company (max 3). Return ONLY the JSON array - no explanations, no extra text.',
83+
placeholder: 'e.g. CEO, Founder, CTO',
84+
},
8085
},
8186
// Verify Email
8287
{
83-
id: 'email',
88+
id: 've_email',
8489
title: 'Email Address',
8590
type: 'short-input',
8691
required: true,
@@ -89,7 +94,7 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
8994
},
9095
// Reverse Email Lookup
9196
{
92-
id: 'email',
97+
id: 'rel_email',
9398
title: 'Email Address',
9499
type: 'short-input',
95100
required: true,
@@ -99,27 +104,32 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
99104
{
100105
id: 'with_profile',
101106
title: 'Return Full Profile',
102-
type: 'switch',
107+
type: 'dropdown',
108+
options: [
109+
{ label: 'No', id: 'false' },
110+
{ label: 'Yes', id: 'true' },
111+
],
112+
value: () => 'false',
103113
condition: { field: 'operation', value: 'findymail_reverse_email_lookup' },
104114
mode: 'advanced',
105115
},
106116
// Get Company Info — provide at least one of LinkedIn URL, domain, or name
107117
{
108-
id: 'linkedin_url',
118+
id: 'gc_linkedin_url',
109119
title: 'Company LinkedIn URL',
110120
type: 'short-input',
111121
placeholder: 'LinkedIn URL (at least one of URL/domain/name required)',
112122
condition: { field: 'operation', value: 'findymail_get_company' },
113123
},
114124
{
115-
id: 'domain',
125+
id: 'gc_domain',
116126
title: 'Company Domain',
117127
type: 'short-input',
118128
placeholder: 'stripe.com (at least one of URL/domain/name required)',
119129
condition: { field: 'operation', value: 'findymail_get_company' },
120130
},
121131
{
122-
id: 'name',
132+
id: 'gc_name',
123133
title: 'Company Name',
124134
type: 'short-input',
125135
placeholder: 'Stripe (at least one of URL/domain/name required)',
@@ -141,6 +151,11 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
141151
required: true,
142152
placeholder: '["Software Engineer", "CEO"]',
143153
condition: { field: 'operation', value: 'findymail_find_employees' },
154+
wandConfig: {
155+
prompt:
156+
'Generate a JSON array of job titles to search for at the company (max 10). Return ONLY the JSON array - no explanations, no extra text.',
157+
placeholder: 'e.g. Software Engineer, CEO, Product Manager',
158+
},
144159
},
145160
{
146161
id: 'count',
@@ -152,7 +167,7 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
152167
},
153168
// Find Phone
154169
{
155-
id: 'linkedin_url',
170+
id: 'fp_linkedin_url',
156171
title: 'LinkedIn URL',
157172
type: 'short-input',
158173
required: true,
@@ -167,10 +182,15 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
167182
required: true,
168183
placeholder: 'React',
169184
condition: { field: 'operation', value: 'findymail_search_technologies' },
185+
wandConfig: {
186+
prompt:
187+
'Generate a technology search term to look up in the Findymail technology catalog. Return ONLY the search term - no explanations, no extra text.',
188+
placeholder: 'e.g. React, Stripe, Salesforce',
189+
},
170190
},
171191
// Lookup Technologies By Domain
172192
{
173-
id: 'domain',
193+
id: 'lt_domain',
174194
title: 'Company Domain',
175195
type: 'short-input',
176196
required: true,
@@ -184,6 +204,11 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
184204
placeholder: '["React", "TypeScript"]',
185205
condition: { field: 'operation', value: 'findymail_lookup_technologies' },
186206
mode: 'advanced',
207+
wandConfig: {
208+
prompt:
209+
'Generate a JSON array of technology names to filter by (case-insensitive). Return ONLY the JSON array - no explanations, no extra text.',
210+
placeholder: 'e.g. React, TypeScript, Node.js',
211+
},
187212
},
188213
// API Key
189214
{
@@ -230,35 +255,58 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
230255
},
231256
params: (params) => {
232257
const { operation: _operation, ...rest } = params
258+
259+
// Map unique subBlock IDs back to tool param names
260+
const idToParam: Record<string, string> = {
261+
fn_name: 'name',
262+
fn_domain: 'domain',
263+
fefl_linkedin_url: 'linkedin_url',
264+
fed_domain: 'domain',
265+
ve_email: 'email',
266+
rel_email: 'email',
267+
gc_linkedin_url: 'linkedin_url',
268+
gc_domain: 'domain',
269+
gc_name: 'name',
270+
fp_linkedin_url: 'linkedin_url',
271+
lt_domain: 'domain',
272+
}
273+
233274
const result: Record<string, unknown> = {}
234275
for (const [key, value] of Object.entries(rest)) {
235276
if (value === undefined || value === null || value === '') continue
236-
if (key === 'count') {
277+
const mappedKey = idToParam[key] ?? key
278+
if (mappedKey === 'count') {
237279
const n = Number(value)
238-
if (!Number.isNaN(n)) result[key] = n
239-
} else if (key === 'roles' || key === 'job_titles' || key === 'technologies') {
280+
if (!Number.isNaN(n)) result[mappedKey] = n
281+
} else if (mappedKey === 'with_profile') {
282+
result[mappedKey] = value === true || value === 'true'
283+
} else if (
284+
mappedKey === 'roles' ||
285+
mappedKey === 'job_titles' ||
286+
mappedKey === 'technologies'
287+
) {
240288
if (Array.isArray(value)) {
241-
result[key] = value
289+
result[mappedKey] = value
242290
} else if (typeof value === 'string') {
243291
const trimmed = value.trim()
244292
if (trimmed.startsWith('[')) {
245293
try {
246294
const parsed = JSON.parse(trimmed)
247295
if (Array.isArray(parsed)) {
248-
result[key] = parsed
296+
result[mappedKey] = parsed
249297
continue
250298
}
251299
} catch {
252300
// fall through to comma-split
253301
}
254302
}
255-
result[key] = trimmed
303+
result[mappedKey] = trimmed
256304
.split(',')
257305
.map((s) => s.trim())
258306
.filter(Boolean)
259307
}
260308
} else {
261-
result[key] = value
309+
result[mappedKey] = value
262310
}
263311
}
264312
return result
@@ -268,78 +316,116 @@ export const FindymailBlock: BlockConfig<FindymailResponse> = {
268316
inputs: {
269317
operation: { type: 'string', description: 'Operation to perform' },
270318
apiKey: { type: 'string', description: 'Findymail API key' },
271-
email: { type: 'string', description: 'Email address' },
272-
name: { type: 'string', description: 'Full name or company name' },
273-
domain: { type: 'string', description: 'Company domain' },
274-
linkedin_url: { type: 'string', description: 'LinkedIn profile or company URL' },
319+
fn_name: { type: 'string', description: 'Full name (find email from name)' },
320+
fn_domain: { type: 'string', description: 'Company domain or name (find email from name)' },
321+
fefl_linkedin_url: { type: 'string', description: 'LinkedIn URL (find email from LinkedIn)' },
322+
fed_domain: { type: 'string', description: 'Company domain (find emails by domain)' },
275323
roles: { type: 'array', description: 'Target roles (max 3)' },
324+
ve_email: { type: 'string', description: 'Email address to verify' },
325+
rel_email: { type: 'string', description: 'Email address for reverse lookup' },
276326
with_profile: { type: 'boolean', description: 'Return full profile data on reverse lookup' },
327+
gc_linkedin_url: { type: 'string', description: 'Company LinkedIn URL (get company info)' },
328+
gc_domain: { type: 'string', description: 'Company domain (get company info)' },
329+
gc_name: { type: 'string', description: 'Company name (get company info)' },
277330
website: { type: 'string', description: 'Company website for employee search' },
278331
job_titles: { type: 'array', description: 'Target job titles (max 10)' },
279332
count: { type: 'number', description: 'Number of contacts to return (max 5)' },
333+
fp_linkedin_url: { type: 'string', description: 'LinkedIn URL (find phone)' },
280334
q: { type: 'string', description: 'Technology search query' },
335+
lt_domain: { type: 'string', description: 'Company domain (lookup technologies)' },
281336
technologies: { type: 'array', description: 'Technology names to filter by' },
282337
},
283338
outputs: {
284339
// Verify Email
285-
verified: { type: 'boolean', description: 'Whether the email is deliverable' },
286-
provider: { type: 'string', description: 'Email service provider' },
287-
// Find / Reverse / Company
340+
verified: { type: 'boolean', description: 'Whether the email is deliverable', optional: true },
341+
provider: { type: 'string', description: 'Email service provider', optional: true },
342+
// Find Email / LinkedIn
288343
contact: {
289344
type: 'json',
290345
description: 'Contact found (name, email, domain)',
346+
optional: true,
291347
},
292348
contacts: {
293349
type: 'array',
294350
description: 'Contacts found at the domain (name, email, domain)',
351+
optional: true,
352+
},
353+
// Reverse Email Lookup
354+
linkedin_url: { type: 'string', description: 'LinkedIn URL', optional: true },
355+
fullName: { type: 'string', description: 'Full name from LinkedIn profile', optional: true },
356+
username: { type: 'string', description: 'LinkedIn username', optional: true },
357+
headline: { type: 'string', description: 'Profile headline', optional: true },
358+
jobTitle: { type: 'string', description: 'Job title', optional: true },
359+
summary: { type: 'string', description: 'Profile summary', optional: true },
360+
city: { type: 'string', description: 'City', optional: true },
361+
region: { type: 'string', description: 'Region/state', optional: true },
362+
country: { type: 'string', description: 'Country', optional: true },
363+
companyLinkedinUrl: {
364+
type: 'string',
365+
description: 'Current company LinkedIn URL',
366+
optional: true,
367+
},
368+
companyName: { type: 'string', description: 'Current company name', optional: true },
369+
companyWebsite: { type: 'string', description: 'Current company website', optional: true },
370+
isPremium: {
371+
type: 'boolean',
372+
description: 'Whether the profile has LinkedIn Premium',
373+
optional: true,
295374
},
296-
linkedin_url: { type: 'string', description: 'LinkedIn URL' },
297-
fullName: { type: 'string', description: 'Full name from LinkedIn profile' },
298-
username: { type: 'string', description: 'LinkedIn username' },
299-
headline: { type: 'string', description: 'Profile headline' },
300-
jobTitle: { type: 'string', description: 'Job title' },
301-
summary: { type: 'string', description: 'Profile summary' },
302-
city: { type: 'string', description: 'City' },
303-
region: { type: 'string', description: 'Region/state' },
304-
country: { type: 'string', description: 'Country' },
305-
companyLinkedinUrl: { type: 'string', description: 'Current company LinkedIn URL' },
306-
companyName: { type: 'string', description: 'Current company name' },
307-
companyWebsite: { type: 'string', description: 'Current company website' },
308-
isPremium: { type: 'boolean', description: 'Whether the profile has LinkedIn Premium' },
309-
isOpenProfile: { type: 'boolean', description: 'Whether the profile is open' },
310-
skills: { type: 'array', description: 'Profile skills' },
311-
jobs: { type: 'array', description: 'Job history entries' },
375+
isOpenProfile: { type: 'boolean', description: 'Whether the profile is open', optional: true },
376+
skills: { type: 'array', description: 'Profile skills', optional: true },
377+
jobs: { type: 'array', description: 'Job history entries', optional: true },
312378
educations: {
313379
type: 'array',
314380
description: 'Education history (school, degree, fieldOfStudy, startDate, endDate)',
381+
optional: true,
315382
},
316383
certificates: {
317384
type: 'array',
318385
description: 'Certifications (name, issuingOrganization, issueDate, expirationDate)',
386+
optional: true,
319387
},
320388
// Get Company
321-
name: { type: 'string', description: 'Company name (get-company)' },
322-
domain: { type: 'string', description: 'Company domain' },
323-
company_size: { type: 'string', description: 'Headcount range (e.g., 1001-5000)' },
324-
industry: { type: 'string', description: 'Industry classification' },
325-
description: { type: 'string', description: 'Company description' },
389+
name: { type: 'string', description: 'Company name', optional: true },
390+
domain: { type: 'string', description: 'Company domain', optional: true },
391+
company_size: {
392+
type: 'string',
393+
description: 'Headcount range (e.g., 1001-5000)',
394+
optional: true,
395+
},
396+
industry: { type: 'string', description: 'Industry classification', optional: true },
397+
description: { type: 'string', description: 'Company description', optional: true },
326398
// Find Employees
327399
employees: {
328400
type: 'array',
329401
description: 'Employees found (name, linkedinUrl, companyWebsite, companyName, jobTitle)',
402+
optional: true,
330403
},
331404
// Find Phone
332-
phone: { type: 'string', description: 'Phone number in E.164 format (US only)' },
333-
line_type: { type: 'string', description: 'Phone line type (Mobile, Landline)' },
405+
phone: {
406+
type: 'string',
407+
description: 'Phone number in E.164 format (US only)',
408+
optional: true,
409+
},
410+
line_type: {
411+
type: 'string',
412+
description: 'Phone line type (Mobile, Landline)',
413+
optional: true,
414+
},
334415
// Technologies
335416
technologies: {
336417
type: 'array',
337418
description: 'Technologies (name, category, subcategory, last_detected_at)',
419+
optional: true,
338420
},
339421
// Get Credits
340-
credits: { type: 'number', description: 'Remaining finder credits' },
341-
verifier_credits: { type: 'number', description: 'Remaining verifier credits' },
342-
// Reverse / Verify shared
343-
email: { type: 'string', description: 'Email address' },
422+
credits: { type: 'number', description: 'Remaining finder credits', optional: true },
423+
verifier_credits: {
424+
type: 'number',
425+
description: 'Remaining verifier credits',
426+
optional: true,
427+
},
428+
// Verify / Reverse shared
429+
email: { type: 'string', description: 'Email address', optional: true },
344430
},
345431
}

0 commit comments

Comments
 (0)