-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Add new Tomba email, domain and phone actions #18784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
- 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.
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Thank you so much for submitting this! We've added it to our backlog to review, and our team has been notified. |
Thanks for submitting this PR! When we review PRs, we follow the Pipedream component guidelines. If you're not familiar, here's a quick checklist:
|
WalkthroughThis PR adds ~24 new Tomba action modules, expands the tomba.app.mjs with comprehensive propDefinitions, request helpers, and ~21 new API operation methods, updates package metadata (version, deps, keywords), and rewrites the component README with expanded usage and troubleshooting guidance. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Action
participant App
participant API
User->>Action: Invoke action with params
Action->>App: this.app.<operation>({ $, ...params })
App->>App: Build headers & path via _headers/_baseUrl
App->>API: _makeRequest -> HTTP call
API-->>App: Return response
App-->>Action: Return response payload
Action->>Action: $.export("$summary", "...")
Action-->>User: Return response
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
components/tomba/actions/phone-finder/phone-finder.mjs (1)
62-76
: LGTM! Consider making parameter passing more explicit.The implementation works correctly. The
phoneFinder
method receives all three parameters (domain, email, linkedinUrl), with only the relevant one populated based onsearchType
. While functional, you could optionally make this more explicit by conditionally building the parameters object.Optional refactor to be more explicit about which parameter is passed:
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, - }); + const response = await this.app.phoneFinder(params); const searchValue = this.domain || this.email || this.linkedinUrl;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (23)
components/tomba/README.md
(1 hunks)components/tomba/actions/author-finder/author-finder.mjs
(1 hunks)components/tomba/actions/domain-search/domain-search.mjs
(1 hunks)components/tomba/actions/domain-status/domain-status.mjs
(1 hunks)components/tomba/actions/domain-suggestions/domain-suggestions.mjs
(1 hunks)components/tomba/actions/email-count/email-count.mjs
(1 hunks)components/tomba/actions/email-enrichment/email-enrichment.mjs
(1 hunks)components/tomba/actions/email-finder/email-finder.mjs
(1 hunks)components/tomba/actions/email-format/email-format.mjs
(1 hunks)components/tomba/actions/email-sources/email-sources.mjs
(1 hunks)components/tomba/actions/email-verifier/email-verifier.mjs
(1 hunks)components/tomba/actions/get-account/get-account.mjs
(1 hunks)components/tomba/actions/get-logs/get-logs.mjs
(1 hunks)components/tomba/actions/get-usage/get-usage.mjs
(1 hunks)components/tomba/actions/linkedin-finder/linkedin-finder.mjs
(1 hunks)components/tomba/actions/location/location.mjs
(1 hunks)components/tomba/actions/phone-finder/phone-finder.mjs
(1 hunks)components/tomba/actions/phone-validator/phone-validator.mjs
(1 hunks)components/tomba/actions/search-companies/search-companies.mjs
(1 hunks)components/tomba/actions/similar/similar.mjs
(1 hunks)components/tomba/actions/technology/technology.mjs
(1 hunks)components/tomba/package.json
(1 hunks)components/tomba/tomba.app.mjs
(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (18)
components/tomba/actions/email-sources/email-sources.mjs (3)
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
response
(25-28)components/tomba/actions/email-finder/email-finder.mjs (1)
response
(37-42)components/tomba/actions/email-verifier/email-verifier.mjs (1)
response
(25-28)
components/tomba/actions/phone-finder/phone-finder.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/email-finder/email-finder.mjs (1)
response
(37-42)components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
response
(25-28)
components/tomba/actions/search-companies/search-companies.mjs (2)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/domain-suggestions/domain-suggestions.mjs (1)
response
(26-29)
components/tomba/actions/technology/technology.mjs (4)
components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)components/tomba/actions/email-format/email-format.mjs (1)
response
(25-28)components/tomba/actions/location/location.mjs (1)
response
(25-28)
components/tomba/actions/author-finder/author-finder.mjs (1)
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
response
(25-28)
components/tomba/actions/domain-status/domain-status.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)components/tomba/actions/location/location.mjs (1)
response
(25-28)
components/tomba/actions/get-logs/get-logs.mjs (1)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)
components/tomba/actions/email-format/email-format.mjs (3)
components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)components/tomba/actions/email-finder/email-finder.mjs (1)
response
(37-42)
components/tomba/actions/similar/similar.mjs (5)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)components/tomba/actions/email-format/email-format.mjs (1)
response
(25-28)components/tomba/actions/location/location.mjs (1)
response
(25-28)
components/tomba/actions/domain-suggestions/domain-suggestions.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/get-account/get-account.mjs (1)
response
(19-21)
components/tomba/actions/email-verifier/email-verifier.mjs (2)
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
response
(25-28)components/tomba/actions/email-sources/email-sources.mjs (1)
response
(25-28)
components/tomba/actions/get-account/get-account.mjs (1)
components/tomba/actions/get-usage/get-usage.mjs (1)
response
(19-21)
components/tomba/actions/location/location.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
response
(49-56)components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)
components/tomba/actions/get-usage/get-usage.mjs (1)
components/tomba/actions/get-account/get-account.mjs (1)
response
(19-21)
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
components/tomba/actions/phone-finder/phone-finder.mjs (1)
response
(63-68)
components/tomba/actions/email-finder/email-finder.mjs (4)
components/tomba/actions/email-count/email-count.mjs (1)
response
(25-28)components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
response
(25-28)components/tomba/actions/email-verifier/email-verifier.mjs (1)
response
(25-28)components/tomba/actions/phone-finder/phone-finder.mjs (1)
response
(63-68)
components/tomba/actions/email-enrichment/email-enrichment.mjs (2)
components/tomba/actions/email-sources/email-sources.mjs (1)
response
(25-28)components/tomba/actions/email-verifier/email-verifier.mjs (1)
response
(25-28)
components/tomba/actions/email-count/email-count.mjs (3)
components/tomba/actions/domain-status/domain-status.mjs (1)
response
(25-28)components/tomba/actions/email-format/email-format.mjs (1)
response
(25-28)components/tomba/actions/location/location.mjs (1)
response
(25-28)
🔇 Additional comments (17)
components/tomba/README.md (1)
3-50
: Expanded README clearly communicates the new action surfaceThe updated overview, use cases, onboarding steps, and troubleshooting guidance align well with the broadened Tomba integration and give users a clear path to success. Nicely done.
components/tomba/package.json (1)
1-27
: LGTM! Package metadata appropriately updated.The version bump to 0.2.0, expanded description, comprehensive keywords, and addition of the @pipedream/platform dependency are all appropriate for this feature expansion.
components/tomba/actions/technology/technology.mjs (1)
1-36
: LGTM! Clean action implementation.The action follows Pipedream conventions with proper metadata, propDefinitions, and a clear summary message. The structure is consistent with other actions in this PR.
components/tomba/actions/email-verifier/email-verifier.mjs (1)
1-33
: LGTM! Consistent action implementation.The email verification action follows the established pattern and correctly uses propDefinitions from the app module.
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
1-36
: LGTM! Well-structured LinkedIn finder action.The implementation correctly follows Pipedream conventions and maintains consistency with other actions in this PR.
components/tomba/actions/phone-validator/phone-validator.mjs (1)
1-43
: LGTM! Phone validator action properly implemented.The action correctly handles multiple parameters (phoneNumber and country) and follows the established pattern across all Tomba actions.
components/tomba/actions/email-count/email-count.mjs (1)
1-36
: LGTM! Consistent domain-based action.The email count action follows the same reliable pattern as other domain-based actions in this PR (technology, location, domain-status, email-format).
components/tomba/actions/location/location.mjs (1)
1-36
: LGTM! Location action properly structured.The implementation is consistent with other domain-based actions and correctly retrieves employee location data for a given domain.
components/tomba/actions/domain-search/domain-search.mjs (2)
60-62
: Excellent use of optional chaining for defensive coding.The defensive use of optional chaining (
response.data?.emails?.length || 0
) prevents potential runtime errors if the API response structure varies. This pattern could be beneficial in other actions' summaries that display dynamic data.
48-66
: No changes needed for optional props.page
,country
,department
, andlimitDomainSearch
are all markedoptional: true
in the app’s prop definitions.components/tomba/actions/phone-finder/phone-finder.mjs (1)
39-61
: LGTM! Clean dynamic prop implementation.The
additionalProps()
method correctly exposes the appropriate input field based on the selected search type.components/tomba/actions/get-account/get-account.mjs (1)
3-26
: LGTM!Clean implementation following the standard action pattern.
components/tomba/actions/email-sources/email-sources.mjs (1)
3-33
: LGTM!Clean implementation with proper use of propDefinitions.
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
3-33
: LGTM!Clean implementation following the established pattern.
components/tomba/actions/get-usage/get-usage.mjs (1)
3-26
: LGTM!Clean implementation following the standard action pattern.
components/tomba/actions/email-format/email-format.mjs (1)
3-36
: LGTM!Clean implementation following the established pattern.
components/tomba/actions/search-companies/search-companies.mjs (1)
3-59
: LGTM!Clean implementation with proper use of multiple propDefinitions.
async run({ $ }) { | ||
const response = await this.app.getLogs({ | ||
$, | ||
limit: this.limit, | ||
offset: this.offset, | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix undefined variable reference.
Line 34 references this.offset
, which is not defined in the props. This will result in undefined
being passed to the API.
Apply this diff to calculate the offset from page and limit:
async run({ $ }) {
+ const offset = (this.page - 1) * this.limit;
+
const response = await this.app.getLogs({
$,
limit: this.limit,
- offset: this.offset,
+ offset,
});
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
async run({ $ }) { | |
const response = await this.app.getLogs({ | |
$, | |
limit: this.limit, | |
offset: this.offset, | |
}); | |
async run({ $ }) { | |
const offset = (this.page - 1) * this.limit; | |
const response = await this.app.getLogs({ | |
$, | |
limit: this.limit, | |
offset, | |
}); |
🤖 Prompt for AI Agents
In components/tomba/actions/get-logs/get-logs.mjs around lines 30 to 35, the
code passes this.offset which is not a defined prop; compute offset from the
page and limit props and pass that instead — e.g., derive page = this.page || 1,
compute offset = (page - 1) * this.limit, and use that computed offset in the
call to this.app.getLogs so undefined is never sent to the API.
new Actions
WHY
providing email finder, verification, and enrichment capabilities to Pipedream users.
Summary by CodeRabbit
New Features
Documentation