From 6fd422f35b3afc4e1e5e9bc528e8d407aad1f13d Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Thu, 16 Oct 2025 18:03:48 +0100 Subject: [PATCH 1/6] Add Tomba API actions for email and domain management - Implemented actions for author finding, domain searching, domain status checking, domain suggestions, email counting, email enrichment, email finding, email formatting, email sourcing, email verifying, account retrieval, log fetching, and usage statistics. - Added phone finder and validator actions. - Introduced company search functionality with natural language queries. - Included technology stack retrieval and similar domain suggestions. - Updated package.json with new dependencies and improved descriptions. - Enhanced app prop definitions for better user experience. --- components/tomba/README.md | 47 +- .../actions/author-finder/author-finder.mjs | 36 ++ .../actions/domain-search/domain-search.mjs | 66 +++ .../actions/domain-status/domain-status.mjs | 36 ++ .../domain-suggestions/domain-suggestions.mjs | 37 ++ .../tomba/actions/email-count/email-count.mjs | 36 ++ .../email-enrichment/email-enrichment.mjs | 33 ++ .../actions/email-finder/email-finder.mjs | 50 ++ .../actions/email-format/email-format.mjs | 36 ++ .../actions/email-sources/email-sources.mjs | 33 ++ .../actions/email-verifier/email-verifier.mjs | 33 ++ .../tomba/actions/get-account/get-account.mjs | 26 + .../tomba/actions/get-logs/get-logs.mjs | 43 ++ .../tomba/actions/get-usage/get-usage.mjs | 26 + .../linkedin-finder/linkedin-finder.mjs | 36 ++ .../tomba/actions/location/location.mjs | 36 ++ .../actions/phone-finder/phone-finder.mjs | 77 +++ .../phone-validator/phone-validator.mjs | 43 ++ .../search-companies/search-companies.mjs | 59 ++ components/tomba/actions/similar/similar.mjs | 36 ++ .../tomba/actions/technology/technology.mjs | 36 ++ components/tomba/package.json | 18 +- components/tomba/tomba.app.mjs | 560 +++++++++++++++++- 23 files changed, 1428 insertions(+), 11 deletions(-) create mode 100644 components/tomba/actions/author-finder/author-finder.mjs create mode 100644 components/tomba/actions/domain-search/domain-search.mjs create mode 100644 components/tomba/actions/domain-status/domain-status.mjs create mode 100644 components/tomba/actions/domain-suggestions/domain-suggestions.mjs create mode 100644 components/tomba/actions/email-count/email-count.mjs create mode 100644 components/tomba/actions/email-enrichment/email-enrichment.mjs create mode 100644 components/tomba/actions/email-finder/email-finder.mjs create mode 100644 components/tomba/actions/email-format/email-format.mjs create mode 100644 components/tomba/actions/email-sources/email-sources.mjs create mode 100644 components/tomba/actions/email-verifier/email-verifier.mjs create mode 100644 components/tomba/actions/get-account/get-account.mjs create mode 100644 components/tomba/actions/get-logs/get-logs.mjs create mode 100644 components/tomba/actions/get-usage/get-usage.mjs create mode 100644 components/tomba/actions/linkedin-finder/linkedin-finder.mjs create mode 100644 components/tomba/actions/location/location.mjs create mode 100644 components/tomba/actions/phone-finder/phone-finder.mjs create mode 100644 components/tomba/actions/phone-validator/phone-validator.mjs create mode 100644 components/tomba/actions/search-companies/search-companies.mjs create mode 100644 components/tomba/actions/similar/similar.mjs create mode 100644 components/tomba/actions/technology/technology.mjs diff --git a/components/tomba/README.md b/components/tomba/README.md index 84416691d850c..2ae1107f08226 100644 --- a/components/tomba/README.md +++ b/components/tomba/README.md @@ -1,11 +1,50 @@ # Overview -The Tomba API is a potent tool for email discovery and domain search. With it, you can automate the process of finding and verifying email addresses linked to a domain, which could be pivotal for lead generation, outreach campaigns, or market research. By leveraging the Tomba API on Pipedream, you streamline these tasks into efficient workflows that can interact with numerous other apps and services, such as CRMs, marketing automation tools, or database managers. The synergy between Tomba and Pipedream allows for real-time processing and integration of email data within your existing business systems. +The Tomba API is a comprehensive email finder and verification service that enables you to discover, verify, and enrich email addresses and contact data. With Tomba, you can find email addresses from domains, names, LinkedIn profiles, or blog posts, verify email deliverability, and gather detailed company intelligence. Leverage Pipedream's capabilities to integrate Tomba with hundreds of other apps, creating powerful automated workflows for lead generation, email verification, contact enrichment, and competitive research. # Example Use Cases -- **Lead Generation Automation**: Trigger a workflow when a new company is added to your CRM. Use Tomba to find email addresses associated with the company's domain. Enrich lead data in the CRM and follow up with an automated outreach sequence using an email marketing tool like Mailchimp. +- **Lead Generation Automation**: Trigger a workflow when a new company is added to your CRM. Use Tomba to find email addresses associated with the company's domain, enrich the lead data, and automatically add qualified contacts to your outreach sequences in tools like Mailchimp or HubSpot. -- **Domain Research and Monitoring**: Schedule a regular Pipedream workflow that checks a list of domains and uses Tomba to gather any new email addresses. Store the findings in a Google Sheets document and send a Slack notification to the sales team with any updates or new leads. +- **Email List Verification**: Before launching an email campaign, run your contact list through a Pipedream workflow that uses Tomba's email verifier to validate each address. Automatically remove invalid emails and update your email platform like SendGrid, ensuring higher deliverability rates and protecting your sender reputation. -- **Verification and Clean-up for Marketing Campaigns**: Before launching an email campaign, run your email list through a Pipedream workflow that uses Tomba to verify the validity of each address. Update the campaign list in your email platform, like Sendgrid, to omit invalid or nonexistent emails, ensuring higher deliverability and engagement rates. +- **Competitive Intelligence Gathering**: Set up a scheduled workflow that monitors competitor domains using Tomba's domain search and technology detection features. Store findings in Google Sheets and send Slack notifications to your team with insights about competitor email patterns, employee counts, and tech stacks. + +# Getting Started + +To start using Tomba with Pipedream: + +1. **Sign up for Tomba**: Create an account at [tomba.io](https://tomba.io) and obtain your API key and secret from the dashboard. + +2. **Connect to Pipedream**: In your Pipedream workflow, add a Tomba action and authenticate using your API credentials. + +3. **Choose your action**: Select from 20 available actions including Email Finder, Domain Search, Email Verifier, and Company Search. + +4. **Configure parameters**: Set up your search criteria such as domain names, email addresses, or LinkedIn URLs. + +5. **Test and deploy**: Run your workflow to verify the results, then deploy for automated execution. + +# Troubleshooting + +**Authentication Issues** + +- Verify your API key and secret are correctly entered in the Pipedream connection settings +- Check that your Tomba account has sufficient credits and is not suspended +- Ensure your API keys haven't expired or been regenerated + +**Rate Limiting** + +- Tomba enforces API rate limits based on your subscription plan +- Implement delays between requests in high-volume workflows +- Monitor your usage with the "Get Usage" action to track quota consumption + +**No Results Found** + +- For Email Finder: Try different name variations or check if the domain uses a non-standard email format +- For Domain Search: Some domains may have limited public email exposure +- For LinkedIn Finder: Ensure the LinkedIn URL is publicly accessible and properly formatted + +**Invalid Email Addresses** + +- Use the Email Verifier action to validate emails before adding them to campaigns +- Some emails may exist but have strict spam filters that prevent verification diff --git a/components/tomba/actions/author-finder/author-finder.mjs b/components/tomba/actions/author-finder/author-finder.mjs new file mode 100644 index 0000000000000..51f7428ebba89 --- /dev/null +++ b/components/tomba/actions/author-finder/author-finder.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-author-finder", + name: "Author Finder", + description: + "Generate or retrieve the most likely email address from a blog post URL. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + blogUrl: { + propDefinition: [ + app, + "blogUrl", + ], + }, + }, + async run({ $ }) { + const response = await this.app.authorFinder({ + $, + blogUrl: this.blogUrl, + }); + + $.export( + "$summary", + `Successfully found author information for blog post: ${this.blogUrl}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/domain-search/domain-search.mjs b/components/tomba/actions/domain-search/domain-search.mjs new file mode 100644 index 0000000000000..7c4e10f34791e --- /dev/null +++ b/components/tomba/actions/domain-search/domain-search.mjs @@ -0,0 +1,66 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-domain-search", + name: "Domain Search", + description: + "Get every email address found on the internet using a given domain name, with sources. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + page: { + propDefinition: [ + app, + "page", + ], + }, + limitDomainSearch: { + propDefinition: [ + app, + "limitDomainSearch", + ], + }, + country: { + propDefinition: [ + app, + "country", + ], + }, + department: { + propDefinition: [ + app, + "department", + ], + }, + }, + async run({ $ }) { + const response = await this.app.domainSearch({ + $, + domain: this.domain, + page: this.page, + limit: this.limitDomainSearch, + country: this.country, + department: this.department, + }); + + $.export( + "$summary", + `Successfully found ${ + response.data?.emails?.length || 0 + } email addresses for domain: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/domain-status/domain-status.mjs b/components/tomba/actions/domain-status/domain-status.mjs new file mode 100644 index 0000000000000..ef4c5b7553842 --- /dev/null +++ b/components/tomba/actions/domain-status/domain-status.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-domain-status", + name: "Domain Status", + description: + "Find domain status if is webmail or disposable. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.domainStatus({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully retrieved domain status for: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/domain-suggestions/domain-suggestions.mjs b/components/tomba/actions/domain-suggestions/domain-suggestions.mjs new file mode 100644 index 0000000000000..144882a798abc --- /dev/null +++ b/components/tomba/actions/domain-suggestions/domain-suggestions.mjs @@ -0,0 +1,37 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-domain-suggestions", + name: "Domain Suggestions", + description: + "Retrieve a list of suggested domains similar to or related to your search query. This helps discover competitors, similar companies, and related businesses for market research and prospecting. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + query: { + propDefinition: [ + app, + "query", + ], + description: "The domain or company name to find suggestions for", + }, + }, + async run({ $ }) { + const response = await this.app.domainSuggestions({ + $, + query: this.query, + }); + + $.export( + "$summary", + `Successfully found domain suggestions for: ${this.query}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/email-count/email-count.mjs b/components/tomba/actions/email-count/email-count.mjs new file mode 100644 index 0000000000000..4f9e22f9f7ee1 --- /dev/null +++ b/components/tomba/actions/email-count/email-count.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-count", + name: "Email Count", + description: + "Find total email addresses we have for one domain. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailCount({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully retrieved email count for domain: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/email-enrichment/email-enrichment.mjs b/components/tomba/actions/email-enrichment/email-enrichment.mjs new file mode 100644 index 0000000000000..57847ef95239d --- /dev/null +++ b/components/tomba/actions/email-enrichment/email-enrichment.mjs @@ -0,0 +1,33 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-enrichment", + name: "Email Enrichment", + description: + "Look up person and company data based on an email. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + email: { + propDefinition: [ + app, + "email", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailEnrichment({ + $, + email: this.email, + }); + + $.export("$summary", `Successfully enriched data for email: ${this.email}`); + return response; + }, +}; diff --git a/components/tomba/actions/email-finder/email-finder.mjs b/components/tomba/actions/email-finder/email-finder.mjs new file mode 100644 index 0000000000000..2a1c808833ace --- /dev/null +++ b/components/tomba/actions/email-finder/email-finder.mjs @@ -0,0 +1,50 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-finder", + name: "Email Finder", + description: + "Generate or retrieve the most likely email address from a domain name, a first name and a last name. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + firstName: { + propDefinition: [ + app, + "firstName", + ], + }, + lastName: { + propDefinition: [ + app, + "lastName", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailFinder({ + $, + domain: this.domain, + firstName: this.firstName, + lastName: this.lastName, + }); + + $.export( + "$summary", + `Successfully found email for ${this.firstName} ${this.lastName} at ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/email-format/email-format.mjs b/components/tomba/actions/email-format/email-format.mjs new file mode 100644 index 0000000000000..9fa61ba2a8c6c --- /dev/null +++ b/components/tomba/actions/email-format/email-format.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-format", + name: "Email Format", + description: + "Retrieve the email format patterns used by a specific domain. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailFormat({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully retrieved email format patterns for domain: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/email-sources/email-sources.mjs b/components/tomba/actions/email-sources/email-sources.mjs new file mode 100644 index 0000000000000..b2de366b46c2e --- /dev/null +++ b/components/tomba/actions/email-sources/email-sources.mjs @@ -0,0 +1,33 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-sources", + name: "Email Sources", + description: + "Find email address source somewhere on the web. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + email: { + propDefinition: [ + app, + "email", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailSources({ + $, + email: this.email, + }); + + $.export("$summary", `Successfully found sources for email: ${this.email}`); + return response; + }, +}; diff --git a/components/tomba/actions/email-verifier/email-verifier.mjs b/components/tomba/actions/email-verifier/email-verifier.mjs new file mode 100644 index 0000000000000..37279108b7dfc --- /dev/null +++ b/components/tomba/actions/email-verifier/email-verifier.mjs @@ -0,0 +1,33 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-email-verifier", + name: "Email Verifier", + description: + "Verify the deliverability of an email address. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + email: { + propDefinition: [ + app, + "email", + ], + }, + }, + async run({ $ }) { + const response = await this.app.emailVerifier({ + $, + email: this.email, + }); + + $.export("$summary", `Successfully verified email: ${this.email}`); + return response; + }, +}; diff --git a/components/tomba/actions/get-account/get-account.mjs b/components/tomba/actions/get-account/get-account.mjs new file mode 100644 index 0000000000000..e0ed74c9a09f1 --- /dev/null +++ b/components/tomba/actions/get-account/get-account.mjs @@ -0,0 +1,26 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-get-account", + name: "Get Account", + description: + "Returns information about the current account including usage statistics and plan details. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + }, + async run({ $ }) { + const response = await this.app.getAccount({ + $, + }); + + $.export("$summary", "Successfully retrieved account information"); + return response; + }, +}; diff --git a/components/tomba/actions/get-logs/get-logs.mjs b/components/tomba/actions/get-logs/get-logs.mjs new file mode 100644 index 0000000000000..67490223cbea6 --- /dev/null +++ b/components/tomba/actions/get-logs/get-logs.mjs @@ -0,0 +1,43 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-get-logs", + name: "Get Logs", + description: + "Retrieve API request logs for your account with pagination support. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + limit: { + propDefinition: [ + app, + "limit", + ], + }, + page: { + propDefinition: [ + app, + "page", + ], + }, + }, + async run({ $ }) { + const response = await this.app.getLogs({ + $, + limit: this.limit, + offset: this.offset, + }); + + $.export( + "$summary", + `Successfully retrieved ${response.data?.length || 0} API logs`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/get-usage/get-usage.mjs b/components/tomba/actions/get-usage/get-usage.mjs new file mode 100644 index 0000000000000..5521624662788 --- /dev/null +++ b/components/tomba/actions/get-usage/get-usage.mjs @@ -0,0 +1,26 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-get-usage", + name: "Get Usage", + description: + "Retrieve API usage statistics and quota information for your account. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + }, + async run({ $ }) { + const response = await this.app.getUsage({ + $, + }); + + $.export("$summary", "Successfully retrieved API usage statistics"); + return response; + }, +}; diff --git a/components/tomba/actions/linkedin-finder/linkedin-finder.mjs b/components/tomba/actions/linkedin-finder/linkedin-finder.mjs new file mode 100644 index 0000000000000..c43a6ea10c9b5 --- /dev/null +++ b/components/tomba/actions/linkedin-finder/linkedin-finder.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-linkedin-finder", + name: "LinkedIn Finder", + description: + "Generate or retrieve the most likely email address from a LinkedIn URL. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + linkedinUrl: { + propDefinition: [ + app, + "linkedinUrl", + ], + }, + }, + async run({ $ }) { + const response = await this.app.linkedinFinder({ + $, + linkedinUrl: this.linkedinUrl, + }); + + $.export( + "$summary", + `Successfully found email from LinkedIn profile: ${this.linkedinUrl}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/location/location.mjs b/components/tomba/actions/location/location.mjs new file mode 100644 index 0000000000000..ddb8a72e2b62c --- /dev/null +++ b/components/tomba/actions/location/location.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-location", + name: "Location", + description: + "Get employees location based on the domain name. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.location({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully retrieved location data for domain: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/phone-finder/phone-finder.mjs b/components/tomba/actions/phone-finder/phone-finder.mjs new file mode 100644 index 0000000000000..841aaab021e45 --- /dev/null +++ b/components/tomba/actions/phone-finder/phone-finder.mjs @@ -0,0 +1,77 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-phone-finder", + name: "Phone Finder", + description: + "Search for phone numbers based on an email, domain, or LinkedIn URL. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + searchType: { + type: "string", + label: "Search Type", + description: "Choose the type of search to perform", + options: [ + { + label: "Search by Domain", + value: "domain", + }, + { + label: "Search by Email", + value: "email", + }, + { + label: "Search by LinkedIn URL", + value: "linkedin", + }, + ], + reloadProps: true, + default: "domain", + }, + }, + additionalProps() { + const props = {}; + if (this.searchType === "domain") { + props.domain = { + type: "string", + label: "Domain", + description: "The domain name to search (e.g., stripe.com)", + }; + } else if (this.searchType === "email") { + props.email = { + type: "string", + label: "Email Address", + description: "The email address to verify or search", + }; + } else if (this.searchType === "linkedin") { + props.linkedinUrl = { + type: "string", + label: "LinkedIn URL", + description: "The LinkedIn profile URL", + }; + } + return props; + }, + async run({ $ }) { + const response = await this.app.phoneFinder({ + $, + domain: this.domain, + email: this.email, + linkedinUrl: this.linkedinUrl, + }); + + const searchValue = this.domain || this.email || this.linkedinUrl; + $.export( + "$summary", + `Successfully searched for phone numbers using ${this.searchType}: ${searchValue}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/phone-validator/phone-validator.mjs b/components/tomba/actions/phone-validator/phone-validator.mjs new file mode 100644 index 0000000000000..96691794747c7 --- /dev/null +++ b/components/tomba/actions/phone-validator/phone-validator.mjs @@ -0,0 +1,43 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-phone-validator", + name: "Phone Validator", + description: + "Validate a phone number and retrieve its associated information. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + phoneNumber: { + propDefinition: [ + app, + "phoneNumber", + ], + }, + country: { + propDefinition: [ + app, + "country", + ], + }, + }, + async run({ $ }) { + const response = await this.app.phoneValidator({ + $, + phoneNumber: this.phoneNumber, + country: this.country, + }); + + $.export( + "$summary", + `Successfully validated phone number: ${this.phoneNumber}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/search-companies/search-companies.mjs b/components/tomba/actions/search-companies/search-companies.mjs new file mode 100644 index 0000000000000..d6f08fcd028dc --- /dev/null +++ b/components/tomba/actions/search-companies/search-companies.mjs @@ -0,0 +1,59 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-search-companies", + name: "Search Companies", + description: + "Search for companies using natural language queries or structured filters. The AI assistant will automatically generate appropriate filters from your query. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + query: { + propDefinition: [ + app, + "query", + ], + description: + "Natural language query to search for companies (e.g., 'tech companies in San Francisco with 100+ employees')", + }, + filters: { + propDefinition: [ + app, + "filters", + ], + }, + limit: { + propDefinition: [ + app, + "limit", + ], + }, + page: { + propDefinition: [ + app, + "page", + ], + }, + }, + async run({ $ }) { + const response = await this.app.searchCompanies({ + $, + query: this.query, + filters: this.filters, + limit: this.limit, + page: this.page, + }); + + $.export( + "$summary", + `Successfully searched companies with query: ${this.query}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/similar/similar.mjs b/components/tomba/actions/similar/similar.mjs new file mode 100644 index 0000000000000..cfe29c10528b5 --- /dev/null +++ b/components/tomba/actions/similar/similar.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-similar", + name: "Similar Domains", + description: + "Retrieve similar domains based on a specific domain. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.similar({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully found similar domains for: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/actions/technology/technology.mjs b/components/tomba/actions/technology/technology.mjs new file mode 100644 index 0000000000000..b75425ba7c03f --- /dev/null +++ b/components/tomba/actions/technology/technology.mjs @@ -0,0 +1,36 @@ +import app from "../../tomba.app.mjs"; + +export default { + key: "tomba-technology", + name: "Technology", + description: + "Retrieve the technologies used by a specific domain. [See the documentation](https://tomba.io/api)", + version: "0.0.1", + type: "action", + annotations: { + destructiveHint: false, + openWorldHint: true, + readOnlyHint: true, + }, + props: { + app, + domain: { + propDefinition: [ + app, + "domain", + ], + }, + }, + async run({ $ }) { + const response = await this.app.technology({ + $, + domain: this.domain, + }); + + $.export( + "$summary", + `Successfully retrieved technology stack for domain: ${this.domain}`, + ); + return response; + }, +}; diff --git a/components/tomba/package.json b/components/tomba/package.json index de5ab18cd0e92..50a9d576abd84 100644 --- a/components/tomba/package.json +++ b/components/tomba/package.json @@ -1,15 +1,27 @@ { "name": "@pipedream/tomba", - "version": "0.0.5", - "description": "Pipedream Tomba Components", + "version": "0.2.0", + "description": "Pipedream Tomba Components - Email finder, verifier, enrichment, company search, and account management tools", "main": "tomba.app.mjs", "keywords": [ "pipedream", - "tomba" + "tomba", + "email", + "finder", + "verifier", + "enrichment", + "domain", + "phone", + "linkedin", + "company", + "search" ], "homepage": "https://pipedream.com/apps/tomba", "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3" } } diff --git a/components/tomba/tomba.app.mjs b/components/tomba/tomba.app.mjs index 10a330dde8978..64b01a95f9d5a 100644 --- a/components/tomba/tomba.app.mjs +++ b/components/tomba/tomba.app.mjs @@ -1,11 +1,563 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "tomba", - propDefinitions: {}, + propDefinitions: { + domain: { + type: "string", + label: "Domain", + description: "The domain name to search (e.g., stripe.com)", + }, + email: { + type: "string", + label: "Email Address", + description: "The email address to verify or search", + }, + firstName: { + type: "string", + label: "First Name", + description: "The first name of the person", + }, + lastName: { + type: "string", + label: "Last Name", + description: "The last name of the person", + }, + linkedinUrl: { + type: "string", + label: "LinkedIn URL", + description: "The LinkedIn profile URL", + }, + blogUrl: { + type: "string", + label: "Blog Post URL", + description: "The blog post URL to find author email", + }, + phoneNumber: { + type: "string", + label: "Phone Number", + description: "The phone number to validate", + }, + country: { + type: "string", + label: "Country", + description: "Two-letter country code (e.g., US, UK, FR)", + optional: true, + }, + limit: { + type: "integer", + label: "Limit", + description: "Number of results to return (max 100)", + optional: true, + default: 10, + min: 1, + max: 100, + }, + query: { + type: "string", + label: "Search Query", + description: "Natural language query or structured search terms", + }, + filters: { + type: "object", + label: "Search Filters", + description: "Structured filters for company search", + optional: true, + }, + page: { + type: "integer", + label: "Page", + description: "Page number for pagination", + optional: true, + default: 1, + min: 1, + }, + limitDomainSearch: { + type: "string", + label: "Limit", + description: "Specifies the max number of email addresses to return.", + optional: true, + default: "10", + options: [ + "10", + "20", + "50", + ], + }, + department: { + type: "string", + label: "Department", + description: + "Get only email addresses for people working in the selected department(s).", + optional: true, + options: [ + "engineering", + "sales", + "finance", + "hr", + "it", + "marketing", + "operations", + "management", + "executive", + "legal", + "support", + "communication", + "software", + "security", + "pr", + "warehouse", + "diversity", + "administrative", + "facilities", + "accounting", + ], + }, + url: { + type: "string", + label: "URL", + description: "The URL to analyze or search", + }, + searchType: { + type: "string", + label: "Search Type", + description: "Choose the type of search to perform", + options: [ + { + label: "Search by Domain", + value: "domain", + }, + { + label: "Search by Email", + value: "email", + }, + { + label: "Search by LinkedIn URL", + value: "linkedin", + }, + ], + reloadProps: true, + default: "domain", + }, + companyName: { + type: "string", + label: "Company Name", + description: "The company name to search for", + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + /** + * Get the base URL for Tomba API + * @returns {string} The base URL for API requests + */ + _baseUrl() { + return "https://api.tomba.io/v1"; + }, + /** + * Get headers for API requests including authentication + * @returns {object} Headers object with API credentials + */ + _headers() { + return { + "X-Tomba-Key": this.$auth.api_key, + "X-Tomba-Secret": this.$auth.api_secret, + "User-Agent": "Pipedream/1.0", + "Accept": "application/json", + }; + }, + /** + * Make an HTTP request to the Tomba API + * @param {object} opts - Configuration options for the request + * @param {object} opts.$ - Pipedream step context + * @param {string} opts.path - API endpoint path + * @param {string} [opts.method=GET] - HTTP method + * @param {object} [opts.params] - Query parameters + * @param {object} [opts.data] - Request body data + * @returns {Promise} API response + */ + async _makeRequest({ + $ = this, path, ...opts + }) { + return axios($, { + url: `${this._baseUrl()}${path}`, + headers: this._headers(), + ...opts, + }); + }, + /** + * Find the most likely email address from a blog post URL + * @param {object} opts - Configuration options + * @param {object} opts.$ - Pipedream step context + * @param {string} opts.blogUrl - The blog post URL to analyze + * @returns {Promise} Author information and email address + */ + async authorFinder({ + $, blogUrl, ...opts + }) { + return this._makeRequest({ + $, + path: "/author-finder", + params: { + url: blogUrl, + ...opts, + }, + }); + }, + /** + * Get every email address found on the internet for a domain + * @param {string} opts.domain - The domain to search + * @param {number} [opts.limit=10] - Number of results to return + * @returns {Promise} Array of email addresses with sources + */ + async domainSearch({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/domain-search", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Get the status of a domain (e.g., if it's disposable or webmail) + * @param {string} opts.domain - The domain to check + * @returns {Promise} Domain status information + * @description This endpoint checks if a domain is disposable or webmail. + */ + async domainStatus({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/domain-status", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Get the number of email addresses found for a domain + * @param {string} opts.domain - The domain to check + * @returns {Promise} Email count information + * @description This endpoint retrieves the number of email addresses. + */ + async emailCount({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/email-count", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Enrich email data with additional information + * @param {string} opts.email - The email address to enrich + * @returns {Promise} Enriched email information + * @description This endpoint enriches email data with additional information. + */ + async emailEnrichment({ + $, email, ...opts + }) { + return this._makeRequest({ + $, + path: "/enrich", + params: { + email, + ...opts, + }, + }); + }, + /** + * Find the most likely email address from a domain name, first name, and last name + * @param {string} opts.domain - The domain name to use + * @param {string} opts.firstName - The first name of the person + * @param {string} opts.lastName - The last name of the person + * @returns {Promise} Email address information + * @description This endpoint generates or retrieves the most likely email address. + */ + async emailFinder({ + $, domain, firstName, lastName, ...opts + }) { + return this._makeRequest({ + $, + path: "/email-finder", + params: { + domain, + first_name: firstName, + last_name: lastName, + ...opts, + }, + }); + }, + /** + * Get the email format for a domain + * @param {string} opts.domain - The domain to check + * @returns {Promise} Email format information + * @description This endpoint retrieves the email format used by a specific domain. + */ + async emailFormat({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/email-format", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Get the email sources for a specific email address + * @param {string} opts.email - The email address to check + * @returns {Promise} Email sources information + * @description This endpoint retrieves the sources where a specific email address was found. + */ + async emailSources({ + $, email, ...opts + }) { + return this._makeRequest({ + $, + path: "/email-sources", + params: { + email, + ...opts, + }, + }); + }, + /** + * Verify the validity of an email address + * @param {string} opts.email - The email address to verify + * @returns {Promise} Email verification information + * @description This endpoint verifies the validity of an email address. + */ + async emailVerifier({ + $, email, ...opts + }) { + return this._makeRequest({ + $, + path: "/email-verifier", + params: { + email, + ...opts, + }, + }); + }, + /** + * Find a LinkedIn profile based on a LinkedIn URL + * @param {string} opts.linkedinUrl - The LinkedIn profile URL + * @returns {Promise} LinkedIn profile information + * @description This endpoint retrieves information from a LinkedIn profile URL. + */ + async linkedinFinder({ + $, linkedinUrl, ...opts + }) { + return this._makeRequest({ + $, + path: "/linkedin", + params: { + url: linkedinUrl, + ...opts, + }, + }); + }, + /** + * Get the location information for a specific domain + * @param {string} opts.domain - The domain to check + * @returns {Promise} Location information + * @description This endpoint retrieves location information associated with a specific domain. + */ + async location({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/location", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Find a phone number based on various parameters + * @param {string} [opts.domain] - The domain associated with the phone number + * @param {string} [opts.email] - The email address associated with the phone number + * @param {string} [opts.linkedinUrl] - The LinkedIn profile URL + * @returns {Promise} Phone number information + * @description This endpoint retrieves phone number information based on provided parameters. + */ + async phoneFinder({ + $, domain, email, linkedinUrl, ...opts + }) { + const params = {}; + if (domain) params.domain = domain; + if (email) params.email = email; + if (linkedinUrl) params.linkedin = linkedinUrl; + + return this._makeRequest({ + $, + path: "/phone-finder", + params: { + ...params, + ...opts, + }, + }); + }, + /** + * Validate a phone number + * @param {string} [opts.phoneNumber] - The phone number to validate + * @param {string} [opts.country] - The country code (e.g., US, UK) + * @returns {Promise} Phone validation information + * @description This endpoint validates a phone number. + */ + async phoneValidator({ + $, phoneNumber, country, ...opts + }) { + return this._makeRequest({ + $, + path: "/phone-validator", + params: { + phone: phoneNumber, + country, + ...opts, + }, + }); + }, + /** + * Find similar domains based on a specific domain + * @param {string} opts.domain - The domain to check + * @returns {Promise} Similar domain information + * @description This endpoint retrieves domains similar to a specified domain. + */ + async similar({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/similar", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Get technology stack information for a specific domain + * @param {string} opts.domain - The domain to check + * @returns {Promise} Technology stack information + * @description This endpoint retrieves technology stack information. + */ + async technology({ + $, domain, ...opts + }) { + return this._makeRequest({ + $, + path: "/technology", + params: { + domain, + ...opts, + }, + }); + }, + /** + * Get the account information for the authenticated user + * @returns {Promise} Account information + * @description This endpoint retrieves the account information for the authenticated user. + */ + async getAccount({ + $, ...opts + }) { + return this._makeRequest({ + $, + path: "/me", + ...opts, + }); + }, + /** + * Search for companies based on various parameters + * @param {*} param0 + * @returns {Promise} Company search results + * @description This endpoint searches for companies based on various parameters. + */ + async searchCompanies({ + $, query, filters, limit, page, ...opts + }) { + return this._makeRequest({ + $, + path: "/reveal/search", + method: "POST", + data: { + query, + filters, + limit, + page, + ...opts, + }, + }); + }, + /** + * Get domain suggestions based on a specific query + * @param {string} opts.query - The query to search for domain suggestions + * @returns {Promise} Domain suggestions + * @description This endpoint retrieves domain suggestions based on a specific query. + */ + async domainSuggestions({ + $, query, ...opts + }) { + return this._makeRequest({ + $, + path: "/domain-suggestions", + params: { + query, + ...opts, + }, + }); + }, + /** + * Get usage statistics for the authenticated user + * @returns {Promise} Usage statistics + * @description This endpoint retrieves usage statistics for the authenticated user. + */ + async getUsage({ + $, ...opts + }) { + return this._makeRequest({ + $, + path: "/usage", + params: { + ...opts, + }, + }); + }, + /** + * Get logs for the authenticated user + * @param {string} opts.limit - The maximum number of logs to retrieve + * @param {string} opts.page - The page number for pagination + * @returns {Promise} Logs information + * @description This endpoint retrieves logs for the authenticated user. + */ + async getLogs({ + $, limit, page, ...opts + }) { + return this._makeRequest({ + $, + path: "/logs", + params: { + limit, + page, + ...opts, + }, + }); }, }, }; From 211e18187e2e3a06e30f48f83d89aef6dd1c8b08 Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Thu, 16 Oct 2025 18:32:41 +0100 Subject: [PATCH 2/6] Fix offset calculation in getLogs action --- components/tomba/actions/get-logs/get-logs.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/tomba/actions/get-logs/get-logs.mjs b/components/tomba/actions/get-logs/get-logs.mjs index 67490223cbea6..e2261e63b313b 100644 --- a/components/tomba/actions/get-logs/get-logs.mjs +++ b/components/tomba/actions/get-logs/get-logs.mjs @@ -28,10 +28,12 @@ export default { }, }, async run({ $ }) { + const offset = (this.page - 1) * this.limit; + const response = await this.app.getLogs({ $, limit: this.limit, - offset: this.offset, + offset, }); $.export( From a6f37865227df9d1100a84478b31284f89d1e7d5 Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Thu, 16 Oct 2025 18:35:59 +0100 Subject: [PATCH 3/6] Refactor run method to consolidate parameters for phoneFinder action --- .../tomba/actions/phone-finder/phone-finder.mjs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/components/tomba/actions/phone-finder/phone-finder.mjs b/components/tomba/actions/phone-finder/phone-finder.mjs index 841aaab021e45..9633e1c87be0a 100644 --- a/components/tomba/actions/phone-finder/phone-finder.mjs +++ b/components/tomba/actions/phone-finder/phone-finder.mjs @@ -60,11 +60,18 @@ export default { return props; }, async run({ $ }) { + const params = {}; + if (this.searchType === "domain") { + params.domain = this.domain; + } else if (this.searchType === "email") { + params.email = this.email; + } else if (this.searchType === "linkedin") { + params.linkedinUrl = this.linkedinUrl; + } + const response = await this.app.phoneFinder({ $, - domain: this.domain, - email: this.email, - linkedinUrl: this.linkedinUrl, + params, }); const searchValue = this.domain || this.email || this.linkedinUrl; From ec0f6a3fb1839aaabd87d6ba52777cfde7adf945 Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Thu, 20 Nov 2025 13:09:27 +0100 Subject: [PATCH 4/6] Refactor action names for consistency and clarity across Tomba components --- .../actions/author-finder/author-finder.mjs | 4 +- .../actions/domain-search/domain-search.mjs | 4 +- .../actions/domain-status/domain-status.mjs | 4 +- .../domain-suggestions/domain-suggestions.mjs | 4 +- .../tomba/actions/email-count/email-count.mjs | 4 +- .../email-enrichment/email-enrichment.mjs | 4 +- .../actions/email-finder/email-finder.mjs | 4 +- .../actions/email-format/email-format.mjs | 4 +- .../actions/email-sources/email-sources.mjs | 4 +- .../actions/email-verifier/email-verifier.mjs | 4 +- .../linkedin-finder/linkedin-finder.mjs | 4 +- .../tomba/actions/location/location.mjs | 4 +- .../actions/phone-finder/phone-finder.mjs | 44 +++++-------------- .../phone-validator/phone-validator.mjs | 4 +- components/tomba/actions/similar/similar.mjs | 4 +- .../tomba/actions/technology/technology.mjs | 4 +- components/tomba/package.json | 2 +- components/tomba/tomba.app.mjs | 34 +++++++------- 18 files changed, 60 insertions(+), 80 deletions(-) diff --git a/components/tomba/actions/author-finder/author-finder.mjs b/components/tomba/actions/author-finder/author-finder.mjs index 51f7428ebba89..64a6847bfe990 100644 --- a/components/tomba/actions/author-finder/author-finder.mjs +++ b/components/tomba/actions/author-finder/author-finder.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-author-finder", - name: "Author Finder", + name: "Find Author", description: "Generate or retrieve the most likely email address from a blog post URL. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.authorFinder({ + const response = await this.app.findAuthor({ $, blogUrl: this.blogUrl, }); diff --git a/components/tomba/actions/domain-search/domain-search.mjs b/components/tomba/actions/domain-search/domain-search.mjs index 7c4e10f34791e..b51e0f84f7a98 100644 --- a/components/tomba/actions/domain-search/domain-search.mjs +++ b/components/tomba/actions/domain-search/domain-search.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-domain-search", - name: "Domain Search", + name: "Search Domain", description: "Get every email address found on the internet using a given domain name, with sources. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -46,7 +46,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.domainSearch({ + const response = await this.app.searchDomain({ $, domain: this.domain, page: this.page, diff --git a/components/tomba/actions/domain-status/domain-status.mjs b/components/tomba/actions/domain-status/domain-status.mjs index ef4c5b7553842..aede71b4aa0b6 100644 --- a/components/tomba/actions/domain-status/domain-status.mjs +++ b/components/tomba/actions/domain-status/domain-status.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-domain-status", - name: "Domain Status", + name: "Get Domain Status", description: "Find domain status if is webmail or disposable. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.domainStatus({ + const response = await this.app.getDomainStatus({ $, domain: this.domain, }); diff --git a/components/tomba/actions/domain-suggestions/domain-suggestions.mjs b/components/tomba/actions/domain-suggestions/domain-suggestions.mjs index 144882a798abc..75c51bc794263 100644 --- a/components/tomba/actions/domain-suggestions/domain-suggestions.mjs +++ b/components/tomba/actions/domain-suggestions/domain-suggestions.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-domain-suggestions", - name: "Domain Suggestions", + name: "Suggest Domains", description: "Retrieve a list of suggested domains similar to or related to your search query. This helps discover competitors, similar companies, and related businesses for market research and prospecting. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -23,7 +23,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.domainSuggestions({ + const response = await this.app.suggestDomains({ $, query: this.query, }); diff --git a/components/tomba/actions/email-count/email-count.mjs b/components/tomba/actions/email-count/email-count.mjs index 4f9e22f9f7ee1..242f467ac8817 100644 --- a/components/tomba/actions/email-count/email-count.mjs +++ b/components/tomba/actions/email-count/email-count.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-count", - name: "Email Count", + name: "Get Email Count", description: "Find total email addresses we have for one domain. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailCount({ + const response = await this.app.getEmailCount({ $, domain: this.domain, }); diff --git a/components/tomba/actions/email-enrichment/email-enrichment.mjs b/components/tomba/actions/email-enrichment/email-enrichment.mjs index 57847ef95239d..0026a04c247cc 100644 --- a/components/tomba/actions/email-enrichment/email-enrichment.mjs +++ b/components/tomba/actions/email-enrichment/email-enrichment.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-enrichment", - name: "Email Enrichment", + name: "Enrich Email", description: "Look up person and company data based on an email. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailEnrichment({ + const response = await this.app.enrichEmail({ $, email: this.email, }); diff --git a/components/tomba/actions/email-finder/email-finder.mjs b/components/tomba/actions/email-finder/email-finder.mjs index 2a1c808833ace..aef7bd718b352 100644 --- a/components/tomba/actions/email-finder/email-finder.mjs +++ b/components/tomba/actions/email-finder/email-finder.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-finder", - name: "Email Finder", + name: "Find Email", description: "Generate or retrieve the most likely email address from a domain name, a first name and a last name. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -34,7 +34,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailFinder({ + const response = await this.app.findEmail({ $, domain: this.domain, firstName: this.firstName, diff --git a/components/tomba/actions/email-format/email-format.mjs b/components/tomba/actions/email-format/email-format.mjs index 9fa61ba2a8c6c..c830fc3d38a5d 100644 --- a/components/tomba/actions/email-format/email-format.mjs +++ b/components/tomba/actions/email-format/email-format.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-format", - name: "Email Format", + name: "Get Email Format", description: "Retrieve the email format patterns used by a specific domain. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailFormat({ + const response = await this.app.getEmailFormat({ $, domain: this.domain, }); diff --git a/components/tomba/actions/email-sources/email-sources.mjs b/components/tomba/actions/email-sources/email-sources.mjs index b2de366b46c2e..c6c9f409c2c9a 100644 --- a/components/tomba/actions/email-sources/email-sources.mjs +++ b/components/tomba/actions/email-sources/email-sources.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-sources", - name: "Email Sources", + name: "Get Email Sources", description: "Find email address source somewhere on the web. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailSources({ + const response = await this.app.getEmailSources({ $, email: this.email, }); diff --git a/components/tomba/actions/email-verifier/email-verifier.mjs b/components/tomba/actions/email-verifier/email-verifier.mjs index 37279108b7dfc..52262097e177a 100644 --- a/components/tomba/actions/email-verifier/email-verifier.mjs +++ b/components/tomba/actions/email-verifier/email-verifier.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-email-verifier", - name: "Email Verifier", + name: "Verify Email", description: "Verify the deliverability of an email address. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.emailVerifier({ + const response = await this.app.verifyEmail({ $, email: this.email, }); diff --git a/components/tomba/actions/linkedin-finder/linkedin-finder.mjs b/components/tomba/actions/linkedin-finder/linkedin-finder.mjs index c43a6ea10c9b5..9a2cefb3a4420 100644 --- a/components/tomba/actions/linkedin-finder/linkedin-finder.mjs +++ b/components/tomba/actions/linkedin-finder/linkedin-finder.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-linkedin-finder", - name: "LinkedIn Finder", + name: "Find LinkedIn Email", description: "Generate or retrieve the most likely email address from a LinkedIn URL. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.linkedinFinder({ + const response = await this.app.findLinkedIn({ $, linkedinUrl: this.linkedinUrl, }); diff --git a/components/tomba/actions/location/location.mjs b/components/tomba/actions/location/location.mjs index ddb8a72e2b62c..b6d9b53e77a8f 100644 --- a/components/tomba/actions/location/location.mjs +++ b/components/tomba/actions/location/location.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-location", - name: "Location", + name: "Get Location", description: "Get employees location based on the domain name. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.location({ + const response = await this.app.getLocation({ $, domain: this.domain, }); diff --git a/components/tomba/actions/phone-finder/phone-finder.mjs b/components/tomba/actions/phone-finder/phone-finder.mjs index 9633e1c87be0a..b9a0fc6850843 100644 --- a/components/tomba/actions/phone-finder/phone-finder.mjs +++ b/components/tomba/actions/phone-finder/phone-finder.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-phone-finder", - name: "Phone Finder", + name: "Find Phone", description: "Search for phone numbers based on an email, domain, or LinkedIn URL. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -32,52 +32,32 @@ export default { value: "linkedin", }, ], - reloadProps: true, default: "domain", }, - }, - additionalProps() { - const props = {}; - if (this.searchType === "domain") { - props.domain = { - type: "string", - label: "Domain", - description: "The domain name to search (e.g., stripe.com)", - }; - } else if (this.searchType === "email") { - props.email = { - type: "string", - label: "Email Address", - description: "The email address to verify or search", - }; - } else if (this.searchType === "linkedin") { - props.linkedinUrl = { - type: "string", - label: "LinkedIn URL", - description: "The LinkedIn profile URL", - }; - } - return props; + search: { + type: "string", + label: "Search Input", + description: "Enter the domain, email address, or LinkedIn URL to search", + }, }, async run({ $ }) { const params = {}; if (this.searchType === "domain") { - params.domain = this.domain; + params.domain = this.search; } else if (this.searchType === "email") { - params.email = this.email; + params.email = this.search; } else if (this.searchType === "linkedin") { - params.linkedinUrl = this.linkedinUrl; + params.linkedinUrl = this.search; } - const response = await this.app.phoneFinder({ + const response = await this.app.findPhone({ $, - params, + ...params, }); - const searchValue = this.domain || this.email || this.linkedinUrl; $.export( "$summary", - `Successfully searched for phone numbers using ${this.searchType}: ${searchValue}`, + `Successfully searched for phone numbers using ${this.searchType}: ${this.search}`, ); return response; }, diff --git a/components/tomba/actions/phone-validator/phone-validator.mjs b/components/tomba/actions/phone-validator/phone-validator.mjs index 96691794747c7..d7d4a7a562add 100644 --- a/components/tomba/actions/phone-validator/phone-validator.mjs +++ b/components/tomba/actions/phone-validator/phone-validator.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-phone-validator", - name: "Phone Validator", + name: "Validate Phone", description: "Validate a phone number and retrieve its associated information. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -28,7 +28,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.phoneValidator({ + const response = await this.app.validatePhone({ $, phoneNumber: this.phoneNumber, country: this.country, diff --git a/components/tomba/actions/similar/similar.mjs b/components/tomba/actions/similar/similar.mjs index cfe29c10528b5..d8faad2acd78f 100644 --- a/components/tomba/actions/similar/similar.mjs +++ b/components/tomba/actions/similar/similar.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-similar", - name: "Similar Domains", + name: "Find Similar Domains", description: "Retrieve similar domains based on a specific domain. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.similar({ + const response = await this.app.findSimilarDomains({ $, domain: this.domain, }); diff --git a/components/tomba/actions/technology/technology.mjs b/components/tomba/actions/technology/technology.mjs index b75425ba7c03f..abc4712fe5171 100644 --- a/components/tomba/actions/technology/technology.mjs +++ b/components/tomba/actions/technology/technology.mjs @@ -2,7 +2,7 @@ import app from "../../tomba.app.mjs"; export default { key: "tomba-technology", - name: "Technology", + name: "Get Technology", description: "Retrieve the technologies used by a specific domain. [See the documentation](https://tomba.io/api)", version: "0.0.1", @@ -22,7 +22,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.technology({ + const response = await this.app.getTechnology({ $, domain: this.domain, }); diff --git a/components/tomba/package.json b/components/tomba/package.json index 50a9d576abd84..62a0b811c021c 100644 --- a/components/tomba/package.json +++ b/components/tomba/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/tomba", - "version": "0.2.0", + "version": "0.1.0", "description": "Pipedream Tomba Components - Email finder, verifier, enrichment, company search, and account management tools", "main": "tomba.app.mjs", "keywords": [ diff --git a/components/tomba/tomba.app.mjs b/components/tomba/tomba.app.mjs index 64b01a95f9d5a..b92bbc2a0956d 100644 --- a/components/tomba/tomba.app.mjs +++ b/components/tomba/tomba.app.mjs @@ -186,13 +186,13 @@ export default { }); }, /** - * Find the most likely email address from a blog post URL + * Find author email from blog post URL * @param {object} opts - Configuration options * @param {object} opts.$ - Pipedream step context * @param {string} opts.blogUrl - The blog post URL to analyze * @returns {Promise} Author information and email address */ - async authorFinder({ + async findAuthor({ $, blogUrl, ...opts }) { return this._makeRequest({ @@ -210,7 +210,7 @@ export default { * @param {number} [opts.limit=10] - Number of results to return * @returns {Promise} Array of email addresses with sources */ - async domainSearch({ + async searchDomain({ $, domain, ...opts }) { return this._makeRequest({ @@ -228,7 +228,7 @@ export default { * @returns {Promise} Domain status information * @description This endpoint checks if a domain is disposable or webmail. */ - async domainStatus({ + async getDomainStatus({ $, domain, ...opts }) { return this._makeRequest({ @@ -246,7 +246,7 @@ export default { * @returns {Promise} Email count information * @description This endpoint retrieves the number of email addresses. */ - async emailCount({ + async getEmailCount({ $, domain, ...opts }) { return this._makeRequest({ @@ -264,7 +264,7 @@ export default { * @returns {Promise} Enriched email information * @description This endpoint enriches email data with additional information. */ - async emailEnrichment({ + async enrichEmail({ $, email, ...opts }) { return this._makeRequest({ @@ -284,7 +284,7 @@ export default { * @returns {Promise} Email address information * @description This endpoint generates or retrieves the most likely email address. */ - async emailFinder({ + async findEmail({ $, domain, firstName, lastName, ...opts }) { return this._makeRequest({ @@ -304,7 +304,7 @@ export default { * @returns {Promise} Email format information * @description This endpoint retrieves the email format used by a specific domain. */ - async emailFormat({ + async getEmailFormat({ $, domain, ...opts }) { return this._makeRequest({ @@ -322,7 +322,7 @@ export default { * @returns {Promise} Email sources information * @description This endpoint retrieves the sources where a specific email address was found. */ - async emailSources({ + async getEmailSources({ $, email, ...opts }) { return this._makeRequest({ @@ -340,7 +340,7 @@ export default { * @returns {Promise} Email verification information * @description This endpoint verifies the validity of an email address. */ - async emailVerifier({ + async verifyEmail({ $, email, ...opts }) { return this._makeRequest({ @@ -358,7 +358,7 @@ export default { * @returns {Promise} LinkedIn profile information * @description This endpoint retrieves information from a LinkedIn profile URL. */ - async linkedinFinder({ + async findLinkedIn({ $, linkedinUrl, ...opts }) { return this._makeRequest({ @@ -376,7 +376,7 @@ export default { * @returns {Promise} Location information * @description This endpoint retrieves location information associated with a specific domain. */ - async location({ + async getLocation({ $, domain, ...opts }) { return this._makeRequest({ @@ -396,7 +396,7 @@ export default { * @returns {Promise} Phone number information * @description This endpoint retrieves phone number information based on provided parameters. */ - async phoneFinder({ + async findPhone({ $, domain, email, linkedinUrl, ...opts }) { const params = {}; @@ -420,7 +420,7 @@ export default { * @returns {Promise} Phone validation information * @description This endpoint validates a phone number. */ - async phoneValidator({ + async validatePhone({ $, phoneNumber, country, ...opts }) { return this._makeRequest({ @@ -439,7 +439,7 @@ export default { * @returns {Promise} Similar domain information * @description This endpoint retrieves domains similar to a specified domain. */ - async similar({ + async findSimilarDomains({ $, domain, ...opts }) { return this._makeRequest({ @@ -457,7 +457,7 @@ export default { * @returns {Promise} Technology stack information * @description This endpoint retrieves technology stack information. */ - async technology({ + async getTechnology({ $, domain, ...opts }) { return this._makeRequest({ @@ -511,7 +511,7 @@ export default { * @returns {Promise} Domain suggestions * @description This endpoint retrieves domain suggestions based on a specific query. */ - async domainSuggestions({ + async suggestDomains({ $, query, ...opts }) { return this._makeRequest({ From d4895ba5e9dabc2a07a74b893b07f48301aa30dc Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Thu, 20 Nov 2025 13:15:20 +0100 Subject: [PATCH 5/6] chore: update pnpm-lock.yaml --- pnpm-lock.yaml | 319 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 243 insertions(+), 76 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07fbf0d8b3272..e719653bfd9d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8374,7 +8374,7 @@ importers: dependencies: linkup-sdk: specifier: ^1.0.3 - version: 1.2.0(@types/node@20.19.25)(typescript@5.6.3) + version: 1.2.0(@types/node@22.19.1)(typescript@5.9.3) components/linkupapi: dependencies: @@ -15172,7 +15172,11 @@ importers: specifier: ^0.3.2 version: 0.3.4 - components/tomba: {} + components/tomba: + dependencies: + '@pipedream/platform': + specifier: ^3.0.3 + version: 3.1.1 components/tomtom: dependencies: @@ -17423,7 +17427,7 @@ importers: version: 3.1.11 ts-jest: specifier: ^29.2.5 - version: 29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(esbuild@0.25.12)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3)))(typescript@5.6.3) + version: 29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3)))(typescript@5.6.3) tsup: specifier: ^8.3.6 version: 8.5.0(@microsoft/api-extractor@7.55.0(@types/node@20.19.25))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.6.3)(yaml@2.8.1) @@ -22151,6 +22155,7 @@ packages: '@smithy/core@3.18.1': resolution: {integrity: sha512-IesyYrxNbuynvVHbCfFX7eh2d+S67BbvlUBwIAOV7pg1Pg7QgHZgHExq5E+EHwkuPL7xuljEPOEFbJvmMgs37g==} engines: {node: '>=18.0.0'} + deprecated: Please upgrade your lockfile to use the latest 3.x version of @smithy/core for various fixes, see https://github.com/smithy-lang/smithy-typescript/blob/main/packages/core/CHANGELOG.md '@smithy/credential-provider-imds@4.2.5': resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} @@ -34784,7 +34789,7 @@ snapshots: '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -34804,7 +34809,7 @@ snapshots: '@jridgewell/remapping': 2.3.5 '@types/gensync': 1.0.4 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 7.7.3 @@ -34881,7 +34886,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) lodash.debounce: 4.0.8 resolve: 1.22.11 transitivePeerDependencies: @@ -35646,7 +35651,7 @@ snapshots: '@babel/parser': 7.28.5 '@babel/template': 7.27.2 '@babel/types': 7.28.5 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -35658,7 +35663,7 @@ snapshots: '@babel/parser': 8.0.0-beta.3 '@babel/template': 8.0.0-beta.3 '@babel/types': 8.0.0-beta.3 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -35786,6 +35791,19 @@ snapshots: - '@types/node' - typescript + '@commitlint/cli@19.8.1(@types/node@22.19.1)(typescript@5.9.3)': + dependencies: + '@commitlint/format': 19.8.1 + '@commitlint/lint': 19.8.1 + '@commitlint/load': 19.8.1(@types/node@22.19.1)(typescript@5.9.3) + '@commitlint/read': 19.8.1 + '@commitlint/types': 19.8.1 + tinyexec: 1.0.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + '@commitlint/config-conventional@19.8.1': dependencies: '@commitlint/types': 19.8.1 @@ -35840,6 +35858,22 @@ snapshots: - '@types/node' - typescript + '@commitlint/load@19.8.1(@types/node@22.19.1)(typescript@5.9.3)': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/execute-rule': 19.8.1 + '@commitlint/resolve-extends': 19.8.1 + '@commitlint/types': 19.8.1 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@22.19.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + '@commitlint/message@19.8.1': {} '@commitlint/parse@19.8.1': @@ -36317,7 +36351,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -36331,7 +36365,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -36820,7 +36854,7 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -38536,7 +38570,7 @@ snapshots: '@pnpm/tabtab@0.5.4': dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) enquirer: 2.4.1 minimist: 1.2.8 untildify: 4.0.0 @@ -38617,7 +38651,7 @@ snapshots: '@puppeteer/browsers@2.10.13': dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 @@ -38710,7 +38744,7 @@ snapshots: '@putout/babel': 3.2.0 '@putout/engine-parser': 12.6.0 '@putout/operate': 13.5.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) jessy: 4.1.0 nessy: 5.3.0 transitivePeerDependencies: @@ -38721,7 +38755,7 @@ snapshots: '@putout/babel': 3.2.0 '@putout/engine-parser': 13.1.0(rolldown@1.0.0-beta.9)(rollup@4.53.2) '@putout/operate': 13.5.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) jessy: 4.1.0 nessy: 5.3.0 transitivePeerDependencies: @@ -38734,7 +38768,7 @@ snapshots: '@putout/babel': 4.5.2(rolldown@1.0.0-beta.9)(rollup@4.53.2) '@putout/engine-parser': 14.2.0(rolldown@1.0.0-beta.9)(rollup@4.53.2) '@putout/operate': 14.2.0(rolldown@1.0.0-beta.9)(rollup@4.53.2) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) jessy: 4.1.0 nessy: 5.3.0 transitivePeerDependencies: @@ -38831,7 +38865,7 @@ snapshots: '@putout/operator-filesystem': 9.0.1(putout@40.13.0(eslint@8.57.1)(rolldown@1.0.0-beta.9)(rollup@4.53.2)(typescript@5.6.3))(rolldown@1.0.0-beta.9)(rollup@4.53.2) '@putout/operator-json': 2.2.0 '@putout/plugin-filesystem': 11.0.1(putout@40.13.0(eslint@8.57.1)(rolldown@1.0.0-beta.9)(rollup@4.53.2)(typescript@5.6.3))(rolldown@1.0.0-beta.9)(rollup@4.53.2) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fullstore: 3.0.0 jessy: 4.1.0 nessy: 5.3.0 @@ -39994,7 +40028,7 @@ snapshots: conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) import-from-esm: 2.0.0 lodash-es: 4.17.21 micromatch: 4.0.8 @@ -40002,6 +40036,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.9(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 8.1.0 + conventional-changelog-writer: 8.2.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.1 + debug: 4.4.3(supports-color@9.4.0) + import-from-esm: 2.0.0 + lodash-es: 4.17.21 + micromatch: 4.0.8 + semantic-release: 24.2.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + '@semantic-release/error@4.0.0': {} '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.6.3))': @@ -40012,7 +40060,7 @@ snapshots: '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) dir-glob: 3.0.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -40026,6 +40074,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@semantic-release/github@11.0.6(semantic-release@24.2.9(typescript@5.9.3))': + dependencies: + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 13.2.1(@octokit/core@7.0.6) + '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6) + '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@9.4.0) + dir-glob: 3.0.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + issue-parser: 7.0.1 + lodash-es: 4.17.21 + mime: 4.1.0 + p-filter: 4.1.0 + semantic-release: 24.2.9(typescript@5.9.3) + tinyglobby: 0.2.15 + url-join: 5.0.0 + transitivePeerDependencies: + - supports-color + '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.6.3))': dependencies: '@semantic-release/error': 4.0.0 @@ -40043,13 +40113,30 @@ snapshots: semver: 7.7.3 tempy: 3.1.0 + '@semantic-release/npm@12.0.2(semantic-release@24.2.9(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + execa: 9.6.0 + fs-extra: 11.3.2 + lodash-es: 4.17.21 + nerf-dart: 1.0.0 + normalize-url: 8.1.0 + npm: 10.9.4 + rc: 1.2.8 + read-pkg: 9.0.1 + registry-auth-token: 5.1.0 + semantic-release: 24.2.9(typescript@5.9.3) + semver: 7.7.3 + tempy: 3.1.0 + '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.6.3))': dependencies: conventional-changelog-angular: 8.1.0 conventional-changelog-writer: 8.2.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) get-stream: 7.0.1 import-from-esm: 2.0.0 into-stream: 7.0.0 @@ -40059,6 +40146,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 8.1.0 + conventional-changelog-writer: 8.2.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.1 + debug: 4.4.3(supports-color@9.4.0) + get-stream: 7.0.1 + import-from-esm: 2.0.0 + into-stream: 7.0.0 + lodash-es: 4.17.21 + read-package-up: 11.0.0 + semantic-release: 24.2.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + '@sendgrid/client@7.7.0': dependencies: '@sendgrid/helpers': 7.7.0 @@ -40687,7 +40790,7 @@ snapshots: '@tokenizer/inflate@0.3.1': dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fflate: 0.8.2 token-types: 6.1.1 transitivePeerDependencies: @@ -41104,7 +41207,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) eslint: 8.57.1 typescript: 5.6.3 transitivePeerDependencies: @@ -41116,7 +41219,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) eslint: 8.57.1 typescript: 5.9.3 transitivePeerDependencies: @@ -41135,7 +41238,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.6.3) '@typescript-eslint/types': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -41144,7 +41247,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) '@typescript-eslint/types': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -41167,7 +41270,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.6.3) '@typescript-eslint/utils': 8.46.4(eslint@8.57.1)(typescript@5.6.3) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) eslint: 8.57.1 ts-api-utils: 2.1.0(typescript@5.6.3) typescript: 5.6.3 @@ -41179,7 +41282,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) '@typescript-eslint/utils': 8.46.4(eslint@8.57.1)(typescript@5.9.3) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) eslint: 8.57.1 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 @@ -41210,7 +41313,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.6.3) '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -41226,7 +41329,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -41265,7 +41368,7 @@ snapshots: '@typescript/vfs@1.6.2(typescript@5.4.5)': dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -41632,7 +41735,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -42390,7 +42493,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -43177,6 +43280,13 @@ snapshots: jiti: 2.6.1 typescript: 5.6.3 + cosmiconfig-typescript-loader@6.2.0(@types/node@22.19.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@types/node': 22.19.1 + cosmiconfig: 9.0.0(typescript@5.9.3) + jiti: 2.6.1 + typescript: 5.9.3 + cosmiconfig@5.2.1: dependencies: import-fresh: 2.0.0 @@ -43201,6 +43311,15 @@ snapshots: optionalDependencies: typescript: 5.6.3 + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + cp-file@6.2.0: dependencies: graceful-fs: 4.2.11 @@ -44318,7 +44437,7 @@ snapshots: eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) eslint: 8.57.1 get-tsconfig: 4.13.0 is-bun-module: 2.0.0 @@ -44591,7 +44710,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -44860,7 +44979,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -45176,7 +45295,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -45289,7 +45408,7 @@ snapshots: dependencies: '@putout/engine-loader': 16.2.1(putout@40.13.0(eslint@8.57.1)(rolldown@1.0.0-beta.9)(rollup@4.53.2)(typescript@5.6.3)) '@putout/operator-keyword': 2.2.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) js-tokens: 9.0.1 transitivePeerDependencies: - putout @@ -45311,7 +45430,7 @@ snapshots: follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) for-each@0.3.5: dependencies: @@ -45628,7 +45747,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -46370,14 +46489,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -46430,14 +46549,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -46525,7 +46644,7 @@ snapshots: import-from-esm@2.0.0: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) import-meta-resolve: 4.2.0 transitivePeerDependencies: - supports-color @@ -47048,7 +47167,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -47749,7 +47868,7 @@ snapshots: dependencies: '@types/express': 4.17.25 '@types/jsonwebtoken': 9.0.10 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) jose: 4.15.9 limiter: 1.1.5 lru-memoizer: 2.3.0 @@ -47928,6 +48047,20 @@ snapshots: - supports-color - typescript + linkup-sdk@1.2.0(@types/node@22.19.1)(typescript@5.9.3): + dependencies: + '@commitlint/cli': 19.8.1(@types/node@22.19.1)(typescript@5.9.3) + '@commitlint/config-conventional': 19.8.1 + axios: 1.13.2(debug@3.2.7) + semantic-release: 24.2.9(typescript@5.9.3) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - '@types/node' + - debug + - supports-color + - typescript + lint-staged@12.5.0(enquirer@2.4.1): dependencies: cli-truncate: 3.1.0 @@ -48170,7 +48303,7 @@ snapshots: log4js@6.4.4: dependencies: date-format: 4.0.14 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) flatted: 3.3.3 rfdc: 1.4.1 streamroller: 3.1.5 @@ -48751,7 +48884,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -48759,7 +48892,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -48951,7 +49084,7 @@ snapshots: mqtt-packet@6.10.0: dependencies: bl: 4.1.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) process-nextick-args: 2.0.1 transitivePeerDependencies: - supports-color @@ -48960,7 +49093,7 @@ snapshots: dependencies: commist: 1.1.0 concat-stream: 2.0.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) duplexify: 4.1.3 help-me: 3.0.0 inherits: 2.0.4 @@ -48999,7 +49132,7 @@ snapshots: dependencies: '@tediousjs/connection-string': 0.5.0 commander: 11.1.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) rfdc: 1.4.1 tarn: 3.0.2 tedious: 16.7.1 @@ -49146,7 +49279,7 @@ snapshots: content-type: 1.0.5 cookie: 1.0.2 cron-parser: 4.9.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) decache: 4.6.2 dot-prop: 9.0.0 dotenv: 17.2.3 @@ -49464,7 +49597,7 @@ snapshots: number-allocator@1.0.14: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) js-sdsl: 4.3.0 transitivePeerDependencies: - supports-color @@ -49919,7 +50052,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -50513,7 +50646,7 @@ snapshots: proxy-agent@6.5.0: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -50610,7 +50743,7 @@ snapshots: dependencies: '@puppeteer/browsers': 2.10.13 chromium-bidi: 10.5.1(devtools-protocol@0.0.1521046) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) devtools-protocol: 0.0.1521046 typed-query-selector: 2.12.0 webdriver-bidi-protocol: 0.3.8 @@ -50774,7 +50907,7 @@ snapshots: '@putout/traverse': 14.0.0(rolldown@1.0.0-beta.9)(rollup@4.53.2) ajv: 8.17.1 ci-info: 4.3.1 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) deepmerge: 4.3.1 escalade: 3.2.0 fast-glob: 3.3.3 @@ -51458,7 +51591,7 @@ snapshots: retry-request@5.0.2: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) extend: 3.0.2 transitivePeerDependencies: - supports-color @@ -51519,7 +51652,7 @@ snapshots: '@babel/types': 7.28.5 ast-kit: 2.2.0 birpc: 2.8.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) dts-resolver: 2.1.3 get-tsconfig: 4.13.0 rolldown: 1.0.0-beta.9 @@ -51588,7 +51721,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -51722,7 +51855,42 @@ snapshots: '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.6.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.0(typescript@5.6.3) - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) + env-ci: 11.2.0 + execa: 9.6.0 + figures: 6.1.0 + find-versions: 6.0.0 + get-stream: 6.0.1 + git-log-parser: 1.2.1 + hook-std: 4.0.0 + hosted-git-info: 8.1.0 + import-from-esm: 2.0.0 + lodash-es: 4.17.21 + marked: 15.0.12 + marked-terminal: 7.3.0(marked@15.0.12) + micromatch: 4.0.8 + p-each-series: 3.0.0 + p-reduce: 3.0.0 + read-package-up: 11.0.0 + resolve-from: 5.0.0 + semver: 7.7.3 + semver-diff: 5.0.0 + signale: 1.4.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + semantic-release@24.2.9(typescript@5.9.3): + dependencies: + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 11.0.6(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/npm': 12.0.2(semantic-release@24.2.9(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.0(semantic-release@24.2.9(typescript@5.9.3)) + aggregate-error: 5.0.0 + cosmiconfig: 9.0.0(typescript@5.9.3) + debug: 4.4.3(supports-color@9.4.0) env-ci: 11.2.0 execa: 9.6.0 figures: 6.1.0 @@ -51788,7 +51956,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -52073,7 +52241,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -52289,7 +52457,7 @@ snapshots: streamroller@3.1.5: dependencies: date-format: 4.0.14 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -52508,7 +52676,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.6.3) css-functions-list: 3.2.3 css-tree: 3.1.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 file-entry-cache: 10.1.4 @@ -52583,7 +52751,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) form-data: 2.5.4 formidable: 1.2.6 methods: 1.1.2 @@ -52597,7 +52765,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) fast-safe-stringify: 2.1.1 form-data: 3.0.4 formidable: 1.2.6 @@ -52944,7 +53112,7 @@ snapshots: dependencies: '@aws-sdk/client-s3': 3.929.0(aws-crt@1.27.5) '@aws-sdk/s3-request-presigner': 3.929.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) form-data: 4.0.4 got: 14.4.9 into-stream: 9.0.0 @@ -52997,7 +53165,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(esbuild@0.25.12)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3)))(typescript@5.6.3): + ts-jest@29.4.5(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -53015,7 +53183,6 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.28.5) - esbuild: 0.25.12 jest-util: 29.7.0 ts-jest@29.4.5(@babel/core@8.0.0-beta.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.0-beta.3))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.6.3)))(typescript@5.6.3): @@ -53124,7 +53291,7 @@ snapshots: ansis: 4.2.0 cac: 6.7.14 chokidar: 4.0.3 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) diff: 8.0.2 empathic: 1.1.0 hookable: 5.5.3 @@ -53189,7 +53356,7 @@ snapshots: cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) esbuild: 0.25.12 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 @@ -53218,7 +53385,7 @@ snapshots: cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) esbuild: 0.25.12 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 @@ -53894,7 +54061,7 @@ snapshots: '@volar/typescript': 2.4.23 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) kolorist: 1.8.0 local-pkg: 1.1.2 magic-string: 0.30.21 @@ -53926,7 +54093,7 @@ snapshots: dependencies: chalk: 4.1.2 commander: 9.5.0 - debug: 4.4.3(supports-color@5.5.0) + debug: 4.4.3(supports-color@9.4.0) transitivePeerDependencies: - supports-color From 06273ce7c1b372bfe3312511cce0a70c8962ccf6 Mon Sep 17 00:00:00 2001 From: Mohamed Ben Date: Sun, 30 Nov 2025 13:37:40 +0100 Subject: [PATCH 6/6] Refactor filenames --- .../enrich-email.mjs} | 4 ++-- .../author-finder.mjs => find-author/find-author.mjs} | 4 ++-- .../email-finder.mjs => find-email/find-email.mjs} | 4 ++-- .../find-linkedin-email.mjs} | 4 ++-- .../phone-finder.mjs => find-phone/find-phone.mjs} | 4 ++-- .../find-similar-domains.mjs} | 4 ++-- components/tomba/actions/get-account/get-account.mjs | 2 +- .../get-domain-status.mjs} | 4 ++-- .../get-domain-suggestions.mjs} | 8 ++++---- .../get-email-count.mjs} | 4 ++-- .../get-email-format.mjs} | 4 ++-- .../get-email-sources.mjs} | 4 ++-- .../location.mjs => get-location/get-location.mjs} | 4 ++-- components/tomba/actions/get-logs/get-logs.mjs | 2 +- .../technology.mjs => get-technology/get-technology.mjs} | 4 ++-- components/tomba/actions/get-usage/get-usage.mjs | 2 +- .../tomba/actions/search-companies/search-companies.mjs | 2 +- .../domain-search.mjs => search-domain/search-domain.mjs} | 4 ++-- .../validate-phone.mjs} | 4 ++-- .../email-verifier.mjs => verify-email/verify-email.mjs} | 4 ++-- components/tomba/tomba.app.mjs | 2 +- 21 files changed, 39 insertions(+), 39 deletions(-) rename components/tomba/actions/{email-enrichment/email-enrichment.mjs => enrich-email/enrich-email.mjs} (86%) rename components/tomba/actions/{author-finder/author-finder.mjs => find-author/find-author.mjs} (85%) rename components/tomba/actions/{email-finder/email-finder.mjs => find-email/find-email.mjs} (92%) rename components/tomba/actions/{linkedin-finder/linkedin-finder.mjs => find-linkedin-email/find-linkedin-email.mjs} (84%) rename components/tomba/actions/{phone-finder/phone-finder.mjs => find-phone/find-phone.mjs} (93%) rename components/tomba/actions/{similar/similar.mjs => find-similar-domains/find-similar-domains.mjs} (86%) rename components/tomba/actions/{domain-status/domain-status.mjs => get-domain-status/get-domain-status.mjs} (86%) rename components/tomba/actions/{domain-suggestions/domain-suggestions.mjs => get-domain-suggestions/get-domain-suggestions.mjs} (76%) rename components/tomba/actions/{email-count/email-count.mjs => get-email-count/get-email-count.mjs} (87%) rename components/tomba/actions/{email-format/email-format.mjs => get-email-format/get-email-format.mjs} (86%) rename components/tomba/actions/{email-sources/email-sources.mjs => get-email-sources/get-email-sources.mjs} (86%) rename components/tomba/actions/{location/location.mjs => get-location/get-location.mjs} (88%) rename components/tomba/actions/{technology/technology.mjs => get-technology/get-technology.mjs} (87%) rename components/tomba/actions/{domain-search/domain-search.mjs => search-domain/search-domain.mjs} (90%) rename components/tomba/actions/{phone-validator/phone-validator.mjs => validate-phone/validate-phone.mjs} (87%) rename components/tomba/actions/{email-verifier/email-verifier.mjs => verify-email/verify-email.mjs} (86%) diff --git a/components/tomba/actions/email-enrichment/email-enrichment.mjs b/components/tomba/actions/enrich-email/enrich-email.mjs similarity index 86% rename from components/tomba/actions/email-enrichment/email-enrichment.mjs rename to components/tomba/actions/enrich-email/enrich-email.mjs index 0026a04c247cc..6df5228e61fa0 100644 --- a/components/tomba/actions/email-enrichment/email-enrichment.mjs +++ b/components/tomba/actions/enrich-email/enrich-email.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-enrichment", + key: "tomba-enrich-email", name: "Enrich Email", description: - "Look up person and company data based on an email. [See the documentation](https://tomba.io/api)", + "Look up person and company data based on an email. [See the documentation](https://docs.tomba.io/api/finder#email-enrichment)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/author-finder/author-finder.mjs b/components/tomba/actions/find-author/find-author.mjs similarity index 85% rename from components/tomba/actions/author-finder/author-finder.mjs rename to components/tomba/actions/find-author/find-author.mjs index 64a6847bfe990..e58cac02b5132 100644 --- a/components/tomba/actions/author-finder/author-finder.mjs +++ b/components/tomba/actions/find-author/find-author.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-author-finder", + key: "tomba-find-author", name: "Find Author", description: - "Generate or retrieve the most likely email address from a blog post URL. [See the documentation](https://tomba.io/api)", + "Generate or retrieve the most likely email address from a blog post URL. [See the documentation](https://docs.tomba.io/api/finder#author-finder)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/email-finder/email-finder.mjs b/components/tomba/actions/find-email/find-email.mjs similarity index 92% rename from components/tomba/actions/email-finder/email-finder.mjs rename to components/tomba/actions/find-email/find-email.mjs index aef7bd718b352..73d883746070f 100644 --- a/components/tomba/actions/email-finder/email-finder.mjs +++ b/components/tomba/actions/find-email/find-email.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-finder", + key: "tomba-find-email", name: "Find Email", description: - "Generate or retrieve the most likely email address from a domain name, a first name and a last name. [See the documentation](https://tomba.io/api)", + "Generate or retrieve the most likely email address from a domain name, a first name and a last name. [See the documentation](https://docs.tomba.io/api/finder#email-finder)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/linkedin-finder/linkedin-finder.mjs b/components/tomba/actions/find-linkedin-email/find-linkedin-email.mjs similarity index 84% rename from components/tomba/actions/linkedin-finder/linkedin-finder.mjs rename to components/tomba/actions/find-linkedin-email/find-linkedin-email.mjs index 9a2cefb3a4420..0c8caa156637a 100644 --- a/components/tomba/actions/linkedin-finder/linkedin-finder.mjs +++ b/components/tomba/actions/find-linkedin-email/find-linkedin-email.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-linkedin-finder", + key: "tomba-find-linkedin-email", name: "Find LinkedIn Email", description: - "Generate or retrieve the most likely email address from a LinkedIn URL. [See the documentation](https://tomba.io/api)", + "Generate or retrieve the most likely email address from a LinkedIn URL. [See the documentation](https://docs.tomba.io/api/finder#linkedin-finder)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/phone-finder/phone-finder.mjs b/components/tomba/actions/find-phone/find-phone.mjs similarity index 93% rename from components/tomba/actions/phone-finder/phone-finder.mjs rename to components/tomba/actions/find-phone/find-phone.mjs index b9a0fc6850843..81d047269ab37 100644 --- a/components/tomba/actions/phone-finder/phone-finder.mjs +++ b/components/tomba/actions/find-phone/find-phone.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-phone-finder", + key: "tomba-find-phone", name: "Find Phone", description: - "Search for phone numbers based on an email, domain, or LinkedIn URL. [See the documentation](https://tomba.io/api)", + "Search for phone numbers based on an email, domain, or LinkedIn URL. [See the documentation](https://docs.tomba.io/api/phone#phone-finder)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/similar/similar.mjs b/components/tomba/actions/find-similar-domains/find-similar-domains.mjs similarity index 86% rename from components/tomba/actions/similar/similar.mjs rename to components/tomba/actions/find-similar-domains/find-similar-domains.mjs index d8faad2acd78f..2cdb707ed27b3 100644 --- a/components/tomba/actions/similar/similar.mjs +++ b/components/tomba/actions/find-similar-domains/find-similar-domains.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-similar", + key: "tomba-find-similar-domains", name: "Find Similar Domains", description: - "Retrieve similar domains based on a specific domain. [See the documentation](https://tomba.io/api)", + "Retrieve similar domains based on a specific domain. [See the documentation](https://docs.tomba.io/api/~endpoints#similar)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/get-account/get-account.mjs b/components/tomba/actions/get-account/get-account.mjs index e0ed74c9a09f1..b316cafa581c7 100644 --- a/components/tomba/actions/get-account/get-account.mjs +++ b/components/tomba/actions/get-account/get-account.mjs @@ -4,7 +4,7 @@ export default { key: "tomba-get-account", name: "Get Account", description: - "Returns information about the current account including usage statistics and plan details. [See the documentation](https://tomba.io/api)", + "Returns information about the current account including usage statistics and plan details. [See the documentation](https://docs.tomba.io/api/account#get-account)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/domain-status/domain-status.mjs b/components/tomba/actions/get-domain-status/get-domain-status.mjs similarity index 86% rename from components/tomba/actions/domain-status/domain-status.mjs rename to components/tomba/actions/get-domain-status/get-domain-status.mjs index aede71b4aa0b6..d9689b229525b 100644 --- a/components/tomba/actions/domain-status/domain-status.mjs +++ b/components/tomba/actions/get-domain-status/get-domain-status.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-domain-status", + key: "tomba-get-domain-status", name: "Get Domain Status", description: - "Find domain status if is webmail or disposable. [See the documentation](https://tomba.io/api)", + "Find domain status if is webmail or disposable. [See the documentation](https://docs.tomba.io/api/~endpoints#domain-status)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/domain-suggestions/domain-suggestions.mjs b/components/tomba/actions/get-domain-suggestions/get-domain-suggestions.mjs similarity index 76% rename from components/tomba/actions/domain-suggestions/domain-suggestions.mjs rename to components/tomba/actions/get-domain-suggestions/get-domain-suggestions.mjs index 75c51bc794263..266f0d7df0fc8 100644 --- a/components/tomba/actions/domain-suggestions/domain-suggestions.mjs +++ b/components/tomba/actions/get-domain-suggestions/get-domain-suggestions.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-domain-suggestions", - name: "Suggest Domains", + key: "tomba-get-domain-suggestions", + name: "Get Domain Suggestions", description: - "Retrieve a list of suggested domains similar to or related to your search query. This helps discover competitors, similar companies, and related businesses for market research and prospecting. [See the documentation](https://tomba.io/api)", + "Retrieve a list of suggested domains similar to or related to your search query. This helps discover competitors, similar companies, and related businesses for market research and prospecting. [See the documentation](https://docs.tomba.io/api/domain-suggestions#get-domain-suggestions)", version: "0.0.1", type: "action", annotations: { @@ -23,7 +23,7 @@ export default { }, }, async run({ $ }) { - const response = await this.app.suggestDomains({ + const response = await this.app.getDomainSuggestions({ $, query: this.query, }); diff --git a/components/tomba/actions/email-count/email-count.mjs b/components/tomba/actions/get-email-count/get-email-count.mjs similarity index 87% rename from components/tomba/actions/email-count/email-count.mjs rename to components/tomba/actions/get-email-count/get-email-count.mjs index 242f467ac8817..139d11663bf2b 100644 --- a/components/tomba/actions/email-count/email-count.mjs +++ b/components/tomba/actions/get-email-count/get-email-count.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-count", + key: "tomba-get-email-count", name: "Get Email Count", description: - "Find total email addresses we have for one domain. [See the documentation](https://tomba.io/api)", + "Find total email addresses we have for one domain. [See the documentation](https://docs.tomba.io/api/finder#email-count)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/email-format/email-format.mjs b/components/tomba/actions/get-email-format/get-email-format.mjs similarity index 86% rename from components/tomba/actions/email-format/email-format.mjs rename to components/tomba/actions/get-email-format/get-email-format.mjs index c830fc3d38a5d..6f816a8548a07 100644 --- a/components/tomba/actions/email-format/email-format.mjs +++ b/components/tomba/actions/get-email-format/get-email-format.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-format", + key: "tomba-get-email-format", name: "Get Email Format", description: - "Retrieve the email format patterns used by a specific domain. [See the documentation](https://tomba.io/api)", + "Retrieve the email format patterns used by a specific domain. [See the documentation](https://docs.tomba.io/api/finder#email-format)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/email-sources/email-sources.mjs b/components/tomba/actions/get-email-sources/get-email-sources.mjs similarity index 86% rename from components/tomba/actions/email-sources/email-sources.mjs rename to components/tomba/actions/get-email-sources/get-email-sources.mjs index c6c9f409c2c9a..0654afc80b014 100644 --- a/components/tomba/actions/email-sources/email-sources.mjs +++ b/components/tomba/actions/get-email-sources/get-email-sources.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-sources", + key: "tomba-get-email-sources", name: "Get Email Sources", description: - "Find email address source somewhere on the web. [See the documentation](https://tomba.io/api)", + "Find email address source somewhere on the web. [See the documentation](https://docs.tomba.io/api/~endpoints#email-sources)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/location/location.mjs b/components/tomba/actions/get-location/get-location.mjs similarity index 88% rename from components/tomba/actions/location/location.mjs rename to components/tomba/actions/get-location/get-location.mjs index b6d9b53e77a8f..bf740c8363c8c 100644 --- a/components/tomba/actions/location/location.mjs +++ b/components/tomba/actions/get-location/get-location.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-location", + key: "tomba-get-location", name: "Get Location", description: - "Get employees location based on the domain name. [See the documentation](https://tomba.io/api)", + "Get employees location based on the domain name. [See the documentation](https://docs.tomba.io/api/finder#location)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/get-logs/get-logs.mjs b/components/tomba/actions/get-logs/get-logs.mjs index e2261e63b313b..12033c10a5fc3 100644 --- a/components/tomba/actions/get-logs/get-logs.mjs +++ b/components/tomba/actions/get-logs/get-logs.mjs @@ -4,7 +4,7 @@ export default { key: "tomba-get-logs", name: "Get Logs", description: - "Retrieve API request logs for your account with pagination support. [See the documentation](https://tomba.io/api)", + "Retrieve API request logs for your account with pagination support. [See the documentation](https://docs.tomba.io/api/account#retrieve-api-logs)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/technology/technology.mjs b/components/tomba/actions/get-technology/get-technology.mjs similarity index 87% rename from components/tomba/actions/technology/technology.mjs rename to components/tomba/actions/get-technology/get-technology.mjs index abc4712fe5171..f534e873856de 100644 --- a/components/tomba/actions/technology/technology.mjs +++ b/components/tomba/actions/get-technology/get-technology.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-technology", + key: "tomba-get-technology", name: "Get Technology", description: - "Retrieve the technologies used by a specific domain. [See the documentation](https://tomba.io/api)", + "Retrieve the technologies used by a specific domain. [See the documentation](https://docs.tomba.io/api/~endpoints#technology)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/get-usage/get-usage.mjs b/components/tomba/actions/get-usage/get-usage.mjs index 5521624662788..5edee346f4171 100644 --- a/components/tomba/actions/get-usage/get-usage.mjs +++ b/components/tomba/actions/get-usage/get-usage.mjs @@ -4,7 +4,7 @@ export default { key: "tomba-get-usage", name: "Get Usage", description: - "Retrieve API usage statistics and quota information for your account. [See the documentation](https://tomba.io/api)", + "Retrieve API usage statistics and quota information for your account. [See the documentation](https://docs.tomba.io/api/account#retrieve-api-usage)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/search-companies/search-companies.mjs b/components/tomba/actions/search-companies/search-companies.mjs index d6f08fcd028dc..2d741f06b809c 100644 --- a/components/tomba/actions/search-companies/search-companies.mjs +++ b/components/tomba/actions/search-companies/search-companies.mjs @@ -4,7 +4,7 @@ export default { key: "tomba-search-companies", name: "Search Companies", description: - "Search for companies using natural language queries or structured filters. The AI assistant will automatically generate appropriate filters from your query. [See the documentation](https://tomba.io/api)", + "Search for companies using natural language queries or structured filters. The AI assistant will automatically generate appropriate filters from your query. [See the documentation](https://docs.tomba.io/api/reveal#search-companies)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/domain-search/domain-search.mjs b/components/tomba/actions/search-domain/search-domain.mjs similarity index 90% rename from components/tomba/actions/domain-search/domain-search.mjs rename to components/tomba/actions/search-domain/search-domain.mjs index b51e0f84f7a98..14f94f1b1ee5f 100644 --- a/components/tomba/actions/domain-search/domain-search.mjs +++ b/components/tomba/actions/search-domain/search-domain.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-domain-search", + key: "tomba-search-domain", name: "Search Domain", description: - "Get every email address found on the internet using a given domain name, with sources. [See the documentation](https://tomba.io/api)", + "Get every email address found on the internet using a given domain name, with sources. [See the documentation](https://docs.tomba.io/api/finder#domain-search)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/phone-validator/phone-validator.mjs b/components/tomba/actions/validate-phone/validate-phone.mjs similarity index 87% rename from components/tomba/actions/phone-validator/phone-validator.mjs rename to components/tomba/actions/validate-phone/validate-phone.mjs index d7d4a7a562add..72bb44098023c 100644 --- a/components/tomba/actions/phone-validator/phone-validator.mjs +++ b/components/tomba/actions/validate-phone/validate-phone.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-phone-validator", + key: "tomba-validate-phone", name: "Validate Phone", description: - "Validate a phone number and retrieve its associated information. [See the documentation](https://tomba.io/api)", + "Validate a phone number and retrieve its associated information. [See the documentation](https://docs.tomba.io/api/phone#phone-validator)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/actions/email-verifier/email-verifier.mjs b/components/tomba/actions/verify-email/verify-email.mjs similarity index 86% rename from components/tomba/actions/email-verifier/email-verifier.mjs rename to components/tomba/actions/verify-email/verify-email.mjs index 52262097e177a..7aaccd4bd2b30 100644 --- a/components/tomba/actions/email-verifier/email-verifier.mjs +++ b/components/tomba/actions/verify-email/verify-email.mjs @@ -1,10 +1,10 @@ import app from "../../tomba.app.mjs"; export default { - key: "tomba-email-verifier", + key: "tomba-verify-email", name: "Verify Email", description: - "Verify the deliverability of an email address. [See the documentation](https://tomba.io/api)", + "Verify the deliverability of an email address. [See the documentation](https://docs.tomba.io/api/verifier#email-verifier)", version: "0.0.1", type: "action", annotations: { diff --git a/components/tomba/tomba.app.mjs b/components/tomba/tomba.app.mjs index b92bbc2a0956d..349f8fb693f88 100644 --- a/components/tomba/tomba.app.mjs +++ b/components/tomba/tomba.app.mjs @@ -511,7 +511,7 @@ export default { * @returns {Promise} Domain suggestions * @description This endpoint retrieves domain suggestions based on a specific query. */ - async suggestDomains({ + async getDomainSuggestions({ $, query, ...opts }) { return this._makeRequest({