mirror of
https://github.com/simstudioai/sim.git
synced 2026-09-24 15:45:35 +08:00
feat(prospeo): add Prospeo integration for B2B contact enrichment and search (#4653)
* feat(prospeo): add Prospeo integration for B2B contact enrichment and search Adds 8 operations: enrich person/company, bulk enrich person/company, search person/company, search suggestions, and account information. Uses X-KEY header auth. * refactor(prospeo): extract shared parse helpers into utils.ts
This commit is contained in:
@@ -1455,6 +1455,41 @@ export function ProfoundIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function ProspeoIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
width='1em'
|
||||
height='1em'
|
||||
viewBox='0 0 32 32'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<rect width='32' height='32' rx='6' fill='#FF1A26' />
|
||||
<path
|
||||
d='M6.0742 10.2104C6.01338 10.2464 5.97607 10.3118 5.97607 10.3825V18.7413C5.97607 18.812 6.01338 18.8774 6.0742 18.9134L13.1274 23.0883C13.1902 23.1255 13.2683 23.1255 13.3311 23.0883L20.3843 18.9134C20.4452 18.8774 20.4825 18.812 20.4825 18.7413V10.3825C20.4825 10.3118 20.4452 10.2464 20.3843 10.2104L13.3311 6.03553C13.2683 5.99835 13.1902 5.99835 13.1274 6.03554L6.0742 10.2104ZM19.6736 10.1987C19.8045 10.2762 19.8045 10.4655 19.6736 10.5429L13.3311 14.2975C13.2683 14.3347 13.1902 14.3347 13.1274 14.2975L6.78491 10.5429C6.65408 10.4655 6.65408 10.2762 6.78492 10.1987L13.1274 6.44453C13.1902 6.40735 13.2683 6.40735 13.3311 6.44453L19.6736 10.1987ZM6.32146 11.0283C6.32146 10.8734 6.49002 10.7773 6.62334 10.8562L12.9584 14.606C13.0193 14.642 13.0566 14.7074 13.0566 14.7781V22.2868C13.0566 22.4418 12.888 22.5379 12.7547 22.4589L6.41958 18.7088C6.35877 18.6728 6.32146 18.6073 6.32146 18.5367V11.0283ZM13.7038 22.4589C13.5705 22.5379 13.402 22.4418 13.402 22.2868V14.7781C13.402 14.7074 13.4393 14.642 13.5001 14.606L19.8352 10.8562C19.9685 10.7773 20.1371 10.8734 20.1371 11.0283V18.537C20.1371 18.6077 20.0998 18.6731 20.0389 18.7091L13.7038 22.4589Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M15.5039 16.2368C15.4445 16.2732 15.4082 16.3378 15.4082 16.4075V22.6709C15.4082 22.7405 15.4445 22.8052 15.5039 22.8415L20.6118 25.963C20.6758 26.0021 20.7563 26.0021 20.8204 25.963L25.9282 22.8415C25.9877 22.8052 26.0239 22.7405 26.0239 22.6709V16.4075C26.0239 16.3378 25.9877 16.2732 25.9282 16.2368L20.8204 13.1154C20.7563 13.0762 20.6758 13.0762 20.6118 13.1154L15.5039 16.2368ZM25.3656 16.202C25.4932 16.28 25.4932 16.4653 25.3656 16.5433L20.8204 19.3212C20.7563 19.3603 20.6758 19.3603 20.6118 19.3212L16.0666 16.5433C15.939 16.4653 15.939 16.28 16.0666 16.202L20.6118 13.4244C20.6758 13.3852 20.7563 13.3852 20.8204 13.4244L25.3656 16.202ZM15.661 16.961C15.661 16.8048 15.832 16.7089 15.9652 16.7903L20.494 19.5579C20.5534 19.5942 20.5897 19.6589 20.5897 19.7285V25.2841C20.5897 25.4402 20.4187 25.5362 20.2854 25.4547L15.7567 22.6869C15.6972 22.6506 15.661 22.5859 15.661 22.5162V16.961ZM21.1467 25.4547C21.0135 25.5362 20.8425 25.4403 20.8425 25.2841V19.7285C20.8425 19.6589 20.8787 19.5942 20.9382 19.5579L25.4669 16.7903C25.6002 16.7089 25.7712 16.8048 25.7712 16.961V22.5165C25.7712 22.5862 25.7349 22.6508 25.6755 22.6872L21.1467 25.4547Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M20.0389 18.7091L19.8055 18.3147L20.0389 18.7091ZM19.8352 10.8562L20.0687 11.2506L19.8352 10.8562ZM13.5001 14.606L13.2666 14.2116L13.5001 14.606ZM13.7038 22.4589L13.9373 22.8534L13.7038 22.4589ZM6.41958 18.7088L6.18611 19.1032L6.41958 18.7088ZM12.7547 22.4589L12.5212 22.8533L12.7547 22.4589ZM12.9584 14.606L13.1919 14.2116L12.9584 14.606ZM6.62334 10.8562L6.8568 10.4618L6.62334 10.8562ZM13.1274 6.44453L12.8939 6.05012L13.1274 6.44453ZM13.3311 6.44453L13.5646 6.05012L13.3311 6.44453ZM6.78491 10.5429L6.55143 10.9374L6.78491 10.5429ZM6.78492 10.1987L7.01838 10.5931L6.78492 10.1987ZM13.3311 14.2975L13.0977 13.9031L13.3311 14.2975ZM13.1274 14.2975L12.8939 14.6919L13.1274 14.2975ZM19.6736 10.5429L19.4402 10.1485L19.6736 10.5429ZM13.3311 6.03553L13.0977 6.42995L13.3311 6.03553ZM13.1274 6.03554L12.8939 5.64112L13.1274 6.03554ZM20.3843 10.2104L20.1509 10.6048L20.3843 10.2104ZM20.3843 18.9134L20.6178 19.3079L20.3843 18.9134ZM13.1274 23.0883L13.3609 22.6939L13.1274 23.0883ZM13.3311 23.0883L13.0977 22.6939L13.3311 23.0883ZM6.0742 18.9134L6.30766 18.519L6.0742 18.9134ZM6.0742 10.2104L6.30766 10.6048L6.0742 10.2104ZM5.51774 10.3825V18.7413H6.43441V10.3825H5.51774ZM5.84074 19.3079L12.8939 23.4827L13.3609 22.6939L6.30766 18.519L5.84074 19.3079ZM13.5646 23.4827L20.6178 19.3079L20.1509 18.519L13.0977 22.6939L13.5646 23.4827ZM20.9408 18.7413V10.3825H20.0241V18.7413H20.9408ZM20.6178 9.81599L13.5646 5.64112L13.0977 6.42995L20.1509 10.6048L20.6178 9.81599ZM12.8939 5.64112L5.84074 9.81599L6.30766 10.6048L13.3609 6.42995L12.8939 5.64112ZM19.4402 10.1485L13.0977 13.9031L13.5646 14.6919L19.9071 10.9374L19.4402 10.1485ZM13.3609 13.9031L7.01838 10.1485L6.55143 10.9374L12.8939 14.6919L13.3609 13.9031ZM7.01838 10.5931L13.3609 6.83895L12.8939 6.05012L6.55145 9.80431L7.01838 10.5931ZM13.0977 6.83895L19.4402 10.5931L19.9071 9.80431L13.5646 6.05012L13.0977 6.83895ZM6.38988 11.2506L12.725 15.0004L13.1919 14.2116L6.8568 10.4618L6.38988 11.2506ZM12.5982 14.7781V22.2868H13.5149V14.7781H12.5982ZM12.9882 22.0645L6.65306 18.3144L6.18611 19.1032L12.5212 22.8533L12.9882 22.0645ZM6.7798 18.5367V11.0283H5.86313V18.5367H6.7798ZM13.8603 22.2868V14.7781H12.9436V22.2868H13.8603ZM13.7336 15.0004L20.0687 11.2506L19.6017 10.4618L13.2666 14.2116L13.7336 15.0004ZM19.6787 11.0283V18.537H20.5954V11.0283H19.6787ZM19.8055 18.3147L13.4704 22.0645L13.9373 22.8534L20.2724 19.1035L19.8055 18.3147ZM19.6787 18.537C19.6787 18.4457 19.7269 18.3612 19.8055 18.3147L20.2724 19.1035C20.4726 18.985 20.5954 18.7697 20.5954 18.537H19.6787ZM20.0687 11.2506C19.8965 11.3525 19.6787 11.2284 19.6787 11.0283H20.5954C20.5954 10.5183 20.0406 10.202 19.6017 10.4618L20.0687 11.2506ZM13.8603 14.7781C13.8603 14.8694 13.8121 14.9539 13.7336 15.0004L13.2666 14.2116C13.0664 14.3301 12.9436 14.5455 12.9436 14.7781H13.8603ZM12.9436 22.2868C12.9436 22.7968 13.4984 23.1131 13.9373 22.8534L13.4704 22.0645C13.6426 21.9626 13.8603 22.0867 13.8603 22.2868H12.9436ZM6.65306 18.3144C6.73162 18.3609 6.7798 18.4454 6.7798 18.5367H5.86313C5.86313 18.7693 5.98591 18.9847 6.18611 19.1032L6.65306 18.3144ZM12.5982 22.2868C12.5982 22.0867 12.816 21.9626 12.9882 22.0645L12.5212 22.8533C12.9601 23.1131 13.5149 22.7968 13.5149 22.2868H12.5982ZM12.725 15.0004C12.6464 14.9539 12.5982 14.8694 12.5982 14.7781H13.5149C13.5149 14.5455 13.3921 14.3301 13.1919 14.2116L12.725 15.0004ZM6.8568 10.4618C6.41795 10.202 5.86313 10.5183 5.86313 11.0283H6.7798C6.7798 11.2284 6.56208 11.3525 6.38988 11.2506L6.8568 10.4618ZM13.3609 6.83895C13.2797 6.88699 13.1788 6.88699 13.0977 6.83895L13.5646 6.05012C13.3578 5.92771 13.1007 5.92771 12.8939 6.05012L13.3609 6.83895ZM7.01838 10.1485C7.18737 10.2486 7.18737 10.4931 7.01838 10.5931L6.55145 9.80431C6.1208 10.0592 6.12079 10.6824 6.55143 10.9374L7.01838 10.1485ZM13.0977 13.9031C13.1788 13.855 13.2797 13.855 13.3609 13.9031L12.8939 14.6919C13.1007 14.8143 13.3578 14.8143 13.5646 14.6919L13.0977 13.9031ZM19.9071 10.9374C20.3377 10.6824 20.3377 10.0592 19.9071 9.80431L19.4402 10.5931C19.2712 10.4931 19.2712 10.2486 19.4402 10.1485L19.9071 10.9374ZM13.5646 5.64112C13.3578 5.51871 13.1007 5.51871 12.8939 5.64112L13.3609 6.42995C13.2797 6.47799 13.1788 6.47799 13.0977 6.42995L13.5646 5.64112ZM20.9408 10.3825C20.9408 10.1499 20.818 9.9345 20.6178 9.81599L20.1509 10.6048C20.0723 10.5583 20.0241 10.4738 20.0241 10.3825H20.9408ZM20.6178 19.3079C20.818 19.1894 20.9408 18.974 20.9408 18.7413H20.0241C20.0241 18.65 20.0723 18.5655 20.1509 18.519L20.6178 19.3079ZM12.8939 23.4827C13.1007 23.6051 13.3578 23.6051 13.5646 23.4827L13.0977 22.6939C13.1788 22.6459 13.2797 22.6459 13.3609 22.6939L12.8939 23.4827ZM5.51774 18.7413C5.51774 18.974 5.64053 19.1894 5.84074 19.3079L6.30766 18.519C6.38622 18.5655 6.43441 18.65 6.43441 18.7413H5.51774ZM6.43441 10.3825C6.43441 10.4738 6.38622 10.5583 6.30766 10.6048L5.84074 9.81599C5.64053 9.9345 5.51774 10.1499 5.51774 10.3825H6.43441Z'
|
||||
fill='white'
|
||||
/>
|
||||
<path
|
||||
d='M20.4259 13.2929L15.9427 16.235C15.892 16.2683 15.8591 16.3229 15.8534 16.3833L15.2904 22.2941C15.2831 22.3717 15.3214 22.4465 15.3888 22.4858L20.4349 25.4295C20.4971 25.4658 20.5741 25.4658 20.6364 25.4295L25.6825 22.4858C25.7499 22.4465 25.7882 22.3717 25.7808 22.2941L25.2179 16.3833C25.2122 16.3229 25.1793 16.2683 25.1286 16.235L20.6454 13.2929C20.5788 13.2491 20.4925 13.2491 20.4259 13.2929Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M25.6755 22.6872L25.4365 22.2961L25.6755 22.6872ZM25.4669 16.7903L25.7059 17.1814L25.4669 16.7903ZM20.9382 19.5579L21.1772 19.949L20.9382 19.5579ZM21.1467 25.4547L21.3857 25.8458L21.1467 25.4547ZM15.7567 22.6869L15.9957 22.2958L15.7567 22.6869ZM20.2854 25.4547L20.0464 25.8458L20.2854 25.4547ZM20.494 19.5579L20.255 19.949L20.494 19.5579ZM20.6118 13.4244L20.8508 13.8155L20.6118 13.4244ZM20.8204 13.4244L20.5814 13.8155L20.8204 13.4244ZM16.0666 16.5433L15.8276 16.9344L16.0666 16.5433ZM20.8204 19.3212L21.0594 19.7123L20.8204 19.3212ZM20.6118 19.3212L20.8508 18.9301L20.6118 19.3212ZM25.3656 16.5433L25.6046 16.9344L25.3656 16.5433ZM25.3656 16.202L25.1266 16.5931L25.3656 16.202ZM20.6118 13.1154L20.3728 12.7243L20.6118 13.1154ZM25.9282 16.2368L26.1672 15.8458L25.9282 16.2368ZM25.9282 22.8415L26.1672 23.2326L25.9282 22.8415ZM20.6118 25.963L20.3728 26.3541L20.6118 25.963ZM20.8204 25.963L21.0594 26.3541L20.8204 25.963ZM15.5039 22.8415L15.2649 23.2326L15.5039 22.8415ZM15.5039 16.2368L15.2649 15.8458L15.5039 16.2368ZM14.9499 16.4075V22.6709H15.8665V16.4075H14.9499ZM15.2649 23.2326L20.3728 26.3541L20.8508 25.5719L15.7429 22.4504L15.2649 23.2326ZM21.0594 26.3541L26.1672 23.2326L25.6892 22.4504L20.5814 25.5719L21.0594 26.3541ZM26.4823 22.6709V16.4075H25.5656V22.6709H26.4823ZM26.1672 15.8458L21.0594 12.7243L20.5814 13.5064L25.6892 16.6279L26.1672 15.8458ZM20.3728 12.7243L15.2649 15.8458L15.7429 16.6279L20.8508 13.5064L20.3728 12.7243ZM25.1266 16.1522L20.5814 18.9301L21.0594 19.7123L25.6046 16.9344L25.1266 16.1522ZM20.8508 18.9301L16.3056 16.1522L15.8276 16.9344L20.3728 19.7123L20.8508 18.9301ZM16.3056 16.5931L20.8508 13.8155L20.3728 13.0333L15.8276 15.8109L16.3056 16.5931ZM20.5814 13.8155L25.1266 16.5931L25.6046 15.8109L21.0594 13.0333L20.5814 13.8155ZM15.7263 17.1814L20.255 19.949L20.733 19.1668L16.2042 16.3992L15.7263 17.1814ZM20.1314 19.7285V25.2841H21.048V19.7285H20.1314ZM20.5244 25.0636L15.9957 22.2958L15.5176 23.078L20.0464 25.8458L20.5244 25.0636ZM16.1193 22.5162V16.961H15.2026V22.5162H16.1193ZM21.3008 25.2841V19.7285H20.3841V25.2841H21.3008ZM21.1772 19.949L25.7059 17.1814L25.2279 16.3992L20.6992 19.1668L21.1772 19.949ZM25.3129 16.961V22.5165H26.2295V16.961H25.3129ZM25.4365 22.2961L20.9077 25.0636L21.3857 25.8458L25.9145 23.0782L25.4365 22.2961ZM25.3129 22.5165C25.3129 22.4265 25.3597 22.343 25.4365 22.2961L25.9145 23.0782C26.1102 22.9586 26.2295 22.7458 26.2295 22.5165H25.3129ZM25.7059 17.1814C25.5338 17.2866 25.3129 17.1627 25.3129 16.961H26.2295C26.2295 16.4469 25.6666 16.1311 25.2279 16.3992L25.7059 17.1814ZM21.3008 19.7285C21.3008 19.8185 21.254 19.902 21.1772 19.949L20.6992 19.1668C20.5035 19.2864 20.3841 19.4992 20.3841 19.7285H21.3008ZM20.3841 25.2841C20.3841 25.7982 20.9471 26.1139 21.3857 25.8458L20.9077 25.0636C21.0799 24.9584 21.3008 25.0823 21.3008 25.2841H20.3841ZM15.9957 22.2958C16.0725 22.3427 16.1193 22.4262 16.1193 22.5162H15.2026C15.2026 22.7456 15.322 22.9584 15.5176 23.078L15.9957 22.2958ZM20.1314 25.2841C20.1314 25.0823 20.3523 24.9584 20.5244 25.0636L20.0464 25.8458C20.4851 26.1139 21.048 25.7982 21.048 25.2841H20.1314ZM20.255 19.949C20.1782 19.902 20.1314 19.8185 20.1314 19.7285H21.048C21.048 19.4992 20.9287 19.2864 20.733 19.1668L20.255 19.949ZM16.2042 16.3992C15.7656 16.1311 15.2026 16.4468 15.2026 16.961H16.1193C16.1193 17.1627 15.8984 17.2866 15.7263 17.1814L16.2042 16.3992ZM20.8508 13.8155C20.7681 13.866 20.6641 13.866 20.5814 13.8155L21.0594 13.0333C20.8486 12.9045 20.5835 12.9045 20.3728 13.0333L20.8508 13.8155ZM16.3056 16.1522C16.4704 16.253 16.4704 16.4924 16.3056 16.5931L15.8276 15.8109C15.4075 16.0676 15.4075 16.6777 15.8276 16.9344L16.3056 16.1522ZM20.5814 18.9301C20.6641 18.8796 20.7681 18.8796 20.8508 18.9301L20.3728 19.7123C20.5835 19.8411 20.8486 19.8411 21.0594 19.7123L20.5814 18.9301ZM25.6046 16.9344C26.0246 16.6777 26.0246 16.0676 25.6046 15.8109L25.1266 16.5931C24.9617 16.4924 24.9617 16.253 25.1266 16.1522L25.6046 16.9344ZM21.0594 12.7243C20.8486 12.5955 20.5835 12.5955 20.3728 12.7243L20.8508 13.5064C20.7681 13.557 20.6641 13.557 20.5814 13.5064L21.0594 12.7243ZM26.4823 16.4075C26.4823 16.1782 26.3629 15.9654 26.1672 15.8458L25.6892 16.6279C25.6124 16.581 25.5656 16.4975 25.5656 16.4075H26.4823ZM26.1672 23.2326C26.3629 23.113 26.4823 22.9002 26.4823 22.6709H25.5656C25.5656 22.5809 25.6124 22.4974 25.6892 22.4504L26.1672 23.2326ZM20.3728 26.3541C20.5835 26.4829 20.8486 26.4829 21.0594 26.3541L20.5814 25.5719C20.6641 25.5214 20.7681 25.5214 20.8508 25.5719L20.3728 26.3541ZM14.9499 22.6709C14.9499 22.9002 15.0692 23.113 15.2649 23.2326L15.7429 22.4504C15.8197 22.4974 15.8665 22.5809 15.8665 22.6709H14.9499ZM15.8665 16.4075C15.8665 16.4975 15.8197 16.581 15.7429 16.6279L15.2649 15.8458C15.0692 15.9654 14.9499 16.1782 14.9499 16.4075H15.8665Z'
|
||||
fill='white'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function PineconeIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
@@ -6849,3 +6884,26 @@ export function HexIcon(props: SVGProps<SVGSVGElement>) {
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function BigQueryIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' {...props}>
|
||||
<path
|
||||
fill='#4386FA'
|
||||
d='M12 2.5a9.5 9.5 0 1 0 5.81 17.02l3.4 3.4a1 1 0 0 0 1.41-1.42l-3.4-3.4A9.5 9.5 0 0 0 12 2.5Zm0 2a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15Z'
|
||||
/>
|
||||
<path fill='#4386FA' d='M8 11h1.6v4H8v-4Zm3 -2h1.6v6H11V9Zm3 1.5h1.6V15H14v-3.5Z' />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function SnowflakeIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' {...props}>
|
||||
<path
|
||||
fill='#29B5E8'
|
||||
d='M12 2a1 1 0 0 1 1 1v3.59l2.3-2.3a1 1 0 1 1 1.4 1.42L13 9.41V12h2.6l3.7-3.7a1 1 0 0 1 1.4 1.4L18.42 12H22a1 1 0 1 1 0 2h-3.59l2.3 2.3a1 1 0 0 1-1.4 1.4L15.58 14H13v2.59l3.7 3.7a1 1 0 1 1-1.4 1.4L13 19.42V23a1 1 0 1 1-2 0v-3.58l-2.3 2.3a1 1 0 1 1-1.4-1.4l3.7-3.71V14H8.4l-3.7 3.7a1 1 0 0 1-1.4-1.4L5.58 14H2a1 1 0 0 1 0-2h3.59l-2.3-2.3a1 1 0 0 1 1.4-1.4L8.42 12H11V9.41L7.3 5.71a1 1 0 1 1 1.4-1.42l2.3 2.3V3a1 1 0 0 1 1-1Z'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@ import {
|
||||
PostgresIcon,
|
||||
PosthogIcon,
|
||||
ProfoundIcon,
|
||||
ProspeoIcon,
|
||||
PulseIcon,
|
||||
QdrantIcon,
|
||||
QuiverIcon,
|
||||
@@ -261,7 +262,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
extend_v2: ExtendIcon,
|
||||
fathom: FathomIcon,
|
||||
file: DocumentIcon,
|
||||
file_v3: DocumentIcon,
|
||||
file_v4: DocumentIcon,
|
||||
firecrawl: FirecrawlIcon,
|
||||
fireflies: FirefliesIcon,
|
||||
fireflies_v2: FirefliesIcon,
|
||||
@@ -360,6 +361,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
postgresql: PostgresIcon,
|
||||
posthog: PosthogIcon,
|
||||
profound: ProfoundIcon,
|
||||
prospeo: ProspeoIcon,
|
||||
pulse: PulseIcon,
|
||||
pulse_v2: PulseIcon,
|
||||
qdrant: QdrantIcon,
|
||||
|
||||
@@ -257,4 +257,52 @@ List and filter CloudWatch alarms
|
||||
| ↳ `threshold` | number | Threshold value \(MetricAlarm only\) |
|
||||
| ↳ `stateUpdatedTimestamp` | number | Epoch ms when state last changed |
|
||||
|
||||
### `cloudwatch_mute_alarm`
|
||||
|
||||
Create a CloudWatch alarm mute rule that suppresses alarms for a fixed duration
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `awsRegion` | string | Yes | AWS region \(e.g., us-east-1\) |
|
||||
| `awsAccessKeyId` | string | Yes | AWS access key ID |
|
||||
| `awsSecretAccessKey` | string | Yes | AWS secret access key |
|
||||
| `muteRuleName` | string | Yes | Unique name for the mute rule \(used later to unmute\) |
|
||||
| `alarmNames` | array | Yes | Names of the CloudWatch alarms this mute rule targets |
|
||||
| `durationValue` | number | Yes | How long the mute lasts \(paired with durationUnit\) |
|
||||
| `durationUnit` | string | Yes | Unit for durationValue: minutes, hours, or days |
|
||||
| `description` | string | No | Optional description of why the alarms are being muted |
|
||||
| `startDate` | number | No | When the mute window begins as Unix epoch seconds. Defaults to now \(mute starts immediately\). |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the mute rule was created successfully |
|
||||
| `muteRuleName` | string | Name of the mute rule that was created |
|
||||
| `alarmNames` | array | Names of the alarms this rule mutes |
|
||||
| `expression` | string | Schedule expression used by the mute rule |
|
||||
| `duration` | string | ISO 8601 duration of the mute window |
|
||||
|
||||
### `cloudwatch_unmute_alarm`
|
||||
|
||||
Delete a CloudWatch alarm mute rule, restoring alarm notifications
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `awsRegion` | string | Yes | AWS region \(e.g., us-east-1\) |
|
||||
| `awsAccessKeyId` | string | Yes | AWS access key ID |
|
||||
| `awsSecretAccessKey` | string | Yes | AWS secret access key |
|
||||
| `muteRuleName` | string | Yes | Name of the mute rule to delete |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Whether the mute rule was deleted successfully |
|
||||
| `muteRuleName` | string | Name of the mute rule that was deleted |
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
title: File
|
||||
description: Read and write workspace files
|
||||
description: Read, fetch, write, and append files
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="file_v3"
|
||||
type="file_v4"
|
||||
color="#40916C"
|
||||
/>
|
||||
|
||||
@@ -27,30 +27,49 @@ The File Parser tool is particularly useful for scenarios where your agents need
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
Read and parse files from uploads or URLs, write new workspace files, or append content to existing files.
|
||||
Read workspace files by picker or canonical ID, fetch and parse files from URLs with optional headers, write new workspace files, or append content to existing files.
|
||||
|
||||
|
||||
|
||||
## Tools
|
||||
|
||||
### `file_parser`
|
||||
|
||||
Parse one or more uploaded files or files from URLs (text, PDF, CSV, images, etc.)
|
||||
### `file_fetch`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `filePath` | string | No | Path to the file\(s\). Can be a single path, URL, or an array of paths. |
|
||||
| `file` | file | No | Uploaded file\(s\) to parse |
|
||||
| `fileType` | string | No | Type of file to parse \(auto-detected if not specified\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `files` | file[] | Parsed files as UserFile objects |
|
||||
| `combinedContent` | string | Combined content of all parsed files |
|
||||
| `file` | file | First workspace file object \(read\) |
|
||||
| `files` | file[] | Workspace file objects \(read\) or fetched file objects \(fetch\) |
|
||||
| `combinedContent` | string | All fetched file contents merged into a single text string \(fetch\) |
|
||||
| `id` | string | File ID \(write\) |
|
||||
| `name` | string | File name \(write\) |
|
||||
| `size` | number | File size in bytes \(write\) |
|
||||
| `url` | string | URL to access the file \(write\) |
|
||||
|
||||
### `file_read`
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `file` | file | First workspace file object \(read\) |
|
||||
| `files` | file[] | Workspace file objects \(read\) or fetched file objects \(fetch\) |
|
||||
| `combinedContent` | string | All fetched file contents merged into a single text string \(fetch\) |
|
||||
| `id` | string | File ID \(write\) |
|
||||
| `name` | string | File name \(write\) |
|
||||
| `size` | number | File size in bytes \(write\) |
|
||||
| `url` | string | URL to access the file \(write\) |
|
||||
|
||||
### `file_write`
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
"postgresql",
|
||||
"posthog",
|
||||
"profound",
|
||||
"prospeo",
|
||||
"pulse",
|
||||
"qdrant",
|
||||
"quiver",
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
---
|
||||
title: Prospeo
|
||||
description: Enrich and search B2B contacts and companies
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="prospeo"
|
||||
color="#FF1A26"
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Prospeo](https://prospeo.io/) is a B2B data platform that finds verified work emails and mobile numbers, enriches person and company profiles, and exposes a searchable database of leads and companies through 20+ filters.
|
||||
|
||||
With Prospeo, you can:
|
||||
|
||||
- **Find verified contact details**: Discover work emails and mobile numbers from a name, LinkedIn URL, or company
|
||||
- **Enrich people and companies**: Fill in profile data including job history, location, technology stack, and funding signals
|
||||
- **Bulk-enrich at scale**: Process arrays of identifiers in a single request for high-volume workflows
|
||||
- **Search the B2B database**: Filter leads and accounts by job title, location, industry, headcount, and more
|
||||
- **Monitor account usage**: Check remaining credits, used credits, and renewal dates before running expensive operations
|
||||
|
||||
In Sim, the Prospeo integration lets your agents perform contact discovery and CRM enrichment programmatically:
|
||||
|
||||
- **Enrich a person**: Use `prospeo_enrich_person` to match a contact and return verified email, mobile, and profile data
|
||||
- **Enrich a company**: Use `prospeo_enrich_company` to resolve a domain, LinkedIn URL, or name into a full company profile
|
||||
- **Bulk enrichment**: Use `prospeo_bulk_enrich_person` and `prospeo_bulk_enrich_company` for batched workflows
|
||||
- **Search the database**: Use `prospeo_search_person` and `prospeo_search_company` with JSON filter objects to surface leads
|
||||
- **Build dynamic filter UIs**: Use `prospeo_search_suggestions` to autocomplete locations and job titles
|
||||
- **Track usage**: Use `prospeo_account_information` to monitor credits and plan status from within a workflow
|
||||
|
||||
This turns Prospeo into a reliable contact and company data source for your agents — wire it into sales prospecting, CRM hygiene, lead scoring, or any pipeline that depends on accurate B2B identity data.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
Find verified work emails and mobile numbers, enrich person and company profiles, and search a B2B database of leads and companies using 20+ filters.
|
||||
|
||||
|
||||
|
||||
## Tools
|
||||
|
||||
### `prospeo_account_information`
|
||||
|
||||
Retrieve the current plan, remaining credits, and renewal date of your Prospeo account.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `current_plan` | string | Current Prospeo plan name |
|
||||
| `current_team_members` | number | Number of team members in your team |
|
||||
| `remaining_credits` | number | Number of credits remaining |
|
||||
| `used_credits` | number | Number of credits already used |
|
||||
| `next_quota_renewal_days` | number | Days until the next quota renewal |
|
||||
| `next_quota_renewal_date` | string | Date and time of the next quota renewal |
|
||||
|
||||
### `prospeo_enrich_person`
|
||||
|
||||
Enrich a person with complete B2B profile data, email address and mobile.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `first_name` | string | No | First name of the person |
|
||||
| `last_name` | string | No | Last name of the person |
|
||||
| `full_name` | string | No | Full name of the person \(alternative to first_name + last_name\) |
|
||||
| `linkedin_url` | string | No | Person's public LinkedIn URL |
|
||||
| `email` | string | No | Work email of the person |
|
||||
| `company_name` | string | No | Company name |
|
||||
| `company_website` | string | No | Company website |
|
||||
| `company_linkedin_url` | string | No | Company's public LinkedIn URL |
|
||||
| `person_id` | string | No | Prospeo person_id from a previous Search Person response |
|
||||
| `only_verified_email` | boolean | No | Only return records with a verified email |
|
||||
| `enrich_mobile` | boolean | No | Reveal mobile number \(10 credits per match; email included\) |
|
||||
| `only_verified_mobile` | boolean | No | Only return records that have a mobile \(implies enrich_mobile\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `free_enrichment` | boolean | True if this enrichment was free \(already enriched in the past\) |
|
||||
| `person` | json | The matched person object including person_id, name, linkedin_url, current_job_title, job_history, mobile, email, location, and skills |
|
||||
| `company` | json | The current company of the matched person including name, website, domain, industry, employee_count, location, social URLs, funding, and technology |
|
||||
|
||||
### `prospeo_enrich_company`
|
||||
|
||||
Enrich a company with complete B2B data.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `company_website` | string | No | Company website \(e.g., "intercom.com"\) |
|
||||
| `company_linkedin_url` | string | No | Company's public LinkedIn URL |
|
||||
| `company_name` | string | No | Company name \(use combined with website for best accuracy\) |
|
||||
| `company_id` | string | No | Prospeo company_id from a previously enriched company |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `free_enrichment` | boolean | True if this enrichment was free \(already enriched in the past\) |
|
||||
| `company` | json | The matched company object including name, website, domain, industry, employee_count, location, social URLs, funding, and technology |
|
||||
|
||||
### `prospeo_bulk_enrich_person`
|
||||
|
||||
Enrich up to 50 person records at once.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `data` | json | Yes | Array of up to 50 person records to enrich. Each must include an "identifier" plus one of: linkedin_url, email, person_id, or \(first_name + last_name + company_*\), or \(full_name + company_*\). |
|
||||
| `only_verified_email` | boolean | No | Only return records with a verified email |
|
||||
| `enrich_mobile` | boolean | No | Reveal mobile numbers \(10 credits per match; email included\) |
|
||||
| `only_verified_mobile` | boolean | No | Only return records that have a mobile \(implies enrich_mobile\) |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `total_cost` | number | Total credits spent by the request |
|
||||
| `matched` | array | Matched records \(identifier, person, company\) |
|
||||
| ↳ `identifier` | string | The identifier you submitted for this record |
|
||||
| ↳ `person` | json | The matched person object |
|
||||
| ↳ `company` | json | The current company of the matched person |
|
||||
| `not_matched` | array | Identifiers of records we could not match given the filters |
|
||||
| `invalid_datapoints` | array | Identifiers of records that did not meet the minimum matching requirements |
|
||||
|
||||
### `prospeo_bulk_enrich_company`
|
||||
|
||||
Enrich up to 50 company records at once.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `data` | json | Yes | Array of up to 50 company records to enrich. Each must include an "identifier" plus one of: company_website, company_linkedin_url, company_name, or company_id. |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `total_cost` | number | Total credits spent by the request |
|
||||
| `matched` | array | Matched company records \(identifier, company\) |
|
||||
| ↳ `identifier` | string | The identifier you submitted for this record |
|
||||
| ↳ `company` | json | The matched company object |
|
||||
| `not_matched` | array | Identifiers of records we could not match |
|
||||
| `invalid_datapoints` | array | Identifiers of records that did not meet the minimum matching requirements |
|
||||
|
||||
### `prospeo_search_person`
|
||||
|
||||
Search for leads using 20+ filters to build targeted contact lists.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `filters` | json | Yes | Filter configuration object. See https://prospeo.io/api-docs/filters-documentation for all supported filters \(e.g., person_seniority, company_industry, person_location\). |
|
||||
| `page` | number | No | Page number \(defaults to 1\). Up to 1000 pages of 25 results. |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `pagination` | object | Pagination details |
|
||||
| ↳ `current_page` | number | Current page number |
|
||||
| ↳ `per_page` | number | Results per page |
|
||||
| ↳ `total_page` | number | Total number of pages |
|
||||
| ↳ `total_count` | number | Total number of matching records |
|
||||
| `free` | boolean | True if the request was free due to 30-day result-set deduplication |
|
||||
| `results` | array | Up to 25 search results \(person + company, no email/mobile\) |
|
||||
| ↳ `person` | json | Matched person \(no email/mobile in search response\) |
|
||||
| ↳ `company` | json | Current company of the person |
|
||||
|
||||
### `prospeo_search_company`
|
||||
|
||||
Search for companies using 20+ filters to build account lists.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `filters` | json | Yes | Filter configuration object. See https://prospeo.io/api-docs/filters-documentation for all supported filters \(e.g., company_industry, company_headcount_range, company_funding\). |
|
||||
| `page` | number | No | Page number \(defaults to 1\). Up to 1000 pages of 25 results. |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `pagination` | object | Pagination details |
|
||||
| ↳ `current_page` | number | Current page number |
|
||||
| ↳ `per_page` | number | Results per page |
|
||||
| ↳ `total_page` | number | Total number of pages |
|
||||
| ↳ `total_count` | number | Total number of matching records |
|
||||
| `free` | boolean | True if the request was free due to 30-day result-set deduplication |
|
||||
| `results` | array | Up to 25 matching companies |
|
||||
| ↳ `company` | json | Matched company object |
|
||||
|
||||
### `prospeo_search_suggestions`
|
||||
|
||||
Free endpoint to retrieve valid location or job title values for use in Search filters. Provide exactly one of location_search or job_title_search.
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `apiKey` | string | Yes | Prospeo API key |
|
||||
| `location_search` | string | No | Search query for location suggestions \(minimum 2 characters\). Mutually exclusive with job_title_search. |
|
||||
| `job_title_search` | string | No | Search query for job title suggestions \(minimum 2 characters\). Mutually exclusive with location_search. |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ---- | ----------- |
|
||||
| `location_suggestions` | array | Location suggestions when using location_search \(null when searching job titles\) |
|
||||
| ↳ `name` | string | Formatted location name to use in filters |
|
||||
| ↳ `type` | string | Location type \(COUNTRY, STATE, CITY, or ZONE\) |
|
||||
| `job_title_suggestions` | array | Up to 25 job title suggestions ordered by popularity when using job_title_search \(null when searching locations\) |
|
||||
|
||||
|
||||
@@ -143,6 +143,7 @@ import {
|
||||
PostgresIcon,
|
||||
PosthogIcon,
|
||||
ProfoundIcon,
|
||||
ProspeoIcon,
|
||||
PulseIcon,
|
||||
QdrantIcon,
|
||||
QuiverIcon,
|
||||
@@ -257,7 +258,6 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
exa: ExaAIIcon,
|
||||
extend_v2: ExtendIcon,
|
||||
fathom: FathomIcon,
|
||||
file_v3: DocumentIcon,
|
||||
file_v4: DocumentIcon,
|
||||
firecrawl: FirecrawlIcon,
|
||||
fireflies_v2: FirefliesIcon,
|
||||
@@ -345,6 +345,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
|
||||
postgresql: PostgresIcon,
|
||||
posthog: PosthogIcon,
|
||||
profound: ProfoundIcon,
|
||||
prospeo: ProspeoIcon,
|
||||
pulse_v2: PulseIcon,
|
||||
qdrant: QdrantIcon,
|
||||
quiver: QuiverIcon,
|
||||
|
||||
@@ -2540,9 +2540,17 @@
|
||||
{
|
||||
"name": "Describe Alarms",
|
||||
"description": "List and filter CloudWatch alarms"
|
||||
},
|
||||
{
|
||||
"name": "Mute Alarm",
|
||||
"description": "Create a CloudWatch alarm mute rule that suppresses alarms for a fixed duration"
|
||||
},
|
||||
{
|
||||
"name": "Unmute Alarm",
|
||||
"description": "Delete a CloudWatch alarm mute rule, restoring alarm notifications"
|
||||
}
|
||||
],
|
||||
"operationCount": 8,
|
||||
"operationCount": 10,
|
||||
"triggers": [],
|
||||
"triggerCount": 0,
|
||||
"authType": "none",
|
||||
@@ -4043,11 +4051,11 @@
|
||||
"operations": [
|
||||
{
|
||||
"name": "Read",
|
||||
"description": "Get a workspace file object from a selected file or canonical workspace file ID."
|
||||
"description": "Read workspace file objects from selected files or canonical workspace file IDs."
|
||||
},
|
||||
{
|
||||
"name": "Fetch",
|
||||
"description": "Parse a file from a URL with optional custom headers for authenticated downloads."
|
||||
"description": "Fetch and parse a file from a URL with optional custom headers."
|
||||
},
|
||||
{
|
||||
"name": "Write",
|
||||
@@ -10387,6 +10395,57 @@
|
||||
"integrationTypes": ["analytics", "search"],
|
||||
"tags": ["seo", "data-analytics"]
|
||||
},
|
||||
{
|
||||
"type": "prospeo",
|
||||
"slug": "prospeo",
|
||||
"name": "Prospeo",
|
||||
"description": "Enrich and search B2B contacts and companies",
|
||||
"longDescription": "Find verified work emails and mobile numbers, enrich person and company profiles, and search a B2B database of leads and companies using 20+ filters.",
|
||||
"bgColor": "#FF1A26",
|
||||
"iconName": "ProspeoIcon",
|
||||
"docsUrl": "https://docs.sim.ai/tools/prospeo",
|
||||
"operations": [
|
||||
{
|
||||
"name": "Enrich Person",
|
||||
"description": "Enrich a person with complete B2B profile data, email address and mobile."
|
||||
},
|
||||
{
|
||||
"name": "Enrich Company",
|
||||
"description": "Enrich a company with complete B2B data."
|
||||
},
|
||||
{
|
||||
"name": "Bulk Enrich Person",
|
||||
"description": "Enrich up to 50 person records at once."
|
||||
},
|
||||
{
|
||||
"name": "Bulk Enrich Company",
|
||||
"description": "Enrich up to 50 company records at once."
|
||||
},
|
||||
{
|
||||
"name": "Search Person",
|
||||
"description": "Search for leads using 20+ filters to build targeted contact lists."
|
||||
},
|
||||
{
|
||||
"name": "Search Company",
|
||||
"description": "Search for companies using 20+ filters to build account lists."
|
||||
},
|
||||
{
|
||||
"name": "Search Suggestions",
|
||||
"description": "Free endpoint to retrieve valid location or job title values for use in Search filters. Provide exactly one of location_search or job_title_search."
|
||||
},
|
||||
{
|
||||
"name": "Account Information",
|
||||
"description": "Retrieve the current plan, remaining credits, and renewal date of your Prospeo account."
|
||||
}
|
||||
],
|
||||
"operationCount": 8,
|
||||
"triggers": [],
|
||||
"triggerCount": 0,
|
||||
"authType": "api-key",
|
||||
"category": "tools",
|
||||
"integrationTypes": ["sales"],
|
||||
"tags": ["enrichment", "sales-engagement"]
|
||||
},
|
||||
{
|
||||
"type": "pulse_v2",
|
||||
"slug": "pulse",
|
||||
|
||||
@@ -0,0 +1,441 @@
|
||||
import { ProspeoIcon } from '@/components/icons'
|
||||
import { AuthMode, type BlockConfig, IntegrationType } from '@/blocks/types'
|
||||
import type { ProspeoResponse } from '@/tools/prospeo/types'
|
||||
|
||||
export const ProspeoBlock: BlockConfig<ProspeoResponse> = {
|
||||
type: 'prospeo',
|
||||
name: 'Prospeo',
|
||||
description: 'Enrich and search B2B contacts and companies',
|
||||
authMode: AuthMode.ApiKey,
|
||||
longDescription:
|
||||
'Find verified work emails and mobile numbers, enrich person and company profiles, and search a B2B database of leads and companies using 20+ filters.',
|
||||
docsLink: 'https://docs.sim.ai/tools/prospeo',
|
||||
category: 'tools',
|
||||
integrationType: IntegrationType.Sales,
|
||||
tags: ['enrichment', 'sales-engagement'],
|
||||
bgColor: '#FF1A26',
|
||||
icon: ProspeoIcon,
|
||||
subBlocks: [
|
||||
{
|
||||
id: 'operation',
|
||||
title: 'Operation',
|
||||
type: 'dropdown',
|
||||
options: [
|
||||
{ label: 'Enrich Person', id: 'prospeo_enrich_person' },
|
||||
{ label: 'Enrich Company', id: 'prospeo_enrich_company' },
|
||||
{ label: 'Bulk Enrich Person', id: 'prospeo_bulk_enrich_person' },
|
||||
{ label: 'Bulk Enrich Company', id: 'prospeo_bulk_enrich_company' },
|
||||
{ label: 'Search Person', id: 'prospeo_search_person' },
|
||||
{ label: 'Search Company', id: 'prospeo_search_company' },
|
||||
{ label: 'Search Suggestions', id: 'prospeo_search_suggestions' },
|
||||
{ label: 'Account Information', id: 'prospeo_account_information' },
|
||||
],
|
||||
value: () => 'prospeo_enrich_person',
|
||||
},
|
||||
|
||||
// Enrich Person
|
||||
{
|
||||
id: 'first_name',
|
||||
title: 'First Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g., Eva',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'last_name',
|
||||
title: 'Last Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g., Kiegler',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'full_name',
|
||||
title: 'Full Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g., Eva Kiegler (alternative to first/last name)',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'linkedin_url',
|
||||
title: 'LinkedIn URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'https://www.linkedin.com/in/eva-kiegler',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'email',
|
||||
title: 'Email',
|
||||
type: 'short-input',
|
||||
placeholder: 'eva@intercom.com',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'company_name',
|
||||
title: 'Company Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'Intercom',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'company_website',
|
||||
title: 'Company Website',
|
||||
type: 'short-input',
|
||||
placeholder: 'intercom.com',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
},
|
||||
{
|
||||
id: 'company_linkedin_url',
|
||||
title: 'Company LinkedIn URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'https://www.linkedin.com/company/intercom',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'person_id',
|
||||
title: 'Person ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Prospeo person_id from a previous Search Person',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'only_verified_email',
|
||||
title: 'Only Verified Email',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'enrich_mobile',
|
||||
title: 'Enrich Mobile',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'only_verified_mobile',
|
||||
title: 'Only Verified Mobile',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
|
||||
// Enrich Company
|
||||
{
|
||||
id: 'company_website',
|
||||
title: 'Company Website',
|
||||
type: 'short-input',
|
||||
placeholder: 'intercom.com',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_company' },
|
||||
},
|
||||
{
|
||||
id: 'company_linkedin_url',
|
||||
title: 'Company LinkedIn URL',
|
||||
type: 'short-input',
|
||||
placeholder: 'https://www.linkedin.com/company/intercom',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_company' },
|
||||
},
|
||||
{
|
||||
id: 'company_name',
|
||||
title: 'Company Name',
|
||||
type: 'short-input',
|
||||
placeholder: 'Intercom',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_company' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'company_id',
|
||||
title: 'Company ID',
|
||||
type: 'short-input',
|
||||
placeholder: 'Prospeo company_id from a previous enrichment',
|
||||
condition: { field: 'operation', value: 'prospeo_enrich_company' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
|
||||
// Bulk Enrich Person
|
||||
{
|
||||
id: 'data',
|
||||
title: 'Records',
|
||||
type: 'code',
|
||||
language: 'json',
|
||||
required: { field: 'operation', value: 'prospeo_bulk_enrich_person' },
|
||||
placeholder:
|
||||
'[{"identifier":"1","linkedin_url":"https://www.linkedin.com/in/eva-kiegler"},{"identifier":"2","full_name":"Jane Doe","company_website":"acme.com"}]',
|
||||
condition: { field: 'operation', value: 'prospeo_bulk_enrich_person' },
|
||||
wandConfig: {
|
||||
enabled: true,
|
||||
prompt:
|
||||
'Build a JSON array of up to 50 person records to enrich via Prospeo. Each item must include an "identifier" plus one valid match key set: linkedin_url, email, person_id, or (first_name + last_name + company_*), or (full_name + company_*). Return ONLY the JSON array.',
|
||||
generationType: 'json-object',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'only_verified_email',
|
||||
title: 'Only Verified Email',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_bulk_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'enrich_mobile',
|
||||
title: 'Enrich Mobile',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_bulk_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'only_verified_mobile',
|
||||
title: 'Only Verified Mobile',
|
||||
type: 'switch',
|
||||
condition: { field: 'operation', value: 'prospeo_bulk_enrich_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
|
||||
// Bulk Enrich Company
|
||||
{
|
||||
id: 'data',
|
||||
title: 'Records',
|
||||
type: 'code',
|
||||
language: 'json',
|
||||
required: { field: 'operation', value: 'prospeo_bulk_enrich_company' },
|
||||
placeholder:
|
||||
'[{"identifier":"1","company_website":"intercom.com"},{"identifier":"2","company_linkedin_url":"https://www.linkedin.com/company/deloitte"}]',
|
||||
condition: { field: 'operation', value: 'prospeo_bulk_enrich_company' },
|
||||
wandConfig: {
|
||||
enabled: true,
|
||||
prompt:
|
||||
'Build a JSON array of up to 50 company records to enrich via Prospeo. Each item must include an "identifier" plus one of: company_website, company_linkedin_url, company_name, or company_id. Return ONLY the JSON array.',
|
||||
generationType: 'json-object',
|
||||
},
|
||||
},
|
||||
|
||||
// Search Person
|
||||
{
|
||||
id: 'filters',
|
||||
title: 'Filters',
|
||||
type: 'code',
|
||||
language: 'json',
|
||||
required: { field: 'operation', value: 'prospeo_search_person' },
|
||||
placeholder:
|
||||
'{"person_seniority":{"include":["Founder/Owner"]},"company_industry":{"exclude":["Semiconductors"]}}',
|
||||
condition: { field: 'operation', value: 'prospeo_search_person' },
|
||||
wandConfig: {
|
||||
enabled: true,
|
||||
prompt:
|
||||
'Build a Prospeo Search Person filters JSON object based on the user description. Use the documented filters (person_seniority, person_departments, person_year_of_experience, person_location, person_job_title, company_industry, company_headcount_range, company_funding, company_technology, etc.) with include/exclude or min/max keys as appropriate. Do not use only exclude filters. Return ONLY the JSON object for the filters value.',
|
||||
generationType: 'json-object',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'page',
|
||||
title: 'Page',
|
||||
type: 'short-input',
|
||||
placeholder: '1',
|
||||
condition: { field: 'operation', value: 'prospeo_search_person' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
|
||||
// Search Company
|
||||
{
|
||||
id: 'filters',
|
||||
title: 'Filters',
|
||||
type: 'code',
|
||||
language: 'json',
|
||||
required: { field: 'operation', value: 'prospeo_search_company' },
|
||||
placeholder:
|
||||
'{"company_funding":{"stage":["Series B","Series C"]},"company_industry":{"exclude":["Semiconductors"]}}',
|
||||
condition: { field: 'operation', value: 'prospeo_search_company' },
|
||||
wandConfig: {
|
||||
enabled: true,
|
||||
prompt:
|
||||
'Build a Prospeo Search Company filters JSON object based on the user description. Use the documented filters (company_industry, company_headcount_range, company_funding, company_technology, company_email_provider, company_naics, company_sics, company_location, etc.) with include/exclude or min/max keys as appropriate. Do not use only exclude filters. Return ONLY the JSON object for the filters value.',
|
||||
generationType: 'json-object',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'page',
|
||||
title: 'Page',
|
||||
type: 'short-input',
|
||||
placeholder: '1',
|
||||
condition: { field: 'operation', value: 'prospeo_search_company' },
|
||||
mode: 'advanced',
|
||||
},
|
||||
|
||||
// Search Suggestions
|
||||
{
|
||||
id: 'location_search',
|
||||
title: 'Location Query',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g., united states (min 2 characters)',
|
||||
condition: { field: 'operation', value: 'prospeo_search_suggestions' },
|
||||
},
|
||||
{
|
||||
id: 'job_title_search',
|
||||
title: 'Job Title Query',
|
||||
type: 'short-input',
|
||||
placeholder: 'e.g., software engineer (min 2 characters)',
|
||||
condition: { field: 'operation', value: 'prospeo_search_suggestions' },
|
||||
},
|
||||
|
||||
// API Key (always last)
|
||||
{
|
||||
id: 'apiKey',
|
||||
title: 'API Key',
|
||||
type: 'short-input',
|
||||
required: true,
|
||||
placeholder: 'Enter your Prospeo API key',
|
||||
password: true,
|
||||
},
|
||||
],
|
||||
tools: {
|
||||
access: [
|
||||
'prospeo_account_information',
|
||||
'prospeo_enrich_person',
|
||||
'prospeo_enrich_company',
|
||||
'prospeo_bulk_enrich_person',
|
||||
'prospeo_bulk_enrich_company',
|
||||
'prospeo_search_person',
|
||||
'prospeo_search_company',
|
||||
'prospeo_search_suggestions',
|
||||
],
|
||||
config: {
|
||||
tool: (params) => {
|
||||
switch (params.operation) {
|
||||
case 'prospeo_account_information':
|
||||
return 'prospeo_account_information'
|
||||
case 'prospeo_enrich_person':
|
||||
return 'prospeo_enrich_person'
|
||||
case 'prospeo_enrich_company':
|
||||
return 'prospeo_enrich_company'
|
||||
case 'prospeo_bulk_enrich_person':
|
||||
return 'prospeo_bulk_enrich_person'
|
||||
case 'prospeo_bulk_enrich_company':
|
||||
return 'prospeo_bulk_enrich_company'
|
||||
case 'prospeo_search_person':
|
||||
return 'prospeo_search_person'
|
||||
case 'prospeo_search_company':
|
||||
return 'prospeo_search_company'
|
||||
case 'prospeo_search_suggestions':
|
||||
return 'prospeo_search_suggestions'
|
||||
default:
|
||||
return 'prospeo_enrich_person'
|
||||
}
|
||||
},
|
||||
params: (params) => {
|
||||
const result: Record<string, unknown> = {}
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
if (value === undefined || value === null || value === '') continue
|
||||
if (key === 'page') {
|
||||
const n = Number(value)
|
||||
if (Number.isFinite(n)) result[key] = n
|
||||
continue
|
||||
}
|
||||
if (
|
||||
key === 'only_verified_email' ||
|
||||
key === 'enrich_mobile' ||
|
||||
key === 'only_verified_mobile'
|
||||
) {
|
||||
result[key] = typeof value === 'string' ? value === 'true' : Boolean(value)
|
||||
continue
|
||||
}
|
||||
result[key] = value
|
||||
}
|
||||
return result
|
||||
},
|
||||
},
|
||||
},
|
||||
inputs: {
|
||||
operation: { type: 'string', description: 'Operation to perform' },
|
||||
apiKey: { type: 'string', description: 'Prospeo API key' },
|
||||
// Enrich Person / Company match keys
|
||||
first_name: { type: 'string', description: 'First name' },
|
||||
last_name: { type: 'string', description: 'Last name' },
|
||||
full_name: { type: 'string', description: 'Full name' },
|
||||
linkedin_url: { type: 'string', description: 'Person LinkedIn URL' },
|
||||
email: { type: 'string', description: 'Work email' },
|
||||
company_name: { type: 'string', description: 'Company name' },
|
||||
company_website: { type: 'string', description: 'Company website' },
|
||||
company_linkedin_url: { type: 'string', description: 'Company LinkedIn URL' },
|
||||
company_id: { type: 'string', description: 'Prospeo company_id' },
|
||||
person_id: { type: 'string', description: 'Prospeo person_id' },
|
||||
only_verified_email: { type: 'boolean', description: 'Only verified emails' },
|
||||
enrich_mobile: { type: 'boolean', description: 'Reveal mobile numbers' },
|
||||
only_verified_mobile: { type: 'boolean', description: 'Only records with a mobile' },
|
||||
// Bulk
|
||||
data: { type: 'json', description: 'Array of records to enrich' },
|
||||
// Search
|
||||
filters: { type: 'json', description: 'Search filters configuration' },
|
||||
page: { type: 'number', description: 'Page number (defaults to 1)' },
|
||||
// Suggestions
|
||||
location_search: { type: 'string', description: 'Location search query' },
|
||||
job_title_search: { type: 'string', description: 'Job title search query' },
|
||||
},
|
||||
outputs: {
|
||||
// Account information
|
||||
current_plan: { type: 'string', description: 'Current plan name' },
|
||||
current_team_members: {
|
||||
type: 'number',
|
||||
description: 'Number of team members',
|
||||
},
|
||||
remaining_credits: { type: 'number', description: 'Credits remaining' },
|
||||
used_credits: { type: 'number', description: 'Credits already used' },
|
||||
next_quota_renewal_days: {
|
||||
type: 'number',
|
||||
description: 'Days until the next quota renewal',
|
||||
},
|
||||
next_quota_renewal_date: {
|
||||
type: 'string',
|
||||
description: 'Date of the next quota renewal',
|
||||
},
|
||||
// Enrichment
|
||||
free_enrichment: {
|
||||
type: 'boolean',
|
||||
description: 'True if this enrichment was free',
|
||||
},
|
||||
person: {
|
||||
type: 'json',
|
||||
description: 'Enriched person object (enrich_person)',
|
||||
},
|
||||
company: {
|
||||
type: 'json',
|
||||
description: 'Enriched / current company object (enrich_person, enrich_company)',
|
||||
},
|
||||
// Bulk enrichment
|
||||
total_cost: { type: 'number', description: 'Total credits spent (bulk)' },
|
||||
matched: {
|
||||
type: 'array',
|
||||
description: 'Matched records (bulk enrich)',
|
||||
},
|
||||
not_matched: {
|
||||
type: 'array',
|
||||
description: 'Identifiers that did not match (bulk enrich)',
|
||||
},
|
||||
invalid_datapoints: {
|
||||
type: 'array',
|
||||
description: 'Identifiers that failed minimum match requirements (bulk enrich)',
|
||||
},
|
||||
// Search
|
||||
free: {
|
||||
type: 'boolean',
|
||||
description: 'True if the search was free due to 30-day deduplication',
|
||||
},
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Search results (search_person, search_company)',
|
||||
},
|
||||
pagination: {
|
||||
type: 'json',
|
||||
description: 'Pagination details (current_page, per_page, total_page, total_count)',
|
||||
},
|
||||
// Suggestions
|
||||
location_suggestions: {
|
||||
type: 'array',
|
||||
description: 'Location suggestions (search_suggestions)',
|
||||
},
|
||||
job_title_suggestions: {
|
||||
type: 'array',
|
||||
description: 'Job title suggestions (search_suggestions)',
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -156,6 +156,7 @@ import { PolymarketBlock } from '@/blocks/blocks/polymarket'
|
||||
import { PostgreSQLBlock } from '@/blocks/blocks/postgresql'
|
||||
import { PostHogBlock } from '@/blocks/blocks/posthog'
|
||||
import { ProfoundBlock } from '@/blocks/blocks/profound'
|
||||
import { ProspeoBlock } from '@/blocks/blocks/prospeo'
|
||||
import { PulseBlock, PulseV2Block } from '@/blocks/blocks/pulse'
|
||||
import { QdrantBlock } from '@/blocks/blocks/qdrant'
|
||||
import { QuiverBlock } from '@/blocks/blocks/quiver'
|
||||
@@ -406,6 +407,7 @@ export const registry: Record<string, BlockConfig> = {
|
||||
pinecone: PineconeBlock,
|
||||
pipedrive: PipedriveBlock,
|
||||
profound: ProfoundBlock,
|
||||
prospeo: ProspeoBlock,
|
||||
polymarket: PolymarketBlock,
|
||||
postgresql: PostgreSQLBlock,
|
||||
posthog: PostHogBlock,
|
||||
|
||||
@@ -1455,6 +1455,41 @@ export function ProfoundIcon(props: SVGProps<SVGSVGElement>) {
|
||||
)
|
||||
}
|
||||
|
||||
export function ProspeoIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
{...props}
|
||||
width='1em'
|
||||
height='1em'
|
||||
viewBox='0 0 32 32'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<rect width='32' height='32' rx='6' fill='#FF1A26' />
|
||||
<path
|
||||
d='M6.0742 10.2104C6.01338 10.2464 5.97607 10.3118 5.97607 10.3825V18.7413C5.97607 18.812 6.01338 18.8774 6.0742 18.9134L13.1274 23.0883C13.1902 23.1255 13.2683 23.1255 13.3311 23.0883L20.3843 18.9134C20.4452 18.8774 20.4825 18.812 20.4825 18.7413V10.3825C20.4825 10.3118 20.4452 10.2464 20.3843 10.2104L13.3311 6.03553C13.2683 5.99835 13.1902 5.99835 13.1274 6.03554L6.0742 10.2104ZM19.6736 10.1987C19.8045 10.2762 19.8045 10.4655 19.6736 10.5429L13.3311 14.2975C13.2683 14.3347 13.1902 14.3347 13.1274 14.2975L6.78491 10.5429C6.65408 10.4655 6.65408 10.2762 6.78492 10.1987L13.1274 6.44453C13.1902 6.40735 13.2683 6.40735 13.3311 6.44453L19.6736 10.1987ZM6.32146 11.0283C6.32146 10.8734 6.49002 10.7773 6.62334 10.8562L12.9584 14.606C13.0193 14.642 13.0566 14.7074 13.0566 14.7781V22.2868C13.0566 22.4418 12.888 22.5379 12.7547 22.4589L6.41958 18.7088C6.35877 18.6728 6.32146 18.6073 6.32146 18.5367V11.0283ZM13.7038 22.4589C13.5705 22.5379 13.402 22.4418 13.402 22.2868V14.7781C13.402 14.7074 13.4393 14.642 13.5001 14.606L19.8352 10.8562C19.9685 10.7773 20.1371 10.8734 20.1371 11.0283V18.537C20.1371 18.6077 20.0998 18.6731 20.0389 18.7091L13.7038 22.4589Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M15.5039 16.2368C15.4445 16.2732 15.4082 16.3378 15.4082 16.4075V22.6709C15.4082 22.7405 15.4445 22.8052 15.5039 22.8415L20.6118 25.963C20.6758 26.0021 20.7563 26.0021 20.8204 25.963L25.9282 22.8415C25.9877 22.8052 26.0239 22.7405 26.0239 22.6709V16.4075C26.0239 16.3378 25.9877 16.2732 25.9282 16.2368L20.8204 13.1154C20.7563 13.0762 20.6758 13.0762 20.6118 13.1154L15.5039 16.2368ZM25.3656 16.202C25.4932 16.28 25.4932 16.4653 25.3656 16.5433L20.8204 19.3212C20.7563 19.3603 20.6758 19.3603 20.6118 19.3212L16.0666 16.5433C15.939 16.4653 15.939 16.28 16.0666 16.202L20.6118 13.4244C20.6758 13.3852 20.7563 13.3852 20.8204 13.4244L25.3656 16.202ZM15.661 16.961C15.661 16.8048 15.832 16.7089 15.9652 16.7903L20.494 19.5579C20.5534 19.5942 20.5897 19.6589 20.5897 19.7285V25.2841C20.5897 25.4402 20.4187 25.5362 20.2854 25.4547L15.7567 22.6869C15.6972 22.6506 15.661 22.5859 15.661 22.5162V16.961ZM21.1467 25.4547C21.0135 25.5362 20.8425 25.4403 20.8425 25.2841V19.7285C20.8425 19.6589 20.8787 19.5942 20.9382 19.5579L25.4669 16.7903C25.6002 16.7089 25.7712 16.8048 25.7712 16.961V22.5165C25.7712 22.5862 25.7349 22.6508 25.6755 22.6872L21.1467 25.4547Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M20.0389 18.7091L19.8055 18.3147L20.0389 18.7091ZM19.8352 10.8562L20.0687 11.2506L19.8352 10.8562ZM13.5001 14.606L13.2666 14.2116L13.5001 14.606ZM13.7038 22.4589L13.9373 22.8534L13.7038 22.4589ZM6.41958 18.7088L6.18611 19.1032L6.41958 18.7088ZM12.7547 22.4589L12.5212 22.8533L12.7547 22.4589ZM12.9584 14.606L13.1919 14.2116L12.9584 14.606ZM6.62334 10.8562L6.8568 10.4618L6.62334 10.8562ZM13.1274 6.44453L12.8939 6.05012L13.1274 6.44453ZM13.3311 6.44453L13.5646 6.05012L13.3311 6.44453ZM6.78491 10.5429L6.55143 10.9374L6.78491 10.5429ZM6.78492 10.1987L7.01838 10.5931L6.78492 10.1987ZM13.3311 14.2975L13.0977 13.9031L13.3311 14.2975ZM13.1274 14.2975L12.8939 14.6919L13.1274 14.2975ZM19.6736 10.5429L19.4402 10.1485L19.6736 10.5429ZM13.3311 6.03553L13.0977 6.42995L13.3311 6.03553ZM13.1274 6.03554L12.8939 5.64112L13.1274 6.03554ZM20.3843 10.2104L20.1509 10.6048L20.3843 10.2104ZM20.3843 18.9134L20.6178 19.3079L20.3843 18.9134ZM13.1274 23.0883L13.3609 22.6939L13.1274 23.0883ZM13.3311 23.0883L13.0977 22.6939L13.3311 23.0883ZM6.0742 18.9134L6.30766 18.519L6.0742 18.9134ZM6.0742 10.2104L6.30766 10.6048L6.0742 10.2104ZM5.51774 10.3825V18.7413H6.43441V10.3825H5.51774ZM5.84074 19.3079L12.8939 23.4827L13.3609 22.6939L6.30766 18.519L5.84074 19.3079ZM13.5646 23.4827L20.6178 19.3079L20.1509 18.519L13.0977 22.6939L13.5646 23.4827ZM20.9408 18.7413V10.3825H20.0241V18.7413H20.9408ZM20.6178 9.81599L13.5646 5.64112L13.0977 6.42995L20.1509 10.6048L20.6178 9.81599ZM12.8939 5.64112L5.84074 9.81599L6.30766 10.6048L13.3609 6.42995L12.8939 5.64112ZM19.4402 10.1485L13.0977 13.9031L13.5646 14.6919L19.9071 10.9374L19.4402 10.1485ZM13.3609 13.9031L7.01838 10.1485L6.55143 10.9374L12.8939 14.6919L13.3609 13.9031ZM7.01838 10.5931L13.3609 6.83895L12.8939 6.05012L6.55145 9.80431L7.01838 10.5931ZM13.0977 6.83895L19.4402 10.5931L19.9071 9.80431L13.5646 6.05012L13.0977 6.83895ZM6.38988 11.2506L12.725 15.0004L13.1919 14.2116L6.8568 10.4618L6.38988 11.2506ZM12.5982 14.7781V22.2868H13.5149V14.7781H12.5982ZM12.9882 22.0645L6.65306 18.3144L6.18611 19.1032L12.5212 22.8533L12.9882 22.0645ZM6.7798 18.5367V11.0283H5.86313V18.5367H6.7798ZM13.8603 22.2868V14.7781H12.9436V22.2868H13.8603ZM13.7336 15.0004L20.0687 11.2506L19.6017 10.4618L13.2666 14.2116L13.7336 15.0004ZM19.6787 11.0283V18.537H20.5954V11.0283H19.6787ZM19.8055 18.3147L13.4704 22.0645L13.9373 22.8534L20.2724 19.1035L19.8055 18.3147ZM19.6787 18.537C19.6787 18.4457 19.7269 18.3612 19.8055 18.3147L20.2724 19.1035C20.4726 18.985 20.5954 18.7697 20.5954 18.537H19.6787ZM20.0687 11.2506C19.8965 11.3525 19.6787 11.2284 19.6787 11.0283H20.5954C20.5954 10.5183 20.0406 10.202 19.6017 10.4618L20.0687 11.2506ZM13.8603 14.7781C13.8603 14.8694 13.8121 14.9539 13.7336 15.0004L13.2666 14.2116C13.0664 14.3301 12.9436 14.5455 12.9436 14.7781H13.8603ZM12.9436 22.2868C12.9436 22.7968 13.4984 23.1131 13.9373 22.8534L13.4704 22.0645C13.6426 21.9626 13.8603 22.0867 13.8603 22.2868H12.9436ZM6.65306 18.3144C6.73162 18.3609 6.7798 18.4454 6.7798 18.5367H5.86313C5.86313 18.7693 5.98591 18.9847 6.18611 19.1032L6.65306 18.3144ZM12.5982 22.2868C12.5982 22.0867 12.816 21.9626 12.9882 22.0645L12.5212 22.8533C12.9601 23.1131 13.5149 22.7968 13.5149 22.2868H12.5982ZM12.725 15.0004C12.6464 14.9539 12.5982 14.8694 12.5982 14.7781H13.5149C13.5149 14.5455 13.3921 14.3301 13.1919 14.2116L12.725 15.0004ZM6.8568 10.4618C6.41795 10.202 5.86313 10.5183 5.86313 11.0283H6.7798C6.7798 11.2284 6.56208 11.3525 6.38988 11.2506L6.8568 10.4618ZM13.3609 6.83895C13.2797 6.88699 13.1788 6.88699 13.0977 6.83895L13.5646 6.05012C13.3578 5.92771 13.1007 5.92771 12.8939 6.05012L13.3609 6.83895ZM7.01838 10.1485C7.18737 10.2486 7.18737 10.4931 7.01838 10.5931L6.55145 9.80431C6.1208 10.0592 6.12079 10.6824 6.55143 10.9374L7.01838 10.1485ZM13.0977 13.9031C13.1788 13.855 13.2797 13.855 13.3609 13.9031L12.8939 14.6919C13.1007 14.8143 13.3578 14.8143 13.5646 14.6919L13.0977 13.9031ZM19.9071 10.9374C20.3377 10.6824 20.3377 10.0592 19.9071 9.80431L19.4402 10.5931C19.2712 10.4931 19.2712 10.2486 19.4402 10.1485L19.9071 10.9374ZM13.5646 5.64112C13.3578 5.51871 13.1007 5.51871 12.8939 5.64112L13.3609 6.42995C13.2797 6.47799 13.1788 6.47799 13.0977 6.42995L13.5646 5.64112ZM20.9408 10.3825C20.9408 10.1499 20.818 9.9345 20.6178 9.81599L20.1509 10.6048C20.0723 10.5583 20.0241 10.4738 20.0241 10.3825H20.9408ZM20.6178 19.3079C20.818 19.1894 20.9408 18.974 20.9408 18.7413H20.0241C20.0241 18.65 20.0723 18.5655 20.1509 18.519L20.6178 19.3079ZM12.8939 23.4827C13.1007 23.6051 13.3578 23.6051 13.5646 23.4827L13.0977 22.6939C13.1788 22.6459 13.2797 22.6459 13.3609 22.6939L12.8939 23.4827ZM5.51774 18.7413C5.51774 18.974 5.64053 19.1894 5.84074 19.3079L6.30766 18.519C6.38622 18.5655 6.43441 18.65 6.43441 18.7413H5.51774ZM6.43441 10.3825C6.43441 10.4738 6.38622 10.5583 6.30766 10.6048L5.84074 9.81599C5.64053 9.9345 5.51774 10.1499 5.51774 10.3825H6.43441Z'
|
||||
fill='white'
|
||||
/>
|
||||
<path
|
||||
d='M20.4259 13.2929L15.9427 16.235C15.892 16.2683 15.8591 16.3229 15.8534 16.3833L15.2904 22.2941C15.2831 22.3717 15.3214 22.4465 15.3888 22.4858L20.4349 25.4295C20.4971 25.4658 20.5741 25.4658 20.6364 25.4295L25.6825 22.4858C25.7499 22.4465 25.7882 22.3717 25.7808 22.2941L25.2179 16.3833C25.2122 16.3229 25.1793 16.2683 25.1286 16.235L20.6454 13.2929C20.5788 13.2491 20.4925 13.2491 20.4259 13.2929Z'
|
||||
fill='#FF1A26'
|
||||
/>
|
||||
<path
|
||||
d='M25.6755 22.6872L25.4365 22.2961L25.6755 22.6872ZM25.4669 16.7903L25.7059 17.1814L25.4669 16.7903ZM20.9382 19.5579L21.1772 19.949L20.9382 19.5579ZM21.1467 25.4547L21.3857 25.8458L21.1467 25.4547ZM15.7567 22.6869L15.9957 22.2958L15.7567 22.6869ZM20.2854 25.4547L20.0464 25.8458L20.2854 25.4547ZM20.494 19.5579L20.255 19.949L20.494 19.5579ZM20.6118 13.4244L20.8508 13.8155L20.6118 13.4244ZM20.8204 13.4244L20.5814 13.8155L20.8204 13.4244ZM16.0666 16.5433L15.8276 16.9344L16.0666 16.5433ZM20.8204 19.3212L21.0594 19.7123L20.8204 19.3212ZM20.6118 19.3212L20.8508 18.9301L20.6118 19.3212ZM25.3656 16.5433L25.6046 16.9344L25.3656 16.5433ZM25.3656 16.202L25.1266 16.5931L25.3656 16.202ZM20.6118 13.1154L20.3728 12.7243L20.6118 13.1154ZM25.9282 16.2368L26.1672 15.8458L25.9282 16.2368ZM25.9282 22.8415L26.1672 23.2326L25.9282 22.8415ZM20.6118 25.963L20.3728 26.3541L20.6118 25.963ZM20.8204 25.963L21.0594 26.3541L20.8204 25.963ZM15.5039 22.8415L15.2649 23.2326L15.5039 22.8415ZM15.5039 16.2368L15.2649 15.8458L15.5039 16.2368ZM14.9499 16.4075V22.6709H15.8665V16.4075H14.9499ZM15.2649 23.2326L20.3728 26.3541L20.8508 25.5719L15.7429 22.4504L15.2649 23.2326ZM21.0594 26.3541L26.1672 23.2326L25.6892 22.4504L20.5814 25.5719L21.0594 26.3541ZM26.4823 22.6709V16.4075H25.5656V22.6709H26.4823ZM26.1672 15.8458L21.0594 12.7243L20.5814 13.5064L25.6892 16.6279L26.1672 15.8458ZM20.3728 12.7243L15.2649 15.8458L15.7429 16.6279L20.8508 13.5064L20.3728 12.7243ZM25.1266 16.1522L20.5814 18.9301L21.0594 19.7123L25.6046 16.9344L25.1266 16.1522ZM20.8508 18.9301L16.3056 16.1522L15.8276 16.9344L20.3728 19.7123L20.8508 18.9301ZM16.3056 16.5931L20.8508 13.8155L20.3728 13.0333L15.8276 15.8109L16.3056 16.5931ZM20.5814 13.8155L25.1266 16.5931L25.6046 15.8109L21.0594 13.0333L20.5814 13.8155ZM15.7263 17.1814L20.255 19.949L20.733 19.1668L16.2042 16.3992L15.7263 17.1814ZM20.1314 19.7285V25.2841H21.048V19.7285H20.1314ZM20.5244 25.0636L15.9957 22.2958L15.5176 23.078L20.0464 25.8458L20.5244 25.0636ZM16.1193 22.5162V16.961H15.2026V22.5162H16.1193ZM21.3008 25.2841V19.7285H20.3841V25.2841H21.3008ZM21.1772 19.949L25.7059 17.1814L25.2279 16.3992L20.6992 19.1668L21.1772 19.949ZM25.3129 16.961V22.5165H26.2295V16.961H25.3129ZM25.4365 22.2961L20.9077 25.0636L21.3857 25.8458L25.9145 23.0782L25.4365 22.2961ZM25.3129 22.5165C25.3129 22.4265 25.3597 22.343 25.4365 22.2961L25.9145 23.0782C26.1102 22.9586 26.2295 22.7458 26.2295 22.5165H25.3129ZM25.7059 17.1814C25.5338 17.2866 25.3129 17.1627 25.3129 16.961H26.2295C26.2295 16.4469 25.6666 16.1311 25.2279 16.3992L25.7059 17.1814ZM21.3008 19.7285C21.3008 19.8185 21.254 19.902 21.1772 19.949L20.6992 19.1668C20.5035 19.2864 20.3841 19.4992 20.3841 19.7285H21.3008ZM20.3841 25.2841C20.3841 25.7982 20.9471 26.1139 21.3857 25.8458L20.9077 25.0636C21.0799 24.9584 21.3008 25.0823 21.3008 25.2841H20.3841ZM15.9957 22.2958C16.0725 22.3427 16.1193 22.4262 16.1193 22.5162H15.2026C15.2026 22.7456 15.322 22.9584 15.5176 23.078L15.9957 22.2958ZM20.1314 25.2841C20.1314 25.0823 20.3523 24.9584 20.5244 25.0636L20.0464 25.8458C20.4851 26.1139 21.048 25.7982 21.048 25.2841H20.1314ZM20.255 19.949C20.1782 19.902 20.1314 19.8185 20.1314 19.7285H21.048C21.048 19.4992 20.9287 19.2864 20.733 19.1668L20.255 19.949ZM16.2042 16.3992C15.7656 16.1311 15.2026 16.4468 15.2026 16.961H16.1193C16.1193 17.1627 15.8984 17.2866 15.7263 17.1814L16.2042 16.3992ZM20.8508 13.8155C20.7681 13.866 20.6641 13.866 20.5814 13.8155L21.0594 13.0333C20.8486 12.9045 20.5835 12.9045 20.3728 13.0333L20.8508 13.8155ZM16.3056 16.1522C16.4704 16.253 16.4704 16.4924 16.3056 16.5931L15.8276 15.8109C15.4075 16.0676 15.4075 16.6777 15.8276 16.9344L16.3056 16.1522ZM20.5814 18.9301C20.6641 18.8796 20.7681 18.8796 20.8508 18.9301L20.3728 19.7123C20.5835 19.8411 20.8486 19.8411 21.0594 19.7123L20.5814 18.9301ZM25.6046 16.9344C26.0246 16.6777 26.0246 16.0676 25.6046 15.8109L25.1266 16.5931C24.9617 16.4924 24.9617 16.253 25.1266 16.1522L25.6046 16.9344ZM21.0594 12.7243C20.8486 12.5955 20.5835 12.5955 20.3728 12.7243L20.8508 13.5064C20.7681 13.557 20.6641 13.557 20.5814 13.5064L21.0594 12.7243ZM26.4823 16.4075C26.4823 16.1782 26.3629 15.9654 26.1672 15.8458L25.6892 16.6279C25.6124 16.581 25.5656 16.4975 25.5656 16.4075H26.4823ZM26.1672 23.2326C26.3629 23.113 26.4823 22.9002 26.4823 22.6709H25.5656C25.5656 22.5809 25.6124 22.4974 25.6892 22.4504L26.1672 23.2326ZM20.3728 26.3541C20.5835 26.4829 20.8486 26.4829 21.0594 26.3541L20.5814 25.5719C20.6641 25.5214 20.7681 25.5214 20.8508 25.5719L20.3728 26.3541ZM14.9499 22.6709C14.9499 22.9002 15.0692 23.113 15.2649 23.2326L15.7429 22.4504C15.8197 22.4974 15.8665 22.5809 15.8665 22.6709H14.9499ZM15.8665 16.4075C15.8665 16.4975 15.8197 16.581 15.7429 16.6279L15.2649 15.8458C15.0692 15.9654 14.9499 16.1782 14.9499 16.4075H15.8665Z'
|
||||
fill='white'
|
||||
/>
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export function PineconeIcon(props: SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoAccountInformationParams,
|
||||
type ProspeoAccountInformationResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const accountInformationTool: ToolConfig<
|
||||
ProspeoAccountInformationParams,
|
||||
ProspeoAccountInformationResponse
|
||||
> = {
|
||||
id: 'prospeo_account_information',
|
||||
name: 'Prospeo Account Information',
|
||||
description:
|
||||
'Retrieve the current plan, remaining credits, and renewal date of your Prospeo account.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/account-information',
|
||||
method: 'GET',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
}),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
const r = data.response ?? {}
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
current_plan: r.current_plan ?? null,
|
||||
current_team_members: r.current_team_members ?? null,
|
||||
remaining_credits: r.remaining_credits ?? null,
|
||||
used_credits: r.used_credits ?? null,
|
||||
next_quota_renewal_days: r.next_quota_renewal_days ?? null,
|
||||
next_quota_renewal_date: r.next_quota_renewal_date ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
current_plan: { type: 'string', description: 'Current Prospeo plan name', optional: true },
|
||||
current_team_members: {
|
||||
type: 'number',
|
||||
description: 'Number of team members in your team',
|
||||
optional: true,
|
||||
},
|
||||
remaining_credits: {
|
||||
type: 'number',
|
||||
description: 'Number of credits remaining',
|
||||
optional: true,
|
||||
},
|
||||
used_credits: { type: 'number', description: 'Number of credits already used', optional: true },
|
||||
next_quota_renewal_days: {
|
||||
type: 'number',
|
||||
description: 'Days until the next quota renewal',
|
||||
optional: true,
|
||||
},
|
||||
next_quota_renewal_date: {
|
||||
type: 'string',
|
||||
description: 'Date and time of the next quota renewal',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoBulkEnrichCompanyParams,
|
||||
type ProspeoBulkEnrichCompanyResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import { parseDataArray } from '@/tools/prospeo/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const bulkEnrichCompanyTool: ToolConfig<
|
||||
ProspeoBulkEnrichCompanyParams,
|
||||
ProspeoBulkEnrichCompanyResponse
|
||||
> = {
|
||||
id: 'prospeo_bulk_enrich_company',
|
||||
name: 'Prospeo Bulk Enrich Company',
|
||||
description: 'Enrich up to 50 company records at once.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
data: {
|
||||
type: 'json',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Array of up to 50 company records to enrich. Each must include an "identifier" plus one of: company_website, company_linkedin_url, company_name, or company_id.',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/bulk-enrich-company',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => ({ data: parseDataArray(params.data) }),
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
total_cost: data.total_cost ?? 0,
|
||||
matched: data.matched ?? [],
|
||||
not_matched: data.not_matched ?? [],
|
||||
invalid_datapoints: data.invalid_datapoints ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
total_cost: { type: 'number', description: 'Total credits spent by the request' },
|
||||
matched: {
|
||||
type: 'array',
|
||||
description: 'Matched company records (identifier, company)',
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
identifier: {
|
||||
type: 'string',
|
||||
description: 'The identifier you submitted for this record',
|
||||
},
|
||||
company: { type: 'json', description: 'The matched company object', optional: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
not_matched: {
|
||||
type: 'array',
|
||||
description: 'Identifiers of records we could not match',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
invalid_datapoints: {
|
||||
type: 'array',
|
||||
description: 'Identifiers of records that did not meet the minimum matching requirements',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoBulkEnrichPersonParams,
|
||||
type ProspeoBulkEnrichPersonResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import { parseDataArray } from '@/tools/prospeo/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const bulkEnrichPersonTool: ToolConfig<
|
||||
ProspeoBulkEnrichPersonParams,
|
||||
ProspeoBulkEnrichPersonResponse
|
||||
> = {
|
||||
id: 'prospeo_bulk_enrich_person',
|
||||
name: 'Prospeo Bulk Enrich Person',
|
||||
description: 'Enrich up to 50 person records at once.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
data: {
|
||||
type: 'json',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Array of up to 50 person records to enrich. Each must include an "identifier" plus one of: linkedin_url, email, person_id, or (first_name + last_name + company_*), or (full_name + company_*).',
|
||||
},
|
||||
only_verified_email: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Only return records with a verified email',
|
||||
},
|
||||
enrich_mobile: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Reveal mobile numbers (10 credits per match; email included)',
|
||||
},
|
||||
only_verified_mobile: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Only return records that have a mobile (implies enrich_mobile)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/bulk-enrich-person',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: Record<string, unknown> = { data: parseDataArray(params.data) }
|
||||
if (params.only_verified_email !== undefined)
|
||||
body.only_verified_email = params.only_verified_email
|
||||
if (params.enrich_mobile !== undefined) body.enrich_mobile = params.enrich_mobile
|
||||
if (params.only_verified_mobile !== undefined)
|
||||
body.only_verified_mobile = params.only_verified_mobile
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
total_cost: data.total_cost ?? 0,
|
||||
matched: data.matched ?? [],
|
||||
not_matched: data.not_matched ?? [],
|
||||
invalid_datapoints: data.invalid_datapoints ?? [],
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
total_cost: { type: 'number', description: 'Total credits spent by the request' },
|
||||
matched: {
|
||||
type: 'array',
|
||||
description: 'Matched records (identifier, person, company)',
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
identifier: {
|
||||
type: 'string',
|
||||
description: 'The identifier you submitted for this record',
|
||||
},
|
||||
person: { type: 'json', description: 'The matched person object', optional: true },
|
||||
company: {
|
||||
type: 'json',
|
||||
description: 'The current company of the matched person',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
not_matched: {
|
||||
type: 'array',
|
||||
description: 'Identifiers of records we could not match given the filters',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
invalid_datapoints: {
|
||||
type: 'array',
|
||||
description: 'Identifiers of records that did not meet the minimum matching requirements',
|
||||
items: { type: 'string' },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoEnrichCompanyParams,
|
||||
type ProspeoEnrichCompanyResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const enrichCompanyTool: ToolConfig<
|
||||
ProspeoEnrichCompanyParams,
|
||||
ProspeoEnrichCompanyResponse
|
||||
> = {
|
||||
id: 'prospeo_enrich_company',
|
||||
name: 'Prospeo Enrich Company',
|
||||
description: 'Enrich a company with complete B2B data.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
company_website: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Company website (e.g., "intercom.com")',
|
||||
},
|
||||
company_linkedin_url: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: "Company's public LinkedIn URL",
|
||||
},
|
||||
company_name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Company name (use combined with website for best accuracy)',
|
||||
},
|
||||
company_id: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Prospeo company_id from a previously enriched company',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/enrich-company',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const data: Record<string, unknown> = {}
|
||||
if (params.company_website) data.company_website = params.company_website
|
||||
if (params.company_linkedin_url) data.company_linkedin_url = params.company_linkedin_url
|
||||
if (params.company_name) data.company_name = params.company_name
|
||||
if (params.company_id) data.company_id = params.company_id
|
||||
return { data }
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
free_enrichment: data.free_enrichment ?? false,
|
||||
company: data.company ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
free_enrichment: {
|
||||
type: 'boolean',
|
||||
description: 'True if this enrichment was free (already enriched in the past)',
|
||||
},
|
||||
company: {
|
||||
type: 'json',
|
||||
description:
|
||||
'The matched company object including name, website, domain, industry, employee_count, location, social URLs, funding, and technology',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoEnrichPersonParams,
|
||||
type ProspeoEnrichPersonResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const enrichPersonTool: ToolConfig<ProspeoEnrichPersonParams, ProspeoEnrichPersonResponse> =
|
||||
{
|
||||
id: 'prospeo_enrich_person',
|
||||
name: 'Prospeo Enrich Person',
|
||||
description: 'Enrich a person with complete B2B profile data, email address and mobile.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
first_name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'First name of the person',
|
||||
},
|
||||
last_name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Last name of the person',
|
||||
},
|
||||
full_name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Full name of the person (alternative to first_name + last_name)',
|
||||
},
|
||||
linkedin_url: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: "Person's public LinkedIn URL",
|
||||
},
|
||||
email: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Work email of the person',
|
||||
},
|
||||
company_name: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Company name',
|
||||
},
|
||||
company_website: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Company website',
|
||||
},
|
||||
company_linkedin_url: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: "Company's public LinkedIn URL",
|
||||
},
|
||||
person_id: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Prospeo person_id from a previous Search Person response',
|
||||
},
|
||||
only_verified_email: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Only return records with a verified email',
|
||||
},
|
||||
enrich_mobile: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Reveal mobile number (10 credits per match; email included)',
|
||||
},
|
||||
only_verified_mobile: {
|
||||
type: 'boolean',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Only return records that have a mobile (implies enrich_mobile)',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/enrich-person',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const data: Record<string, unknown> = {}
|
||||
if (params.first_name) data.first_name = params.first_name
|
||||
if (params.last_name) data.last_name = params.last_name
|
||||
if (params.full_name) data.full_name = params.full_name
|
||||
if (params.linkedin_url) data.linkedin_url = params.linkedin_url
|
||||
if (params.email) data.email = params.email
|
||||
if (params.company_name) data.company_name = params.company_name
|
||||
if (params.company_website) data.company_website = params.company_website
|
||||
if (params.company_linkedin_url) data.company_linkedin_url = params.company_linkedin_url
|
||||
if (params.person_id) data.person_id = params.person_id
|
||||
|
||||
const body: Record<string, unknown> = { data }
|
||||
if (params.only_verified_email !== undefined)
|
||||
body.only_verified_email = params.only_verified_email
|
||||
if (params.enrich_mobile !== undefined) body.enrich_mobile = params.enrich_mobile
|
||||
if (params.only_verified_mobile !== undefined)
|
||||
body.only_verified_mobile = params.only_verified_mobile
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
free_enrichment: data.free_enrichment ?? false,
|
||||
person: data.person ?? null,
|
||||
company: data.company ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
free_enrichment: {
|
||||
type: 'boolean',
|
||||
description: 'True if this enrichment was free (already enriched in the past)',
|
||||
},
|
||||
person: {
|
||||
type: 'json',
|
||||
description:
|
||||
'The matched person object including person_id, name, linkedin_url, current_job_title, job_history, mobile, email, location, and skills',
|
||||
optional: true,
|
||||
},
|
||||
company: {
|
||||
type: 'json',
|
||||
description:
|
||||
'The current company of the matched person including name, website, domain, industry, employee_count, location, social URLs, funding, and technology',
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { accountInformationTool } from '@/tools/prospeo/account_information'
|
||||
import { bulkEnrichCompanyTool } from '@/tools/prospeo/bulk_enrich_company'
|
||||
import { bulkEnrichPersonTool } from '@/tools/prospeo/bulk_enrich_person'
|
||||
import { enrichCompanyTool } from '@/tools/prospeo/enrich_company'
|
||||
import { enrichPersonTool } from '@/tools/prospeo/enrich_person'
|
||||
import { searchCompanyTool } from '@/tools/prospeo/search_company'
|
||||
import { searchPersonTool } from '@/tools/prospeo/search_person'
|
||||
import { searchSuggestionsTool } from '@/tools/prospeo/search_suggestions'
|
||||
|
||||
export const prospeoAccountInformationTool = accountInformationTool
|
||||
export const prospeoEnrichPersonTool = enrichPersonTool
|
||||
export const prospeoEnrichCompanyTool = enrichCompanyTool
|
||||
export const prospeoBulkEnrichPersonTool = bulkEnrichPersonTool
|
||||
export const prospeoBulkEnrichCompanyTool = bulkEnrichCompanyTool
|
||||
export const prospeoSearchPersonTool = searchPersonTool
|
||||
export const prospeoSearchCompanyTool = searchCompanyTool
|
||||
export const prospeoSearchSuggestionsTool = searchSuggestionsTool
|
||||
@@ -0,0 +1,87 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
PROSPEO_PAGINATION_OUTPUT,
|
||||
type ProspeoSearchCompanyParams,
|
||||
type ProspeoSearchCompanyResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import { parseFiltersObject } from '@/tools/prospeo/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const searchCompanyTool: ToolConfig<
|
||||
ProspeoSearchCompanyParams,
|
||||
ProspeoSearchCompanyResponse
|
||||
> = {
|
||||
id: 'prospeo_search_company',
|
||||
name: 'Prospeo Search Company',
|
||||
description: 'Search for companies using 20+ filters to build account lists.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
filters: {
|
||||
type: 'json',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Filter configuration object. See https://prospeo.io/api-docs/filters-documentation for all supported filters (e.g., company_industry, company_headcount_range, company_funding).',
|
||||
},
|
||||
page: {
|
||||
type: 'number',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Page number (defaults to 1). Up to 1000 pages of 25 results.',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/search-company',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: Record<string, unknown> = { filters: parseFiltersObject(params.filters) }
|
||||
if (params.page !== undefined) body.page = params.page
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
free: data.free ?? false,
|
||||
results: data.results ?? [],
|
||||
pagination: data.pagination ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
free: {
|
||||
type: 'boolean',
|
||||
description: 'True if the request was free due to 30-day result-set deduplication',
|
||||
},
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Up to 25 matching companies',
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
company: { type: 'json', description: 'Matched company object' },
|
||||
},
|
||||
},
|
||||
},
|
||||
pagination: PROSPEO_PAGINATION_OUTPUT,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
PROSPEO_PAGINATION_OUTPUT,
|
||||
type ProspeoSearchPersonParams,
|
||||
type ProspeoSearchPersonResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import { parseFiltersObject } from '@/tools/prospeo/utils'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const searchPersonTool: ToolConfig<ProspeoSearchPersonParams, ProspeoSearchPersonResponse> =
|
||||
{
|
||||
id: 'prospeo_search_person',
|
||||
name: 'Prospeo Search Person',
|
||||
description: 'Search for leads using 20+ filters to build targeted contact lists.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
filters: {
|
||||
type: 'json',
|
||||
required: true,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Filter configuration object. See https://prospeo.io/api-docs/filters-documentation for all supported filters (e.g., person_seniority, company_industry, person_location).',
|
||||
},
|
||||
page: {
|
||||
type: 'number',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description: 'Page number (defaults to 1). Up to 1000 pages of 25 results.',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/search-person',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: Record<string, unknown> = { filters: parseFiltersObject(params.filters) }
|
||||
if (params.page !== undefined) body.page = params.page
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
free: data.free ?? false,
|
||||
results: data.results ?? [],
|
||||
pagination: data.pagination ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
free: {
|
||||
type: 'boolean',
|
||||
description: 'True if the request was free due to 30-day result-set deduplication',
|
||||
},
|
||||
results: {
|
||||
type: 'array',
|
||||
description: 'Up to 25 search results (person + company, no email/mobile)',
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
person: {
|
||||
type: 'json',
|
||||
description: 'Matched person (no email/mobile in search response)',
|
||||
},
|
||||
company: { type: 'json', description: 'Current company of the person', optional: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
pagination: PROSPEO_PAGINATION_OUTPUT,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
import {
|
||||
extractProspeoError,
|
||||
type ProspeoSearchSuggestionsParams,
|
||||
type ProspeoSearchSuggestionsResponse,
|
||||
} from '@/tools/prospeo/types'
|
||||
import type { ToolConfig } from '@/tools/types'
|
||||
|
||||
export const searchSuggestionsTool: ToolConfig<
|
||||
ProspeoSearchSuggestionsParams,
|
||||
ProspeoSearchSuggestionsResponse
|
||||
> = {
|
||||
id: 'prospeo_search_suggestions',
|
||||
name: 'Prospeo Search Suggestions',
|
||||
description:
|
||||
'Free endpoint to retrieve valid location or job title values for use in Search filters. Provide exactly one of location_search or job_title_search.',
|
||||
version: '1.0.0',
|
||||
|
||||
params: {
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only',
|
||||
description: 'Prospeo API key',
|
||||
},
|
||||
location_search: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Search query for location suggestions (minimum 2 characters). Mutually exclusive with job_title_search.',
|
||||
},
|
||||
job_title_search: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-or-llm',
|
||||
description:
|
||||
'Search query for job title suggestions (minimum 2 characters). Mutually exclusive with location_search.',
|
||||
},
|
||||
},
|
||||
|
||||
request: {
|
||||
url: 'https://api.prospeo.io/search-suggestions',
|
||||
method: 'POST',
|
||||
headers: (params) => ({
|
||||
'X-KEY': params.apiKey,
|
||||
'Content-Type': 'application/json',
|
||||
}),
|
||||
body: (params) => {
|
||||
const body: Record<string, unknown> = {}
|
||||
if (params.location_search) body.location_search = params.location_search
|
||||
if (params.job_title_search) body.job_title_search = params.job_title_search
|
||||
return body
|
||||
},
|
||||
},
|
||||
|
||||
transformResponse: async (response: Response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error(await extractProspeoError(response))
|
||||
}
|
||||
const data = await response.json()
|
||||
return {
|
||||
success: true,
|
||||
output: {
|
||||
location_suggestions: data.location_suggestions ?? null,
|
||||
job_title_suggestions: data.job_title_suggestions ?? null,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
outputs: {
|
||||
location_suggestions: {
|
||||
type: 'array',
|
||||
description:
|
||||
'Location suggestions when using location_search (null when searching job titles)',
|
||||
optional: true,
|
||||
items: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: { type: 'string', description: 'Formatted location name to use in filters' },
|
||||
type: {
|
||||
type: 'string',
|
||||
description: 'Location type (COUNTRY, STATE, CITY, or ZONE)',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
job_title_suggestions: {
|
||||
type: 'array',
|
||||
description:
|
||||
'Up to 25 job title suggestions ordered by popularity when using job_title_search (null when searching locations)',
|
||||
optional: true,
|
||||
items: { type: 'string' },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
import type { OutputProperty, ToolResponse } from '@/tools/types'
|
||||
|
||||
export interface ProspeoBaseParams {
|
||||
apiKey: string
|
||||
}
|
||||
|
||||
export interface ProspeoPersonData {
|
||||
identifier?: string
|
||||
first_name?: string
|
||||
last_name?: string
|
||||
full_name?: string
|
||||
linkedin_url?: string
|
||||
email?: string
|
||||
company_name?: string
|
||||
company_website?: string
|
||||
company_linkedin_url?: string
|
||||
person_id?: string
|
||||
}
|
||||
|
||||
export interface ProspeoCompanyData {
|
||||
identifier?: string
|
||||
company_name?: string
|
||||
company_website?: string
|
||||
company_linkedin_url?: string
|
||||
company_id?: string
|
||||
}
|
||||
|
||||
export interface ProspeoPaginationOutput {
|
||||
current_page: number
|
||||
per_page: number
|
||||
total_page: number
|
||||
total_count: number
|
||||
}
|
||||
|
||||
export const PROSPEO_PAGINATION_OUTPUT: OutputProperty = {
|
||||
type: 'object',
|
||||
description: 'Pagination details',
|
||||
properties: {
|
||||
current_page: { type: 'number', description: 'Current page number' },
|
||||
per_page: { type: 'number', description: 'Results per page' },
|
||||
total_page: { type: 'number', description: 'Total number of pages' },
|
||||
total_count: { type: 'number', description: 'Total number of matching records' },
|
||||
},
|
||||
}
|
||||
|
||||
/** Account Information */
|
||||
export interface ProspeoAccountInformationParams extends ProspeoBaseParams {}
|
||||
|
||||
export interface ProspeoAccountInformationResponse extends ToolResponse {
|
||||
output: {
|
||||
current_plan: string | null
|
||||
current_team_members: number | null
|
||||
remaining_credits: number | null
|
||||
used_credits: number | null
|
||||
next_quota_renewal_days: number | null
|
||||
next_quota_renewal_date: string | null
|
||||
}
|
||||
}
|
||||
|
||||
/** Enrich Person */
|
||||
export interface ProspeoEnrichPersonParams extends ProspeoBaseParams, ProspeoPersonData {
|
||||
only_verified_email?: boolean
|
||||
enrich_mobile?: boolean
|
||||
only_verified_mobile?: boolean
|
||||
}
|
||||
|
||||
export interface ProspeoEnrichPersonResponse extends ToolResponse {
|
||||
output: {
|
||||
free_enrichment: boolean
|
||||
person: Record<string, unknown> | null
|
||||
company: Record<string, unknown> | null
|
||||
}
|
||||
}
|
||||
|
||||
/** Enrich Company */
|
||||
export interface ProspeoEnrichCompanyParams extends ProspeoBaseParams, ProspeoCompanyData {}
|
||||
|
||||
export interface ProspeoEnrichCompanyResponse extends ToolResponse {
|
||||
output: {
|
||||
free_enrichment: boolean
|
||||
company: Record<string, unknown> | null
|
||||
}
|
||||
}
|
||||
|
||||
/** Bulk Enrich Person */
|
||||
export interface ProspeoBulkEnrichPersonParams extends ProspeoBaseParams {
|
||||
data: ProspeoPersonData[]
|
||||
only_verified_email?: boolean
|
||||
enrich_mobile?: boolean
|
||||
only_verified_mobile?: boolean
|
||||
}
|
||||
|
||||
export interface ProspeoBulkEnrichPersonResponse extends ToolResponse {
|
||||
output: {
|
||||
total_cost: number
|
||||
matched: Array<{
|
||||
identifier: string
|
||||
person: Record<string, unknown> | null
|
||||
company: Record<string, unknown> | null
|
||||
}>
|
||||
not_matched: string[]
|
||||
invalid_datapoints: string[]
|
||||
}
|
||||
}
|
||||
|
||||
/** Bulk Enrich Company */
|
||||
export interface ProspeoBulkEnrichCompanyParams extends ProspeoBaseParams {
|
||||
data: ProspeoCompanyData[]
|
||||
}
|
||||
|
||||
export interface ProspeoBulkEnrichCompanyResponse extends ToolResponse {
|
||||
output: {
|
||||
total_cost: number
|
||||
matched: Array<{
|
||||
identifier: string
|
||||
company: Record<string, unknown> | null
|
||||
}>
|
||||
not_matched: string[]
|
||||
invalid_datapoints: string[]
|
||||
}
|
||||
}
|
||||
|
||||
/** Search Person */
|
||||
export interface ProspeoSearchPersonParams extends ProspeoBaseParams {
|
||||
filters: Record<string, unknown> | string
|
||||
page?: number
|
||||
}
|
||||
|
||||
export interface ProspeoSearchPersonResponse extends ToolResponse {
|
||||
output: {
|
||||
free: boolean
|
||||
results: Array<{
|
||||
person: Record<string, unknown> | null
|
||||
company: Record<string, unknown> | null
|
||||
}>
|
||||
pagination: ProspeoPaginationOutput | null
|
||||
}
|
||||
}
|
||||
|
||||
/** Search Company */
|
||||
export interface ProspeoSearchCompanyParams extends ProspeoBaseParams {
|
||||
filters: Record<string, unknown> | string
|
||||
page?: number
|
||||
}
|
||||
|
||||
export interface ProspeoSearchCompanyResponse extends ToolResponse {
|
||||
output: {
|
||||
free: boolean
|
||||
results: Array<{
|
||||
company: Record<string, unknown> | null
|
||||
}>
|
||||
pagination: ProspeoPaginationOutput | null
|
||||
}
|
||||
}
|
||||
|
||||
/** Search Suggestions */
|
||||
export interface ProspeoSearchSuggestionsParams extends ProspeoBaseParams {
|
||||
location_search?: string
|
||||
job_title_search?: string
|
||||
}
|
||||
|
||||
export interface ProspeoSearchSuggestionsResponse extends ToolResponse {
|
||||
output: {
|
||||
location_suggestions: Array<{ name: string; type: string }> | null
|
||||
job_title_suggestions: string[] | null
|
||||
}
|
||||
}
|
||||
|
||||
export type ProspeoResponse =
|
||||
| ProspeoAccountInformationResponse
|
||||
| ProspeoEnrichPersonResponse
|
||||
| ProspeoEnrichCompanyResponse
|
||||
| ProspeoBulkEnrichPersonResponse
|
||||
| ProspeoBulkEnrichCompanyResponse
|
||||
| ProspeoSearchPersonResponse
|
||||
| ProspeoSearchCompanyResponse
|
||||
| ProspeoSearchSuggestionsResponse
|
||||
|
||||
/**
|
||||
* Build a Prospeo API error message from a non-OK response payload.
|
||||
*/
|
||||
export async function extractProspeoError(response: Response): Promise<string> {
|
||||
try {
|
||||
const data = (await response.json()) as {
|
||||
error_code?: string
|
||||
filter_error?: string
|
||||
message?: string
|
||||
}
|
||||
const parts = [data.error_code, data.filter_error, data.message].filter(Boolean)
|
||||
if (parts.length > 0) return parts.join(': ')
|
||||
} catch {}
|
||||
return `Prospeo API error: ${response.status}`
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
export function parseDataArray(value: unknown): unknown[] {
|
||||
if (Array.isArray(value)) return value
|
||||
if (typeof value === 'string' && value.trim().length > 0) {
|
||||
try {
|
||||
const parsed = JSON.parse(value)
|
||||
return Array.isArray(parsed) ? parsed : []
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
export function parseFiltersObject(value: unknown): Record<string, unknown> {
|
||||
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
||||
return value as Record<string, unknown>
|
||||
}
|
||||
if (typeof value === 'string' && value.trim().length > 0) {
|
||||
try {
|
||||
const parsed = JSON.parse(value)
|
||||
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
||||
return parsed as Record<string, unknown>
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
@@ -2049,6 +2049,16 @@ import {
|
||||
profoundSentimentReportTool,
|
||||
profoundVisibilityReportTool,
|
||||
} from '@/tools/profound'
|
||||
import {
|
||||
prospeoAccountInformationTool,
|
||||
prospeoBulkEnrichCompanyTool,
|
||||
prospeoBulkEnrichPersonTool,
|
||||
prospeoEnrichCompanyTool,
|
||||
prospeoEnrichPersonTool,
|
||||
prospeoSearchCompanyTool,
|
||||
prospeoSearchPersonTool,
|
||||
prospeoSearchSuggestionsTool,
|
||||
} from '@/tools/prospeo'
|
||||
import { pulseParserTool, pulseParserV2Tool } from '@/tools/pulse'
|
||||
import { qdrantFetchTool, qdrantSearchTool, qdrantUpsertTool } from '@/tools/qdrant'
|
||||
import { quiverImageToSvgTool, quiverListModelsTool, quiverTextToSvgTool } from '@/tools/quiver'
|
||||
@@ -5273,6 +5283,14 @@ export const tools: Record<string, ToolConfig> = {
|
||||
hunter_email_verifier: hunterEmailVerifierTool,
|
||||
hunter_companies_find: hunterCompaniesFindTool,
|
||||
hunter_email_count: hunterEmailCountTool,
|
||||
prospeo_account_information: prospeoAccountInformationTool,
|
||||
prospeo_enrich_person: prospeoEnrichPersonTool,
|
||||
prospeo_enrich_company: prospeoEnrichCompanyTool,
|
||||
prospeo_bulk_enrich_person: prospeoBulkEnrichPersonTool,
|
||||
prospeo_bulk_enrich_company: prospeoBulkEnrichCompanyTool,
|
||||
prospeo_search_person: prospeoSearchPersonTool,
|
||||
prospeo_search_company: prospeoSearchCompanyTool,
|
||||
prospeo_search_suggestions: prospeoSearchSuggestionsTool,
|
||||
iam_list_users: iamListUsersTool,
|
||||
iam_get_user: iamGetUserTool,
|
||||
iam_create_user: iamCreateUserTool,
|
||||
|
||||
Reference in New Issue
Block a user