-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Yay.com new components #17354
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
Yay.com new components #17354
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ |
WalkthroughThis update introduces several new modules for yayCom integration, including actions to create outbound calls, retrieve documents, and fetch phone books. It also adds a polling source for detecting new contacts, a comprehensive yayCom app module with prop definitions and API methods, and updates the package dependencies and version. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Action
participant yayCom App
participant yayCom API
User->>Action: Trigger "Create Outbound Call"
Action->>yayCom App: Call createOutboundCall(userUuid, destination, targets)
yayCom App->>yayCom API: POST /calls/outbound with payload
yayCom API-->>yayCom App: Response
yayCom App-->>Action: Return API response
Action-->>User: Output summary and response
sequenceDiagram
participant Source
participant yayCom App
participant yayCom API
participant User
Source->>yayCom App: listPhoneBookContacts(phoneBookId)
yayCom App->>yayCom API: GET /phonebooks/{id}/contacts
yayCom API-->>yayCom App: Return contacts
yayCom App-->>Source: Return contacts
Source->>User: Emit event for each new contact
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
components/yay_com/actions/create-outbound-call/create-outbound-call.mjsOops! Something went wrong! :( ESLint: 8.57.1 Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs components/yay_com/actions/get-phone-books/get-phone-books.mjsOops! Something went wrong! :( ESLint: 8.57.1 Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs components/yay_com/actions/get-documents/get-documents.mjsOops! Something went wrong! :( ESLint: 8.57.1 Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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 (4)
components/yay_com/yay_com.app.mjs (2)
44-44: Remove redundant parameter in phone book contact request.The
uuidparameter appears redundant sincephoneBookIdis already being passed as a path parameter.Consider whether the
uuidparameter in the query params is necessary:async listPhoneBookContacts({ phoneBookId, ...args }) { return this._makeRequest({ path: `/voip/phone-book/${phoneBookId}`, - // Remove uuid param if redundant with path parameter ...args, }); },
73-88: Consider adding error handling to the request method.The
_makeRequestmethod lacks explicit error handling, which could make debugging API issues more difficult for users.Consider adding error handling:
async _makeRequest({ $ = this, path, headers, ...args }) { + try { const response = await axios($, { url: `${this._getBaseUrl()}${path}`, headers: { ...headers, ...this._getHeaders(), }, ...args, }); return response.result; + } catch (error) { + console.error(`yayCom API request failed: ${error.message}`); + throw error; + } },components/yay_com/sources/new-contact-added/new-contact-added.mjs (2)
41-45: Remove redundant UUID parameter from API request.The
uuidparameter in the params object appears redundant sincephoneBookIdis already used as the path parameter in the API call.async getItems() { const { phoneBookId } = this; const contacts = await this.yayCom.listPhoneBookContacts({ phoneBookId, params: { sort: "id", limit: 100, - uuid: phoneBookId, }, }); return contacts || []; },
22-29: Consider using contact creation timestamp if available.The metadata uses
Date.now()for the timestamp, but if the contact has an actual creation timestamp, that would be more accurate for event ordering.If the yayCom API provides contact creation timestamps, consider using them:
generateMeta(contact) { const name = this.getItemId(contact); return { id: name, summary: `New Contact: ${name}`, - ts: Date.now(), + ts: contact.created_at ? Date.parse(contact.created_at) : Date.now(), }; },
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (7)
components/yay_com/actions/create-outbound-call/create-outbound-call.mjs(1 hunks)components/yay_com/actions/get-documents/get-documents.mjs(1 hunks)components/yay_com/actions/get-phone-books/get-phone-books.mjs(1 hunks)components/yay_com/package.json(2 hunks)components/yay_com/sources/common/polling.mjs(1 hunks)components/yay_com/sources/new-contact-added/new-contact-added.mjs(1 hunks)components/yay_com/yay_com.app.mjs(1 hunks)
🧰 Additional context used
🧠 Learnings (7)
components/yay_com/package.json (1)
Learnt from: jcortes
PR: PipedreamHQ/pipedream#14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like `fs` to `package.json` dependencies, as they are native modules provided by the Node.js runtime.
components/yay_com/actions/get-phone-books/get-phone-books.mjs (3)
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-07-04T18:11:59.822Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.
Learnt from: jcortes
PR: PipedreamHQ/pipedream#14467
File: components/gainsight_px/actions/create-account/create-account.mjs:4-6
Timestamp: 2024-10-30T15:24:39.294Z
Learning: In `components/gainsight_px/actions/create-account/create-account.mjs`, the action name should be "Create Account" instead of "Create Memory".
components/yay_com/sources/common/polling.mjs (2)
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In `components/the_magic_drip/sources/common.mjs`, when processing items in `getAndProcessData`, `savedIds` is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12697
File: components/salesforce_rest_api/sources/common.mjs:97-98
Timestamp: 2024-07-24T02:05:59.531Z
Learning: The `processTimerEvent` method in the `components/salesforce_rest_api/sources/common.mjs` file is intentionally left unimplemented to enforce that subclasses must implement this method, similar to an abstract class in object-oriented programming.
components/yay_com/actions/get-documents/get-documents.mjs (2)
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-07-04T18:11:59.822Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.
components/yay_com/yay_com.app.mjs (2)
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#16954
File: components/salesloft/salesloft.app.mjs:14-23
Timestamp: 2025-06-04T17:52:05.780Z
Learning: In the Salesloft API integration (components/salesloft/salesloft.app.mjs), the _makeRequest method returns response.data which directly contains arrays for list endpoints like listPeople, listCadences, listUsers, and listAccounts. The propDefinitions correctly call .map() directly on these responses without needing to destructure a nested data property.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#16954
File: components/salesloft/salesloft.app.mjs:14-23
Timestamp: 2025-06-04T17:52:05.780Z
Learning: The Salesloft API list endpoints (listPeople, listCadences, listUsers, listAccounts) return arrays directly in the response body, not wrapped in a metadata object with a nested data property. The _makeRequest method correctly returns response.data which contains the arrays that can be mapped over directly in propDefinitions.
components/yay_com/sources/new-contact-added/new-contact-added.mjs (4)
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In `components/the_magic_drip/sources/common.mjs`, when processing items in `getAndProcessData`, `savedIds` is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The `common-webhook-methods.mjs` object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like `generateWebhookMeta` and `getEventType` to enforce implementation in subclasses.
Learnt from: GTFalcao
PR: PipedreamHQ/pipedream#12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The `common-webhook-methods.mjs` object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like `generateWebhookMeta` and `getEventType` to enforce implementation in subclasses.
components/yay_com/actions/create-outbound-call/create-outbound-call.mjs (1)
Learnt from: jcortes
PR: PipedreamHQ/pipedream#14467
File: components/gainsight_px/actions/create-account/create-account.mjs:4-6
Timestamp: 2024-10-30T15:24:39.294Z
Learning: In `components/gainsight_px/actions/create-account/create-account.mjs`, the action name should be "Create Account" instead of "Create Memory".
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: Lint Code Base
- GitHub Check: Publish TypeScript components
- GitHub Check: Verify TypeScript components
- GitHub Check: pnpm publish
🔇 Additional comments (9)
components/yay_com/package.json (2)
3-3: Version bump looks appropriate.The version update from "0.0.1" to "0.1.0" correctly reflects the addition of new functionality with the yayCom components.
15-17: Dependency addition is correctly implemented.The @pipedream/platform dependency is legitimate and properly versioned. This aligns with the usage of platform features like
DEFAULT_POLLING_SOURCE_TIMER_INTERVALandConfigurationErrorin the new components.components/yay_com/actions/get-phone-books/get-phone-books.mjs (1)
1-22: Well-implemented action following Pipedream conventions.The action correctly:
- Follows the standard Pipedream action structure
- Implements proper pluralization in the summary message
- Uses the yayCom app instance appropriately
- Includes appropriate metadata and documentation links
The implementation aligns with best practices for Pipedream components.
components/yay_com/sources/common/polling.mjs (2)
22-46: Solid polling implementation with proper deduplication.The
startEventmethod correctly implements:
- Deduplication by checking saved IDs
- Proper event emission with metadata
- Array size management using
slice(-100)to prevent indefinite growth- Optional maxItems limiting for controlled emission
This follows established polling patterns and prevents common issues like duplicate events and memory leaks.
51-55: Appropriate lifecycle hook implementation.The deploy hook correctly limits initial emission to 5 items, which is a good practice to avoid overwhelming users with historical data on first deployment.
components/yay_com/actions/create-outbound-call/create-outbound-call.mjs (2)
47-62: Excellent validation and data transformation logic.The implementation correctly:
- Combines SIP users and hunt groups into a unified targets array
- Validates that at least one target is provided using ConfigurationError
- Handles optional arrays gracefully with null coalescing
This prevents runtime errors and provides clear feedback to users.
64-76: Proper API call structure and response handling.The API call correctly:
- Uses snake_case for API fields (user_uuid, display_name)
- Passes the execution context for error handling
- Provides a clear summary message
- Returns the full response for downstream use
The implementation follows Pipedream action conventions.
components/yay_com/actions/get-documents/get-documents.mjs (1)
1-26: Consistent and well-implemented action.The implementation correctly follows the same pattern as other actions in this PR:
- Proper summary message with pluralization
- Consistent use of yayCom app instance
- Appropriate documentation links
- Standard Pipedream action structure
The implementation is solid and maintains consistency across the yayCom integration.
components/yay_com/yay_com.app.mjs (1)
87-87: ```shell
#!/bin/bashShow the top of the file to inspect axios import and usage
echo "=== File Header ==="
head -n 30 components/yay_com/yay_com.app.mjsSearch for axios import or require
echo -e "\n=== Searching for axios import ==="
rg -n "import axios" -A2 -B2 components/yay_com/yay_com.app.mjs
rg -n "const axios" -A2 -B2 components/yay_com/yay_com.app.mjs</details> </blockquote></details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| getItemId(contact) { | ||
| let name = `${contact.first_name} ${contact.last_name}`; | ||
| if (!name.trim()) { | ||
| name = contact.company_name; | ||
| } | ||
| return name; | ||
| }, |
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.
🛠️ Refactor suggestion
Handle edge case where contact has no identifying information.
The getItemId method could return an empty string or just spaces if both the name and company name are empty or contain only whitespace.
Add fallback handling for contacts without identifying information:
getItemId(contact) {
let name = `${contact.first_name} ${contact.last_name}`;
if (!name.trim()) {
name = contact.company_name;
}
+ if (!name || !name.trim()) {
+ name = contact.id || contact.uuid || `contact-${Date.now()}`;
+ }
return name;
},📝 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.
| getItemId(contact) { | |
| let name = `${contact.first_name} ${contact.last_name}`; | |
| if (!name.trim()) { | |
| name = contact.company_name; | |
| } | |
| return name; | |
| }, | |
| getItemId(contact) { | |
| let name = `${contact.first_name} ${contact.last_name}`; | |
| if (!name.trim()) { | |
| name = contact.company_name; | |
| } | |
| if (!name || !name.trim()) { | |
| name = contact.id || contact.uuid || `contact-${Date.now()}`; | |
| } | |
| return name; | |
| }, |
🤖 Prompt for AI Agents
In components/yay_com/sources/new-contact-added/new-contact-added.mjs around
lines 30 to 36, the getItemId method may return an empty or whitespace-only
string if both the contact's first and last names and the company name are empty
or whitespace. To fix this, add a fallback return value such as a default string
like "Unknown Contact" or a unique identifier when no valid name or company name
is present, ensuring the method always returns a meaningful non-empty string.
luancazarine
left a 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.
Hi @GTFalcao, LGTM! Ready for QA!
Closes #16960
Note: this API was difficult to work with. The components suggested in the original ticket are mostly not applicable and I've created some that are available in the API. Also, some features do not seem to be available with the provided plan/credentials.
Summary by CodeRabbit
New Features
Improvements
Chores