import { definePlay } from 'deepline';
type Lead = {
lead_id: string;
first_name: string;
last_name: string;
linkedin_url: string;
company_name: string;
company_domain: string;
};
export default definePlay('lead-email-waterfall', async (ctx, input: { csv: string }) => {
const leads = await ctx.csv<Lead>(input.csv);
const withEmail = await ctx
.dataset('lead_email', leads)
.withColumn('email', async (lead, rowCtx) => {
const result = await rowCtx.tools.execute({
id: 'person_email',
tool: 'test_rate_limit',
input: {
key: lead.linkedin_url,
},
description: 'Find a verified work email for this lead.',
});
return result.status === 'SUCCESS'
? `${lead.first_name}.${lead.last_name}@${lead.company_domain}`.toLowerCase()
: null;
})
.run({ key: 'lead_id', description: 'Find one verified work email per lead.' });
const rows = await ctx
.dataset('email_validation', withEmail)
.withColumn('email_status', async (lead, rowCtx) => {
if (!lead.email) return 'missing';
const result = await rowCtx.tools.execute({
id: 'verify_email',
tool: 'test_rate_limit',
input: { key: String(lead.email) },
description: 'Validate the candidate email.',
});
return result.status;
})
.run({ key: 'lead_id', description: 'Validate the emails that were found.' });
return { rows };
});