Skip to content

Conversation

@GTFalcao
Copy link
Collaborator

@GTFalcao GTFalcao commented Jun 27, 2025

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

    • Added an action to initiate outbound calls to a specified destination.
    • Introduced actions to retrieve all available documents and phone books.
    • Implemented a new event source that emits when a new contact is added to a phone book.
    • Added polling support for periodic data fetching and event emission.
  • Improvements

    • Enhanced integration with dynamic option loading and expanded API communication capabilities.
  • Chores

    • Updated package version and added a new dependency for platform support.

@vercel
Copy link

vercel bot commented Jun 27, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

3 Skipped Deployments
Name Status Preview Comments Updated (UTC)
docs-v2 ⬜️ Ignored (Inspect) Jun 27, 2025 9:39pm
pipedream-docs ⬜️ Ignored (Inspect) Jun 27, 2025 9:39pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored (Inspect) Jun 27, 2025 9:39pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jun 27, 2025

Walkthrough

This 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

File(s) Change Summary
components/yay_com/actions/create-outbound-call/create-outbound-call.mjs Added new action to initiate outbound calls with user, destination, display name, SIP users, and hunt groups.
components/yay_com/actions/get-documents/get-documents.mjs Added new action to retrieve all available documents via yayCom API.
components/yay_com/actions/get-phone-books/get-phone-books.mjs Added new action to fetch all phone books from yayCom.
components/yay_com/sources/common/polling.mjs Added a reusable polling source module for periodic fetching and deduplication.
components/yay_com/sources/new-contact-added/new-contact-added.mjs Added new source to emit events when a new contact is added to a phone book.
components/yay_com/yay_com.app.mjs Implemented yayCom app with prop definitions and multiple API interaction methods.
components/yay_com/package.json Updated version to 0.1.0 and added dependency on @pipedream/platform.

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
Loading
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
Loading

Assessment against linked issues

Objective Addressed Explanation
Implement yayCom integration with actions: make-call, send-sms, create-contact (#16960) Only make-call (as create-outbound-call) is partially implemented; send-sms and create-contact are missing.
Implement webhook sources: new-call-instant, new-voicemail-instant, new-sms-instant (#16960) No webhook sources for calls, voicemail, or SMS are present in this update.
Implement fetching of phone books and documents (#16960)
Implement polling source for new contacts (#16960)

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Addition of polling source module for generic deduplication (components/yay_com/sources/common/polling.mjs) The generic polling source is a utility not explicitly requested in the linked issue.
Addition of get-documents action (components/yay_com/actions/get-documents/get-documents.mjs) The linked issue does not mention document retrieval as a required action.

Poem

In the warren where code bunnies dwell,
New calls and contacts hop in as well.
With phone books fetched and docs in tow,
Outbound rings begin to flow.
🐇✨
Version bumps and polling cheer,
More yayCom magic—rabbits engineer!

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

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

components/yay_com/actions/create-outbound-call/create-outbound-call.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

components/yay_com/actions/get-phone-books/get-phone-books.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

components/yay_com/actions/get-documents/get-documents.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

  • 3 others
✨ Finishing Touches
  • 📝 Generate Docstrings

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 uuid parameter appears redundant since phoneBookId is already being passed as a path parameter.

Consider whether the uuid parameter 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 _makeRequest method 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 uuid parameter in the params object appears redundant since phoneBookId is 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

📥 Commits

Reviewing files that changed from the base of the PR and between 9ff0a29 and 251cef7.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is 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_INTERVAL and ConfigurationError in 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 startEvent method 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/bash

Show the top of the file to inspect axios import and usage

echo "=== File Header ==="
head -n 30 components/yay_com/yay_com.app.mjs

Search 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 -->

Comment on lines +30 to +36
getItemId(contact) {
let name = `${contact.first_name} ${contact.last_name}`;
if (!name.trim()) {
name = contact.company_name;
}
return name;
},
Copy link
Contributor

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.

Suggested change
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.

Copy link
Collaborator

@luancazarine luancazarine left a 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!

@GTFalcao GTFalcao merged commit 35607f0 into master Jul 1, 2025
11 checks passed
@GTFalcao GTFalcao deleted the 16960-yaycom branch July 1, 2025 17:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Components] yay_com

3 participants